devrites 5.10.2 → 5.11.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 (250) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +24 -10
  3. package/bin/devrites.mjs +2 -0
  4. package/docs/command-map.md +5 -4
  5. package/docs/skills.md +10 -4
  6. package/engine/internal/devritespaths/paths.go +2 -0
  7. package/engine/internal/hostpack/hostpack.go +39 -5
  8. package/engine/internal/hostpack/hostpack_test.go +27 -13
  9. package/engine/internal/install/apply.go +17 -4
  10. package/engine/internal/install/install.go +9 -2
  11. package/engine/internal/install/install_test.go +15 -2
  12. package/engine/internal/install/preflight.go +8 -2
  13. package/engine/internal/install/update.go +1 -1
  14. package/install.sh +4 -1
  15. package/pack/generated/README.md +4 -2
  16. package/pack/generated/devin/AGENTS.md +23 -0
  17. package/pack/generated/devin/agents/devrites-code-reviewer.md +145 -0
  18. package/pack/generated/devin/agents/devrites-devex-reviewer.md +126 -0
  19. package/pack/generated/devin/agents/devrites-doubt-reviewer.md +91 -0
  20. package/pack/generated/devin/agents/devrites-evidence-scout.md +77 -0
  21. package/pack/generated/devin/agents/devrites-frontend-reviewer.md +119 -0
  22. package/pack/generated/devin/agents/devrites-performance-reviewer.md +117 -0
  23. package/pack/generated/devin/agents/devrites-plan-drafter.md +102 -0
  24. package/pack/generated/devin/agents/devrites-plan-reviewer.md +144 -0
  25. package/pack/generated/devin/agents/devrites-proof-runner.md +76 -0
  26. package/pack/generated/devin/agents/devrites-retrospector.md +64 -0
  27. package/pack/generated/devin/agents/devrites-security-auditor.md +112 -0
  28. package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +97 -0
  29. package/pack/generated/devin/agents/devrites-slice-wright.md +219 -0
  30. package/pack/generated/devin/agents/devrites-spec-reviewer.md +99 -0
  31. package/pack/generated/devin/agents/devrites-strategy-reviewer.md +102 -0
  32. package/pack/generated/devin/agents/devrites-test-analyst.md +97 -0
  33. package/pack/generated/devin/agents/devrites-upgrade-planner.md +91 -0
  34. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +64 -0
  35. package/pack/generated/devin/skills/devrites-audit/SKILL.md +51 -0
  36. package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +77 -0
  37. package/pack/generated/devin/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
  38. package/pack/generated/devin/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
  39. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +97 -0
  40. package/pack/generated/devin/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
  41. package/pack/generated/devin/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
  42. package/pack/generated/devin/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
  43. package/pack/generated/devin/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  44. package/pack/generated/devin/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
  45. package/pack/generated/devin/skills/devrites-debug-recovery/reference/trace.md +25 -0
  46. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +80 -0
  47. package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +87 -0
  48. package/pack/generated/devin/skills/devrites-frontend-craft/reference/craft.md +63 -0
  49. package/pack/generated/devin/skills/devrites-frontend-craft/reference/design-references.md +116 -0
  50. package/pack/generated/devin/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
  51. package/pack/generated/devin/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
  52. package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
  53. package/pack/generated/devin/skills/devrites-frontend-craft/reference/shape.md +56 -0
  54. package/pack/generated/devin/skills/devrites-interview/SKILL.md +103 -0
  55. package/pack/generated/devin/skills/devrites-lib/SKILL.md +57 -0
  56. package/pack/generated/devin/skills/devrites-lib/reference/candidate-integrity.md +42 -0
  57. package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +64 -0
  58. package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
  59. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +73 -0
  60. package/pack/generated/devin/skills/devrites-lib/reference/reply-contract.md +88 -0
  61. package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +60 -0
  62. package/pack/generated/devin/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
  63. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +415 -0
  64. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +99 -0
  65. package/pack/generated/devin/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
  66. package/pack/generated/devin/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
  67. package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
  68. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  69. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +108 -0
  70. package/pack/generated/devin/skills/devrites-lib/reference/standards/coding-style.md +48 -0
  71. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +109 -0
  72. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +167 -0
  73. package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
  74. package/pack/generated/devin/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
  75. package/pack/generated/devin/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
  76. package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +31 -0
  77. package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
  78. package/pack/generated/devin/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
  79. package/pack/generated/devin/skills/devrites-lib/reference/standards/documentation.md +43 -0
  80. package/pack/generated/devin/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
  81. package/pack/generated/devin/skills/devrites-lib/reference/standards/elicitation.md +85 -0
  82. package/pack/generated/devin/skills/devrites-lib/reference/standards/error-handling.md +47 -0
  83. package/pack/generated/devin/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
  84. package/pack/generated/devin/skills/devrites-lib/reference/standards/hooks.md +25 -0
  85. package/pack/generated/devin/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
  86. package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
  87. package/pack/generated/devin/skills/devrites-lib/reference/standards/observability.md +88 -0
  88. package/pack/generated/devin/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
  89. package/pack/generated/devin/skills/devrites-lib/reference/standards/patterns.md +68 -0
  90. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +51 -0
  91. package/pack/generated/devin/skills/devrites-lib/reference/standards/principles.md +42 -0
  92. package/pack/generated/devin/skills/devrites-lib/reference/standards/prose-style.md +123 -0
  93. package/pack/generated/devin/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
  94. package/pack/generated/devin/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
  95. package/pack/generated/devin/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
  96. package/pack/generated/devin/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
  97. package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +202 -0
  98. package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
  99. package/pack/generated/devin/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
  100. package/pack/generated/devin/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
  101. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +212 -0
  102. package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +92 -0
  103. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
  104. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
  105. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
  106. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
  107. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
  108. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
  109. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
  110. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
  111. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
  112. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
  113. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +267 -0
  114. package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +74 -0
  115. package/pack/generated/devin/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
  116. package/pack/generated/devin/skills/devrites-prose-craft/reference/examples.md +131 -0
  117. package/pack/generated/devin/skills/devrites-prose-craft/reference/structures.md +196 -0
  118. package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +53 -0
  119. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +135 -0
  120. package/pack/generated/devin/skills/devrites-ux-shape/reference/brief-template.md +108 -0
  121. package/pack/generated/devin/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
  122. package/pack/generated/devin/skills/rite/SKILL.md +148 -0
  123. package/pack/generated/devin/skills/rite/reference/menu.md +48 -0
  124. package/pack/generated/devin/skills/rite-adopt/SKILL.md +51 -0
  125. package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +19 -0
  126. package/pack/generated/devin/skills/rite-adopt/reference/anti-patterns.md +19 -0
  127. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +142 -0
  128. package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +43 -0
  129. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +151 -0
  130. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +97 -0
  131. package/pack/generated/devin/skills/rite-build/SKILL.md +102 -0
  132. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +148 -0
  133. package/pack/generated/devin/skills/rite-build/reference/anti-patterns.md +27 -0
  134. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +120 -0
  135. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +56 -0
  136. package/pack/generated/devin/skills/rite-build/reference/frontend-trigger.md +39 -0
  137. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +51 -0
  138. package/pack/generated/devin/skills/rite-build/reference/output.md +33 -0
  139. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +214 -0
  140. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +89 -0
  141. package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +84 -0
  142. package/pack/generated/devin/skills/rite-build/reference/tdd.md +27 -0
  143. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +96 -0
  144. package/pack/generated/devin/skills/rite-clarify/SKILL.md +98 -0
  145. package/pack/generated/devin/skills/rite-clarify/reference/anti-patterns.md +24 -0
  146. package/pack/generated/devin/skills/rite-clarify/reference/decision-coverage.md +55 -0
  147. package/pack/generated/devin/skills/rite-converge/SKILL.md +144 -0
  148. package/pack/generated/devin/skills/rite-converge/reference/anti-patterns.md +35 -0
  149. package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +65 -0
  150. package/pack/generated/devin/skills/rite-customize/SKILL.md +60 -0
  151. package/pack/generated/devin/skills/rite-define/SKILL.md +168 -0
  152. package/pack/generated/devin/skills/rite-define/reference/anti-patterns.md +26 -0
  153. package/pack/generated/devin/skills/rite-define/reference/gates.md +159 -0
  154. package/pack/generated/devin/skills/rite-define/reference/plan-template.md +149 -0
  155. package/pack/generated/devin/skills/rite-doctor/SKILL.md +68 -0
  156. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +55 -0
  157. package/pack/generated/devin/skills/rite-explain/SKILL.md +152 -0
  158. package/pack/generated/devin/skills/rite-explain/reference/intake.md +89 -0
  159. package/pack/generated/devin/skills/rite-frame/SKILL.md +114 -0
  160. package/pack/generated/devin/skills/rite-frame/reference/failure-modes.md +66 -0
  161. package/pack/generated/devin/skills/rite-handoff/SKILL.md +97 -0
  162. package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +44 -0
  163. package/pack/generated/devin/skills/rite-learn/SKILL.md +72 -0
  164. package/pack/generated/devin/skills/rite-plan/SKILL.md +185 -0
  165. package/pack/generated/devin/skills/rite-plan/reference/anti-patterns.md +34 -0
  166. package/pack/generated/devin/skills/rite-plan/reference/dependency-graph.md +48 -0
  167. package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +105 -0
  168. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +168 -0
  169. package/pack/generated/devin/skills/rite-plan/reference/task-breakdown.md +42 -0
  170. package/pack/generated/devin/skills/rite-polish/SKILL.md +105 -0
  171. package/pack/generated/devin/skills/rite-polish/reference/adr-promotion.md +11 -0
  172. package/pack/generated/devin/skills/rite-polish/reference/anti-ai-slop.md +187 -0
  173. package/pack/generated/devin/skills/rite-polish/reference/anti-patterns.md +30 -0
  174. package/pack/generated/devin/skills/rite-polish/reference/backend-polish.md +80 -0
  175. package/pack/generated/devin/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
  176. package/pack/generated/devin/skills/rite-polish/reference/code.md +82 -0
  177. package/pack/generated/devin/skills/rite-polish/reference/design-memory.md +117 -0
  178. package/pack/generated/devin/skills/rite-polish/reference/design-system-discovery.md +8 -0
  179. package/pack/generated/devin/skills/rite-polish/reference/harden-checklist.md +109 -0
  180. package/pack/generated/devin/skills/rite-polish/reference/ledger.md +65 -0
  181. package/pack/generated/devin/skills/rite-polish/reference/ui.md +137 -0
  182. package/pack/generated/devin/skills/rite-pov/SKILL.md +57 -0
  183. package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +54 -0
  184. package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +66 -0
  185. package/pack/generated/devin/skills/rite-prototype/SKILL.md +104 -0
  186. package/pack/generated/devin/skills/rite-prove/SKILL.md +122 -0
  187. package/pack/generated/devin/skills/rite-prove/reference/acceptance-proof.md +88 -0
  188. package/pack/generated/devin/skills/rite-prove/reference/anti-patterns.md +25 -0
  189. package/pack/generated/devin/skills/rite-prove/reference/browser-proof.md +51 -0
  190. package/pack/generated/devin/skills/rite-prove/reference/failure-triage.md +43 -0
  191. package/pack/generated/devin/skills/rite-prove/reference/proof-ladder.md +28 -0
  192. package/pack/generated/devin/skills/rite-prove/reference/test-command-discovery.md +30 -0
  193. package/pack/generated/devin/skills/rite-quick/SKILL.md +81 -0
  194. package/pack/generated/devin/skills/rite-resolve/SKILL.md +98 -0
  195. package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +118 -0
  196. package/pack/generated/devin/skills/rite-review/SKILL.md +171 -0
  197. package/pack/generated/devin/skills/rite-review/reference/anti-patterns.md +32 -0
  198. package/pack/generated/devin/skills/rite-review/reference/cognitive-load.md +90 -0
  199. package/pack/generated/devin/skills/rite-review/reference/feature-scoped-review.md +26 -0
  200. package/pack/generated/devin/skills/rite-review/reference/five-axis-review.md +66 -0
  201. package/pack/generated/devin/skills/rite-review/reference/nielsen-heuristics.md +126 -0
  202. package/pack/generated/devin/skills/rite-review/reference/performance-checklist.md +80 -0
  203. package/pack/generated/devin/skills/rite-review/reference/performance-review.md +14 -0
  204. package/pack/generated/devin/skills/rite-review/reference/security-review.md +42 -0
  205. package/pack/generated/devin/skills/rite-seal/SKILL.md +74 -0
  206. package/pack/generated/devin/skills/rite-seal/reference/anti-patterns.md +29 -0
  207. package/pack/generated/devin/skills/rite-seal/reference/final-evidence.md +41 -0
  208. package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +29 -0
  209. package/pack/generated/devin/skills/rite-seal/reference/output.md +5 -0
  210. package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +47 -0
  211. package/pack/generated/devin/skills/rite-seal/reference/risk-and-rollback.md +56 -0
  212. package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +27 -0
  213. package/pack/generated/devin/skills/rite-ship/SKILL.md +87 -0
  214. package/pack/generated/devin/skills/rite-ship/reference/anti-patterns.md +28 -0
  215. package/pack/generated/devin/skills/rite-ship/reference/close-out.md +68 -0
  216. package/pack/generated/devin/skills/rite-ship/reference/git-ship.md +120 -0
  217. package/pack/generated/devin/skills/rite-ship/reference/rollout.md +62 -0
  218. package/pack/generated/devin/skills/rite-ship/reference/ship-template.md +39 -0
  219. package/pack/generated/devin/skills/rite-spec/SKILL.md +149 -0
  220. package/pack/generated/devin/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  221. package/pack/generated/devin/skills/rite-spec/reference/ai-spec-template.md +40 -0
  222. package/pack/generated/devin/skills/rite-spec/reference/anti-patterns.md +27 -0
  223. package/pack/generated/devin/skills/rite-spec/reference/interview-patterns.md +56 -0
  224. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +83 -0
  225. package/pack/generated/devin/skills/rite-spec/reference/question-protocol.md +36 -0
  226. package/pack/generated/devin/skills/rite-spec/reference/references-intake.md +62 -0
  227. package/pack/generated/devin/skills/rite-spec/reference/spec-checklists.md +89 -0
  228. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +154 -0
  229. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +227 -0
  230. package/pack/generated/devin/skills/rite-status/SKILL.md +57 -0
  231. package/pack/generated/devin/skills/rite-temper/SKILL.md +129 -0
  232. package/pack/generated/devin/skills/rite-temper/reference/anti-patterns.md +30 -0
  233. package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +66 -0
  234. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +53 -0
  235. package/pack/generated/devin/skills/rite-temper/reference/significance.md +46 -0
  236. package/pack/generated/devin/skills/rite-temper/reference/strategy-template.md +90 -0
  237. package/pack/generated/devin/skills/rite-upgrade/SKILL.md +121 -0
  238. package/pack/generated/devin/skills/rite-vet/SKILL.md +192 -0
  239. package/pack/generated/devin/skills/rite-vet/reference/anti-patterns.md +43 -0
  240. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +202 -0
  241. package/pack/generated/devin/skills/rite-vet/reference/cross-model.md +19 -0
  242. package/pack/generated/devin/skills/rite-vet/reference/depth.md +59 -0
  243. package/pack/generated/devin/skills/rite-vet/reference/eng-lenses.md +48 -0
  244. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +201 -0
  245. package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +84 -0
  246. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +69 -0
  247. package/package.json +4 -2
  248. package/scripts/build-host-artifacts.sh +48 -5
  249. package/scripts/devin-generate.sh +222 -0
  250. package/update.sh +2 -1
