3.9 KiB
3.9 KiB
id, title, status, wave, depends_on, plan, requirements, acceptance_criteria, system_design
| id | title | status | wave | depends_on | plan | requirements | acceptance_criteria | system_design | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01-shared-task-links | Shared task links and dependency fix | done | 1 | plan.md |
|
|
|
Task 01: Shared task links and dependency fix
Summary
Centralize task anchors and repair both dependency directions with the existing router.
In scope
- Add TaskLink and compatible linkToTask options; preserve raw IDs and query context.
- Add AppLink onNavigated within the successful guard callback.
- Switch DependencyRow and pass a close callback; scope 44px minimum rows to touch.
Out of scope
Backend behavior and unrelated navigation redesign.
Acceptance
- Failing regression: clicking a dependency row is intercepted and opens
/t/b; today its native click is not prevented. - Cover both directions, canonical URL/encoding, ordinary and keyboard activation, modified/middle clicks, explicit targets, prevented clicks, guard rejection/acceptance, and callback timing.
- Desktop stays compact; phone drawer closes only on committed same-tab navigation.
ASCII UI preview
UI-01: Dependency navigation, expanded state (AC .1, .4, .5, .6).
Desktop: [blocks 2] -> Popover: [Task B | REVIEW] -> Task B workbench
Phone: [blocks 2] -> Drawer:
Dependencies [Close]
[Task B | REVIEW] (44px+ tap row)
[Task C | CREATED] (list scrolls)
-> Task B workbench; drawer closes
Before: selecting a row loads a new document through /tasks/:id.
After: selecting a row commits SPA navigation to /t/:id.
Control order, touch targets, and successful-navigation dismissal are required. Spacing is illustrative. Retain existing localized labels and status displays. Cancelled navigation keeps the disclosure; modified clicks keep the current page.
See full preview.
Verification
Run from repository root. Install once with (cd apps && pnpm install --frozen-lockfile) if this worktree lacks dependencies.
(cd apps/web && pnpm exec vitest run lib/links.test.ts components/routing/app-link.test.tsx components/routing/task-link.test.tsx components/task/task-dependency-chip.test.tsx)
(cd apps/web && pnpm run typecheck)
(cd apps/web && pnpm exec eslint lib/links.ts components/routing/app-link.tsx components/routing/task-link.tsx components/task/task-dependency-chip.tsx --max-warnings 0)
Files likely touched
apps/web/lib/links.tsapps/web/lib/links.test.tsapps/web/components/routing/app-link.tsxapps/web/components/routing/app-link.test.tsxapps/web/components/routing/task-link.tsx (new)apps/web/components/routing/task-link.test.tsx (new)apps/web/components/task/task-dependency-chip.tsxapps/web/components/task/task-dependency-chip.test.tsx
Dependencies
None.
Risks
Preserve existing route guards, query context, and browser-native alternate-tab behavior.
Parallelism
sequential
Inputs
- Requirements
- System design
- Existing AppLink, linkToTask, local ESLint rules, and task dependency tests.
Results
Completed on 2026-09-21.
- The initial focused RED run failed on the six expected pre-fix behaviors: canonical URL construction, AppLink callback timing, dependency interception, disclosure dismissal, and touch-row sizing.
- The focused Vitest suite passed 4 files and 32 tests after implementation.
- Review follow-up added explicit blocker-cancellation coverage; the focused suite now passes 4 files and 33 tests.
pnpm run typecheckpassed.- Focused ESLint passed with zero warnings.