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,159 @@
1
+ # `.devrites/` state workspace — canonical format
2
+
3
+ The shared state contract for **all** DevRites skills. Every phase reads the active
4
+ workspace first; if none exists, it stops and tells the user to run `/rite-spec <feature>`
5
+ (which creates it).
6
+
7
+ ## Layout
8
+ ```
9
+ .devrites/
10
+ README.md # what this dir is (seeded at install)
11
+ ACTIVE # single line: active feature slug, or empty
12
+ work/
13
+ <feature-slug>/
14
+ brief.md # short user-facing objective
15
+ spec.md # what to build + why (from /rite-spec)
16
+ references/ # saved design/reference assets (screenshots, exports, video)
17
+ references.md # index of design references (saved files + links)
18
+ strategy.md # strategic review: scope mode + pre-mortem + dimension scores (from /rite-temper; optional — always invoked, significance-gated, in /rite-autocomplete)
19
+ plan.md # how to build it (from /rite-define)
20
+ tasks.md # ordered vertical slices (from /rite-define)
21
+ eng-review.md # engineering plan review: scope challenge + axis findings + failure modes + parallelization (from /rite-vet — run on every plan; depth scales light/full, never skipped; always in /rite-autocomplete)
22
+ test-plan.md # build-readable coverage target: coverage diagram + per-gap test requirements + acceptance→test map (from /rite-vet; read by /rite-build + /rite-prove)
23
+ state.md # phase, active slice, risk, next step
24
+ questions.md # asked questions + answers
25
+ decisions.md # decisions + rationale (+ a `## Dead ends` section: approaches tried that failed + why, so retries don't repeat them)
26
+ assumptions.md # explicit assumptions still standing
27
+ drift.md # spec/plan drift observations + resolutions
28
+ touched-files.md # files changed or intentionally inspected
29
+ evidence.md # commands run + results
30
+ browser-evidence.md # screenshots, routes, console, viewport checks
31
+ design-brief.md # UX/UI contract — if UI involved (from /rite-spec via devrites-ux-shape; refined per slice in /rite-build)
32
+ polish-report.md # normalize+polish output
33
+ review.md # review findings + decisions
34
+ seal.md # final GO / NO-GO decision (from /rite-seal)
35
+ ship.md # ship record: commit/tag, acceptance, follow-ups (from /rite-ship)
36
+ handoff.md # human/next-agent-facing handoff summary (overwritten each handoff)
37
+ archive/
38
+ <feature-slug>/ # closed features (moved here by /rite-ship close-out; all .md preserved)
39
+ ```
40
+
41
+ ## Rules
42
+ - **Slug**: kebab-case, derived from the objective (`add-csv-export`, not `feature1`).
43
+ - All artifacts are **human-readable Markdown** — they must survive context compaction
44
+ and a fresh session. (`references/` also holds binary assets the human supplied.)
45
+ - **`/rite-spec` creates the workspace** and writes `spec.md` (+ `references/`,
46
+ `references.md`, `brief.md`, `questions.md`, `decisions.md`, `assumptions.md`; **plus
47
+ `design-brief.md` when the feature touches UI**, via `devrites-ux-shape`) and sets
48
+ `ACTIVE`. **`/rite-define` reads `spec.md`** and adds `plan.md` + `tasks.md` and updates
49
+ `state.md`. Other skills read the active workspace; none create a new one.
50
+ - Each phase **updates `state.md`** and the relevant evidence files.
51
+ - Don't create `strategy.md` / `eng-review.md` / `test-plan.md` / `evidence.md` /
52
+ `browser-evidence.md` / `design-brief.md` / `polish-report.md` / `review.md` / `seal.md` /
53
+ `ship.md` / `handoff.md` until the producing phase runs — absence is meaningful (it means
54
+ "not done yet"). `strategy.md` is written by `/rite-temper` (which may also edit `spec.md` /
55
+ `decisions.md` / `assumptions.md` via the Spec Drift Guard); its absence means the spec was
56
+ planned without a strategic review. `eng-review.md` + `test-plan.md` are written by `/rite-vet`
57
+ (which also hardens `plan.md` / `tasks.md`, and routes acceptance-changing deltas via the Spec
58
+ Drift Guard); their absence means the plan was built without an engineering review. `handoff.md`
59
+ is written by `/rite-handoff` and overwritten each handoff (latest snapshot, not a log).
60
+ - **`/rite-ship` closes the feature**: it writes `ship.md`, sets `state.md` phase `done`,
61
+ then archives `.devrites/work/<slug>/` → `.devrites/archive/<slug>/` (every `.md`
62
+ preserved) and clears `.devrites/ACTIVE`. Closing **relocates** the audit trail; it
63
+ never deletes it. Re-open by moving the dir back and re-pointing `ACTIVE`.
64
+
65
+ ## `state.md` template
66
+ ```markdown
67
+ # State: <slug>
68
+
69
+ - Phase: spec | temper | plan | vet | build | prove | polish | review | seal | ship | done # `temper` (pre-plan) + `vet` (post-plan, pre-build) only when those optional reviews ran; spec→plan→build directly otherwise
70
+ - Status: running | awaiting_human | blocked | done
71
+ - Active slice: <N — name> | none
72
+ - Slice mode: AFK | HITL | none
73
+ - Spec gate: passed <iso> | none # optional — set when the spec readiness gate passes
74
+ - Plan approved: <iso> | none # optional — /rite-define sets it when the human confirms the plan
75
+ - AFK slices remaining: <n> | none # mutable counter; initialized from .devrites/AFK max_slices on first AFK build
76
+ - Risk: <highest current risk> | none
77
+ - Next step: <single recommended command + why>
78
+
79
+ ## Awaiting human (only when Status == awaiting_human)
80
+ - qid: <q-YYYY-MM-DD-NNN>
81
+ - gate: advisory | validating | blocking | escalating
82
+ - question: <crisp text>
83
+ - proposed: <agent's tentative answer>
84
+ - raised_at: <iso>
85
+ - blocking_slices: [<slice ids that cannot advance until answered>]
86
+
87
+ ## Slice progress
88
+ - [ ] Slice 1: <name> — <pending|built>
89
+ - [ ] Slice 2: ...
90
+
91
+ ## Log
92
+ - <date> <phase>: <one line of what happened>
93
+ ```
94
+
95
+ A slice is only ever `pending` or `built`. Acceptance proof lives at the **feature**
96
+ level in `evidence.md` (recorded by `/rite-prove`), not per slice — there is no per-slice
97
+ `proven` / `done` state.
98
+
99
+ ## `.devrites/AFK` sentinel (AFK mode toggle)
100
+
101
+ Presence of the file `.devrites/AFK` puts DevRites into **AFK mode**: skills that would
102
+ normally pause for the user instead log to `questions.md` (when the gate severity allows
103
+ it — see [`.claude/rules/afk-hitl.md`](../../../rules/afk-hitl.md)) and continue.
104
+ `.devrites/AFK` presence is the **single source of truth** for run mode (the shared preamble
105
+ derives it); skills re-read the sentinel at decision time rather than trusting a mirrored
106
+ `state.md` field. The file content is optional YAML configuring loop discipline:
107
+
108
+ ```yaml
109
+ # .devrites/AFK — presence = AFK mode active. All keys optional.
110
+ max_slices: 10 # read-only INITIAL budget; the mutable remaining count lives in state.md
111
+ notify: "ntfy.sh/my-topic" # shell command run on awaiting_human transition; see afk-discipline.md for the env table
112
+ allow_gates: [advisory, validating] # gate severities AFK may auto-handle; everything else pauses
113
+ ```
114
+
115
+ `max_slices` is **read-only config** — never rewritten in place. The mutable remaining
116
+ count lives in `state.md` as `AFK slices remaining: <n>`, initialized from `max_slices` on
117
+ the first AFK build and decremented per built slice (the cap is enforced by
118
+ `tick-afk.sh`, not by prose).
119
+
120
+ Absent or empty file = AFK active with defaults (`max_slices: unlimited`, no `notify`,
121
+ `allow_gates: [advisory]`). **Destructive migrations, auth/authz boundary changes, and
122
+ public-API breaks always pause regardless of `allow_gates`** — AFK never silently accepts
123
+ irreversible risk.
124
+
125
+ ## `questions.md` entry format
126
+
127
+ `questions.md` is append-only. Each entry:
128
+
129
+ ```markdown
130
+ ## q-2026-05-28-001
131
+ status: open | answered | dropped
132
+ slice: 03-list-endpoint # which slice raised it (or "spec" / "plan")
133
+ gate: advisory | validating | blocking | escalating
134
+ question: <one crisp sentence the human can answer>
135
+ options: | # ranked option set, recommended FIRST
136
+ 1. <recommended> (Recommended) — <dimension-tagged rationale + trade-off>
137
+ 2. <alternative> — <rationale + trade-off>
138
+ 3. Something else — describe it
139
+ proposed: <the recommended option restated — the HITL default + AFK auto-pick>
140
+ raised_at: 2026-05-28T17:30:00Z
141
+ answered_at: <iso when status flips to answered>
142
+ answer: <chosen option / human's reply, verbatim>
143
+ supersedes: <q-... if this replaces an answered entry, else omit>
144
+ ```
145
+
146
+ Canonical schema + rules (gate taxonomy, option-set contract): [`.claude/rules/afk-hitl.md`](../../../rules/afk-hitl.md).
147
+ `/rite-resolve <qid> "<answer>"` is the canonical mutator — manual edits work but the
148
+ skill keeps `state.md` and `questions.md` consistent.
149
+
150
+ ## `brief.md` template
151
+ ```markdown
152
+ # <Feature>
153
+ Objective: <one sentence — what and for whom>
154
+ Why now: <one line>
155
+ Definition of done: <one line>
156
+ ```
157
+
158
+ `decisions.md`, `assumptions.md`, `questions.md`, `drift.md`, `touched-files.md` are
159
+ append-only running logs — date-stamped bullet entries.
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: rite-status
3
+ description: Read-only report on the active feature — phase, active slice, next action, evidence, open questions, drift, risks, handoff readiness. Use when the user says "where am I", "what's next", "status", "is this ready to ship", "show the active feature". Not for invoking phases or for the menu (use `/rite`).
4
+ argument-hint: "[feature-slug]"
5
+ user-invocable: true
6
+ disable-model-invocation: true
7
+ ---
8
+
9
+ # /rite-status — active feature status
10
+
11
+ Read-only. Report where the active feature stands. **Do not run any phase.**
12
+
13
+ ## Load state
14
+
15
+ Run this snippet (the shared DevRites preamble — one canonical command that
16
+ resolves the install layouts: installed `.claude/` → plugin via `${CLAUDE_SKILL_DIR}`
17
+ → repo `pack/`, with a graceful fallback to reading `state.md`; default slug =
18
+ `.devrites/ACTIVE`):
19
+
20
+ ```bash
21
+ P=.claude/skills/devrites-lib/scripts/preamble.sh
22
+ [ -f "$P" ] || P="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/preamble.sh"
23
+ [ -f "$P" ] || P=pack/.claude/skills/devrites-lib/scripts/preamble.sh
24
+ [ -f "$P" ] && bash "$P" [feature-slug] || echo "(orientation preamble unavailable on this install — read state.md directly to orient)"
25
+ ```
26
+
27
+ The preamble prints the active workspace's `state.md` and the list of artifacts
28
+ present. The `!`-prefix dynamic-context-injection idiom is **not** used here so
29
+ the skill stays portable across harnesses; the script is the cross-harness
30
+ mechanism.
31
+
32
+ ## What to output
33
+
34
+ If no workspace: tell the user to run `/rite-spec <feature>` to start. Stop.
35
+
36
+ Otherwise summarize from the loaded state, concisely:
37
+
38
+ 1. **Feature** + one-line objective (from `brief.md`).
39
+ 2. **Phase**, **active slice** + its slice mode (from `state.md`). **Run mode**
40
+ (`afk` / `hitl`) is derived from `.devrites/AFK` presence (the preamble
41
+ already does this), not from a `state.md` field — present = `afk`, absent = `hitl`.
42
+ 3. **Status** — `running` / `awaiting_human` / `blocked` / `done`. If
43
+ `awaiting_human`, render the `Awaiting human` block from `state.md` (qid, gate,
44
+ question, proposed, raised_at, blocking_slices) and instruct
45
+ `/rite-resolve <qid> "<answer>"`.
46
+ 4. **Next action** — the single recommended next command.
47
+ 5. **Evidence** — what's proven vs unproven (from `evidence.md` /
48
+ `browser-evidence.md`).
49
+ 6. **Open questions** — count by gate (from `questions.md`:
50
+ `n open: x blocking · y validating · z advisory`) + the blocking qids by id and one-line question.
51
+ 7. **Unresolved drift** (`drift.md`).
52
+ 8. **Risks** (from `state.md` / `spec.md`).
53
+ 9. **Ready for handoff?** — see section below.
54
+
55
+ Flag anything blocking: unresolved drift, failing evidence, `Status: awaiting_human`,
56
+ or open questions that change product behavior. End with the recommended next command
57
+ and nothing else.
58
+
59
+ ## Ready for handoff?
60
+
61
+ After the summary items (1–8), render the handoff readiness section (item 9 above) last —
62
+ the canonical output order is: progress footer → summary items 1–8 → handoff readiness.
63
+ A fresh agent
64
+ or a future session should be able to pick the work up from the workspace
65
+ **alone**, with zero chat context. Check:
66
+
67
+ - [ ] `state.md` has a **single** next-action command (not a list of options).
68
+ - [ ] `questions.md` lists every unresolved question raised in this or any
69
+ prior session.
70
+ - [ ] `decisions.md` records the rationale for any non-obvious choice
71
+ ("why this, not the obvious alternative").
72
+ - [ ] `assumptions.md` lists every load-bearing assumption that wasn't
73
+ confirmed by code or by the user.
74
+ - [ ] `drift.md` shows current resolution status for every drift event
75
+ (open / asked-user / repaired).
76
+ - [ ] `evidence.md` is current for the active phase (no claims without
77
+ recorded commands + output).
78
+
79
+ If any item above fails, suggest `/rite-handoff` to compact chat-only
80
+ context into the workspace before the session ends.
81
+
82
+ ## Gotchas
83
+ - Read-only — never advance a phase or write to the workspace; that's the phase skills' job.
84
+ - Report from the `.devrites/` files, not chat memory (it's gone after `/clear`).
85
+ - Give the single next command, not a menu of options — an ambiguous next-action fails the handoff check.
86
+
87
+ ## Output format
88
+
89
+ **Footer first** — `/rite-status` *is* the status meter: render it by running the progress footer (`progress.sh`, resolved like the step-0 preamble — canonical snippet in `devrites-lib/SKILL.md`). The slice meter + flow ribbon answer "where am I / how much is left". Then the handoff-readiness check:
90
+ ```
91
+ Ready for handoff: yes / partial (n gaps) / no
92
+
93
+ Gaps (if any):
94
+ - state.md "next action" lists 2 options, not 1
95
+ - 3 open questions raised in conversation not yet in questions.md
96
+ - ...
97
+ ```
98
+
99
+ If gaps exist, the recommended next command is to **persist them first** (see
100
+ `.claude/rules/core.md` — "Persistence before stopping"). Only then
101
+ move to the phase's next action.
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: rite-temper
3
+ description: Strategic review of a readied `spec.md` before planning — pick a scope mode (expand / selective / hold-rigor / reduce-to-MVP), run a pre-mortem, harden the spec, and fold decisions back via the Spec Drift Guard plus a persistent `strategy.md`. Use when the user says "temper this", "strategy review", "think bigger", "scope check", "pre-mortem the spec", "are we over/under-building", or before defining a big or risky feature. Not for a rough idea (`/rite-pressure-test`), a mid-build decision (`devrites-doubt`), a code diff (`/rite-review`), or the final gate (`/rite-seal`).
4
+ argument-hint: "[feature-slug] [--mode expand|selective|hold|reduce]"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # /rite-temper — temper the spec before you plan
9
+
10
+ Take a readied spec and **temper** it: heat it (raise ambition on the *outcome*), then
11
+ quench it (pre-mortem + prune the *solution surface*) — stronger and less brittle. The one
12
+ DevRites step that decides scope/ambition on a written spec and folds the result into the
13
+ canonical contract, so `/rite-define` plans the **hardened** spec. Optional for small work
14
+ (significance-gated — auto-skips low-stakes specs), but always invoked inside
15
+ `/rite-autocomplete`. **Read the active workspace first**; if there's no readied
16
+ `spec.md`, tell the user to run `/rite-spec`.
17
+
18
+ ## Rules consulted (read on demand from `.claude/rules/`)
19
+ **Step 0:** Read `.claude/rules/core.md` first. Pull on demand: `patterns.md` +
20
+ `coding-style.md` (the over-engineering / YAGNI rubric — reuse the pack's standard, don't
21
+ invent one), `documentation.md` (ADR-style `decisions.md` entries), `afk-hitl.md`
22
+ (irreversible-risk list + gate ceiling).
23
+
24
+ ## Operating rules
25
+ - **Ambition on outcomes, minimalism on the surface.** Raise the success bar and solve the
26
+ *real* problem; never add speculative capability/abstraction. The reconciliation hinge —
27
+ bigger ambition, smaller surface.
28
+ - **Every scope change routes through the Spec Drift Guard** — it only becomes real by being
29
+ written into `spec.md` as a recorded, confirmable decision. Expansion is **opt-in** (HITL
30
+ confirm; AFK pauses — see autocomplete policy). Nothing auto-grows into the build.
31
+ - **Bound ambition by reversibility.** Auth / migration / public-API / data-model touches get
32
+ the *opposite* of ambition — maximum conservatism; they always pause (irreversible-risk list).
33
+ - **Honest verdict.** Never round "needs work" up to "ready"; record every scope call's *why*.
34
+ - **You write; the reviewer judges.** You are the single canonical writer (`strategy.md` +
35
+ the spec edits); the reviewer agent is read-only.
36
+ - **Demand the spec-quality checklists for big features.** `/rite-temper` only fires on
37
+ significant specs — exactly where vague requirement prose is most expensive. Before hardening,
38
+ confirm `checklists/<domain>.md` exist and pass (`rite-spec/reference/spec-checklists.md`); a
39
+ scope expansion you fold in **adds its own** rows (new Success/Acceptance criteria get
40
+ "unit-tested for English" too). A folded expansion with an unquantified criterion is a CRITICAL
41
+ fail that re-opens the readiness gate.
42
+
43
+ ## Workflow
44
+ 0. **Read `.claude/rules/core.md`**. Then **run the shared orientation preamble** — it prints `state.md`, the artifacts present,
45
+ the run mode (HITL/AFK), and the open-question tally by gate, so you orient deterministically
46
+ instead of re-deriving state from raw Markdown:
47
+ ```bash
48
+ P=.claude/skills/devrites-lib/scripts/preamble.sh
49
+ [ -f "$P" ] || P="${CLAUDE_SKILL_DIR:-}/../devrites-lib/scripts/preamble.sh"
50
+ [ -f "$P" ] || P=pack/.claude/skills/devrites-lib/scripts/preamble.sh
51
+ [ -f "$P" ] && bash "$P" || echo "(orientation preamble unavailable on this install — read state.md directly to orient)"
52
+ ```
53
+ Then read the workspace: `spec.md` (+ `decisions.md`,
54
+ `assumptions.md`, `design-brief.md` if UI), `state.md`. Require `Spec gate: passed` — else
55
+ STOP → `/rite-spec`. If a plan already exists, scope changes route through `/rite-plan
56
+ repair` (record in `drift.md`), not a blind spec edit.
57
+ 1. **Significance test** — [`reference/significance.md`](reference/significance.md). Low-stakes
58
+ / shape-not-meaning work → write the one-line `skipped — low stakes (<trigger>)` verdict to `strategy.md`,
59
+ set `state.md` `Next step: /rite-define`, and recommend it. Otherwise fire the full pass below.
60
+ 2. **FORWARD pass + mode selection** — [`reference/scope-modes.md`](reference/scope-modes.md).
61
+ Diverge on the *outcome* (the 10-star version of the real problem), then commit **exactly
62
+ one** scope mode (`expand` opt-in · `selective` · `hold-rigor` · `reduce-to-MVP`) with its
63
+ rationale and the **hinge** (what would change the call). `$ARGUMENTS` `--mode` is a hint, not
64
+ a command.
65
+ 3. **INVERSION pass** — pre-mortem in past tense ("it shipped and failed — what went wrong"),
66
+ each top risk carrying likelihood + mitigation + the slice it will bind to; then the **YAGNI
67
+ ledger** (each candidate scope item gets the "imagine the later refactor" test; defer unless
68
+ now-cost is trivial AND deferred-cost is large).
69
+ 4. **Score the 9 dimensions** — [`reference/review-dimensions.md`](reference/review-dimensions.md).
70
+ Cite evidence *before* the band; **gate on the floor** (the weakest dimension, not an average).
71
+ 5. **Walk the findings WITH the human — do not batch-dump.** The artifact is the *output* of an
72
+ interactive review, not a substitute for it: surface each material scope call / finding via
73
+ `AskUserQuestion`, one at a time, best-guess + **why**. Each material scope call ends as a
74
+ **recorded decision** — a resolved `questions.md` qid (HITL) or a `decisions.md` ADR (AFK) —
75
+ so the walk leaves an auditable trail, not just chat. (AFK gate policy is single-sourced in
76
+ [`reference/significance.md`](reference/significance.md): `hold-rigor` + `reduce-to-MVP`
77
+ auto-apply, **any `expand` is a blocking pause**, irreversible-risk always pauses.)
78
+ 6. **Write `strategy.md` + fold back** — [`reference/strategy-template.md`](reference/strategy-template.md).
79
+ **One drift rule (decide by whether a plan exists):** *no `plan.md` yet* (the normal pre-define
80
+ case) → update `spec.md` **through the Spec Drift Guard** — *Success criteria* **and**
81
+ *Acceptance criteria* for each opt-in expansion / cut, **Non-goals** for every deferred item,
82
+ *Constraints* **and** *Risks* the pre-mortem demands, and the gaps/decisions table; *`plan.md`
83
+ already exists* → do **not** edit `spec.md` here — write the deltas to `drift.md` and hand off
84
+ to `/rite-plan repair`. Either way, append `decisions.md` (one ADR per scope call: context ·
85
+ decision · why-not · what-would-change-it) and `assumptions.md` (every "we'll probably need X" →
86
+ assumption-to-verify). **Every scope delta must carry a recorded human decision** — a resolved
87
+ `questions.md` qid (HITL) or a `decisions.md` ADR (AFK within the ceiling); a folded change with
88
+ no recorded decision is the batch-dump failure. **Re-check the spec Readiness gate** (it fails if
89
+ any folded scope delta lacks its decision). Update `state.md`: `Phase: temper`,
90
+ `Next step: /rite-define`; on a blocking pause (expand / irreversible / a dimension still below
91
+ bar) write the `Awaiting human` block + `Status: awaiting_human` before stopping.
92
+ 7. **Adversarial verification loop** — dispatch [`devrites-strategy-reviewer`](../../agents/devrites-strategy-reviewer.md)
93
+ (fresh context, **only** the hardened spec + the rubric — no authoring reasoning). Resolve
94
+ actionable findings by editing `spec.md`/`strategy.md`, re-dispatch; **cap ≤3 iterations**. A
95
+ dimension still below bar after 3 → blocking question (HITL) or AFK gate-ceiling entry;
96
+ irreversible-risk findings always pause. If sub-agents are unavailable, do the independent
97
+ rubric pass yourself in a separate read, discarding the authoring reasoning (a flagged
98
+ fallback, not an independent review).
99
+ 8. **STOP.** Report the mode, the scope deltas, and the floor verdict; recommend `/rite-define`.
100
+
101
+ > **Mid-flight discipline.** When tempted to dump findings into `strategy.md` and skip the
102
+ > walk-through, expand the surface (not the outcome), grow scope without the Drift Guard, or
103
+ > score before citing evidence — see [`reference/anti-patterns.md`](reference/anti-patterns.md).
104
+
105
+ ## Output
106
+
107
+ **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:
108
+ ```
109
+ Tempered: <slug>
110
+ Significance: full | skipped — low stakes (<trigger>)
111
+ Mode: <expand|selective|hold-rigor|reduce-to-MVP> — <one-line rationale> (hinge: <what would change it>)
112
+ Scope: +<n expanded> / -<n reduced> / <n deferred to Non-goals> (all via Spec Drift Guard)
113
+ Pre-mortem: <n top risks> mitigated → bound to slices
114
+ Dimensions: floor = <strong|adequate|thin|broken> on <weakest dimension> Reviewer loop: <n> iter
115
+ Spec readiness: re-checked → passes | <blocker>
116
+ Next: /rite-define (plans the hardened spec)
117
+ ↻ Hygiene: /clear before /rite-define (strategy.md + spec edits + decisions.md + assumptions.md captured). See rules/context-hygiene.md.
118
+ ```
119
+ **DO NOT plan, slice, or write code here** — that's `/rite-define` and `/rite-build`.
@@ -0,0 +1,29 @@
1
+ # /rite-temper — anti-patterns
2
+
3
+ Universal rationalizations + red flags live in
4
+ [`../../../rules/anti-patterns.md`](../../../rules/anti-patterns.md) — read it when the
5
+ reluctance is broader than this phase. Below are the temper-specific ones.
6
+
7
+ ## Phase rationalizations
8
+
9
+ | Excuse | Rebuttal |
10
+ |---|---|
11
+ | "I'll write all the findings into `strategy.md` and let the user read it." | The artifact is the *output* of an interactive review, not a substitute for it. A finding's path to "done" goes **through `AskUserQuestion`**, one at a time, with a recommendation + why. Dumping findings into one write and moving on is the exact failure mode this skill exists to prevent. |
12
+ | "Bigger is better — let's add the extra capability while we're thinking big." | Ambition belongs on the **outcome**, not the **solution surface**. A speculative capability/abstraction is gold plating. Expand the problem + acceptance; never the machinery. |
13
+ | "The user obviously wants the ambitious version — I'll add it to the spec." | Expansion is **opt-in**, recorded, and confirmed (HITL) or paused (AFK). Adding acceptance the human didn't approve is silent scope growth — route it through the Spec Drift Guard or don't add it. |
14
+ | "It's over-scoped, I'll just trim those criteria." | Reducing scope is **still a spec change**. Cut acceptance only as a recorded Spec-Drift-Guard decision, and park the rest in Non-goals with a revisit note — never a silent trim. |
15
+ | "This dimension is weak but the others are strong — net it's fine." | The gate is the **floor**, not the average. A spec `broken` on risk does not pass because it's `strong` on clarity. |
16
+ | "I can see it's adequate — I'll note the band, evidence is obvious." | Cite the evidence (the spec line or its absence) **before** the band. Score-first-justify-later is how a reviewer rationalizes a spec it already likes. |
17
+ | "It's a strategy doc, the implementation concerns don't apply yet." | Cross-cutting concerns (security/data/observability/modifiability) are where strategy breaks down. Address each or mark it explicitly N/A — silent omission is a gap. |
18
+ | "This greenfield design is elegant." | Elegant for a codebase that doesn't exist. Ground ambition in the real seams + blast radius; flag a new dependency / second design system for an explicit decision. |
19
+
20
+ ## Red flags
21
+ - `strategy.md` written but `spec.md` acceptance/Non-goals **not** updated — the build follows
22
+ the spec, so the review changed nothing.
23
+ - An `expand` decision auto-applied in AFK (it must pause), or any irreversible-risk touch that
24
+ didn't pause.
25
+ - A pre-mortem with risks listed but no mitigation + owning slice — a risk without an owner is a
26
+ wish.
27
+ - The reviewer loop running past 3 iterations, or the reviewer being handed the author's
28
+ reasoning (defeats the fresh-context point).
29
+ - The skill writing a `plan.md`, slicing, or touching code — that's `/rite-define` / `/rite-build`.
@@ -0,0 +1,65 @@
1
+ # Review dimensions + the floor-gate rubric
2
+
3
+ The spec is scored on nine dimensions. Each catches a *different* failure mode — strength in
4
+ one never compensates for collapse in another, so the gate is the **floor**, not an average.
5
+
6
+ ## The nine dimensions
7
+ 1. **Problem altitude & ambition** — is this solving the *right* problem at the right altitude,
8
+ or timidly improving the obvious path / over-reaching past the real need? Here, *under-
9
+ reaching* on the outcome is a failure, not just over-building.
10
+ 2. **Scope honesty & boundary** — are Non-goals explicit? Is there a Minimum Usable Subset and a
11
+ clear IN/OUT line? Flags grab-bags and a missing "Won't-have-this-time".
12
+ 3. **Premise & alternatives** — are the load-bearing premises stated and challenged, and is at
13
+ least one genuinely different approach (different data model / flow / boundary) considered
14
+ with its trade-off? ("Alternatives considered" is one of the most valuable parts of a spec.)
15
+ 4. **Pre-mortem risk coverage** — run in prospective hindsight; each top risk carries likelihood
16
+ + mitigation + the slice that owns it. **Unmitigated top risks are gating.**
17
+ 5. **Over-engineering / YAGNI** — speculative capability, unused extension points, premature
18
+ abstraction, second-system bloat. Apply the pack's standard (`patterns.md`) + the "imagine
19
+ the later refactor" test. Defer unless now-cost is trivial AND deferred-cost is large.
20
+ 6. **Acceptance testability & done-ness** — every acceptance criterion measurable, technology-
21
+ agnostic, and comparable **down to a baseline** ("better than the current workaround"), not
22
+ up to an unbounded ideal. Vague adjectives ("fast/robust/intuitive") and "handles X
23
+ gracefully" are flagged.
24
+ 7. **Irreversibility & blast radius** — are auth / migration / public-API / data-model touches
25
+ treated with conservatism + rollback, and is the blast radius understood (from a
26
+ code-intelligence index if available)?
27
+ 8. **Cross-cutting coverage** — security/trust-boundary, data & migration, observability, and
28
+ modifiability each explicitly addressed **or explicitly N/A** — no silent omission.
29
+ 9. **Convention fit & placement realism** — does the ambition fit the codebase's existing seams
30
+ and patterns, or assume greenfield freedom a constrained space doesn't have? Prefer existing
31
+ conventions; flag a new dependency / second design system for explicit decision.
32
+
33
+ UI specs additionally inherit `rite-polish/reference/anti-ai-slop.md` at the cross-cutting
34
+ dimension (design-system fit, anti-AI-slop) — but `/rite-temper` reviews the *spec/design-brief*,
35
+ not pixels; the built UI is judged later by `devrites-frontend-reviewer`.
36
+
37
+ ## The rubric — coarse bands, evidence first
38
+ Score each dimension on a **labeled band**, never a 1-10 float or a composite number (labels do
39
+ the work — matches the pack's severity-vocabulary stance):
40
+
41
+ | Band | Meaning |
42
+ |---|---|
43
+ | **strong** | Addressed well; no action needed. |
44
+ | **adequate** | Addressed; minor sharpening only (Suggestion/Nit). |
45
+ | **thin** | Under-addressed; a real gap to close before planning (Important). |
46
+ | **broken** | Missing or wrong in a way that will cost a redo (Critical). |
47
+
48
+ **Cite evidence before the band** — name the spec line / absence that justifies it; never score
49
+ first and rationalize after. Borderline dimensions may be sampled twice; take the **lower** band
50
+ (don't average up).
51
+
52
+ ## The floor-gate
53
+ - **Pass** only when every dimension is `adequate` or `strong` **and** no unmitigated top
54
+ pre-mortem risk remains. The verdict is the **weakest** dimension — a spec strong on clarity
55
+ but `broken` on risk does **not** pass.
56
+ - Individual findings carry the pack's standard severity labels (**Critical / Important /
57
+ Suggestion / Nit / FYI**) so they compose with `/rite-review` and `/rite-seal`. `broken` →
58
+ Critical, `thin` → Important; **FYI is band-independent** — an observation on a `strong` /
59
+ `adequate` dimension, not a failing band.
60
+ - **Don't double-count overlap.** Some dimensions key on the same evidence (e.g. #7
61
+ irreversibility & #9 convention-fit both touch codebase realism; #1 ambition & #2 scope both
62
+ touch over/under-reach). Don't fail two dimensions for the *same* root cause — cite the
63
+ evidence once, band it once, so one problem isn't laundered into two floor failures.
64
+ - Below-bar dimension after the ≤3-iteration reviewer loop → blocking question (HITL) or AFK
65
+ gate-ceiling entry. Irreversible-risk findings always pause regardless of band.
@@ -0,0 +1,53 @@
1
+ # Scope modes + the two passes
2
+
3
+ The heart of `/rite-temper`: two ordered passes (heat, then quench), converging on exactly
4
+ one scope mode. Ambition is a **generative** move followed by a **required convergence** — the
5
+ divergence is never the spec; the converged sweet spot is.
6
+
7
+ ## Pass 1 — FORWARD (heat: raise ambition on the outcome)
8
+ Diverge on the *real problem*, not the obvious path. Ask:
9
+ - What would an order-of-magnitude-better **outcome** look like (the 10-star version)? Design
10
+ the extreme, then come back to the feasible sweet spot — don't ship the extreme.
11
+ - Is a **premise** load-bearing and wrong? Name the assumptions the spec rests on; challenge
12
+ the one that, if false, changes everything.
13
+ - Where is **under-reaching** the real risk — a timid improvement to a path we should reframe?
14
+
15
+ Ambition aims at the **outcome** (problem definition, success bar, user value) and at
16
+ complexity-**neutral** future-proofing. It never aims at the **solution surface** (that's Pass 2's
17
+ job to prune). Ground every ambitious idea in the codebase's real seams and blast radius (a code-intelligence
18
+ index if available — see `../../../rules/tooling.md`) — don't invent greenfield scope a
19
+ constrained codebase can't absorb.
20
+
21
+ ## Pass 2 — INVERSION (quench: pre-mortem + prune)
22
+ Invert. Two subtractive moves:
23
+ - **Pre-mortem (prospective hindsight).** State it in past tense: *"It's six months out. This
24
+ shipped and failed. What went wrong?"* List the top failure modes; for each: likelihood,
25
+ mitigation, and the slice that will own the mitigation. Unmitigated top risks are **gating**.
26
+ - **YAGNI ledger.** Each candidate scope item gets the "imagine the later refactor" test: if
27
+ adding it *later* isn't materially more expensive, **defer it** (with a revisit note).
28
+ Bias hard toward defer — most presumed-needed features are never actually used. Reuse the
29
+ pack's existing standard — `patterns.md` ("no abstraction before two real callers",
30
+ "speculative generality") — don't invent a new YAGNI rule.
31
+
32
+ ## The four modes — commit exactly one
33
+ Mode selection is the first convergence move. Record the chosen mode + rationale + the
34
+ **hinge** (what would change the call) in `strategy.md` and `decisions.md`.
35
+
36
+ | Mode | When | What it does | YAGNI / Drift Guard |
37
+ |---|---|---|---|
38
+ | **EXPAND** *(opt-in, default OFF)* | Under-reaching on the outcome is the real risk | Raise the success bar / reframe to the deeper problem; thinner-but-more-complete path to a bigger target | Expands the *problem + acceptance*, not machinery. Each added criterion is a Drift-Guard-recorded, human-confirmed (HITL) decision — never auto-grown |
39
+ | **SELECTIVE** | One or two high-leverage dimensions deserve more; the rest is right | Expand only the high-upside dimension; hold the rest at spec scope | Each selected expansion routes through the Guard; everything not selected is parked in Non-goals so it's neither dropped nor re-injected mid-build |
40
+ | **HOLD-RIGOR** | The spec is right-sized (default for irreversible-risk-heavy or already-tight specs) | No scope change — pure hardening: pre-mortem, risk mitigations, acceptance sharpening, cross-cutting coverage | Adds zero surface; trivially Drift-Guard-clean (no acceptance change) |
41
+ | **REDUCE-TO-MVP** | Over-scoped: second-system bloat, ~all must-haves, gold-plating | Hammer scope to the Minimum Usable Subset; move the rest to Non-goals with one-line reasons + revisit notes | Strongest YAGNI alignment. Cutting acceptance is **still a spec change** — record it via the Guard, never a silent trim |
42
+
43
+ ## Bound ambition by reversibility
44
+ The bigger the bet, the more it must be reversible. Irreversible-risk areas (auth, migrations,
45
+ public API, data model) get the **opposite** of ambition — maximum conservatism, explicit
46
+ rollback, and they **always pause** regardless of mode (the `afk-hitl.md` irreversible-risk
47
+ list is honored verbatim). Size big bets so that if the whole thing vanished tomorrow, you'd be
48
+ fine.
49
+
50
+ ## Effort foresight (frame it now, not "later")
51
+ While choosing scope, surface the late-stage questions early: *"What will surprise us at
52
+ integration? What will we wish we'd planned for at polish/test time?"* Turn each into a
53
+ constraint, a risk, or a deferred Non-goal **now** — not a "figure it out later".
@@ -0,0 +1,46 @@
1
+ # Significance test — fire the full review, or skip it
2
+
3
+ `/rite-temper` is **significance-gated**: full strategic rigor only when the work is big
4
+ enough to earn it, a one-line skip otherwise. This is the shared definition used by both the
5
+ optional `/rite-temper` path and the always-run (significance-gated) `/rite-autocomplete` step,
6
+ so they agree on when it fires.
7
+
8
+ A strategic review of a five-line, reversible change is theatre; a strategic review of an
9
+ auth rewrite is the cheapest insurance you'll buy. Gate on stakes and shape, not uniformly.
10
+
11
+ ## Fire the FULL review when ANY trips
12
+ - **Irreversible-risk contact** — the slice/spec touches anything on the `afk-hitl.md`
13
+ irreversible-risk list: destructive data migration, auth/authz boundary, public-API break,
14
+ external-service contract, filesystem destruction outside the workspace.
15
+ - **Data model** — new/changed entities, relationships, or persistence shape.
16
+ - **Cross-module blast radius** — the impact (from a code-intelligence index if available — see
17
+ `../../../rules/tooling.md` — or an honest estimate) crosses
18
+ module/service boundaries or has many dependents.
19
+ - **Greenfield / ambiguous scope** — a new surface with no existing seam to follow, or a spec
20
+ whose "right size" is genuinely open (multiple defensible scopes).
21
+ - **Multi-slice / multi-day** — the work decomposes into several slices (large enough that a
22
+ wrong scope call is expensive to unwind).
23
+ - **The user asked** — "think bigger", "is this ambitious enough", "scope check", "pre-mortem",
24
+ an explicit `/rite-temper` invocation, or a chosen `--mode`. An explicit ask always fires.
25
+
26
+ ## Skip (low stakes) when ALL hold
27
+ - Single-module, reversible, behavior-shaped-not-structural change.
28
+ - No irreversible-risk contact; blast radius contained to the touched files.
29
+ - Scope is unambiguous — there's one obvious right size and the spec already has it.
30
+
31
+ On skip, **don't run the passes**. Write only the one-line verdict to `strategy.md`:
32
+
33
+ ```markdown
34
+ # Strategy: <slug>
35
+ Significance: skipped — low stakes (<the trigger that was NOT met, e.g. "single-module, reversible, scope unambiguous">)
36
+ Next: /rite-define
37
+ ```
38
+
39
+ Then recommend `/rite-define`. A skip is a *recorded* decision, not a silent omission — the
40
+ seal can see the call was made deliberately.
41
+
42
+ ## In `/rite-autocomplete`
43
+ Autocomplete runs the significance test every feature. On skip → straight to `/rite-define`
44
+ (no pause). On fire → run the full review under the AFK gate ceiling: `hold-rigor` and
45
+ `reduce-to-MVP` auto-apply (they never grow acceptance); **any `expand` is a blocking pause**;
46
+ irreversible-risk findings always pause. Expansion is never auto-grown unattended.