@@ -0,0 +1,56 @@
1
+ # Checkpoint: land local WIP only after the check loop is green
2
+
3
+ The wright does not commit onto the control/primary branch. Independent review
4
+ and fail-on-red proof run first; a red or gap finding dispatches another wright.
5
+ Only when that loop is green does the orchestrator land the local unpushed
6
+ `WIP(<slug>):` commit. Same rule for `/rite-build`, `/rite-prove`, `/rite-polish`,
7
+ `/rite-review`, and `/rite-autocomplete`. Never push. `.devrites/CHECKPOINT` is
8
+ not a gate.
9
+
10
+ ## When (and when not)
11
+
12
+ - **Do:** after Independent Build review (or the phase's independent validators)
13
+ and fail-on-red proof are green, with no open Critical/Important and no repair
14
+ wright still in flight. Serial: git recipe below (skip empty index) or isolated
15
+ FF of a matching `transfer_commit`. Parallel: `devrites-engine parallel
16
+ integrate --apply-to-control` (no second control `git commit`).
17
+ - **Do not:** when a wright returns; before review/proof; with red/gap findings;
18
+ fast-forward an isolated transfer onto control before those checks.
19
+
20
+ A native-worktree `transfer_commit` is transport on the worker branch only.
21
+
22
+ ## The commit
23
+ Stage the exact candidate paths from the manifest, each as its own argv.
24
+ Never stage `touched-files.md`, a directory, glob, unrelated path, or user change.
25
+ Verify the staged set, then commit locally.
26
+
27
+ Subject: `WIP(<slug>):` plus an imperative summary of the change (from the
28
+ goal). Never a slice id, `SLICE-###`, a slice number, or "this slice"
29
+ (`WIP(admin-report): add CSV export for usage rows`, not `SLICE-003` or
30
+ `complete slice 3`). Product source, tests, comments, and filenames omit the
31
+ same marks; they stay in `.devrites/` only.
32
+
33
+ ```bash
34
+ git commit -m "WIP(<slug>): <imperative summary>" -m "$(cat <<'BODY'
35
+ [devrites-context]
36
+ decisions: <one-line delta this work added to decisions.md>
37
+ remaining: <pending count>
38
+ dead-ends: <approaches ruled out, if any>
39
+ BODY
40
+ )"
41
+ ```
42
+
43
+ **Local-only:** never push or let scratch work trigger CI.
44
+
45
+ ## Restore
46
+ After a crash, a fresh session may read the last `WIP(<slug>)` body as crash context.
47
+ Authoritative state remains in `.devrites/`: validate the body against that workspace;
48
+ never reconstruct or advance state from the commit body. Reload per
49
+ [`context-hygiene.md`](../../devrites-lib/reference/standards/context-hygiene.md)
50
+ (`.devrites/ACTIVE`, `state.md`, `questions.md`, `decisions.md`, `test-plan.md`/`evidence.md`).
51
+
52
+ ## Collapse at ship
53
+ WIP commits are scratch and never reach shared history. `/rite-ship` folds them into the
54
+ one atomic feature commit before the Conventional-Commit ladder: see the collapse step in
55
+ [git-ship.md](../../rite-ship/reference/git-ship.md). Result: one clean commit, bisect
56
+ stays green.
@@ -0,0 +1,39 @@
1
+ # Frontend trigger
2
+
3
+ A slice is **frontend/UI** if it touches or plans to touch any of:
4
+
5
+ - React / TSX / JSX; Vue, Svelte, Astro, Angular;
6
+ - Rails Slim / Haml / ERB views; any server-rendered template;
7
+ - CSS, SCSS, Tailwind, design tokens, theme files;
8
+ - components, forms, layout, navigation, dashboard, landing/marketing page;
9
+ - UI copy, empty states, error states, onboarding, settings;
10
+ - screenshots, mockups, visual direction;
11
+ - browser behavior, responsive behavior, accessibility, frontend performance.
12
+
13
+ ## When triggered
14
+ - `/rite-spec` applies **`devrites-ux-shape`** (spec step 3a) to write the feature-level
15
+ **`design-brief.md`** before any code: design direction, key states, interaction model,
16
+ optional Figma/image visual-direction probe.
17
+ - `/rite-build` applies **`devrites-frontend-craft`** to the vetted `design-brief.md`
18
+ (register, system, states, anti-AI-slop). If missing or materially changed, shape it
19
+ and return through `/rite-vet` before code.
20
+ - `/rite-prove` applies **`devrites-browser-proof`** (proof ladder + evidence schema).
21
+ - `/rite-polish` runs the full **normalize + polish** workflow.
22
+ - `/rite-review` and `/rite-seal` include frontend UX / a11y / responsive / design-
23
+ system checks.
24
+
25
+ ## Fullstack (UI slice that also needs backend)
26
+ If the slice spans both layers, it's both a frontend **and** a backend slice. Define the
27
+ **API/data contract first** (`devrites-api-interface`), build it as one **vertical slice**
28
+ (DB → service → API → UI), apply the engineering rules to the backend and
29
+ `devrites-frontend-craft` to the UI, map each contract error to a real UI state, and
30
+ **prove both layers** (contract tests + browser proof). See
31
+ [`fullstack.md`](../../devrites-frontend-craft/reference/fullstack.md).
32
+
33
+ ## When NOT triggered
34
+ Pure backend/data/CLI/infra slices skip craft and browser proof, but still get tests
35
+ and evidence. If unsure whether a slice is "UI enough", treat copy/empty/error states
36
+ and any rendered output as UI.
37
+
38
+ Mark `Frontend craft required: yes/no` and `Browser proof required: yes/no` on the
39
+ slice in `tasks.md` so the trigger is explicit, not rediscovered each cycle.
@@ -0,0 +1,51 @@
1
+ # One-slice cycle
2
+
3
+ One wright dispatch builds one thin, proven slice. HITL stops; only explicit
4
+ `.devrites/AFK` lets the controlling root chain another pending slice under the
5
+ green-proof, cap, and pause rules. Each wright returns after exactly one slice.
6
+ This serial cycle is the default `/rite-build`. Opt-in fan-out: [`parallel-batch.md`](parallel-batch.md) (`--parallel N`).
7
+
8
+ ## The cycle
9
+
10
+ The orchestrator (`/rite-build`) gates and records; the **wright** writes. See
11
+ [`wright-dispatch.md`](wright-dispatch.md).
12
+
13
+ ```text
14
+ SELECT → orchestrator: restate slice goal + acceptance + scope boundary; HITL gate (pause pre-code)
15
+ (SHAPE) → orchestrator: missing UI design-brief.md → shape it, then /rite-vet before dispatch
16
+ DISPATCH → hand the slice contract to devrites-slice-wright (fresh context). Inside the wright:
17
+ ORIENT → load only the files this slice touches; learn the project's idiom; reuse-first
18
+ (RED) → if behavior change: write the failing test first
19
+ IMPLEMENT → smallest complete version; match conventions; devrites-frontend-craft for UI
20
+ VERIFY → writer-safe tests/types/lint; return code + tests (no control-branch commit)
21
+ (DOUBT) → orchestrator, on return: devrites-doubt each non-trivial decision the wright stood up
22
+ — dispatch the initial read-only reviews of distinct decisions in parallel
23
+ (independent claims, fresh contexts); wright fixes stay serial — writers share files
24
+ PROVE → root: required build/browser/E2E, then returned-diff/path review; fail-on-red
25
+ (red/gap → repair wright, then re-review/re-prove; do not commit yet)
26
+ RECORD → orchestrator: after green verification, update state.md/evidence.md and
27
+ upsert the authoritative candidate manifest from the actual scoped diff
28
+ (CHECKPOINT) → only now, with review+proof green: local WIP(<slug>): <imperative summary>
29
+ on the control branch (no slice id) → checkpoint.md
30
+ NEXT → HITL root reports and stops. AFK with parallel cap>1: return to parallel-batch selection and run the new N_eff; otherwise repeat under afk-discipline.md
31
+ ```
32
+
33
+ ## Why the boundary matters
34
+
35
+ Reviewable diffs, early drift signal, HITL decision point, no unproven pile-ups.
36
+
37
+ ## Restate the scope boundary
38
+
39
+ Before coding, write what this slice will and will **not** touch. This is the contract
40
+ you check yourself against: anything outside it is scope creep or a drift event.
41
+
42
+ ## When the slice can't be completed cleanly
43
+
44
+ - Discovered the plan is wrong → **Spec Drift Guard** (record, classify;
45
+ sweep every remaining contract assumption, then one folded repair+vet inline;
46
+ ask only for product/policy/irreversible-risk).
47
+ - Slice is bigger than one cycle → `/rite-plan reslice` inline when AC is
48
+ preserved; do not emit a human Fix.
49
+ - Blocked on a failing dependency → record in `state.md`, `/rite-plan unblock`
50
+ inline when the reroute is technical.
51
+ Never power through by guessing.
@@ -0,0 +1,33 @@
1
+ # rite-build output
2
+
3
+ **Slices remain:**
4
+
5
+ ```text
6
+ Done: built slice <n> — <name>.
7
+ Changed: <files>; state.md, touched-files.md, evidence.md
8
+ Evidence: acceptance met; tests <cmd> → pass; browser <summary|n/a>; drift <none|handled>
9
+ Open: <none|blockers|questions>
10
+ Next: /rite-build
11
+ Record: .devrites/work/<slug>/evidence.md
12
+ ↻ Hygiene: /clear between slices; /rite-handoff if away > a few hours
13
+ ```
14
+
15
+ **All built:**
16
+
17
+ ```text
18
+ Done: built slice <n> — <name>; all slices built.
19
+ Changed: <files>; state.md, touched-files.md, evidence.md
20
+ Evidence: acceptance met; tests <cmd> → pass; browser <summary|n/a>; drift <none|handled>
21
+ Open: <none|blockers|questions>
22
+ Next: /rite-prove
23
+ Record: .devrites/work/<slug>/evidence.md
24
+ ↻ Hygiene: /clear before /rite-prove; /rite-handoff if away > a few hours
25
+ ```
26
+
27
+ HITL returns after one green slice. Only explicit `.devrites/AFK` lets the
28
+ controlling root chain another pending slice after green-proof, cap, and pause
29
+ gates. Every `devrites-slice-wright` returns after exactly one slice.
30
+
31
+ At all built, Build never enters `/rite-prove` automatically; a higher-level
32
+ orchestrator may invoke it only under its own contract. Awaiting-human or
33
+ stopped states use the shared reply contract.
@@ -0,0 +1,214 @@
1
+ # Parallel batch (`--parallel N`)
2
+
3
+ Opt-in only. Default `/rite-build` stays [`one-slice-cycle.md`](one-slice-cycle.md).
4
+
5
+ ## Entry
6
+
7
+ | Input | Behavior |
8
+ | --- | --- |
9
+ | omitted / `--parallel 1` | Serial one-slice |
10
+ | `--parallel N` (**2≤N≤10**) | N is a **cap**, not a quota: run the largest eligible set ≤ N |
11
+ | non-integer / `N≤0` / `N>10` | Hard refuse (no silent clamp) |
12
+ | Autocomplete `--parallel N` | N is the cap for this run; leftover sentinel `max_parallel` is ignored, then `/rite-autocomplete` writes or replaces only `max_parallel: N` |
13
+ | Autocomplete, no flag | Same path, cap from sentinel `max_parallel` else 10; serial only when ineligible |
14
+
15
+ AFK caps `N`. Charge green siblings once after integrate; abort /
16
+ integrate-failed → **0**. `parallel create` refuses while a lease exists.
17
+ Reconcile retained repair-round artifacts by exact causal fingerprint before honoring a stored blocked status/verdict. Blocked status, round count, or distinct finding alone cannot stop cold resume: establish missing or stale review coverage under step 4; repair unless a stop condition remains evidenced.
18
+
19
+ ## Dynamic selection and re-batching
20
+
21
+ Size each batch by what is runnable **now**, never by the requested number:
22
+
23
+ ```text
24
+ N_eff = min(
25
+ cap -- this invocation's --parallel N (wins over leftover sentinel max_parallel)
26
+ | else sentinel max_parallel | else 10 (autocomplete default)
27
+ eligible set -- dependency-satisfied pending slices, pairwise path-disjoint
28
+ AFK headroom -- remaining max_slices, max_agents, max_minutes, review queue
29
+ host capacity -- concurrent worktree writers + the runtime isolation table
30
+ )
31
+ ```
32
+
33
+ Select **greedily in plan order**: pass every currently dependency-ready pending slice
34
+ (plan order, `Files likely touched`) to
35
+ `devrites-engine parallel select --cap N [--root <dir>]`. `N_eff ≥ 2` → parallel batch;
36
+ `N_eff = 1` → one serial round; nothing pending → Prove. A cap that cannot be filled
37
+ is normal: take fewer. Serial is this round's size, not the rest of the run.
38
+
39
+ **Re-batch automatically after every completed round** (parallel integrate+cleanup or
40
+ a serial slice). Re-read `state.md`, pending slices, and the tree, then run
41
+ `parallel select` again: finished work leaves the pending set, and satisfied
42
+ dependencies unlock new slices. Under `.devrites/AFK` and `/rite-autocomplete` the
43
+ repeat is the same run — HITL stops after each batch. `--parallel 5` with one eligible
44
+ slice runs that one; when two to five then become eligible, the next round takes that
45
+ many. **Failing case:** the run stays one-by-one after a serial round even though more
46
+ slices are now eligible under the same cap.
47
+
48
+ ## Path-disjoint
49
+
50
+ Exact project-relative source/test paths only. Normalize `\`→`/`. Reject `..`,
51
+ duplicates, absolutes, `.devrites/**`. Empty pairwise intersection required.
52
+
53
+ **SSOT:** `devrites-engine check path-disjoint [--root <dir>] [<json-file>|-]`
54
+ (N≥2 only; pass `--root`). Input is `{"slices":[{"id":"SLICE-002","paths":["src/policy.rs","src/policy/mod.rs"]}]}`
55
+ (or a top-level array) built from each candidate's `Files likely touched`.
56
+ Exit `0` → fan-out; else force serial. Inspect-time
57
+ overlap → sibling **gap** (a shared path is a contract defect). **Failing
58
+ case:** two parallel wrights share a path and fan-out proceeds without that
59
+ check.
60
+
61
+ ## Control vs workers
62
+
63
+ Control owns `.devrites/work/<slug>/` (lease + bookkeeping).
64
+ Workers: `.scratch/parallel-wt/<batch>/<slice>/` on
65
+ `devrites/parallel/<slug>/<batch>/<slice>` @ base `B`. Wrights never write
66
+ `.devrites/**`.
67
+
68
+ Lease: `batch_id`, `created_at`, `base_sha`, `n`,
69
+ `status` (`running|aborted|integrate-failed|complete`), `control_pid_or_session`,
70
+ `slices[]` (`id`, `paths`, `worktree_path`, `branch`, `wright_status`,
71
+ `transfer_commit`).
72
+
73
+ ## Lifecycle
74
+
75
+ 1. Orient/gate; parse the cap; compute `N_eff` and select the eligible set
76
+ ([Dynamic selection and re-batching](#dynamic-selection-and-re-batching)) —
77
+ candidates from `orient` `task_graph.slices` + built list, each candidate's
78
+ `Files likely touched` via `observe slice`, then
79
+ `parallel select --cap N` (pairwise disjointness is inside that verb).
80
+ 2. Write lease; freeze `B=HEAD`; `parallel create` worktrees.
81
+ 3. Dispatch ≤10 wrights in parallel (cwd=worktree; allowlist; prove `HEAD==B`).
82
+ 4. Inspect each returned path list, cumulative diff from `B`, transfer identity,
83
+ and required result fields against the immutable contract. Reject malformed,
84
+ stale, or out-of-scope work. Apply
85
+ [independent Build review](phase-contract.md#independent-build-review): first
86
+ full inventory, then bounded owning-role rechecks after repairs. Gap or
87
+ Critical/Important → `gap`; else approved proof → `green|red|gap`.
88
+ Reviewer fan-out for a batch is itself batched under
89
+ [`parallel-dispatch.md`](../../devrites-lib/reference/parallel-dispatch.md#scale-limits)
90
+ (≈4 concurrent read-only reviewers, 8 only with disjoint paths), and `max_agents`
91
+ headroom bounds the batch size — one batch never assumes unbounded reviewers.
92
+ 5. Non-green siblings → **repair round** (below) in the same worktrees; lease
93
+ stays `running` — no abort while repair budget remains. A green sibling →
94
+ `parallel record-green`. No partial integrate. All green → integrate.
95
+ A recoverable RED blocks integration but does not cancel independent safe running siblings.
96
+ Expected test-first RED is not a terminal gate failure. Cancel only for a shared
97
+ invalid foundation, safety/access failure, resource boundary, or explicit stop;
98
+ preserve completed and in-progress recoverable work and classify each result.
99
+ 6. `parallel integrate --apply-to-control` **only after steps 4–5 are green**:
100
+ each `transfer_commit` descends from `B` and diffs path-exact vs
101
+ `B`; apply each in plan order as its own local `WIP(<slug>):` commit
102
+ (imperative summary, never a slice id). Staging branch, then FF. Conflict →
103
+ reset to `B`, `integrate-failed`; classify under repair rounds (siblings stay
104
+ in place). Never integrate because a wright returned.
105
+ 7. Success: FF control (the branch that held `HEAD` when the batch started —
106
+ often `main`/`master`, otherwise whatever the user was on) to the integrate
107
+ tip: N local commits, never pushed; union `touched-files.md`; update
108
+ state/evidence; AFK +1 per integrated sibling; optional `check candidate`.
109
+ 8. Cleanup runs only after `integrate` marks the lease `complete` — work
110
+ landed in control, so `parallel cleanup` removes worktrees/branches.
111
+ Blocked/human-stopped batches keep lease, worktrees, branches — nothing is
112
+ removed while the batch may resume. `parallel abort` + `cleanup --force`
113
+ abandons the batch — the explicit human discard path; the single
114
+ orchestrator-emitted use is the automatic re-batch under Repair rounds,
115
+ where it acts as the salvage step only (uncommitted allowlisted changes →
116
+ slice-branch commit; branches past `B` kept; a failed salvage keeps the
117
+ worktree) and prints retained refs for the record. `abort` marks the lease
118
+ only — never rewinds control: a moved HEAD is external work, reported not
119
+ reset. Never integrate a rejected transfer commit.
120
+
121
+ ## Repair rounds
122
+
123
+ Repair rejected work in place; never discard/rebuild while budget remains.
124
+
125
+ - Record each round as `build-parallel-<batch>-repair-<round>.json`: each
126
+ non-green sibling's status, verbatim findings, transfer_commit/null.
127
+ - Use step 4's initial inventory or affected recheck as appropriate; never start
128
+ a correction from an early reviewer result while required accounts are pending.
129
+ - Classify the complete inventory: **implementation defect** (review
130
+ Critical/Important on the diff, red wright/proof) → one repair-all wright in
131
+ the same worktree with the full inventory. **Durable-plan defect**
132
+ (falsified contract assumption, AC unchanged) →
133
+ [`spec-drift-guard.md`](spec-drift-guard.md): batch-sweep contract
134
+ assumptions, one folded `/rite-plan repair` + one `/rite-vet` recheck
135
+ inline, resume repair in the same worktrees under the amended contract;
136
+ never emit `Fix:`. **Frozen-lease scope defect** (correction needs
137
+ out-of-allowlist paths or re-slicing; lease allowlists are immutable) →
138
+ **automatic re-batch, no human gate**: `parallel cleanup --force` salvages
139
+ and records refs; `parallel create` starts from control `HEAD` under the
140
+ corrected decomposition. Give each new wright its salvaged
141
+ `devrites/parallel/<slug>/<old-batch>/<slice>` ref. If the inventory proves the accepted
142
+ approach unsound and no corrected decomposition exists, that is exhaustion
143
+ → blocked, preserve, STOP. **Reviewer stall/cancel or missing
144
+ verdict** → re-dispatch the reviewer, not the wright. **Product/policy/
145
+ irreversible** → stops for the human.
146
+ - Dispatch one fresh repair-all `devrites-slice-wright` (cwd=worktree; step 3
147
+ rules) with the original contract + complete inventory +
148
+ "preserve what works; fix every finding; **then attack your own correction** —
149
+ probe the changed hunks for defects the fix itself introduced (adjacent cases of
150
+ the same rule, new observation/ordering windows, alias or boundary escapes) and
151
+ fold them in before returning; return a new `transfer_commit`". A correction whose
152
+ own diff is unexamined is not ready: a green writer gate plus an unexamined fix is
153
+ how the same defect family reappears one case deeper each round. Never reset
154
+ to `B` — that destroys the work under repair. The commit must still descend
155
+ from `B` and diff path-exact vs `B`.
156
+ - Budget and exhaustion follow only
157
+ [the canonical retry contract](../../devrites-lib/reference/standards/afk-hitl.md#retry-cap-no-progress-loops-and-self-resolve).
158
+ Record one failed invariant, mechanism, reproduction, correction, and decisive
159
+ recheck per fingerprint; never use an umbrella like "covering" or "review is red again".
160
+ - A distinct post-repair Critical/Important gets a new fingerprint: refresh the
161
+ inventory and affected owning-role rechecks. It proves neither plan defect nor
162
+ exhaustion. Use plan path only if inventory proves the approach unsound.
163
+ - Stop under the canonical retry/authority/resource conditions, or when evidence
164
+ proves the approach unsound and no in-scope corrected decomposition exists.
165
+ - Exhaustion is not abort: record one technical blocker (`Status: blocked`;
166
+ `Next step: none — technical recovery exhausted; requires new evidence or changed failure conditions`), preserve
167
+ lease/worktrees/branches, STOP — same fingerprint stays blocked on
168
+ reinvoke; new evidence resumes repair in place. Human-owned decisions use
169
+ the drift-guard question and wait.
170
+
171
+ ## Engine verbs
172
+
173
+ ```text
174
+ devrites-engine parallel select --cap <1-10> [--root <dir>] [<json-file>|-]
175
+ devrites-engine parallel create --root <repo> --slug <slug> --batch <id> --base <B> --json <file>|-
176
+ devrites-engine parallel record-green --root <repo> --slug <slug> --slice <id> --commit <sha>
177
+ devrites-engine parallel integrate --root <repo> --slug <slug> --apply-to-control
178
+ devrites-engine parallel status --root <repo> --slug <slug>
179
+ devrites-engine parallel lease-write|lease-read|lease-clear --root <repo> --slug <slug>
180
+ # abandoning the batch is human discard only; a frozen-lease re-batch may emit
181
+ # cleanup --force as its salvage step (see Repair rounds):
182
+ # parallel abort --root <repo> --slug <slug>
183
+ # parallel cleanup --root <repo> --slug <slug> --force (salvages, prints retained refs)
184
+ ```
185
+
186
+ `integrate` without `--apply-to-control` stages the per-sibling commits, leaves
187
+ the lease `running` and control at `B`; cleanup still refuses — the commits
188
+ cannot be lost. `record-green` and `integrate` also accept an `integrate-failed`
189
+ lease, so a failed integrate retries after repair. `--apply-to-control`
190
+ refuses when control moved past `B` or holds uncommitted changes on slice
191
+ paths — commit/stash and retry; the batch is untouched. Go is SSOT; never
192
+ ad-hoc git/bash orchestration.
193
+
194
+ ## Runtime isolation
195
+
196
+ Each parallel worktree must own isolated runtime resources. Before fan-out,
197
+ assign per-slice env (document in the lease or worktree README):
198
+
199
+ | Resource | Pattern |
200
+ | --- | --- |
201
+ | HTTP port | `PORT=<base+N>` or `DEVRITES_PARALLEL_PORT_<slice>` |
202
+ | Compose | `COMPOSE_PROJECT_NAME=devrites-<slug>-<batch>-<slice>` |
203
+ | SQLite/DB file | separate path under the worktree or `/tmp` |
204
+ | Dev server | one process per worktree; never share a listener |
205
+
206
+ Reusing the control worktree's running server, DB, or compose stack across
207
+ siblings causes cross-slice pollution and flaky proof. Force serial if
208
+ isolation cannot be established.
209
+
210
+ ## Host
211
+
212
+ Devin: N concurrent `run_subagent` wrights (`acceptEdits`, cwd=worktree). Codex: require
213
+ host-explicit concurrent worktree writers + native reconcile; else force serial.
214
+ Never two writers in one worktree; never root-emulated concurrency.
@@ -0,0 +1,89 @@
1
+ # rite-build phase contract
2
+
3
+ Apply [`one-slice-cycle.md`](one-slice-cycle.md) and
4
+ [`candidate-integrity.md`](../../devrites-lib/reference/candidate-integrity.md).
5
+ Opt-in `--parallel N` replaces steps 2–8 with [`parallel-batch.md`](parallel-batch.md);
6
+ Spec Drift Guard still applies.
7
+
8
+ 1. **Gate.** Read core, `.devrites/ACTIVE`, then `devrites-engine orient <slug>`
9
+ and the Build read-next in
10
+ [`workspace-artifact-schema.md`](../../devrites-lib/reference/workspace-artifact-schema.md#read-next-by-phase):
11
+ the selected slice via `devrites-engine observe slice <slug> <SLICE-ID>`, not whole
12
+ `tasks.md`; over-budget or `bulk_files` artifacts are read by anchor only. Require
13
+ `Implementation readiness: READY`, current `Readiness inputs SHA-256`, exact
14
+ required accounts, ID/meaning traceability and green proof preflight.
15
+ Run `devrites-engine check readiness <slug>`; any miss/nonzero blocks.
16
+ 2. **Select.** Pick the lowest pending slice whose `depends_on` are all built, using
17
+ `orient` `task_graph.slices` plus the `state.md` built list — never by scanning
18
+ `tasks.md`; then `observe slice` it. Restate its goal, ACs, exclusions and exact paths. Include
19
+ applicable topology/data/integration invariants and failure/recovery/proof cases.
20
+ Verify relevant assumptions live; falsified acceptance/architecture/scope/proof
21
+ routes through Spec Drift Guard. Resolve human-owned/irreversible gates before
22
+ source work; AFK follows its ceiling. Vet-ready Workflow Artifacts use
23
+ [`workflow-artifacts.md`](../../devrites-lib/reference/standards/workflow-artifacts.md).
24
+ 3. **Dispatch.** Apply [`wright-dispatch.md`](wright-dispatch.md). Put the smallest
25
+ exact project-relative source/test path list directly in the task;
26
+ dispatch the exact `devrites-slice-wright` fresh. Root never writes product
27
+ paths; wright cannot widen scope; missing profile blocks.
28
+ <!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"Build gate enters or resumes transaction","action":"invoke canonical operation table; reconcile exact result","return":"same slice/checkpoint cursor or Plan/Vet route"} -->
29
+ 4. **Inspect.** Wait; compare returned paths and `git diff --name-only` with the
30
+ contract. Reject stale/partial/malformed/out-of-scope work; preserve user work.
31
+ Restoration uses the bounded wright.
32
+ 5. **Review.** Apply [Independent Build review](#independent-build-review).
33
+ Missing verdicts, principle breaches and open Critical/Important block acceptance.
34
+ 6. **Prove.** Against the frozen pre-slice candidate inspect
35
+ test hunks for deletion, skipping/focus, tautology, or weaker expectations.
36
+ Use step 5's exact test-analyst account; missing/adverse criterion verdict is
37
+ Critical. Run only `test-plan.md` repository/CI commands, record output, recheck
38
+ `git diff --name-only`. Missing/weakened/red/source-mutating proof cannot pass.
39
+ Pre-existing/environment-specific claims need a predating same-command,
40
+ same-environment baseline; otherwise unresolved.
41
+
42
+ Technical failure uses `devrites-debug-recovery` and
43
+ [canonical recovery](../../devrites-lib/reference/standards/afk-hitl.md#retry-cap-no-progress-loops-and-self-resolve).
44
+ Reapply host admission before correction; affected proof/evidence follows candidate
45
+ integrity. Human gates remain product/irreversible/access decisions.
46
+ 7. **Record green.** Upsert actual scoped `present`/`deleted` rows in `touched-files.md`;
47
+ update state, evidence and applicable UI/browser proof. Checkpoint per
48
+ [`checkpoint.md`](checkpoint.md) only after steps 5–6 are green and every
49
+ repair wright has been re-reviewed and re-proved; never on wright return.
50
+ Manifest stays mutable until Polish. For a release milestone, after the last slice's rows run
51
+ `devrites-engine state merge-manifest <slug>` to fold the recorded
52
+ predecessor chain into the union manifest before Prove. Record stood
53
+ decisions/dead ends; refresh verified/falsified
54
+ assumptions. Propose reviewed durable project rules in the nearest guidance.
55
+ 8. **Account/reply.** Apply `afk-discipline.md`: charge
56
+ exactly once after each green built slice; never negative, stop at zero,
57
+ malformed budget fails closed. Reply names next pending slice or `/rite-prove`
58
+ only when all built; no decorative renderer/dispatch telemetry.
59
+
60
+ One contract builds one slice: preserve TDD, exact paths and independent judgment.
61
+
62
+ ## Independent Build review
63
+
64
+ After inspection, freeze full slice scope and cumulative baseline diff. Initial
65
+ inventory: one full-diff `devrites-code-reviewer`, one `devrites-test-analyst`,
66
+ and one exact `devrites-doubt-reviewer` per stood decision that meets
67
+ `devrites-doubt` § When to use (boundary, data model, auth, public API, migration,
68
+ user flow, assumption tests cannot prove); other stood decisions are recorded in
69
+ `decisions.md` without dispatch. Dispatch fresh,
70
+ read-only under [`parallel-dispatch.md`](../../devrites-lib/reference/parallel-dispatch.md).
71
+ Wait for every required account to become terminal; missing/gap needs a valid result.
72
+ Fold supported in-scope Critical/Important findings by cause into one inventory.
73
+ Dispatch one repair-all wright instructed to fix every finding, then attack its own
74
+ correction for fix-introduced defects before returning; durable contract defects use Spec
75
+ Drift Guard.
76
+ Suggestion/Nit/FYI cannot prolong recovery.
77
+
78
+ Rechecks use Vet's bounded pattern: each exact responsible reviewer checks
79
+ all open findings owned by that role and affected dependency/regression closure
80
+ in one fresh dispatch. Supply new candidate, inventory, correction diff, tests
81
+ and unchanged-coverage evidence under candidate integrity; include newly triggered
82
+ roles. A changed contract or uncertain impact requires the full inventory.
83
+ Collect all required rechecks before another folded correction. Canonical recovery
84
+ owns fingerprints/budget and the
85
+ [late-finding rule](../../devrites-lib/reference/standards/afk-hitl.md#retry-cap-no-progress-loops-and-self-resolve):
86
+ a recheck's `Late:` rows on hunks unchanged since that role's previous pass go to
87
+ `touched-files.md` `## Review trail` for `/rite-review`, not into another slice
88
+ repair, unless Critical with a failure path. Evidenced scope coverage never
89
+ guarantees no later defect; the feature-level Review and Seal gates still run.
@@ -0,0 +1,84 @@
1
+ # Spec Drift Guard (build phase)
2
+
3
+ Canonical Spec Drift Guard, active in `/rite-build` and referenced by other
4
+ phases. Never silently code against a known-wrong plan.
5
+
6
+ ## Drift has occurred when
7
+ - the spec says X but the code makes X impossible/wrong;
8
+ - the plan assumes a file/API/component/route/model/command that doesn't exist;
9
+ - tests show the acceptance criteria are incomplete or wrong;
10
+ - browser evidence shows the intended UX doesn't work as described;
11
+ - an official doc contradicts the planned approach;
12
+ - the design system / existing UX pattern contradicts the planned UI;
13
+ - a missing user decision that affects product behavior surfaces.
14
+
15
+ ## Workflow
16
+ ```
17
+ 1. STOP coding.
18
+ 2. Record drift.md (assumed vs observed, when).
19
+ 3. Classify: requirement ambiguity | implementation-plan error | codebase reality
20
+ mismatch | design-system mismatch | test/evidence mismatch | external-doc mismatch
21
+ | user-decision required.
22
+ 4. Local repair that preserves behavior/scope/architecture/data/UX/security/migration?
23
+ YES, active-slice technical/tool failure → log it and use Build's bounded debug
24
+ recovery. Do not ask for retry authorization and do not re-plan unless the
25
+ durable remaining-work instructions are wrong.
26
+ YES, durable plan is wrong → run the batch sweep below, log every
27
+ violation, save the caller's return cursor, then invoke `/rite-plan repair` and `/rite-vet` inline
28
+ without a question — ONE folded repair for all open entries, ONE
29
+ recheck for every open fingerprint — and resume.
30
+ NO, product/policy/irreversible-risk decision → ask the user (format below).
31
+ 5. Never continue on a known-wrong durable plan. A repaired active-slice implementation
32
+ may continue only after bounded recovery, returned-diff review, and proof gates pass.
33
+ ```
34
+
35
+ ## Batch sweep (before repair)
36
+
37
+ Repair durable-plan drift as a folded set:
38
+
39
+ 1. Trace the falsified assumption's full dependency/consumer closure and affected
40
+ frontier, including dependent future slices. Verify unchecked paths, symbols/APIs/
41
+ signatures, routes, commands, versions, and artifacts there against live source.
42
+ Reuse the wright inventory and unchanged evidence; deterministic existence checks
43
+ need no dispatch. Do not rescan unrelated slices. Broaden unknown closure or shared
44
+ contract changes until coverage is justified; retain every known gap.
45
+ 2. Record each violation as its own `drift.md` entry/fingerprint; one folded
46
+ repair + one batched recheck resolves the set.
47
+ 3. A recheck-surfaced gap is a new fingerprint with its own budget — loop
48
+ internally, never hand an intermediate command to the human. When
49
+ consecutive folded repairs keep landing on the same clause set, the
50
+ repair packet's `convergence_pressure` marking applies (see `/rite-plan`
51
+ repair): bounded declared residuals may close refinements of
52
+ already-pinned clauses; a newly surfaced failure mode is never
53
+ residual-eligible. A suspect seam's declare-limitation-or-continue choice
54
+ routes to `/rite-clarify` like any human-owned gate — it is not an
55
+ intermediate command.
56
+ 4. Nothing skips or defers silently: every entry ends resolved, human-escalated,
57
+ or fingerprint-exhausted. Execution-only gaps (tests, UX, evidence) get the
58
+ identical path when they surface.
59
+
60
+ ## User question format
61
+ ```
62
+ I hit spec drift:
63
+ - Spec/plan assumed: ...
64
+ - Code/evidence shows: ...
65
+ - Why it matters: ...
66
+
67
+ Which direction should DevRites take?
68
+ 1. Keep the requirement, change architecture by ...
69
+ 2. Adjust the requirement to match existing behavior ...
70
+ 3. Split into a follow-up feature ...
71
+ 4. Custom: describe the intended behavior
72
+ ```
73
+
74
+ Never turn an objective defect, environment repair, tool bug, or proof rerun into a
75
+ human permission question. Re-plan only when the durable plan changed.
76
+
77
+ ## Inline return contract
78
+
79
+ The detecting phase owns backtracking and the batch sweep. Save
80
+ `return_phase`/`return_next_action`; consume nested Plan/Vet `STOP` internally, complete
81
+ vetted acceptance-preserving remediation, then restore the cursor and failed step.
82
+ Never hand the human an intermediate command. The shared three-attempt causal-fingerprint
83
+ cap still applies: exhaustion produces one technical blocker, while a genuinely
84
+ human-owned decision uses the question format below.
@@ -0,0 +1,27 @@
1
+ # TDD / Prove-It pattern
2
+
3
+ When a slice changes behavior, prove the change with a test that fails first, so you
4
+ know the test can fail, and that your code is what makes it pass.
5
+
6
+ ## Red → Green → Refactor
7
+ 1. **Red:** write the smallest test that expresses the new behavior. Run it; watch it
8
+ fail for the *expected* reason (not a typo/import error).
9
+ 2. **Green:** write the minimum code to pass. Resist gold-plating.
10
+ 3. **Refactor:** clean up with the test as a safety net. Re-run; stay green.
11
+
12
+ ## Prove-It (when strict TDD doesn't fit)
13
+ For code where a test-first flow is awkward (exploratory glue, config, some UI), still
14
+ produce evidence:
15
+ - Capture the current (wrong/absent) behavior: a failing assertion, a screenshot, a
16
+ log line.
17
+ - Make the change.
18
+ - Capture the new behavior the same way. The before/after pair *is* the proof.
19
+
20
+ ## Rules
21
+ - Use the project's existing test framework and commands (per the discovery contract
22
+ [`test-command-discovery.md`](../../rite-prove/reference/test-command-discovery.md)). Don't introduce a new test runner
23
+ to prove a slice.
24
+ - One behavior per test; name it for the behavior, not the function.
25
+ - A green test you never saw fail proves nothing: always see red first.
26
+ - Don't delete or weaken a failing test to "pass". If it's wrong, that may be drift.
27
+ - Record the test command + result in `evidence.md`.