devrites 5.10.1 → 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 (296) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +24 -10
  3. package/bin/devrites.mjs +2 -0
  4. package/docs/cli.md +4 -1
  5. package/docs/command-map.md +7 -5
  6. package/docs/engine/commands.md +7 -5
  7. package/docs/orchestration.md +5 -2
  8. package/docs/skills.md +10 -4
  9. package/docs/usage.md +3 -1
  10. package/engine/commands.go +3 -0
  11. package/engine/help.go +190 -0
  12. package/engine/help_test.go +98 -0
  13. package/engine/internal/devritespaths/paths.go +2 -0
  14. package/engine/internal/hostpack/hostpack.go +39 -5
  15. package/engine/internal/hostpack/hostpack_test.go +27 -13
  16. package/engine/internal/install/apply.go +17 -4
  17. package/engine/internal/install/install.go +9 -2
  18. package/engine/internal/install/install_test.go +15 -2
  19. package/engine/internal/install/preflight.go +8 -2
  20. package/engine/internal/install/update.go +1 -1
  21. package/engine/internal/parallel/cli.go +90 -32
  22. package/engine/internal/parallel/cli_test.go +32 -0
  23. package/engine/main.go +15 -8
  24. package/engine/root_routing_test.go +4 -0
  25. package/install.sh +4 -1
  26. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  27. package/pack/.claude/skills/rite-autocomplete/SKILL.md +10 -5
  28. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +12 -7
  29. package/pack/.claude/skills/rite-build/SKILL.md +3 -1
  30. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +4 -3
  31. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +3 -1
  32. package/pack/.claude/skills/rite-define/reference/plan-template.md +1 -1
  33. package/pack/generated/README.md +4 -2
  34. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  35. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +10 -5
  36. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +12 -7
  37. package/pack/generated/claude/skills/rite-build/SKILL.md +3 -1
  38. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +4 -3
  39. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +3 -1
  40. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +1 -1
  41. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  42. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +10 -5
  43. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +12 -7
  44. package/pack/generated/codex/skills/rite-build/SKILL.md +3 -1
  45. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +4 -3
  46. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +3 -1
  47. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +1 -1
  48. package/pack/generated/devin/AGENTS.md +23 -0
  49. package/pack/generated/devin/agents/devrites-code-reviewer.md +145 -0
  50. package/pack/generated/devin/agents/devrites-devex-reviewer.md +126 -0
  51. package/pack/generated/devin/agents/devrites-doubt-reviewer.md +91 -0
  52. package/pack/generated/devin/agents/devrites-evidence-scout.md +77 -0
  53. package/pack/generated/devin/agents/devrites-frontend-reviewer.md +119 -0
  54. package/pack/generated/devin/agents/devrites-performance-reviewer.md +117 -0
  55. package/pack/generated/devin/agents/devrites-plan-drafter.md +102 -0
  56. package/pack/generated/devin/agents/devrites-plan-reviewer.md +144 -0
  57. package/pack/generated/devin/agents/devrites-proof-runner.md +76 -0
  58. package/pack/generated/devin/agents/devrites-retrospector.md +64 -0
  59. package/pack/generated/devin/agents/devrites-security-auditor.md +112 -0
  60. package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +97 -0
  61. package/pack/generated/devin/agents/devrites-slice-wright.md +219 -0
  62. package/pack/generated/devin/agents/devrites-spec-reviewer.md +99 -0
  63. package/pack/generated/devin/agents/devrites-strategy-reviewer.md +102 -0
  64. package/pack/generated/devin/agents/devrites-test-analyst.md +97 -0
  65. package/pack/generated/devin/agents/devrites-upgrade-planner.md +91 -0
  66. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +64 -0
  67. package/pack/generated/devin/skills/devrites-audit/SKILL.md +51 -0
  68. package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +77 -0
  69. package/pack/generated/devin/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
  70. package/pack/generated/devin/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
  71. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +97 -0
  72. package/pack/generated/devin/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
  73. package/pack/generated/devin/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
  74. package/pack/generated/devin/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
  75. package/pack/generated/devin/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  76. package/pack/generated/devin/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
  77. package/pack/generated/devin/skills/devrites-debug-recovery/reference/trace.md +25 -0
  78. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +80 -0
  79. package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +87 -0
  80. package/pack/generated/devin/skills/devrites-frontend-craft/reference/craft.md +63 -0
  81. package/pack/generated/devin/skills/devrites-frontend-craft/reference/design-references.md +116 -0
  82. package/pack/generated/devin/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
  83. package/pack/generated/devin/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
  84. package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
  85. package/pack/generated/devin/skills/devrites-frontend-craft/reference/shape.md +56 -0
  86. package/pack/generated/devin/skills/devrites-interview/SKILL.md +103 -0
  87. package/pack/generated/devin/skills/devrites-lib/SKILL.md +57 -0
  88. package/pack/generated/devin/skills/devrites-lib/reference/candidate-integrity.md +42 -0
  89. package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +64 -0
  90. package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
  91. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +73 -0
  92. package/pack/generated/devin/skills/devrites-lib/reference/reply-contract.md +88 -0
  93. package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +60 -0
  94. package/pack/generated/devin/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
  95. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +415 -0
  96. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +99 -0
  97. package/pack/generated/devin/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
  98. package/pack/generated/devin/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
  99. package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
  100. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  101. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +108 -0
  102. package/pack/generated/devin/skills/devrites-lib/reference/standards/coding-style.md +48 -0
  103. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +109 -0
  104. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +167 -0
  105. package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
  106. package/pack/generated/devin/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
  107. package/pack/generated/devin/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
  108. package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +31 -0
  109. package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
  110. package/pack/generated/devin/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
  111. package/pack/generated/devin/skills/devrites-lib/reference/standards/documentation.md +43 -0
  112. package/pack/generated/devin/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
  113. package/pack/generated/devin/skills/devrites-lib/reference/standards/elicitation.md +85 -0
  114. package/pack/generated/devin/skills/devrites-lib/reference/standards/error-handling.md +47 -0
  115. package/pack/generated/devin/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
  116. package/pack/generated/devin/skills/devrites-lib/reference/standards/hooks.md +25 -0
  117. package/pack/generated/devin/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
  118. package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
  119. package/pack/generated/devin/skills/devrites-lib/reference/standards/observability.md +88 -0
  120. package/pack/generated/devin/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
  121. package/pack/generated/devin/skills/devrites-lib/reference/standards/patterns.md +68 -0
  122. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +51 -0
  123. package/pack/generated/devin/skills/devrites-lib/reference/standards/principles.md +42 -0
  124. package/pack/generated/devin/skills/devrites-lib/reference/standards/prose-style.md +123 -0
  125. package/pack/generated/devin/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
  126. package/pack/generated/devin/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
  127. package/pack/generated/devin/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
  128. package/pack/generated/devin/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
  129. package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +202 -0
  130. package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
  131. package/pack/generated/devin/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
  132. package/pack/generated/devin/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
  133. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +212 -0
  134. package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +92 -0
  135. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
  136. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
  137. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
  138. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
  139. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
  140. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
  141. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
  142. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
  143. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
  144. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
  145. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +267 -0
  146. package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +74 -0
  147. package/pack/generated/devin/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
  148. package/pack/generated/devin/skills/devrites-prose-craft/reference/examples.md +131 -0
  149. package/pack/generated/devin/skills/devrites-prose-craft/reference/structures.md +196 -0
  150. package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +53 -0
  151. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +135 -0
  152. package/pack/generated/devin/skills/devrites-ux-shape/reference/brief-template.md +108 -0
  153. package/pack/generated/devin/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
  154. package/pack/generated/devin/skills/rite/SKILL.md +148 -0
  155. package/pack/generated/devin/skills/rite/reference/menu.md +48 -0
  156. package/pack/generated/devin/skills/rite-adopt/SKILL.md +51 -0
  157. package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +19 -0
  158. package/pack/generated/devin/skills/rite-adopt/reference/anti-patterns.md +19 -0
  159. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +142 -0
  160. package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +43 -0
  161. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +151 -0
  162. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +97 -0
  163. package/pack/generated/devin/skills/rite-build/SKILL.md +102 -0
  164. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +148 -0
  165. package/pack/generated/devin/skills/rite-build/reference/anti-patterns.md +27 -0
  166. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +120 -0
  167. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +56 -0
  168. package/pack/generated/devin/skills/rite-build/reference/frontend-trigger.md +39 -0
  169. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +51 -0
  170. package/pack/generated/devin/skills/rite-build/reference/output.md +33 -0
  171. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +214 -0
  172. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +89 -0
  173. package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +84 -0
  174. package/pack/generated/devin/skills/rite-build/reference/tdd.md +27 -0
  175. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +96 -0
  176. package/pack/generated/devin/skills/rite-clarify/SKILL.md +98 -0
  177. package/pack/generated/devin/skills/rite-clarify/reference/anti-patterns.md +24 -0
  178. package/pack/generated/devin/skills/rite-clarify/reference/decision-coverage.md +55 -0
  179. package/pack/generated/devin/skills/rite-converge/SKILL.md +144 -0
  180. package/pack/generated/devin/skills/rite-converge/reference/anti-patterns.md +35 -0
  181. package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +65 -0
  182. package/pack/generated/devin/skills/rite-customize/SKILL.md +60 -0
  183. package/pack/generated/devin/skills/rite-define/SKILL.md +168 -0
  184. package/pack/generated/devin/skills/rite-define/reference/anti-patterns.md +26 -0
  185. package/pack/generated/devin/skills/rite-define/reference/gates.md +159 -0
  186. package/pack/generated/devin/skills/rite-define/reference/plan-template.md +149 -0
  187. package/pack/generated/devin/skills/rite-doctor/SKILL.md +68 -0
  188. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +55 -0
  189. package/pack/generated/devin/skills/rite-explain/SKILL.md +152 -0
  190. package/pack/generated/devin/skills/rite-explain/reference/intake.md +89 -0
  191. package/pack/generated/devin/skills/rite-frame/SKILL.md +114 -0
  192. package/pack/generated/devin/skills/rite-frame/reference/failure-modes.md +66 -0
  193. package/pack/generated/devin/skills/rite-handoff/SKILL.md +97 -0
  194. package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +44 -0
  195. package/pack/generated/devin/skills/rite-learn/SKILL.md +72 -0
  196. package/pack/generated/devin/skills/rite-plan/SKILL.md +185 -0
  197. package/pack/generated/devin/skills/rite-plan/reference/anti-patterns.md +34 -0
  198. package/pack/generated/devin/skills/rite-plan/reference/dependency-graph.md +48 -0
  199. package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +105 -0
  200. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +168 -0
  201. package/pack/generated/devin/skills/rite-plan/reference/task-breakdown.md +42 -0
  202. package/pack/generated/devin/skills/rite-polish/SKILL.md +105 -0
  203. package/pack/generated/devin/skills/rite-polish/reference/adr-promotion.md +11 -0
  204. package/pack/generated/devin/skills/rite-polish/reference/anti-ai-slop.md +187 -0
  205. package/pack/generated/devin/skills/rite-polish/reference/anti-patterns.md +30 -0
  206. package/pack/generated/devin/skills/rite-polish/reference/backend-polish.md +80 -0
  207. package/pack/generated/devin/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
  208. package/pack/generated/devin/skills/rite-polish/reference/code.md +82 -0
  209. package/pack/generated/devin/skills/rite-polish/reference/design-memory.md +117 -0
  210. package/pack/generated/devin/skills/rite-polish/reference/design-system-discovery.md +8 -0
  211. package/pack/generated/devin/skills/rite-polish/reference/harden-checklist.md +109 -0
  212. package/pack/generated/devin/skills/rite-polish/reference/ledger.md +65 -0
  213. package/pack/generated/devin/skills/rite-polish/reference/ui.md +137 -0
  214. package/pack/generated/devin/skills/rite-pov/SKILL.md +57 -0
  215. package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +54 -0
  216. package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +66 -0
  217. package/pack/generated/devin/skills/rite-prototype/SKILL.md +104 -0
  218. package/pack/generated/devin/skills/rite-prove/SKILL.md +122 -0
  219. package/pack/generated/devin/skills/rite-prove/reference/acceptance-proof.md +88 -0
  220. package/pack/generated/devin/skills/rite-prove/reference/anti-patterns.md +25 -0
  221. package/pack/generated/devin/skills/rite-prove/reference/browser-proof.md +51 -0
  222. package/pack/generated/devin/skills/rite-prove/reference/failure-triage.md +43 -0
  223. package/pack/generated/devin/skills/rite-prove/reference/proof-ladder.md +28 -0
  224. package/pack/generated/devin/skills/rite-prove/reference/test-command-discovery.md +30 -0
  225. package/pack/generated/devin/skills/rite-quick/SKILL.md +81 -0
  226. package/pack/generated/devin/skills/rite-resolve/SKILL.md +98 -0
  227. package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +118 -0
  228. package/pack/generated/devin/skills/rite-review/SKILL.md +171 -0
  229. package/pack/generated/devin/skills/rite-review/reference/anti-patterns.md +32 -0
  230. package/pack/generated/devin/skills/rite-review/reference/cognitive-load.md +90 -0
  231. package/pack/generated/devin/skills/rite-review/reference/feature-scoped-review.md +26 -0
  232. package/pack/generated/devin/skills/rite-review/reference/five-axis-review.md +66 -0
  233. package/pack/generated/devin/skills/rite-review/reference/nielsen-heuristics.md +126 -0
  234. package/pack/generated/devin/skills/rite-review/reference/performance-checklist.md +80 -0
  235. package/pack/generated/devin/skills/rite-review/reference/performance-review.md +14 -0
  236. package/pack/generated/devin/skills/rite-review/reference/security-review.md +42 -0
  237. package/pack/generated/devin/skills/rite-seal/SKILL.md +74 -0
  238. package/pack/generated/devin/skills/rite-seal/reference/anti-patterns.md +29 -0
  239. package/pack/generated/devin/skills/rite-seal/reference/final-evidence.md +41 -0
  240. package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +29 -0
  241. package/pack/generated/devin/skills/rite-seal/reference/output.md +5 -0
  242. package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +47 -0
  243. package/pack/generated/devin/skills/rite-seal/reference/risk-and-rollback.md +56 -0
  244. package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +27 -0
  245. package/pack/generated/devin/skills/rite-ship/SKILL.md +87 -0
  246. package/pack/generated/devin/skills/rite-ship/reference/anti-patterns.md +28 -0
  247. package/pack/generated/devin/skills/rite-ship/reference/close-out.md +68 -0
  248. package/pack/generated/devin/skills/rite-ship/reference/git-ship.md +120 -0
  249. package/pack/generated/devin/skills/rite-ship/reference/rollout.md +62 -0
  250. package/pack/generated/devin/skills/rite-ship/reference/ship-template.md +39 -0
  251. package/pack/generated/devin/skills/rite-spec/SKILL.md +149 -0
  252. package/pack/generated/devin/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  253. package/pack/generated/devin/skills/rite-spec/reference/ai-spec-template.md +40 -0
  254. package/pack/generated/devin/skills/rite-spec/reference/anti-patterns.md +27 -0
  255. package/pack/generated/devin/skills/rite-spec/reference/interview-patterns.md +56 -0
  256. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +83 -0
  257. package/pack/generated/devin/skills/rite-spec/reference/question-protocol.md +36 -0
  258. package/pack/generated/devin/skills/rite-spec/reference/references-intake.md +62 -0
  259. package/pack/generated/devin/skills/rite-spec/reference/spec-checklists.md +89 -0
  260. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +154 -0
  261. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +227 -0
  262. package/pack/generated/devin/skills/rite-status/SKILL.md +57 -0
  263. package/pack/generated/devin/skills/rite-temper/SKILL.md +129 -0
  264. package/pack/generated/devin/skills/rite-temper/reference/anti-patterns.md +30 -0
  265. package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +66 -0
  266. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +53 -0
  267. package/pack/generated/devin/skills/rite-temper/reference/significance.md +46 -0
  268. package/pack/generated/devin/skills/rite-temper/reference/strategy-template.md +90 -0
  269. package/pack/generated/devin/skills/rite-upgrade/SKILL.md +121 -0
  270. package/pack/generated/devin/skills/rite-vet/SKILL.md +192 -0
  271. package/pack/generated/devin/skills/rite-vet/reference/anti-patterns.md +43 -0
  272. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +202 -0
  273. package/pack/generated/devin/skills/rite-vet/reference/cross-model.md +19 -0
  274. package/pack/generated/devin/skills/rite-vet/reference/depth.md +59 -0
  275. package/pack/generated/devin/skills/rite-vet/reference/eng-lenses.md +48 -0
  276. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +201 -0
  277. package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +84 -0
  278. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +69 -0
  279. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  280. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +10 -5
  281. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +12 -7
  282. package/pack/generated/omp/skills/rite-build/SKILL.md +3 -1
  283. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +4 -3
  284. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +3 -1
  285. package/pack/generated/omp/skills/rite-define/reference/plan-template.md +1 -1
  286. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  287. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +10 -5
  288. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +12 -7
  289. package/pack/generated/pi/skills/rite-build/SKILL.md +3 -1
  290. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +4 -3
  291. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +3 -1
  292. package/pack/generated/pi/skills/rite-define/reference/plan-template.md +1 -1
  293. package/package.json +4 -2
  294. package/scripts/build-host-artifacts.sh +48 -5
  295. package/scripts/devin-generate.sh +222 -0
  296. package/update.sh +2 -1
