devrites 5.4.0 → 5.6.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 (490) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +8 -6
  3. package/docs/command-map.md +2 -2
  4. package/docs/engine/state-schema.md +12 -0
  5. package/docs/flow.md +4 -0
  6. package/docs/orchestration.md +5 -2
  7. package/engine/commands.go +2 -2
  8. package/engine/internal/devritespaths/paths.go +18 -0
  9. package/engine/internal/gate/gate.go +78 -0
  10. package/engine/internal/gate/gate_test.go +118 -0
  11. package/engine/internal/hostpack/hostpack.go +45 -6
  12. package/engine/internal/hostpack/hostpack_test.go +29 -13
  13. package/engine/internal/install/apply.go +14 -5
  14. package/engine/internal/install/install.go +8 -2
  15. package/engine/internal/install/install_test.go +12 -5
  16. package/engine/internal/install/merge.go +5 -0
  17. package/engine/internal/install/preflight.go +20 -2
  18. package/engine/internal/install/uninstall.go +5 -0
  19. package/engine/internal/install/update.go +1 -1
  20. package/engine/internal/lib/candidate.go +7 -3
  21. package/engine/internal/lib/manifest_union.go +326 -0
  22. package/engine/internal/lib/manifest_union_test.go +214 -0
  23. package/engine/internal/lib/observe_budgets.go +73 -0
  24. package/engine/internal/lib/observe_budgets_test.go +142 -0
  25. package/engine/internal/lib/observe_summary.go +74 -13
  26. package/engine/internal/lib/workspace_read.go +11 -6
  27. package/engine/internal/state/budgets.go +163 -0
  28. package/engine/internal/state/budgets_test.go +42 -0
  29. package/engine/internal/state/cursor.go +16 -10
  30. package/engine/internal/state/observation.go +50 -4
  31. package/engine/internal/state/status.go +38 -26
  32. package/engine/internal/state/taskgraph.go +23 -0
  33. package/engine/main.go +32 -13
  34. package/engine/root_routing_test.go +3 -1
  35. package/install.sh +4 -1
  36. package/pack/.claude/agents/devrites-code-reviewer.md +9 -6
  37. package/pack/.claude/agents/devrites-doubt-reviewer.md +6 -0
  38. package/pack/.claude/agents/devrites-plan-reviewer.md +7 -1
  39. package/pack/.claude/agents/devrites-slice-wright.md +42 -46
  40. package/pack/.claude/agents/devrites-test-analyst.md +9 -4
  41. package/pack/.claude/agents/devrites-upgrade-planner.md +9 -1
  42. package/pack/.claude/settings.json +17 -0
  43. package/pack/.claude/skills/devrites-api-interface/SKILL.md +2 -2
  44. package/pack/.claude/skills/devrites-doubt/SKILL.md +9 -17
  45. package/pack/.claude/skills/devrites-lib/reference/candidate-integrity.md +34 -35
  46. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +11 -12
  47. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +104 -51
  48. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +1 -0
  49. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +45 -25
  50. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +1 -1
  51. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +80 -41
  52. package/pack/.claude/skills/rite-autocomplete/SKILL.md +19 -8
  53. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +33 -1
  54. package/pack/.claude/skills/rite-build/SKILL.md +26 -19
  55. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +1 -1
  56. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +90 -40
  57. package/pack/.claude/skills/rite-build/reference/phase-contract.md +79 -59
  58. package/pack/.claude/skills/rite-build/reference/spec-drift-guard.md +14 -15
  59. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +8 -8
  60. package/pack/.claude/skills/rite-define/SKILL.md +4 -1
  61. package/pack/.claude/skills/rite-plan/SKILL.md +4 -1
  62. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +21 -0
  63. package/pack/.claude/skills/rite-plan/reference/slicing.md +117 -15
  64. package/pack/.claude/skills/rite-prove/SKILL.md +20 -22
  65. package/pack/.claude/skills/rite-review/SKILL.md +23 -16
  66. package/pack/.claude/skills/rite-seal/SKILL.md +8 -8
  67. package/pack/.claude/skills/rite-seal/reference/final-evidence.md +6 -5
  68. package/pack/.claude/skills/rite-seal/reference/phase-contract.md +13 -13
  69. package/pack/.claude/skills/rite-ship/SKILL.md +3 -0
  70. package/pack/.claude/skills/rite-ship/reference/close-out.md +16 -2
  71. package/pack/.claude/skills/rite-ship/reference/git-ship.md +14 -5
  72. package/pack/.claude/skills/rite-spec/SKILL.md +6 -0
  73. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -0
  74. package/pack/.claude/skills/rite-status/SKILL.md +4 -1
  75. package/pack/.claude/skills/rite-temper/SKILL.md +14 -11
  76. package/pack/.claude/skills/rite-temper/reference/anti-patterns.md +14 -13
  77. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +3 -4
  78. package/pack/.claude/skills/rite-upgrade/SKILL.md +11 -2
  79. package/pack/.claude/skills/rite-vet/SKILL.md +22 -15
  80. package/pack/.claude/skills/rite-vet/reference/anti-patterns.md +11 -9
  81. package/pack/.claude/skills/rite-vet/reference/depth.md +6 -7
  82. package/pack/.claude/skills/rite-vet/reference/review-axes.md +39 -14
  83. package/pack/generated/README.md +5 -1
  84. package/pack/generated/claude/agents/devrites-code-reviewer.md +9 -6
  85. package/pack/generated/claude/agents/devrites-doubt-reviewer.md +6 -0
  86. package/pack/generated/claude/agents/devrites-plan-reviewer.md +7 -1
  87. package/pack/generated/claude/agents/devrites-slice-wright.md +42 -46
  88. package/pack/generated/claude/agents/devrites-test-analyst.md +9 -4
  89. package/pack/generated/claude/agents/devrites-upgrade-planner.md +9 -1
  90. package/pack/generated/claude/settings.json +17 -0
  91. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +2 -2
  92. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +9 -17
  93. package/pack/generated/claude/skills/devrites-lib/reference/candidate-integrity.md +34 -35
  94. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +11 -12
  95. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +104 -51
  96. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +1 -0
  97. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +45 -25
  98. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +1 -1
  99. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +80 -41
  100. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +19 -8
  101. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +33 -1
  102. package/pack/generated/claude/skills/rite-build/SKILL.md +26 -19
  103. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +1 -1
  104. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +90 -40
  105. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +79 -59
  106. package/pack/generated/claude/skills/rite-build/reference/spec-drift-guard.md +14 -15
  107. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +8 -8
  108. package/pack/generated/claude/skills/rite-define/SKILL.md +4 -1
  109. package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -1
  110. package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +21 -0
  111. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +117 -15
  112. package/pack/generated/claude/skills/rite-prove/SKILL.md +20 -22
  113. package/pack/generated/claude/skills/rite-review/SKILL.md +23 -16
  114. package/pack/generated/claude/skills/rite-seal/SKILL.md +8 -8
  115. package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +6 -5
  116. package/pack/generated/claude/skills/rite-seal/reference/phase-contract.md +13 -13
  117. package/pack/generated/claude/skills/rite-ship/SKILL.md +3 -0
  118. package/pack/generated/claude/skills/rite-ship/reference/close-out.md +16 -2
  119. package/pack/generated/claude/skills/rite-ship/reference/git-ship.md +14 -5
  120. package/pack/generated/claude/skills/rite-spec/SKILL.md +6 -0
  121. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -0
  122. package/pack/generated/claude/skills/rite-status/SKILL.md +4 -1
  123. package/pack/generated/claude/skills/rite-temper/SKILL.md +14 -11
  124. package/pack/generated/claude/skills/rite-temper/reference/anti-patterns.md +14 -13
  125. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +3 -4
  126. package/pack/generated/claude/skills/rite-upgrade/SKILL.md +11 -2
  127. package/pack/generated/claude/skills/rite-vet/SKILL.md +22 -15
  128. package/pack/generated/claude/skills/rite-vet/reference/anti-patterns.md +11 -9
  129. package/pack/generated/claude/skills/rite-vet/reference/depth.md +6 -7
  130. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +39 -14
  131. package/pack/generated/codex/agents/devrites-code-reviewer.toml +9 -6
  132. package/pack/generated/codex/agents/devrites-doubt-reviewer.toml +6 -0
  133. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +7 -1
  134. package/pack/generated/codex/agents/devrites-slice-wright.toml +42 -46
  135. package/pack/generated/codex/agents/devrites-test-analyst.toml +9 -4
  136. package/pack/generated/codex/agents/devrites-upgrade-planner.toml +9 -1
  137. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +2 -2
  138. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +9 -17
  139. package/pack/generated/codex/skills/devrites-lib/reference/candidate-integrity.md +34 -35
  140. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +11 -12
  141. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +104 -51
  142. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +1 -0
  143. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +45 -25
  144. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +1 -1
  145. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +80 -41
  146. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +19 -8
  147. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +33 -1
  148. package/pack/generated/codex/skills/rite-build/SKILL.md +26 -19
  149. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +1 -1
  150. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +90 -40
  151. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +79 -59
  152. package/pack/generated/codex/skills/rite-build/reference/spec-drift-guard.md +14 -15
  153. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +8 -8
  154. package/pack/generated/codex/skills/rite-define/SKILL.md +4 -1
  155. package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -1
  156. package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +21 -0
  157. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +117 -15
  158. package/pack/generated/codex/skills/rite-prove/SKILL.md +20 -22
  159. package/pack/generated/codex/skills/rite-review/SKILL.md +23 -16
  160. package/pack/generated/codex/skills/rite-seal/SKILL.md +8 -8
  161. package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +6 -5
  162. package/pack/generated/codex/skills/rite-seal/reference/phase-contract.md +13 -13
  163. package/pack/generated/codex/skills/rite-ship/SKILL.md +3 -0
  164. package/pack/generated/codex/skills/rite-ship/reference/close-out.md +16 -2
  165. package/pack/generated/codex/skills/rite-ship/reference/git-ship.md +14 -5
  166. package/pack/generated/codex/skills/rite-spec/SKILL.md +6 -0
  167. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -0
  168. package/pack/generated/codex/skills/rite-status/SKILL.md +4 -1
  169. package/pack/generated/codex/skills/rite-temper/SKILL.md +14 -11
  170. package/pack/generated/codex/skills/rite-temper/reference/anti-patterns.md +14 -13
  171. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +3 -4
  172. package/pack/generated/codex/skills/rite-upgrade/SKILL.md +11 -2
  173. package/pack/generated/codex/skills/rite-vet/SKILL.md +22 -15
  174. package/pack/generated/codex/skills/rite-vet/reference/anti-patterns.md +11 -9
  175. package/pack/generated/codex/skills/rite-vet/reference/depth.md +6 -7
  176. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +39 -14
  177. package/pack/generated/omp/agents/devrites-code-reviewer.md +9 -6
  178. package/pack/generated/omp/agents/devrites-doubt-reviewer.md +6 -0
  179. package/pack/generated/omp/agents/devrites-plan-reviewer.md +7 -1
  180. package/pack/generated/omp/agents/devrites-slice-wright.md +42 -46
  181. package/pack/generated/omp/agents/devrites-test-analyst.md +9 -4
  182. package/pack/generated/omp/agents/devrites-upgrade-planner.md +9 -1
  183. package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +2 -2
  184. package/pack/generated/omp/skills/devrites-doubt/SKILL.md +9 -17
  185. package/pack/generated/omp/skills/devrites-lib/reference/candidate-integrity.md +34 -35
  186. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +11 -12
  187. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +104 -51
  188. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +1 -0
  189. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +45 -25
  190. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +1 -1
  191. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +80 -41
  192. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +19 -8
  193. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +33 -1
  194. package/pack/generated/omp/skills/rite-build/SKILL.md +26 -19
  195. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +1 -1
  196. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +90 -40
  197. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +79 -59
  198. package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +14 -15
  199. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +8 -8
  200. package/pack/generated/omp/skills/rite-define/SKILL.md +4 -1
  201. package/pack/generated/omp/skills/rite-plan/SKILL.md +4 -1
  202. package/pack/generated/omp/skills/rite-plan/reference/replan-and-repair.md +21 -0
  203. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +117 -15
  204. package/pack/generated/omp/skills/rite-prove/SKILL.md +20 -22
  205. package/pack/generated/omp/skills/rite-review/SKILL.md +23 -16
  206. package/pack/generated/omp/skills/rite-seal/SKILL.md +8 -8
  207. package/pack/generated/omp/skills/rite-seal/reference/final-evidence.md +6 -5
  208. package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +13 -13
  209. package/pack/generated/omp/skills/rite-ship/SKILL.md +3 -0
  210. package/pack/generated/omp/skills/rite-ship/reference/close-out.md +16 -2
  211. package/pack/generated/omp/skills/rite-ship/reference/git-ship.md +14 -5
  212. package/pack/generated/omp/skills/rite-spec/SKILL.md +6 -0
  213. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +6 -0
  214. package/pack/generated/omp/skills/rite-status/SKILL.md +4 -1
  215. package/pack/generated/omp/skills/rite-temper/SKILL.md +14 -11
  216. package/pack/generated/omp/skills/rite-temper/reference/anti-patterns.md +14 -13
  217. package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +3 -4
  218. package/pack/generated/omp/skills/rite-upgrade/SKILL.md +11 -2
  219. package/pack/generated/omp/skills/rite-vet/SKILL.md +22 -15
  220. package/pack/generated/omp/skills/rite-vet/reference/anti-patterns.md +11 -9
  221. package/pack/generated/omp/skills/rite-vet/reference/depth.md +6 -7
  222. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +39 -14
  223. package/pack/generated/pi/AGENTS.md +22 -0
  224. package/pack/generated/pi/agents/devrites-code-reviewer.md +142 -0
  225. package/pack/generated/pi/agents/devrites-devex-reviewer.md +124 -0
  226. package/pack/generated/pi/agents/devrites-doubt-reviewer.md +88 -0
  227. package/pack/generated/pi/agents/devrites-evidence-scout.md +72 -0
  228. package/pack/generated/pi/agents/devrites-frontend-reviewer.md +116 -0
  229. package/pack/generated/pi/agents/devrites-performance-reviewer.md +115 -0
  230. package/pack/generated/pi/agents/devrites-plan-drafter.md +99 -0
  231. package/pack/generated/pi/agents/devrites-plan-reviewer.md +142 -0
  232. package/pack/generated/pi/agents/devrites-proof-runner.md +74 -0
  233. package/pack/generated/pi/agents/devrites-retrospector.md +61 -0
  234. package/pack/generated/pi/agents/devrites-security-auditor.md +109 -0
  235. package/pack/generated/pi/agents/devrites-simplifier-reviewer.md +94 -0
  236. package/pack/generated/pi/agents/devrites-slice-wright.md +204 -0
  237. package/pack/generated/pi/agents/devrites-spec-reviewer.md +96 -0
  238. package/pack/generated/pi/agents/devrites-strategy-reviewer.md +100 -0
  239. package/pack/generated/pi/agents/devrites-test-analyst.md +94 -0
  240. package/pack/generated/pi/agents/devrites-upgrade-planner.md +89 -0
  241. package/pack/generated/pi/prompts/rite-adopt.md +5 -0
  242. package/pack/generated/pi/prompts/rite-autocomplete.md +5 -0
  243. package/pack/generated/pi/prompts/rite-build.md +5 -0
  244. package/pack/generated/pi/prompts/rite-clarify.md +5 -0
  245. package/pack/generated/pi/prompts/rite-converge.md +5 -0
  246. package/pack/generated/pi/prompts/rite-customize.md +5 -0
  247. package/pack/generated/pi/prompts/rite-define.md +5 -0
  248. package/pack/generated/pi/prompts/rite-doctor.md +5 -0
  249. package/pack/generated/pi/prompts/rite-dogfood.md +5 -0
  250. package/pack/generated/pi/prompts/rite-explain.md +5 -0
  251. package/pack/generated/pi/prompts/rite-frame.md +5 -0
  252. package/pack/generated/pi/prompts/rite-handoff.md +5 -0
  253. package/pack/generated/pi/prompts/rite-learn.md +5 -0
  254. package/pack/generated/pi/prompts/rite-plan.md +5 -0
  255. package/pack/generated/pi/prompts/rite-polish.md +5 -0
  256. package/pack/generated/pi/prompts/rite-pov.md +5 -0
  257. package/pack/generated/pi/prompts/rite-pr-feedback.md +5 -0
  258. package/pack/generated/pi/prompts/rite-pressure-test.md +5 -0
  259. package/pack/generated/pi/prompts/rite-prototype.md +5 -0
  260. package/pack/generated/pi/prompts/rite-prove.md +5 -0
  261. package/pack/generated/pi/prompts/rite-quick.md +5 -0
  262. package/pack/generated/pi/prompts/rite-resolve.md +5 -0
  263. package/pack/generated/pi/prompts/rite-review.md +5 -0
  264. package/pack/generated/pi/prompts/rite-seal.md +5 -0
  265. package/pack/generated/pi/prompts/rite-ship.md +5 -0
  266. package/pack/generated/pi/prompts/rite-spec.md +5 -0
  267. package/pack/generated/pi/prompts/rite-status.md +5 -0
  268. package/pack/generated/pi/prompts/rite-temper.md +5 -0
  269. package/pack/generated/pi/prompts/rite-upgrade.md +5 -0
  270. package/pack/generated/pi/prompts/rite-vet.md +5 -0
  271. package/pack/generated/pi/prompts/rite-watch-pr.md +5 -0
  272. package/pack/generated/pi/prompts/rite-zoom-out.md +5 -0
  273. package/pack/generated/pi/prompts/rite.md +5 -0
  274. package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +63 -0
  275. package/pack/generated/pi/skills/devrites-audit/SKILL.md +50 -0
  276. package/pack/generated/pi/skills/devrites-browser-proof/SKILL.md +76 -0
  277. package/pack/generated/pi/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
  278. package/pack/generated/pi/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
  279. package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +96 -0
  280. package/pack/generated/pi/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
  281. package/pack/generated/pi/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
  282. package/pack/generated/pi/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
  283. package/pack/generated/pi/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  284. package/pack/generated/pi/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
  285. package/pack/generated/pi/skills/devrites-debug-recovery/reference/trace.md +25 -0
  286. package/pack/generated/pi/skills/devrites-doubt/SKILL.md +79 -0
  287. package/pack/generated/pi/skills/devrites-frontend-craft/SKILL.md +86 -0
  288. package/pack/generated/pi/skills/devrites-frontend-craft/reference/craft.md +63 -0
  289. package/pack/generated/pi/skills/devrites-frontend-craft/reference/design-references.md +116 -0
  290. package/pack/generated/pi/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
  291. package/pack/generated/pi/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
  292. package/pack/generated/pi/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
  293. package/pack/generated/pi/skills/devrites-frontend-craft/reference/shape.md +56 -0
  294. package/pack/generated/pi/skills/devrites-interview/SKILL.md +102 -0
  295. package/pack/generated/pi/skills/devrites-lib/SKILL.md +58 -0
  296. package/pack/generated/pi/skills/devrites-lib/reference/candidate-integrity.md +42 -0
  297. package/pack/generated/pi/skills/devrites-lib/reference/intent-map.md +64 -0
  298. package/pack/generated/pi/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
  299. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +73 -0
  300. package/pack/generated/pi/skills/devrites-lib/reference/reply-contract.md +88 -0
  301. package/pack/generated/pi/skills/devrites-lib/reference/standards/README.md +60 -0
  302. package/pack/generated/pi/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
  303. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +398 -0
  304. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +99 -0
  305. package/pack/generated/pi/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
  306. package/pack/generated/pi/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
  307. package/pack/generated/pi/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
  308. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  309. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-review.md +108 -0
  310. package/pack/generated/pi/skills/devrites-lib/reference/standards/coding-style.md +48 -0
  311. package/pack/generated/pi/skills/devrites-lib/reference/standards/context-hygiene.md +109 -0
  312. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +167 -0
  313. package/pack/generated/pi/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
  314. package/pack/generated/pi/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
  315. package/pack/generated/pi/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
  316. package/pack/generated/pi/skills/devrites-lib/reference/standards/deprecation.md +31 -0
  317. package/pack/generated/pi/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
  318. package/pack/generated/pi/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
  319. package/pack/generated/pi/skills/devrites-lib/reference/standards/documentation.md +43 -0
  320. package/pack/generated/pi/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
  321. package/pack/generated/pi/skills/devrites-lib/reference/standards/elicitation.md +85 -0
  322. package/pack/generated/pi/skills/devrites-lib/reference/standards/error-handling.md +47 -0
  323. package/pack/generated/pi/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
  324. package/pack/generated/pi/skills/devrites-lib/reference/standards/hooks.md +25 -0
  325. package/pack/generated/pi/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
  326. package/pack/generated/pi/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
  327. package/pack/generated/pi/skills/devrites-lib/reference/standards/observability.md +88 -0
  328. package/pack/generated/pi/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
  329. package/pack/generated/pi/skills/devrites-lib/reference/standards/patterns.md +68 -0
  330. package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +51 -0
  331. package/pack/generated/pi/skills/devrites-lib/reference/standards/principles.md +42 -0
  332. package/pack/generated/pi/skills/devrites-lib/reference/standards/prose-style.md +123 -0
  333. package/pack/generated/pi/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
  334. package/pack/generated/pi/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
  335. package/pack/generated/pi/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
  336. package/pack/generated/pi/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
  337. package/pack/generated/pi/skills/devrites-lib/reference/standards/security.md +202 -0
  338. package/pack/generated/pi/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
  339. package/pack/generated/pi/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
  340. package/pack/generated/pi/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
  341. package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +212 -0
  342. package/pack/generated/pi/skills/devrites-lib/reference/standards/tooling.md +92 -0
  343. package/pack/generated/pi/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
  344. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
  345. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
  346. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
  347. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
  348. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
  349. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
  350. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
  351. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
  352. package/pack/generated/pi/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
  353. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +267 -0
  354. package/pack/generated/pi/skills/devrites-prose-craft/SKILL.md +73 -0
  355. package/pack/generated/pi/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
  356. package/pack/generated/pi/skills/devrites-prose-craft/reference/examples.md +131 -0
  357. package/pack/generated/pi/skills/devrites-prose-craft/reference/structures.md +196 -0
  358. package/pack/generated/pi/skills/devrites-source-driven/SKILL.md +52 -0
  359. package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +134 -0
  360. package/pack/generated/pi/skills/devrites-ux-shape/reference/brief-template.md +108 -0
  361. package/pack/generated/pi/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
  362. package/pack/generated/pi/skills/rite/SKILL.md +148 -0
  363. package/pack/generated/pi/skills/rite/reference/menu.md +48 -0
  364. package/pack/generated/pi/skills/rite-adopt/SKILL.md +52 -0
  365. package/pack/generated/pi/skills/rite-adopt/reference/adoption.md +19 -0
  366. package/pack/generated/pi/skills/rite-adopt/reference/anti-patterns.md +19 -0
  367. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +132 -0
  368. package/pack/generated/pi/skills/rite-autocomplete/reference/decision-policy.md +41 -0
  369. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +148 -0
  370. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +92 -0
  371. package/pack/generated/pi/skills/rite-build/SKILL.md +96 -0
  372. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +145 -0
  373. package/pack/generated/pi/skills/rite-build/reference/anti-patterns.md +23 -0
  374. package/pack/generated/pi/skills/rite-build/reference/checkpoint-protocol.md +120 -0
  375. package/pack/generated/pi/skills/rite-build/reference/checkpoint.md +44 -0
  376. package/pack/generated/pi/skills/rite-build/reference/frontend-trigger.md +39 -0
  377. package/pack/generated/pi/skills/rite-build/reference/one-slice-cycle.md +50 -0
  378. package/pack/generated/pi/skills/rite-build/reference/output.md +33 -0
  379. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +205 -0
  380. package/pack/generated/pi/skills/rite-build/reference/phase-contract.md +87 -0
  381. package/pack/generated/pi/skills/rite-build/reference/spec-drift-guard.md +84 -0
  382. package/pack/generated/pi/skills/rite-build/reference/tdd.md +27 -0
  383. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +89 -0
  384. package/pack/generated/pi/skills/rite-clarify/SKILL.md +99 -0
  385. package/pack/generated/pi/skills/rite-clarify/reference/anti-patterns.md +24 -0
  386. package/pack/generated/pi/skills/rite-clarify/reference/decision-coverage.md +55 -0
  387. package/pack/generated/pi/skills/rite-converge/SKILL.md +145 -0
  388. package/pack/generated/pi/skills/rite-converge/reference/anti-patterns.md +35 -0
  389. package/pack/generated/pi/skills/rite-converge/reference/convergence-assessment.md +65 -0
  390. package/pack/generated/pi/skills/rite-customize/SKILL.md +60 -0
  391. package/pack/generated/pi/skills/rite-define/SKILL.md +169 -0
  392. package/pack/generated/pi/skills/rite-define/reference/anti-patterns.md +26 -0
  393. package/pack/generated/pi/skills/rite-define/reference/gates.md +154 -0
  394. package/pack/generated/pi/skills/rite-define/reference/plan-template.md +149 -0
  395. package/pack/generated/pi/skills/rite-doctor/SKILL.md +69 -0
  396. package/pack/generated/pi/skills/rite-dogfood/SKILL.md +55 -0
  397. package/pack/generated/pi/skills/rite-explain/SKILL.md +152 -0
  398. package/pack/generated/pi/skills/rite-explain/reference/intake.md +89 -0
  399. package/pack/generated/pi/skills/rite-frame/SKILL.md +115 -0
  400. package/pack/generated/pi/skills/rite-frame/reference/failure-modes.md +66 -0
  401. package/pack/generated/pi/skills/rite-handoff/SKILL.md +97 -0
  402. package/pack/generated/pi/skills/rite-handoff/reference/handoff-template.md +44 -0
  403. package/pack/generated/pi/skills/rite-learn/SKILL.md +72 -0
  404. package/pack/generated/pi/skills/rite-plan/SKILL.md +186 -0
  405. package/pack/generated/pi/skills/rite-plan/reference/anti-patterns.md +34 -0
  406. package/pack/generated/pi/skills/rite-plan/reference/dependency-graph.md +48 -0
  407. package/pack/generated/pi/skills/rite-plan/reference/replan-and-repair.md +105 -0
  408. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +167 -0
  409. package/pack/generated/pi/skills/rite-plan/reference/task-breakdown.md +42 -0
  410. package/pack/generated/pi/skills/rite-polish/SKILL.md +104 -0
  411. package/pack/generated/pi/skills/rite-polish/reference/adr-promotion.md +11 -0
  412. package/pack/generated/pi/skills/rite-polish/reference/anti-ai-slop.md +187 -0
  413. package/pack/generated/pi/skills/rite-polish/reference/anti-patterns.md +30 -0
  414. package/pack/generated/pi/skills/rite-polish/reference/backend-polish.md +80 -0
  415. package/pack/generated/pi/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
  416. package/pack/generated/pi/skills/rite-polish/reference/code.md +82 -0
  417. package/pack/generated/pi/skills/rite-polish/reference/design-memory.md +117 -0
  418. package/pack/generated/pi/skills/rite-polish/reference/design-system-discovery.md +8 -0
  419. package/pack/generated/pi/skills/rite-polish/reference/harden-checklist.md +109 -0
  420. package/pack/generated/pi/skills/rite-polish/reference/ledger.md +65 -0
  421. package/pack/generated/pi/skills/rite-polish/reference/ui.md +137 -0
  422. package/pack/generated/pi/skills/rite-pov/SKILL.md +58 -0
  423. package/pack/generated/pi/skills/rite-pr-feedback/SKILL.md +54 -0
  424. package/pack/generated/pi/skills/rite-pressure-test/SKILL.md +67 -0
  425. package/pack/generated/pi/skills/rite-prototype/SKILL.md +104 -0
  426. package/pack/generated/pi/skills/rite-prove/SKILL.md +120 -0
  427. package/pack/generated/pi/skills/rite-prove/reference/acceptance-proof.md +88 -0
  428. package/pack/generated/pi/skills/rite-prove/reference/anti-patterns.md +25 -0
  429. package/pack/generated/pi/skills/rite-prove/reference/browser-proof.md +51 -0
  430. package/pack/generated/pi/skills/rite-prove/reference/failure-triage.md +43 -0
  431. package/pack/generated/pi/skills/rite-prove/reference/proof-ladder.md +28 -0
  432. package/pack/generated/pi/skills/rite-prove/reference/test-command-discovery.md +30 -0
  433. package/pack/generated/pi/skills/rite-quick/SKILL.md +82 -0
  434. package/pack/generated/pi/skills/rite-resolve/SKILL.md +95 -0
  435. package/pack/generated/pi/skills/rite-resolve/reference/answer-protocol.md +118 -0
  436. package/pack/generated/pi/skills/rite-review/SKILL.md +170 -0
  437. package/pack/generated/pi/skills/rite-review/reference/anti-patterns.md +32 -0
  438. package/pack/generated/pi/skills/rite-review/reference/cognitive-load.md +90 -0
  439. package/pack/generated/pi/skills/rite-review/reference/feature-scoped-review.md +26 -0
  440. package/pack/generated/pi/skills/rite-review/reference/five-axis-review.md +66 -0
  441. package/pack/generated/pi/skills/rite-review/reference/nielsen-heuristics.md +126 -0
  442. package/pack/generated/pi/skills/rite-review/reference/performance-checklist.md +80 -0
  443. package/pack/generated/pi/skills/rite-review/reference/performance-review.md +14 -0
  444. package/pack/generated/pi/skills/rite-review/reference/security-review.md +42 -0
  445. package/pack/generated/pi/skills/rite-seal/SKILL.md +75 -0
  446. package/pack/generated/pi/skills/rite-seal/reference/anti-patterns.md +29 -0
  447. package/pack/generated/pi/skills/rite-seal/reference/final-evidence.md +41 -0
  448. package/pack/generated/pi/skills/rite-seal/reference/go-no-go.md +29 -0
  449. package/pack/generated/pi/skills/rite-seal/reference/output.md +5 -0
  450. package/pack/generated/pi/skills/rite-seal/reference/phase-contract.md +47 -0
  451. package/pack/generated/pi/skills/rite-seal/reference/risk-and-rollback.md +56 -0
  452. package/pack/generated/pi/skills/rite-seal/reference/seal-template.md +27 -0
  453. package/pack/generated/pi/skills/rite-ship/SKILL.md +88 -0
  454. package/pack/generated/pi/skills/rite-ship/reference/anti-patterns.md +28 -0
  455. package/pack/generated/pi/skills/rite-ship/reference/close-out.md +68 -0
  456. package/pack/generated/pi/skills/rite-ship/reference/git-ship.md +120 -0
  457. package/pack/generated/pi/skills/rite-ship/reference/rollout.md +62 -0
  458. package/pack/generated/pi/skills/rite-ship/reference/ship-template.md +39 -0
  459. package/pack/generated/pi/skills/rite-spec/SKILL.md +150 -0
  460. package/pack/generated/pi/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  461. package/pack/generated/pi/skills/rite-spec/reference/ai-spec-template.md +40 -0
  462. package/pack/generated/pi/skills/rite-spec/reference/anti-patterns.md +27 -0
  463. package/pack/generated/pi/skills/rite-spec/reference/interview-patterns.md +56 -0
  464. package/pack/generated/pi/skills/rite-spec/reference/investigation.md +83 -0
  465. package/pack/generated/pi/skills/rite-spec/reference/question-protocol.md +36 -0
  466. package/pack/generated/pi/skills/rite-spec/reference/references-intake.md +62 -0
  467. package/pack/generated/pi/skills/rite-spec/reference/spec-checklists.md +89 -0
  468. package/pack/generated/pi/skills/rite-spec/reference/spec-template.md +154 -0
  469. package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +227 -0
  470. package/pack/generated/pi/skills/rite-status/SKILL.md +57 -0
  471. package/pack/generated/pi/skills/rite-temper/SKILL.md +130 -0
  472. package/pack/generated/pi/skills/rite-temper/reference/anti-patterns.md +30 -0
  473. package/pack/generated/pi/skills/rite-temper/reference/review-dimensions.md +66 -0
  474. package/pack/generated/pi/skills/rite-temper/reference/scope-modes.md +53 -0
  475. package/pack/generated/pi/skills/rite-temper/reference/significance.md +46 -0
  476. package/pack/generated/pi/skills/rite-temper/reference/strategy-template.md +90 -0
  477. package/pack/generated/pi/skills/rite-upgrade/SKILL.md +121 -0
  478. package/pack/generated/pi/skills/rite-vet/SKILL.md +193 -0
  479. package/pack/generated/pi/skills/rite-vet/reference/anti-patterns.md +43 -0
  480. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +202 -0
  481. package/pack/generated/pi/skills/rite-vet/reference/cross-model.md +19 -0
  482. package/pack/generated/pi/skills/rite-vet/reference/depth.md +59 -0
  483. package/pack/generated/pi/skills/rite-vet/reference/eng-lenses.md +48 -0
  484. package/pack/generated/pi/skills/rite-vet/reference/review-axes.md +201 -0
  485. package/pack/generated/pi/skills/rite-watch-pr/SKILL.md +85 -0
  486. package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +69 -0
  487. package/package.json +3 -2
  488. package/scripts/build-host-artifacts.sh +54 -4
  489. package/scripts/codex-generate.sh +6 -0
  490. package/scripts/pi-generate.sh +198 -0
