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
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
4
4
 
5
+ ## [5.11.0](https://github.com/ViktorsBaikers/DevRites/compare/v5.10.2...v5.11.0) (2026-09-16)
6
+
7
+ ### Added
8
+
9
+ * **installer:** add Devin CLI host generation and install support ([#79](https://github.com/ViktorsBaikers/DevRites/issues/79)) ([a94056b](https://github.com/ViktorsBaikers/DevRites/commit/a94056bc20f520537395cf5c7c075e700d5a0b26))
10
+
11
+ ## [5.10.2](https://github.com/ViktorsBaikers/DevRites/compare/v5.10.1...v5.10.2) (2026-09-15)
12
+
13
+ ### Fixed
14
+
15
+ * **ci:** stop gosec false positive on secret-scan help ([ac8ef15](https://github.com/ViktorsBaikers/DevRites/commit/ac8ef1530f5121cf192fb9e60acef781b0e3fbb8))
16
+ * **rite:** honor --parallel over leftover AFK cap ([#78](https://github.com/ViktorsBaikers/DevRites/issues/78)) ([db6c299](https://github.com/ViktorsBaikers/DevRites/commit/db6c299e24be5e1b8c5739e45542f2ef8b572e3b))
17
+
5
18
  ## [5.10.1](https://github.com/ViktorsBaikers/DevRites/compare/v5.10.0...v5.10.1) (2026-09-15)
6
19
 
7
20
  ### Fixed
package/README.md CHANGED
@@ -4,9 +4,10 @@
4
4
 
5
5
  # DevRites
6
6
 
7
- DevRites is a repository-local workflow for building software with Claude Code
8
- or Codex. It turns a feature request into a spec, a sliced plan, working code,
9
- recorded proof, a release decision, and an explicit ship step.
7
+ DevRites is a repository-local workflow for building software with Claude Code,
8
+ Codex, omp, pi, or Devin CLI. It turns a feature request into a spec, a sliced
9
+ plan, working code, recorded proof, a release decision, and an explicit ship
10
+ step.
10
11
 
11
12
  The work lives under `.devrites/`, not in chat history. A later session or a
12
13
  different agent can read the same plan, decisions, state, and evidence before it
@@ -33,7 +34,7 @@ project-conventional push, tag, or PR action, and archive the workspace.
33
34
  Unattended runs may create local WIP checkpoint commits along the way, but they
34
35
  remain local unless Ship's disclosed plan includes an approved remote action.
35
36
 
36
- **Status:** [`v5.10.1`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v5.10.1): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
37
+ **Status:** [`v5.11.0`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v5.11.0): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
37
38
 
38
39
  This is the latest published release; `main` may contain unreleased work.
39
40
 
@@ -47,8 +48,9 @@ Run this from the root of your project. Node.js 18 or later is required.
47
48
  npx devrites@latest
48
49
  ```
49
50
 
50
- The installer adds project-local support for Claude Code, Codex, omp, and pi.
51
- It does not write skills, agents, or hooks to `~/.claude`, `~/.codex`, or `~/.pi`.
51
+ The installer adds project-local support for Claude Code, Codex, omp, pi, and
52
+ Devin CLI. It does not write skills, agents, or hooks to `~/.claude`, `~/.codex`,
53
+ `~/.pi`, or `~/.config/devin`.
52
54
 
53
55
  ### 2. Choose the smallest route
54
56
 
@@ -78,8 +80,8 @@ proof and next action.
78
80
  ## How the lifecycle works
79
81
 
80
82
  Claude Code supports both `/rite <verb>` and `/rite-<verb>`. Codex uses the same
81
- forms with `$`: `$rite <verb>` and `$rite-<verb>`. omp and pi use the Claude
82
- slash forms (on pi they run as prompt templates under `.pi/prompts`, with
83
+ forms with `$`: `$rite <verb>` and `$rite-<verb>`. omp, pi, and Devin CLI use the
84
+ Claude slash forms (on pi they run as prompt templates under `.pi/prompts`, with
83
85
  `/skill:rite-<verb>` equivalent). The menu and direct forms run the same skill.
84
86
 
85
87
  | # | Stage | Direct command | What happens |
@@ -299,7 +301,9 @@ Useful install flags:
299
301
  | `--dry-run` | Show planned file operations without changing anything. |
300
302
  | `--force` | Replace or remove foreign or customized managed files. The installer still rejects symlinks and path escapes. |
301
303
  | `--no-codex` | Skip `.agents`, `.codex`, and the Codex `AGENTS.md` block. |
304
+ | `--no-omp` | Skip `.omp` skills and agents. |
302
305
  | `--no-pi` | Skip `.pi` skills, agents, prompt commands, and the pi `AGENTS.md` block. |
306
+ | `--no-devin` | Skip `.devin` skills, agents, and the Devin `AGENTS.md` block. |
303
307
  | `--no-agents` | Skip hook-free native specialist profiles. |
304
308
  | `--no-skills` | Skip skills and their bundled standards. |
305
309
  | `--no-binary` | Do not keep the shared `devrites-engine` binary in a user or system bin directory. |
@@ -391,7 +395,7 @@ paths pass bounded streaming preflight before extraction. There is no unchecked
391
395
  raw, source-archive, tag, or default-branch fallback. See
392
396
  [`SECURITY.md`](SECURITY.md) for the representative bounds.
393
397
 
394
- ## Claude Code and Codex integration
398
+ ## Host integration
395
399
 
396
400
  Claude Code receives skills under `.claude/skills/`, agents under
397
401
  `.claude/agents/`, and native root permissions merged into
@@ -405,6 +409,15 @@ only `devrites-slice-wright` is writable; every other specialist is read-only.
405
409
  Existing user content remains in place. Codex users invoke skills with `$rite`,
406
410
  `$rite-spec`, or `/skills`.
407
411
 
412
+ Devin CLI receives the same skills under `.devin/skills/`, custom subagent
413
+ profiles under `.devin/agents/`, and a marked guidance block in `AGENTS.md`.
414
+ Profiles use `allowed-tools` with Devin tool names: only
415
+ `devrites-slice-wright` keeps `edit`, `write`, and `exec`; every other
416
+ specialist is read-only. Dispatch goes through `run_subagent` with the exact
417
+ `devrites-<role>` profile; a missing profile stops for HITL instead of
418
+ substituting `subagent_general`. Profiles load when a session starts, so reopen
419
+ the project after installing.
420
+
408
421
  DevRites is installed through npm or the Bash bootstrap. It is not distributed
409
422
  through Claude Code or Codex plugin stores.
410
423
 
@@ -417,7 +430,8 @@ shared contracts and engineering standards.
417
430
 
418
431
  Seventeen fresh-context agent profiles ship with the pack. Claude has sixteen
419
432
  read-only roles plus the sole source/test writer role,
420
- `devrites-slice-wright`; Codex generates the same one-writer/sixteen-reader split.
433
+ `devrites-slice-wright`; Codex, omp, pi, and Devin generate the same
434
+ one-writer/sixteen-reader split.
421
435
 
422
436
  The authoritative [skills catalogue](docs/skills.md) lists every skill and
423
437
  agent. The [flow diagrams](docs/flow.md) show routing, reviewer fan-out, and
package/bin/devrites.mjs CHANGED
@@ -63,6 +63,8 @@ Common flags:
63
63
  --force Overwrite existing non-DevRites files
64
64
  --no-codex Skip Codex support files (.agents, .codex, AGENTS.md)
65
65
  --no-omp Skip OMP support files (.omp/skills, .omp/agents)
66
+ --no-pi Skip pi support files (.pi/skills, .pi/agents, .pi/prompts)
67
+ --no-devin Skip Devin CLI support files (.devin/skills, .devin/agents)
66
68
  --short-aliases=all Also install /define /build /prove /seal
67
69
  --no-agents Skip hook-free native specialist profiles
68
70
  --no-skills Skip skills and bundled engineering standards
package/docs/cli.md CHANGED
@@ -8,7 +8,10 @@ cross-host primitives; it never dispatches an agent or grades reviewer prose.
8
8
  ## Command surface
9
9
 
10
10
  `devrites-engine help` lists the exhaustive operational surface. Standard
11
- `help`, `-h`, `--help`, `version`, and `--version` forms also remain supported:
11
+ `help`, `-h`, `--help`, `version`, and `--version` forms also remain supported.
12
+ Each operational command and subcommand accepts `-h` / `--help` and prints that
13
+ command's usage to stdout (exit 0) without requiring a workspace. Missing
14
+ required arguments still print usage to stderr and exit 2.
12
15
 
13
16
  ```text
14
17
  devrites-engine install [flags]
@@ -3,9 +3,9 @@
3
3
  This page lists every shipped skill and agent, including its triggers, inputs,
4
4
  outputs, and interactions.
5
5
 
6
- DevRites ships through npm (`npx devrites ...`). Claude Code and Codex support
7
- comes from generated host artifacts copied by the npm installer; DevRites is not
8
- distributed as a Claude or Codex plugin.
6
+ DevRites ships through npm (`npx devrites ...`). Claude Code, Codex, omp, pi,
7
+ and Devin CLI support comes from generated host artifacts copied by the npm
8
+ installer; DevRites is not distributed as a Claude or Codex plugin.
9
9
 
10
10
  - **Workflow diagram** (top-level flow) → [`flow.md`](flow.md).
11
11
  - **Architecture rationale** → [`architecture.md`](architecture.md).
@@ -49,14 +49,16 @@ The Go surface is intentionally closed and deterministic:
49
49
 
50
50
  `devrites-engine help` exhaustively lists the operational engine commands.
51
51
  Standard `help`, `-h`, `--help`, `version`, and `--version` forms remain
52
- available; there are no legacy operational aliases. `check candidate <slug>`
52
+ available; each operational command and subcommand also accepts `-h` / `--help`.
53
+ There are no legacy operational aliases. `check candidate <slug>`
53
54
  prints exactly
54
55
  `candidate-sha256: <64 lowercase hex>` and `candidate-files: <row count>` on a
55
56
  pass; usage/root errors exit `2` and candidate blocks exit `3`. There are no
56
57
  semantic readiness commands, reviewer-prose parsers, capability-ledger engine,
57
58
  or compatibility telemetry.
58
59
 
59
- Claude Code and Codex own native dispatch. Installed skills and exact agents
60
+ Claude Code, Codex, omp, pi, and Devin own native dispatch. Installed skills
61
+ and exact agents
60
62
  own semantic readiness, traceability, acceptance/evidence quality, doubt,
61
63
  review reconciliation, test-quality assessment, capability interpretation,
62
64
  workspace compatibility, and
@@ -27,11 +27,13 @@ workflow strategy.
27
27
  | `open-visual <path-or-name> [--slug <slug>] [--no-open]` | Resolve a local visual HTML file, optionally open it in the OS browser, warn if the sibling outline is missing or inventory ids are absent from HTML, and print agent path tips. No network. |
28
28
  | `version` | Print the engine version. |
29
29
 
30
- `help`, `-h`, and `--help` print this operational inventory. `version` and
31
- `--version` print the binary version. Other unlisted command forms are rejected
32
- as unknown; the engine has no compatibility aliases or tombstones. The
33
- `add`/`upgrade`/`remove` conveniences belong only to the `npx devrites` adapter,
34
- not to the engine command namespace.
30
+ `help`, `-h`, and `--help` print this operational inventory. Each operational
31
+ command and subcommand also accepts `-h` / `--help` and prints that command's
32
+ usage to stdout without requiring a workspace. `version` and `--version` print
33
+ the binary version. Other unlisted command forms are rejected as unknown; the
34
+ engine has no compatibility aliases or tombstones. The `add`/`upgrade`/`remove`
35
+ conveniences belong only to the `npx devrites` adapter, not to the engine
36
+ command namespace.
35
37
 
36
38
  ## Check boundary
37
39
 
@@ -128,8 +128,11 @@ preserved. No ad hoc copy/cherry-pick/merge occurs from the read-only root.
128
128
 
129
129
  Isolation does not authorize same-worktree throughput. Parallel writers are allowed
130
130
  **only** under the `/rite-build` batch path when path-disjoint eligibility, abort-batch,
131
- and a control `parallel-lease.md` apply. `--parallel N` (or the AFK sentinel
132
- `max_parallel`, default cap 10 under `/rite-autocomplete`) is a **cap**: each round runs
131
+ and a control `parallel-lease.md` apply. `--parallel N` on `/rite-autocomplete`
132
+ or `/rite-build` is the batch cap for that run and wins over leftover sentinel
133
+ `max_parallel`; `/rite-autocomplete --parallel N` also writes or replaces only
134
+ that field. Absent the flag, the sentinel (default cap 10 under
135
+ `/rite-autocomplete`) is a **cap**: each round runs
133
136
  the largest eligible set, recomputes after every completed round, and repeats until no
134
137
  pending slice remains; a one-slice round is serial for that round only (see
135
138
  [`parallel-batch.md`](../pack/.claude/skills/rite-build/reference/parallel-batch.md)).
package/docs/skills.md CHANGED
@@ -12,11 +12,16 @@ regenerate missing payload components before installation; the engine validates
12
12
  and copies them but never generates them. The installer copies Codex skill
13
13
  mirrors to `.agents/skills`, mirrors the rules under
14
14
  `.agents/skills/devrites-lib/reference/standards`, installs `.codex/agents`, and
15
- merges native Codex configuration and guidance.
15
+ merges native Codex configuration and guidance. Devin CLI receives skills under
16
+ `.devin/skills`, custom subagent profiles under `.devin/agents`, and a marked
17
+ guidance block in `AGENTS.md`.
16
18
 
17
19
  The root and reviewers never write source. Claude enforces the root boundary in
18
20
  plan mode. Codex uses a workspace-capable root so its sole write-capable
19
- slice-wright can execute, while all other specialists remain read-only. The
21
+ slice-wright can execute, while all other specialists remain read-only. On
22
+ Devin, `allowed-tools` gives only `devrites-slice-wright` `edit`, `write`, and
23
+ `exec`; a missing required profile stops for HITL instead of substituting a
24
+ generic profile. The
20
25
  installed `devrites-engine` owns strict candidate identity, deterministic checks,
21
26
  exact proof/review/seal bindings,
22
27
  atomic state, secret scanning, and installation diagnostics. Native/root policy
@@ -28,8 +33,9 @@ bootstraps or proxies the engine directly (see [`cli.md`](cli.md)).
28
33
 
29
34
  Each phase skill names the specialist the host should run when one is needed.
30
35
  Codex loads those project agents from `.codex/agents`, then waits for and
31
- reconciles their normal results. The engine has no dispatch protocol; native
32
- hosts follow the shared, host-neutral
36
+ reconciles their normal results. Devin loads the same profiles from
37
+ `.devin/agents` as `run_subagent` profiles. The engine has no dispatch protocol;
38
+ native hosts follow the shared, host-neutral
33
39
  [`parallel-dispatch.md`](../pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md)
34
40
  contract when a rite names parallel reviewers.
35
41
 
package/docs/usage.md CHANGED
@@ -413,7 +413,9 @@ remaining from the pending-slice count and ignores leftover remaining and
413
413
  - **`.devrites/AFK` is per-developer, not per-repo**: gitignore it (or commit
414
414
  it deliberately if the team agrees on AFK defaults). The sentinel is
415
415
  read-only config: it toggles your local session mode and sets the initial
416
- `max_slices` budget; nothing else. The mutable remaining-slice count lives
416
+ `max_slices` budget. `/rite-autocomplete --parallel N` is the one exception:
417
+ it writes or replaces only `max_parallel: N` so a leftover `1` cannot keep
418
+ later ticks serial. The mutable remaining-slice count lives
417
419
  in `state.md` (`AFK slices remaining`), never in the sentinel. The root
418
420
  charges it once with each green pending → built transition and stops before
419
421
  another dispatch at zero; malformed values fail closed.
@@ -25,6 +25,9 @@ const (
25
25
  // workspace or Git state, which must never fall back after an unsafe root
26
26
  // selection.
27
27
  func rootModeFor(command string, args []string) rootMode {
28
+ if hasHelpFlag(args) || (len(args) > 0 && isHelpToken(args[0])) {
29
+ return rootUnused
30
+ }
28
31
  subcommand := firstRootOperand(args)
29
32
  switch command {
30
33
  case "secret-scan", "open-visual":
package/engine/help.go ADDED
@@ -0,0 +1,190 @@
1
+ package main
2
+
3
+ import (
4
+ "fmt"
5
+ "io"
6
+ "strings"
7
+
8
+ "github.com/devrites/devrites/internal/parallel"
9
+ )
10
+
11
+ const (
12
+ checkUsage = `usage: devrites-engine check <candidate|readiness|seal|path-disjoint|task-graph|skill-trust|indexes> ...
13
+
14
+ check candidate <slug>
15
+ check readiness <slug>
16
+ check readiness --emit-binding <slug>
17
+ check seal <slug>
18
+ check path-disjoint [--root <dir>] [<json-file>|-]
19
+ check task-graph <slug>
20
+ check skill-trust <path>
21
+ check indexes [--root <dir>]
22
+ `
23
+
24
+ stateUsage = `usage: devrites-engine state <resolve|merge-manifest|close> ...
25
+
26
+ state resolve <qid> "<answer>"
27
+ state resolve --drop <qid> ["<reason>"]
28
+ state resolve --batch <file>
29
+ state merge-manifest <slug> [<predecessor>...]
30
+ state close <slug>
31
+ `
32
+
33
+ observeUsage = `usage: devrites-engine observe summary <slug> | observe slice <slug> <SLICE-ID>
34
+
35
+ observe summary [slug]
36
+ observe slice <slug> <SLICE-ID>
37
+ `
38
+
39
+ orientUsage = "usage: devrites-engine orient [slug]"
40
+ migrateUsage = "usage: devrites-engine migrate <slug> [--dry-run] [--answer id=choice]"
41
+ // scanCmdUsage is help text for `secret-scan`. The identifier must not
42
+ // contain "secret": gosec G101 treats secret* string consts as credentials.
43
+ scanCmdUsage = "usage: devrites-engine secret-scan [--staged] [--stdin] [slug]"
44
+ openVisualUsage = "usage: devrites-engine open-visual <path-or-name> [--slug <slug>] [--no-open]"
45
+ versionUsage = "usage: devrites-engine version"
46
+ candidateUsage = "usage: devrites-engine check candidate <slug>"
47
+ readinessUsage = "usage: devrites-engine check readiness <slug>\n devrites-engine check readiness --emit-binding <slug>"
48
+ sealUsage = "usage: devrites-engine check seal <slug>"
49
+ taskGraphUsage = "usage: devrites-engine check task-graph <slug>"
50
+ skillTrustUsage = "usage: devrites-engine check skill-trust <path>"
51
+ indexesUsage = "usage: devrites-engine check indexes [--root <dir>]"
52
+ resolveUsage = `usage: devrites-engine state resolve <qid> "<answer>" | state resolve --drop <qid> ["<reason>"] | state resolve --batch <file>`
53
+ mergeManifestUsage = "usage: devrites-engine state merge-manifest <slug> [<predecessor>...]"
54
+ closeUsage = "usage: devrites-engine state close <slug>"
55
+ observeSliceUsage = "usage: devrites-engine observe slice <slug> <SLICE-ID>"
56
+ observeSummaryUsage = "usage: devrites-engine observe summary [slug]"
57
+ )
58
+
59
+ func isHelpFlag(arg string) bool {
60
+ switch arg {
61
+ case "-h", "-help", "--help":
62
+ return true
63
+ default:
64
+ return false
65
+ }
66
+ }
67
+
68
+ func isHelpToken(arg string) bool {
69
+ return isHelpFlag(arg) || arg == "help"
70
+ }
71
+
72
+ func hasHelpFlag(args []string) bool {
73
+ for _, arg := range args {
74
+ if isHelpFlag(arg) {
75
+ return true
76
+ }
77
+ }
78
+ return false
79
+ }
80
+
81
+ func shouldPrintHelp(args []string) bool {
82
+ if len(args) == 0 {
83
+ return false
84
+ }
85
+ if isHelpToken(args[0]) {
86
+ return true
87
+ }
88
+ if hasHelpFlag(args) {
89
+ return true
90
+ }
91
+ switch args[0] {
92
+ case "check", "state", "observe", "parallel":
93
+ return len(args) >= 2 && args[1] == "help"
94
+ default:
95
+ return false
96
+ }
97
+ }
98
+
99
+ func firstNonHelp(args []string) string {
100
+ for _, arg := range args {
101
+ if isHelpToken(arg) || strings.HasPrefix(arg, "-") {
102
+ continue
103
+ }
104
+ return arg
105
+ }
106
+ return ""
107
+ }
108
+
109
+ func writeHelp(stdout io.Writer, text string) int {
110
+ fmt.Fprintln(stdout, strings.TrimRight(text, "\n"))
111
+ return exitOK
112
+ }
113
+
114
+ // commandHelp returns the usage text for a help request on a known command.
115
+ // ok is false when args are not a help request, or the command is unknown so
116
+ // the existing unknown-command path should run.
117
+ func commandHelp(args []string) (string, bool) {
118
+ if !shouldPrintHelp(args) {
119
+ return "", false
120
+ }
121
+ switch args[0] {
122
+ case "-h", "-help", "--help", "help":
123
+ return usage, true
124
+ case "check":
125
+ return helpCheck(args[1:]), true
126
+ case "state":
127
+ return helpState(args[1:]), true
128
+ case "observe":
129
+ return helpObserve(args[1:]), true
130
+ case "orient":
131
+ return orientUsage, true
132
+ case "parallel":
133
+ return parallel.CommandUsage(firstNonHelp(args[1:])), true
134
+ case "migrate":
135
+ return migrateUsage, true
136
+ case "secret-scan":
137
+ return scanCmdUsage, true
138
+ case "open-visual":
139
+ return openVisualUsage, true
140
+ case "version", "--version":
141
+ return versionUsage, true
142
+ default:
143
+ return "", false
144
+ }
145
+ }
146
+
147
+ func helpCheck(rest []string) string {
148
+ switch firstNonHelp(rest) {
149
+ case "candidate":
150
+ return candidateUsage
151
+ case "readiness":
152
+ return readinessUsage
153
+ case "seal":
154
+ return sealUsage
155
+ case "path-disjoint":
156
+ return parallel.CommandUsage("path-disjoint")
157
+ case "task-graph":
158
+ return taskGraphUsage
159
+ case "skill-trust":
160
+ return skillTrustUsage
161
+ case "indexes":
162
+ return indexesUsage
163
+ default:
164
+ return checkUsage
165
+ }
166
+ }
167
+
168
+ func helpState(rest []string) string {
169
+ switch firstNonHelp(rest) {
170
+ case "resolve":
171
+ return resolveUsage
172
+ case "merge-manifest":
173
+ return mergeManifestUsage
174
+ case "close":
175
+ return closeUsage
176
+ default:
177
+ return stateUsage
178
+ }
179
+ }
180
+
181
+ func helpObserve(rest []string) string {
182
+ switch firstNonHelp(rest) {
183
+ case "summary":
184
+ return observeSummaryUsage
185
+ case "slice":
186
+ return observeSliceUsage
187
+ default:
188
+ return observeUsage
189
+ }
190
+ }
@@ -0,0 +1,98 @@
1
+ package main
2
+
3
+ import (
4
+ "bytes"
5
+ "strings"
6
+ "testing"
7
+ )
8
+
9
+ func TestCommandHelp(t *testing.T) {
10
+ t.Setenv("DEVRITES_ROOT", "")
11
+ tests := []struct {
12
+ args []string
13
+ want string
14
+ }{
15
+ {args: []string{"--help"}, want: "Usage:"},
16
+ {args: []string{"-h"}, want: "Usage:"},
17
+ {args: []string{"help"}, want: "Usage:"},
18
+ {args: []string{"check", "--help"}, want: "check candidate <slug>"},
19
+ {args: []string{"check", "help"}, want: "check <candidate|readiness|seal|path-disjoint|task-graph|skill-trust|indexes>"},
20
+ {args: []string{"check", "candidate", "--help"}, want: "check candidate <slug>"},
21
+ {args: []string{"check", "readiness", "-h"}, want: "check readiness --emit-binding <slug>"},
22
+ {args: []string{"check", "seal", "--help"}, want: "check seal <slug>"},
23
+ {args: []string{"check", "path-disjoint", "--help"}, want: "check path-disjoint"},
24
+ {args: []string{"check", "task-graph", "--help"}, want: "check task-graph <slug>"},
25
+ {args: []string{"check", "skill-trust", "--help"}, want: "check skill-trust <path>"},
26
+ {args: []string{"check", "indexes", "--help"}, want: "check indexes [--root <dir>]"},
27
+ {args: []string{"state", "--help"}, want: "state <resolve|merge-manifest|close>"},
28
+ {args: []string{"state", "-h"}, want: "state resolve"},
29
+ {args: []string{"state", "help"}, want: "state close <slug>"},
30
+ {args: []string{"state", "resolve", "--help"}, want: `state resolve <qid> "<answer>"`},
31
+ {args: []string{"state", "merge-manifest", "--help"}, want: "state merge-manifest <slug>"},
32
+ {args: []string{"state", "close", "--help"}, want: "state close <slug>"},
33
+ {args: []string{"parallel", "--help"}, want: "usage: parallel <subcommand>"},
34
+ {args: []string{"parallel", "create", "--help"}, want: "usage: parallel create --root --slug --batch --base --json"},
35
+ {args: []string{"parallel", "create", "-h"}, want: "parallel create"},
36
+ {args: []string{"parallel", "select", "--help"}, want: "parallel select --cap"},
37
+ {args: []string{"observe", "--help"}, want: "observe summary"},
38
+ {args: []string{"observe", "summary", "--help"}, want: "observe summary"},
39
+ {args: []string{"observe", "slice", "--help"}, want: "observe slice <slug> <SLICE-ID>"},
40
+ {args: []string{"orient", "--help"}, want: "orient [slug]"},
41
+ {args: []string{"migrate", "--help"}, want: "migrate <slug>"},
42
+ {args: []string{"secret-scan", "--help"}, want: "secret-scan [--staged] [--stdin]"},
43
+ {args: []string{"open-visual", "--help"}, want: "open-visual <path-or-name>"},
44
+ {args: []string{"version", "--help"}, want: "devrites-engine version"},
45
+ {args: []string{"install", "--help"}, want: "usage: devrites-engine install"},
46
+ {args: []string{"update", "--help"}, want: "usage: devrites-engine update"},
47
+ {args: []string{"uninstall", "--help"}, want: "usage: devrites-engine uninstall"},
48
+ }
49
+ for _, test := range tests {
50
+ t.Run(strings.Join(test.args, " "), func(t *testing.T) {
51
+ var stdout, stderr bytes.Buffer
52
+ code := run(test.args, strings.NewReader(""), &stdout, &stderr)
53
+ if code != exitOK {
54
+ t.Fatalf("run(%q) = %d, want %d; stdout=%q stderr=%q", test.args, code, exitOK, stdout.String(), stderr.String())
55
+ }
56
+ if stderr.Len() != 0 {
57
+ t.Fatalf("run(%q) wrote stderr %q", test.args, stderr.String())
58
+ }
59
+ if !strings.Contains(stdout.String(), test.want) {
60
+ t.Fatalf("run(%q) stdout=%q, want %q", test.args, stdout.String(), test.want)
61
+ }
62
+ if strings.Contains(stdout.String(), "unknown") {
63
+ t.Fatalf("run(%q) treated help as unknown: %q", test.args, stdout.String())
64
+ }
65
+ })
66
+ }
67
+ }
68
+
69
+ func TestCommandHelpDoesNotRequireWorkspace(t *testing.T) {
70
+ t.Setenv("DEVRITES_ROOT", "")
71
+ for _, args := range [][]string{
72
+ {"state", "--help"},
73
+ {"check", "candidate", "--help"},
74
+ {"orient", "--help"},
75
+ {"migrate", "--help"},
76
+ {"parallel", "create", "--help"},
77
+ } {
78
+ var stdout, stderr bytes.Buffer
79
+ code := run(args, strings.NewReader(""), &stdout, &stderr)
80
+ if code != exitOK || stderr.Len() != 0 || !strings.Contains(stdout.String(), "usage:") {
81
+ t.Fatalf("run(%q) code=%d stdout=%q stderr=%q", args, code, stdout.String(), stderr.String())
82
+ }
83
+ if strings.Contains(stdout.String()+stderr.String(), "root selection") {
84
+ t.Fatalf("run(%q) required a workspace for help", args)
85
+ }
86
+ }
87
+ }
88
+
89
+ func TestUnknownCommandHelpStillUnknown(t *testing.T) {
90
+ var stdout, stderr bytes.Buffer
91
+ args := []string{"frobnicate", "--help"}
92
+ if code := run(args, strings.NewReader(""), &stdout, &stderr); code != exitUsage {
93
+ t.Fatalf("run(%q) = %d, want %d", args, code, exitUsage)
94
+ }
95
+ if !strings.Contains(stderr.String(), `unknown command "frobnicate"`) {
96
+ t.Fatalf("stderr = %q, want unknown-command diagnostic", stderr.String())
97
+ }
98
+ }
@@ -17,10 +17,12 @@ const (
17
17
  CodexSkillsTarget = ".agents/skills"
18
18
  OmpSkillsTarget = ".omp/skills"
19
19
  PiSkillsTarget = ".pi/skills"
20
+ DevinSkillsTarget = ".devin/skills"
20
21
  ClaudeAgentsTarget = ".claude/agents"
21
22
  CodexAgentsTarget = ".codex/agents"
22
23
  OmpAgentsTarget = ".omp/agents"
23
24
  PiAgentsTarget = ".pi/agents"
25
+ DevinAgentsTarget = ".devin/agents"
24
26
  PiPromptsTarget = ".pi/prompts"
25
27
  ClaudeWorkflowsTarget = ".claude/workflows"
26
28