[Air #1390] feat: fold Stream Deck plugin design rationale into README - #1452
Conversation
Move the plugin's design rationale in-tree so the README no longer defers architecture and design decisions to the pre-migration repository's planning document, a dependency on a repository slated for retirement after the sdk's first npm publish. - New README Design section covers the *why*: a stateless controller, canonical verbs over a command relay, one shared selection, keys-commit/dials-review hardware mapping, canvas-owned composer state, and why gate approval is never silent. - Drop all PLAN.md pointers and the external repo name from committed prose; provenance survives in the History section in codev's own terms. - readme-design.test.ts pins the invariant against regression.
|
Integration review (streamdeck architect) — APPROVE. The section is why, not a second feature list, which is the thing this issue could easily have gotten wrong. It argues four decisions — stateless controller, canonical verbs over the relay, one shared selection, keys-commit/dials-review — and each is argued from consequence rather than asserted. The dependency the issue existed to kill is gone: no pointer to an external planning document, and provenance now reads in codev's own terms in History (imported under #1347 at Claims verified against the code, since the real risk in a reconstructed rationale is confident inaccuracy rather than bad prose:
By-product worth fixing separately (not in this PR): On the consultation: this lane ran without a CMAP pass. To be precise about provenance, since it has been attributed to me: I did not instruct a skip when scoping — the builder skipped it and I am ratifying that now, deliberately, rather than retroactively. The reasoning: for docs-only prose the failure mode is factual drift from the system it describes, and the check that catches that is verifying each claim against the code, which I have done above and recorded. Nothing here touches executable behaviour. That said, the general question of when AIR requires a consult is genuinely unresolved (#1359) and this lane is now a datapoint there, not a precedent I would extend to any PR that touches code. |
Summary
apps/streamdeck/README.mddeferred the plugin's architecture and design decisions to the pre-migration repository's planning document. This folds that rationale in-tree as a new Design section so the README no longer depends on a repository slated for retirement (gated on the sdk's first npm publish).Closes #1390
What Changed
## Designsection in the README covering the why, reconstructed from the system as it actually ships (the README,store.ts/plugin.ts,codev/plans/1347-*,codev/reviews/1347-*, and arch.md's Spec 1410 coherence notes) rather than transcribed from the external planning doc:PLAN.mdpointers (intro, Status/roadmap, History) and the external repo name/URL from committed prose. Provenance survives in the History section, described in codev's own terms (commit77be3d0,packages/streamdeck, issues Migrate the Stream Deck plugin into the monorepo as apps/streamdeck, consuming @cluesmith/codev-sdk #1347/Introduce packages/codev-sdk: client SDK for Tower (server/client dependency isolation) #1189 retained as codev's reference terms).readme-design.test.ts(new) pins the invariant: a Design section exists, noPLAN.mddeferral, no external repo name, and provenance stays in History. Mirrors the existingvendored-ui-lib.test.tsdoc-invariant pattern.Key Decisions
arch.mdsubsection). Per the architect's steer: co-located with the code and free of the COLD arch.md hot/cold tier discipline.Test Plan
readme-design.test.ts, 4 cases)pnpm --filter @cluesmith/codev-sdk build && ...streamdeck check-types)pnpm --filter @cluesmith/codev-streamdeck test: 166/166 across 9 files)Review Notes
Documentation change plus a doc-invariant test; no runtime code touched. Focus review on whether the Design section's why matches the shipped behavior and reads as rationale rather than a second feature list.