feat(playbooks): document reminders at 1:1 with workflows - #336
Conversation
Playbooks listed workflows only, so a category that is right beside them in the composer had no page at all. Every reminder now has a card and a detail route, and one filter searches both catalogues - a reader should not have to know which category their subject lives in before they can search for it. Serves the reminder body. Withholding it never protected anything: a send carries the reminder ID ONLY and the server resolves the body again at submit time, exactly as decision 21 established for injectors. Hiding it bought nothing and denied the reader the read-before-send guarantee the workflow injector already gave them. Deletes the reminder-to-workflow join. It pointed a reminder at a workflow merely sharing its subject, so once the command catalogue was cut ten of twelve reminders had no link. The composer now links a reminder to its own page - including one this build has never heard of, which groups under Other and still resolves from the live catalogue, because a newer server's reminder being the only undocumented thing on the page is the failure this removes. Extracts the reminder grouping into client/lib/reminderCatalogue.ts so the picker and the page cannot disagree about where a reminder belongs. Named to stay clear of client/lib/reminders.ts, the dual-copy-tested sentinel splitter. A missing reminder may be scope_repository-scoped and genuinely absent for the selected project, so the not-found state says so rather than calling the id invalid.
agent-skills/ is now a retirement notice, a LICENSE and a CREDITS file. The comment still claimed the allowlist existed because Playbooks.tsx compiled that content into the SPA, which stopped being true when client/lib/playbooks.ts was deleted. The files stay allowlisted so attribution travels with a snapshot of the tree, which is a different reason and worth saying.
PR screenshotsNo screenshots requested. Add this to the PR description: ```screenshots
/?directory=/tmp/mock-project
full:/sessions/ses_mock_done?directory=/tmp/mock-project |
Wrap-up — command retirement + Playbooks parityMerged and deployed. This closes the arc that began with #327.
Verification
Nothing red. Nothing skipped that I chose to skip. Live state after redeploy
Two things a reviewer should know
The 5 former Open decisionsNone blocking. One deliberate follow-up: release-please will cut the version bump on its next run; SAFE TO MERGE — already merged; |
Closes the parity gap the command retirement left behind.
The problem
Playbooks listed workflows only. Reminders sit right beside them in the composer, and had no page at all. Worse, the composer's per-reminder "details" link pointed at a workflow that merely shared its subject — so once the command catalogue was cut, ten of twelve reminders had no link anywhere.
What changed
/playbooks/remindersand/playbooks/reminders/:id, added toisKnownAppRoute.GET /api/remindersnow servesbody. Withholding it never protected anything: a send carries the reminder ID only and the server resolves the body again at submit time, exactly as decision 21 established for workflow injectors. Hiding it bought nothing and denied the reader the same read-before-send guarantee the injector already gave.client/lib/reminderWorkflows.tsis deleted. The composer now links a reminder to its own page.client/lib/reminderCatalogue.ts, shared by the picker and the page so the two cannot disagree. Deliberately not namedreminders.ts— that is the dual-copy-tested sentinel splitter.Two judgement calls worth reviewing
An unrecognized reminder still gets a link. A test previously asserted the opposite. The detail page resolves from the live catalogue, so a newer server's reminder groups under
Otherand its page renders — being the one undocumented thing on the page is the exact failure this removes. I inverted the assertion rather than preserving it.A missing reminder is reported as scope, not as invalid. A
scope_repositoryreminder is genuinely absent for another project, so the not-found copy says that instead of claiming the id is wrong.Verification
npm run typecheck· 1128 unit · 424 e2e · 2 preview-simulator — all green locally on mergedmain. Five new e2e specs cover the reminder catalogue, cross-catalogue search, the detail page, the scope-honest not-found state, and close-to-catalogue.