devrites 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/.claude-plugin/marketplace.json +24 -0
  2. package/.claude-plugin/plugin.json +43 -0
  3. package/CHANGELOG.md +391 -0
  4. package/LICENSE +56 -0
  5. package/NOTICE.md +18 -0
  6. package/README.md +582 -0
  7. package/SECURITY.md +193 -0
  8. package/bin/devrites.mjs +100 -0
  9. package/docs/architecture.md +272 -0
  10. package/docs/cli-mcp.md +57 -0
  11. package/docs/command-map.md +143 -0
  12. package/docs/flow.md +360 -0
  13. package/docs/release.md +29 -0
  14. package/docs/skills.md +214 -0
  15. package/docs/usage.md +325 -0
  16. package/install.sh +359 -0
  17. package/mcp/devrites-mcp.mjs +103 -0
  18. package/pack/.claude/agents/devrites-code-reviewer.md +50 -0
  19. package/pack/.claude/agents/devrites-doubt-reviewer.md +55 -0
  20. package/pack/.claude/agents/devrites-frontend-reviewer.md +52 -0
  21. package/pack/.claude/agents/devrites-performance-reviewer.md +47 -0
  22. package/pack/.claude/agents/devrites-plan-reviewer.md +79 -0
  23. package/pack/.claude/agents/devrites-security-auditor.md +53 -0
  24. package/pack/.claude/agents/devrites-simplifier-reviewer.md +75 -0
  25. package/pack/.claude/agents/devrites-slice-wright.md +181 -0
  26. package/pack/.claude/agents/devrites-spec-reviewer.md +72 -0
  27. package/pack/.claude/agents/devrites-strategy-reviewer.md +62 -0
  28. package/pack/.claude/agents/devrites-test-analyst.md +47 -0
  29. package/pack/.claude/hooks/devrites-a1-guard.sh +81 -0
  30. package/pack/.claude/hooks/devrites-allow.sh +44 -0
  31. package/pack/.claude/hooks/devrites-cursor.sh +28 -0
  32. package/pack/.claude/hooks/devrites-orient.sh +53 -0
  33. package/pack/.claude/hooks/devrites-redwatch.sh +39 -0
  34. package/pack/.claude/hooks/devrites-refresh-indexes.sh +127 -0
  35. package/pack/.claude/hooks/devrites-reviewer-readonly.sh +28 -0
  36. package/pack/.claude/hooks/devrites-statusline.sh +18 -0
  37. package/pack/.claude/hooks/devrites-stop-gate.sh +45 -0
  38. package/pack/.claude/hooks/devrites-wright-scope.sh +35 -0
  39. package/pack/.claude/hooks/hooks.json +52 -0
  40. package/pack/.claude/rules/README.md +48 -0
  41. package/pack/.claude/rules/afk-hitl.md +245 -0
  42. package/pack/.claude/rules/agents.md +98 -0
  43. package/pack/.claude/rules/anti-patterns.md +48 -0
  44. package/pack/.claude/rules/code-review.md +38 -0
  45. package/pack/.claude/rules/coding-style.md +55 -0
  46. package/pack/.claude/rules/context-hygiene.md +97 -0
  47. package/pack/.claude/rules/core.md +119 -0
  48. package/pack/.claude/rules/development-workflow.md +40 -0
  49. package/pack/.claude/rules/documentation.md +27 -0
  50. package/pack/.claude/rules/error-handling.md +33 -0
  51. package/pack/.claude/rules/git-workflow.md +35 -0
  52. package/pack/.claude/rules/hooks.md +38 -0
  53. package/pack/.claude/rules/patterns.md +45 -0
  54. package/pack/.claude/rules/performance.md +27 -0
  55. package/pack/.claude/rules/prose-style.md +101 -0
  56. package/pack/.claude/rules/security.md +63 -0
  57. package/pack/.claude/rules/testing.md +88 -0
  58. package/pack/.claude/rules/tooling.md +72 -0
  59. package/pack/.claude/settings.json +53 -0
  60. package/pack/.claude/skills/devrites-api-interface/SKILL.md +45 -0
  61. package/pack/.claude/skills/devrites-audit/SKILL.md +73 -0
  62. package/pack/.claude/skills/devrites-browser-proof/SKILL.md +38 -0
  63. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +50 -0
  64. package/pack/.claude/skills/devrites-debug-recovery/reference/build-the-loop.md +47 -0
  65. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +17 -0
  66. package/pack/.claude/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
  67. package/pack/.claude/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  68. package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +31 -0
  69. package/pack/.claude/skills/devrites-doubt/SKILL.md +75 -0
  70. package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +96 -0
  71. package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +59 -0
  72. package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +116 -0
  73. package/pack/.claude/skills/devrites-frontend-craft/reference/fullstack.md +45 -0
  74. package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +215 -0
  75. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +59 -0
  76. package/pack/.claude/skills/devrites-frontend-craft/reference/shape.md +60 -0
  77. package/pack/.claude/skills/devrites-interview/SKILL.md +81 -0
  78. package/pack/.claude/skills/devrites-lib/SKILL.md +76 -0
  79. package/pack/.claude/skills/devrites-lib/scripts/analyze.sh +78 -0
  80. package/pack/.claude/skills/devrites-lib/scripts/check-acceptance.sh +75 -0
  81. package/pack/.claude/skills/devrites-lib/scripts/close-out.sh +47 -0
  82. package/pack/.claude/skills/devrites-lib/scripts/conventions.py +273 -0
  83. package/pack/.claude/skills/devrites-lib/scripts/coverage.sh +51 -0
  84. package/pack/.claude/skills/devrites-lib/scripts/devrites.sh +69 -0
  85. package/pack/.claude/skills/devrites-lib/scripts/doctor.sh +92 -0
  86. package/pack/.claude/skills/devrites-lib/scripts/evidence-fresh.sh +63 -0
  87. package/pack/.claude/skills/devrites-lib/scripts/footprint.sh +45 -0
  88. package/pack/.claude/skills/devrites-lib/scripts/learnings.sh +74 -0
  89. package/pack/.claude/skills/devrites-lib/scripts/mutation-gate.sh +52 -0
  90. package/pack/.claude/skills/devrites-lib/scripts/package-existence.sh +68 -0
  91. package/pack/.claude/skills/devrites-lib/scripts/preamble.sh +76 -0
  92. package/pack/.claude/skills/devrites-lib/scripts/progress.sh +103 -0
  93. package/pack/.claude/skills/devrites-lib/scripts/readiness.sh +62 -0
  94. package/pack/.claude/skills/devrites-lib/scripts/reconcile.sh +123 -0
  95. package/pack/.claude/skills/devrites-lib/scripts/resolve.sh +279 -0
  96. package/pack/.claude/skills/devrites-lib/scripts/stuck.sh +67 -0
  97. package/pack/.claude/skills/devrites-lib/scripts/test-integrity.sh +87 -0
  98. package/pack/.claude/skills/devrites-lib/scripts/tick-afk.sh +52 -0
  99. package/pack/.claude/skills/devrites-prose-craft/SKILL.md +105 -0
  100. package/pack/.claude/skills/devrites-prose-craft/reference/banned-phrases.md +95 -0
  101. package/pack/.claude/skills/devrites-prose-craft/reference/examples.md +88 -0
  102. package/pack/.claude/skills/devrites-prose-craft/reference/structures.md +134 -0
  103. package/pack/.claude/skills/devrites-refresh-indexes/SKILL.md +54 -0
  104. package/pack/.claude/skills/devrites-source-driven/SKILL.md +36 -0
  105. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +121 -0
  106. package/pack/.claude/skills/devrites-ux-shape/reference/brief-template.md +93 -0
  107. package/pack/.claude/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
  108. package/pack/.claude/skills/rite/SKILL.md +135 -0
  109. package/pack/.claude/skills/rite/reference/menu.md +32 -0
  110. package/pack/.claude/skills/rite-adopt/SKILL.md +83 -0
  111. package/pack/.claude/skills/rite-adopt/reference/adoption.md +58 -0
  112. package/pack/.claude/skills/rite-adopt/reference/anti-patterns.md +19 -0
  113. package/pack/.claude/skills/rite-autocomplete/SKILL.md +96 -0
  114. package/pack/.claude/skills/rite-autocomplete/reference/decision-policy.md +35 -0
  115. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +54 -0
  116. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +59 -0
  117. package/pack/.claude/skills/rite-build/SKILL.md +261 -0
  118. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +145 -0
  119. package/pack/.claude/skills/rite-build/reference/anti-patterns.md +25 -0
  120. package/pack/.claude/skills/rite-build/reference/checkpoint-protocol.md +149 -0
  121. package/pack/.claude/skills/rite-build/reference/evidence-standard.md +32 -0
  122. package/pack/.claude/skills/rite-build/reference/frontend-trigger.md +39 -0
  123. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +38 -0
  124. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +43 -0
  125. package/pack/.claude/skills/rite-build/reference/tdd.md +26 -0
  126. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +115 -0
  127. package/pack/.claude/skills/rite-define/SKILL.md +157 -0
  128. package/pack/.claude/skills/rite-define/reference/anti-patterns.md +25 -0
  129. package/pack/.claude/skills/rite-define/reference/gates.md +152 -0
  130. package/pack/.claude/skills/rite-define/reference/plan-template.md +65 -0
  131. package/pack/.claude/skills/rite-doctor/SKILL.md +50 -0
  132. package/pack/.claude/skills/rite-frame/SKILL.md +116 -0
  133. package/pack/.claude/skills/rite-frame/reference/failure-modes.md +68 -0
  134. package/pack/.claude/skills/rite-handoff/SKILL.md +95 -0
  135. package/pack/.claude/skills/rite-handoff/reference/handoff-template.md +34 -0
  136. package/pack/.claude/skills/rite-learn/SKILL.md +82 -0
  137. package/pack/.claude/skills/rite-plan/SKILL.md +82 -0
  138. package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +24 -0
  139. package/pack/.claude/skills/rite-plan/reference/dependency-graph.md +33 -0
  140. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +42 -0
  141. package/pack/.claude/skills/rite-plan/reference/slicing.md +52 -0
  142. package/pack/.claude/skills/rite-plan/reference/task-breakdown.md +34 -0
  143. package/pack/.claude/skills/rite-polish/SKILL.md +90 -0
  144. package/pack/.claude/skills/rite-polish/reference/anti-ai-slop.md +177 -0
  145. package/pack/.claude/skills/rite-polish/reference/anti-patterns.md +27 -0
  146. package/pack/.claude/skills/rite-polish/reference/backend-polish.md +80 -0
  147. package/pack/.claude/skills/rite-polish/reference/browser-polish-evidence.md +31 -0
  148. package/pack/.claude/skills/rite-polish/reference/code.md +85 -0
  149. package/pack/.claude/skills/rite-polish/reference/design-system-discovery.md +35 -0
  150. package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +109 -0
  151. package/pack/.claude/skills/rite-polish/reference/ui.md +136 -0
  152. package/pack/.claude/skills/rite-pressure-test/SKILL.md +43 -0
  153. package/pack/.claude/skills/rite-prototype/SKILL.md +87 -0
  154. package/pack/.claude/skills/rite-prove/SKILL.md +120 -0
  155. package/pack/.claude/skills/rite-prove/reference/anti-patterns.md +25 -0
  156. package/pack/.claude/skills/rite-prove/reference/browser-proof.md +26 -0
  157. package/pack/.claude/skills/rite-prove/reference/failure-triage.md +25 -0
  158. package/pack/.claude/skills/rite-prove/reference/proof-ladder.md +26 -0
  159. package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +30 -0
  160. package/pack/.claude/skills/rite-quick/SKILL.md +81 -0
  161. package/pack/.claude/skills/rite-resolve/SKILL.md +113 -0
  162. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +114 -0
  163. package/pack/.claude/skills/rite-review/SKILL.md +170 -0
  164. package/pack/.claude/skills/rite-review/reference/anti-patterns.md +32 -0
  165. package/pack/.claude/skills/rite-review/reference/cognitive-load.md +90 -0
  166. package/pack/.claude/skills/rite-review/reference/feature-scoped-review.md +26 -0
  167. package/pack/.claude/skills/rite-review/reference/five-axis-review.md +46 -0
  168. package/pack/.claude/skills/rite-review/reference/nielsen-heuristics.md +130 -0
  169. package/pack/.claude/skills/rite-review/reference/parallel-dispatch.md +62 -0
  170. package/pack/.claude/skills/rite-review/reference/performance-review.md +28 -0
  171. package/pack/.claude/skills/rite-review/reference/security-review.md +32 -0
  172. package/pack/.claude/skills/rite-seal/SKILL.md +183 -0
  173. package/pack/.claude/skills/rite-seal/reference/anti-patterns.md +27 -0
  174. package/pack/.claude/skills/rite-seal/reference/conventions-ledger.md +63 -0
  175. package/pack/.claude/skills/rite-seal/reference/final-evidence.md +72 -0
  176. package/pack/.claude/skills/rite-seal/reference/go-no-go.md +37 -0
  177. package/pack/.claude/skills/rite-seal/reference/parallel-dispatch.md +69 -0
  178. package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +30 -0
  179. package/pack/.claude/skills/rite-seal/reference/seal-template.md +36 -0
  180. package/pack/.claude/skills/rite-ship/SKILL.md +120 -0
  181. package/pack/.claude/skills/rite-ship/reference/anti-patterns.md +25 -0
  182. package/pack/.claude/skills/rite-ship/reference/close-out.md +31 -0
  183. package/pack/.claude/skills/rite-ship/reference/design-memory.md +120 -0
  184. package/pack/.claude/skills/rite-ship/reference/git-ship.md +42 -0
  185. package/pack/.claude/skills/rite-ship/reference/ship-template.md +33 -0
  186. package/pack/.claude/skills/rite-spec/SKILL.md +126 -0
  187. package/pack/.claude/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  188. package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +25 -0
  189. package/pack/.claude/skills/rite-spec/reference/interview-patterns.md +56 -0
  190. package/pack/.claude/skills/rite-spec/reference/investigation.md +64 -0
  191. package/pack/.claude/skills/rite-spec/reference/question-protocol.md +61 -0
  192. package/pack/.claude/skills/rite-spec/reference/references-intake.md +57 -0
  193. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +73 -0
  194. package/pack/.claude/skills/rite-spec/reference/spec-template.md +124 -0
  195. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +159 -0
  196. package/pack/.claude/skills/rite-status/SKILL.md +101 -0
  197. package/pack/.claude/skills/rite-temper/SKILL.md +119 -0
  198. package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +29 -0
  199. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +65 -0
  200. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +53 -0
  201. package/pack/.claude/skills/rite-temper/reference/significance.md +46 -0
  202. package/pack/.claude/skills/rite-temper/reference/strategy-template.md +90 -0
  203. package/pack/.claude/skills/rite-vet/SKILL.md +155 -0
  204. package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +29 -0
  205. package/pack/.claude/skills/rite-vet/reference/artifacts.md +135 -0
  206. package/pack/.claude/skills/rite-vet/reference/cross-model.md +41 -0
  207. package/pack/.claude/skills/rite-vet/reference/depth.md +53 -0
  208. package/pack/.claude/skills/rite-vet/reference/eng-lenses.md +48 -0
  209. package/pack/.claude/skills/rite-vet/reference/review-axes.md +167 -0
  210. package/pack/.claude/skills/rite-zoom-out/SKILL.md +75 -0
  211. package/package.json +68 -0
  212. package/scripts/build-release-tarball.sh +74 -0
  213. package/scripts/check-cross-refs.py +121 -0
  214. package/scripts/check-no-global-writes.sh +44 -0
  215. package/scripts/check-rule-uniqueness.sh +73 -0
  216. package/scripts/devrites-detect.sh +175 -0
  217. package/scripts/eval-runner.py +273 -0
  218. package/scripts/grade-feature.sh +104 -0
  219. package/scripts/install-lib.sh +83 -0
  220. package/scripts/pin.sh +166 -0
  221. package/scripts/render-eval-summary.py +48 -0
  222. package/scripts/run-evals.sh +149 -0
  223. package/scripts/run-outcome-evals.sh +49 -0
  224. package/scripts/scan-pack-security.py +209 -0
  225. package/scripts/scan-supply-chain-iocs.py +127 -0
  226. package/scripts/supply-chain-iocs.json +11 -0
  227. package/scripts/sync-version.sh +56 -0
  228. package/scripts/validate-frontmatter.py +149 -0
  229. package/scripts/validate-workflow-security.py +86 -0
  230. package/scripts/validate.sh +234 -0
  231. package/uninstall.sh +137 -0
  232. package/update.sh +196 -0