@@ -37,13 +37,13 @@ func runPathDisjoint(args []string, stdin io.Reader, stdout, stderr io.Writer) i
37
37
  switch args[i] {
38
38
  case "--root":
39
39
  if i+1 >= len(args) {
40
- fmt.Fprintln(stderr, "usage: check path-disjoint [--root <dir>] [<json-file>|-]")
40
+ fmt.Fprintln(stderr, usagePathDisjoint)
41
41
  return ExitUsage
42
42
  }
43
43
  i++
44
44
  root = args[i]
45
- case "-h", "--help":
46
- fmt.Fprintln(stdout, "usage: check path-disjoint [--root <dir>] [<json-file>|-]")
45
+ case "-h", "-help", "--help":
46
+ fmt.Fprintln(stdout, usagePathDisjoint)
47
47
  return ExitOK
48
48
  default:
49
49
  if args[i] != "-" && strings.HasPrefix(args[i], "-") {
@@ -73,7 +73,6 @@ func runPathDisjoint(args []string, stdin io.Reader, stdout, stderr io.Writer) i
73
73
  }
74
74
 
75
75
  func cmdSelect(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
76
- const usage = "usage: parallel select --cap <1-10> [--root <dir>] [<json-file>|-]"
77
76
  root := ""
78
77
  jsonPath := "-"
79
78
  capN := 0
@@ -82,14 +81,14 @@ func cmdSelect(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
82
81
  switch args[i] {
83
82
  case "--root":
84
83
  if i+1 >= len(args) {
85
- fmt.Fprintln(stderr, usage)
84
+ fmt.Fprintln(stderr, usageSelect)
86
85
  return ExitUsage
87
86
  }
88
87
  i++
89
88
  root = args[i]
90
89
  case "--cap":
91
90
  if i+1 >= len(args) {
92
- fmt.Fprintln(stderr, usage)
91
+ fmt.Fprintln(stderr, usageSelect)
93
92
  return ExitUsage
94
93
  }
95
94
  i++
@@ -100,8 +99,8 @@ func cmdSelect(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
100
99
  }
101
100
  capN = n
102
101
  sawCap = true
103
- case "-h", "--help":
104
- fmt.Fprintln(stdout, usage)
102
+ case "-h", "-help", "--help":
103
+ fmt.Fprintln(stdout, usageSelect)
105
104
  return ExitOK
106
105
  default:
107
106
  if args[i] != "-" && strings.HasPrefix(args[i], "-") {
@@ -112,7 +111,7 @@ func cmdSelect(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
112
111
  }
113
112
  }
114
113
  if !sawCap {
115
- fmt.Fprintln(stderr, usage)
114
+ fmt.Fprintln(stderr, usageSelect)
116
115
  return ExitUsage
117
116
  }
118
117
  data, err := readJSONInput(jsonPath, stdin)
@@ -166,7 +165,7 @@ func runParallel(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
166
165
  return runPathDisjoint(rest, stdin, stdout, stderr)
167
166
  case "select":
168
167
  return cmdSelect(rest, stdin, stdout, stderr)
169
- case "-h", "--help", "help":
168
+ case "-h", "-help", "--help", "help":
170
169
  fmt.Fprintln(stdout, parallelUsage())
171
170
  return ExitOK
172
171
  default:
@@ -175,6 +174,20 @@ func runParallel(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
175
174
  }
176
175
  }
177
176
 
177
+ const (
178
+ usageCreate = "usage: parallel create --root --slug --batch --base --json"
179
+ usageRecordGreen = "usage: parallel record-green --root --slug --slice --commit"
180
+ usageAbort = "usage: parallel abort --root --slug"
181
+ usageIntegrate = "usage: parallel integrate --root --slug [--apply-to-control]"
182
+ usageCleanup = "usage: parallel cleanup --root --slug [--force]"
183
+ usageStatus = "usage: parallel status --root --slug"
184
+ usageLeaseWrite = "usage: parallel lease-write --root --slug --json"
185
+ usageLeaseRead = "usage: parallel lease-read --root --slug [--field name]"
186
+ usageLeaseClear = "usage: parallel lease-clear --root --slug"
187
+ usagePathDisjoint = "usage: check path-disjoint [--root <dir>] [<json-file>|-]"
188
+ usageSelect = "usage: parallel select --cap <1-10> [--root <dir>] [<json-file>|-]"
189
+ )
190
+
178
191
  func parallelUsage() string {
179
192
  return strings.TrimSpace(`usage: parallel <subcommand> [options]
180
193
 
@@ -194,9 +207,40 @@ Subcommands:
194
207
  Exit codes: 0 ok, 2 usage, 3 blocked`)
195
208
  }
196
209
 
210
+ // CommandUsage is the usage text for `parallel <name>`. An empty or unknown
211
+ // name returns the family usage.
212
+ func CommandUsage(name string) string {
213
+ switch name {
214
+ case "create":
215
+ return usageCreate
216
+ case "record-green":
217
+ return usageRecordGreen
218
+ case "abort":
219
+ return usageAbort
220
+ case "integrate":
221
+ return usageIntegrate
222
+ case "cleanup":
223
+ return usageCleanup
224
+ case "status":
225
+ return usageStatus
226
+ case "lease-write", "write-lease":
227
+ return usageLeaseWrite
228
+ case "lease-read", "read-lease":
229
+ return usageLeaseRead
230
+ case "lease-clear", "clear-lease":
231
+ return usageLeaseClear
232
+ case "check-disjoint", "path-disjoint":
233
+ return usagePathDisjoint
234
+ case "select":
235
+ return usageSelect
236
+ default:
237
+ return parallelUsage()
238
+ }
239
+ }
240
+
197
241
  type flagSet struct {
198
242
  Root, Slug, Batch, Base, Slice, Commit, JSON, Field, Session string
199
- ApplyToControl, Force bool
243
+ ApplyToControl, Force, Help bool
200
244
  }
201
245
 
202
246
  func parseFlags(args []string, stderr io.Writer) (flagSet, []string, int) {
@@ -271,6 +315,8 @@ func parseFlags(args []string, stderr io.Writer) (flagSet, []string, int) {
271
315
  f.ApplyToControl = true
272
316
  case "--force":
273
317
  f.Force = true
318
+ case "-h", "-help", "--help":
319
+ f.Help = true
274
320
  default:
275
321
  // No parallel subcommand takes positional args; anything
276
322
  // unrecognized (typo'd flag, stray word) is a usage error, not
@@ -283,6 +329,18 @@ func parseFlags(args []string, stderr io.Writer) (flagSet, []string, int) {
283
329
  return f, nil, ExitOK
284
330
  }
285
331
 
332
+ func parseFlagsOrHelp(args []string, stdout, stderr io.Writer, usage string) (flagSet, int, bool) {
333
+ f, _, code := parseFlags(args, stderr)
334
+ if code != ExitOK {
335
+ return f, code, true
336
+ }
337
+ if f.Help {
338
+ fmt.Fprintln(stdout, usage)
339
+ return f, ExitOK, true
340
+ }
341
+ return f, ExitOK, false
342
+ }
343
+
286
344
  func requireRootSlug(f flagSet, stderr io.Writer) int {
287
345
  if f.Root == "" || f.Slug == "" {
288
346
  fmt.Fprintln(stderr, "parallel: --root and --slug are required")
@@ -303,8 +361,8 @@ func readJSONInput(path string, stdin io.Reader) ([]byte, error) {
303
361
  }
304
362
 
305
363
  func cmdCreate(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
306
- f, _, code := parseFlags(args, stderr)
307
- if code != ExitOK {
364
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageCreate)
365
+ if done {
308
366
  return code
309
367
  }
310
368
  if code := requireRootSlug(f, stderr); code != ExitOK {
@@ -314,7 +372,7 @@ func cmdCreate(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
314
372
  return code
315
373
  }
316
374
  if f.Batch == "" || f.Base == "" || f.JSON == "" {
317
- fmt.Fprintln(stderr, "usage: parallel create --root --slug --batch --base --json")
375
+ fmt.Fprintln(stderr, usageCreate)
318
376
  return ExitUsage
319
377
  }
320
378
  data, err := readJSONInput(f.JSON, stdin)
@@ -359,8 +417,8 @@ func rejectUnsupportedFlags(f flagSet, stderr io.Writer, force, applyToControl b
359
417
  }
360
418
 
361
419
  func cmdRecordGreen(args []string, stdout, stderr io.Writer) int {
362
- f, _, code := parseFlags(args, stderr)
363
- if code != ExitOK {
420
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageRecordGreen)
421
+ if done {
364
422
  return code
365
423
  }
366
424
  if code := requireRootSlug(f, stderr); code != ExitOK {
@@ -370,7 +428,7 @@ func cmdRecordGreen(args []string, stdout, stderr io.Writer) int {
370
428
  return code
371
429
  }
372
430
  if f.Slice == "" || f.Commit == "" {
373
- fmt.Fprintln(stderr, "usage: parallel record-green --root --slug --slice --commit")
431
+ fmt.Fprintln(stderr, usageRecordGreen)
374
432
  return ExitUsage
375
433
  }
376
434
  lease, err := RecordGreen(f.Root, f.Slug, f.Slice, f.Commit)
@@ -383,8 +441,8 @@ func cmdRecordGreen(args []string, stdout, stderr io.Writer) int {
383
441
  }
384
442
 
385
443
  func cmdAbort(args []string, stdout, stderr io.Writer) int {
386
- f, _, code := parseFlags(args, stderr)
387
- if code != ExitOK {
444
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageAbort)
445
+ if done {
388
446
  return code
389
447
  }
390
448
  if code := requireRootSlug(f, stderr); code != ExitOK {
@@ -403,8 +461,8 @@ func cmdAbort(args []string, stdout, stderr io.Writer) int {
403
461
  }
404
462
 
405
463
  func cmdIntegrate(args []string, stdout, stderr io.Writer) int {
406
- f, _, code := parseFlags(args, stderr)
407
- if code != ExitOK {
464
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageIntegrate)
465
+ if done {
408
466
  return code
409
467
  }
410
468
  if code := requireRootSlug(f, stderr); code != ExitOK {
@@ -427,8 +485,8 @@ func cmdIntegrate(args []string, stdout, stderr io.Writer) int {
427
485
  }
428
486
 
429
487
  func cmdCleanup(args []string, stdout, stderr io.Writer) int {
430
- f, _, code := parseFlags(args, stderr)
431
- if code != ExitOK {
488
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageCleanup)
489
+ if done {
432
490
  return code
433
491
  }
434
492
  if code := requireRootSlug(f, stderr); code != ExitOK {
@@ -454,8 +512,8 @@ func cmdCleanup(args []string, stdout, stderr io.Writer) int {
454
512
  }
455
513
 
456
514
  func cmdStatus(args []string, stdout, stderr io.Writer) int {
457
- f, _, code := parseFlags(args, stderr)
458
- if code != ExitOK {
515
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageStatus)
516
+ if done {
459
517
  return code
460
518
  }
461
519
  if code := requireRootSlug(f, stderr); code != ExitOK {
@@ -474,15 +532,15 @@ func cmdStatus(args []string, stdout, stderr io.Writer) int {
474
532
  }
475
533
 
476
534
  func cmdLeaseWrite(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
477
- f, _, code := parseFlags(args, stderr)
478
- if code != ExitOK {
535
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageLeaseWrite)
536
+ if done {
479
537
  return code
480
538
  }
481
539
  if code := requireRootSlug(f, stderr); code != ExitOK {
482
540
  return code
483
541
  }
484
542
  if f.JSON == "" {
485
- fmt.Fprintln(stderr, "usage: parallel lease-write --root --slug --json")
543
+ fmt.Fprintln(stderr, usageLeaseWrite)
486
544
  return ExitUsage
487
545
  }
488
546
  data, err := readJSONInput(f.JSON, stdin)
@@ -516,8 +574,8 @@ func cmdLeaseWrite(args []string, stdin io.Reader, stdout, stderr io.Writer) int
516
574
  }
517
575
 
518
576
  func cmdLeaseRead(args []string, stdout, stderr io.Writer) int {
519
- f, _, code := parseFlags(args, stderr)
520
- if code != ExitOK {
577
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageLeaseRead)
578
+ if done {
521
579
  return code
522
580
  }
523
581
  if code := requireRootSlug(f, stderr); code != ExitOK {
@@ -567,8 +625,8 @@ func cmdLeaseRead(args []string, stdout, stderr io.Writer) int {
567
625
  }
568
626
 
569
627
  func cmdLeaseClear(args []string, stdout, stderr io.Writer) int {
570
- f, _, code := parseFlags(args, stderr)
571
- if code != ExitOK {
628
+ f, code, done := parseFlagsOrHelp(args, stdout, stderr, usageLeaseClear)
629
+ if done {
572
630
  return code
573
631
  }
574
632
  if code := requireRootSlug(f, stderr); code != ExitOK {
@@ -0,0 +1,32 @@
1
+ package parallel
2
+
3
+ import (
4
+ "bytes"
5
+ "strings"
6
+ "testing"
7
+ )
8
+
9
+ func TestParallelCreateHelp(t *testing.T) {
10
+ var stdout, stderr bytes.Buffer
11
+ code := Run("parallel", []string{"create", "--help"}, strings.NewReader(""), &stdout, &stderr)
12
+ if code != ExitOK {
13
+ t.Fatalf("code=%d stderr=%q", code, stderr.String())
14
+ }
15
+ if stderr.Len() != 0 {
16
+ t.Fatalf("stderr=%q", stderr.String())
17
+ }
18
+ if got := stdout.String(); !strings.Contains(got, usageCreate) {
19
+ t.Fatalf("stdout=%q, want %q", got, usageCreate)
20
+ }
21
+ }
22
+
23
+ func TestParallelCreateUnknownArgumentStillErrors(t *testing.T) {
24
+ var stdout, stderr bytes.Buffer
25
+ code := Run("parallel", []string{"create", "--nope"}, strings.NewReader(""), &stdout, &stderr)
26
+ if code != ExitUsage {
27
+ t.Fatalf("code=%d, want %d", code, ExitUsage)
28
+ }
29
+ if !strings.Contains(stderr.String(), `unknown argument "--nope"`) {
30
+ t.Fatalf("stderr=%q", stderr.String())
31
+ }
32
+ }
package/engine/main.go CHANGED
@@ -71,6 +71,9 @@ func run(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
71
71
  fmt.Fprint(stderr, usage)
72
72
  return exitUsage
73
73
  }
74
+ if text, ok := commandHelp(args); ok {
75
+ return writeHelp(stdout, text)
76
+ }
74
77
  root, rootExit, err := resolveRootFor(args[0], args[1:])
75
78
  if err != nil {
76
79
  fmt.Fprintf(stderr, "devrites: root selection: %v\n", err)
@@ -113,7 +116,7 @@ func run(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
113
116
 
114
117
  func cmdCheck(root string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
115
118
  if len(args) == 0 {
116
- fmt.Fprintln(stderr, "usage: devrites-engine check <candidate|readiness|seal|path-disjoint|task-graph|skill-trust|indexes> ...")
119
+ fmt.Fprint(stderr, checkUsage)
117
120
  return exitUsage
118
121
  }
119
122
  sub, rest := args[0], args[1:]
@@ -138,7 +141,7 @@ func cmdCheck(root string, args []string, stdin io.Reader, stdout, stderr io.Wri
138
141
 
139
142
  func cmdCandidate(root string, args []string, stdout, stderr io.Writer) int {
140
143
  if len(args) != 1 {
141
- fmt.Fprintln(stderr, "usage: devrites-engine check candidate <slug>")
144
+ fmt.Fprintln(stderr, candidateUsage)
142
145
  return exitUsage
143
146
  }
144
147
  digest, files, err := lib.CandidateIdentity(root, args[0])
@@ -156,7 +159,7 @@ func cmdCandidate(root string, args []string, stdout, stderr io.Writer) int {
156
159
 
157
160
  func cmdState(root string, args []string, stdout, stderr io.Writer) int {
158
161
  if len(args) == 0 {
159
- fmt.Fprintln(stderr, "usage: devrites-engine state <resolve|merge-manifest|close> ...")
162
+ fmt.Fprint(stderr, stateUsage)
160
163
  return exitUsage
161
164
  }
162
165
  switch args[0] {
@@ -178,7 +181,11 @@ func cmdState(root string, args []string, stdout, stderr io.Writer) int {
178
181
  func cmdGate(root string, kind gate.Kind, args []string, stdout, stderr io.Writer) int {
179
182
  emitBinding := kind == gate.Readiness && len(args) == 2 && args[0] == "--emit-binding"
180
183
  if !emitBinding && len(args) != 1 {
181
- fmt.Fprintf(stderr, "usage: devrites-engine check %s <slug>\n", kind)
184
+ if kind == gate.Readiness {
185
+ fmt.Fprintln(stderr, readinessUsage)
186
+ } else {
187
+ fmt.Fprintln(stderr, sealUsage)
188
+ }
182
189
  return exitUsage
183
190
  }
184
191
  if emitBinding {
@@ -219,7 +226,7 @@ func cmdGate(root string, kind gate.Kind, args []string, stdout, stderr io.Write
219
226
 
220
227
  func cmdTaskGraph(root string, args []string, stdout, stderr io.Writer) int {
221
228
  if len(args) != 1 {
222
- fmt.Fprintln(stderr, "usage: devrites-engine check task-graph <slug>")
229
+ fmt.Fprintln(stderr, taskGraphUsage)
223
230
  return exitUsage
224
231
  }
225
232
  return lib.RunTaskGraphCheck(root, args[0], stdout, stderr)
@@ -227,7 +234,7 @@ func cmdTaskGraph(root string, args []string, stdout, stderr io.Writer) int {
227
234
 
228
235
  func cmdSkillTrust(args []string, stdout, stderr io.Writer) int {
229
236
  if len(args) != 1 {
230
- fmt.Fprintln(stderr, "usage: devrites-engine check skill-trust <path>")
237
+ fmt.Fprintln(stderr, skillTrustUsage)
231
238
  return exitUsage
232
239
  }
233
240
  return lib.RunSkillTrustCheck(args[0], stdout, stderr)
@@ -235,7 +242,7 @@ func cmdSkillTrust(args []string, stdout, stderr io.Writer) int {
235
242
 
236
243
  func cmdObserve(root string, args []string, stdout, stderr io.Writer) int {
237
244
  if len(args) == 0 {
238
- fmt.Fprintln(stderr, "usage: devrites-engine observe summary <slug> | observe slice <slug> <SLICE-ID>")
245
+ fmt.Fprint(stderr, observeUsage)
239
246
  return exitUsage
240
247
  }
241
248
  switch args[0] {
@@ -251,7 +258,7 @@ func cmdObserve(root string, args []string, stdout, stderr io.Writer) int {
251
258
  return lib.RunObserveSummary(root, slug, stdout, stderr)
252
259
  case "slice":
253
260
  if len(args) != 3 {
254
- fmt.Fprintln(stderr, "usage: devrites-engine observe slice <slug> <SLICE-ID>")
261
+ fmt.Fprintln(stderr, observeSliceUsage)
255
262
  return exitUsage
256
263
  }
257
264
  return lib.RunObserveSlice(root, args[1], args[2], stdout, stderr)
@@ -25,6 +25,10 @@ func TestRootModeForCoversReadAndWriteSurfaces(t *testing.T) {
25
25
  {name: "observe summary", command: "observe", args: []string{"summary"}, want: rootStrictUsage},
26
26
  {name: "observe slice", command: "observe", args: []string{"slice"}, want: rootStrictUsage},
27
27
  {name: "orient", command: "orient", want: rootStrictUsage},
28
+ {name: "orient help", command: "orient", args: []string{"--help"}, want: rootUnused},
29
+ {name: "check candidate help", command: "check", args: []string{"candidate", "--help"}, want: rootUnused},
30
+ {name: "state help flag", command: "state", args: []string{"--help"}, want: rootUnused},
31
+ {name: "migrate help", command: "migrate", args: []string{"--help"}, want: rootUnused},
28
32
  {name: "check indexes", command: "check", args: []string{"indexes"}, want: rootLenient},
29
33
  {name: "resolve", command: "state", args: []string{"resolve"}, want: rootStrict},
30
34
  {name: "close", command: "state", args: []string{"close"}, want: rootStrict},
package/install.sh CHANGED
@@ -307,10 +307,13 @@ PAYLOAD="${DEVRITES_HOST_ARTIFACT_DIR:-$SELF_DIR/pack/generated}"
307
307
  if [ ! -d "$PAYLOAD/claude/skills" ] || [ ! -d "$PAYLOAD/codex/skills" ] ||
308
308
  [ ! -d "$PAYLOAD/pi/skills" ] || [ ! -d "$PAYLOAD/pi/agents" ] ||
309
309
  [ ! -d "$PAYLOAD/pi/prompts" ] ||
310
+ [ ! -d "$PAYLOAD/devin/skills" ] || [ ! -d "$PAYLOAD/devin/agents" ] ||
310
311
  [ ! -f "$PAYLOAD/claude/skills/devrites-lib/reference/standards/agents.md" ] ||
311
312
  [ ! -f "$PAYLOAD/codex/skills/devrites-lib/reference/standards/agents.md" ] ||
312
313
  [ ! -f "$PAYLOAD/pi/skills/devrites-lib/reference/standards/agents.md" ] ||
313
- [ ! -f "$PAYLOAD/codex/config.toml" ] || [ ! -f "$PAYLOAD/pi/AGENTS.md" ]; then
314
+ [ ! -f "$PAYLOAD/devin/skills/devrites-lib/reference/standards/agents.md" ] ||
315
+ [ ! -f "$PAYLOAD/codex/config.toml" ] || [ ! -f "$PAYLOAD/pi/AGENTS.md" ] ||
316
+ [ ! -f "$PAYLOAD/devin/AGENTS.md" ]; then
314
317
  BUILDER="$SELF_DIR/scripts/build-host-artifacts.sh"
315
318
  [ -f "$BUILDER" ] || {
316
319
  echo "error: generated install payload missing at $PAYLOAD and builder missing at $BUILDER" >&2
@@ -56,14 +56,14 @@ max_minutes: 120 # wall-clock minutes in one host activation
56
56
  max_review_queue: 8 # unresolved review/gate items admitted before fan-out stops
57
57
  # max_tokens: 200000 # optional stricter host-observed token cap
58
58
  # max_cost_usd: 10 # optional stricter host-observed cost cap
59
- notify: "ntfy.sh/my-topic" # shell command; examples: rite-build/reference/afk-discipline.md
59
+ notify: "ntfy.sh/my-topic" # shell command; examples: .claude/skills/rite-build/reference/afk-discipline.md
60
60
  allow_gates: [advisory, validating] # gate severities AFK auto-handles (auto-picks the recommended option)
61
61
  continue_sequence: true # after Seal GO, open the next recorded continuation
62
62
  max_workspaces: 5 # workspaces one armed sequence may open
63
- max_parallel: 10 # cap on eligible path-disjoint Build batches (1 = serial)
63
+ max_parallel: 10 # unattended default cap; `--parallel N` on this invocation wins and may rewrite only this field
64
64
  ```
65
65
 
66
- The file is **read-only config**: never rewritten in place. `max_slices` is the initial
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
67
  budget; the mutable remaining count is the `state.md` cursor
68
68
  `afk_slices_remaining` (`AFK slices remaining: <n>` in the released bullet
69
69
  form), owned by the controlling root. Recognize either spelling and preserve
@@ -119,11 +119,18 @@ candidate manifest to cover the whole recorded chain — run
119
119
  - Every human-owned, safety, access, exhaustion, and `NO-GO` condition still stops the
120
120
  run exactly as without this field.
121
121
 
122
- `max_parallel` caps a Build batch for unattended runs; `1` forces the serial cycle.
123
- Unattended runs take the largest eligible set cap and recompute after every completed
124
- round (serial slice or parallel integrate)
125
- ([parallel-batch.md § Dynamic selection and re-batching](../../../rite-build/reference/parallel-batch.md#dynamic-selection-and-re-batching));
126
- an explicit `/rite-build --parallel N` cap wins for that invocation.
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)).
127
134
 
128
135
  ## Unattended resource envelope
129
136
 
@@ -87,18 +87,23 @@ executable controller/harness/bundle bytes or a missing writer, read
87
87
  3. **Arm AFK once.** Apply the loop's
88
88
  [one-write AFK contract](reference/loop.md#arm-afk-once): preserve valid
89
89
  existing bytes or create the sentinel once (`allow_gates: [advisory, validating]`); never
90
- rewrite it after Vet. Preserve an existing sentinel byte-for-byte.
90
+ rewrite it after Vet except to write or replace only `max_parallel: N` when
91
+ this invocation contains `--parallel N`. Preserve an existing sentinel
92
+ byte-for-byte otherwise. **Failing case:** leftover `max_parallel: 1` keeps
93
+ the run serial after `--parallel 5`.
91
94
  **Completion:** a valid read-only AFK sentinel exists.
92
95
  4. **Drive phases.** Follow [the loop](reference/loop.md): `/rite-spec` →
93
96
  `/rite-clarify` → `/rite-temper` → `/rite-define` → `/rite-vet` →
94
97
  `/rite-build` batch loop → `/rite-prove` → `/rite-polish` →
95
98
  `/rite-review` → `/rite-seal`. Read and execute each skill; durable files, not
96
99
  chat, carry state. Apply the mutable post-vet budget before first Build.
97
- Build runs the largest eligible path-disjoint batch (cap: `--parallel N`, else
98
- sentinel `max_parallel`, else 10) and recomputes after every completed round until no
99
- pending slice remains; a one-slice round is serial for that round only, then
100
+ Build runs the largest eligible path-disjoint batch (cap: this invocation's
101
+ `--parallel N`, else sentinel `max_parallel`, else 10) and recomputes after
102
+ every completed round until no pending slice remains; a one-slice round is serial for that round only, then
100
103
  selection runs again (host isolation still forces serial when concurrent writers
101
- cannot be separated).
104
+ cannot be separated). When `--parallel N`
105
+ is present, pass it into `/rite-build` and do not consult leftover sentinel
106
+ `max_parallel`.
102
107
  **Completion:** loop reaches Seal GO or persists a valid stop before any later phase.
103
108
  5. **Apply stops.** At every gate use
104
109
  [stop-conditions.md](reference/stop-conditions.md). A `blocked` label alone is not a stop condition:
@@ -17,18 +17,21 @@ allow_gates: [advisory, validating]
17
17
  # max_slices / max_agents / max_minutes / max_review_queue omitted: unlimited
18
18
  # continue_sequence: true # opt-in: chain recorded continuations after Seal GO
19
19
  # max_workspaces: 5 # sequence budget when chaining
20
- # max_parallel: 10 # Build batch cap; 1 = serial (default: eligible, cap 10)
20
+ # max_parallel: 10 # default cap when this invocation omits `--parallel N`; `--parallel N` wins and rewrites only this field
21
21
  # max_tokens: <N>
22
22
  # max_cost_usd: <amount>
23
23
  # notify: "<cmd>"
24
24
  ```
25
25
 
26
- Read an existing sentinel first. Preserve it byte-for-byte when valid; stop if
26
+ Read an existing sentinel first. Preserve it byte-for-byte when valid, except
27
+ when this invocation contains `--parallel N`: then write or replace only
28
+ `max_parallel: N` and leave every other key unchanged. Stop if the sentinel is
27
29
  malformed. Do not stop because it names `max_slices` / `max_agents` /
28
30
  `max_minutes` / `max_review_queue` or only `[advisory]`. If absent, write it
29
- once after clarity. Never write `max_slices` from `--max-slices`.
30
- It is read-only: never rewrite it after Vet or reset it on resume. Leftover
31
- `expires_at` is ignored and never rewritten.
31
+ once after clarity, and include `max_parallel: N` when that flag is present.
32
+ Never write `max_slices` from `--max-slices`. It is otherwise read-only: never rewrite it after Vet or reset it on resume. Leftover `expires_at` is ignored
33
+ and never rewritten. **Failing case:** leftover `max_parallel: 1` keeps the run
34
+ serial after `--parallel 5`.
32
35
 
33
36
  ### Derive the mutable post-vet budget
34
37
 
@@ -44,7 +47,9 @@ readiness check first; reject overlap. Do not stop on `max_agents`,
44
47
  gets fresh activation-local counters but retains durable slice/recovery state.
45
48
 
46
49
  When driving `/rite-build`, ignore afk-discipline remaining-0, `--max-slices`,
47
- and parallel AFK headroom. Close validating questions and blocking questions
50
+ and parallel AFK headroom as stop conditions. Pass this invocation's
51
+ `--parallel N` into `/rite-build` when present; leftover sentinel
52
+ `max_parallel` is then not the cap. Close validating questions and blocking questions
48
53
  that already name a ranked recommended option (recommended pick via
49
54
  `devrites-engine state resolve`) instead of queuing them or handing
50
55
  `/rite-resolve` to the user. Escalating, irreversible-risk, access, and
@@ -61,7 +66,7 @@ Workspace files carry state; chat does not. Read and execute each phase skill:
61
66
  | 3 | `/rite-temper` | harden, reduce, or expand; irreversible risk still pauses |
62
67
  | 4 | `/rite-define` | approved plan/tasks/traceability |
63
68
  | 5 | `/rite-vet` | every plan; derive mutable budget after READY |
64
- | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap 10; one-slice round when <2 eligible); recompute after each round; charge once per green built slice |
69
+ | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; one-slice round when <2 eligible); recompute after each round; charge once per green built slice |
65
70
  | 7 | `/rite-prove` | all slices built; approved proof; recovery on red |
66
71
  | 8 | `/rite-polish` | re-prove after code edits |
67
72
  | 9 | `/rite-review` | in-scope correction then fresh proof |
@@ -64,7 +64,9 @@ filled, and recomputes after every completed round (serial slice or parallel
64
64
  integrate) until no pending slice remains
65
65
  ([`parallel-batch.md` § Dynamic selection](reference/parallel-batch.md#dynamic-selection-and-re-batching)).
66
66
  Unattended runs (`/rite-autocomplete`, `.devrites/AFK` `max_parallel`) repeat batches
67
- inside the same run; HITL stops after each batch. Non-integer/`N≤0`/`N>10` hard refuse.
67
+ inside the same run; HITL stops after each batch. This invocation's `--parallel N`
68
+ is the cap: leftover sentinel `max_parallel` is not consulted. Autocomplete with
69
+ that flag also writes or replaces only `max_parallel: N`. Non-integer/`N≤0`/`N>10` hard refuse.
68
70
  All-green (independent review + proof) then integrate as one local `WIP(<slug>):`
69
71
  commit per sibling onto the current control branch (never pushed). Do not
70
72
  integrate a sibling because the wright returned. A red/gap sibling gets a bounded repair
@@ -16,9 +16,10 @@ control; irreversible work (destructive/auth/public API) always pauses.
16
16
  The controlling root owns the cap:
17
17
 
18
18
  1. **Before every dispatch**, re-read `.devrites/AFK`, `state.md`, and the
19
- selected slice. When `--parallel N` or sentinel `max_parallel` is greater than
20
- 1, recompute `N_eff` via `parallel select` before the next dispatch — a prior
21
- one-slice round does not keep the run serial. A configured `max_slices` and any existing
19
+ selected slice. This invocation's `--parallel N` is the cap when present;
20
+ leftover sentinel `max_parallel` is not consulted in that case. When that
21
+ flag or sentinel `max_parallel` is greater than 1, recompute `N_eff` via
22
+ `parallel select` before the next dispatch — a prior one-slice round does not keep the run serial. A configured `max_slices` and any existing
22
23
  `afk_slices_remaining` value, including its released bullet form, must each
23
24
  be a decimal nonnegative integer. A missing
24
25
  `state.md` or malformed configured value fails closed; an omitted cap is the
@@ -9,6 +9,7 @@ Opt-in only. Default `/rite-build` stays [`one-slice-cycle.md`](one-slice-cycle.
9
9
  | omitted / `--parallel 1` | Serial one-slice |
10
10
  | `--parallel N` (**2≤N≤10**) | N is a **cap**, not a quota: run the largest eligible set ≤ N |
11
11
  | non-integer / `N≤0` / `N>10` | Hard refuse (no silent clamp) |
12
+ | Autocomplete `--parallel N` | N is the cap for this run; leftover sentinel `max_parallel` is ignored, then `/rite-autocomplete` writes or replaces only `max_parallel: N` |
12
13
  | Autocomplete, no flag | Same path, cap from sentinel `max_parallel` else 10; serial only when ineligible |
13
14
 
14
15
  AFK caps `N`. Charge green siblings once after integrate; abort /
@@ -21,7 +22,8 @@ Size each batch by what is runnable **now**, never by the requested number:
21
22
 
22
23
  ```text
23
24
  N_eff = min(
24
- cap -- --parallel N | sentinel max_parallel | 10 (autocomplete default)
25
+ cap -- this invocation's --parallel N (wins over leftover sentinel max_parallel)
26
+ | else sentinel max_parallel | else 10 (autocomplete default)
25
27
  eligible set -- dependency-satisfied pending slices, pairwise path-disjoint
26
28
  AFK headroom -- remaining max_slices, max_agents, max_minutes, review queue
27
29
  host capacity -- concurrent worktree writers + the runtime isolation table
@@ -14,7 +14,7 @@ Spec: ./spec.md Decision coverage: ./decision-coverage.md Date: <date>
14
14
  - Language/runtime/version: <...>
15
15
  - Frameworks/libraries: <...>
16
16
  - Storage/data: <...>
17
- - Test commands: <discovered runner commands; discovery contract: rite-prove/reference/test-command-discovery.md>
17
+ - Test commands: <discovered runner commands; discovery contract: .claude/skills/rite-prove/reference/test-command-discovery.md>
18
18
  - Target/platform/constraints: <...>
19
19
  - Approach-affecting product/constraint unknowns route to `/rite-clarify`;
20
20
  `[NEEDS CLARIFICATION]` blocks approval.
@@ -10,7 +10,9 @@ This directory is generated by `scripts/build-host-artifacts.sh`.
10
10
  - `pi/` contains pi-native skill mirrors, pi-subagents Markdown agents,
11
11
  prompt templates preserving the `/rite*` commands, and an `AGENTS.md`
12
12
  bridge block.
13
+ - `devin/` contains Devin CLI skill mirrors, custom subagent profiles with
14
+ `allowed-tools` allowlists, and an `AGENTS.md` bridge block.
13
15
 
14
16
  Do not edit these files by hand. Edit `pack/.claude/`,
15
- `scripts/codex-generate.sh`, `scripts/omp-generate.sh`, or
16
- `scripts/pi-generate.sh`, then rebuild.
17
+ `scripts/codex-generate.sh`, `scripts/omp-generate.sh`,
18
+ `scripts/pi-generate.sh`, or `scripts/devin-generate.sh`, then rebuild.