UI-3: Promote Specs to top-level nav (/specs + /specs/:specName) #399

Closed
opened 2026-04-26 19:59:12 +00:00 by claude-desktop · 0 comments
Collaborator

As an operator, I want Specs to be a first-class top-nav entry with a dedicated list page and editor, so that I can discover, draft, and dispatch specs without first navigating to Planner and expanding a sidebar.

Why

Specs are a first-class entity (create / edit / dispatch via /breakdown), but today they live as a collapsible section in the Planner sidebar. The legacy /specs route is a pure redirect to /planner?spec=..., which is a clear sign the IA wasn't settled. UX audit 2026-04-26 calls this out: specs should be visible in the top nav.

Acceptance criteria

New routes

  • apps/web/src/routes/specs.tsx — empty layout wrapper (mirrors monitor.tsx / planner.tsx / flows.tsx pattern)
  • apps/web/src/routes/specs.index.tsx — full-page Specs list. Reuses the existing list rendering from planner.index.tsx (~L409-437), extracted into a shared SpecsList component
  • apps/web/src/routes/specs.$specName.tsx — full-page Spec editor. Reuses the existing SpecEditor panel from Planner (~L466-532) extracted into a shared component
  • Editor toolbar surfaces both flows currently in Planner: "Draft with foreman" and "Breakdown" (same dispatch path as today)

Top nav

  • Add Specs link to the top nav (location: between Planner and Flows, or wherever the operator deems natural — the order is up to the implementer)
  • Active-route highlighting works on /specs and /specs/$specName

Planner sidebar — keep as quick-jump

  • Specs sidebar in Planner stays for in-flight quick access, but each entry now links to /specs/$specName (not setting ?spec= inline)
  • Tooltip on the sidebar header: "Quick jump — full editor at /specs"

Backward compatibility

  • /planner?spec=... keeps working (Planner editor panel still renders the spec inline if param present) for one release, then deprecation log
  • /specs?name=... redirect (current behaviour) becomes a redirect to /specs/$name
  • Bookmarked URLs continue to function

Tests

  • specs.test.tsx covers: list renders all specs, click → editor route, editor saves changes, "Breakdown" button dispatches
  • Existing Planner tests still pass with sidebar links pointing at /specs/$specName
  • bun run qa clean

Docs

  • Update docs/breakdown.md if it links to /planner?spec=
  • Update apps/web/CLAUDE.md if any new conventions emerge

Out of scope

  • Removing the sidebar from Planner (it stays as quick-jump)
  • Cross-spec diff / version history (those would be NF-UI-9 territory if desired for specs)
  • Changing the breakdown dispatch flow itself

References

  • UX audit 2026-04-26
  • apps/web/src/routes/planner.index.tsx L377-438 (specs sidebar), L466-532 (spec editor)
  • apps/web/src/routes/specs.tsx — current pure-redirect route to be replaced
  • docs/breakdown.md — operator runbook
As an operator, I want Specs to be a first-class top-nav entry with a dedicated list page and editor, so that I can discover, draft, and dispatch specs without first navigating to Planner and expanding a sidebar. ## Why Specs are a first-class entity (create / edit / dispatch via `/breakdown`), but today they live as a collapsible section in the Planner sidebar. The legacy `/specs` route is a pure redirect to `/planner?spec=...`, which is a clear sign the IA wasn't settled. UX audit 2026-04-26 calls this out: specs should be visible in the top nav. ## Acceptance criteria ### New routes - [ ] `apps/web/src/routes/specs.tsx` — empty layout wrapper (mirrors `monitor.tsx` / `planner.tsx` / `flows.tsx` pattern) - [ ] `apps/web/src/routes/specs.index.tsx` — full-page Specs list. Reuses the existing list rendering from `planner.index.tsx` (~L409-437), extracted into a shared `SpecsList` component - [ ] `apps/web/src/routes/specs.$specName.tsx` — full-page Spec editor. Reuses the existing `SpecEditor` panel from Planner (~L466-532) extracted into a shared component - [ ] Editor toolbar surfaces both flows currently in Planner: **"Draft with foreman"** and **"Breakdown"** (same dispatch path as today) ### Top nav - [ ] Add **Specs** link to the top nav (location: between Planner and Flows, or wherever the operator deems natural — the order is up to the implementer) - [ ] Active-route highlighting works on `/specs` and `/specs/$specName` ### Planner sidebar — keep as quick-jump - [ ] Specs sidebar in Planner stays for in-flight quick access, but each entry now links to `/specs/$specName` (not setting `?spec=` inline) - [ ] Tooltip on the sidebar header: "Quick jump — full editor at /specs" ### Backward compatibility - [ ] `/planner?spec=...` keeps working (Planner editor panel still renders the spec inline if param present) for one release, then deprecation log - [ ] `/specs?name=...` redirect (current behaviour) becomes a redirect to `/specs/$name` - [ ] Bookmarked URLs continue to function ### Tests - [ ] `specs.test.tsx` covers: list renders all specs, click → editor route, editor saves changes, "Breakdown" button dispatches - [ ] Existing Planner tests still pass with sidebar links pointing at `/specs/$specName` - [ ] `bun run qa` clean ### Docs - [ ] Update `docs/breakdown.md` if it links to `/planner?spec=` - [ ] Update `apps/web/CLAUDE.md` if any new conventions emerge ## Out of scope - Removing the sidebar from Planner (it stays as quick-jump) - Cross-spec diff / version history (those would be NF-UI-9 territory if desired for specs) - Changing the breakdown dispatch flow itself ## References - UX audit 2026-04-26 - `apps/web/src/routes/planner.index.tsx` L377-438 (specs sidebar), L466-532 (spec editor) - `apps/web/src/routes/specs.tsx` — current pure-redirect route to be replaced - `docs/breakdown.md` — operator runbook
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks#399
No description provided.