@@ -0,0 +1,69 @@
1
+ # Parallel review dispatch
2
+
3
+ How `/rite-review` and `/rite-seal` fan out the fresh-context review subagents under `.claude/agents/`. Loaded on demand by the calling skill — not a skill itself.
4
+
5
+ DevRites ships ten fresh-context review subagents under `.claude/agents/` (plus the write-capable `devrites-slice-wright`, which is not a reviewer). Eight are post-build reviewers used at the seal / multi-axis review; the other two are gate-specific and *not* part of the seal fan-out — `devrites-strategy-reviewer` is **pre-plan** (it judges the spec for `/rite-temper`) and `devrites-plan-reviewer` is **pre-build** (it judges the plan for `/rite-vet`). The seal and the multi-axis review need most of the post-build reviewers running **at the same time**, on the same workspace + diff, so the verdicts don't contaminate each other.
6
+
7
+ Pattern: delegate to specialized agents with isolated context, brief each one precisely, run them concurrently, reconcile on return.
8
+
9
+ ## When to use which subagent
10
+
11
+ | Subagent | Always | Conditional |
12
+ |---|---|---|
13
+ | `devrites-spec-reviewer` | `/rite-review` Spec axis; `/rite-seal` | — |
14
+ | `devrites-code-reviewer` | `/rite-review` Standards axis; `/rite-seal` | — |
15
+ | `devrites-test-analyst` | `/rite-seal` | — |
16
+ | `devrites-frontend-reviewer` | — | UI files in the diff |
17
+ | `devrites-security-auditor` | — | input / auth / data / external integrations / secrets in scope |
18
+ | `devrites-performance-reviewer` | — | perf budget in `spec.md` or visible regression risk |
19
+ | `devrites-doubt-reviewer` | — | a non-trivial decision is being stood up (called from `devrites-doubt`) |
20
+ | `devrites-simplifier-reviewer` | — | `/rite-polish` Phase 1 audit (called from `devrites-audit simplify`) |
21
+
22
+ ## Dispatch shape
23
+
24
+ For each chosen subagent, the caller uses the `Task` tool with this prompt shape:
25
+
26
+ ```
27
+ Audit the active DevRites feature.
28
+
29
+ Workspace: .devrites/work/<slug>/
30
+ Read (yourself, fresh context):
31
+ - spec.md (+ acceptance criteria)
32
+ - touched-files.md
33
+ - the git diff
34
+ - <any axis-specific files: decisions.md, evidence.md, references/...>
35
+
36
+ Before judging the diff, derive the expected behaviour from the spec
37
+ yourself, then compare it against what the code does. Anchor every finding
38
+ to file:line plus the spec criterion or command output that proves it —
39
+ an unanchored finding is a Suggestion at most. The order or length of the
40
+ diff is not evidence.
41
+
42
+ Apply your documented discipline. Return labeled findings (Critical /
43
+ Important / Suggestion / Nit / FYI) using your documented output format,
44
+ ONE FINDING PER LINE, cite file:line.
45
+
46
+ Feature scope only. No edits. Do not summarize or re-rank — the caller
47
+ reconciles.
48
+ ```
49
+
50
+ Rules:
51
+
52
+ - **One Task call per subagent.** Send them in a single message with multiple `Task` invocations so the runtime dispatches concurrently.
53
+ - **No cross-pollination.** Each subagent gets only its narrow brief and the workspace path. Do not pass another subagent's findings into a sibling's prompt — that recreates the masking problem.
54
+ - **No author context.** Do not include the caller's analysis or the user's framing of the change; the point is a fresh, adversarial read.
55
+ - **Feature scope only.** Each subagent must stay inside `touched-files.md` + the diff.
56
+
57
+ ## Reconciliation
58
+
59
+ When the subagents return:
60
+
61
+ 1. **Quote verbatim.** Place each subagent's findings under its own `## <axis>` heading in `review.md` / `seal.md`. Do not merge, re-rank, or summarize.
62
+ 2. **Surface contradictions explicitly.** "Spec axis says complete, Standards axis says untestable" is a finding, not noise. The caller decides at the gate.
63
+ 3. **Severity is the gate, not a score.** Sum the labels (`Critical / Important / Suggestion / Nit / FYI`) and apply the caller's gate (`/rite-seal` blocks on `Critical == 0`; `/rite-review` reports counts).
64
+ 4. **One scale.** All subagents use the same five-label scale (Critical / Important / Suggestion / Nit / FYI). Reject any subagent output that invents its own. **Exception:** `devrites-simplifier-reviewer` deliberately emits only Suggestion / Nit / FYI (it is non-blocking by design) — that is a valid subset of the scale, not an invented one; do not reject it during reconciliation.
65
+ 5. **Consensus roll-up (after the verbatim per-axis record).** Keep every axis's findings verbatim under its `## <axis>` heading (above), then add one deduped roll-up the gate reads: where **≥2 axes flag the same `file:line`**, raise it to the top and mark it *consensus* — independent corroboration raises confidence. A lone low-confidence finding with no `file:line` or evidence anchor drops out of the roll-up (it stays in its per-axis section). The roll-up reduces noise without hiding any axis — the verbatim sections are the audit trail; the roll-up is the actionable summary the gate acts on.
66
+
67
+ ## Fallback
68
+
69
+ If the `Task` tool is unavailable in the current environment, the caller runs the relevant subagent discipline **inline** in its own context and flags the result as a fallback (not an independent review). The seal weighs the fallback differently — see [`./risk-and-rollback.md`](./risk-and-rollback.md).
@@ -0,0 +1,30 @@
1
+ # Risk & rollback
2
+
3
+ Before GO, know how to undo the change and what could go wrong in production.
4
+
5
+ ## Risk scan
6
+ Rank risks; for each, note likelihood × impact and any mitigation:
7
+ - **Data**: schema changes, data migration, destructive operations, backfills.
8
+ - **Security**: new trust boundaries, auth/authz changes, secret handling, new deps.
9
+ - **Compatibility**: API contract changes, breaking changes for existing clients,
10
+ feature interactions.
11
+ - **Operational**: new external dependency, config/env requirements, rate limits.
12
+ - **UX**: changed flows users rely on; unverified UI.
13
+
14
+ ## Rollback plan (required for risky changes)
15
+ For each risky step, state how to back it out:
16
+ - **Migrations**: is there a reversible `down` / a documented manual revert? Is data
17
+ loss possible on rollback?
18
+ - **Feature flag**: can it be disabled without a deploy?
19
+ - **Revert boundary**: can the change be `git revert`-ed cleanly, or does it entangle
20
+ with other work?
21
+ - **Data**: is there a backup / a way to restore prior state?
22
+
23
+ ## Blocking rules
24
+ - A **destructive or data-migration change with no rollback plan** is a **NO-GO**.
25
+ - A new external dependency with no failure handling is at least **Important**.
26
+ - Record the chosen rollback path in `seal.md` → "Rollback / Recovery".
27
+
28
+ ## Destructive operations
29
+ Confirm any destructive step with the user before shipping. Verify backups exist where
30
+ relevant. Never treat an irreversible action as routine.
@@ -0,0 +1,36 @@
1
+ # `seal.md` template
2
+
3
+ Loaded on demand by `/rite-seal`. The seal writes this template (filled in) to `.devrites/work/<slug>/seal.md` as the durable record of the GO / NO-GO verdict.
4
+
5
+ ```markdown
6
+ # Seal: <Feature>
7
+
8
+ Verdict: GO / NO-GO
9
+
10
+ ## Acceptance Criteria
11
+ - [ ] <criterion> — evidence: <...>
12
+
13
+ ## Verification Evidence
14
+ <tests / build / lint summary>
15
+
16
+ ## Browser Evidence
17
+ <summary | n/a>
18
+
19
+ ## Risks
20
+ <ranked>
21
+
22
+ ## Blockers
23
+ <must-fix before ship>
24
+
25
+ ## Non-blocking Follow-ups
26
+ <deferred items>
27
+
28
+ ## Rollback / Recovery
29
+ <how to back this out>
30
+
31
+ ## Final Decision
32
+ <one paragraph: verdict + why>
33
+
34
+ ## Footprint
35
+ <deterministic fan-out from footprint.sh — subagents · slices · wall-clock; never tokens/cost>
36
+ ```
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: rite-ship
3
+ description: Ship the sealed feature and close the task — render type-GO, run the irreversible git commit/push/tag (or open the PR), write ship.md, then archive the workspace and clear .devrites/ACTIVE. Use when the user says "ship it", "ship this", "push it out", "close the task", "finish and archive", or right after /rite-seal returns GO. Not for the GO/NO-GO decision itself (use /rite-seal) or an unsealed feature.
4
+ argument-hint: "[feature-slug]"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # /rite-ship — ship + close the task
9
+
10
+ The final phase. `/rite-seal` **decides** GO/NO-GO; `/rite-ship` **executes** the
11
+ irreversible git actions and **closes** the feature. **Read the active workspace
12
+ first**; if none, tell the user to run `/rite-spec <feature>`.
13
+
14
+ Refuses to ship unless `seal.md` records a **GO** verdict.
15
+
16
+ ## Rules consulted (read on demand from `.claude/rules/`)
17
+ **Step 0:** Read `.claude/rules/core.md` first. Then pull on demand:
18
+ - `git-workflow.md` — Conventional Commits, atomic commits, the never-commit list.
19
+ - `afk-hitl.md` — type-GO is the irreversible-action gate.
20
+
21
+ ## Operating rules
22
+ - **Seal GO is a precondition.** No GO in `seal.md` → stop, point at `/rite-seal`.
23
+ - **Evidence must be fresh.** If any file in `touched-files.md` changed after
24
+ `evidence.md` was written, the proof is stale → stop, point at `/rite-prove`. Enforced
25
+ deterministically by `evidence-fresh.sh` in step 1 (exit 3 = STALE), not by eyeballing
26
+ mtimes (see `.claude/rules/development-workflow.md`).
27
+ - **type-GO before anything irreversible.** Render the prompt verbatim and wait for
28
+ the literal `GO`. Last safety net — render it every time, even under auto-trigger.
29
+ - **Never delete the audit trail.** Closing *archives* the workspace; it never erases
30
+ the `.md` files.
31
+
32
+ ## Workflow
33
+ 1. **Run the shared orientation preamble** — it prints `state.md`, the artifacts present,
34
+ the run mode (HITL/AFK), and the open-question tally by gate, so you orient deterministically
35
+ instead of re-deriving state from raw Markdown:
36
+ ```bash
37
+ P=.claude/skills/devrites-lib/scripts/preamble.sh
38
+ [ -f "$P" ] || P="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/preamble.sh"
39
+ [ -f "$P" ] || P=pack/.claude/skills/devrites-lib/scripts/preamble.sh
40
+ [ -f "$P" ] && bash "$P" || echo "(orientation preamble unavailable on this install — read state.md directly to orient)"
41
+ ```
42
+ Then read `seal.md`, `state.md`, `spec.md`, `touched-files.md`, `evidence.md`, and
43
+ `design-brief.md` (if the feature is UI — the design-memory rollup in step 2a reads it).
44
+ Confirm the verdict is **GO**, then run the deterministic evidence-freshness gate rather than
45
+ eyeballing mtimes (mirrors `/rite-seal`):
46
+ ```bash
47
+ E=.claude/skills/devrites-lib/scripts/evidence-fresh.sh
48
+ [ -f "$E" ] || E="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/evidence-fresh.sh"
49
+ [ -f "$E" ] || E=pack/.claude/skills/devrites-lib/scripts/evidence-fresh.sh
50
+ [ -f "$E" ] && { bash "$E"; echo "evidence-fresh rc=$?"; } || echo "(evidence-fresh gate unavailable — compare mtimes by hand)"
51
+ ```
52
+ **Exit 3 → STALE proof: STOP**, point at `/rite-prove` (a polish/review edit made after
53
+ `/rite-prove` invalidates the proof). Not GO → stop with the single resume command.
54
+ 1a. **Health re-check (advisory).** Run the DevRites doctor before the irreversible ladder —
55
+ a stale `ACTIVE` or corrupt workspace here risks shipping or closing the wrong feature.
56
+ Advisory: surface issues, don't block.
57
+ ```bash
58
+ D=.claude/skills/devrites-lib/scripts/doctor.sh
59
+ [ -f "$D" ] || D="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/doctor.sh"
60
+ [ -f "$D" ] || D=pack/.claude/skills/devrites-lib/scripts/doctor.sh
61
+ [ -f "$D" ] && { bash "$D"; echo "doctor rc=$?"; } || true
62
+ ```
63
+ If it flags the active feature, confirm you're shipping the intended slug before proceeding.
64
+ 2. Build the git plan from `git-workflow.md` + the project's own convention: the
65
+ Conventional-Commit message(s), the target branch, and whether a tag / PR applies.
66
+ Scope the commit to `touched-files.md`; never stage secrets or out-of-scope files.
67
+ 2a. **Design memory (optional, UI features only).** If the feature shipped UI, offer to roll
68
+ its *proven* design language up into a project-level `DESIGN.md` so the next feature
69
+ inherits the system instead of re-discovering it
70
+ ([reference/design-memory.md](reference/design-memory.md)). **Opt-in and confirmed** —
71
+ present the option set (default **skip**; persisting beyond feature scope is the user's
72
+ call), and on yes append `DESIGN.md` to `touched-files.md` so it ships *in this commit*.
73
+ Skip silently when there's no UI. Record the outcome in `ship.md`.
74
+ 3. **Render the type-GO prompt** ([reference/git-ship.md](reference/git-ship.md)) and
75
+ wait. Only the literal `GO` proceeds; anything else cancels — record the cancel in
76
+ `ship.md` and stop (do not retry without the user asking).
77
+ 4. On `GO`: run the git ladder — commit → push → tag / PR as applicable
78
+ ([reference/git-ship.md](reference/git-ship.md)). Capture the commit SHA(s),
79
+ branch, and tag/PR URL.
80
+ 4a. **When opening a PR, render a structured body** — not just the commit message:
81
+ **Summary** (what shipped + acceptance n/total) · **Risk & rollback** (the migration /
82
+ destructive / auth touches + how to revert, from `seal.md`'s risk scan) · **What to scrutinize**
83
+ (point reviewers at the highest-blast-radius hunks) · **Evidence** (a condensed `evidence.md` +
84
+ the seal's reconciled reviewer-verdict digest, linking the full `.devrites/archive/<slug>/`
85
+ bundle). **Delete any N/A section** — an empty Risk block is noise.
86
+ 4b. **Promote architecturally-significant decisions to ADRs.** For each `decisions.md` ADR that
87
+ records a *durable* architecture / interface choice (not a slice-local call), append it to a
88
+ persistent `docs/adr/ADR-NNN.md` — Nygard shape (Context · Decision · Status `accepted` ·
89
+ Consequences), **append-only**, never rewritten; supersede with a new ADR that links the old.
90
+ The per-feature `decisions.md` is archived with the workspace; the ADR keeps the load-bearing
91
+ *why* discoverable in the repo. Skip if the project keeps no `docs/adr/` and the user doesn't want one.
92
+ 5. Write `ship.md` ([reference/ship-template.md](reference/ship-template.md)): what
93
+ shipped, SHA(s), branch, tag/PR, acceptance summary (n/total), link to `seal.md`,
94
+ follow-ups.
95
+ 6. **Close the task** ([reference/close-out.md](reference/close-out.md)): set
96
+ `state.md` phase `done`, then run
97
+ `bash .claude/skills/devrites-lib/scripts/close-out.sh <slug>` to archive
98
+ `.devrites/work/<slug>/` → `.devrites/archive/<slug>/` and clear `.devrites/ACTIVE`.
99
+ Every `.md` is preserved in the archive.
100
+
101
+ > **Mid-flight discipline.** When tempted to ship without a GO seal, skip the type-GO,
102
+ > stage files outside `touched-files.md`, or delete the workspace instead of archiving
103
+ > it — stop. See [`anti-patterns`](reference/anti-patterns.md); the gate exists for the
104
+ > failure mode the ask misses.
105
+
106
+ ## Output
107
+
108
+ **Footer first** — render the flow ribbon by running the progress footer (`progress.sh`, resolved like the step-0 preamble — canonical snippet in `devrites-lib/SKILL.md`); at ship it reads `ship ✓` across the spine. Keep the fact lines below it terse (`key value · key value`). Then:
109
+ ```
110
+ Shipped: <feature>
111
+ Commit: <sha> on <branch> Tag/PR: <ref | none>
112
+ Acceptance: <n/total> proven
113
+ Archived: .devrites/archive/<slug>/ · ACTIVE cleared
114
+ ship.md: .devrites/archive/<slug>/ship.md
115
+ ```
116
+ If the user declined type-GO: state that nothing shipped, the seal still reads GO, and
117
+ the resume command (`/rite-ship`).
118
+
119
+ End with `↻ Hygiene: /clear` — the feature is closed; start the next with
120
+ `/rite-spec <feature>`. See `.claude/rules/context-hygiene.md`.
@@ -0,0 +1,25 @@
1
+ # rite-ship — anti-patterns
2
+
3
+ Load this before any irreversible action — `git commit`, `push`, `tag`, publish, deploy
4
+ — or when tempted to skip the close-out.
5
+
6
+ Pack-wide rationalizations + red flags: see
7
+ [rules/anti-patterns.md](../../../rules/anti-patterns.md).
8
+
9
+ ## Phase-specific rationalizations
10
+
11
+ | Excuse | Rebuttal |
12
+ |---|---|
13
+ | "Seal said GO, so I can just push." | A GO verdict is a decision, not authorization. **Render the type-GO prompt every time** and wait for the literal `GO`. |
14
+ | "I'll push the tag now; type-GO is a formality." | Type-GO is the last safety net before an irreversible action. Always render it — even under auto-trigger. |
15
+ | "`git add -A` is faster than listing touched files." | Stage only what's in `touched-files.md`. `-A` sweeps secrets, scratch files, and out-of-scope edits into the ship. |
16
+ | "The evidence is probably still good." | If any touched file changed after `evidence.md`, the proof is stale — stop and re-prove. Ship on fresh evidence only. |
17
+ | "Delete the workspace, the feature's done." | Closing **archives** the workspace (`.devrites/archive/<slug>/`); it never deletes the audit trail. |
18
+
19
+ ## Red Flags
20
+
21
+ - About to run `git push` / `git tag` without rendering the type-GO prompt.
22
+ - Shipping without a `GO` verdict recorded in `seal.md`.
23
+ - Staging files not listed in `touched-files.md`, or any secret / `.env`.
24
+ - `rm`-ing `.devrites/work/<slug>/` instead of archiving it.
25
+ - Marking the feature `done` but leaving `.devrites/ACTIVE` pointing at it.
@@ -0,0 +1,31 @@
1
+ # Close-out — archive the workspace, free the active slot
2
+
3
+ Closing a feature means it stops being the *active* work, not that its record is
4
+ deleted. DevRites keeps the full audit trail; it just moves out of the live path.
5
+
6
+ ## What close-out does
7
+
8
+ 1. **Mark done.** Set `state.md` → `Phase: done`, `Status: done`, and a `Next step`
9
+ of `/rite-spec <next feature>`.
10
+ 2. **Archive.** Run the deterministic script:
11
+ ```bash
12
+ bash .claude/skills/devrites-lib/scripts/close-out.sh <slug>
13
+ ```
14
+ It moves `.devrites/work/<slug>/` → `.devrites/archive/<slug>/` (every `.md`
15
+ intact) and clears `.devrites/ACTIVE` **only if** ACTIVE still points at `<slug>`.
16
+ It refuses to clobber an existing `.devrites/archive/<slug>/` (exit 5).
17
+ 3. **Confirm.** ACTIVE is now empty, so the next `/rite-spec` starts a clean feature
18
+ and `/rite-status` reports "no active feature".
19
+
20
+ ## Why archive, not delete
21
+
22
+ - The `.md` files (`spec`, `decisions`, `assumptions`, `evidence`, `seal`, `ship`, …)
23
+ are the project's record of *why* the feature is the way it is. A future
24
+ `/rite-zoom-out` or incident review reads them.
25
+ - Deleting them would make the workflow's own "evidence over confidence" rule a lie.
26
+
27
+ ## Re-opening an archived feature
28
+
29
+ To resume archived work, move it back:
30
+ `mv .devrites/archive/<slug> .devrites/work/<slug>` and write `<slug>` into
31
+ `.devrites/ACTIVE`. Nothing is lost — close-out is reversible by design.
@@ -0,0 +1,120 @@
1
+ # Design memory — roll proven design language into project `DESIGN.md`
2
+
3
+ Optional, UI-only step at `/rite-ship`. A feature's design decisions live in its
4
+ feature-scoped `design-brief.md` and are thrown away when the workspace archives. **Design
5
+ memory** is the deliberate exception: when a UI feature ships, roll the design language it
6
+ *proved* up into a project-level `DESIGN.md`, so the next feature's `devrites-ux-shape`
7
+ inherits the system instead of re-discovering it.
8
+
9
+ The consumers already exist — `devrites-ux-shape` §1 and
10
+ `devrites-frontend-craft/reference/design-references.md` both read `DESIGN.md` when present.
11
+ This step is the missing **producer**. It closes the loop: feature N seals its design
12
+ language → feature N+1 builds to it.
13
+
14
+ ## When it runs
15
+ - **UI features only.** No UI in the diff → skip silently.
16
+ - **At ship, GO sealed, after the git plan, before type-GO** (step 2a) — so the user sees
17
+ the full staged change set (code + `DESIGN.md`) under the single type-GO that ships it.
18
+ - **Opt-in and confirmed.** Persisting to a project-wide artifact is outside feature scope
19
+ (`rules/core.md` rule 7) — so it is *never silent*. Present a ranked option set
20
+ (`rules/afk-hitl.md` — Option set); **default is skip**. The user opts to persist.
21
+ - **AFK**: first-time `DESIGN.md` *creation* is treated as a `validating` gate (a new
22
+ persistent project artifact) — propose + queue, don't auto-create. An *append* to an
23
+ existing `DESIGN.md` is `advisory` and may auto-proceed when `allow_gates` permits, since
24
+ it only adds evidence-proven entries.
25
+
26
+ ## Inputs (proven only)
27
+ - `design-brief.md` — direction, color strategy, **calibration** (density / motion), key
28
+ states, named anchors, and the per-slice **Build-time refinements**.
29
+ - The **final diff** + `touched-files.md` — what tokens / components / states *actually
30
+ shipped* (the evidence). Roll up only what the diff proves, not what the brief intended.
31
+ - Existing `DESIGN.md` if present — the merge target.
32
+
33
+ ## What to roll up — the project's *converged* system, evidence-gated
34
+ Only entries the shipped, proven feature establishes. Each is durable, cross-feature design
35
+ language — not this feature's one-off choices.
36
+ - **Tokens introduced + used** — new color roles / spacing steps / type steps / elevation
37
+ / radius that shipped and are reusable. Names and values, mirrored from the code.
38
+ - **Color strategy + calibration baseline** — the strategy (Restrained / Committed / …) and
39
+ density / motion the project keeps landing on; note a deviation as a deviation, not a new
40
+ default.
41
+ - **Type & spacing scales** in actual use; **motion** classes + easing; **materiality**
42
+ (elevation set, hairline usage, glass / texture policy).
43
+ - **Component behaviors** — for each shared component this feature established or extended:
44
+ the states it ships and its interaction model. Grows one feature at a time.
45
+ - **Named-anchor lineage** — the anchors features steered toward, so later work stays
46
+ coherent with what's already built.
47
+ - **Anti-slop exceptions** — any banned default the project *intentionally* uses (with the
48
+ why), so build / polish don't "correct" a deliberate choice.
49
+
50
+ ## Merge discipline
51
+ - **Append, don't overwrite.** Add proven entries; never silently rewrite an existing one.
52
+ - **Conflict is a question, not an edit.** A new token / font / strategy that contradicts an
53
+ existing `DESIGN.md` entry → surface it to the user (the option set), don't resolve it
54
+ yourself. One design system per project.
55
+ - **Never invent.** If the feature didn't prove it, it doesn't go in. `DESIGN.md` is design
56
+ *memory*, not design *aspiration*.
57
+ - **Attribute + keep lean.** Tag each new entry with the feature slug so the lineage is
58
+ legible; one good line beats a paragraph. The file is read every future spec — keep it
59
+ scannable.
60
+
61
+ ## How it commits
62
+ `DESIGN.md` is a tracked project artifact, so it ships **in the feature commit**:
63
+ 1. Write / update `<project-root>/DESIGN.md` from the template below.
64
+ 2. **Append `DESIGN.md` to `touched-files.md`** so the existing ship commit-scoping (SKILL
65
+ steps 2 + 4) stages it — the design-memory write rides the same commit and the same
66
+ type-GO, no second commit.
67
+ 3. Note the rollup in `ship.md` (what was added, or "design-memory: skipped by user").
68
+
69
+ ## `DESIGN.md` template (project-level, stack-agnostic)
70
+ ```markdown
71
+ # DESIGN.md — <project> design memory
72
+
73
+ > Rolled up from shipped features by `/rite-ship` (design memory). Read by
74
+ > `devrites-ux-shape` and `devrites-frontend-craft` as the inherited system. Evidence-only:
75
+ > every entry shipped and was proven. Edit through a feature's ship, not by hand.
76
+
77
+ ## Register & direction
78
+ Default register per surface (brand / product) and the scene-derived direction the product
79
+ keeps converging on.
80
+
81
+ ## Color
82
+ Strategy baseline (Restrained | Committed | Multi-role | Saturated). Token roles
83
+ (surface / text / accent / border / danger / …) with values or token names. Dark-mode approach.
84
+
85
+ ## Calibration
86
+ Density baseline (Airy | Balanced | Dense) · Motion baseline (Minimal | Standard | Expressive).
87
+ Surfaces that deviate + why.
88
+
89
+ ## Typography
90
+ Families; the scale in use (fixed rem / fluid clamp); heading↔body ratio; weights.
91
+
92
+ ## Spacing
93
+ The scale (4 pt multiples) and section rhythm in use.
94
+
95
+ ## Motion
96
+ Classes in use, easing, `prefers-reduced-motion` handling.
97
+
98
+ ## Materiality
99
+ Elevation token set, hairline usage, glass policy, texture / asset approach.
100
+
101
+ ## Components (proven behaviors)
102
+ | Component | States shipped | Interaction model | First proven by |
103
+ |---|---|---|---|
104
+ | <name> | default/hover/focus/loading/empty/error/… | inline / navigated / modal · feedback | <slug> |
105
+
106
+ ## Named-anchor lineage
107
+ The anchors features steered toward (keeps new work coherent).
108
+
109
+ ## Anti-slop — project exceptions
110
+ Banned defaults this project *intentionally* uses, with the why (so build/polish don't undo them).
111
+ ```
112
+
113
+ ## NEVER (design memory)
114
+ - Never roll up unattended on first creation — a new persistent project artifact is a
115
+ confirmed step, never an AFK silent write.
116
+ - Never write an entry the feature didn't *prove* shipped — no aspirational tokens.
117
+ - Never overwrite or silently reconcile a conflicting existing entry — surface it.
118
+ - Never persist a feature-only one-off as if it were the project default.
119
+ - Never add `DESIGN.md` to the commit without appending it to `touched-files.md` first
120
+ (it would fall outside the ship's commit scope).
@@ -0,0 +1,42 @@
1
+ # The irreversible ship — type-GO + git ladder
2
+
3
+ `/rite-ship` is the only DevRites phase that runs actions that cannot be undone
4
+ silently. The seal verdict authorizes the *decision*; this prompt authorizes the
5
+ *action*.
6
+
7
+ ## The type-GO prompt (render verbatim, wait)
8
+
9
+ ```
10
+ About to: <git commit + git push [+ git tag vX.Y.Z | open PR]>
11
+ Feature: <slug>
12
+ Verdict: GO (seal.md)
13
+ Acceptance criteria proven: <n / total>
14
+ Branch: <target branch>
15
+
16
+ Type "GO" exactly to proceed. Anything else cancels.
17
+ ```
18
+
19
+ Rules for the prompt:
20
+ - Render it **every time**, even with auto-trigger enabled — this is the last net.
21
+ - Only the literal string `GO` (no quotes) proceeds. `y`, `yes`, `go` (lowercase),
22
+ `ok`, `sure`, `do it`, or anything else → cancel, record the cancel in `ship.md`
23
+ as "user declined irreversible step at <ts>", and stop.
24
+ - `/rite-autocomplete --ship` (or `--yolo`) is the *only* caller permitted to satisfy
25
+ this prompt automatically. Every other path requires the human's literal `GO`.
26
+
27
+ ## The git ladder
28
+
29
+ Follow `.claude/rules/git-workflow.md` and the project's own convention. Do not invent
30
+ a release flow the project doesn't use.
31
+
32
+ 1. **Stage** only the files in `touched-files.md`. Never `git add -A`; never stage
33
+ secrets, `.env`, or out-of-scope files (see the never-commit list in `git-workflow.md`).
34
+ 2. **Commit** with a Conventional Commit message derived from the feature (`feat(scope):
35
+ …` / `fix(scope): …`). Atomic — one logical change. Put the *why* in the body.
36
+ 3. **Push** to the target branch (the feature branch, or per the project's trunk
37
+ convention).
38
+ 4. **Tag / PR** only if the project does it: cut a tag when the project tags releases,
39
+ or open a PR when the project reviews via PRs. Otherwise skip — pushing the branch
40
+ is the ship.
41
+
42
+ Capture the resulting commit SHA(s), branch, and tag/PR URL for `ship.md`.
@@ -0,0 +1,33 @@
1
+ # `ship.md` template
2
+
3
+ The durable record of what shipped and how. Written by `/rite-ship` into the
4
+ workspace **before** close-out, so it travels into `.devrites/archive/<slug>/ship.md`.
5
+
6
+ ```markdown
7
+ # Ship: <slug>
8
+
9
+ - Shipped at: <iso>
10
+ - Verdict: GO (see seal.md)
11
+ - Branch: <branch>
12
+ - Commit(s): <sha> [<sha> …]
13
+ - Tag / PR: <vX.Y.Z | PR url | none>
14
+
15
+ ## What shipped
16
+ <one-paragraph summary of the feature delivered, in the project's vocabulary>
17
+
18
+ ## Acceptance
19
+ - Criteria proven: <n / total> (full walk in evidence.md / seal.md)
20
+ - Outstanding (shipped with known follow-ups): <list | none>
21
+
22
+ ## Evidence pointers
23
+ - seal.md — final GO/NO-GO verdict + reviewer reconciliation
24
+ - evidence.md — acceptance walk; browser-evidence.md (if UI)
25
+ - review.md — multi-axis review findings
26
+
27
+ ## Follow-ups (FYI, not blocking)
28
+ - <recorded follow-up + where it's tracked> | none
29
+ ```
30
+
31
+ Keep it short — it points at the existing audit files rather than restating them.
32
+ The acceptance count must match `seal.md`; if they disagree, the seal is the source of
33
+ truth and the ship should not have proceeded.
@@ -0,0 +1,126 @@
1
+ ---
2
+ name: rite-spec
3
+ description: Investigate a new feature and write `spec.md` (placement, gaps, design refs, measurable acceptance) under `.devrites/work/<slug>/`. Use when the user says "new feature", "spec this out", "start a project", "I have an idea". Not for planning approved specs (use `/rite-define`) or replanning (use `/rite-plan`).
4
+ argument-hint: "<feature or idea>"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # /rite-spec — investigate deeply, write the spec
9
+
10
+ The spec phase. Turn a request (even a vague one) into a **fully-covered, correctly-placed
11
+ `spec.md`** by investigating deeply and closing every material gap with the human — so
12
+ `/rite-define` can plan it and nothing is missed. **No plan, tasks, or code here** — those
13
+ are `/rite-define` and `/rite-build`.
14
+
15
+ > **Too small to spec? Use `/rite-quick`.** A typo, copy tweak, config bump, or one-function
16
+ > fix does **not** need a full workspace + lifecycle. Stop and run `/rite-quick <change>` — its
17
+ > express lane (one contract → TDD build → scoped prove → ship) escalates back here the moment
18
+ > the change turns out to touch auth / data / a migration / a public API / more than one slice.
19
+ > Spec is for real features; don't pay its ceremony for a one-off.
20
+
21
+ ## Rules consulted (read on demand from `.claude/rules/`)
22
+ **Step 0:** Read `.claude/rules/core.md` first. DevRites skills Read `.claude/rules/core.md`
23
+ as their first step; the other rule files load on demand. Pull `documentation.md` via `Read`
24
+ when capturing significant spec decisions (why-not-what, ADR-style notes in `decisions.md`).
25
+
26
+ ## Operating rules (DevRites core)
27
+ - No silent assumptions · no guessing through confusion · prefer existing conventions ·
28
+ ask the human when an answer changes scope, placement, data model, UX, security,
29
+ migration risk, or acceptance.
30
+
31
+ ## Workflow
32
+ 0. **Read `.claude/rules/core.md`** — the always-on operating rules and anti-rationalizations.
33
+ Then **run the shared orientation preamble** — it prints `state.md`, the artifacts present,
34
+ the run mode (HITL/AFK), and the open-question tally by gate, so you orient deterministically
35
+ instead of re-deriving state from raw Markdown:
36
+ ```bash
37
+ P=.claude/skills/devrites-lib/scripts/preamble.sh
38
+ [ -f "$P" ] || P="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/preamble.sh"
39
+ [ -f "$P" ] || P=pack/.claude/skills/devrites-lib/scripts/preamble.sh
40
+ [ -f "$P" ] && bash "$P" || echo "(orientation preamble unavailable on this install — read state.md directly to orient)"
41
+ ```
42
+ 1. **Understand the request** (`$ARGUMENTS`). Restate the goal and the *real problem
43
+ behind it* in a sentence or two.
44
+ 2. **Investigate deeply** — [investigation](reference/investigation.md). Produce, and
45
+ later write into the spec: **current behavior**; **placement** (which module/layer/
46
+ file/component should own it, the seam, patterns to reuse, and integration points —
47
+ callers, dependents, data, APIs/events); **what it resolves**; **issues**
48
+ (conflicts/constraints); **gaps** (unknowns); **blast radius**. Use a code-intelligence
49
+ index **if available** — `codebase-memory-mcp` first, cross-checked with `codegraph`
50
+ (`.codegraph/` / `codegraph_*`) + `graphify` (`graphify-out/`), else standard methods
51
+ (LSP / `Read`/`Grep`/`Glob`); see `.claude/rules/tooling.md` —
52
+ for placement/callers/impact instead of broad file reads; fall back to reading files. For
53
+ uncertain external library/framework facts that bear on placement or feasibility, consult
54
+ context7 if available.
55
+ Also discover the project's **test / build/typecheck/lint** commands and the
56
+ frontend/backend systems; read `PRODUCT.md` / `DESIGN.md` / `CLAUDE.md` / `AGENTS.md` if
57
+ present (`AGENTS.md` is the cross-tool agent-conventions standard — treat it as project
58
+ conventions the build must follow, same standing as `CLAUDE.md`).
59
+ 3. **Gather design references (optional)** — [references-intake](reference/references-intake.md).
60
+ The human **may** attach screenshots, mockups, a Figma link, a video, or links — or
61
+ **none at all** (perfectly normal; skip this step then). If any are given: **view/fetch**
62
+ them, **save local files** into `.devrites/work/<slug>/references/`, and index them in
63
+ `references.md`. They become the target later phases verify against.
64
+ 3a. **Shape the UX/UI before code (if the feature touches UI)** — when this feature is
65
+ frontend ([frontend-trigger](../rite-build/reference/frontend-trigger.md)), apply
66
+ `devrites-ux-shape` **now**, woven into the spec — not as a separate phase. It turns the
67
+ references + the spec into a feature-level **`design-brief.md`** (design direction, key
68
+ states, interaction model, optional Figma/image visual-direction probe) that `/rite-build`
69
+ targets so the UI is built to plan, not guessed. In HITL it pauses for the human to
70
+ confirm the direction; in AFK it asserts the best guess and logs it. Pure
71
+ backend/data/CLI features skip this.
72
+ 4. **Close the gaps with the human.** Turn each material gap/issue into a question — one
73
+ at a time, **best guess attached**, structured options + escape hatch. (Vague ask →
74
+ `devrites-interview`; rough idea → `rite-pressure-test`; ladders in
75
+ [interview-patterns](reference/interview-patterns.md) / [question-protocol](reference/question-protocol.md).)
76
+ For a vague ask, **map the decision tree** and resolve each branch depth-first; **cover
77
+ every dimension** (objective · scope · data model · UX · integration · non-functional ·
78
+ acceptance) — resolved or explicitly deferred — and **stop when answers converge** or you
79
+ can predict them (don't interrogate). Aim for **zero blocking gaps**. *If a gap is genuinely undecidable on paper (state
80
+ machine that may deadlock, data shape ambiguity, "which UX wins") → suggest a
81
+ scoped detour to `/rite-prototype` to answer that ONE question before
82
+ continuing.*
83
+ 5. **Create the workspace** + set `.devrites/ACTIVE`
84
+ ([state-workspace](reference/state-workspace.md)). Write `spec.md`
85
+ ([spec-template](reference/spec-template.md)) — WHAT/WHY, technology-agnostic, with
86
+ **Placement & integration**, **Design references**, **Gaps/issues/decisions**, and
87
+ measurable acceptance ([acceptance-criteria](reference/acceptance-criteria.md)). Also
88
+ write `brief.md`, `references.md`, `questions.md`, `decisions.md`, `assumptions.md`,
89
+ and an initial `state.md` (phase: spec). When the feature touches UI, `design-brief.md`
90
+ is written here too (by `devrites-ux-shape`, step 3a).
91
+ 5a. **Score the spec prose — "unit tests for English"** ([spec-checklists](reference/spec-checklists.md)).
92
+ Emit `.devrites/work/<slug>/checklists/<domain>.md` (one per requirement domain the spec covers:
93
+ functional · data-model · interaction · non-functional · edge-cases). Each tests the *requirement
94
+ prose* for completeness / clarity / measurability — "is 'prominent' quantified?", "is every
95
+ enumeration closed?" — **not** the implementation. Fix each CRITICAL fail by editing the spec
96
+ (not by softening the question); minor fails are logged. The checklists feed the readiness gate.
97
+ 6. **Run the spec readiness gate** (bottom of spec-template): no blocking
98
+ `[NEEDS CLARIFICATION]`, placement decided, all material gaps resolved, any design
99
+ references provided are saved, **UX/UI shaped into `design-brief.md` if the feature is
100
+ UI**, requirements testable, success criteria measurable, **every `checklists/<domain>.md` at
101
+ `Verdict: pass`**. When it passes, write `Spec gate: passed <iso>` to `state.md`. **Stop** when
102
+ it passes.
103
+
104
+ > **Mid-flight discipline.** When tempted to skip investigation depth, gap-closing, or placement decisions — see [`anti-patterns`](reference/anti-patterns.md) (Common Rationalizations + Red Flags). Load it the moment you reach for the excuse.
105
+
106
+ ## Output
107
+
108
+ **Footer first** — render the slice meter + flow ribbon by running the progress footer (`progress.sh`, resolved like the step-0 preamble — canonical snippet in `devrites-lib/SKILL.md`); keep the fact lines below it terse (`key value · key value`). Then:
109
+ ```
110
+ Spec ready: <slug>
111
+ Objective: <one sentence> Placement: <where it lives>
112
+ Resolves: <value>
113
+ References: <n saved | none provided>
114
+ Design brief: <design-brief.md shaped (compact|full) | n/a — not UI>
115
+ Gaps closed: <n> Open (non-blocking): <n>
116
+ Checklists: <n domains scored — all pass | BLOCKED: n CRITICAL open>
117
+ Next: big / risky feature (auth · data model · public API · migration · multi-slice · ambiguous scope)?
118
+ → /rite-temper (strategic review: scope mode + pre-mortem, hardens the spec) — then /rite-define.
119
+ Small / reversible / unambiguous? → /rite-define directly.
120
+ ↻ Hygiene: /clear before /rite-define (spec.md + references/ + decisions.md + assumptions.md + questions.md captured); /rite-handoff if away > a few hours. See rules/context-hygiene.md.
121
+ ```
122
+ If a workspace with the slug already exists, update its spec rather than overwriting blindly —
123
+ and **show the human a short diff of what changed** in `spec.md` (acceptance criteria added /
124
+ removed / reworded) before proceeding. A spec edit reviewed as a diff catches silent scope
125
+ drift that a full re-read buries; this is the spec-review view (`/rite-spec --review` renders
126
+ just the diff + the open-question delta, no re-investigation).