feat(dashboard): provider badge on task cards + timeline rows (#955) #983
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!983
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "dev/955"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #955
Summary
<ProviderBadge>component — colour-coded pill (claude-code / cursor / deepseek / ollama /?) rendered next to the model string on every task surfacetask_history.providercolumn (SQLite migrationDEFAULT 'anthropic'), threads it end-to-end frombuildAgentRequest→getOrCreateRecord→onFinish→persistTask→/history+/history/:id+ board cardsprovider_state.active_provider)provider+ token-count fields inEXPECTED_KEYSTest plan
just qa— 3 316 tests pass, 0 failures; Biome format + lint clean; typecheck clean across all 4 packages?chip🤖 Generated with Claude Code
test-gap: AC requires "Migration test: a fixture row without
providermigrates toclaude-codeand renders correctly." The diff addsprovidertoEXPECTED_KEYSinhistory-contract.test.tsbut has no test that inserts a raw row lacking the column, runs the migration, and asserts the default resolves to'anthropic'(rendered as "claude-code"). Add that case.behavior:
apps/web/src/routes/$locale/agents.$type.$instance.tsxline ~231 passesdata-testid="agent-instance-provider-badge"to<ProviderBadge>, butProviderBadgePropsonly declaresprovider,model,className— the prop is silently discarded and never reaches the DOM span. Remove the dead prop or add[key: \data-${string}`]: string | undefinedtoProviderBadgeProps` and forward via spread.9d6bc056258677748cf5Both round-1 findings are still open:
test-gap: AC explicitly requires "Migration test: a fixture row without
providermigrates toclaude-codeand renders correctly." Still absent.history-contract.test.tsonly addsprovidertoEXPECTED_KEYS; there is no test that inserts a raw row lacking the column, applies the migration, and asserts the default resolves to'anthropic'/ renders as "claude-code".behavior:
apps/web/src/routes/$locale/agents.$type.$instance.tsx~L231 still passesdata-testid="agent-instance-provider-badge"to<ProviderBadge>, butProviderBadgePropsonly declaresprovider,model,className— the prop is silently discarded, never forwarded to the DOM span. Either remove the dead prop or add[key: \data-${string}`]: string | undefinedtoProviderBadgePropsand spread it onto the outer`.Also: PR currently has
mergeable: false(conflicts) — please rebase on main.8677748cf5de5a35da62Provider threaded correctly end-to-end; migration is safe; snapshot + contract tests cover all cases. CI green.