98 lines
3.4 KiB
Markdown
98 lines
3.4 KiB
Markdown
---
|
|
id: "01-refresh-workflow-step-badges"
|
|
title: "Refresh workflow-step badges"
|
|
status: done
|
|
wave: 1
|
|
depends_on: []
|
|
plan: "plan.md"
|
|
requirements:
|
|
- REQ-UI-COMMAND-PANEL-TASK-ACTIVITY-001
|
|
acceptance_criteria:
|
|
- AC-UI-COMMAND-PANEL-TASK-ACTIVITY-001.4
|
|
- AC-UI-COMMAND-PANEL-TASK-ACTIVITY-001.5
|
|
- AC-UI-COMMAND-PANEL-TASK-ACTIVITY-001.6
|
|
- AC-UI-COMMAND-PANEL-TASK-ACTIVITY-001.8
|
|
system_design:
|
|
- ../../specs/ui/system-design/command-panel-task-activity-icons.md
|
|
---
|
|
|
|
# Task 01: Refresh Workflow-Step Badges
|
|
|
|
## Summary
|
|
|
|
Make each command-panel task result derive its workflow-step badge from the
|
|
same timestamp-accepted task projection used by its sidebar-parity icon.
|
|
|
|
## In scope
|
|
|
|
- Return the effective workflow-step ID from
|
|
`resolveTaskResultActivity`.
|
|
- Use that ID for the existing `stepMap` badge lookup.
|
|
- Add RED-GREEN-REFACTOR component coverage for newer and stale live steps.
|
|
- Extend the desktop live-move command-panel scenario and retain the mobile
|
|
parity assertions.
|
|
|
|
## Out of scope
|
|
|
|
- Backend or WebSocket changes.
|
|
- Search ranking, badge styling, navigation, or row geometry changes.
|
|
- A new placement freshness policy.
|
|
|
|
## Acceptance
|
|
|
|
- A newer accepted live task placement updates the open command-panel badge
|
|
without a new search.
|
|
- A stale live placement cannot overwrite the HTTP placement.
|
|
- The badge keeps its current name/color presentation and the result remains
|
|
one selectable row on desktop and phone layouts.
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
cd apps/web && pnpm exec vitest run components/command-panel-task-activity.test.tsx components/command-panel-content-search.test.tsx
|
|
cd apps/web && pnpm run typecheck
|
|
cd apps/web && pnpm exec eslint --max-warnings 0 components/command-panel-results.tsx lib/commands/task-result-activity.ts components/command-panel-task-activity.test.tsx
|
|
cd apps/web && pnpm run i18n:check
|
|
cd apps/web && pnpm e2e:run tests/command-panel.spec.ts -- --grep "workflow step badge|task activity icon"
|
|
cd apps/web && pnpm e2e:run --project mobile-chrome tests/search/mobile-command-palette-scopes.spec.ts -- --grep "task activity icon|palette scope strip"
|
|
python3 scripts/lint-spec-files.py --all
|
|
git diff --check -- docs/specs docs/plans apps/web
|
|
```
|
|
|
|
## Files likely touched
|
|
|
|
- `apps/web/lib/commands/task-result-activity.ts`
|
|
- `apps/web/components/command-panel-results.tsx`
|
|
- `apps/web/components/command-panel-task-activity.test.tsx`
|
|
- `apps/web/e2e/tests/command-panel.spec.ts`
|
|
- `apps/web/e2e/tests/search/mobile-command-palette-scopes.spec.ts`
|
|
|
|
## Dependencies
|
|
|
|
None. The live Kanban projection, step map, and command-panel result wiring
|
|
already exist.
|
|
|
|
## Risks
|
|
|
|
- The implementation must not bypass `currentLiveTask` or revive an older
|
|
search placement when a live projection explicitly clears activity.
|
|
- The desktop test must wait for the WebSocket-backed result rerender.
|
|
|
|
## Parallelism
|
|
|
|
`sequential`
|
|
|
|
## Inputs
|
|
|
|
- `REQ-UI-COMMAND-PANEL-TASK-ACTIVITY-001.4`, `.5`, `.6`, and `.8`.
|
|
- `docs/specs/ui/system-design/command-panel-task-activity-icons.md`.
|
|
- `docs/decisions/2026-08-17-separate-task-activity-from-summary-freshness.md`.
|
|
- Existing command-panel activity and workflow-step badge tests.
|
|
|
|
## Results
|
|
|
|
RED reproduced the stale badge before the fix. The resolver now exposes the
|
|
timestamp-accepted workflow-step ID and the result row uses it for the existing
|
|
step badge. Focused Vitest, typecheck, ESLint, i18n, desktop Chromium E2E,
|
|
mobile Chrome E2E, specification lint, and diff checks passed. No blockers.
|