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,415 @@
1
+ # AFK & HITL: the pause/resume contract
2
+
3
+ Defines two modes for `rite-*`/`devrites-*` skills that may pause; main
4
+ callers are `/rite-build`, `/rite-status`, `/rite-resolve`, and
5
+ `devrites-doubt`.
6
+
7
+ The contract uses one sentinel, one queue, and one resume verb.
8
+
9
+ ## Contents
10
+
11
+ - [Run modes](#run-modes)
12
+ - [The sentinel: `.devrites/AFK`](#the-sentinel-devritesafk)
13
+ - [Unattended resource envelope](#unattended-resource-envelope)
14
+ - [The four gates](#the-four-gates)
15
+ - [Option set: how every gap is presented](#option-set-how-every-gap-is-presented)
16
+ - [Decision ownership: search before asking](#decision-ownership-search-before-asking)
17
+ - [Irreversible-risk list (always pause)](#irreversible-risk-list-always-pause)
18
+ - [`questions.md` schema](#questionsmd-schema)
19
+ - [`state.md` `Awaiting human` block](#statemd-awaiting-human-block)
20
+ - [The resume verb: `/rite-resolve`](#the-resume-verb-riteresolve)
21
+ - [AFK exception for discretionary pauses](#afk-exception-for-discretionary-pauses)
22
+ - [Retry cap, no-progress loops, and self-resolve](#retry-cap-no-progress-loops-and-self-resolve)
23
+ - [What the rule does NOT cover](#what-the-rule-does-not-cover)
24
+ - [Cross-reference](#cross-reference)
25
+
26
+ ## Run modes
27
+
28
+ - **HITL (default):** human is present. At a gap/checkpoint the skill **asks inline** via
29
+ the harness `AskUserQuestion` tool: a ranked **option set** (recommended first, each with
30
+ dimension-tagged rationale; see [Option set](#option-set-how-every-gap-is-presented)). The
31
+ human picks; the skill records the pick to `questions.md` (`answered`) + `decisions.md` and
32
+ **continues in place: no `/rite-resolve` round-trip**. `/rite-resolve` is only for answering
33
+ **async** (a pause that already stopped the session) or in **batch**.
34
+ **If the current surface has no interactive question tool** (Codex outside Plan mode:
35
+ `request_user_input` is Plan-mode-only.) Render the same option set as a plain numbered
36
+ list in chat and **end the turn**. The human's reply is the selection. Auto-picking an option
37
+ is **AFK's contract, gated by the `.devrites/AFK` sentinel**: a missing tool never
38
+ converts a HITL gap into a self-answered one.
39
+ - **AFK:** `.devrites/AFK` is present. For any gate AFK may auto-handle (severity in
40
+ `allow_gates`), the skill **auto-picks the recommended option** (option 1 of the set), records
41
+ it (`gate: advisory` + a `decisions.md` ADR), and continues unattended. Gates above the
42
+ ceiling (and every irreversible-risk item) pause and queue a `questions.md` entry for
43
+ `/rite-resolve`.
44
+
45
+ `.devrites/AFK` presence is authoritative for run mode; gate-deciding skills re-read
46
+ it at decision time. There is no `state.md` run-mode field to drift out of sync.
47
+
48
+ ## The sentinel: `.devrites/AFK`
49
+
50
+ Presence = AFK active. The file body is optional YAML:
51
+
52
+ ```yaml
53
+ max_slices: 10 # whole-workspace writer budget; seeds state.md remaining count
54
+ max_agents: 32 # native agent dispatches in one host activation
55
+ max_minutes: 120 # wall-clock minutes in one host activation
56
+ max_review_queue: 8 # unresolved review/gate items admitted before fan-out stops
57
+ # max_tokens: 200000 # optional stricter host-observed token cap
58
+ # max_cost_usd: 10 # optional stricter host-observed cost cap
59
+ notify: "ntfy.sh/my-topic" # shell command; examples: .devin/skills/rite-build/reference/afk-discipline.md
60
+ allow_gates: [advisory, validating] # gate severities AFK auto-handles (auto-picks the recommended option)
61
+ continue_sequence: true # after Seal GO, open the next recorded continuation
62
+ max_workspaces: 5 # workspaces one armed sequence may open
63
+ max_parallel: 10 # unattended default cap; `--parallel N` on this invocation wins and may rewrite only this field
64
+ ```
65
+
66
+ The file is **read-only config**: never rewritten in place, except `/rite-autocomplete --parallel N` writes or replaces only `max_parallel: N`. `max_slices` is the initial
67
+ budget; the mutable remaining count is the `state.md` cursor
68
+ `afk_slices_remaining` (`AFK slices remaining: <n>` in the released bullet
69
+ form), owned by the controlling root. Recognize either spelling and preserve
70
+ the existing table or bullet presentation. Before dispatch, a configured
71
+ `max_slices` and any existing remaining value must be decimal nonnegative
72
+ integers; malformed or negative values fail closed. The pending → built state transition spends
73
+ exactly one slice: on the first green slice write `max_slices - 1`, otherwise
74
+ write `remaining - 1`, never below zero. Re-reading an already built slice does
75
+ not spend again. At zero, stop before the next dispatch.
76
+
77
+ An orchestrator that can derive a stricter budget only after planning may pre-seed
78
+ `afk_slices_remaining` in `state.md` before the first dispatch instead of rewriting the
79
+ sentinel. It uses the minimum of pending work and every configured/explicit cap. An
80
+ existing counter may be lowered but never increased or reinitialized. Once present, that state
81
+ counter is the effective remaining budget even when the read-only sentinel omits
82
+ `max_slices`.
83
+
84
+ ### Sequence continuation (`continue_sequence`, `max_workspaces`)
85
+
86
+ `continue_sequence: true` lets one armed run open the next **recorded** continuation
87
+ after a `Seal GO` instead of stopping. Absent means `1` — the current workspace only;
88
+ an existing sentinel never receives the default implicitly. `max_workspaces` is the
89
+ sequence budget (nonnegative decimal, fail closed): spend one when a new workspace is
90
+ opened, never when resuming the current one. `max_slices` stays **per workspace** —
91
+ each new workspace's `state.md` seeds its own `afk_slices_remaining`.
92
+
93
+ The chain lives in root-owned `state.md` cursor fields, not in chat:
94
+ `sequence_parent` (the immediately preceding workspace slug), `sequence_position`
95
+ (1-based ordinal), `sequence_workspaces_remaining` (slots the chain may still
96
+ open after this workspace), and — on the release milestone only —
97
+ `sequence_role: release`. Seeding is exactly-once because the values are
98
+ derived, not remembered: a continuation's fields are computed from its recorded
99
+ parent and the parent's counter at creation, and a resumed run that finds a
100
+ continuation workspace missing the fields re-derives the same values from its
101
+ `brief.md` parent/position plus the parent's counter — never a second charge. A
102
+ workspace without a recorded parent/position is not a sequence member; the
103
+ counter only decreases, malformed values fail closed, and `0` opens nothing.
104
+ `sequence_role: release` makes `check candidate` and `check seal` require the
105
+ candidate manifest to cover the whole recorded chain — run
106
+ `devrites-engine state merge-manifest <slug>` before Prove.
107
+
108
+ - Only continuations recorded in the parent's `decisions.md` sequence
109
+ ([slicing.md § Continuation workspaces](../../../rite-plan/reference/slicing.md#continuation-workspaces))
110
+ qualify; no recorded next entry, or the cap/review-queue bound reached, stops
111
+ with the winning reason.
112
+ - Milestones are **not** shipped: they stay sealed and unarchived in `.devrites/work/`
113
+ with `Next step: /rite-ship` preserved. Local `WIP(<slug>):` checkpoints still
114
+ land ([checkpoint.md](../../../rite-build/reference/checkpoint.md)), so the tree
115
+ stays clean and crash-safe.
116
+ - Git stays human-gated. The release ship is one disclosed plan, one literal `GO`, and
117
+ one native approval; it collapses the sequence's `WIP` commits into the single
118
+ release commit and may archive the sealed predecessors.
119
+ - Every human-owned, safety, access, exhaustion, and `NO-GO` condition still stops the
120
+ run exactly as without this field.
121
+
122
+ `max_parallel` is the unattended default batch cap only when this invocation does
123
+ not contain `--parallel N`; `1` forces the serial cycle only in that default
124
+ case. An exact `--parallel N` on `/rite-autocomplete` or `/rite-build` is the
125
+ batch cap for this run: do not consult leftover sentinel `max_parallel`, and do
126
+ not treat `max_parallel: 1` as serial. `/rite-autocomplete --parallel N` writes
127
+ or replaces only that field so later ticks keep the cap; `/rite-build --parallel N`
128
+ wins for that invocation without rewriting the sentinel. Never write `max_slices`
129
+ from `--max-slices`. **Failing case:** `/rite-autocomplete --parallel 5` honors a
130
+ leftover `max_parallel: 1` and stays serial.
131
+ Unattended runs take the largest eligible set ≤ that cap and recompute after
132
+ every completed round (serial slice or parallel integrate)
133
+ ([parallel-batch.md § Dynamic selection and re-batching](../../../rite-build/reference/parallel-batch.md#dynamic-selection-and-re-batching)).
134
+
135
+ ## Unattended resource envelope
136
+
137
+ AFK writer admission needs a bounded input queue, effective slice cap, and valid
138
+ `max_agents`, `max_minutes`, and `max_review_queue`. Existing sentinels
139
+ that declare writer admission but miss/malform these fail closed; cold resume keeps the
140
+ state-owned slice counter. A leftover `expires_at` is ignored and never rewritten.
141
+ Read-only watchers use equivalent native caps from [`loop-operations.md`](loop-operations.md).
142
+
143
+ `max_agents` counts every leaf in the native activation, including failures and
144
+ parallel branches; do not add dispatch telemetry to `.devrites/`. `max_review_queue`
145
+ counts open validating questions plus unresolved admitted Critical/Important findings.
146
+ Above it stop; at it run only reconciliation that reduces the queue. Optional
147
+ `max_tokens`/`max_cost_usd` lower enforceable native caps; if declared but unobservable, stop.
148
+
149
+ Numeric limits are nonnegative decimals. Before costly checks, fan-out, or writing,
150
+ run cheap readiness, reject overlap, count queue, and confirm agent/time/token/cost
151
+ headroom; re-check after every result. Never start one call that can exceed remaining
152
+ headroom. Agent/time/token/cost counters are per native activation and start fresh only
153
+ for a genuinely new activation. Slices, recovery attempts, and current
154
+ review queue remain durable/recomputed across wakes. Persist each activation stop and
155
+ checkpoint before notification.
156
+
157
+ New sentinels write no `expires_at` and no notification/token/cost cap.
158
+ Post-Vet pending count may lower slices. Existing files
159
+ never receive missing defaults implicitly.
160
+
161
+ To leave AFK, delete the file. The next skill invocation reverts to HITL.
162
+
163
+ ## The four gates
164
+
165
+ Every `Mode: HITL` slice declares a `Gate:` and an `SLA:`. See
166
+ [`.devin/skills/rite-define/reference/gates.md`](../../../rite-define/reference/gates.md)
167
+ for the full taxonomy. Summary:
168
+
169
+ | Gate | Stakes | Pause? | SLA | AFK auto-handle when in `allow_gates`? |
170
+ |---|---|---|---|---|
171
+ | advisory | low | no | none | yes (log + proceed) |
172
+ | validating | medium | async | 4h | yes (build + queue, no merge until resolved) |
173
+ | blocking | high | sync | 15m | **no** (always pauses) |
174
+ | escalating | novel pattern | sync to specialist | 24h | **no** (always pauses) |
175
+
176
+ `blocking` and `escalating` always pause for HITL and for AFK `/rite-build`,
177
+ regardless of `allow_gates`.
178
+
179
+ **Autocomplete exception.** While `/rite-autocomplete` is the controlling
180
+ caller, an open `gate: blocking` question that already carries a ranked
181
+ recommended option (`proposed:` or option 1 labelled `(Recommended)`) is not a
182
+ user handoff: the orchestrator auto-picks that option through
183
+ `devrites-engine state resolve` and continues, including internal Spec Drift
184
+ Guard when the answer changes ownership or acceptance. Escalating,
185
+ irreversible-risk, access, and blocking questions with no recommended option
186
+ still pause. Putting `blocking` in `allow_gates` does not replace this resolve
187
+ step: an unanswered blocking question still fails Seal.
188
+
189
+ An open `gate: validating` entry is **merge-blocking by definition**: at `/rite-seal` any
190
+ `questions.md` entry with `gate: validating` and `status: open` is a NO-GO, regardless of
191
+ its behavior impact. A slice marked `built (pending review)` is **not done** until that
192
+ validating gate resolves.
193
+
194
+ ## Option set: how every gap is presented
195
+
196
+ Wherever a gap, checkpoint, or non-trivial decision surfaces (`/rite-spec`, `/rite-clarify`, `/rite-define`,
197
+ `/rite-build`, `/rite-temper`, `/rite-vet`, `devrites-doubt`, `devrites-interview`), present a
198
+ **ranked option set**, never a single bare guess:
199
+
200
+ - **2-4 concrete options**, the **recommended one first**, labelled `(Recommended)`.
201
+ - Each option has a **one-line, dimension-tagged rationale**: `logic · infra · business ·
202
+ architecture` (add `security` / `UX` / `risk` in scope) and trade-off.
203
+ - Always include an escape hatch (`Something else — describe it`).
204
+ - With more than four materially distinct choices, first ask a discriminating question or use
205
+ sequential packets, then obtain final confirmation. Materially distinct options MUST NOT
206
+ be silently dropped, merged, or preselected to fit the UI.
207
+ - Recommend for project conventions, stack, scale, and domain, not a generic default.
208
+
209
+ **HITL** renders the set via `AskUserQuestion`; the human's pick resolves the gate **in place**.
210
+ **AFK** auto-picks option 1 for gates it may auto-handle. Record the chosen option verbatim and
211
+ keep the **rejected options in `questions.md`**.
212
+
213
+ ## Decision ownership: search before asking
214
+
215
+ A gate is human only when its remaining choice is human-owned. First search live code,
216
+ project/decision docs, and authoritative dependency sources; make and record reversible
217
+ implementation/test choices. Ask only about product, scope, acceptance, architecture policy,
218
+ irreversible risk, or human-only access/action.
219
+
220
+ Objective test/build/tool failure runs bounded `devrites-debug-recovery`; fix it or record a
221
+ technical blocker. Never ask permission for another attempt, test, parser repair, or probe.
222
+ Close decisions at the earliest informed phase: product in spec, coverage in clarify,
223
+ scope/risk in temper, architecture/dependencies in define, and proof/toolchain in vet. Build
224
+ keeps only unavailable-pre-code or mandatory action-time checkpoints.
225
+
226
+ ## Irreversible-risk list (always pause)
227
+
228
+ The following always invoke the checkpoint protocol, regardless of `Mode`, `Gate`, or
229
+ `allow_gates`:
230
+
231
+ - Destructive data migration (drop column, drop table, irreversible backfill).
232
+ - Auth / authz boundary change.
233
+ - Public API break (response shape, removed endpoint, changed status code semantics).
234
+ - External-service contract change.
235
+ - Filesystem destruction outside the workspace.
236
+
237
+ When a pause clears and you proceed with a destructive migration, a removal, or a
238
+ public-API break, take the **safe path** the gate stopped you for: expand→contract,
239
+ prove the old path unused before removing it, and a rollback for every destructive step
240
+ ([`deprecation.md`](deprecation.md)). The gate requires the safe path; it does not
241
+ cancel the work.
242
+
243
+ By default, AFK widens what's *automatic*; it never widens what's *irreversible*.
244
+
245
+ Red checks remain hard non-advance build gates, but are not inherently irreversible or
246
+ human-owned; bounded recovery owns them.
247
+
248
+ ## `questions.md` schema
249
+
250
+ Append-only. One entry per qid. Format:
251
+
252
+ ```markdown
253
+ ## q-YYYY-MM-DD-NNN
254
+ status: open | answered | dropped
255
+ slice: <slice id, e.g. 03-list-endpoint, or "spec" / "plan">
256
+ gate: advisory | validating | blocking | escalating
257
+ question: <one crisp sentence>
258
+ options: | # ranked option set; recommended FIRST (see "Option set")
259
+ 1. <recommended> (Recommended) — logic: … · infra: … · business: … · architecture: …
260
+ 2. <alternative> — <dimension-tagged rationale + trade-off>
261
+ 3. Something else — describe it
262
+ proposed: <the recommended option restated — the HITL default + the AFK auto-pick>
263
+ raised_at: <iso>
264
+ answered_at: <iso, when status flips off "open">
265
+ answer: <chosen option (or human's verbatim reply / drop reason)>
266
+ ```
267
+
268
+ Rules:
269
+ - `NNN` is sequential per date: the next-available 3-digit integer.
270
+ - `status: open` is the only state `/rite-resolve` can mutate; `answered` and `dropped`
271
+ are terminal.
272
+ - The file is the audit trail. Don't edit answered/dropped entries: open a new qid that
273
+ references the old one (`supersedes: q-...-OLD`) and resolve it.
274
+
275
+ AFK never authorizes destructive Git. The native host permission/sandbox
276
+ boundary owns any such request and requires explicit user approval.
277
+
278
+ ## `state.md` `Awaiting human` block
279
+
280
+ When a HITL gate fires, `/rite-build` writes:
281
+
282
+ ```markdown
283
+ - Status: awaiting_human
284
+ - Next step: /rite-resolve <qid> "<answer>"
285
+
286
+ ## Awaiting human
287
+ - qid: <q-...>
288
+ - gate: <gate>
289
+ - question: <crisp text>
290
+ - proposed: <agent's tentative answer>
291
+ - raised_at: <iso>
292
+ - blocking_slices: [<slice ids that cannot advance>]
293
+ ```
294
+
295
+ `/rite-resolve` removes the block on success and flips `Status: running`.
296
+
297
+ ## The resume verb: `/rite-resolve`
298
+
299
+ Three shapes:
300
+
301
+ ```
302
+ /rite-resolve <qid> "<answer>"
303
+ /rite-resolve --drop <qid> ["<reason>"]
304
+ /rite-resolve --batch <path-to-yaml>
305
+ ```
306
+
307
+ `/rite-resolve` is the canonical writer for **async** resume: a gate that already paused and
308
+ stopped the session (an AFK blocking/escalating/irreversible queue, or a HITL pause the human
309
+ walked away from), plus `--batch`. In an **interactive HITL** session the skill resolves the
310
+ `AskUserQuestion` pick **in place** (the same `questions.md` `answered` write + `state.md`
311
+ clear), so you don't type `/rite-resolve` for gaps you answer live. Both paths flip
312
+ `status: open → answered` and clear `Awaiting human` through the **same `devrites-engine state resolve` writer**:
313
+ one source of truth, two entry points (live pick vs typed verb). Use the writer;
314
+ manual edits are never destructive-operation authority.
315
+
316
+ When `/rite-resolve` does resume a stopped session, the skill does **not** auto-run the next
317
+ `/rite-build`. The user types the next command explicitly so:
318
+ - A `/rite-plan repair` can land first if the answer changes scope.
319
+ - The user sees the workspace state before resuming.
320
+ - Each verb has one mutation; chaining is a hidden side-effect.
321
+
322
+ ## AFK exception for discretionary pauses
323
+
324
+ With `.devrites/AFK`, apply decision ownership first. Accepted in-scope technical
325
+ corrections return to the caller for repair/verification; severity blocks acceptance,
326
+ not authorized repair. Never silently accept a defect or broaden existing approval.
327
+
328
+ Discretionary ceilings apply only to
329
+ human-owned trade-off/risk decisions; accepted technical corrections do not enter
330
+ these branches. Compare Suggestion/Nit/FYI→advisory, Important→validating,
331
+ Critical→blocking against advisory < validating < blocking < escalating:
332
+
333
+ - Within the slice's `Gate:` and `.devrites/AFK` `allow_gates`: record advisory in
334
+ `questions.md`, trade-off in `decisions.md`, proceed.
335
+ - Above ceiling, missing authority, or unapproved irreversible risk: record blocking
336
+ question, `Status: awaiting_human`, fire `notify:`, STOP.
337
+
338
+ Recovery uses only the [retry contract](#retry-cap-no-progress-loops-and-self-resolve).
339
+
340
+ ## Retry cap, no-progress loops, and self-resolve
341
+
342
+ Owns all phase recovery, including Doubt/Vet/serial/parallel Build. Resource,
343
+ access, safety and irreversible-action boundaries independently stop work.
344
+
345
+ - **Fingerprint the failed invariant, not the review round.** Identify owning
346
+ invariant + defect mechanism + minimal reproduction/decisive failure signal.
347
+ DEC/DRIFT IDs, line numbers, wording and splitting one cause create no new budget.
348
+ - **Cap no-progress retries:** three no-progress attempts per exact causal fingerprint
349
+ across wright/recovery. Only a correction whose narrow recheck leaves that cause
350
+ open or reproduces its failure consumes an attempt.
351
+ Closing a prior finding with discriminating evidence is progress: resolve it,
352
+ do not charge. A new Critical or Important finding gets its own budget only for
353
+ a distinct evidenced cause. The same invariant with a different evidenced mechanism qualifies;
354
+ renaming/splitting an unchanged cause does not. Suggestion/Nit/FYI cannot extend
355
+ recovery. Initial discovery and expected test-first RED are not corrections;
356
+ total rounds, re-batches and distinct-finding counts never exhaust recovery.
357
+ - **Rechecks are scoped; late findings never reopen the round.** *Late* applies only
358
+ from a phase's **second** review pass (Vet 1b, Build's recheck after the first repair,
359
+ Review step 7); an initial pass has no late findings and every supported finding is
360
+ folded normally. A recheck packet
361
+ names the open fingerprints, the correction diff, and the dependents of each
362
+ changed clause/hunk; the owning reviewer's verdict covers exactly that. A finding
363
+ on text/code unchanged since that role's previous pass is *late*: Critical with a
364
+ concrete failure path → new fingerprint under this budget; otherwise recorded
365
+ (Plan/Vet: `eng-review.md` `## Deferred findings`; Build: `touched-files.md`
366
+ `## Review trail`) with severity · site · role · kind · round, and consumed by the
367
+ next full-inventory gate (Vet `mechanism` → one `test-plan.md` proof row; Build →
368
+ the `/rite-review` roster) — never by another repair round in this phase. Review
369
+ closes every deferred row with a labeled verdict; Seal blocks on any without one.
370
+ **Failing case:** round 4 finds three Important items on clauses untouched since
371
+ round 1 and dispatches another repair.
372
+ - **Separate consumptive authority from recovery.** Spent one-shot authorization
373
+ blocks another execution, not offline recovery. Retained evidence starts caller-owned
374
+ diagnosis/correction immediately; the next consumptive execution needs fresh authority.
375
+ - **Persist existing records.** Put fingerprint, reproduction, correction,
376
+ `progress: resolved|no-progress` and decisive result in `drift.md` and `evidence.md`.
377
+ Cold resume derives counts there; no new counter file/command.
378
+ - **Reconcile terminal cursors.** Retained distinct Critical/Important evidence below
379
+ cap resumes despite stale `Next step: none`; age/spent action authority is not exhaustion.
380
+ <!-- workflow-artifact-adapter: {"module":"devrites-lib/reference/standards/workflow-artifacts.md","entry":"unattended root reaches current admitted Workflow Artifact work","action":"invoke classifier; execute returned route without wright/slice charge","return":"saved lifecycle phase/action; no intermediate reply"} -->
381
+ - **Classify exhaustion:** human-owned contract/risk/access gaps open their gate.
382
+ Otherwise preserve reproduction/dead ends, set `Status: blocked` and
383
+ `Next step: none — technical recovery exhausted; requires new evidence or changed failure conditions`.
384
+ Emit no phase command, retry-permission question or `/rite-resolve`.
385
+ Reinvocation with unchanged cause stays blocked; it never resets the cap.
386
+ - **Resolve agent-owned questions first** from code/docs/decisions. Human communication
387
+ is for blocked environment, handover, inaccessible critical information or missing
388
+ credentials/permission—not writing, testing or review. Blocking/escalating/
389
+ irreversible gates remain.
390
+
391
+ ## What the rule does NOT cover
392
+
393
+ This contract is about **human pauses**. It does not weaken or replace:
394
+
395
+ - `/rite-prove`, `/rite-review`, `/rite-seal`: feature-scoped gates that always run.
396
+ - Spec Drift Guard: answer that changes acceptance criteria routes through
397
+ `/rite-plan repair`, not silently into the slice.
398
+ - `evidence.md` writes: every AFK iteration still records evidence; un-recorded passes
399
+ are unproven at `/rite-prove`.
400
+ - `/clear` / `/compact` advice: context-hygiene rules are unchanged.
401
+
402
+ AFK changes which decisions are automatic. It changes nothing else.
403
+
404
+ ## Cross-reference
405
+
406
+ - Skill: `/rite-resolve` (`.devin/skills/rite-resolve/SKILL.md`).
407
+ - Workflow integration: `/rite-build` (`.devin/skills/rite-build/SKILL.md`),
408
+ the readiness / HITL pre-flight stages before dispatch, and the DOUBT → PROVE
409
+ (fail-on-red) → RECORD stages on the wright's return
410
+ ([`one-slice-cycle.md`](../../../rite-build/reference/one-slice-cycle.md)).
411
+ - Render contract: `.devin/skills/rite-build/reference/checkpoint-protocol.md`.
412
+ - Loop discipline: `.devin/skills/rite-build/reference/afk-discipline.md`.
413
+ - Gate taxonomy: `.devin/skills/rite-define/reference/gates.md`.
414
+ - Schema: `.devin/skills/rite-spec/reference/state-workspace.md`.
415
+ - Doubt's AFK exception: `.devin/skills/devrites-doubt/SKILL.md` (AFK exception section).
@@ -0,0 +1,99 @@
1
+ # Agent orchestration
2
+
3
+ Follow DevRites policy and [`depth profiles`](../orchestration-profiles.md).
4
+
5
+ ## Authority
6
+
7
+ - Root owns scope, questions/decisions/results, `.devrites/**`, phase transitions — not product source/tests; vetted executable workflow artifacts follow [`workflow-artifacts.md`](workflow-artifacts.md).
8
+ - Only bounded wright writes product source/tests; others inspect an immutable candidate.
9
+ - Every named role runs; unavailable → HITL, never skip/substitute.
10
+ - Leaves never invoke agents, ask humans, change phase, push, install/deploy, migrate live data, or act irreversibly; they return evidence/proposals for root acceptance. Sole exception: one local unpushed transfer commit by an eligible native-worktree `devrites-slice-wright` — transport, not shipping authority or a checkpoint.
11
+
12
+ ## Agents
13
+
14
+ | Agent |
15
+ | --- |
16
+ | `devrites-evidence-scout` |
17
+ | `devrites-plan-drafter` |
18
+ | `devrites-upgrade-planner` |
19
+ | `devrites-proof-runner` |
20
+ | `devrites-strategy-reviewer` |
21
+ | `devrites-plan-reviewer` |
22
+ | `devrites-doubt-reviewer` |
23
+ | `devrites-spec-reviewer` |
24
+ | `devrites-code-reviewer` |
25
+ | `devrites-test-analyst` |
26
+ | `devrites-frontend-reviewer` |
27
+ | `devrites-security-auditor` |
28
+ | `devrites-performance-reviewer` |
29
+ | `devrites-devex-reviewer` |
30
+ | `devrites-simplifier-reviewer` |
31
+ | `devrites-retrospector` |
32
+ | `devrites-slice-wright` |
33
+
34
+ Files own briefs; [`parallel-dispatch.md`](../parallel-dispatch.md) owns rosters.
35
+
36
+ ## Native invocation
37
+
38
+ Skills name exact fresh roles, omit native fields;
39
+ hosts spawn/wait/deliver. Root MUST NOT advance/claim completion before admitting required results;
40
+ running/orphaned/unavailable = `gap` — no root/generic substitute.
41
+ Workflow-named skills (e.g. devrites-source-driven) are invoked inline in the root context, never dispatched as agents.
42
+
43
+ ## Source-writing boundary
44
+
45
+ Claude grants only wright `acceptEdits`; Codex root is workspace-capable (children cannot elevate). Wright alone `:workspace`; others `:read-only`. Wright gets the smallest exact project-relative source/test list — no directories/globs, traversal, or `.devrites/**`; no scope widening; root rejects `git diff --name-only` extras. Never patch product source/tests in root, bypass/substitute wright, accept drift, or recreate a dispatch bridge.
46
+
47
+ Isolated-worktree pilot only under [`wright-dispatch.md`](../../../rite-build/reference/wright-dispatch.md#isolated-writer-worktree-pilot): one writer, committed/clean baseline, non-submodule parent, exact transfer commit, candidate reconciliation — never parallel writers nor weaker exact-path admission. Root may materialize only exact Vet-ready workflow-artifact paths per [`workflow-artifacts.md`](workflow-artifacts.md) — not a writer dispatch or candidate mutation.
48
+
49
+ Each job gets objective/exclusions, exact paths/immutable candidate, rubric/result shape, a **stop condition** (when to return), and the exact result shape; a dispatch missing them is malformed and re-issued. Briefs MUST NOT seed verdict/severity cap/conclusion/suppression. Results state status/scope, outcome, commands/escalation; wright adds paths, changed files, gates, stood decisions; results never widen scope.
50
+
51
+ ## Independence
52
+
53
+ - A fresh result sees scope/paths-diff/rubric only — never another result's or the root's conclusions, severities, expected verdicts, or edited context; seeding voids the packet.
54
+ - **Verify the packet is clean before admitting the account.** Confirm the returned packet/trace carries no host-injected context: an automatic memory/summary banner naming an earlier phase verdict (e.g. `past Temper PASS … next is /rite-define`) or harness reminder text seeds the pass and voids it. Cancel that account — never admit it — name the lost coverage, and re-dispatch with the host's context injection disabled for that child. Tool config changes that do not stop native child auto-injection are not a fix; verify on the next spawn instead of assuming.
55
+ - A parent-context pass contributes attributed evidence but is not independent: exclude it from independent accounting and name the lost coverage.
56
+ - Final severity is set at reconciliation after re-verifying the claimed consequence at the cited site (reviewer severity advisory); dismissals record a reason, and true facts about neighboring code route elsewhere instead of being dismissed.
57
+ - Conflicting required results are arbitrated by re-verifying evidence at the site; the deciding evidence is recorded, truly unresolved conflicts stay open blockers. Two results describing the same defect merge only when both defect and fix path match; otherwise the more conservative classification stands, and severity never widens without new site evidence — an overridden or demoted finding stays visible with the reason, never silently merged away.
58
+
59
+ ## Result admission
60
+
61
+ Each required reviewer/analyst/auditor starts with exactly one:
62
+ `Outcome: findings`, `Outcome: no-findings`, or `Outcome: gap`.
63
+
64
+ **Canonical finding shape (C2 — all `devrites-*-reviewer` / auditor agents):**
65
+
66
+ ```text
67
+ Outcome: <findings | no-findings | gap>
68
+ Finding: <severity> | <file:line or artifact section> | <observed quote/result> | <impact> | <minimum fix>
69
+ Basis: <files read · commands run to reach this finding>
70
+ ```
71
+
72
+ - **`findings`:** each row uses the shape above; confidence 1–10 on Critical/Important.
73
+ Critical/Important requires 7+, exact evidence, concrete impact, and a non-empty
74
+ `Basis` — a correct verdict reached by an unrecorded inspection path is unproven.
75
+ - **`no-findings`:** `No-findings:` names checks and inspected evidence. Bare
76
+ pass, empty list, or “looks good” is malformed.
77
+ - **`gap`:** names missing/unreadable/stale input; skipped/failed required check;
78
+ tool/reviewer failure; or another limit. Required gaps block.
79
+
80
+ Root treats results as claims; verifies proposed Critical/Important blockers
81
+ against candidate. Missing fields become
82
+ `Unverified: <claim> — missing <proof>` and stay `gap` until verified/rejected
83
+ with evidence—never silently dropped/demoted. Null/timeout/failure/malformed
84
+ output is `gap`, never `no-findings`. Conditional `Not-applicable` must name the
85
+ inspected scope and why its trigger did not fire. **Failing case:** parent admits a
86
+ wright "done" with no `git diff --name-only` ⊆ path-contract (allowlist) observation.
87
+
88
+ ## Reconciliation
89
+
90
+ Root rejects stale/out-of-scope work, dedupes by root cause, records
91
+ accepted conclusions, and reruns only affected proof/review. Reconciliation runs
92
+ only after every dispatch reaches a terminal classification
93
+ ([parallel-dispatch.md](../parallel-dispatch.md)); findings that do not survive stay
94
+ visible as `withdrawn: <n> (<reason>)` in the account rather than being silently
95
+ dropped, so a later reader can audit what was discarded and why.
96
+ Route defects before correction: product/acceptance → Spec Drift Guard/Clarify;
97
+ architecture/slicing/proof → Plan/Vet; source/test → wright;
98
+ external/pre-existing → blocker/defer. Never patch downstream to hide an upstream
99
+ defect.
@@ -0,0 +1,48 @@
1
+ # DevRites: universal anti-patterns
2
+
3
+ The pack-wide rationalizations the agent reaches for when discipline gets in
4
+ the way. Apply at every phase. Each `rite-*/reference/anti-patterns.md`
5
+ extends this with phase-specific items.
6
+
7
+ This file is the **single source** of the universal anti-rationalization table.
8
+ `core.md` points here when an excuse appears.
9
+
10
+ ## Universal rationalizations
11
+
12
+ | Excuse | Rebuttal |
13
+ |---|---|
14
+ | "I'll add the tests later." | Tests written after the fact don't drive design and miss the boundary cases the act of writing exposes. Test now or the tests you eventually write are worse. |
15
+ | "Lint and build pass, that proves quality." | Automation proves syntax and style, not design or correctness. Never cite clean automation as evidence of good design. |
16
+ | "It's only a small refactor while I'm in here." | Feature scope only: drive-by cleanup balloons the diff, hides intent, and gets rejected at seal. Record as an FYI follow-up. |
17
+ | "This is a special case, the pattern doesn't apply." | Special cases multiply silently. Either they really are special (record *why* in `decisions.md`) or they're not (and the pattern wins). |
18
+ | "The user will tell me if something is wrong." | Drift detection is the workflow's job, not the user's QA. Surface assumptions; route material questions through the Spec Drift Guard. |
19
+ | "Generic name (`processData`, `handleItem`) is fine: the code is self-evident." | Generic AI naming is slop. Match the project's idiom; one concept gets one word across the codebase. |
20
+ | "Better safe than sorry: add the defensive null/length check." | Over-defensive guarding is slop. Validate at boundaries; trust the core. A check inside trusted code hides bugs in the boundary. |
21
+ | "It's faster to skip the small step." | Process shortcuts pay back later as drift, missed criteria, or unrecorded decisions. The step is the point. |
22
+ | "I observed it pass; recording is bureaucracy." | Un-recorded pass = unproven. The next phase reads `evidence.md`, not your memory. |
23
+ | "User clearly wants this, so I'll bypass the gate." | Gates exist for the failure modes asks miss. Honor the gate; the gate exists *because* of the ask. |
24
+ | "The test is failing. I'll just skip it / loosen the assertion to get green." | Faking green is reward-hacking, not progress. Never delete / skip / `xfail` / `.only` / loosen a failing test: a red test means fix the code or agree the change. Diff review and dedicated test analysis treat weakening as Critical. |
25
+ | "This project principle doesn't really apply to my case." | A declared invariant (`.devrites/principles.md`) is not advisory. Either it genuinely needs relaxing (record a scoped, dated exception a human approves) or it applies and the change is wrong. Silently routing around a principle is the defect the gate exists to catch (`principles.md`). |
26
+
27
+ ## Pack-wide red flags
28
+
29
+ These show up at any phase and are equally damning regardless:
30
+
31
+ - Touching files that aren't in `touched-files.md` "while I'm here".
32
+ - A finding / decision / assumption recorded only in chat, not in the workspace files (it dies on `/clear`).
33
+ - Catching the broadest possible error and continuing past it.
34
+ - A test that asserts the implementation, not the behavior.
35
+ - A failing test deleted, skipped, `xfail`-ed, `.only`-narrowed, or loosened to make the suite pass.
36
+ - Commenting out code instead of deleting it.
37
+ - A `// TODO` left in shipped code.
38
+ - Adding a dependency or a second design system without rationale in `decisions.md`.
39
+ - A change that violates a declared project principle (`.devrites/principles.md`) with no recorded, human-approved exception.
40
+ - "I'll fix it in a follow-up PR" with no follow-up opened.
41
+
42
+ ## Where this gets loaded
43
+
44
+ Phase-specific `rite-*/reference/anti-patterns.md` files extend this table with only their local cases. Load this file when the rationalization is broader than one phase.
45
+
46
+ ## Behavioral coverage
47
+
48
+ A new behavior-shaping rebuttal needs a matching behavioral eval; prose alone does not prove the guard holds under pressure.
@@ -0,0 +1,24 @@
1
+ # Browser proof checklist
2
+
3
+ Compact sweep only. Numbers and failing cases live in
4
+ [`quality-standards.md`](../../../devrites-frontend-craft/reference/quality-standards.md)
5
+ § Focus & states, § Responsive, and § Browser chrome — do not restate a shorter
6
+ viewport set here.
7
+
8
+ - Open the real UI (never screenshot-only); check console and network for errors.
9
+ - Before reading the builder's verdict, inventory the raw captures against the
10
+ required routes/states/viewports and candidate identity. Open each capture: a
11
+ wrong route, blank render, unexpected login wall, inconsistent dimensions, or
12
+ stale candidate is missing evidence. Recapture; until resolved, record
13
+ `cannot_verify` and block visual approval. A convincing narrative cannot repair it.
14
+ - Interactive slices capture each relevant canonical state and the canonical
15
+ viewport set. Omission needs a one-line `not-needed` reason; states must exist
16
+ in source — an unreachable state's capture proves nothing.
17
+ - Browser-default chrome is judged by § Browser chrome; reflow, zoom and bounded
18
+ two-dimensional exceptions by § Responsive. Compare to `design-brief.md` → Visual Verdict.
19
+ - Tooling unavailable ⇒ record fallback + limitation. Backend-only changes record
20
+ that disposition instead of capturing quietly; UI copy follows
21
+ `devrites-frontend-craft`, long-form prose follows `devrites-prose-craft`
22
+ ([`prose-style.md`](prose-style.md)).
23
+
24
+ Detailed skill: `devrites-browser-proof`.
@@ -0,0 +1,50 @@
1
+ # CI/CD & automation
2
+
3
+ Read this only when creating or changing a build/deploy pipeline. [`hooks.md`](hooks.md) owns local checks, [`development-workflow.md`](development-workflow.md) owns trunk health, and [`deprecation.md`](deprecation.md) owns migrations.
4
+
5
+ ## Pipeline gates
6
+
7
+ - Put each check at the earliest affordable stage: editor → pre-commit → pre-push → CI.
8
+ - Keep batches small so failures are attributable and releases remain reversible.
9
+ - Run lint → type-check → unit → build → integration → audit → E2E as applicable. A red gate stops the line; fix the defect rather than disabling the rule, weakening the test, or skipping the gate. CI is the source of truth for green.
10
+
11
+ ## Failure loop and ownership
12
+
13
+ Read the specific failure, fix its root cause, verify locally, then push again. Do not blind-rerun a flaky pipeline. Use `devrites-debug-recovery` when a test or build failure needs reproduction.
14
+
15
+ A designated Build Cop (a human/team role, not a pack agent) owns restoring a broken trunk by fixing or reverting, whichever is faster. Restoring trunk outranks feature work.
16
+
17
+ ## Deploy versus release
18
+
19
+ Keep incomplete or risky behavior disabled behind a flag so deploy and release remain separate and rollback does not require a redeploy. Every flag has an owner and a removal trigger; remove it through the [`deprecation.md`](deprecation.md) expand/contract path.
20
+
21
+ ## Deployment order and configuration
22
+
23
+ - Derive an explicit order for schema, application, worker, contract, config, and flag
24
+ changes. Prove the system remains safe at every intermediate old/new combination;
25
+ "deploy together" is not an atomicity guarantee across units.
26
+ - Validate required configuration at startup or the earliest safe boundary. Record names,
27
+ owners, environments, safe defaults, and rollback values without recording secrets.
28
+ A staging value copied by memory is not production evidence; a configuration mismatch
29
+ blocks exposure until the exact target value/owner is verified.
30
+ - Documentation drift in commands, configuration, migration order, or rollback steps is a
31
+ delivery defect: update the canonical doc and execute the documented path before exposure.
32
+ - Migration and destructive steps apply [`data-integrity.md`](data-integrity.md); service,
33
+ queue, webhook, and cache changes apply
34
+ [`integration-reliability.md`](integration-reliability.md). Their recovery/observability
35
+ gates precede exposure.
36
+ - Feature flags separate exposure only when both states are tested, the off path preserves
37
+ current behavior, and disabling the flag stops the risky effect. A flag cannot undo an
38
+ already destructive schema or data change.
39
+
40
+ ## Secrets
41
+
42
+ Commit `.env.example` without values; never commit real `.env` files. Inject CI secrets from the platform store and scope them to the job. Build runners do not receive production credentials.
43
+
44
+ ## Slow pipelines
45
+
46
+ When wall time exceeds roughly ten minutes, measure before and after. Improve in order: cache dependencies, parallelize independent jobs, path-filter, shard the slow suite, re-tier genuinely slow tests, then consider larger runners.
47
+
48
+ ## Scope
49
+
50
+ Change only the pipeline surface in scope; record wider CI redesign as follow-up work.