devrites 4.7.0 → 5.1.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 (790) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/NOTICE.md +6 -0
  3. package/README.md +33 -10
  4. package/SECURITY.md +3 -3
  5. package/bin/devrites.mjs +1 -0
  6. package/docs/adr/0027-content-bound-build-readiness.md +8 -0
  7. package/docs/adr/README.md +1 -1
  8. package/docs/architecture.md +8 -4
  9. package/docs/command-map.md +3 -2
  10. package/docs/engine/commands.md +10 -8
  11. package/docs/flow.md +1 -1
  12. package/docs/orchestration.md +4 -2
  13. package/docs/quick-reference.md +5 -0
  14. package/docs/release.md +55 -7
  15. package/docs/skills.md +3 -3
  16. package/docs/usage.md +1 -0
  17. package/engine/.golangci.yml +27 -0
  18. package/engine/AGENTS.md +24 -0
  19. package/engine/Makefile +20 -5
  20. package/engine/cmd/releasepack/main.go +2 -2
  21. package/engine/cmd/releasepack/main_test.go +4 -4
  22. package/engine/commands.go +4 -0
  23. package/engine/internal/devritespaths/paths.go +3 -0
  24. package/engine/internal/fsutil/copy.go +2 -0
  25. package/engine/internal/gate/gate.go +30 -0
  26. package/engine/internal/gate/readiness_binding.go +10 -7
  27. package/engine/internal/gate/readiness_binding_test.go +43 -1
  28. package/engine/internal/hostpack/hostpack.go +23 -5
  29. package/engine/internal/hostpack/hostpack_test.go +41 -5
  30. package/engine/internal/install/apply.go +14 -4
  31. package/engine/internal/install/binary.go +5 -1
  32. package/engine/internal/install/install.go +13 -3
  33. package/engine/internal/install/install_test.go +12 -5
  34. package/engine/internal/install/manifest.go +3 -0
  35. package/engine/internal/install/merge.go +5 -0
  36. package/engine/internal/install/preflight.go +4 -3
  37. package/engine/internal/install/update.go +2 -1
  38. package/engine/internal/lib/candidate.go +4 -2
  39. package/engine/internal/lib/candidate_test.go +1 -1
  40. package/engine/internal/lib/environment_report.go +109 -0
  41. package/engine/internal/lib/environment_report_test.go +54 -0
  42. package/engine/internal/lib/migrate.go +1 -0
  43. package/engine/internal/lib/open_visual.go +5 -0
  44. package/engine/internal/lib/resolve.go +3 -0
  45. package/engine/internal/lib/secretscan.go +1 -0
  46. package/engine/internal/lib/skilltrust.go +2 -1
  47. package/engine/internal/lib/util.go +1 -0
  48. package/engine/internal/lib/workspace_read.go +1 -0
  49. package/engine/internal/markdowntext/markdowntext_fuzz_test.go +36 -0
  50. package/engine/internal/parallel/cli.go +1 -0
  51. package/engine/internal/parallel/git.go +1 -0
  52. package/engine/internal/parallel/lease.go +13 -2
  53. package/engine/internal/parallel/ops.go +3 -3
  54. package/engine/internal/parallel/parallel_test.go +104 -0
  55. package/engine/internal/parallel/pathdisjoint.go +6 -0
  56. package/engine/internal/parallel/pathdisjoint_fuzz_test.go +43 -0
  57. package/engine/internal/parallel/pathdisjoint_test.go +4 -1
  58. package/engine/internal/parallel/testdata/fuzz/FuzzPathDisjoint/a449b81b4711b7b4 +3 -0
  59. package/engine/internal/release/release.go +8 -4
  60. package/engine/internal/rootfacts/facts.go +3 -0
  61. package/engine/internal/safepath/safepath_fuzz_test.go +21 -0
  62. package/engine/internal/state/acceptance.go +87 -0
  63. package/engine/internal/state/acceptance_test.go +57 -0
  64. package/engine/internal/state/cursor.go +55 -14
  65. package/engine/internal/state/cursor_fuzz_test.go +80 -0
  66. package/engine/internal/state/lock_unix.go +1 -0
  67. package/engine/internal/state/observation.go +3 -3
  68. package/engine/internal/state/observation_test.go +1 -1
  69. package/engine/internal/state/taskgraph_fuzz_test.go +38 -0
  70. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/114b28f68c1fa4db +4 -0
  71. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/378a0f2218e812ea +4 -0
  72. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/39eaa26fcb481e3c +4 -0
  73. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/776ca1dc0143acf0 +4 -0
  74. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/9295930c1ebb81df +4 -0
  75. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/a60de309dc33be0d +4 -0
  76. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f04dc7b06ef7c99f +4 -0
  77. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f3000ac510878bd6 +4 -0
  78. package/engine/internal/state/testdata/fuzz/FuzzWorkspaceSchemaRow/a75aabb9f2a847d5 +2 -0
  79. package/engine/internal/state/workspaceschema_fuzz_test.go +27 -0
  80. package/engine/internal/state/write.go +3 -2
  81. package/engine/internal/testutil/testutil.go +4 -2
  82. package/engine/main.go +19 -1
  83. package/engine/observation_contract_test.go +174 -0
  84. package/engine/root_routing_test.go +14 -3
  85. package/engine/tests/adr_0027_readiness_binding_test.go +1 -1
  86. package/engine/tests/cli_test.go +2 -2
  87. package/engine/tests/gate_test.go +2 -2
  88. package/pack/.claude/agents/devrites-code-reviewer.md +10 -8
  89. package/pack/.claude/agents/devrites-devex-reviewer.md +4 -6
  90. package/pack/.claude/agents/devrites-evidence-scout.md +13 -2
  91. package/pack/.claude/agents/devrites-frontend-reviewer.md +35 -15
  92. package/pack/.claude/agents/devrites-performance-reviewer.md +4 -7
  93. package/pack/.claude/agents/devrites-plan-reviewer.md +5 -3
  94. package/pack/.claude/agents/devrites-proof-runner.md +1 -1
  95. package/pack/.claude/agents/devrites-retrospector.md +7 -1
  96. package/pack/.claude/agents/devrites-security-auditor.md +6 -5
  97. package/pack/.claude/agents/devrites-simplifier-reviewer.md +3 -2
  98. package/pack/.claude/agents/devrites-slice-wright.md +7 -11
  99. package/pack/.claude/agents/devrites-spec-reviewer.md +3 -2
  100. package/pack/.claude/agents/devrites-strategy-reviewer.md +4 -4
  101. package/pack/.claude/agents/devrites-test-analyst.md +2 -1
  102. package/pack/.claude/skills/devrites-api-interface/SKILL.md +9 -9
  103. package/pack/.claude/skills/devrites-audit/SKILL.md +3 -1
  104. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +9 -2
  105. package/pack/.claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +3 -10
  106. package/pack/.claude/skills/devrites-debug-recovery/reference/regression-test.md +1 -1
  107. package/pack/.claude/skills/devrites-doubt/SKILL.md +5 -7
  108. package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +6 -16
  109. package/pack/.claude/skills/devrites-frontend-craft/reference/craft.md +5 -13
  110. package/pack/.claude/skills/devrites-frontend-craft/reference/design-references.md +2 -3
  111. package/pack/.claude/skills/devrites-frontend-craft/reference/fullstack.md +4 -3
  112. package/pack/.claude/skills/devrites-frontend-craft/reference/quality-standards.md +76 -20
  113. package/pack/.claude/skills/devrites-frontend-craft/reference/reuse-first.md +4 -9
  114. package/pack/.claude/skills/devrites-frontend-craft/reference/shape.md +3 -7
  115. package/pack/.claude/skills/devrites-interview/SKILL.md +4 -3
  116. package/pack/.claude/skills/devrites-lib/SKILL.md +2 -1
  117. package/pack/.claude/skills/devrites-lib/reference/candidate-integrity.md +1 -9
  118. package/pack/.claude/skills/devrites-lib/reference/intent-map.md +20 -3
  119. package/pack/.claude/skills/devrites-lib/reference/orchestration-profiles.md +5 -0
  120. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +34 -4
  121. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +6 -3
  122. package/pack/.claude/skills/devrites-lib/reference/standards/README.md +7 -0
  123. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +34 -15
  124. package/pack/.claude/skills/devrites-lib/reference/standards/agents.md +13 -5
  125. package/pack/.claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +19 -3
  126. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +1 -1
  127. package/pack/.claude/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  128. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +19 -1
  129. package/pack/.claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -4
  130. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +34 -10
  131. package/pack/.claude/skills/devrites-lib/reference/standards/data-integrity.md +24 -5
  132. package/pack/.claude/skills/devrites-lib/reference/standards/debug-recovery.md +8 -1
  133. package/pack/.claude/skills/devrites-lib/reference/standards/definition-of-done.md +14 -11
  134. package/pack/.claude/skills/devrites-lib/reference/standards/documentation.md +4 -1
  135. package/pack/.claude/skills/devrites-lib/reference/standards/edge-case-trace.md +2 -2
  136. package/pack/.claude/skills/devrites-lib/reference/standards/elicitation.md +1 -1
  137. package/pack/.claude/skills/devrites-lib/reference/standards/error-handling.md +2 -2
  138. package/pack/.claude/skills/devrites-lib/reference/standards/integration-reliability.md +14 -3
  139. package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +2 -2
  140. package/pack/.claude/skills/devrites-lib/reference/standards/observability.md +6 -1
  141. package/pack/.claude/skills/devrites-lib/reference/standards/one-shot-actions.md +2 -2
  142. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +20 -0
  143. package/pack/.claude/skills/devrites-lib/reference/standards/prose-style.md +7 -0
  144. package/pack/.claude/skills/devrites-lib/reference/standards/repository-topology.md +3 -2
  145. package/pack/.claude/skills/devrites-lib/reference/standards/review-checklist.md +7 -5
  146. package/pack/.claude/skills/devrites-lib/reference/standards/security-checklist.md +10 -1
  147. package/pack/.claude/skills/devrites-lib/reference/standards/security.md +100 -11
  148. package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +48 -2
  149. package/pack/.claude/skills/devrites-lib/reference/standards/spec-grammar.md +28 -26
  150. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +22 -2
  151. package/pack/.claude/skills/devrites-lib/reference/standards/tooling.md +40 -12
  152. package/pack/.claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +24 -8
  153. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/code.md +0 -2
  154. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/comparison.md +0 -2
  155. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/diagram.md +1 -3
  156. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/index.md +2 -4
  157. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/input.md +1 -2
  158. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/plan.md +1 -2
  159. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/slides.md +0 -2
  160. package/pack/.claude/skills/devrites-lib/reference/visual-playbooks/table.md +0 -2
  161. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +7 -5
  162. package/pack/.claude/skills/devrites-prose-craft/SKILL.md +11 -7
  163. package/pack/.claude/skills/devrites-prose-craft/reference/banned-phrases.md +41 -4
  164. package/pack/.claude/skills/devrites-prose-craft/reference/examples.md +31 -2
  165. package/pack/.claude/skills/devrites-prose-craft/reference/structures.md +62 -0
  166. package/pack/.claude/skills/devrites-source-driven/SKILL.md +11 -12
  167. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +5 -6
  168. package/pack/.claude/skills/rite/SKILL.md +3 -1
  169. package/pack/.claude/skills/rite-adopt/SKILL.md +9 -8
  170. package/pack/.claude/skills/rite-autocomplete/SKILL.md +9 -6
  171. package/pack/.claude/skills/rite-build/SKILL.md +13 -8
  172. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +2 -2
  173. package/pack/.claude/skills/rite-build/reference/checkpoint.md +3 -1
  174. package/pack/.claude/skills/rite-build/reference/one-slice-cycle.md +7 -5
  175. package/pack/.claude/skills/rite-build/reference/output.md +2 -2
  176. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +32 -9
  177. package/pack/.claude/skills/rite-build/reference/phase-contract.md +6 -5
  178. package/pack/.claude/skills/rite-build/reference/tdd.md +3 -2
  179. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +7 -7
  180. package/pack/.claude/skills/rite-clarify/SKILL.md +6 -5
  181. package/pack/.claude/skills/rite-converge/SKILL.md +8 -7
  182. package/pack/.claude/skills/rite-converge/reference/anti-patterns.md +1 -1
  183. package/pack/.claude/skills/rite-customize/SKILL.md +9 -0
  184. package/pack/.claude/skills/rite-define/SKILL.md +4 -7
  185. package/pack/.claude/skills/rite-define/reference/anti-patterns.md +1 -1
  186. package/pack/.claude/skills/rite-define/reference/gates.md +6 -5
  187. package/pack/.claude/skills/rite-define/reference/plan-template.md +2 -2
  188. package/pack/.claude/skills/rite-dogfood/SKILL.md +10 -4
  189. package/pack/.claude/skills/rite-explain/SKILL.md +9 -5
  190. package/pack/.claude/skills/rite-explain/reference/intake.md +2 -1
  191. package/pack/.claude/skills/rite-frame/SKILL.md +1 -1
  192. package/pack/.claude/skills/rite-handoff/SKILL.md +1 -1
  193. package/pack/.claude/skills/rite-learn/SKILL.md +18 -4
  194. package/pack/.claude/skills/rite-plan/SKILL.md +4 -4
  195. package/pack/.claude/skills/rite-plan/reference/anti-patterns.md +2 -2
  196. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +24 -0
  197. package/pack/.claude/skills/rite-polish/SKILL.md +9 -6
  198. package/pack/.claude/skills/rite-polish/reference/anti-ai-slop.md +20 -0
  199. package/pack/.claude/skills/rite-polish/reference/browser-polish-evidence.md +3 -1
  200. package/pack/.claude/skills/rite-polish/reference/code.md +1 -19
  201. package/pack/.claude/skills/rite-polish/reference/harden-checklist.md +1 -1
  202. package/pack/.claude/skills/rite-polish/reference/ledger.md +3 -0
  203. package/pack/.claude/skills/rite-polish/reference/ui.md +4 -3
  204. package/pack/.claude/skills/rite-pov/SKILL.md +16 -1
  205. package/pack/.claude/skills/rite-pr-feedback/SKILL.md +1 -1
  206. package/pack/.claude/skills/rite-pressure-test/SKILL.md +2 -1
  207. package/pack/.claude/skills/rite-prototype/SKILL.md +2 -2
  208. package/pack/.claude/skills/rite-prove/SKILL.md +6 -6
  209. package/pack/.claude/skills/rite-prove/reference/acceptance-proof.md +8 -9
  210. package/pack/.claude/skills/rite-prove/reference/browser-proof.md +5 -3
  211. package/pack/.claude/skills/rite-prove/reference/test-command-discovery.md +0 -1
  212. package/pack/.claude/skills/rite-quick/SKILL.md +6 -4
  213. package/pack/.claude/skills/rite-resolve/SKILL.md +5 -4
  214. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +1 -1
  215. package/pack/.claude/skills/rite-review/SKILL.md +18 -27
  216. package/pack/.claude/skills/rite-review/reference/cognitive-load.md +0 -2
  217. package/pack/.claude/skills/rite-review/reference/five-axis-review.md +3 -3
  218. package/pack/.claude/skills/rite-review/reference/nielsen-heuristics.md +3 -7
  219. package/pack/.claude/skills/rite-seal/SKILL.md +7 -3
  220. package/pack/.claude/skills/rite-seal/reference/final-evidence.md +5 -6
  221. package/pack/.claude/skills/rite-seal/reference/risk-and-rollback.md +1 -1
  222. package/pack/.claude/skills/rite-seal/reference/seal-template.md +2 -0
  223. package/pack/.claude/skills/rite-ship/SKILL.md +3 -2
  224. package/pack/.claude/skills/rite-ship/reference/close-out.md +25 -5
  225. package/pack/.claude/skills/rite-ship/reference/rollout.md +1 -1
  226. package/pack/.claude/skills/rite-spec/SKILL.md +2 -1
  227. package/pack/.claude/skills/rite-spec/reference/anti-patterns.md +0 -1
  228. package/pack/.claude/skills/rite-spec/reference/investigation.md +1 -3
  229. package/pack/.claude/skills/rite-spec/reference/spec-checklists.md +1 -1
  230. package/pack/.claude/skills/rite-spec/reference/spec-template.md +1 -1
  231. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +6 -3
  232. package/pack/.claude/skills/rite-status/SKILL.md +3 -1
  233. package/pack/.claude/skills/rite-temper/SKILL.md +9 -9
  234. package/pack/.claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  235. package/pack/.claude/skills/rite-temper/reference/scope-modes.md +2 -2
  236. package/pack/.claude/skills/rite-temper/reference/significance.md +4 -4
  237. package/pack/.claude/skills/rite-temper/reference/strategy-template.md +6 -6
  238. package/pack/.claude/skills/rite-upgrade/SKILL.md +2 -2
  239. package/pack/.claude/skills/rite-vet/SKILL.md +14 -10
  240. package/pack/.claude/skills/rite-vet/reference/artifacts.md +9 -1
  241. package/pack/.claude/skills/rite-vet/reference/review-axes.md +14 -2
  242. package/pack/.claude/skills/rite-watch-pr/SKILL.md +2 -2
  243. package/pack/.claude/skills/rite-zoom-out/SKILL.md +4 -4
  244. package/pack/generated/README.md +4 -2
  245. package/pack/generated/claude/agents/devrites-code-reviewer.md +10 -8
  246. package/pack/generated/claude/agents/devrites-devex-reviewer.md +4 -6
  247. package/pack/generated/claude/agents/devrites-evidence-scout.md +13 -2
  248. package/pack/generated/claude/agents/devrites-frontend-reviewer.md +35 -15
  249. package/pack/generated/claude/agents/devrites-performance-reviewer.md +4 -7
  250. package/pack/generated/claude/agents/devrites-plan-reviewer.md +5 -3
  251. package/pack/generated/claude/agents/devrites-proof-runner.md +1 -1
  252. package/pack/generated/claude/agents/devrites-retrospector.md +7 -1
  253. package/pack/generated/claude/agents/devrites-security-auditor.md +6 -5
  254. package/pack/generated/claude/agents/devrites-simplifier-reviewer.md +3 -2
  255. package/pack/generated/claude/agents/devrites-slice-wright.md +7 -11
  256. package/pack/generated/claude/agents/devrites-spec-reviewer.md +3 -2
  257. package/pack/generated/claude/agents/devrites-strategy-reviewer.md +4 -4
  258. package/pack/generated/claude/agents/devrites-test-analyst.md +2 -1
  259. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +9 -9
  260. package/pack/generated/claude/skills/devrites-audit/SKILL.md +3 -1
  261. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +9 -2
  262. package/pack/generated/claude/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +3 -10
  263. package/pack/generated/claude/skills/devrites-debug-recovery/reference/regression-test.md +1 -1
  264. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +5 -7
  265. package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +6 -16
  266. package/pack/generated/claude/skills/devrites-frontend-craft/reference/craft.md +5 -13
  267. package/pack/generated/claude/skills/devrites-frontend-craft/reference/design-references.md +2 -3
  268. package/pack/generated/claude/skills/devrites-frontend-craft/reference/fullstack.md +4 -3
  269. package/pack/generated/claude/skills/devrites-frontend-craft/reference/quality-standards.md +76 -20
  270. package/pack/generated/claude/skills/devrites-frontend-craft/reference/reuse-first.md +4 -9
  271. package/pack/generated/claude/skills/devrites-frontend-craft/reference/shape.md +3 -7
  272. package/pack/generated/claude/skills/devrites-interview/SKILL.md +4 -3
  273. package/pack/generated/claude/skills/devrites-lib/SKILL.md +2 -1
  274. package/pack/generated/claude/skills/devrites-lib/reference/candidate-integrity.md +1 -9
  275. package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +20 -3
  276. package/pack/generated/claude/skills/devrites-lib/reference/orchestration-profiles.md +5 -0
  277. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +34 -4
  278. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +6 -3
  279. package/pack/generated/claude/skills/devrites-lib/reference/standards/README.md +7 -0
  280. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +34 -15
  281. package/pack/generated/claude/skills/devrites-lib/reference/standards/agents.md +13 -5
  282. package/pack/generated/claude/skills/devrites-lib/reference/standards/browser-proof-checklist.md +19 -3
  283. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +1 -1
  284. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  285. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +19 -1
  286. package/pack/generated/claude/skills/devrites-lib/reference/standards/context-hygiene.md +8 -4
  287. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +34 -10
  288. package/pack/generated/claude/skills/devrites-lib/reference/standards/data-integrity.md +24 -5
  289. package/pack/generated/claude/skills/devrites-lib/reference/standards/debug-recovery.md +8 -1
  290. package/pack/generated/claude/skills/devrites-lib/reference/standards/definition-of-done.md +14 -11
  291. package/pack/generated/claude/skills/devrites-lib/reference/standards/documentation.md +4 -1
  292. package/pack/generated/claude/skills/devrites-lib/reference/standards/edge-case-trace.md +2 -2
  293. package/pack/generated/claude/skills/devrites-lib/reference/standards/elicitation.md +1 -1
  294. package/pack/generated/claude/skills/devrites-lib/reference/standards/error-handling.md +2 -2
  295. package/pack/generated/claude/skills/devrites-lib/reference/standards/integration-reliability.md +14 -3
  296. package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +2 -2
  297. package/pack/generated/claude/skills/devrites-lib/reference/standards/observability.md +6 -1
  298. package/pack/generated/claude/skills/devrites-lib/reference/standards/one-shot-actions.md +2 -2
  299. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +20 -0
  300. package/pack/generated/claude/skills/devrites-lib/reference/standards/prose-style.md +7 -0
  301. package/pack/generated/claude/skills/devrites-lib/reference/standards/repository-topology.md +3 -2
  302. package/pack/generated/claude/skills/devrites-lib/reference/standards/review-checklist.md +7 -5
  303. package/pack/generated/claude/skills/devrites-lib/reference/standards/security-checklist.md +10 -1
  304. package/pack/generated/claude/skills/devrites-lib/reference/standards/security.md +100 -11
  305. package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +48 -2
  306. package/pack/generated/claude/skills/devrites-lib/reference/standards/spec-grammar.md +28 -26
  307. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +22 -2
  308. package/pack/generated/claude/skills/devrites-lib/reference/standards/tooling.md +40 -12
  309. package/pack/generated/claude/skills/devrites-lib/reference/standards/workflow-artifacts.md +24 -8
  310. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/code.md +0 -2
  311. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/comparison.md +0 -2
  312. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/diagram.md +1 -3
  313. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/index.md +2 -4
  314. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/input.md +1 -2
  315. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/plan.md +1 -2
  316. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/slides.md +0 -2
  317. package/pack/generated/claude/skills/devrites-lib/reference/visual-playbooks/table.md +0 -2
  318. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +7 -5
  319. package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +11 -7
  320. package/pack/generated/claude/skills/devrites-prose-craft/reference/banned-phrases.md +41 -4
  321. package/pack/generated/claude/skills/devrites-prose-craft/reference/examples.md +31 -2
  322. package/pack/generated/claude/skills/devrites-prose-craft/reference/structures.md +62 -0
  323. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +11 -12
  324. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +5 -6
  325. package/pack/generated/claude/skills/rite/SKILL.md +3 -1
  326. package/pack/generated/claude/skills/rite-adopt/SKILL.md +9 -8
  327. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +9 -6
  328. package/pack/generated/claude/skills/rite-build/SKILL.md +13 -8
  329. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +2 -2
  330. package/pack/generated/claude/skills/rite-build/reference/checkpoint.md +3 -1
  331. package/pack/generated/claude/skills/rite-build/reference/one-slice-cycle.md +7 -5
  332. package/pack/generated/claude/skills/rite-build/reference/output.md +2 -2
  333. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +32 -9
  334. package/pack/generated/claude/skills/rite-build/reference/phase-contract.md +6 -5
  335. package/pack/generated/claude/skills/rite-build/reference/tdd.md +3 -2
  336. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +7 -7
  337. package/pack/generated/claude/skills/rite-clarify/SKILL.md +6 -5
  338. package/pack/generated/claude/skills/rite-converge/SKILL.md +8 -7
  339. package/pack/generated/claude/skills/rite-converge/reference/anti-patterns.md +1 -1
  340. package/pack/generated/claude/skills/rite-customize/SKILL.md +9 -0
  341. package/pack/generated/claude/skills/rite-define/SKILL.md +4 -7
  342. package/pack/generated/claude/skills/rite-define/reference/anti-patterns.md +1 -1
  343. package/pack/generated/claude/skills/rite-define/reference/gates.md +6 -5
  344. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +2 -2
  345. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +10 -4
  346. package/pack/generated/claude/skills/rite-explain/SKILL.md +9 -5
  347. package/pack/generated/claude/skills/rite-explain/reference/intake.md +2 -1
  348. package/pack/generated/claude/skills/rite-frame/SKILL.md +1 -1
  349. package/pack/generated/claude/skills/rite-handoff/SKILL.md +1 -1
  350. package/pack/generated/claude/skills/rite-learn/SKILL.md +18 -4
  351. package/pack/generated/claude/skills/rite-plan/SKILL.md +4 -4
  352. package/pack/generated/claude/skills/rite-plan/reference/anti-patterns.md +2 -2
  353. package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +24 -0
  354. package/pack/generated/claude/skills/rite-polish/SKILL.md +9 -6
  355. package/pack/generated/claude/skills/rite-polish/reference/anti-ai-slop.md +20 -0
  356. package/pack/generated/claude/skills/rite-polish/reference/browser-polish-evidence.md +3 -1
  357. package/pack/generated/claude/skills/rite-polish/reference/code.md +1 -19
  358. package/pack/generated/claude/skills/rite-polish/reference/harden-checklist.md +1 -1
  359. package/pack/generated/claude/skills/rite-polish/reference/ledger.md +3 -0
  360. package/pack/generated/claude/skills/rite-polish/reference/ui.md +4 -3
  361. package/pack/generated/claude/skills/rite-pov/SKILL.md +16 -1
  362. package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +1 -1
  363. package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +2 -1
  364. package/pack/generated/claude/skills/rite-prototype/SKILL.md +2 -2
  365. package/pack/generated/claude/skills/rite-prove/SKILL.md +6 -6
  366. package/pack/generated/claude/skills/rite-prove/reference/acceptance-proof.md +8 -9
  367. package/pack/generated/claude/skills/rite-prove/reference/browser-proof.md +5 -3
  368. package/pack/generated/claude/skills/rite-prove/reference/test-command-discovery.md +0 -1
  369. package/pack/generated/claude/skills/rite-quick/SKILL.md +6 -4
  370. package/pack/generated/claude/skills/rite-resolve/SKILL.md +5 -4
  371. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +1 -1
  372. package/pack/generated/claude/skills/rite-review/SKILL.md +18 -27
  373. package/pack/generated/claude/skills/rite-review/reference/cognitive-load.md +0 -2
  374. package/pack/generated/claude/skills/rite-review/reference/five-axis-review.md +3 -3
  375. package/pack/generated/claude/skills/rite-review/reference/nielsen-heuristics.md +3 -7
  376. package/pack/generated/claude/skills/rite-seal/SKILL.md +7 -3
  377. package/pack/generated/claude/skills/rite-seal/reference/final-evidence.md +5 -6
  378. package/pack/generated/claude/skills/rite-seal/reference/risk-and-rollback.md +1 -1
  379. package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +2 -0
  380. package/pack/generated/claude/skills/rite-ship/SKILL.md +3 -2
  381. package/pack/generated/claude/skills/rite-ship/reference/close-out.md +25 -5
  382. package/pack/generated/claude/skills/rite-ship/reference/rollout.md +1 -1
  383. package/pack/generated/claude/skills/rite-spec/SKILL.md +2 -1
  384. package/pack/generated/claude/skills/rite-spec/reference/anti-patterns.md +0 -1
  385. package/pack/generated/claude/skills/rite-spec/reference/investigation.md +1 -3
  386. package/pack/generated/claude/skills/rite-spec/reference/spec-checklists.md +1 -1
  387. package/pack/generated/claude/skills/rite-spec/reference/spec-template.md +1 -1
  388. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +6 -3
  389. package/pack/generated/claude/skills/rite-status/SKILL.md +3 -1
  390. package/pack/generated/claude/skills/rite-temper/SKILL.md +9 -9
  391. package/pack/generated/claude/skills/rite-temper/reference/review-dimensions.md +2 -2
  392. package/pack/generated/claude/skills/rite-temper/reference/scope-modes.md +2 -2
  393. package/pack/generated/claude/skills/rite-temper/reference/significance.md +4 -4
  394. package/pack/generated/claude/skills/rite-temper/reference/strategy-template.md +6 -6
  395. package/pack/generated/claude/skills/rite-upgrade/SKILL.md +2 -2
  396. package/pack/generated/claude/skills/rite-vet/SKILL.md +14 -10
  397. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +9 -1
  398. package/pack/generated/claude/skills/rite-vet/reference/review-axes.md +14 -2
  399. package/pack/generated/claude/skills/rite-watch-pr/SKILL.md +2 -2
  400. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +4 -4
  401. package/pack/generated/codex/agents/devrites-code-reviewer.toml +10 -8
  402. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +4 -6
  403. package/pack/generated/codex/agents/devrites-evidence-scout.toml +13 -2
  404. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +35 -15
  405. package/pack/generated/codex/agents/devrites-performance-reviewer.toml +4 -7
  406. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +5 -3
  407. package/pack/generated/codex/agents/devrites-proof-runner.toml +1 -1
  408. package/pack/generated/codex/agents/devrites-retrospector.toml +7 -1
  409. package/pack/generated/codex/agents/devrites-security-auditor.toml +6 -5
  410. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +3 -2
  411. package/pack/generated/codex/agents/devrites-slice-wright.toml +7 -11
  412. package/pack/generated/codex/agents/devrites-spec-reviewer.toml +3 -2
  413. package/pack/generated/codex/agents/devrites-strategy-reviewer.toml +4 -4
  414. package/pack/generated/codex/agents/devrites-test-analyst.toml +2 -1
  415. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +9 -9
  416. package/pack/generated/codex/skills/devrites-audit/SKILL.md +3 -1
  417. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +9 -2
  418. package/pack/generated/codex/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +3 -10
  419. package/pack/generated/codex/skills/devrites-debug-recovery/reference/regression-test.md +1 -1
  420. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +5 -7
  421. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +6 -16
  422. package/pack/generated/codex/skills/devrites-frontend-craft/reference/craft.md +5 -13
  423. package/pack/generated/codex/skills/devrites-frontend-craft/reference/design-references.md +2 -3
  424. package/pack/generated/codex/skills/devrites-frontend-craft/reference/fullstack.md +4 -3
  425. package/pack/generated/codex/skills/devrites-frontend-craft/reference/quality-standards.md +76 -20
  426. package/pack/generated/codex/skills/devrites-frontend-craft/reference/reuse-first.md +4 -9
  427. package/pack/generated/codex/skills/devrites-frontend-craft/reference/shape.md +3 -7
  428. package/pack/generated/codex/skills/devrites-interview/SKILL.md +4 -3
  429. package/pack/generated/codex/skills/devrites-lib/SKILL.md +2 -1
  430. package/pack/generated/codex/skills/devrites-lib/reference/candidate-integrity.md +1 -9
  431. package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +20 -3
  432. package/pack/generated/codex/skills/devrites-lib/reference/orchestration-profiles.md +5 -0
  433. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +34 -4
  434. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +6 -3
  435. package/pack/generated/codex/skills/devrites-lib/reference/standards/README.md +7 -0
  436. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +34 -15
  437. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +13 -5
  438. package/pack/generated/codex/skills/devrites-lib/reference/standards/browser-proof-checklist.md +19 -3
  439. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +1 -1
  440. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  441. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +19 -1
  442. package/pack/generated/codex/skills/devrites-lib/reference/standards/context-hygiene.md +8 -4
  443. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +34 -10
  444. package/pack/generated/codex/skills/devrites-lib/reference/standards/data-integrity.md +24 -5
  445. package/pack/generated/codex/skills/devrites-lib/reference/standards/debug-recovery.md +8 -1
  446. package/pack/generated/codex/skills/devrites-lib/reference/standards/definition-of-done.md +14 -11
  447. package/pack/generated/codex/skills/devrites-lib/reference/standards/documentation.md +4 -1
  448. package/pack/generated/codex/skills/devrites-lib/reference/standards/edge-case-trace.md +2 -2
  449. package/pack/generated/codex/skills/devrites-lib/reference/standards/elicitation.md +1 -1
  450. package/pack/generated/codex/skills/devrites-lib/reference/standards/error-handling.md +2 -2
  451. package/pack/generated/codex/skills/devrites-lib/reference/standards/integration-reliability.md +14 -3
  452. package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +2 -2
  453. package/pack/generated/codex/skills/devrites-lib/reference/standards/observability.md +6 -1
  454. package/pack/generated/codex/skills/devrites-lib/reference/standards/one-shot-actions.md +2 -2
  455. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +20 -0
  456. package/pack/generated/codex/skills/devrites-lib/reference/standards/prose-style.md +7 -0
  457. package/pack/generated/codex/skills/devrites-lib/reference/standards/repository-topology.md +3 -2
  458. package/pack/generated/codex/skills/devrites-lib/reference/standards/review-checklist.md +7 -5
  459. package/pack/generated/codex/skills/devrites-lib/reference/standards/security-checklist.md +10 -1
  460. package/pack/generated/codex/skills/devrites-lib/reference/standards/security.md +100 -11
  461. package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +48 -2
  462. package/pack/generated/codex/skills/devrites-lib/reference/standards/spec-grammar.md +28 -26
  463. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +22 -2
  464. package/pack/generated/codex/skills/devrites-lib/reference/standards/tooling.md +40 -12
  465. package/pack/generated/codex/skills/devrites-lib/reference/standards/workflow-artifacts.md +24 -8
  466. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/code.md +0 -2
  467. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/comparison.md +0 -2
  468. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/diagram.md +1 -3
  469. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/index.md +2 -4
  470. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/input.md +1 -2
  471. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/plan.md +1 -2
  472. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/slides.md +0 -2
  473. package/pack/generated/codex/skills/devrites-lib/reference/visual-playbooks/table.md +0 -2
  474. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +7 -5
  475. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +11 -7
  476. package/pack/generated/codex/skills/devrites-prose-craft/reference/banned-phrases.md +41 -4
  477. package/pack/generated/codex/skills/devrites-prose-craft/reference/examples.md +31 -2
  478. package/pack/generated/codex/skills/devrites-prose-craft/reference/structures.md +62 -0
  479. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +11 -12
  480. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +5 -6
  481. package/pack/generated/codex/skills/rite/SKILL.md +3 -1
  482. package/pack/generated/codex/skills/rite-adopt/SKILL.md +9 -8
  483. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +9 -6
  484. package/pack/generated/codex/skills/rite-build/SKILL.md +13 -8
  485. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +2 -2
  486. package/pack/generated/codex/skills/rite-build/reference/checkpoint.md +3 -1
  487. package/pack/generated/codex/skills/rite-build/reference/one-slice-cycle.md +7 -5
  488. package/pack/generated/codex/skills/rite-build/reference/output.md +2 -2
  489. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +32 -9
  490. package/pack/generated/codex/skills/rite-build/reference/phase-contract.md +6 -5
  491. package/pack/generated/codex/skills/rite-build/reference/tdd.md +3 -2
  492. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +7 -7
  493. package/pack/generated/codex/skills/rite-clarify/SKILL.md +6 -5
  494. package/pack/generated/codex/skills/rite-converge/SKILL.md +8 -7
  495. package/pack/generated/codex/skills/rite-converge/reference/anti-patterns.md +1 -1
  496. package/pack/generated/codex/skills/rite-customize/SKILL.md +9 -0
  497. package/pack/generated/codex/skills/rite-define/SKILL.md +4 -7
  498. package/pack/generated/codex/skills/rite-define/reference/anti-patterns.md +1 -1
  499. package/pack/generated/codex/skills/rite-define/reference/gates.md +6 -5
  500. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +2 -2
  501. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +10 -4
  502. package/pack/generated/codex/skills/rite-explain/SKILL.md +9 -5
  503. package/pack/generated/codex/skills/rite-explain/reference/intake.md +2 -1
  504. package/pack/generated/codex/skills/rite-frame/SKILL.md +1 -1
  505. package/pack/generated/codex/skills/rite-handoff/SKILL.md +1 -1
  506. package/pack/generated/codex/skills/rite-learn/SKILL.md +18 -4
  507. package/pack/generated/codex/skills/rite-plan/SKILL.md +4 -4
  508. package/pack/generated/codex/skills/rite-plan/reference/anti-patterns.md +2 -2
  509. package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +24 -0
  510. package/pack/generated/codex/skills/rite-polish/SKILL.md +9 -6
  511. package/pack/generated/codex/skills/rite-polish/reference/anti-ai-slop.md +20 -0
  512. package/pack/generated/codex/skills/rite-polish/reference/browser-polish-evidence.md +3 -1
  513. package/pack/generated/codex/skills/rite-polish/reference/code.md +1 -19
  514. package/pack/generated/codex/skills/rite-polish/reference/harden-checklist.md +1 -1
  515. package/pack/generated/codex/skills/rite-polish/reference/ledger.md +3 -0
  516. package/pack/generated/codex/skills/rite-polish/reference/ui.md +4 -3
  517. package/pack/generated/codex/skills/rite-pov/SKILL.md +16 -1
  518. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +1 -1
  519. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +2 -1
  520. package/pack/generated/codex/skills/rite-prototype/SKILL.md +2 -2
  521. package/pack/generated/codex/skills/rite-prove/SKILL.md +6 -6
  522. package/pack/generated/codex/skills/rite-prove/reference/acceptance-proof.md +8 -9
  523. package/pack/generated/codex/skills/rite-prove/reference/browser-proof.md +5 -3
  524. package/pack/generated/codex/skills/rite-prove/reference/test-command-discovery.md +0 -1
  525. package/pack/generated/codex/skills/rite-quick/SKILL.md +6 -4
  526. package/pack/generated/codex/skills/rite-resolve/SKILL.md +5 -4
  527. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +1 -1
  528. package/pack/generated/codex/skills/rite-review/SKILL.md +18 -27
  529. package/pack/generated/codex/skills/rite-review/reference/cognitive-load.md +0 -2
  530. package/pack/generated/codex/skills/rite-review/reference/five-axis-review.md +3 -3
  531. package/pack/generated/codex/skills/rite-review/reference/nielsen-heuristics.md +3 -7
  532. package/pack/generated/codex/skills/rite-seal/SKILL.md +7 -3
  533. package/pack/generated/codex/skills/rite-seal/reference/final-evidence.md +5 -6
  534. package/pack/generated/codex/skills/rite-seal/reference/risk-and-rollback.md +1 -1
  535. package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +2 -0
  536. package/pack/generated/codex/skills/rite-ship/SKILL.md +3 -2
  537. package/pack/generated/codex/skills/rite-ship/reference/close-out.md +25 -5
  538. package/pack/generated/codex/skills/rite-ship/reference/rollout.md +1 -1
  539. package/pack/generated/codex/skills/rite-spec/SKILL.md +2 -1
  540. package/pack/generated/codex/skills/rite-spec/reference/anti-patterns.md +0 -1
  541. package/pack/generated/codex/skills/rite-spec/reference/investigation.md +1 -3
  542. package/pack/generated/codex/skills/rite-spec/reference/spec-checklists.md +1 -1
  543. package/pack/generated/codex/skills/rite-spec/reference/spec-template.md +1 -1
  544. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +6 -3
  545. package/pack/generated/codex/skills/rite-status/SKILL.md +3 -1
  546. package/pack/generated/codex/skills/rite-temper/SKILL.md +9 -9
  547. package/pack/generated/codex/skills/rite-temper/reference/review-dimensions.md +2 -2
  548. package/pack/generated/codex/skills/rite-temper/reference/scope-modes.md +2 -2
  549. package/pack/generated/codex/skills/rite-temper/reference/significance.md +4 -4
  550. package/pack/generated/codex/skills/rite-temper/reference/strategy-template.md +6 -6
  551. package/pack/generated/codex/skills/rite-upgrade/SKILL.md +2 -2
  552. package/pack/generated/codex/skills/rite-vet/SKILL.md +14 -10
  553. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +9 -1
  554. package/pack/generated/codex/skills/rite-vet/reference/review-axes.md +14 -2
  555. package/pack/generated/codex/skills/rite-watch-pr/SKILL.md +2 -2
  556. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +4 -4
  557. package/pack/generated/omp/.omp-plugin/plugin.json +6 -0
  558. package/pack/generated/omp/agents/devrites-code-reviewer.md +138 -0
  559. package/pack/generated/omp/agents/devrites-devex-reviewer.md +123 -0
  560. package/pack/generated/omp/agents/devrites-doubt-reviewer.md +81 -0
  561. package/pack/generated/omp/agents/devrites-evidence-scout.md +71 -0
  562. package/pack/generated/omp/agents/devrites-frontend-reviewer.md +114 -0
  563. package/pack/generated/omp/agents/devrites-performance-reviewer.md +114 -0
  564. package/pack/generated/omp/agents/devrites-plan-drafter.md +82 -0
  565. package/pack/generated/omp/agents/devrites-plan-reviewer.md +132 -0
  566. package/pack/generated/omp/agents/devrites-proof-runner.md +73 -0
  567. package/pack/generated/omp/agents/devrites-retrospector.md +60 -0
  568. package/pack/generated/omp/agents/devrites-security-auditor.md +108 -0
  569. package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +93 -0
  570. package/pack/generated/omp/agents/devrites-slice-wright.md +203 -0
  571. package/pack/generated/omp/agents/devrites-spec-reviewer.md +95 -0
  572. package/pack/generated/omp/agents/devrites-strategy-reviewer.md +99 -0
  573. package/pack/generated/omp/agents/devrites-test-analyst.md +88 -0
  574. package/pack/generated/omp/agents/devrites-upgrade-planner.md +80 -0
  575. package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +61 -0
  576. package/pack/generated/omp/skills/devrites-audit/SKILL.md +50 -0
  577. package/pack/generated/omp/skills/devrites-browser-proof/SKILL.md +76 -0
  578. package/pack/generated/omp/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
  579. package/pack/generated/omp/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
  580. package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +96 -0
  581. package/pack/generated/omp/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
  582. package/pack/generated/omp/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
  583. package/pack/generated/omp/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
  584. package/pack/generated/omp/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  585. package/pack/generated/omp/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
  586. package/pack/generated/omp/skills/devrites-debug-recovery/reference/trace.md +25 -0
  587. package/pack/generated/omp/skills/devrites-doubt/SKILL.md +86 -0
  588. package/pack/generated/omp/skills/devrites-frontend-craft/SKILL.md +86 -0
  589. package/pack/generated/omp/skills/devrites-frontend-craft/reference/craft.md +63 -0
  590. package/pack/generated/omp/skills/devrites-frontend-craft/reference/design-references.md +116 -0
  591. package/pack/generated/omp/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
  592. package/pack/generated/omp/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
  593. package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
  594. package/pack/generated/omp/skills/devrites-frontend-craft/reference/shape.md +56 -0
  595. package/pack/generated/omp/skills/devrites-interview/SKILL.md +102 -0
  596. package/pack/generated/omp/skills/devrites-lib/SKILL.md +58 -0
  597. package/pack/generated/omp/skills/devrites-lib/reference/candidate-integrity.md +43 -0
  598. package/pack/generated/omp/skills/devrites-lib/reference/intent-map.md +64 -0
  599. package/pack/generated/omp/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
  600. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +74 -0
  601. package/pack/generated/omp/skills/devrites-lib/reference/reply-contract.md +88 -0
  602. package/pack/generated/omp/skills/devrites-lib/reference/standards/README.md +60 -0
  603. package/pack/generated/omp/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
  604. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +345 -0
  605. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +98 -0
  606. package/pack/generated/omp/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
  607. package/pack/generated/omp/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
  608. package/pack/generated/omp/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
  609. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  610. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-review.md +108 -0
  611. package/pack/generated/omp/skills/devrites-lib/reference/standards/coding-style.md +48 -0
  612. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +89 -0
  613. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +167 -0
  614. package/pack/generated/omp/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
  615. package/pack/generated/omp/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
  616. package/pack/generated/omp/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
  617. package/pack/generated/omp/skills/devrites-lib/reference/standards/deprecation.md +31 -0
  618. package/pack/generated/omp/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
  619. package/pack/generated/omp/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
  620. package/pack/generated/omp/skills/devrites-lib/reference/standards/documentation.md +43 -0
  621. package/pack/generated/omp/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
  622. package/pack/generated/omp/skills/devrites-lib/reference/standards/elicitation.md +85 -0
  623. package/pack/generated/omp/skills/devrites-lib/reference/standards/error-handling.md +47 -0
  624. package/pack/generated/omp/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
  625. package/pack/generated/omp/skills/devrites-lib/reference/standards/hooks.md +25 -0
  626. package/pack/generated/omp/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
  627. package/pack/generated/omp/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
  628. package/pack/generated/omp/skills/devrites-lib/reference/standards/observability.md +88 -0
  629. package/pack/generated/omp/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
  630. package/pack/generated/omp/skills/devrites-lib/reference/standards/patterns.md +68 -0
  631. package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +51 -0
  632. package/pack/generated/omp/skills/devrites-lib/reference/standards/principles.md +42 -0
  633. package/pack/generated/omp/skills/devrites-lib/reference/standards/prose-style.md +123 -0
  634. package/pack/generated/omp/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
  635. package/pack/generated/omp/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
  636. package/pack/generated/omp/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
  637. package/pack/generated/omp/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
  638. package/pack/generated/omp/skills/devrites-lib/reference/standards/security.md +202 -0
  639. package/pack/generated/omp/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
  640. package/pack/generated/omp/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
  641. package/pack/generated/omp/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
  642. package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +212 -0
  643. package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +92 -0
  644. package/pack/generated/omp/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
  645. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
  646. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
  647. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
  648. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
  649. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
  650. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
  651. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
  652. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
  653. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
  654. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +228 -0
  655. package/pack/generated/omp/skills/devrites-prose-craft/SKILL.md +73 -0
  656. package/pack/generated/omp/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
  657. package/pack/generated/omp/skills/devrites-prose-craft/reference/examples.md +131 -0
  658. package/pack/generated/omp/skills/devrites-prose-craft/reference/structures.md +196 -0
  659. package/pack/generated/omp/skills/devrites-source-driven/SKILL.md +52 -0
  660. package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +134 -0
  661. package/pack/generated/omp/skills/devrites-ux-shape/reference/brief-template.md +108 -0
  662. package/pack/generated/omp/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
  663. package/pack/generated/omp/skills/rite/SKILL.md +148 -0
  664. package/pack/generated/omp/skills/rite/reference/menu.md +48 -0
  665. package/pack/generated/omp/skills/rite-adopt/SKILL.md +52 -0
  666. package/pack/generated/omp/skills/rite-adopt/reference/adoption.md +19 -0
  667. package/pack/generated/omp/skills/rite-adopt/reference/anti-patterns.md +19 -0
  668. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +122 -0
  669. package/pack/generated/omp/skills/rite-autocomplete/reference/decision-policy.md +41 -0
  670. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +116 -0
  671. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +92 -0
  672. package/pack/generated/omp/skills/rite-build/SKILL.md +81 -0
  673. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +145 -0
  674. package/pack/generated/omp/skills/rite-build/reference/anti-patterns.md +23 -0
  675. package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +120 -0
  676. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +46 -0
  677. package/pack/generated/omp/skills/rite-build/reference/frontend-trigger.md +39 -0
  678. package/pack/generated/omp/skills/rite-build/reference/one-slice-cycle.md +47 -0
  679. package/pack/generated/omp/skills/rite-build/reference/output.md +33 -0
  680. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +87 -0
  681. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +67 -0
  682. package/pack/generated/omp/skills/rite-build/reference/spec-drift-guard.md +59 -0
  683. package/pack/generated/omp/skills/rite-build/reference/tdd.md +27 -0
  684. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +86 -0
  685. package/pack/generated/omp/skills/rite-clarify/SKILL.md +99 -0
  686. package/pack/generated/omp/skills/rite-clarify/reference/anti-patterns.md +24 -0
  687. package/pack/generated/omp/skills/rite-clarify/reference/decision-coverage.md +55 -0
  688. package/pack/generated/omp/skills/rite-converge/SKILL.md +140 -0
  689. package/pack/generated/omp/skills/rite-converge/reference/anti-patterns.md +35 -0
  690. package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +65 -0
  691. package/pack/generated/omp/skills/rite-customize/SKILL.md +60 -0
  692. package/pack/generated/omp/skills/rite-define/SKILL.md +166 -0
  693. package/pack/generated/omp/skills/rite-define/reference/anti-patterns.md +26 -0
  694. package/pack/generated/omp/skills/rite-define/reference/gates.md +154 -0
  695. package/pack/generated/omp/skills/rite-define/reference/plan-template.md +149 -0
  696. package/pack/generated/omp/skills/rite-doctor/SKILL.md +69 -0
  697. package/pack/generated/omp/skills/rite-dogfood/SKILL.md +55 -0
  698. package/pack/generated/omp/skills/rite-explain/SKILL.md +152 -0
  699. package/pack/generated/omp/skills/rite-explain/reference/intake.md +89 -0
  700. package/pack/generated/omp/skills/rite-frame/SKILL.md +115 -0
  701. package/pack/generated/omp/skills/rite-frame/reference/failure-modes.md +66 -0
  702. package/pack/generated/omp/skills/rite-handoff/SKILL.md +97 -0
  703. package/pack/generated/omp/skills/rite-handoff/reference/handoff-template.md +44 -0
  704. package/pack/generated/omp/skills/rite-learn/SKILL.md +72 -0
  705. package/pack/generated/omp/skills/rite-plan/SKILL.md +132 -0
  706. package/pack/generated/omp/skills/rite-plan/reference/anti-patterns.md +34 -0
  707. package/pack/generated/omp/skills/rite-plan/reference/dependency-graph.md +48 -0
  708. package/pack/generated/omp/skills/rite-plan/reference/replan-and-repair.md +73 -0
  709. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +65 -0
  710. package/pack/generated/omp/skills/rite-plan/reference/task-breakdown.md +42 -0
  711. package/pack/generated/omp/skills/rite-polish/SKILL.md +104 -0
  712. package/pack/generated/omp/skills/rite-polish/reference/adr-promotion.md +11 -0
  713. package/pack/generated/omp/skills/rite-polish/reference/anti-ai-slop.md +187 -0
  714. package/pack/generated/omp/skills/rite-polish/reference/anti-patterns.md +30 -0
  715. package/pack/generated/omp/skills/rite-polish/reference/backend-polish.md +80 -0
  716. package/pack/generated/omp/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
  717. package/pack/generated/omp/skills/rite-polish/reference/code.md +82 -0
  718. package/pack/generated/omp/skills/rite-polish/reference/design-memory.md +117 -0
  719. package/pack/generated/omp/skills/rite-polish/reference/design-system-discovery.md +8 -0
  720. package/pack/generated/omp/skills/rite-polish/reference/harden-checklist.md +109 -0
  721. package/pack/generated/omp/skills/rite-polish/reference/ledger.md +65 -0
  722. package/pack/generated/omp/skills/rite-polish/reference/ui.md +137 -0
  723. package/pack/generated/omp/skills/rite-pov/SKILL.md +58 -0
  724. package/pack/generated/omp/skills/rite-pr-feedback/SKILL.md +54 -0
  725. package/pack/generated/omp/skills/rite-pressure-test/SKILL.md +67 -0
  726. package/pack/generated/omp/skills/rite-prototype/SKILL.md +104 -0
  727. package/pack/generated/omp/skills/rite-prove/SKILL.md +122 -0
  728. package/pack/generated/omp/skills/rite-prove/reference/acceptance-proof.md +88 -0
  729. package/pack/generated/omp/skills/rite-prove/reference/anti-patterns.md +25 -0
  730. package/pack/generated/omp/skills/rite-prove/reference/browser-proof.md +51 -0
  731. package/pack/generated/omp/skills/rite-prove/reference/failure-triage.md +43 -0
  732. package/pack/generated/omp/skills/rite-prove/reference/proof-ladder.md +28 -0
  733. package/pack/generated/omp/skills/rite-prove/reference/test-command-discovery.md +30 -0
  734. package/pack/generated/omp/skills/rite-quick/SKILL.md +82 -0
  735. package/pack/generated/omp/skills/rite-resolve/SKILL.md +95 -0
  736. package/pack/generated/omp/skills/rite-resolve/reference/answer-protocol.md +118 -0
  737. package/pack/generated/omp/skills/rite-review/SKILL.md +159 -0
  738. package/pack/generated/omp/skills/rite-review/reference/anti-patterns.md +32 -0
  739. package/pack/generated/omp/skills/rite-review/reference/cognitive-load.md +90 -0
  740. package/pack/generated/omp/skills/rite-review/reference/feature-scoped-review.md +26 -0
  741. package/pack/generated/omp/skills/rite-review/reference/five-axis-review.md +66 -0
  742. package/pack/generated/omp/skills/rite-review/reference/nielsen-heuristics.md +126 -0
  743. package/pack/generated/omp/skills/rite-review/reference/performance-checklist.md +80 -0
  744. package/pack/generated/omp/skills/rite-review/reference/performance-review.md +14 -0
  745. package/pack/generated/omp/skills/rite-review/reference/security-review.md +42 -0
  746. package/pack/generated/omp/skills/rite-seal/SKILL.md +73 -0
  747. package/pack/generated/omp/skills/rite-seal/reference/anti-patterns.md +29 -0
  748. package/pack/generated/omp/skills/rite-seal/reference/final-evidence.md +40 -0
  749. package/pack/generated/omp/skills/rite-seal/reference/go-no-go.md +29 -0
  750. package/pack/generated/omp/skills/rite-seal/reference/output.md +5 -0
  751. package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +47 -0
  752. package/pack/generated/omp/skills/rite-seal/reference/risk-and-rollback.md +56 -0
  753. package/pack/generated/omp/skills/rite-seal/reference/seal-template.md +27 -0
  754. package/pack/generated/omp/skills/rite-ship/SKILL.md +85 -0
  755. package/pack/generated/omp/skills/rite-ship/reference/anti-patterns.md +28 -0
  756. package/pack/generated/omp/skills/rite-ship/reference/close-out.md +54 -0
  757. package/pack/generated/omp/skills/rite-ship/reference/git-ship.md +111 -0
  758. package/pack/generated/omp/skills/rite-ship/reference/rollout.md +62 -0
  759. package/pack/generated/omp/skills/rite-ship/reference/ship-template.md +39 -0
  760. package/pack/generated/omp/skills/rite-spec/SKILL.md +144 -0
  761. package/pack/generated/omp/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  762. package/pack/generated/omp/skills/rite-spec/reference/ai-spec-template.md +40 -0
  763. package/pack/generated/omp/skills/rite-spec/reference/anti-patterns.md +27 -0
  764. package/pack/generated/omp/skills/rite-spec/reference/interview-patterns.md +56 -0
  765. package/pack/generated/omp/skills/rite-spec/reference/investigation.md +83 -0
  766. package/pack/generated/omp/skills/rite-spec/reference/question-protocol.md +36 -0
  767. package/pack/generated/omp/skills/rite-spec/reference/references-intake.md +62 -0
  768. package/pack/generated/omp/skills/rite-spec/reference/spec-checklists.md +89 -0
  769. package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +154 -0
  770. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +221 -0
  771. package/pack/generated/omp/skills/rite-status/SKILL.md +54 -0
  772. package/pack/generated/omp/skills/rite-temper/SKILL.md +127 -0
  773. package/pack/generated/omp/skills/rite-temper/reference/anti-patterns.md +29 -0
  774. package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +67 -0
  775. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +53 -0
  776. package/pack/generated/omp/skills/rite-temper/reference/significance.md +46 -0
  777. package/pack/generated/omp/skills/rite-temper/reference/strategy-template.md +90 -0
  778. package/pack/generated/omp/skills/rite-upgrade/SKILL.md +112 -0
  779. package/pack/generated/omp/skills/rite-vet/SKILL.md +158 -0
  780. package/pack/generated/omp/skills/rite-vet/reference/anti-patterns.md +41 -0
  781. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +202 -0
  782. package/pack/generated/omp/skills/rite-vet/reference/cross-model.md +19 -0
  783. package/pack/generated/omp/skills/rite-vet/reference/depth.md +60 -0
  784. package/pack/generated/omp/skills/rite-vet/reference/eng-lenses.md +48 -0
  785. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +176 -0
  786. package/pack/generated/omp/skills/rite-watch-pr/SKILL.md +85 -0
  787. package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +69 -0
  788. package/package.json +13 -1
  789. package/scripts/build-host-artifacts.sh +48 -6
  790. package/scripts/omp-generate.sh +152 -0