@@ -0,0 +1,163 @@
1
+ package state
2
+
3
+ import (
4
+ "bytes"
5
+ "strings"
6
+ )
7
+
8
+ // Artifact budgets mirror workspace-artifact-schema.md "What each file owns".
9
+ // A line budget also bounds bytes at BudgetBytesPerLine per budgeted line so a
10
+ // few very long lines cannot evade it.
11
+ const (
12
+ BudgetBytesPerLine = 400
13
+ // BudgetBlockFactor is the material-overshoot threshold. At or above this
14
+ // multiple of a line or byte budget a gate blocks unless the artifact
15
+ // records a structural `Budget override:` line; smaller overshoots are
16
+ // reported by `orient` and stay advisory.
17
+ BudgetBlockFactor = 1.5
18
+ // MaxArtifactBytes is the per-artifact read cap. A larger artifact cannot be
19
+ // observed and blocks as file_too_large, so callers that explain a size
20
+ // problem quote the same number the observer enforced.
21
+ MaxArtifactBytes = maxArtifactBytes
22
+ // PacketMaxBytes is the serialized-packet ceiling from context-hygiene.md:
23
+ // "A serialized packet stays <= 64 KiB; larger means the scope is wrong".
24
+ // A non-canonical workspace-root file over it is unsanctioned placement.
25
+ PacketMaxBytes = 64 << 10
26
+ )
27
+
28
+ var artifactLineBudgets = map[string]int{
29
+ "README.md": 120,
30
+ "brief.md": 80,
31
+ "spec.md": 260,
32
+ "decision-coverage.md": 200,
33
+ "strategy.md": 180,
34
+ "architecture.md": 180,
35
+ "flows.md": 160,
36
+ "decisions.md": 200,
37
+ "assumptions.md": 160,
38
+ "questions.md": 180,
39
+ "plan.md": 220,
40
+ "tasks.md": 280,
41
+ "traceability.md": 220,
42
+ "eng-review.md": 240,
43
+ "test-plan.md": 260,
44
+ "state.md": 120,
45
+ "evidence.md": 280,
46
+ "browser-evidence.md": 220,
47
+ "drift.md": 160,
48
+ "touched-files.md": 160,
49
+ "design-brief.md": 160,
50
+ "handoff.md": 120,
51
+ "polish-report.md": 200,
52
+ "ship.md": 120,
53
+ "review.md": 240,
54
+ "seal.md": 200,
55
+ "ai-spec.md": 160,
56
+ }
57
+
58
+ // advisoryOnlyArtifacts are append-only proof ledgers: they scale with proof
59
+ // volume, not with planning surface, so their budget stays advisory in `orient`
60
+ // and never blocks a gate. touched-files.md keeps its own deterministic
61
+ // manifest limits.
62
+ var advisoryOnlyArtifacts = map[string]bool{
63
+ "evidence.md": true,
64
+ "browser-evidence.md": true,
65
+ "touched-files.md": true,
66
+ }
67
+
68
+ // ArtifactLineBudget returns the documented line budget for a canonical artifact.
69
+ func ArtifactLineBudget(name string) (int, bool) {
70
+ budget, ok := artifactLineBudgets[name]
71
+ return budget, ok
72
+ }
73
+
74
+ // sanctionedRootFiles are workspace-root files the schema places there without a
75
+ // line budget: conditional artifacts (`references.md`, `investigation-map.md`,
76
+ // `dogfood.md`) and the engine-owned parallel lease. Anything else in the root
77
+ // is unsanctioned placement — `packets/` and `history/` own by-reference
78
+ // packets and relocated narrative (workspace-artifact-schema.md "Required by
79
+ // phase").
80
+ var sanctionedRootFiles = map[string]bool{
81
+ "references.md": true,
82
+ "investigation-map.md": true,
83
+ "dogfood.md": true,
84
+ "parallel-lease.md": true,
85
+ }
86
+
87
+ // SanctionedRootFile reports whether name is a legitimate workspace-root file:
88
+ // a budgeted canonical artifact or a documented unbudgeted one.
89
+ func SanctionedRootFile(name string) bool {
90
+ if _, ok := artifactLineBudgets[name]; ok {
91
+ return true
92
+ }
93
+ return sanctionedRootFiles[name]
94
+ }
95
+
96
+ // ArtifactBudgetGateApplies reports whether the deterministic material-overshoot
97
+ // gate covers this artifact (canonical and not an advisory-only proof ledger).
98
+ func ArtifactBudgetGateApplies(name string) bool {
99
+ _, ok := artifactLineBudgets[name]
100
+ return ok && !advisoryOnlyArtifacts[name]
101
+ }
102
+
103
+ // ArtifactBudgetStatus is one canonical artifact measured against its budget.
104
+ type ArtifactBudgetStatus struct {
105
+ File string
106
+ Lines int
107
+ Bytes int64
108
+ LineBudget int
109
+ ByteBudget int64
110
+ Over bool
111
+ Material bool
112
+ Override bool
113
+ }
114
+
115
+ // ArtifactBudget measures raw against the named artifact's budget. ok is false
116
+ // for a non-canonical file name.
117
+ func ArtifactBudget(name string, raw []byte) (ArtifactBudgetStatus, bool) {
118
+ lineBudget, ok := artifactLineBudgets[name]
119
+ if !ok {
120
+ return ArtifactBudgetStatus{}, false
121
+ }
122
+ status := ArtifactBudgetStatus{
123
+ File: name,
124
+ Lines: CountLines(raw),
125
+ Bytes: int64(len(raw)),
126
+ LineBudget: lineBudget,
127
+ ByteBudget: int64(lineBudget) * BudgetBytesPerLine,
128
+ }
129
+ status.Over = status.Lines > lineBudget || status.Bytes > status.ByteBudget
130
+ status.Material = float64(status.Lines) >= float64(lineBudget)*BudgetBlockFactor ||
131
+ float64(status.Bytes) >= float64(status.ByteBudget)*BudgetBlockFactor
132
+ status.Override = HasBudgetOverride(raw)
133
+ return status, true
134
+ }
135
+
136
+ // CountLines counts newline-terminated lines plus a final unterminated line.
137
+ func CountLines(raw []byte) int {
138
+ if len(raw) == 0 {
139
+ return 0
140
+ }
141
+ lines := bytes.Count(raw, []byte{'\n'})
142
+ if raw[len(raw)-1] != '\n' {
143
+ lines++
144
+ }
145
+ return lines
146
+ }
147
+
148
+ // HasBudgetOverride reports a structural `Budget override:` line outside fenced
149
+ // code blocks; a fenced example never counts.
150
+ func HasBudgetOverride(raw []byte) bool {
151
+ fenced := false
152
+ for _, line := range strings.Split(string(raw), "\n") {
153
+ trimmed := strings.TrimSpace(line)
154
+ if strings.HasPrefix(trimmed, "```") {
155
+ fenced = !fenced
156
+ continue
157
+ }
158
+ if !fenced && strings.HasPrefix(trimmed, "Budget override:") {
159
+ return true
160
+ }
161
+ }
162
+ return false
163
+ }
@@ -0,0 +1,42 @@
1
+ package state
2
+
3
+ import (
4
+ "strings"
5
+ "testing"
6
+ )
7
+
8
+ func TestArtifactBudgetMeasuresLinesBytesAndMateriality(t *testing.T) {
9
+ if _, ok := ArtifactBudget("notes.json", []byte("x")); ok {
10
+ t.Fatal("non-canonical files have no budget")
11
+ }
12
+ within, ok := ArtifactBudget("tasks.md", []byte("# Tasks\n## SLICE-001 A\nDependencies: none\n"))
13
+ if !ok || within.Over || within.Material {
14
+ t.Fatalf("within=%+v", within)
15
+ }
16
+ over, _ := ArtifactBudget("tasks.md", []byte(strings.Repeat("x\n", 300)))
17
+ if !over.Over || over.Material {
18
+ t.Fatalf("300 lines against a 280-line budget must be over but not material: %+v", over)
19
+ }
20
+ material, _ := ArtifactBudget("tasks.md", []byte(strings.Repeat("x\n", 500)))
21
+ if !material.Material {
22
+ t.Fatalf("500 lines must be material: %+v", material)
23
+ }
24
+ longLine, _ := ArtifactBudget("state.md", []byte(strings.Repeat("y", 100_000)+"\n"))
25
+ if !longLine.Material || longLine.Lines != 1 {
26
+ t.Fatalf("one very long line must trip the byte budget: %+v", longLine)
27
+ }
28
+ }
29
+
30
+ func TestHasBudgetOverrideIgnoresFencedExamples(t *testing.T) {
31
+ if HasBudgetOverride([]byte("plain text\nBudget override: relocation pending\n")) != true {
32
+ t.Fatal("structural override line must be recognized")
33
+ }
34
+ fenced := "See the schema:\n\n```markdown\nBudget override: <reason>\n```\n\nNothing recorded.\n"
35
+ if HasBudgetOverride([]byte(fenced)) {
36
+ t.Fatal("a fenced example is not an override")
37
+ }
38
+ indented := " Budget override: table form is required\n"
39
+ if !HasBudgetOverride([]byte(indented)) {
40
+ t.Fatal("leading whitespace must not hide a real override line")
41
+ }
42
+ }
@@ -12,15 +12,19 @@ import (
12
12
  // remain local to the cursor package; normalizeCursorKey still accepts legacy
13
13
  // presentation aliases at the text boundary.
14
14
  const (
15
- CursorPhase = "phase"
16
- CursorStatus = "status"
17
- CursorNextAction = "next_action"
18
- CursorQuestionID = "question_id"
19
- CursorActiveSlice = "active_slice"
20
- CursorAFKSlicesRemaining = "afk_slices_remaining"
21
- CursorReturnPhase = "return_phase"
22
- CursorReturnNextAction = "return_next_action"
23
- CursorSchema = "schema"
15
+ CursorPhase = "phase"
16
+ CursorStatus = "status"
17
+ CursorNextAction = "next_action"
18
+ CursorQuestionID = "question_id"
19
+ CursorActiveSlice = "active_slice"
20
+ CursorAFKSlicesRemaining = "afk_slices_remaining"
21
+ CursorSequenceParent = "sequence_parent"
22
+ CursorSequencePosition = "sequence_position"
23
+ CursorSequenceWorkspacesRemain = "sequence_workspaces_remaining"
24
+ CursorSequenceRole = "sequence_role"
25
+ CursorReturnPhase = "return_phase"
26
+ CursorReturnNextAction = "return_next_action"
27
+ CursorSchema = "schema"
24
28
  )
25
29
 
26
30
  var cursorKeyAliases = map[string]string{
@@ -273,7 +277,9 @@ func isMigratableCursorKey(key string) bool {
273
277
  func canonicalCursorSpelling(key string) (string, bool) {
274
278
  normalized := normalizeCursorKey(key)
275
279
  canonicals := []string{CursorPhase, CursorStatus, CursorNextAction, CursorQuestionID,
276
- CursorActiveSlice, CursorAFKSlicesRemaining, CursorReturnPhase,
280
+ CursorActiveSlice, CursorAFKSlicesRemaining, CursorSequenceParent,
281
+ CursorSequencePosition, CursorSequenceWorkspacesRemain, CursorSequenceRole,
282
+ CursorReturnPhase,
277
283
  CursorReturnNextAction, CursorSchema}
278
284
  for _, canonical := range canonicals {
279
285
  if normalized == normalizeCursorKey(canonical) {
@@ -8,6 +8,7 @@ import (
8
8
  "os"
9
9
  "path"
10
10
  "path/filepath"
11
+ "sort"
11
12
  "strings"
12
13
 
13
14
  "github.com/devrites/devrites/internal/devritespaths"
@@ -90,9 +91,22 @@ func (f ArtifactFact) Diagnostic() (ArtifactDiagnostic, bool) {
90
91
  }
91
92
 
92
93
  type WorkspaceObservation struct {
93
- slug string
94
- facts []ArtifactFact
95
- index map[ArtifactPath]int
94
+ slug string
95
+ facts []ArtifactFact
96
+ index map[ArtifactPath]int
97
+ rootFiles []RootFile
98
+ }
99
+
100
+ // RootFile is one regular file directly inside the workspace root.
101
+ type RootFile struct {
102
+ Name string
103
+ Bytes int64
104
+ }
105
+
106
+ // RootFiles lists the workspace root's regular files so a consumer can judge
107
+ // placement without acquiring the directory itself.
108
+ func (o *WorkspaceObservation) RootFiles() []RootFile {
109
+ return append([]RootFile(nil), o.rootFiles...)
96
110
  }
97
111
 
98
112
  func (o *WorkspaceObservation) Slug() string { return o.slug }
@@ -296,7 +310,39 @@ func observeWorkspace(root, slug string, callback observationCallback) (*Workspa
296
310
  for i, fact := range facts {
297
311
  index[fact.path] = i
298
312
  }
299
- return &WorkspaceObservation{slug: slug, facts: facts, index: index}, nil
313
+ rootFiles, err := readRootFiles(roots.workspace)
314
+ if err != nil {
315
+ return nil, ObservationWorkspaceInvalid
316
+ }
317
+ return &WorkspaceObservation{slug: slug, facts: facts, index: index, rootFiles: rootFiles}, nil
318
+ }
319
+
320
+ // readRootFiles lists the workspace directory's regular entries through the
321
+ // already-verified root handle, so the list describes the same snapshot as the
322
+ // artifact facts.
323
+ func readRootFiles(root *os.Root) ([]RootFile, error) {
324
+ dir, err := root.Open(".")
325
+ if err != nil {
326
+ return nil, err
327
+ }
328
+ defer func() { _ = dir.Close() }()
329
+ entries, err := dir.ReadDir(-1)
330
+ if err != nil {
331
+ return nil, err
332
+ }
333
+ files := make([]RootFile, 0, len(entries))
334
+ for _, entry := range entries {
335
+ if !entry.Type().IsRegular() {
336
+ continue
337
+ }
338
+ info, err := entry.Info()
339
+ if err != nil {
340
+ return nil, err
341
+ }
342
+ files = append(files, RootFile{Name: entry.Name(), Bytes: info.Size()})
343
+ }
344
+ sort.Slice(files, func(i, j int) bool { return files[i].Name < files[j].Name })
345
+ return files, nil
300
346
  }
301
347
 
302
348
  func observationWorkspaceOverrideValid(root, slug string) bool {
@@ -7,17 +7,21 @@ import (
7
7
 
8
8
  // Report is the computed completeness status of a feature at its current phase.
9
9
  type Report struct {
10
- Slug string
11
- Phase Phase
12
- Status string
13
- NextAction string
14
- PrinciplesPresent bool
15
- Required map[Section]bool
16
- Missing []Section // required-but-empty sections, in policy order
17
- RequiredFiles map[string]bool
18
- MissingFiles []string // required-but-empty workspace files, in lifecycle order
19
- present map[Section]bool
20
- diagnostics []ArtifactDiagnostic
10
+ Slug string
11
+ Phase Phase
12
+ Status string
13
+ NextAction string
14
+ SequenceParent string
15
+ SequencePosition string
16
+ SequenceWorkspacesRemaining string
17
+ SequenceRole string
18
+ PrinciplesPresent bool
19
+ Required map[Section]bool
20
+ Missing []Section // required-but-empty sections, in policy order
21
+ RequiredFiles map[string]bool
22
+ MissingFiles []string // required-but-empty workspace files, in lifecycle order
23
+ present map[Section]bool
24
+ diagnostics []ArtifactDiagnostic
21
25
  }
22
26
 
23
27
  // Status computes phase-relative completeness from one retained workspace observation.
@@ -38,13 +42,13 @@ func statusWithCallback(root, slug string, callback observationCallback) (*Repor
38
42
  return newObservationReport(observation, phase, policy), nil
39
43
  }
40
44
 
41
- func observationCursorFields(observation *WorkspaceObservation) (status, nextAction string, principlesPresent bool) {
45
+ func observationCursorFields(observation *WorkspaceObservation) (status, nextAction, sequenceParent, sequencePosition, sequenceRemaining, sequenceRole string, principlesPresent bool) {
42
46
  if fact, ok := observation.Fact(".devrites/principles.md"); ok && fact.State() == ArtifactPresent {
43
47
  principlesPresent = true
44
48
  }
45
49
  fact, ok := observation.Fact(LedgerFile)
46
50
  if !ok || fact.State() != ArtifactPresent {
47
- return "", "", principlesPresent
51
+ return "", "", "", "", "", "", principlesPresent
48
52
  }
49
53
  lines := strings.Split(string(fact.Bytes()), "\n")
50
54
  if value, ok := CursorField(lines, CursorStatus); ok {
@@ -53,7 +57,11 @@ func observationCursorFields(observation *WorkspaceObservation) (status, nextAct
53
57
  if value, ok := CursorField(lines, CursorNextAction); ok {
54
58
  nextAction = value
55
59
  }
56
- return status, nextAction, principlesPresent
60
+ sequenceParent, _ = CursorField(lines, CursorSequenceParent)
61
+ sequencePosition, _ = CursorField(lines, CursorSequencePosition)
62
+ sequenceRemaining, _ = CursorField(lines, CursorSequenceWorkspacesRemain)
63
+ sequenceRole, _ = CursorField(lines, CursorSequenceRole)
64
+ return status, nextAction, sequenceParent, sequencePosition, sequenceRemaining, sequenceRole, principlesPresent
57
65
  }
58
66
 
59
67
  func newObservationReport(observation *WorkspaceObservation, phase Phase, policy PhasePolicy) *Report {
@@ -65,19 +73,23 @@ func newObservationReport(observation *WorkspaceObservation, phase Phase, policy
65
73
  for i, artifact := range missingArtifacts {
66
74
  missingFiles[i] = string(artifact)
67
75
  }
68
- status, nextAction, principlesPresent := observationCursorFields(observation)
76
+ status, nextAction, sequenceParent, sequencePosition, sequenceRemaining, sequenceRole, principlesPresent := observationCursorFields(observation)
69
77
  return &Report{
70
- Slug: observation.Slug(),
71
- Phase: phase,
72
- Status: status,
73
- NextAction: nextAction,
74
- PrinciplesPresent: principlesPresent,
75
- Required: required,
76
- Missing: missingObservationSections(present, policy.RequiredSections),
77
- RequiredFiles: requiredFiles,
78
- MissingFiles: missingFiles,
79
- present: present,
80
- diagnostics: diagnostics,
78
+ Slug: observation.Slug(),
79
+ Phase: phase,
80
+ Status: status,
81
+ NextAction: nextAction,
82
+ SequenceParent: sequenceParent,
83
+ SequencePosition: sequencePosition,
84
+ SequenceWorkspacesRemaining: sequenceRemaining,
85
+ SequenceRole: sequenceRole,
86
+ PrinciplesPresent: principlesPresent,
87
+ Required: required,
88
+ Missing: missingObservationSections(present, policy.RequiredSections),
89
+ RequiredFiles: requiredFiles,
90
+ MissingFiles: missingFiles,
91
+ present: present,
92
+ diagnostics: diagnostics,
81
93
  }
82
94
  }
83
95
 
@@ -23,11 +23,34 @@ type TaskGraphResult struct {
23
23
 
24
24
  var (
25
25
  sliceHeaderRE = regexp.MustCompile(`(?m)^##\s+(SLICE-\d+)\b`)
26
+ anyH2HeaderRE = regexp.MustCompile(`(?m)^##\s`)
26
27
  dependenciesRE = regexp.MustCompile(`(?m)^Dependencies:\s*(.+)\s*$`)
27
28
  dependsOnRE = regexp.MustCompile(`(?m)^depends_on:\s*(.+)\s*$`)
28
29
  sliceIDValidRE = regexp.MustCompile(`^SLICE-\d+$`)
29
30
  )
30
31
 
32
+ // ValidSliceID reports whether id has the canonical SLICE-### shape.
33
+ func ValidSliceID(id string) bool { return sliceIDValidRE.MatchString(id) }
34
+
35
+ // ExtractTaskSlice returns the first `## SLICE-###` section of tasks.md whose ID
36
+ // equals id, from its heading up to the next level-2 heading. It lets a phase read
37
+ // one slice instead of the whole file.
38
+ func ExtractTaskSlice(tasksMarkdown []byte, id string) (string, bool) {
39
+ text := string(tasksMarkdown)
40
+ for _, match := range sliceHeaderRE.FindAllStringSubmatchIndex(text, -1) {
41
+ if text[match[2]:match[3]] != id {
42
+ continue
43
+ }
44
+ rest := text[match[1]:]
45
+ end := len(text)
46
+ if next := anyH2HeaderRE.FindStringIndex(rest); next != nil {
47
+ end = match[1] + next[0]
48
+ }
49
+ return strings.TrimRight(text[match[0]:end], "\n") + "\n", true
50
+ }
51
+ return "", false
52
+ }
53
+
31
54
  // ParseTaskGraph reads tasks.md content and validates the slice dependency DAG.
32
55
  func ParseTaskGraph(tasksMarkdown []byte) TaskGraphResult {
33
56
  text := string(tasksMarkdown)
package/engine/main.go CHANGED
@@ -30,9 +30,11 @@ Usage:
30
30
  devrites-engine check skill-trust <path> Scan one skill/agent Markdown for trust violations
31
31
  devrites-engine observe summary <slug> Emit sanitized JSON workspace summary
32
32
  devrites-engine orient <slug> Alias for observe summary
33
+ devrites-engine observe slice <slug> <SLICE-ID> Print one SLICE-### section of tasks.md
33
34
  devrites-engine check indexes [--root <dir>] Report manifest and code-index presence as JSON
34
35
  devrites-engine parallel <subcommand> Deterministic parallel worktree lease/create/integrate/cleanup
35
36
  devrites-engine state resolve <qid> "<ans>" Resolve an open question and update state atomically
37
+ devrites-engine state merge-manifest <slug> [pred...] Fold the recorded predecessor chain's manifests into the release candidate manifest
36
38
  devrites-engine state close <slug> Archive a shipped feature and clear ACTIVE
37
39
  devrites-engine migrate <slug> [--dry-run] Normalize a pre-v5 workspace to the current schema
38
40
  devrites-engine secret-scan [--staged] [--stdin] [slug] Scan exact staged blobs, stdin, or touched files; HIGH blocks
@@ -144,18 +146,24 @@ func cmdCandidate(root string, args []string, stdout, stderr io.Writer) int {
144
146
  fmt.Fprintf(stderr, "candidate: BLOCKED: %v\n", err)
145
147
  return exitBlocked
146
148
  }
149
+ if err := lib.VerifyReleaseUnion(root, args[0]); err != nil {
150
+ fmt.Fprintf(stderr, "candidate: BLOCKED: %v\n", err)
151
+ return exitBlocked
152
+ }
147
153
  fmt.Fprintf(stdout, "candidate-sha256: %s\ncandidate-files: %d\n", digest, files)
148
154
  return exitOK
149
155
  }
150
156
 
151
157
  func cmdState(root string, args []string, stdout, stderr io.Writer) int {
152
158
  if len(args) == 0 {
153
- fmt.Fprintln(stderr, "usage: devrites-engine state <resolve|close> ...")
159
+ fmt.Fprintln(stderr, "usage: devrites-engine state <resolve|merge-manifest|close> ...")
154
160
  return exitUsage
155
161
  }
156
162
  switch args[0] {
157
163
  case "resolve":
158
164
  return lib.Resolve(root, args[1:], stdout, stderr)
165
+ case "merge-manifest":
166
+ return lib.RunMergeManifest(root, args[1:], stdout, stderr)
159
167
  case "close":
160
168
  return lib.CloseOut(root, args[1:], stdout, stderr)
161
169
  default:
@@ -192,6 +200,10 @@ func cmdGate(root string, kind gate.Kind, args []string, stdout, stderr io.Write
192
200
  return exitBlocked
193
201
  }
194
202
  if kind == gate.Seal {
203
+ if err := lib.VerifyReleaseUnion(root, args[0]); err != nil {
204
+ fmt.Fprintf(stdout, "release-union: BLOCKED: %v\nreason: %s\n", err, gate.ResultReasonID(kind, true))
205
+ return exitBlocked
206
+ }
195
207
  code := lib.EvidenceFresh(root, []string{args[0]}, stdout, stderr)
196
208
  if code == exitUsage {
197
209
  return exitUsage
@@ -223,22 +235,29 @@ func cmdSkillTrust(args []string, stdout, stderr io.Writer) int {
223
235
 
224
236
  func cmdObserve(root string, args []string, stdout, stderr io.Writer) int {
225
237
  if len(args) == 0 {
226
- fmt.Fprintln(stderr, "usage: devrites-engine observe summary <slug>")
227
- return exitUsage
228
- }
229
- if args[0] != "summary" {
230
- fmt.Fprintf(stderr, "devrites: unknown observe command %q\n", args[0])
238
+ fmt.Fprintln(stderr, "usage: devrites-engine observe summary <slug> | observe slice <slug> <SLICE-ID>")
231
239
  return exitUsage
232
240
  }
233
- slug, code, err := lib.ActiveSlug(root, args[1:])
234
- if err != nil {
235
- fmt.Fprintf(stderr, "observe: %v\n", err)
236
- if code == 0 {
237
- code = exitUsage
241
+ switch args[0] {
242
+ case "summary":
243
+ slug, code, err := lib.ActiveSlug(root, args[1:])
244
+ if err != nil {
245
+ fmt.Fprintf(stderr, "observe: %v\n", err)
246
+ if code == 0 {
247
+ code = exitUsage
248
+ }
249
+ return code
238
250
  }
239
- return code
251
+ return lib.RunObserveSummary(root, slug, stdout, stderr)
252
+ case "slice":
253
+ if len(args) != 3 {
254
+ fmt.Fprintln(stderr, "usage: devrites-engine observe slice <slug> <SLICE-ID>")
255
+ return exitUsage
256
+ }
257
+ return lib.RunObserveSlice(root, args[1], args[2], stdout, stderr)
240
258
  }
241
- return lib.RunObserveSummary(root, slug, stdout, stderr)
259
+ fmt.Fprintf(stderr, "devrites: unknown observe command %q\n", args[0])
260
+ return exitUsage
242
261
  }
243
262
 
244
263
  func cmdOrient(root string, args []string, stdout, stderr io.Writer) int {
@@ -23,6 +23,7 @@ func TestRootModeForCoversReadAndWriteSurfaces(t *testing.T) {
23
23
  {name: "check path-disjoint", command: "check", args: []string{"path-disjoint"}, want: rootUnused},
24
24
  {name: "check skill-trust", command: "check", args: []string{"skill-trust"}, want: rootUnused},
25
25
  {name: "observe summary", command: "observe", args: []string{"summary"}, want: rootStrictUsage},
26
+ {name: "observe slice", command: "observe", args: []string{"slice"}, want: rootStrictUsage},
26
27
  {name: "orient", command: "orient", want: rootStrictUsage},
27
28
  {name: "check indexes", command: "check", args: []string{"indexes"}, want: rootLenient},
28
29
  {name: "resolve", command: "state", args: []string{"resolve"}, want: rootStrict},
@@ -115,6 +116,7 @@ func TestNestedCommandFamiliesAreRoutedAndAdvertised(t *testing.T) {
115
116
  {"check", "indexes"},
116
117
  {"orient", "feature"},
117
118
  {"observe", "summary", "feature"},
119
+ {"observe", "slice", "feature", "SLICE-001"},
118
120
  {"state", "resolve"},
119
121
  {"state", "close"},
120
122
  } {
@@ -145,7 +147,7 @@ func TestNestedCommandFamilyUsageListsOnlyRetainedCommands(t *testing.T) {
145
147
  removed []string
146
148
  }{
147
149
  {args: []string{"check"}, want: "check <candidate|readiness|seal|path-disjoint|task-graph|skill-trust|indexes>", removed: []string{"spec"}},
148
- {args: []string{"state"}, want: "state <resolve|close>", removed: []string{"clarify", "tick-afk", "recovery"}},
150
+ {args: []string{"state"}, want: "state <resolve|merge-manifest|close>", removed: []string{"clarify", "tick-afk", "recovery"}},
149
151
  } {
150
152
  t.Run(test.args[0], func(t *testing.T) {
151
153
  var stdout, stderr bytes.Buffer
package/install.sh CHANGED
@@ -245,9 +245,12 @@ dr_acquire_engine "$SELF_DIR" install "$DEVRITES_REPO" || { echo "error: could n
245
245
  ENGINE="$DR_ENGINE_PATH"
246
246
  PAYLOAD="${DEVRITES_HOST_ARTIFACT_DIR:-$SELF_DIR/pack/generated}"
247
247
  if [ ! -d "$PAYLOAD/claude/skills" ] || [ ! -d "$PAYLOAD/codex/skills" ] \
248
+ || [ ! -d "$PAYLOAD/pi/skills" ] || [ ! -d "$PAYLOAD/pi/agents" ] \
249
+ || [ ! -d "$PAYLOAD/pi/prompts" ] \
248
250
  || [ ! -f "$PAYLOAD/claude/skills/devrites-lib/reference/standards/agents.md" ] \
249
251
  || [ ! -f "$PAYLOAD/codex/skills/devrites-lib/reference/standards/agents.md" ] \
250
- || [ ! -f "$PAYLOAD/codex/config.toml" ]; then
252
+ || [ ! -f "$PAYLOAD/pi/skills/devrites-lib/reference/standards/agents.md" ] \
253
+ || [ ! -f "$PAYLOAD/codex/config.toml" ] || [ ! -f "$PAYLOAD/pi/AGENTS.md" ]; then
251
254
  BUILDER="$SELF_DIR/scripts/build-host-artifacts.sh"
252
255
  [ -f "$BUILDER" ] || { echo "error: generated install payload missing at $PAYLOAD and builder missing at $BUILDER" >&2; exit 1; }
253
256
  DEVRITES_HOST_ARTIFACT_DIR="$PAYLOAD" bash "$BUILDER" >/dev/null || { echo "error: could not generate install payload at $PAYLOAD" >&2; exit 1; }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: devrites-code-reviewer
3
- description: Reviews one DevRites feature diff for /rite-review and /rite-seal with fresh context. Checks tests first, then correctness, readability, architecture, maintainability, and standards. Finds defects instead of rubber-stamping the change.
3
+ description: Reviews a full DevRites feature diff once for /rite-review and /rite-seal. Checks tests, correctness, readability, architecture, maintainability, and standards; returns every supported finding.
4
4
  tools: Read, Grep, Glob, Bash
5
5
  permissionMode: plan
6
6
  ---
@@ -40,9 +40,11 @@ From `spec.md`'s applicability map, load only triggered `repository-topology.md`
40
40
 
41
41
  You receive a feature slug or workspace path (`.devrites/work/<slug>/`) and the
42
42
  diff scope. Read `spec.md` for the objective and acceptance criteria, then
43
- `tasks.md`, `decisions.md`, `touched-files.md`, and `.devrites/principles.md` if
44
- present. The principles are binding project invariants. Run `git diff` for the
45
- feature scope and read the touched files.
43
+ `decisions.md` and `.devrites/principles.md` if present. Read `tasks.md` and
44
+ `touched-files.md` by the schema's bounded rule: when `devrites-engine orient <slug>`
45
+ reports one over budget, index it (`grep -n`) and load only entries naming this
46
+ candidate's AC/slice IDs. The principles are binding project invariants. Run `git diff`
47
+ for the feature scope and read the touched files.
46
48
 
47
49
  ## Review (feature scope only)
48
50
 
@@ -108,12 +110,13 @@ not as a blocker on this diff.
108
110
 
109
111
  ## Rules
110
112
 
111
- - Stay in feature scope (touched files + diff). Out-of-scope problems → FYI follow-ups.
113
+ - Out-of-scope problems → FYI.
112
114
  - Do **not** edit code. Return findings only.
113
115
  - Read surrounding source (call sites, existing guards, nearest consumer) before assigning severity; don't rate impact from the diff hunk alone.
114
116
  - Label each finding **Critical / Important / Suggestion / Nit / FYI** with `file:line`
115
117
  and a concrete fix. No praise padding.
116
- - If you can't verify something, say so explicitly rather than assuming it's fine.
118
+ - Return every supported in-scope finding from the full inspected diff in this one pass, not only the first. Repeat canonical `Finding:`/`Basis:` rows; unverified → gap. Complete means evidenced coverage, not guaranteed defect-free.
119
+ - In a recheck (the packet names open findings and a correction diff), your verdict covers those findings, the changed hunks, and their dependents. Anything else on hunks unchanged since your previous pass goes under `Late:` with severity and `file:line`; it is recorded for `/rite-review`, not verdict-bearing.
117
120
  - **Non-trigger (UI anti-slop):** if the diff touches no rendered UI surface, do not
118
121
  fire UI anti-slop (Inter, lavender, gradient, emoji headers). Code anti-slop still
119
122
  applies. The UI catalog is `devrites-frontend-reviewer`.
@@ -59,6 +59,12 @@ mirror.
59
59
 
60
60
  - Don't edit anything. Return findings only.
61
61
  - Be concrete: the exact scenario that breaks it, with `file:line` where relevant.
62
+ - Tag every `valid & actionable` finding `kind: contract` (the claim's guarantee is
63
+ wrong or unpinned) or `kind: mechanism` (the guarantee stands; a named test would
64
+ catch the wrong implementation — propose that case).
65
+ - When the packet names prior fingerprints and a correction diff, your verdict covers
66
+ those and the dependents of each changed clause. Other observations on unchanged
67
+ text go under `Late:` with severity and site; they are recorded, not verdict-bearing.
62
68
 
63
69
  ## Output
64
70
 
@@ -107,7 +107,13 @@ criterion, slice, or proof.
107
107
  pad the report with praise. In a recheck, also mark each finding
108
108
  `new_failure_mode` or name the already-pinned clause/fingerprint it refines —
109
109
  the packet lists prior repairs; the mark makes alias-detection and
110
- `convergence_pressure` eligibility mechanical.
110
+ `convergence_pressure` eligibility mechanical. Tag every Critical/Important
111
+ `kind: contract` (an implementer could build it differently and still pass the
112
+ planned tests) or `kind: mechanism` (a named test can discriminate the wrong
113
+ implementation; propose that case as the fix, not new plan prose).
114
+ - In a recheck, your verdict covers the listed fingerprints, the correction diff, and
115
+ the dependents of each changed clause. Anything else you notice on unchanged text
116
+ goes under `Late:` with severity and site; it is recorded, not verdict-bearing.
111
117
  - When a dimension has no issue, say "strong: <why>" instead of inventing a
112
118
  finding.
113
119
  - If a claim cannot be verified, such as blast radius without an index, say so and