feat(web): /specs route — list + markdown editor (no AI drawer) #1118
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
1 participant
Notifications
Due date
No due date set.
Blocks
Depends on
#1119 feat(web): architect-backed AI drawer on /specs/$specName
charles/claude-hooks
#1120 feat(web): breakdown toolbar + open-in-chat on /specs/$specName
charles/claude-hooks
#1121 refactor(web): /workspace chat-only — strip spec mode, drop ?spec/?task params
charles/claude-hooks
#1117 feat(web): nav split — add chat + specs entries, drop merged workspace label
charles/claude-hooks
Reference
charles/claude-hooks#1118
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
As an operator,
I want
/specsto list spec files and/specs/$specNameto open a focused markdown editor,so that spec authoring lives on its own page instead of sharing /workspace.
Replaces the redirect-only
specs.tsx/specs.index.tsx/specs.$specName.tsxshells. AI drawer + breakdown toolbar land in follow-up stories.Acceptance criteria
List (
/specs)routes/specs.index.tsxrenders a list ofspecs/*.mdentries fetched viafetchArchitectFiles(repo)filtered byroot === "specs".specs/<kebab>.mdthen navigates to/specs/<name>.?repo=<o/n>selector mirrors the workspace pattern./specs/$specName.Editor (
/specs/$specName)routes/specs.$specName.tsxmountsSpecEditorwith body loaded viafetchArchitectFileContent.saveSpecand surfacesrole="status" aria-live="polite"toast.Base UI Dialogconfirm.Cmd+S/Ctrl+Ssaves (added to a newuseSpecsKeymaphook).Layout wrapper
routes/specs.tsxreplaces the redirect stub with an<Outlet />shell;validateSearchacceptsrepo.AppShellchrome rendered on both list and editor.Tests
specs.test.tsxcovers: list renders rows, click navigates to editor; editor loads body, save firesPUT /architect/files; unsaved-changes guard fires on dirty navigate.workspace.test.tsx(still passes pre-split).Out of scope
/workspace(story wsplit-5).Dependencies
/specsfirst).References
docs/specs/workspace-split.md§ Surfaces > /specs.