@@ -15,8 +15,10 @@ const (
15
15
 
16
16
  ClaudeSkillsTarget = ".claude/skills"
17
17
  CodexSkillsTarget = ".agents/skills"
18
+ OmpSkillsTarget = ".omp/skills"
18
19
  ClaudeAgentsTarget = ".claude/agents"
19
20
  CodexAgentsTarget = ".codex/agents"
21
+ OmpAgentsTarget = ".omp/agents"
20
22
  ClaudeWorkflowsTarget = ".claude/workflows"
21
23
 
22
24
  ManifestName = ".claude/devrites.manifest"
@@ -175,6 +177,7 @@ func ActiveSlug(root string) (string, error) {
175
177
  if info, err := os.Lstat(activePath); err == nil && info.Mode()&os.ModeSymlink != 0 {
176
178
  return "", fmt.Errorf("DRV-ACTIVE-SYMLINK: ACTIVE is a symlink; run `rm -f %q`", activePath)
177
179
  }
180
+ // #nosec G304 -- operator-supplied workspace root; ACTIVE symlink refused above
178
181
  raw, err := os.ReadFile(activePath)
179
182
  if errors.Is(err, os.ErrNotExist) {
180
183
  return "", nil
@@ -84,6 +84,7 @@ func CopyTree(src, dst string) error {
84
84
  return fmt.Errorf("copy %s: %w", src, err)
85
85
  }
86
86
  if !info.IsDir() {
87
+ // #nosec G304 -- src is an engine-managed path inside the operator-supplied root
87
88
  data, err := os.ReadFile(src)
88
89
  if err != nil {
89
90
  return fmt.Errorf("copy %s: %w", src, err)
@@ -91,6 +92,7 @@ func CopyTree(src, dst string) error {
91
92
  if err := os.MkdirAll(filepath.Dir(dst), 0o755); err != nil {
92
93
  return fmt.Errorf("copy to %s: %w", dst, err)
93
94
  }
95
+ // #nosec G703 -- dst mirrors src within the same managed tree
94
96
  return os.WriteFile(dst, data, 0o644)
95
97
  }
96
98
  entries, err := os.ReadDir(src)
@@ -103,6 +103,12 @@ func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Resu
103
103
  }
104
104
  }
105
105
  }
106
+ if len(missingFiles) == 0 {
107
+ for _, problem := range acceptanceMapProblems(observation, policy) {
108
+ stateProblems = append(stateProblems, "acceptance-map: "+problem)
109
+ blocked = true
110
+ }
111
+ }
106
112
  if len(missingFiles) == 0 && phaseRequiresReadinessBinding(policy) {
107
113
  expected, bindingErr := verifyReadinessBinding(observation)
108
114
  if bindingErr != nil {
@@ -136,6 +142,30 @@ func checkObservation(kind Kind, observation *state.WorkspaceObservation) (*Resu
136
142
  return result, nil
137
143
  }
138
144
 
145
+ func acceptanceMapProblems(observation *state.WorkspaceObservation, policy state.PhasePolicy) []string {
146
+ requireTasks := phaseRequiresTasks(policy)
147
+ requireTestPlan := phaseRequiresTestPlan(policy)
148
+ if !requireTasks && !requireTestPlan {
149
+ return nil
150
+ }
151
+ spec, ok := observation.Fact("spec.md")
152
+ if !ok || spec.State() != state.ArtifactPresent {
153
+ return nil
154
+ }
155
+ var tasks, testPlan []byte
156
+ if requireTasks {
157
+ if fact, ok := observation.Fact("tasks.md"); ok && fact.State() == state.ArtifactPresent {
158
+ tasks = fact.Bytes()
159
+ }
160
+ }
161
+ if requireTestPlan {
162
+ if fact, ok := observation.Fact("test-plan.md"); ok && fact.State() == state.ArtifactPresent {
163
+ testPlan = fact.Bytes()
164
+ }
165
+ }
166
+ return state.ParseAcceptanceMap(spec.Bytes(), tasks, testPlan, requireTasks, requireTestPlan).Problems
167
+ }
168
+
139
169
  func missingSections(observation *state.WorkspaceObservation, required []state.Section) []state.Section {
140
170
  var missing []state.Section
141
171
  for _, section := range required {
@@ -149,17 +149,20 @@ func readinessDiagnosticError(diagnostic state.ArtifactDiagnostic) error {
149
149
  }
150
150
 
151
151
  func phaseRequiresTasks(policy state.PhasePolicy) bool {
152
- for _, artifact := range policy.RequiredArtifacts {
153
- if artifact == "tasks.md" {
154
- return true
155
- }
156
- }
157
- return false
152
+ return policyRequires(policy, "tasks.md")
153
+ }
154
+
155
+ func phaseRequiresTestPlan(policy state.PhasePolicy) bool {
156
+ return policyRequires(policy, "test-plan.md")
158
157
  }
159
158
 
160
159
  func phaseRequiresReadinessBinding(policy state.PhasePolicy) bool {
160
+ return policyRequires(policy, "eng-review.md")
161
+ }
162
+
163
+ func policyRequires(policy state.PhasePolicy, name state.ArtifactPath) bool {
161
164
  for _, artifact := range policy.RequiredArtifacts {
162
- if artifact == "eng-review.md" {
165
+ if artifact == name {
163
166
  return true
164
167
  }
165
168
  }
@@ -97,7 +97,7 @@ func TestReadinessBindingBindsOnlyStableBuildInputs(t *testing.T) {
97
97
  func TestReadinessBindingGoldenDigest(t *testing.T) {
98
98
  root := t.TempDir()
99
99
  writeReadinessFixture(t, root, "golden", "build")
100
- const want = "Readiness inputs SHA-256: c4a073e85373f5fd9f9302c61b6772e766e4fa2a3da2ccc77bad23756c9f412d"
100
+ const want = "Readiness inputs SHA-256: 6a0d4991d86f5a0e78333289840b5fb1a123adbb18b53243b1af34fcffcf1961"
101
101
  if got := mustReadinessBinding(t, root, "golden"); got != want {
102
102
  t.Fatalf("ReadinessBinding()=%q, want %q", got, want)
103
103
  }
@@ -367,6 +367,48 @@ func TestReadinessDiagnosticPayloads(t *testing.T) {
367
367
  }
368
368
  }
369
369
 
370
+ func TestCheckReadinessBlocksUnmappedAcceptance(t *testing.T) {
371
+ root := t.TempDir()
372
+ workspace := writeReadinessFixture(t, root, "unmapped", "build")
373
+ testutil.WriteFile(t, filepath.Join(workspace, "spec.md"), "# Spec\n\n## Acceptance criteria\n- AC-002: extra requirement.\n")
374
+ binding := mustReadinessBinding(t, root, "unmapped")
375
+ testutil.AppendFile(t, filepath.Join(workspace, "eng-review.md"), "\n"+binding+"\n")
376
+
377
+ result, err := Check(Readiness, root, "unmapped")
378
+ if err != nil {
379
+ t.Fatal(err)
380
+ }
381
+ if !result.Blocked || result.ReasonID != reason.GateReadinessMissing {
382
+ t.Fatalf("blocked=%v reason=%q render=%s", result.Blocked, result.ReasonID, result.Render())
383
+ }
384
+ joined := strings.Join(result.StateProblems, "\n")
385
+ for _, want := range []string{
386
+ "acceptance-map: acceptance AC-002 is not referenced in tasks.md",
387
+ "acceptance-map: acceptance AC-002 is not referenced in test-plan.md",
388
+ } {
389
+ if !strings.Contains(joined, want) {
390
+ t.Fatalf("missing %q in %q", want, joined)
391
+ }
392
+ }
393
+ }
394
+
395
+ func TestCheckReadinessPassesMappedAcceptance(t *testing.T) {
396
+ root := t.TempDir()
397
+ workspace := writeReadinessFixture(t, root, "mapped", "build")
398
+ testutil.WriteFile(t, filepath.Join(workspace, "spec.md"), "# Spec\n\n## Acceptance criteria\n- AC-001: bind readiness inputs.\n")
399
+ testutil.WriteFile(t, filepath.Join(workspace, "test-plan.md"), "# Test plan\n\nAC-001 focused tests.\n")
400
+ binding := mustReadinessBinding(t, root, "mapped")
401
+ testutil.AppendFile(t, filepath.Join(workspace, "eng-review.md"), "\n"+binding+"\n")
402
+
403
+ result, err := Check(Readiness, root, "mapped")
404
+ if err != nil {
405
+ t.Fatal(err)
406
+ }
407
+ if result.Blocked {
408
+ t.Fatalf("mapped acceptance blocked: %s", result.Render())
409
+ }
410
+ }
411
+
370
412
  func writeReadinessFixture(t *testing.T, root, slug, phase string) string {
371
413
  t.Helper()
372
414
  workspace := filepath.Join(root, "work", slug)
@@ -16,8 +16,10 @@ import (
16
16
  const (
17
17
  ClaudeSkillsTarget = devritespaths.ClaudeSkillsTarget
18
18
  CodexSkillsTarget = devritespaths.CodexSkillsTarget
19
+ OmpSkillsTarget = devritespaths.OmpSkillsTarget
19
20
  ClaudeAgentsTarget = devritespaths.ClaudeAgentsTarget
20
21
  CodexAgentsTarget = devritespaths.CodexAgentsTarget
22
+ OmpAgentsTarget = devritespaths.OmpAgentsTarget
21
23
  ClaudeWorkflowsTarget = devritespaths.ClaudeWorkflowsTarget
22
24
  )
23
25
 
@@ -123,7 +125,7 @@ var managedMerges = []ManagedMerge{
123
125
  LegacyCodexHooksMerge,
124
126
  }
125
127
 
126
- func RequiredPayload(withCodex bool) []string {
128
+ func RequiredPayload(withCodex, withOmp bool) []string {
127
129
  required := []string{
128
130
  "claude/skills",
129
131
  "claude/agents",
@@ -138,11 +140,18 @@ func RequiredPayload(withCodex bool) []string {
138
140
  "codex/config.toml",
139
141
  )
140
142
  }
143
+ if withOmp {
144
+ required = append(required,
145
+ "omp/skills",
146
+ "omp/agents",
147
+ "omp/.omp-plugin/plugin.json",
148
+ )
149
+ }
141
150
  return required
142
151
  }
143
152
 
144
- func ValidatePayload(payload fs.FS, withCodex bool) error {
145
- for _, rel := range RequiredPayload(withCodex) {
153
+ func ValidatePayload(payload fs.FS, withCodex, withOmp bool) error {
154
+ for _, rel := range RequiredPayload(withCodex, withOmp) {
146
155
  if _, err := fs.Stat(payload, rel); err != nil {
147
156
  return fmt.Errorf("missing %s", rel)
148
157
  }
@@ -150,19 +159,25 @@ func ValidatePayload(payload fs.FS, withCodex bool) error {
150
159
  return nil
151
160
  }
152
161
 
153
- func InstallTrees(withSkills, withAgents, withCodex bool) []Tree {
162
+ func InstallTrees(withSkills, withAgents, withCodex, withOmp bool) []Tree {
154
163
  var trees []Tree
155
164
  if withSkills {
156
165
  trees = append(trees, Tree{PayloadPrefix: "claude/skills", TargetPrefix: ClaudeSkillsTarget})
157
166
  if withCodex {
158
167
  trees = append(trees, Tree{PayloadPrefix: "codex/skills", TargetPrefix: CodexSkillsTarget})
159
168
  }
169
+ if withOmp {
170
+ trees = append(trees, Tree{PayloadPrefix: "omp/skills", TargetPrefix: OmpSkillsTarget})
171
+ }
160
172
  }
161
173
  if withAgents {
162
174
  trees = append(trees, Tree{PayloadPrefix: "claude/agents", TargetPrefix: ClaudeAgentsTarget})
163
175
  if withCodex {
164
176
  trees = append(trees, Tree{PayloadPrefix: "codex/agents", TargetPrefix: CodexAgentsTarget})
165
177
  }
178
+ if withOmp {
179
+ trees = append(trees, Tree{PayloadPrefix: "omp/agents", TargetPrefix: OmpAgentsTarget})
180
+ }
166
181
  }
167
182
  if withSkills && withAgents {
168
183
  trees = append(trees, Tree{PayloadPrefix: "claude/workflows", TargetPrefix: ClaudeWorkflowsTarget})
@@ -170,11 +185,14 @@ func InstallTrees(withSkills, withAgents, withCodex bool) []Tree {
170
185
  return trees
171
186
  }
172
187
 
173
- func AliasTargets(alias Alias, withCodex bool) []string {
188
+ func AliasTargets(alias Alias, withCodex, withOmp bool) []string {
174
189
  targets := []string{filepath.ToSlash(filepath.Join(ClaudeSkillsTarget, alias.Name, "SKILL.md"))}
175
190
  if withCodex {
176
191
  targets = append(targets, filepath.ToSlash(filepath.Join(CodexSkillsTarget, alias.Name, "SKILL.md")))
177
192
  }
193
+ if withOmp {
194
+ targets = append(targets, filepath.ToSlash(filepath.Join(OmpSkillsTarget, alias.Name, "SKILL.md")))
195
+ }
178
196
  return targets
179
197
  }
180
198
 
@@ -18,39 +18,75 @@ func TestValidatePayloadRequiresClaudeAndCodexFiles(t *testing.T) {
18
18
  "codex/agents/devrites-code-reviewer.toml": {},
19
19
  "codex/AGENTS.md": {},
20
20
  "codex/config.toml": {},
21
+ "omp/skills/rite/SKILL.md": {},
22
+ "omp/agents/devrites-code-reviewer.md": {},
23
+ "omp/.omp-plugin/plugin.json": {},
21
24
  }
22
- if err := ValidatePayload(payload, true); err != nil {
25
+ if err := ValidatePayload(payload, true, true); err != nil {
23
26
  t.Fatal(err)
24
27
  }
25
28
  delete(payload, "codex/config.toml")
26
- err := ValidatePayload(payload, true)
29
+ err := ValidatePayload(payload, true, true)
27
30
  if err == nil || !strings.Contains(err.Error(), "missing codex/config.toml") {
28
31
  t.Fatalf("ValidatePayload error = %v, want missing codex/config.toml", err)
29
32
  }
30
- if err := ValidatePayload(payload, false); err != nil {
33
+ if err := ValidatePayload(payload, false, true); err != nil {
31
34
  t.Fatalf("claude-only payload should not require codex files: %v", err)
32
35
  }
36
+ delete(payload, "omp/.omp-plugin/plugin.json")
37
+ err = ValidatePayload(payload, false, true)
38
+ if err == nil || !strings.Contains(err.Error(), "missing omp/.omp-plugin/plugin.json") {
39
+ t.Fatalf("ValidatePayload error = %v, want missing omp/.omp-plugin/plugin.json", err)
40
+ }
41
+ if err := ValidatePayload(payload, false, false); err != nil {
42
+ t.Fatalf("claude-only payload should not require omp files: %v", err)
43
+ }
33
44
  }
34
45
 
35
46
  func TestInstallTreesMapPayloadsToTargets(t *testing.T) {
36
- got := InstallTrees(true, true, true)
47
+ got := InstallTrees(true, true, true, true)
37
48
  want := []Tree{
38
49
  {PayloadPrefix: "claude/skills", TargetPrefix: ".claude/skills"},
39
50
  {PayloadPrefix: "codex/skills", TargetPrefix: ".agents/skills"},
51
+ {PayloadPrefix: "omp/skills", TargetPrefix: ".omp/skills"},
40
52
  {PayloadPrefix: "claude/agents", TargetPrefix: ".claude/agents"},
41
53
  {PayloadPrefix: "codex/agents", TargetPrefix: ".codex/agents"},
54
+ {PayloadPrefix: "omp/agents", TargetPrefix: ".omp/agents"},
42
55
  {PayloadPrefix: "claude/workflows", TargetPrefix: ".claude/workflows"},
43
56
  }
44
57
  if !reflect.DeepEqual(got, want) {
45
58
  t.Fatalf("InstallTrees() = %#v, want %#v", got, want)
46
59
  }
47
- for _, trees := range [][]Tree{InstallTrees(true, false, true), InstallTrees(false, true, true)} {
60
+ for _, trees := range [][]Tree{InstallTrees(true, false, true, true), InstallTrees(false, true, true, true)} {
48
61
  for _, tree := range trees {
49
62
  if tree.PayloadPrefix == "claude/workflows" {
50
63
  t.Fatal("Claude workflow installed without both skills and agents")
51
64
  }
52
65
  }
53
66
  }
67
+ for _, tree := range InstallTrees(true, true, true, false) {
68
+ if strings.HasPrefix(tree.TargetPrefix, ".omp/") {
69
+ t.Fatalf("omp tree installed with withOmp=false: %#v", tree)
70
+ }
71
+ }
72
+ }
73
+
74
+ func TestAliasTargetsIncludeOmpWhenEnabled(t *testing.T) {
75
+ got := AliasTargets(Alias{Name: "define"}, true, true)
76
+ want := []string{
77
+ ".claude/skills/define/SKILL.md",
78
+ ".agents/skills/define/SKILL.md",
79
+ ".omp/skills/define/SKILL.md",
80
+ }
81
+ if !reflect.DeepEqual(got, want) {
82
+ t.Fatalf("AliasTargets() = %#v, want %#v", got, want)
83
+ }
84
+ got = AliasTargets(Alias{Name: "define"}, true, false)
85
+ for _, rel := range got {
86
+ if strings.HasPrefix(rel, ".omp/") {
87
+ t.Fatalf("omp alias installed with withOmp=false: %s", rel)
88
+ }
89
+ }
54
90
  }
55
91
 
56
92
  func TestAliasTemplateOutput(t *testing.T) {
@@ -23,6 +23,7 @@ func (r *runner) install() error {
23
23
  fmt.Fprintln(r.opts.Stdout, " standards: ship inside the devrites-lib skill")
24
24
  fmt.Fprintf(r.opts.Stdout, " agents : %s\n", yesno(r.opts.WithAgents))
25
25
  fmt.Fprintf(r.opts.Stdout, " codex : %s\n", yesno(r.opts.WithCodex))
26
+ fmt.Fprintf(r.opts.Stdout, " omp : %s\n", yesno(r.opts.WithOmp))
26
27
  fmt.Fprintf(r.opts.Stdout, " aliases: %s\n", r.opts.AliasMode)
27
28
  if r.opts.DryRun {
28
29
  fmt.Fprintln(r.opts.Stdout, " (dry run - no changes will be made)")
@@ -37,7 +38,7 @@ func (r *runner) install() error {
37
38
  return err
38
39
  }
39
40
 
40
- for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex) {
41
+ for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp) {
41
42
  if err := r.installTree(tree.PayloadPrefix, tree.TargetPrefix); err != nil {
42
43
  return fmt.Errorf("install tree %s: %w", tree.TargetPrefix, err)
43
44
  }
@@ -48,7 +49,7 @@ func (r *runner) install() error {
48
49
  if err != nil {
49
50
  return fmt.Errorf("render alias skill %s: %w", alias.Name, err)
50
51
  }
51
- for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex) {
52
+ for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp) {
52
53
  if err := r.installData(data, rel); err != nil {
53
54
  return fmt.Errorf("install alias: %w", err)
54
55
  }
@@ -91,9 +92,14 @@ func (r *runner) install() error {
91
92
  }
92
93
  fmt.Fprintf(r.opts.Stdout, " installed: %d overwritten: %d skipped(conflict): %d pruned: %d\n", r.stats.installed, r.stats.overwrote, r.stats.skipped, r.stats.pruned)
93
94
  if !r.opts.DryRun && r.opts.WithSkills {
94
- if r.opts.WithCodex {
95
+ switch {
96
+ case r.opts.WithCodex && r.opts.WithOmp:
97
+ fmt.Fprintln(r.opts.Stdout, "Next: reopen the project, then run /rite (Claude) or $rite (Codex) or /skill:rite.")
98
+ case r.opts.WithCodex:
95
99
  fmt.Fprintln(r.opts.Stdout, "Next: reopen the project, then run /rite (Claude) or $rite (Codex).")
96
- } else {
100
+ case r.opts.WithOmp:
101
+ fmt.Fprintln(r.opts.Stdout, "Next: reopen the project, then run /rite or /skill:rite.")
102
+ default:
97
103
  fmt.Fprintln(r.opts.Stdout, "Next: reopen the project, then run /rite.")
98
104
  }
99
105
  }
@@ -201,6 +207,7 @@ func (r *runner) seedDevrites() error {
201
207
  if err := os.MkdirAll(filepath.Dir(active), 0o755); err != nil {
202
208
  return fmt.Errorf("create %s: %w", filepath.Dir(active), err)
203
209
  }
210
+ // #nosec G304 -- active path is the operator-selected install dir (O_EXCL create)
204
211
  f, err := os.OpenFile(active, os.O_CREATE|os.O_EXCL, 0o644)
205
212
  if err != nil {
206
213
  if os.IsExist(err) {
@@ -301,6 +308,9 @@ func (r *runner) flagsString() string {
301
308
  if !r.opts.WithCodex {
302
309
  flags = append(flags, "--no-codex")
303
310
  }
311
+ if !r.opts.WithOmp {
312
+ flags = append(flags, "--no-omp")
313
+ }
304
314
  if !r.opts.WithBinary {
305
315
  flags = append(flags, "--no-binary")
306
316
  }
@@ -48,6 +48,7 @@ func (r *runner) installBinary() error {
48
48
  if err := os.MkdirAll(filepath.Dir(dest), 0o755); err != nil {
49
49
  return err
50
50
  }
51
+ // #nosec G304 -- staged artifact from the checksum-verified release temp dir
51
52
  data, err := os.ReadFile(staged)
52
53
  if err != nil {
53
54
  return err
@@ -57,7 +58,7 @@ func (r *runner) installBinary() error {
57
58
  return err
58
59
  }
59
60
  if backup != "" {
60
- defer os.Remove(backup)
61
+ defer func() { _ = os.Remove(backup) }()
61
62
  }
62
63
  if err := fsutil.WriteFileAtomic(dest, data, 0o755); err != nil {
63
64
  if restoreErr := restoreBinary(dest, backup, oldMode, hadOld); restoreErr != nil {
@@ -100,6 +101,7 @@ func backupBinary(dest string) (string, fs.FileMode, bool, error) {
100
101
  if !info.Mode().IsRegular() {
101
102
  return "", 0, false, fmt.Errorf("refusing to replace non-regular engine binary: %s", dest)
102
103
  }
104
+ // #nosec G304 -- existing engine binary under the operator install dir; regular-file checked above
103
105
  data, err := os.ReadFile(dest)
104
106
  if err != nil {
105
107
  return "", 0, false, fmt.Errorf("read existing engine binary: %w", err)
@@ -127,6 +129,7 @@ func restoreBinary(dest, backup string, mode fs.FileMode, hadOld bool) error {
127
129
  }
128
130
  return nil
129
131
  }
132
+ // #nosec G304 -- backup of the same install-dir binary
130
133
  data, err := os.ReadFile(backup)
131
134
  if err != nil {
132
135
  return err
@@ -235,6 +238,7 @@ func verifyEngineBinary(path, want string, timeout time.Duration) (string, error
235
238
  func readEngineVersion(path string, timeout time.Duration) (string, error) {
236
239
  ctx, cancel := context.WithTimeout(context.Background(), timeout)
237
240
  defer cancel()
241
+ // #nosec G204,G702 -- execs the staged engine binary itself for a version probe
238
242
  out, err := exec.CommandContext(ctx, path, "version").Output()
239
243
  if err != nil {
240
244
  if errors.Is(ctx.Err(), context.DeadlineExceeded) {
@@ -34,6 +34,7 @@ type Options struct {
34
34
  WithSkills bool
35
35
  WithAgents bool
36
36
  WithCodex bool
37
+ WithOmp bool
37
38
  WithBinary bool
38
39
  KeepBinary bool
39
40
  AliasMode string
@@ -82,6 +83,7 @@ func DefaultOptions(mode Mode) Options {
82
83
  WithSkills: true,
83
84
  WithAgents: true,
84
85
  WithCodex: true,
86
+ WithOmp: true,
85
87
  WithBinary: true,
86
88
  AliasMode: "safe",
87
89
  Stdout: io.Discard,
@@ -132,6 +134,7 @@ func parseArgs(args []string, opts *Options) error {
132
134
  dryRun := flags.Bool("dry-run", opts.DryRun, "")
133
135
  force := flags.Bool("force", opts.Force, "")
134
136
  noCodex := flags.Bool("no-codex", !opts.WithCodex, "")
137
+ noOmp := flags.Bool("no-omp", !opts.WithOmp, "")
135
138
  noAgents := flags.Bool("no-agents", !opts.WithAgents, "")
136
139
  noSkills := flags.Bool("no-skills", !opts.WithSkills, "")
137
140
  noBinary := flags.Bool("no-binary", !opts.WithBinary, "")
@@ -158,6 +161,7 @@ func parseArgs(args []string, opts *Options) error {
158
161
  opts.DryRun = *dryRun
159
162
  opts.Force = *force
160
163
  opts.WithCodex = !*noCodex
164
+ opts.WithOmp = !*noOmp
161
165
  opts.WithAgents = !*noAgents
162
166
  opts.WithSkills = !*noSkills
163
167
  opts.WithBinary = !*noBinary
@@ -204,7 +208,7 @@ func usage(mode Mode) string {
204
208
  case ModeUpdate:
205
209
  return "usage: devrites-engine update [--target DIR] [--dry-run] [--force] [--check] [install flags] [--source-dir DIR --payload-dir DIR]\n"
206
210
  default:
207
- return "usage: devrites-engine install [--target DIR] [--dry-run] [--force] [--no-codex] [--no-agents] [--no-skills] [--no-binary] [--short-aliases=all]\n"
211
+ return "usage: devrites-engine install [--target DIR] [--dry-run] [--force] [--no-codex] [--no-omp] [--no-agents] [--no-skills] [--no-binary] [--short-aliases=all]\n"
208
212
  }
209
213
  }
210
214
 
@@ -329,7 +333,7 @@ func (r *runner) validatePayload() error {
329
333
  if r.payload == "" {
330
334
  return fmt.Errorf("generated install payload not found; pass --payload-dir or run scripts/build-host-artifacts.sh")
331
335
  }
332
- if err := hostpack.ValidatePayload(r.payloadFS, r.opts.WithCodex); err != nil {
336
+ if err := hostpack.ValidatePayload(r.payloadFS, r.opts.WithCodex, r.opts.WithOmp); err != nil {
333
337
  return fmt.Errorf("generated install payload under %s: %w", r.payload, err)
334
338
  }
335
339
  return nil
@@ -340,7 +344,12 @@ func isGlobalTarget(target string) bool {
340
344
  if target == home {
341
345
  return true
342
346
  }
343
- for _, global := range []string{filepath.Join(home, ".claude"), filepath.Join(home, ".codex")} {
347
+ for _, global := range []string{
348
+ filepath.Join(home, ".claude"),
349
+ filepath.Join(home, ".codex"),
350
+ filepath.Join(home, ".omp"),
351
+ filepath.Join(home, ".omp", "agent"),
352
+ } {
344
353
  if target == global || strings.HasPrefix(target, global+string(os.PathSeparator)) {
345
354
  return true
346
355
  }
@@ -361,6 +370,7 @@ func pruneEmptyDirs(start, stop string) {
361
370
  }
362
371
 
363
372
  func exists(path string) bool {
373
+ // #nosec G703 -- existence probe on managed install paths
364
374
  _, err := os.Lstat(path)
365
375
  return err == nil
366
376
  }
@@ -52,10 +52,13 @@ func TestInstallPrintsFirstMoveForInstalledHosts(t *testing.T) {
52
52
  for _, tc := range []struct {
53
53
  name string
54
54
  withCodex bool
55
+ withOmp bool
55
56
  want string
56
57
  }{
57
- {name: "Claude and Codex", withCodex: true, want: "Next: reopen the project, then run /rite (Claude) or $rite (Codex)."},
58
- {name: "Claude only", withCodex: false, want: "Next: reopen the project, then run /rite."},
58
+ {name: "Claude, Codex, and OMP", withCodex: true, withOmp: true, want: "Next: reopen the project, then run /rite (Claude) or $rite (Codex) or /skill:rite."},
59
+ {name: "Claude and Codex", withCodex: true, withOmp: false, want: "Next: reopen the project, then run /rite (Claude) or $rite (Codex)."},
60
+ {name: "Claude and OMP", withCodex: false, withOmp: true, want: "Next: reopen the project, then run /rite or /skill:rite."},
61
+ {name: "Claude only", withCodex: false, withOmp: false, want: "Next: reopen the project, then run /rite."},
59
62
  } {
60
63
  t.Run(tc.name, func(t *testing.T) {
61
64
  var out bytes.Buffer
@@ -63,6 +66,7 @@ func TestInstallPrintsFirstMoveForInstalledHosts(t *testing.T) {
63
66
  opts.Target = t.TempDir()
64
67
  opts.PayloadDir = testPayload(t)
65
68
  opts.WithCodex = tc.withCodex
69
+ opts.WithOmp = tc.withOmp
66
70
  opts.Stdout = &out
67
71
  opts.Stderr = &bytes.Buffer{}
68
72
 
@@ -754,7 +758,7 @@ func TestLegacyCodexHooksMergeIsCleanupOnly(t *testing.T) {
754
758
  if !ok || merge != legacy {
755
759
  t.Fatalf("legacy marker lookup = %#v, %t", merge, ok)
756
760
  }
757
- if slices.Contains(hostpack.RequiredPayload(true), "codex/hooks.json") {
761
+ if slices.Contains(hostpack.RequiredPayload(true, true), "codex/hooks.json") {
758
762
  t.Fatal("legacy Codex hooks entered the required payload")
759
763
  }
760
764
  r := runner{opts: DefaultOptions(ModeInstall), payloadFS: os.DirFS(testPayload(t))}
@@ -1053,7 +1057,7 @@ func TestVerifyEngineBinary(t *testing.T) {
1053
1057
  t.Run(tc.name, func(t *testing.T) {
1054
1058
  path := filepath.Join(t.TempDir(), "engine")
1055
1059
  testutil.WriteExecutable(t, path, "#!/bin/sh\n"+tc.body+"\n")
1056
- _, err := verifyEngineBinary(path, tc.want, time.Second)
1060
+ _, err := verifyEngineBinary(path, tc.want, 5*time.Second)
1057
1061
  if (err == nil) != tc.ok {
1058
1062
  t.Fatalf("verifyEngineBinary error = %v, ok = %t", err, tc.ok)
1059
1063
  }
@@ -1128,7 +1132,7 @@ func TestBackupRestoreBinaryIsPlatformSafe(t *testing.T) {
1128
1132
  if err != nil {
1129
1133
  t.Fatal(err)
1130
1134
  }
1131
- defer os.Remove(backup)
1135
+ defer func() { _ = os.Remove(backup) }()
1132
1136
  if filepath.Dir(backup) != filepath.Dir(dest) {
1133
1137
  t.Fatalf("backup %s is not beside %s", backup, dest)
1134
1138
  }
@@ -1240,6 +1244,9 @@ default_permissions = "devrites-orchestrator"
1240
1244
  extends = ":workspace"
1241
1245
  # END DEVRITES CODEX PERMISSIONS
1242
1246
  `)
1247
+ testutil.WriteFile(t, filepath.Join(root, "omp", "skills", "rite", "SKILL.md"), "omp rite\n")
1248
+ testutil.WriteFile(t, filepath.Join(root, "omp", "agents", "devrites-code-reviewer.md"), "omp agent\n")
1249
+ testutil.WriteFile(t, filepath.Join(root, "omp", ".omp-plugin", "plugin.json"), "{}\n")
1243
1250
  }
1244
1251
 
1245
1252
  func testSource(t *testing.T, version string) string {
@@ -25,6 +25,7 @@ func readManifestList(path string) ([]string, error) {
25
25
  }
26
26
 
27
27
  func parseManifest(path string) (map[string]managedRecord, []string, error) {
28
+ // #nosec G304 -- install manifest under the operator-selected target
28
29
  data, err := os.ReadFile(path)
29
30
  if err != nil {
30
31
  if errors.Is(err, fs.ErrNotExist) {
@@ -75,6 +76,7 @@ func validManagedHash(hash string) bool {
75
76
  }
76
77
 
77
78
  func manifestHeader(path, key string) string {
79
+ // #nosec G304 -- install manifest under the operator-selected target
78
80
  data, err := os.ReadFile(path)
79
81
  if err != nil {
80
82
  return ""
@@ -90,6 +92,7 @@ func manifestHeader(path, key string) string {
90
92
 
91
93
  func installedVersion(source string) string {
92
94
  if source != "" {
95
+ // #nosec G304 -- package.json inside the operator-selected install source
93
96
  data, err := os.ReadFile(filepath.Join(source, "package.json"))
94
97
  if err != nil {
95
98
  return "unknown"
@@ -36,6 +36,7 @@ func (r *runner) mergeMarkerFile(merge hostpack.MarkerMerge) error {
36
36
  dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
37
37
  if r.opts.DryRun {
38
38
  verb := "create DevRites block"
39
+ // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
39
40
  current, readErr := os.ReadFile(dest)
40
41
  if readErr == nil {
41
42
  if bytes.Contains(current, []byte(merge.Begin)) {
@@ -52,6 +53,7 @@ func (r *runner) mergeMarkerFile(merge hostpack.MarkerMerge) error {
52
53
  return err
53
54
  }
54
55
  next := block
56
+ // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
55
57
  current, readErr := os.ReadFile(dest)
56
58
  if readErr == nil {
57
59
  next = hostpack.MergeMarkerBlock(current, block, merge.Begin, merge.End)
@@ -80,6 +82,7 @@ func (r *runner) mergeCodexConfig() error {
80
82
  return err
81
83
  }
82
84
  var current []byte
85
+ // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
83
86
  if data, readErr := os.ReadFile(dest); readErr == nil {
84
87
  current = stripMarkerBlock(data, merge.Begin, merge.End)
85
88
  current = stripMarkerBlock(current, "# BEGIN DEVRITES CODEX MCP", "# END DEVRITES CODEX MCP")
@@ -183,6 +186,7 @@ func (r *runner) stripClaudeSettings(path string, preserveEmpty bool) error {
183
186
  }
184
187
 
185
188
  func stripMarkerPath(path, begin, end string) error {
189
+ // #nosec G304 -- managed file path from the install manifest
186
190
  data, err := os.ReadFile(path)
187
191
  if err != nil {
188
192
  if os.IsNotExist(err) {
@@ -236,6 +240,7 @@ func hasTopLevelTOMLKey(data []byte, key string) bool {
236
240
  }
237
241
 
238
242
  func readJSON(path string) (map[string]any, error) {
243
+ // #nosec G304 -- engine-written workspace or metadata JSON
239
244
  data, err := os.ReadFile(path)
240
245
  if err != nil {
241
246
  return nil, fmt.Errorf("read %s: %w", path, err)
@@ -93,7 +93,7 @@ func (r *runner) preflightUninstall(entries []string) error {
93
93
 
94
94
  func (r *runner) desiredInstallPaths() (map[string]bool, error) {
95
95
  out := map[string]bool{".devrites/README.md": true}
96
- for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex) {
96
+ for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp) {
97
97
  err := fs.WalkDir(r.payloadFS, tree.PayloadPrefix, func(path string, d fs.DirEntry, err error) error {
98
98
  if err != nil {
99
99
  return err
@@ -114,7 +114,7 @@ func (r *runner) desiredInstallPaths() (map[string]bool, error) {
114
114
  }
115
115
  if r.opts.WithSkills && r.opts.AliasMode == "all" {
116
116
  for _, alias := range hostpack.Aliases {
117
- for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex) {
117
+ for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp) {
118
118
  out[rel] = true
119
119
  }
120
120
  }
@@ -203,11 +203,12 @@ func inspectManagedPath(target, rel string) (pathSnapshot, error) {
203
203
  if !info.Mode().IsRegular() {
204
204
  return pathSnapshot{}, fmt.Errorf("refusing non-regular managed path: %s", rel)
205
205
  }
206
+ // #nosec G304 -- managed path snapshot; regular-file check above
206
207
  f, err := os.Open(dest)
207
208
  if err != nil {
208
209
  return pathSnapshot{}, fmt.Errorf("read managed path %s: %w", rel, err)
209
210
  }
210
- defer f.Close()
211
+ defer func() { _ = f.Close() }()
211
212
  sum := sha256.New()
212
213
  if _, err := io.Copy(sum, f); err != nil {
213
214
  return pathSnapshot{}, fmt.Errorf("hash managed path %s: %w", rel, err)