devrites 6.0.4 → 6.1.1

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 (800) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +24 -9
  3. package/SECURITY.md +9 -6
  4. package/bin/devrites.mjs +28 -12
  5. package/docs/adr/0035-claude-root-leaves-plan-mode.md +33 -0
  6. package/docs/adr/0036-archive-recall-is-a-read-time-query.md +32 -0
  7. package/docs/adr/README.md +4 -2
  8. package/docs/architecture.md +3 -1
  9. package/docs/cli.md +25 -2
  10. package/docs/command-map.md +10 -8
  11. package/docs/engine/commands.md +6 -3
  12. package/docs/harness-compliance.md +2 -2
  13. package/docs/orchestration.md +5 -4
  14. package/docs/release.md +4 -4
  15. package/docs/skills.md +2 -2
  16. package/engine/commands.go +1 -1
  17. package/engine/help.go +10 -6
  18. package/engine/internal/acceptance/cli.go +4 -1
  19. package/engine/internal/acceptance/exec.go +11 -11
  20. package/engine/internal/devritespaths/paths.go +5 -0
  21. package/engine/internal/hostpack/hostpack.go +48 -3
  22. package/engine/internal/install/apply.go +68 -1
  23. package/engine/internal/install/binary.go +4 -0
  24. package/engine/internal/install/install.go +25 -15
  25. package/engine/internal/install/merge.go +287 -123
  26. package/engine/internal/install/preflight.go +71 -1
  27. package/engine/internal/install/uninstall.go +7 -1
  28. package/engine/internal/install/update.go +7 -3
  29. package/engine/internal/lib/claims.go +30 -14
  30. package/engine/internal/lib/cli_observe.go +6 -0
  31. package/engine/internal/lib/context.go +24 -7
  32. package/engine/internal/lib/diffscope.go +79 -3
  33. package/engine/internal/lib/dispatch.go +34 -7
  34. package/engine/internal/lib/drift.go +9 -2
  35. package/engine/internal/lib/handoff.go +14 -5
  36. package/engine/internal/lib/metrics.go +29 -9
  37. package/engine/internal/lib/migrate.go +30 -12
  38. package/engine/internal/lib/next.go +22 -2
  39. package/engine/internal/lib/open_visual.go +3 -1
  40. package/engine/internal/lib/recall.go +355 -0
  41. package/engine/internal/lib/regression.go +20 -0
  42. package/engine/internal/lib/resolve.go +96 -53
  43. package/engine/internal/lib/secretscan.go +24 -1
  44. package/engine/internal/lib/taskgraph.go +31 -1
  45. package/engine/internal/lib/util.go +18 -7
  46. package/engine/internal/lib/windows.go +68 -15
  47. package/engine/internal/markdowntext/markdowntext.go +45 -6
  48. package/engine/internal/notes/cli.go +5 -3
  49. package/engine/internal/notes/notes.go +8 -3
  50. package/engine/internal/overhaul/admit/run.go +16 -12
  51. package/engine/internal/overhaul/overhaul.go +1 -0
  52. package/engine/internal/overhaul/records/check.go +52 -9
  53. package/engine/internal/overhaul/render/run.go +3 -2
  54. package/engine/internal/overhaul/snapshot/run.go +2 -2
  55. package/engine/internal/parallel/git.go +5 -6
  56. package/engine/internal/parallel/ops.go +3 -0
  57. package/engine/internal/parallel/pathdisjoint.go +9 -4
  58. package/engine/internal/release/release.go +11 -9
  59. package/engine/internal/safepath/safepath.go +17 -1
  60. package/engine/internal/state/budgets.go +8 -4
  61. package/engine/internal/state/feature.go +3 -1
  62. package/engine/internal/state/observation.go +12 -7
  63. package/engine/internal/state/taskgraph.go +67 -12
  64. package/engine/internal/state/write.go +7 -1
  65. package/engine/main.go +5 -1
  66. package/pack/.claude/agents/_shared/composition-overhaul.md +2 -0
  67. package/pack/.claude/agents/devrites-devex-reviewer.md +5 -0
  68. package/pack/.claude/agents/devrites-evidence-scout.md +4 -0
  69. package/pack/.claude/agents/devrites-plan-reviewer.md +4 -1
  70. package/pack/.claude/agents/overhaul-implementer.md +1 -0
  71. package/pack/.claude/settings.json +4 -4
  72. package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -1
  73. package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
  74. package/pack/.claude/skills/devrites-browser-proof/SKILL.md +1 -1
  75. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +8 -6
  76. package/pack/.claude/skills/devrites-doubt/SKILL.md +1 -1
  77. package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +1 -1
  78. package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
  79. package/pack/.claude/skills/devrites-lib/reference/intent-map.md +3 -3
  80. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +4 -3
  81. package/pack/.claude/skills/devrites-lib/reference/reply-contract.md +12 -15
  82. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +30 -10
  83. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  84. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +1 -1
  85. package/pack/.claude/skills/devrites-lib/reference/standards/core.md +1 -1
  86. package/pack/.claude/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  87. package/pack/.claude/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  88. package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  89. package/pack/.claude/skills/devrites-lib/reference/standards/one-shot-actions.md +7 -6
  90. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +2 -0
  91. package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  92. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +13 -0
  93. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -6
  94. package/pack/.claude/skills/devrites-prose-craft/SKILL.md +1 -1
  95. package/pack/.claude/skills/devrites-source-driven/SKILL.md +1 -1
  96. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
  97. package/pack/.claude/skills/overhaul/references/orchestration.md +6 -2
  98. package/pack/.claude/skills/overhaul/references/records.md +8 -3
  99. package/pack/.claude/skills/rite/SKILL.md +4 -3
  100. package/pack/.claude/skills/rite/reference/menu.md +6 -5
  101. package/pack/.claude/skills/rite-adopt/SKILL.md +4 -3
  102. package/pack/.claude/skills/rite-autocomplete/SKILL.md +17 -14
  103. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +9 -6
  104. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
  105. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +6 -3
  106. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +5 -5
  107. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +19 -0
  108. package/pack/.claude/skills/rite-converge/SKILL.md +4 -3
  109. package/pack/.claude/skills/rite-customize/SKILL.md +1 -1
  110. package/pack/.claude/skills/rite-define/SKILL.md +3 -2
  111. package/pack/.claude/skills/rite-doctor/SKILL.md +12 -6
  112. package/pack/.claude/skills/rite-dogfood/SKILL.md +2 -2
  113. package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
  114. package/pack/.claude/skills/rite-fast/SKILL.md +3 -1
  115. package/pack/.claude/skills/rite-handoff/SKILL.md +4 -3
  116. package/pack/.claude/skills/rite-learn/SKILL.md +2 -2
  117. package/pack/.claude/skills/rite-plan/SKILL.md +1 -1
  118. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +2 -0
  119. package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -1
  120. package/pack/.claude/skills/rite-pov/SKILL.md +1 -1
  121. package/pack/.claude/skills/rite-pr-feedback/SKILL.md +5 -4
  122. package/pack/.claude/skills/rite-pressure-test/SKILL.md +7 -5
  123. package/pack/.claude/skills/rite-prototype/SKILL.md +1 -1
  124. package/pack/.claude/skills/rite-prove/SKILL.md +4 -2
  125. package/pack/.claude/skills/rite-prove/reference/failure-triage.md +2 -1
  126. package/pack/.claude/skills/rite-quick/SKILL.md +10 -5
  127. package/pack/.claude/skills/rite-resolve/SKILL.md +3 -3
  128. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +4 -5
  129. package/pack/.claude/skills/rite-review/SKILL.md +2 -1
  130. package/pack/.claude/skills/rite-seal/SKILL.md +3 -3
  131. package/pack/.claude/skills/rite-seal/reference/go-no-go.md +2 -0
  132. package/pack/.claude/skills/rite-seal/reference/seal-template.md +5 -2
  133. package/pack/.claude/skills/rite-ship/reference/close-out.md +3 -2
  134. package/pack/.claude/skills/rite-spec/SKILL.md +4 -1
  135. package/pack/.claude/skills/rite-spec/reference/state-workspace.md +2 -2
  136. package/pack/.claude/skills/rite-status/SKILL.md +1 -1
  137. package/pack/.claude/skills/rite-temper/reference/significance.md +2 -0
  138. package/pack/.claude/skills/rite-upgrade/SKILL.md +4 -2
  139. package/pack/.claude/skills/rite-vet/SKILL.md +3 -2
  140. package/pack/.claude/skills/rite-vet/reference/artifacts.md +1 -1
  141. package/pack/.claude/skills/rite-watch-pr/SKILL.md +1 -1
  142. package/pack/.claude/skills/rite-zoom-out/SKILL.md +1 -1
  143. package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -0
  144. package/pack/generated/claude/agents/devrites-evidence-scout.md +4 -0
  145. package/pack/generated/claude/agents/devrites-plan-reviewer.md +4 -1
  146. package/pack/generated/claude/agents/overhaul-backend-engineer.md +2 -0
  147. package/pack/generated/claude/agents/overhaul-boundary.md +2 -0
  148. package/pack/generated/claude/agents/overhaul-craft.md +2 -0
  149. package/pack/generated/claude/agents/overhaul-frontend-engineer.md +2 -0
  150. package/pack/generated/claude/agents/overhaul-implementer.md +3 -0
  151. package/pack/generated/claude/agents/overhaul-recon.md +2 -0
  152. package/pack/generated/claude/agents/overhaul-specialist.md +2 -0
  153. package/pack/generated/claude/agents/overhaul-verifier.md +2 -0
  154. package/pack/generated/claude/settings.json +4 -4
  155. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -1
  156. package/pack/generated/claude/skills/devrites-audit/SKILL.md +1 -1
  157. package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +1 -1
  158. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +8 -6
  159. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +1 -1
  160. package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +1 -1
  161. package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
  162. package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +3 -3
  163. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +4 -3
  164. package/pack/generated/claude/skills/devrites-lib/reference/reply-contract.md +12 -15
  165. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +30 -10
  166. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  167. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +1 -1
  168. package/pack/generated/claude/skills/devrites-lib/reference/standards/core.md +1 -1
  169. package/pack/generated/claude/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  170. package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  171. package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  172. package/pack/generated/claude/skills/devrites-lib/reference/standards/one-shot-actions.md +7 -6
  173. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +2 -0
  174. package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  175. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +13 -0
  176. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -6
  177. package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +1 -1
  178. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +1 -1
  179. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
  180. package/pack/generated/claude/skills/overhaul/references/orchestration.md +6 -2
  181. package/pack/generated/claude/skills/overhaul/references/records.md +8 -3
  182. package/pack/generated/claude/skills/rite/SKILL.md +4 -3
  183. package/pack/generated/claude/skills/rite/reference/menu.md +6 -5
  184. package/pack/generated/claude/skills/rite-adopt/SKILL.md +4 -3
  185. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +17 -14
  186. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +9 -6
  187. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
  188. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +6 -3
  189. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +5 -5
  190. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +19 -0
  191. package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -3
  192. package/pack/generated/claude/skills/rite-customize/SKILL.md +1 -1
  193. package/pack/generated/claude/skills/rite-define/SKILL.md +3 -2
  194. package/pack/generated/claude/skills/rite-doctor/SKILL.md +12 -6
  195. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +2 -2
  196. package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
  197. package/pack/generated/claude/skills/rite-fast/SKILL.md +3 -1
  198. package/pack/generated/claude/skills/rite-handoff/SKILL.md +4 -3
  199. package/pack/generated/claude/skills/rite-learn/SKILL.md +2 -2
  200. package/pack/generated/claude/skills/rite-plan/SKILL.md +1 -1
  201. package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +2 -0
  202. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -1
  203. package/pack/generated/claude/skills/rite-pov/SKILL.md +1 -1
  204. package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +5 -4
  205. package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +7 -5
  206. package/pack/generated/claude/skills/rite-prototype/SKILL.md +1 -1
  207. package/pack/generated/claude/skills/rite-prove/SKILL.md +4 -2
  208. package/pack/generated/claude/skills/rite-prove/reference/failure-triage.md +2 -1
  209. package/pack/generated/claude/skills/rite-quick/SKILL.md +10 -5
  210. package/pack/generated/claude/skills/rite-resolve/SKILL.md +3 -3
  211. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +4 -5
  212. package/pack/generated/claude/skills/rite-review/SKILL.md +2 -1
  213. package/pack/generated/claude/skills/rite-seal/SKILL.md +3 -3
  214. package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +2 -0
  215. package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +5 -2
  216. package/pack/generated/claude/skills/rite-ship/reference/close-out.md +3 -2
  217. package/pack/generated/claude/skills/rite-spec/SKILL.md +4 -1
  218. package/pack/generated/claude/skills/rite-spec/reference/state-workspace.md +2 -2
  219. package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
  220. package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -0
  221. package/pack/generated/claude/skills/rite-upgrade/SKILL.md +4 -2
  222. package/pack/generated/claude/skills/rite-vet/SKILL.md +3 -2
  223. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +1 -1
  224. package/pack/generated/claude/skills/rite-watch-pr/SKILL.md +1 -1
  225. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +1 -1
  226. package/pack/generated/codex/agents/devrites-code-reviewer.toml +7 -7
  227. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +6 -1
  228. package/pack/generated/codex/agents/devrites-evidence-scout.toml +4 -0
  229. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +1 -1
  230. package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -3
  231. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +5 -2
  232. package/pack/generated/codex/agents/devrites-proof-runner.toml +2 -2
  233. package/pack/generated/codex/agents/devrites-security-auditor.toml +1 -1
  234. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +1 -1
  235. package/pack/generated/codex/agents/devrites-slice-wright.toml +5 -5
  236. package/pack/generated/codex/agents/devrites-test-analyst.toml +5 -5
  237. package/pack/generated/codex/agents/devrites-upgrade-planner.toml +1 -1
  238. package/pack/generated/codex/agents/fast-builder.toml +3 -3
  239. package/pack/generated/codex/agents/fast-critic.toml +3 -3
  240. package/pack/generated/codex/agents/overhaul-backend-engineer.toml +2 -0
  241. package/pack/generated/codex/agents/overhaul-boundary.toml +2 -0
  242. package/pack/generated/codex/agents/overhaul-craft.toml +2 -0
  243. package/pack/generated/codex/agents/overhaul-frontend-engineer.toml +2 -0
  244. package/pack/generated/codex/agents/overhaul-implementer.toml +2 -0
  245. package/pack/generated/codex/agents/overhaul-recon.toml +2 -0
  246. package/pack/generated/codex/agents/overhaul-specialist.toml +2 -0
  247. package/pack/generated/codex/agents/overhaul-verifier.toml +2 -0
  248. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -1
  249. package/pack/generated/codex/skills/devrites-audit/SKILL.md +1 -1
  250. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +1 -1
  251. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +8 -6
  252. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +1 -1
  253. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +1 -1
  254. package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
  255. package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +3 -3
  256. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
  257. package/pack/generated/codex/skills/devrites-lib/reference/reply-contract.md +12 -15
  258. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +30 -10
  259. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +1 -1
  260. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  261. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +1 -1
  262. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +2 -2
  263. package/pack/generated/codex/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  264. package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  265. package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  266. package/pack/generated/codex/skills/devrites-lib/reference/standards/one-shot-actions.md +7 -6
  267. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +2 -0
  268. package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  269. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +13 -0
  270. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
  271. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +1 -1
  272. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +1 -1
  273. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
  274. package/pack/generated/codex/skills/overhaul/SKILL.md +15 -15
  275. package/pack/generated/codex/skills/overhaul/references/audit-domains.md +2 -2
  276. package/pack/generated/codex/skills/overhaul/references/orchestration.md +11 -7
  277. package/pack/generated/codex/skills/overhaul/references/records.md +8 -3
  278. package/pack/generated/codex/skills/rite/SKILL.md +4 -3
  279. package/pack/generated/codex/skills/rite/reference/menu.md +6 -5
  280. package/pack/generated/codex/skills/rite-adopt/SKILL.md +4 -3
  281. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +18 -15
  282. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +9 -6
  283. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
  284. package/pack/generated/codex/skills/rite-build/SKILL.md +2 -2
  285. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +6 -3
  286. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +6 -6
  287. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +20 -1
  288. package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
  289. package/pack/generated/codex/skills/rite-converge/SKILL.md +5 -4
  290. package/pack/generated/codex/skills/rite-customize/SKILL.md +1 -1
  291. package/pack/generated/codex/skills/rite-define/SKILL.md +4 -3
  292. package/pack/generated/codex/skills/rite-doctor/SKILL.md +12 -6
  293. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +2 -2
  294. package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
  295. package/pack/generated/codex/skills/rite-fast/SKILL.md +8 -6
  296. package/pack/generated/codex/skills/rite-frame/SKILL.md +1 -1
  297. package/pack/generated/codex/skills/rite-handoff/SKILL.md +4 -3
  298. package/pack/generated/codex/skills/rite-learn/SKILL.md +2 -2
  299. package/pack/generated/codex/skills/rite-plan/SKILL.md +2 -2
  300. package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +2 -0
  301. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -1
  302. package/pack/generated/codex/skills/rite-polish/SKILL.md +2 -2
  303. package/pack/generated/codex/skills/rite-pov/SKILL.md +1 -1
  304. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +5 -4
  305. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -5
  306. package/pack/generated/codex/skills/rite-prototype/SKILL.md +1 -1
  307. package/pack/generated/codex/skills/rite-prove/SKILL.md +5 -3
  308. package/pack/generated/codex/skills/rite-prove/reference/failure-triage.md +2 -1
  309. package/pack/generated/codex/skills/rite-quick/SKILL.md +11 -6
  310. package/pack/generated/codex/skills/rite-resolve/SKILL.md +3 -3
  311. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +4 -5
  312. package/pack/generated/codex/skills/rite-review/SKILL.md +3 -2
  313. package/pack/generated/codex/skills/rite-seal/SKILL.md +4 -4
  314. package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +2 -0
  315. package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +5 -2
  316. package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
  317. package/pack/generated/codex/skills/rite-ship/reference/close-out.md +3 -2
  318. package/pack/generated/codex/skills/rite-spec/SKILL.md +5 -2
  319. package/pack/generated/codex/skills/rite-spec/reference/state-workspace.md +2 -2
  320. package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
  321. package/pack/generated/codex/skills/rite-temper/SKILL.md +2 -2
  322. package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -0
  323. package/pack/generated/codex/skills/rite-upgrade/SKILL.md +4 -2
  324. package/pack/generated/codex/skills/rite-vet/SKILL.md +4 -3
  325. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +1 -1
  326. package/pack/generated/codex/skills/rite-watch-pr/SKILL.md +1 -1
  327. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +1 -1
  328. package/pack/generated/devin/AGENTS.md +1 -1
  329. package/pack/generated/devin/agents/devrites-devex-reviewer.md +5 -0
  330. package/pack/generated/devin/agents/devrites-evidence-scout.md +4 -0
  331. package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -1
  332. package/pack/generated/devin/agents/overhaul-backend-engineer.md +2 -0
  333. package/pack/generated/devin/agents/overhaul-boundary.md +2 -0
  334. package/pack/generated/devin/agents/overhaul-craft.md +2 -0
  335. package/pack/generated/devin/agents/overhaul-frontend-engineer.md +2 -0
  336. package/pack/generated/devin/agents/overhaul-implementer.md +2 -0
  337. package/pack/generated/devin/agents/overhaul-recon.md +2 -0
  338. package/pack/generated/devin/agents/overhaul-specialist.md +2 -0
  339. package/pack/generated/devin/agents/overhaul-verifier.md +2 -0
  340. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +1 -1
  341. package/pack/generated/devin/skills/devrites-audit/SKILL.md +1 -1
  342. package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +1 -1
  343. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +8 -6
  344. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +1 -1
  345. package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +1 -1
  346. package/pack/generated/devin/skills/devrites-interview/SKILL.md +2 -2
  347. package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +3 -3
  348. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
  349. package/pack/generated/devin/skills/devrites-lib/reference/reply-contract.md +12 -15
  350. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +33 -13
  351. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +1 -1
  352. package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  353. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +1 -1
  354. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +2 -2
  355. package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  356. package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  357. package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  358. package/pack/generated/devin/skills/devrites-lib/reference/standards/one-shot-actions.md +7 -6
  359. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +2 -0
  360. package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  361. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +13 -0
  362. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
  363. package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +1 -1
  364. package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +1 -1
  365. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
  366. package/pack/generated/devin/skills/overhaul/SKILL.md +15 -15
  367. package/pack/generated/devin/skills/overhaul/references/audit-domains.md +2 -2
  368. package/pack/generated/devin/skills/overhaul/references/orchestration.md +11 -7
  369. package/pack/generated/devin/skills/overhaul/references/records.md +8 -3
  370. package/pack/generated/devin/skills/rite/SKILL.md +4 -3
  371. package/pack/generated/devin/skills/rite/reference/menu.md +6 -5
  372. package/pack/generated/devin/skills/rite-adopt/SKILL.md +4 -3
  373. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +19 -16
  374. package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +1 -1
  375. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +9 -6
  376. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +26 -22
  377. package/pack/generated/devin/skills/rite-build/SKILL.md +2 -2
  378. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +6 -3
  379. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +2 -2
  380. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +6 -6
  381. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +20 -1
  382. package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
  383. package/pack/generated/devin/skills/rite-converge/SKILL.md +5 -4
  384. package/pack/generated/devin/skills/rite-customize/SKILL.md +1 -1
  385. package/pack/generated/devin/skills/rite-define/SKILL.md +4 -3
  386. package/pack/generated/devin/skills/rite-doctor/SKILL.md +12 -6
  387. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +2 -2
  388. package/pack/generated/devin/skills/rite-explain/SKILL.md +3 -3
  389. package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
  390. package/pack/generated/devin/skills/rite-fast/SKILL.md +8 -6
  391. package/pack/generated/devin/skills/rite-frame/SKILL.md +1 -1
  392. package/pack/generated/devin/skills/rite-handoff/SKILL.md +4 -3
  393. package/pack/generated/devin/skills/rite-learn/SKILL.md +2 -2
  394. package/pack/generated/devin/skills/rite-plan/SKILL.md +2 -2
  395. package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +2 -0
  396. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -1
  397. package/pack/generated/devin/skills/rite-polish/SKILL.md +2 -2
  398. package/pack/generated/devin/skills/rite-pov/SKILL.md +1 -1
  399. package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +5 -4
  400. package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +7 -5
  401. package/pack/generated/devin/skills/rite-prototype/SKILL.md +1 -1
  402. package/pack/generated/devin/skills/rite-prove/SKILL.md +5 -3
  403. package/pack/generated/devin/skills/rite-prove/reference/failure-triage.md +2 -1
  404. package/pack/generated/devin/skills/rite-quick/SKILL.md +11 -6
  405. package/pack/generated/devin/skills/rite-resolve/SKILL.md +4 -4
  406. package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +4 -5
  407. package/pack/generated/devin/skills/rite-review/SKILL.md +3 -2
  408. package/pack/generated/devin/skills/rite-seal/SKILL.md +4 -4
  409. package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +2 -0
  410. package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +5 -2
  411. package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
  412. package/pack/generated/devin/skills/rite-ship/reference/close-out.md +3 -2
  413. package/pack/generated/devin/skills/rite-spec/SKILL.md +5 -2
  414. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +1 -1
  415. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +2 -2
  416. package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
  417. package/pack/generated/devin/skills/rite-temper/SKILL.md +3 -3
  418. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +1 -1
  419. package/pack/generated/devin/skills/rite-temper/reference/significance.md +3 -1
  420. package/pack/generated/devin/skills/rite-upgrade/SKILL.md +4 -2
  421. package/pack/generated/devin/skills/rite-vet/SKILL.md +4 -3
  422. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +1 -1
  423. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
  424. package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +1 -1
  425. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +1 -1
  426. package/pack/generated/omp/agents/devrites-code-reviewer.md +7 -7
  427. package/pack/generated/omp/agents/devrites-devex-reviewer.md +6 -1
  428. package/pack/generated/omp/agents/devrites-evidence-scout.md +4 -0
  429. package/pack/generated/omp/agents/devrites-frontend-reviewer.md +1 -1
  430. package/pack/generated/omp/agents/devrites-plan-drafter.md +3 -3
  431. package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -2
  432. package/pack/generated/omp/agents/devrites-proof-runner.md +2 -2
  433. package/pack/generated/omp/agents/devrites-security-auditor.md +1 -1
  434. package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +1 -1
  435. package/pack/generated/omp/agents/devrites-slice-wright.md +5 -5
  436. package/pack/generated/omp/agents/devrites-test-analyst.md +5 -5
  437. package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
  438. package/pack/generated/omp/agents/fast-builder.md +3 -3
  439. package/pack/generated/omp/agents/fast-critic.md +3 -3
  440. package/pack/generated/omp/agents/overhaul-backend-engineer.md +2 -0
  441. package/pack/generated/omp/agents/overhaul-boundary.md +2 -0
  442. package/pack/generated/omp/agents/overhaul-craft.md +2 -0
  443. package/pack/generated/omp/agents/overhaul-frontend-engineer.md +2 -0
  444. package/pack/generated/omp/agents/overhaul-implementer.md +2 -0
  445. package/pack/generated/omp/agents/overhaul-recon.md +2 -0
  446. package/pack/generated/omp/agents/overhaul-specialist.md +2 -0
  447. package/pack/generated/omp/agents/overhaul-verifier.md +2 -0
  448. package/pack/generated/omp/commands/rite-resolve.md +1 -1
  449. package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +4 -4
  450. package/pack/generated/omp/skills/devrites-audit/SKILL.md +5 -5
  451. package/pack/generated/omp/skills/devrites-browser-proof/SKILL.md +5 -5
  452. package/pack/generated/omp/skills/devrites-browser-proof/reference/browser-performance.md +1 -1
  453. package/pack/generated/omp/skills/devrites-browser-proof/reference/visual-verdict.md +1 -1
  454. package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +12 -10
  455. package/pack/generated/omp/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +1 -1
  456. package/pack/generated/omp/skills/devrites-doubt/SKILL.md +6 -6
  457. package/pack/generated/omp/skills/devrites-frontend-craft/SKILL.md +3 -3
  458. package/pack/generated/omp/skills/devrites-frontend-craft/reference/craft.md +1 -1
  459. package/pack/generated/omp/skills/devrites-frontend-craft/reference/design-references.md +4 -4
  460. package/pack/generated/omp/skills/devrites-frontend-craft/reference/fullstack.md +1 -1
  461. package/pack/generated/omp/skills/devrites-frontend-craft/reference/quality-standards.md +8 -8
  462. package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +2 -2
  463. package/pack/generated/omp/skills/devrites-frontend-craft/reference/shape.md +2 -2
  464. package/pack/generated/omp/skills/devrites-interview/SKILL.md +3 -3
  465. package/pack/generated/omp/skills/devrites-lib/reference/intent-map.md +4 -4
  466. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +8 -7
  467. package/pack/generated/omp/skills/devrites-lib/reference/reply-contract.md +12 -15
  468. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +38 -18
  469. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +6 -6
  470. package/pack/generated/omp/skills/devrites-lib/reference/standards/browser-proof-checklist.md +2 -2
  471. package/pack/generated/omp/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  472. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-review.md +3 -3
  473. package/pack/generated/omp/skills/devrites-lib/reference/standards/coding-style.md +1 -1
  474. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +2 -2
  475. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +4 -4
  476. package/pack/generated/omp/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  477. package/pack/generated/omp/skills/devrites-lib/reference/standards/debug-recovery.md +1 -1
  478. package/pack/generated/omp/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
  479. package/pack/generated/omp/skills/devrites-lib/reference/standards/developer-experience.md +8 -3
  480. package/pack/generated/omp/skills/devrites-lib/reference/standards/glossary.md +3 -3
  481. package/pack/generated/omp/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  482. package/pack/generated/omp/skills/devrites-lib/reference/standards/one-shot-actions.md +7 -6
  483. package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +3 -1
  484. package/pack/generated/omp/skills/devrites-lib/reference/standards/prose-style.md +4 -4
  485. package/pack/generated/omp/skills/devrites-lib/reference/standards/release/ship-checklist.md +1 -1
  486. package/pack/generated/omp/skills/devrites-lib/reference/standards/review/README.md +1 -1
  487. package/pack/generated/omp/skills/devrites-lib/reference/standards/review/ci-workflows.md +1 -1
  488. package/pack/generated/omp/skills/devrites-lib/reference/standards/review/react.md +1 -1
  489. package/pack/generated/omp/skills/devrites-lib/reference/standards/review/stack-profile.md +5 -5
  490. package/pack/generated/omp/skills/devrites-lib/reference/standards/skill-authoring.md +15 -3
  491. package/pack/generated/omp/skills/devrites-lib/reference/standards/spec-grammar.md +3 -3
  492. package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +14 -1
  493. package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +1 -1
  494. package/pack/generated/omp/skills/devrites-lib/reference/standards/verification-methods.md +1 -1
  495. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/index.md +2 -2
  496. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +12 -8
  497. package/pack/generated/omp/skills/devrites-prose-craft/SKILL.md +4 -4
  498. package/pack/generated/omp/skills/devrites-prose-craft/reference/examples.md +1 -1
  499. package/pack/generated/omp/skills/devrites-source-driven/SKILL.md +3 -3
  500. package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +10 -10
  501. package/pack/generated/omp/skills/devrites-ux-shape/reference/brief-template.md +3 -3
  502. package/pack/generated/omp/skills/devrites-ux-shape/reference/visual-direction-probe.md +1 -1
  503. package/pack/generated/omp/skills/overhaul/references/orchestration.md +6 -2
  504. package/pack/generated/omp/skills/overhaul/references/records.md +8 -3
  505. package/pack/generated/omp/skills/rite/SKILL.md +8 -7
  506. package/pack/generated/omp/skills/rite/reference/menu.md +6 -5
  507. package/pack/generated/omp/skills/rite-adopt/SKILL.md +6 -5
  508. package/pack/generated/omp/skills/rite-adopt/reference/anti-patterns.md +1 -1
  509. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +22 -19
  510. package/pack/generated/omp/skills/rite-autocomplete/reference/decision-policy.md +1 -1
  511. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +11 -8
  512. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
  513. package/pack/generated/omp/skills/rite-build/SKILL.md +7 -7
  514. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +7 -4
  515. package/pack/generated/omp/skills/rite-build/reference/anti-patterns.md +1 -1
  516. package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +2 -2
  517. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -2
  518. package/pack/generated/omp/skills/rite-build/reference/frontend-trigger.md +1 -1
  519. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +9 -9
  520. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +6 -6
  521. package/pack/generated/omp/skills/rite-build/reference/tdd.md +1 -1
  522. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +27 -8
  523. package/pack/generated/omp/skills/rite-clarify/SKILL.md +4 -4
  524. package/pack/generated/omp/skills/rite-clarify/reference/anti-patterns.md +1 -1
  525. package/pack/generated/omp/skills/rite-converge/SKILL.md +16 -15
  526. package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +4 -4
  527. package/pack/generated/omp/skills/rite-customize/SKILL.md +2 -2
  528. package/pack/generated/omp/skills/rite-define/SKILL.md +25 -24
  529. package/pack/generated/omp/skills/rite-define/reference/anti-patterns.md +2 -2
  530. package/pack/generated/omp/skills/rite-define/reference/gates.md +2 -2
  531. package/pack/generated/omp/skills/rite-doctor/SKILL.md +12 -6
  532. package/pack/generated/omp/skills/rite-dogfood/SKILL.md +5 -5
  533. package/pack/generated/omp/skills/rite-explain/SKILL.md +7 -7
  534. package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
  535. package/pack/generated/omp/skills/rite-fast/SKILL.md +12 -10
  536. package/pack/generated/omp/skills/rite-fast/reference/artifacts.md +1 -1
  537. package/pack/generated/omp/skills/rite-frame/SKILL.md +6 -6
  538. package/pack/generated/omp/skills/rite-frame/reference/failure-modes.md +4 -4
  539. package/pack/generated/omp/skills/rite-handoff/SKILL.md +7 -6
  540. package/pack/generated/omp/skills/rite-learn/SKILL.md +6 -6
  541. package/pack/generated/omp/skills/rite-plan/SKILL.md +9 -9
  542. package/pack/generated/omp/skills/rite-plan/reference/anti-patterns.md +1 -1
  543. package/pack/generated/omp/skills/rite-plan/reference/replan-and-repair.md +3 -1
  544. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +6 -4
  545. package/pack/generated/omp/skills/rite-plan/reference/task-breakdown.md +1 -1
  546. package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -6
  547. package/pack/generated/omp/skills/rite-polish/reference/anti-ai-slop.md +9 -9
  548. package/pack/generated/omp/skills/rite-polish/reference/anti-patterns.md +1 -1
  549. package/pack/generated/omp/skills/rite-polish/reference/backend-polish.md +2 -2
  550. package/pack/generated/omp/skills/rite-polish/reference/browser-polish-evidence.md +1 -1
  551. package/pack/generated/omp/skills/rite-polish/reference/code.md +8 -8
  552. package/pack/generated/omp/skills/rite-polish/reference/design-memory.md +3 -3
  553. package/pack/generated/omp/skills/rite-polish/reference/design-system-discovery.md +1 -1
  554. package/pack/generated/omp/skills/rite-polish/reference/harden-checklist.md +1 -1
  555. package/pack/generated/omp/skills/rite-polish/reference/ledger.md +3 -3
  556. package/pack/generated/omp/skills/rite-polish/reference/ui.md +1 -1
  557. package/pack/generated/omp/skills/rite-pov/SKILL.md +2 -2
  558. package/pack/generated/omp/skills/rite-pr-feedback/SKILL.md +6 -5
  559. package/pack/generated/omp/skills/rite-pressure-test/SKILL.md +9 -7
  560. package/pack/generated/omp/skills/rite-prototype/SKILL.md +1 -1
  561. package/pack/generated/omp/skills/rite-prove/SKILL.md +17 -15
  562. package/pack/generated/omp/skills/rite-prove/reference/acceptance-proof.md +7 -7
  563. package/pack/generated/omp/skills/rite-prove/reference/anti-patterns.md +1 -1
  564. package/pack/generated/omp/skills/rite-prove/reference/browser-proof.md +3 -3
  565. package/pack/generated/omp/skills/rite-prove/reference/failure-triage.md +4 -3
  566. package/pack/generated/omp/skills/rite-quick/SKILL.md +19 -14
  567. package/pack/generated/omp/skills/rite-resolve/SKILL.md +6 -6
  568. package/pack/generated/omp/skills/rite-resolve/reference/answer-protocol.md +4 -5
  569. package/pack/generated/omp/skills/rite-review/SKILL.md +23 -22
  570. package/pack/generated/omp/skills/rite-review/reference/anti-patterns.md +1 -1
  571. package/pack/generated/omp/skills/rite-review/reference/cognitive-load.md +2 -2
  572. package/pack/generated/omp/skills/rite-review/reference/nielsen-heuristics.md +1 -1
  573. package/pack/generated/omp/skills/rite-review/reference/performance-checklist.md +1 -1
  574. package/pack/generated/omp/skills/rite-review/reference/performance-review.md +1 -1
  575. package/pack/generated/omp/skills/rite-review/reference/security-review.md +2 -2
  576. package/pack/generated/omp/skills/rite-seal/SKILL.md +11 -11
  577. package/pack/generated/omp/skills/rite-seal/reference/anti-patterns.md +1 -1
  578. package/pack/generated/omp/skills/rite-seal/reference/final-evidence.md +3 -3
  579. package/pack/generated/omp/skills/rite-seal/reference/go-no-go.md +3 -1
  580. package/pack/generated/omp/skills/rite-seal/reference/output.md +1 -1
  581. package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +4 -4
  582. package/pack/generated/omp/skills/rite-seal/reference/seal-template.md +5 -2
  583. package/pack/generated/omp/skills/rite-ship/SKILL.md +7 -7
  584. package/pack/generated/omp/skills/rite-ship/reference/anti-patterns.md +1 -1
  585. package/pack/generated/omp/skills/rite-ship/reference/close-out.md +5 -4
  586. package/pack/generated/omp/skills/rite-ship/reference/git-ship.md +2 -2
  587. package/pack/generated/omp/skills/rite-ship/reference/rollout.md +3 -3
  588. package/pack/generated/omp/skills/rite-spec/SKILL.md +17 -14
  589. package/pack/generated/omp/skills/rite-spec/reference/anti-patterns.md +1 -1
  590. package/pack/generated/omp/skills/rite-spec/reference/investigation.md +3 -3
  591. package/pack/generated/omp/skills/rite-spec/reference/question-protocol.md +1 -1
  592. package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +2 -2
  593. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +10 -10
  594. package/pack/generated/omp/skills/rite-status/SKILL.md +2 -2
  595. package/pack/generated/omp/skills/rite-temper/SKILL.md +13 -13
  596. package/pack/generated/omp/skills/rite-temper/reference/anti-patterns.md +2 -2
  597. package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +3 -3
  598. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +3 -3
  599. package/pack/generated/omp/skills/rite-temper/reference/significance.md +4 -2
  600. package/pack/generated/omp/skills/rite-upgrade/SKILL.md +7 -5
  601. package/pack/generated/omp/skills/rite-vet/SKILL.md +14 -13
  602. package/pack/generated/omp/skills/rite-vet/reference/anti-patterns.md +2 -2
  603. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +3 -3
  604. package/pack/generated/omp/skills/rite-vet/reference/depth.md +3 -3
  605. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +5 -5
  606. package/pack/generated/omp/skills/rite-watch-pr/SKILL.md +2 -2
  607. package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +1 -1
  608. package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -0
  609. package/pack/generated/pi/agents/devrites-evidence-scout.md +4 -0
  610. package/pack/generated/pi/agents/devrites-plan-reviewer.md +4 -1
  611. package/pack/generated/pi/agents/overhaul-backend-engineer.md +2 -0
  612. package/pack/generated/pi/agents/overhaul-boundary.md +2 -0
  613. package/pack/generated/pi/agents/overhaul-craft.md +2 -0
  614. package/pack/generated/pi/agents/overhaul-frontend-engineer.md +2 -0
  615. package/pack/generated/pi/agents/overhaul-implementer.md +2 -0
  616. package/pack/generated/pi/agents/overhaul-recon.md +2 -0
  617. package/pack/generated/pi/agents/overhaul-specialist.md +2 -0
  618. package/pack/generated/pi/agents/overhaul-verifier.md +2 -0
  619. package/pack/generated/pi/prompts/rite-resolve.md +1 -1
  620. package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +1 -1
  621. package/pack/generated/pi/skills/devrites-audit/SKILL.md +1 -1
  622. package/pack/generated/pi/skills/devrites-browser-proof/SKILL.md +1 -1
  623. package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +8 -6
  624. package/pack/generated/pi/skills/devrites-doubt/SKILL.md +1 -1
  625. package/pack/generated/pi/skills/devrites-frontend-craft/SKILL.md +1 -1
  626. package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
  627. package/pack/generated/pi/skills/devrites-lib/reference/intent-map.md +3 -3
  628. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
  629. package/pack/generated/pi/skills/devrites-lib/reference/reply-contract.md +12 -15
  630. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +30 -10
  631. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +1 -1
  632. package/pack/generated/pi/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  633. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-review.md +1 -1
  634. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +2 -2
  635. package/pack/generated/pi/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  636. package/pack/generated/pi/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  637. package/pack/generated/pi/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  638. package/pack/generated/pi/skills/devrites-lib/reference/standards/one-shot-actions.md +7 -6
  639. package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +2 -0
  640. package/pack/generated/pi/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  641. package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +13 -0
  642. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
  643. package/pack/generated/pi/skills/devrites-prose-craft/SKILL.md +1 -1
  644. package/pack/generated/pi/skills/devrites-source-driven/SKILL.md +1 -1
  645. package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
  646. package/pack/generated/pi/skills/overhaul/SKILL.md +15 -15
  647. package/pack/generated/pi/skills/overhaul/references/audit-domains.md +2 -2
  648. package/pack/generated/pi/skills/overhaul/references/orchestration.md +11 -7
  649. package/pack/generated/pi/skills/overhaul/references/records.md +8 -3
  650. package/pack/generated/pi/skills/rite/SKILL.md +4 -3
  651. package/pack/generated/pi/skills/rite/reference/menu.md +6 -5
  652. package/pack/generated/pi/skills/rite-adopt/SKILL.md +4 -3
  653. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +18 -15
  654. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +9 -6
  655. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +25 -21
  656. package/pack/generated/pi/skills/rite-build/SKILL.md +2 -2
  657. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +6 -3
  658. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +6 -6
  659. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +20 -1
  660. package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
  661. package/pack/generated/pi/skills/rite-converge/SKILL.md +5 -4
  662. package/pack/generated/pi/skills/rite-customize/SKILL.md +1 -1
  663. package/pack/generated/pi/skills/rite-define/SKILL.md +4 -3
  664. package/pack/generated/pi/skills/rite-doctor/SKILL.md +12 -6
  665. package/pack/generated/pi/skills/rite-dogfood/SKILL.md +2 -2
  666. package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
  667. package/pack/generated/pi/skills/rite-fast/SKILL.md +8 -6
  668. package/pack/generated/pi/skills/rite-frame/SKILL.md +1 -1
  669. package/pack/generated/pi/skills/rite-handoff/SKILL.md +4 -3
  670. package/pack/generated/pi/skills/rite-learn/SKILL.md +2 -2
  671. package/pack/generated/pi/skills/rite-plan/SKILL.md +2 -2
  672. package/pack/generated/pi/skills/rite-plan/reference/replan-and-repair.md +2 -0
  673. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -1
  674. package/pack/generated/pi/skills/rite-polish/SKILL.md +2 -2
  675. package/pack/generated/pi/skills/rite-pov/SKILL.md +1 -1
  676. package/pack/generated/pi/skills/rite-pr-feedback/SKILL.md +5 -4
  677. package/pack/generated/pi/skills/rite-pressure-test/SKILL.md +7 -5
  678. package/pack/generated/pi/skills/rite-prototype/SKILL.md +1 -1
  679. package/pack/generated/pi/skills/rite-prove/SKILL.md +5 -3
  680. package/pack/generated/pi/skills/rite-prove/reference/failure-triage.md +2 -1
  681. package/pack/generated/pi/skills/rite-quick/SKILL.md +11 -6
  682. package/pack/generated/pi/skills/rite-resolve/SKILL.md +3 -3
  683. package/pack/generated/pi/skills/rite-resolve/reference/answer-protocol.md +4 -5
  684. package/pack/generated/pi/skills/rite-review/SKILL.md +3 -2
  685. package/pack/generated/pi/skills/rite-seal/SKILL.md +4 -4
  686. package/pack/generated/pi/skills/rite-seal/reference/go-no-go.md +2 -0
  687. package/pack/generated/pi/skills/rite-seal/reference/seal-template.md +5 -2
  688. package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
  689. package/pack/generated/pi/skills/rite-ship/reference/close-out.md +3 -2
  690. package/pack/generated/pi/skills/rite-spec/SKILL.md +5 -2
  691. package/pack/generated/pi/skills/rite-spec/reference/state-workspace.md +2 -2
  692. package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
  693. package/pack/generated/pi/skills/rite-temper/SKILL.md +2 -2
  694. package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -0
  695. package/pack/generated/pi/skills/rite-upgrade/SKILL.md +4 -2
  696. package/pack/generated/pi/skills/rite-vet/SKILL.md +4 -3
  697. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +1 -1
  698. package/pack/generated/pi/skills/rite-watch-pr/SKILL.md +1 -1
  699. package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +1 -1
  700. package/package.json +3 -2
  701. package/scripts/build-host-artifacts.sh +13 -0
  702. package/scripts/codex-generate.sh +5 -1
  703. package/scripts/devin-generate.sh +4 -3
  704. package/scripts/install-lib.sh +5 -0
  705. package/scripts/omp-generate.sh +23 -1
  706. package/scripts/pi-generate.sh +2 -2
  707. package/engine/cmd/releasepack/main_test.go +0 -239
  708. package/engine/harnessmatrix_test.go +0 -46
  709. package/engine/help_test.go +0 -241
  710. package/engine/internal/acceptance/acceptance_test.go +0 -946
  711. package/engine/internal/devritespaths/paths_test.go +0 -128
  712. package/engine/internal/fsutil/copy_test.go +0 -154
  713. package/engine/internal/gate/gate_test.go +0 -865
  714. package/engine/internal/gate/readiness_binding_test.go +0 -443
  715. package/engine/internal/gitenv/env_test.go +0 -48
  716. package/engine/internal/hostpack/hostpack_test.go +0 -269
  717. package/engine/internal/install/install_test.go +0 -1741
  718. package/engine/internal/install/workspace_advisory_test.go +0 -54
  719. package/engine/internal/lib/candidate_test.go +0 -506
  720. package/engine/internal/lib/claims_test.go +0 -267
  721. package/engine/internal/lib/closeout_test.go +0 -266
  722. package/engine/internal/lib/context_next_test.go +0 -912
  723. package/engine/internal/lib/cursor_compat_test.go +0 -65
  724. package/engine/internal/lib/detect_test.go +0 -118
  725. package/engine/internal/lib/drift_test.go +0 -135
  726. package/engine/internal/lib/dup_test.go +0 -666
  727. package/engine/internal/lib/environment_report_test.go +0 -54
  728. package/engine/internal/lib/evidencefresh_test.go +0 -120
  729. package/engine/internal/lib/handoff_test.go +0 -83
  730. package/engine/internal/lib/manifest_union_test.go +0 -251
  731. package/engine/internal/lib/metrics_test.go +0 -28
  732. package/engine/internal/lib/migrate_test.go +0 -213
  733. package/engine/internal/lib/observe_budgets_test.go +0 -428
  734. package/engine/internal/lib/open_visual_test.go +0 -291
  735. package/engine/internal/lib/regression_test.go +0 -282
  736. package/engine/internal/lib/resolve_remediation_test.go +0 -192
  737. package/engine/internal/lib/secretscan_test.go +0 -556
  738. package/engine/internal/lib/slicecheck_test.go +0 -170
  739. package/engine/internal/lib/taskgraph_test.go +0 -353
  740. package/engine/internal/lib/triggers_test.go +0 -23
  741. package/engine/internal/lib/util_test.go +0 -148
  742. package/engine/internal/lib/visual_outline_test.go +0 -189
  743. package/engine/internal/lib/windows_test.go +0 -420
  744. package/engine/internal/lib/workspace_read_test.go +0 -102
  745. package/engine/internal/markdowntext/markdowntext_fuzz_test.go +0 -36
  746. package/engine/internal/markdowntext/markdowntext_test.go +0 -58
  747. package/engine/internal/markdowntext/testdata/structural.json +0 -277
  748. package/engine/internal/notes/notes_test.go +0 -545
  749. package/engine/internal/overhaul/admit/admit_test.go +0 -204
  750. package/engine/internal/overhaul/admit/packet_test.go +0 -223
  751. package/engine/internal/overhaul/bench/run_test.go +0 -316
  752. package/engine/internal/overhaul/ovio/ovio_test.go +0 -75
  753. package/engine/internal/overhaul/packet/packet_test.go +0 -263
  754. package/engine/internal/overhaul/records/init_test.go +0 -96
  755. package/engine/internal/overhaul/records/records_test.go +0 -696
  756. package/engine/internal/overhaul/records/run_test.go +0 -77
  757. package/engine/internal/overhaul/render/run_test.go +0 -928
  758. package/engine/internal/overhaul/score/run_test.go +0 -636
  759. package/engine/internal/overhaul/snapshot/run_test.go +0 -718
  760. package/engine/internal/parallel/cli_test.go +0 -91
  761. package/engine/internal/parallel/ops_test.go +0 -939
  762. package/engine/internal/parallel/parallel_test.go +0 -645
  763. package/engine/internal/parallel/pathdisjoint_fuzz_test.go +0 -43
  764. package/engine/internal/parallel/pathdisjoint_test.go +0 -193
  765. package/engine/internal/parallel/select_test.go +0 -95
  766. package/engine/internal/parallel/testdata/fuzz/FuzzPathDisjoint/a449b81b4711b7b4 +0 -3
  767. package/engine/internal/reason/reason_test.go +0 -37
  768. package/engine/internal/release/release_test.go +0 -181
  769. package/engine/internal/rootfacts/facts_test.go +0 -364
  770. package/engine/internal/safepath/safepath_fuzz_test.go +0 -21
  771. package/engine/internal/safepath/safepath_test.go +0 -69
  772. package/engine/internal/safepath/safepath_windows_test.go +0 -26
  773. package/engine/internal/state/acceptance_test.go +0 -57
  774. package/engine/internal/state/budgets_test.go +0 -135
  775. package/engine/internal/state/cmd/workflowmanifest/main_test.go +0 -96
  776. package/engine/internal/state/concurrency_test.go +0 -184
  777. package/engine/internal/state/cursor_fuzz_test.go +0 -80
  778. package/engine/internal/state/cursor_test.go +0 -276
  779. package/engine/internal/state/observation_test.go +0 -961
  780. package/engine/internal/state/observation_unix_test.go +0 -68
  781. package/engine/internal/state/state_test.go +0 -986
  782. package/engine/internal/state/taskgraph_fuzz_test.go +0 -38
  783. package/engine/internal/state/taskgraph_test.go +0 -43
  784. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/114b28f68c1fa4db +0 -4
  785. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/378a0f2218e812ea +0 -4
  786. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/39eaa26fcb481e3c +0 -4
  787. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/776ca1dc0143acf0 +0 -4
  788. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/9295930c1ebb81df +0 -4
  789. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/a60de309dc33be0d +0 -4
  790. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f04dc7b06ef7c99f +0 -4
  791. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f3000ac510878bd6 +0 -4
  792. package/engine/internal/state/testdata/fuzz/FuzzWorkspaceSchemaRow/a75aabb9f2a847d5 +0 -2
  793. package/engine/internal/state/workspaceschema_fuzz_test.go +0 -27
  794. package/engine/internal/state/workspaceschema_test.go +0 -101
  795. package/engine/internal/state/write_test.go +0 -136
  796. package/engine/internal/version/version_test.go +0 -29
  797. package/engine/internal/workflow/commands_test.go +0 -18
  798. package/engine/note_routing_test.go +0 -95
  799. package/engine/observation_contract_test.go +0 -175
  800. package/engine/root_routing_test.go +0 -340
@@ -8,21 +8,22 @@ import (
8
8
  "io/fs"
9
9
  "os"
10
10
  "path/filepath"
11
+ "regexp"
12
+ "slices"
11
13
  "sort"
12
14
  "strings"
13
15
 
14
16
  "github.com/devrites/devrites/internal/hostpack"
15
17
  )
16
18
 
17
- func (r *runner) installClaudeSettingsMarker(ownsDefaultMode bool, managed map[string]bool) error {
18
- ownership := "preexisting"
19
- if ownsDefaultMode {
20
- ownership = "added"
21
- }
19
+ func (r *runner) installClaudeSettingsMarker(state claudeSettingsMerge) error {
22
20
  var b strings.Builder
23
- b.WriteString(hostpack.ClaudeSettingsMerge.MarkerText + "\ndefault-mode=" + ownership)
24
- rules := make([]string, 0, len(managed))
25
- for rule := range managed {
21
+ b.WriteString(hostpack.ClaudeSettingsMerge.MarkerText + "\n" + claudeRulesAddedLine)
22
+ if state.created {
23
+ b.WriteString("\n" + claudeSettingsCreatedLine)
24
+ }
25
+ rules := make([]string, 0, len(state.added))
26
+ for rule := range state.added {
26
27
  rules = append(rules, rule)
27
28
  }
28
29
  sort.Strings(rules)
@@ -32,26 +33,55 @@ func (r *runner) installClaudeSettingsMarker(ownsDefaultMode bool, managed map[s
32
33
  return r.installMarker(hostpack.ClaudeSettingsMerge.MarkerRel, b.String())
33
34
  }
34
35
 
35
- func (r *runner) claudeDefaultModeOwned() bool {
36
+ const (
37
+ // claudeRulesAddedLine marks a settings marker whose rule: lines list only
38
+ // the rules DevRites added; older markers listed every payload rule.
39
+ claudeRulesAddedLine = "rules=added"
40
+ // claudeSettingsCreatedLine records that DevRites created settings.json,
41
+ // so uninstall removes it once nothing else is left.
42
+ claudeSettingsCreatedLine = "settings=created"
43
+ )
44
+
45
+ func (r *runner) claudeSettingsMarkerLines() []string {
36
46
  data, err := os.ReadFile(filepath.Join(r.target, filepath.FromSlash(hostpack.ClaudeSettingsMerge.MarkerRel)))
37
- return err == nil && strings.Contains(string(data), "\ndefault-mode=added\n")
47
+ if err != nil {
48
+ return nil
49
+ }
50
+ return strings.Split(strings.ReplaceAll(string(data), "\r\n", "\n"), "\n")
51
+ }
52
+
53
+ // claudeDefaultModeOwned reports a marker from an install that set
54
+ // permissions.defaultMode=plan itself; DevRites no longer sets a mode, so
55
+ // update and uninstall remove that plan mode.
56
+ func (r *runner) claudeDefaultModeOwned() bool {
57
+ return slices.Contains(r.claudeSettingsMarkerLines(), "default-mode=added")
58
+ }
59
+
60
+ // claudeSettingsCreated reports whether DevRites created settings.json. A
61
+ // legacy marker (no rules=added line) predates the settings=created record,
62
+ // so its file is treated as created: uninstall still removes it only when
63
+ // stripping leaves nothing.
64
+ func (r *runner) claudeSettingsCreated() bool {
65
+ lines := r.claudeSettingsMarkerLines()
66
+ return slices.Contains(lines, claudeSettingsCreatedLine) || (lines != nil && !slices.Contains(lines, claudeRulesAddedLine))
38
67
  }
39
68
 
40
69
  // managedClaudePermissionRules returns the exact non-engine allow rules
41
- // DevRites manages in .claude/settings.json: rules recorded in the merge
42
- // marker by past installs, unioned with the current payload's non-engine
43
- // rules so newly added and retired grants both resolve correctly. Engine
44
- // command rules are matched by prefix and never need listing here.
70
+ // DevRites manages in .claude/settings.json: the rules the merge marker
71
+ // records as DevRites-added (none before the first install). A legacy marker
72
+ // that predates added-only recording is unioned with the current payload's non-engine rules, as
73
+ // before. Engine command rules are matched by prefix and never need listing.
45
74
  func (r *runner) managedClaudePermissionRules() map[string]bool {
46
75
  managed := map[string]bool{}
47
- data, err := os.ReadFile(filepath.Join(r.target, filepath.FromSlash(hostpack.ClaudeSettingsMerge.MarkerRel)))
48
- if err == nil {
49
- for _, line := range strings.Split(string(data), "\n") {
50
- if rule, ok := strings.CutPrefix(line, "rule:"); ok {
51
- managed[strings.TrimSpace(rule)] = true
52
- }
76
+ lines := r.claudeSettingsMarkerLines()
77
+ for _, line := range lines {
78
+ if rule, ok := strings.CutPrefix(line, "rule:"); ok {
79
+ managed[strings.TrimSpace(rule)] = true
53
80
  }
54
81
  }
82
+ if lines == nil || slices.Contains(lines, claudeRulesAddedLine) {
83
+ return managed
84
+ }
55
85
  payload, err := readJSONFS(r.payloadFS, hostpack.ClaudeSettingsMerge.PayloadRel)
56
86
  if err == nil {
57
87
  for rule := range managedRulesFromPayload(payload) {
@@ -79,50 +109,26 @@ func managedRulesFromPayload(payload map[string]any) map[string]bool {
79
109
  }
80
110
 
81
111
  func (r *runner) mergeMarkerFile(merge hostpack.MarkerMerge) error {
82
- block, err := fs.ReadFile(r.payloadFS, merge.PayloadRel)
83
- if err != nil {
84
- return fmt.Errorf("read payload %s: %w", merge.PayloadRel, err)
85
- }
86
- dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
87
- // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
88
- if current, readErr := os.ReadFile(dest); readErr == nil {
89
- if err := hostpack.ValidateMarkerBlocks(current, r.sharedMarkerMerges(merge)...); err != nil {
90
- return fmt.Errorf("%w in %s; fix it and rerun", err, merge.TargetRel)
112
+ if !r.opts.DryRun {
113
+ if err := r.recheckPath(merge.TargetRel); err != nil {
114
+ return err
91
115
  }
92
116
  }
117
+ next, current, err := r.markerMergeNext(merge)
118
+ if err != nil {
119
+ return err
120
+ }
93
121
  if r.opts.DryRun {
94
122
  verb := "create DevRites block"
95
- // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
96
- current, readErr := os.ReadFile(dest)
97
- if readErr == nil {
98
- if _, mergeErr := hostpack.MergeMarkerBlock(current, block, merge.Begin, merge.End); mergeErr != nil {
99
- return fmt.Errorf("%w in %s; fix it and rerun", mergeErr, merge.TargetRel)
100
- }
123
+ if current != nil {
124
+ verb = "append DevRites block"
101
125
  if bytes.Contains(current, []byte(merge.Begin)) {
102
126
  verb = "refresh DevRites block"
103
- } else {
104
- verb = "append DevRites block"
105
127
  }
106
- } else if !errors.Is(readErr, fs.ErrNotExist) {
107
- return fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
108
128
  }
109
129
  fmt.Fprintf(r.opts.Stdout, " [merge] %s (%s)\n", merge.TargetRel, verb)
110
130
  } else {
111
- if err := r.recheckPath(merge.TargetRel); err != nil {
112
- return err
113
- }
114
- next := block
115
- // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
116
- current, readErr := os.ReadFile(dest)
117
- if readErr == nil {
118
- var mergeErr error
119
- next, mergeErr = hostpack.MergeMarkerBlock(current, block, merge.Begin, merge.End)
120
- if mergeErr != nil {
121
- return fmt.Errorf("%w in %s; fix it and rerun", mergeErr, merge.TargetRel)
122
- }
123
- } else if !errors.Is(readErr, fs.ErrNotExist) {
124
- return fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
125
- }
131
+ dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
126
132
  if err := r.writeConfined(dest, next, 0o644); err != nil {
127
133
  return fmt.Errorf("cannot write %s: %w", merge.TargetRel, err)
128
134
  }
@@ -135,6 +141,32 @@ func (r *runner) mergeMarkerFile(merge hostpack.MarkerMerge) error {
135
141
  return r.installMarker(merge.MarkerRel, merge.MarkerText)
136
142
  }
137
143
 
144
+ // markerMergeNext returns the merged target bytes and the current bytes
145
+ // (nil when the target is absent) without writing anything.
146
+ func (r *runner) markerMergeNext(merge hostpack.MarkerMerge) ([]byte, []byte, error) {
147
+ block, err := fs.ReadFile(r.payloadFS, merge.PayloadRel)
148
+ if err != nil {
149
+ return nil, nil, fmt.Errorf("read payload %s: %w", merge.PayloadRel, err)
150
+ }
151
+ dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
152
+ // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
153
+ current, readErr := os.ReadFile(dest)
154
+ if errors.Is(readErr, fs.ErrNotExist) {
155
+ return block, nil, nil
156
+ }
157
+ if readErr != nil {
158
+ return nil, nil, fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
159
+ }
160
+ if err := hostpack.ValidateMarkerBlocks(current, r.sharedMarkerMerges(merge)...); err != nil {
161
+ return nil, nil, fmt.Errorf("%w in %s; fix it and rerun", err, merge.TargetRel)
162
+ }
163
+ next, err := hostpack.MergeMarkerBlock(current, block, merge.Begin, merge.End)
164
+ if err != nil {
165
+ return nil, nil, fmt.Errorf("%w in %s; fix it and rerun", err, merge.TargetRel)
166
+ }
167
+ return next, current, nil
168
+ }
169
+
138
170
  func (r *runner) sharedMarkerMerges(merge hostpack.MarkerMerge) []hostpack.MarkerMerge {
139
171
  merges := []hostpack.MarkerMerge{merge}
140
172
  for _, other := range []struct {
@@ -154,71 +186,174 @@ func (r *runner) sharedMarkerMerges(merge hostpack.MarkerMerge) []hostpack.Marke
154
186
 
155
187
  func (r *runner) mergeCodexConfig() error {
156
188
  merge := hostpack.CodexConfigMerge
157
- block, err := fs.ReadFile(r.payloadFS, merge.PayloadRel)
158
- if err != nil {
159
- return fmt.Errorf("read payload %s: %w", merge.PayloadRel, err)
160
- }
161
- dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
162
189
  if r.opts.DryRun {
163
- // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
164
- if data, readErr := os.ReadFile(dest); readErr == nil {
165
- if _, stripErr := hostpack.StripCodexConfigBlocks(data); stripErr != nil {
166
- return fmt.Errorf("%w in %s; fix it and rerun", stripErr, merge.TargetRel)
167
- }
190
+ if _, err := r.codexConfigNext(); err != nil {
191
+ return err
168
192
  }
169
- fmt.Fprintf(r.opts.Stdout, " [merge] %s (prepend DevRites permission block)\n", merge.TargetRel)
193
+ fmt.Fprintf(r.opts.Stdout, " [merge] %s (insert DevRites permission block)\n", merge.TargetRel)
170
194
  return r.installMarker(merge.MarkerRel, merge.MarkerText)
171
195
  }
172
196
  if err := r.recheckPath(merge.TargetRel); err != nil {
173
197
  return err
174
198
  }
199
+ next, err := r.codexConfigNext()
200
+ if err != nil {
201
+ return err
202
+ }
203
+ dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
204
+ if err := r.writeConfined(dest, next, 0o644); err != nil {
205
+ return fmt.Errorf("cannot write %s: %w", merge.TargetRel, err)
206
+ }
207
+ return r.installMarker(merge.MarkerRel, merge.MarkerText)
208
+ }
209
+
210
+ // codexConfigNext returns the merged .codex/config.toml without writing it.
211
+ // The DevRites block ends inside its [permissions.*] table, so it goes after
212
+ // the user's top-level keys and before their first table header; anywhere
213
+ // earlier would re-scope those keys into the DevRites table.
214
+ func (r *runner) codexConfigNext() ([]byte, error) {
215
+ merge := hostpack.CodexConfigMerge
216
+ block, err := fs.ReadFile(r.payloadFS, merge.PayloadRel)
217
+ if err != nil {
218
+ return nil, fmt.Errorf("read payload %s: %w", merge.PayloadRel, err)
219
+ }
220
+ dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
175
221
  var current []byte
176
222
  // #nosec G304 -- dest joins the operator target with a fixed manifest-relative record
177
223
  if data, readErr := os.ReadFile(dest); readErr == nil {
178
- var stripErr error
179
- if data, stripErr = hostpack.StripCodexConfigBlocks(data); stripErr != nil {
180
- return fmt.Errorf("%w in %s; fix it and rerun", stripErr, merge.TargetRel)
224
+ // Drop a UTF-8 BOM: the block may go at offset 0, and a BOM after
225
+ // it is invalid TOML.
226
+ data = bytes.TrimPrefix(data, utf8BOM)
227
+ if current, err = hostpack.StripCodexConfigBlocks(data); err != nil {
228
+ return nil, fmt.Errorf("%w in %s; fix it and rerun", err, merge.TargetRel)
181
229
  }
182
- current = data
183
230
  if hasTopLevelTOMLKey(current, "default_permissions") {
184
- return fmt.Errorf("%s already sets top-level default_permissions; remove that project override before installing the DevRites read-only-root profile", merge.TargetRel)
231
+ return nil, fmt.Errorf("%s already sets top-level default_permissions; remove that project override before installing the DevRites read-only-root profile", merge.TargetRel)
185
232
  }
186
233
  } else if !errors.Is(readErr, fs.ErrNotExist) {
187
- return fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
234
+ return nil, fmt.Errorf("cannot read %s: %w", merge.TargetRel, readErr)
188
235
  }
189
- next := append([]byte(nil), block...)
190
- if len(next) == 0 || next[len(next)-1] != '\n' {
236
+ if len(bytes.TrimSpace(current)) == 0 {
237
+ current = nil
238
+ }
239
+ split := firstTOMLTableHeader(current)
240
+ var next []byte
241
+ if split > 0 {
242
+ next = append(next, current[:split]...)
243
+ if next[len(next)-1] != '\n' {
244
+ next = append(next, '\n')
245
+ }
246
+ // Blank separator; StripMarkerBlock removes it with the block.
191
247
  next = append(next, '\n')
192
248
  }
193
- if len(bytes.TrimSpace(current)) > 0 {
249
+ next = append(next, block...)
250
+ if len(next) == 0 || next[len(next)-1] != '\n' {
194
251
  next = append(next, '\n')
195
- next = append(next, current...)
196
252
  }
197
- if err := r.writeConfined(dest, next, 0o644); err != nil {
198
- return fmt.Errorf("cannot write %s: %w", merge.TargetRel, err)
253
+ return append(next, current[split:]...), nil
254
+ }
255
+
256
+ var utf8BOM = []byte("\xef\xbb\xbf")
257
+
258
+ // firstTOMLTableHeader returns the byte offset of the first [table] or
259
+ // [[array]] header line, or len(data) when there is none.
260
+ func firstTOMLTableHeader(data []byte) int {
261
+ split := len(data)
262
+ scanTOMLTopLevel(data, func(offset int, line string) bool {
263
+ if tomlTableHeader.MatchString(line) {
264
+ split = offset
265
+ return false
266
+ }
267
+ return true
268
+ })
269
+ return split
270
+ }
271
+
272
+ // scanTOMLTopLevel calls visit with the byte offset and trimmed text of each
273
+ // line that starts outside any multi-line string or array/inline-table value
274
+ // (a leading UTF-8 BOM is ignored), until visit returns false. Only such lines
275
+ // can hold a table header or a key.
276
+ func scanTOMLTopLevel(data []byte, visit func(offset int, line string) bool) {
277
+ depth, inString, offset := 0, "", 0
278
+ for i, raw := range strings.SplitAfter(string(data), "\n") {
279
+ line := raw
280
+ if i == 0 {
281
+ line = strings.TrimPrefix(line, string(utf8BOM))
282
+ }
283
+ lineOffset := offset
284
+ offset += len(raw)
285
+ if depth == 0 && inString == "" {
286
+ trimmed := strings.TrimSpace(line)
287
+ if !visit(lineOffset, trimmed) {
288
+ return
289
+ }
290
+ if tomlTableHeader.MatchString(trimmed) {
291
+ continue
292
+ }
293
+ }
294
+ depth, inString = scanTOMLLine(line, depth, inString)
199
295
  }
200
- return r.installMarker(merge.MarkerRel, merge.MarkerText)
201
296
  }
202
297
 
298
+ // scanTOMLLine carries the open [ / { depth and any open multi-line string
299
+ // delimiter (""" or ”') across one line, skipping strings and comments.
300
+ func scanTOMLLine(line string, depth int, inString string) (int, string) {
301
+ for i := 0; i < len(line); i++ {
302
+ if inString != "" {
303
+ if inString == `"""` && line[i] == '\\' {
304
+ i++
305
+ } else if strings.HasPrefix(line[i:], inString) {
306
+ i += 2
307
+ // Up to two extra quotes still belong to the content.
308
+ for i+1 < len(line) && line[i+1] == inString[0] {
309
+ i++
310
+ }
311
+ inString = ""
312
+ }
313
+ continue
314
+ }
315
+ switch c := line[i]; c {
316
+ case '#':
317
+ return depth, ""
318
+ case '[', '{':
319
+ depth++
320
+ case ']', '}':
321
+ if depth > 0 {
322
+ depth--
323
+ }
324
+ case '"', '\'':
325
+ if delim := strings.Repeat(string(c), 3); strings.HasPrefix(line[i:], delim) {
326
+ inString = delim
327
+ i += 2
328
+ continue
329
+ }
330
+ for i++; i < len(line) && line[i] != c; i++ {
331
+ if c == '"' && line[i] == '\\' {
332
+ i++
333
+ }
334
+ }
335
+ }
336
+ }
337
+ return depth, inString
338
+ }
339
+
340
+ // tomlTableHeader matches a trimmed [table] or [[array]] header line. Quoted
341
+ // key parts may hold any character; a bare part stops at brackets, quotes,
342
+ // '#', '=' and ',', so array and inline-table value lines never match.
343
+ var tomlTableHeader = regexp.MustCompile(`^\[\[?(?:[^\[\]"'#=,]|"(?:[^"\\]|\\.)*"|'[^']*')+\]\]?\s*(#.*)?$`)
344
+
203
345
  func (r *runner) mergeClaudeSettings(merge hostpack.JSONMerge) error {
204
346
  dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
205
- devrites, err := readJSONFS(r.payloadFS, merge.PayloadRel)
206
- if err != nil {
207
- return fmt.Errorf("load Claude settings payload: %w", err)
208
- }
209
- current := map[string]any{}
210
- if data, readErr := readJSON(dest); readErr == nil {
211
- current = data
212
- } else if !errors.Is(readErr, fs.ErrNotExist) {
213
- return fmt.Errorf("load existing Claude settings: %w", readErr)
214
- }
215
- next, ownsDefaultMode, err := mergeClaudeSettingsConfig(current, devrites, r.claudeDefaultModeOwned(), r.managedClaudePermissionRules())
347
+ next, state, err := r.claudeSettingsNext()
216
348
  if err != nil {
217
349
  return err
218
350
  }
351
+ if permissions, _ := next["permissions"].(map[string]any); permissions["defaultMode"] == "plan" {
352
+ fmt.Fprintf(r.opts.Stderr, "warning: %s: permissions.defaultMode is plan, which blocks the root's .devrites writes every rite needs (ADR-0035); remove it to run the lifecycle\n", merge.TargetRel)
353
+ }
219
354
  if r.opts.DryRun {
220
355
  fmt.Fprintf(r.opts.Stdout, " [merge] %s\n", merge.DryRunText)
221
- return r.installClaudeSettingsMarker(ownsDefaultMode, managedRulesFromPayload(devrites))
356
+ return r.installClaudeSettingsMarker(state)
222
357
  }
223
358
  if err := r.recheckPath(merge.TargetRel); err != nil {
224
359
  return err
@@ -231,7 +366,39 @@ func (r *runner) mergeClaudeSettings(merge hostpack.JSONMerge) error {
231
366
  if err := r.writeConfined(dest, data, 0o644); err != nil {
232
367
  return fmt.Errorf("cannot write %s: %w", merge.TargetRel, err)
233
368
  }
234
- return r.installClaudeSettingsMarker(ownsDefaultMode, managedRulesFromPayload(devrites))
369
+ return r.installClaudeSettingsMarker(state)
370
+ }
371
+
372
+ // claudeSettingsMerge is what the settings marker records about a merge.
373
+ type claudeSettingsMerge struct {
374
+ created bool
375
+ added map[string]bool
376
+ }
377
+
378
+ // claudeSettingsNext returns the merged .claude/settings.json without
379
+ // writing it.
380
+ func (r *runner) claudeSettingsNext() (map[string]any, claudeSettingsMerge, error) {
381
+ merge := hostpack.ClaudeSettingsMerge
382
+ dest := filepath.Join(r.target, filepath.FromSlash(merge.TargetRel))
383
+ devrites, err := readJSONFS(r.payloadFS, merge.PayloadRel)
384
+ if err != nil {
385
+ return nil, claudeSettingsMerge{}, fmt.Errorf("load Claude settings payload: %w", err)
386
+ }
387
+ current := map[string]any{}
388
+ state := claudeSettingsMerge{created: r.claudeSettingsCreated()}
389
+ if data, readErr := readJSON(dest); readErr == nil {
390
+ current = data
391
+ } else if errors.Is(readErr, fs.ErrNotExist) {
392
+ state.created = true
393
+ } else {
394
+ return nil, claudeSettingsMerge{}, fmt.Errorf("load existing Claude settings: %w", readErr)
395
+ }
396
+ next, added, err := mergeClaudeSettingsConfig(current, devrites, r.claudeDefaultModeOwned(), r.managedClaudePermissionRules())
397
+ if err != nil {
398
+ return nil, claudeSettingsMerge{}, err
399
+ }
400
+ state.added = added
401
+ return next, state, nil
235
402
  }
236
403
 
237
404
  func (r *runner) seedClaudeSettings() error {
@@ -264,7 +431,7 @@ func stripHooksWith(path string, write func([]byte) error, remove func() error)
264
431
  return write(data)
265
432
  }
266
433
 
267
- func (r *runner) stripClaudeSettings(path string, preserveEmpty bool) error {
434
+ func (r *runner) stripClaudeSettings(path string) error {
268
435
  current, err := readJSON(path)
269
436
  if err != nil {
270
437
  if errors.Is(err, fs.ErrNotExist) {
@@ -273,7 +440,7 @@ func (r *runner) stripClaudeSettings(path string, preserveEmpty bool) error {
273
440
  return fmt.Errorf("load Claude settings: %w", err)
274
441
  }
275
442
  next := stripDevritesSettings(current, r.claudeDefaultModeOwned(), r.managedClaudePermissionRules())
276
- if len(next) == 0 && !preserveEmpty {
443
+ if len(next) == 0 && r.claudeSettingsCreated() {
277
444
  return r.removeConfined(path)
278
445
  }
279
446
  data, err := json.MarshalIndent(next, "", " ")
@@ -310,20 +477,20 @@ func stripMarkerWith(path, begin, end string, write func([]byte) error, remove f
310
477
  }
311
478
 
312
479
  func hasTopLevelTOMLKey(data []byte, key string) bool {
313
- for _, line := range strings.Split(string(data), "\n") {
314
- line = strings.TrimSpace(line)
315
- if line == "" || strings.HasPrefix(line, "#") {
316
- continue
317
- }
318
- if strings.HasPrefix(line, "[") {
480
+ found := false
481
+ scanTOMLTopLevel(data, func(_ int, line string) bool {
482
+ if tomlTableHeader.MatchString(line) {
319
483
  return false
320
484
  }
321
485
  name, _, ok := strings.Cut(line, "=")
322
- if ok && strings.TrimSpace(name) == key {
323
- return true
486
+ name = strings.TrimSpace(name)
487
+ if len(name) >= 2 && (name[0] == '"' || name[0] == '\'') && name[len(name)-1] == name[0] {
488
+ name = name[1 : len(name)-1]
324
489
  }
325
- }
326
- return false
490
+ found = ok && name == key
491
+ return !found
492
+ })
493
+ return found
327
494
  }
328
495
 
329
496
  func readJSON(path string) (map[string]any, error) {
@@ -374,7 +541,7 @@ func isDevritesHooksComment(comment string) bool {
374
541
 
375
542
  func isDevritesSettingsComment(comment string) bool {
376
543
  return isDevritesHooksComment(comment) ||
377
- strings.HasPrefix(comment, "DevRites keeps the root orchestration context source-read-only.")
544
+ strings.HasPrefix(comment, "DevRites keeps the root orchestration context source-read-only")
378
545
  }
379
546
 
380
547
  func stripDevritesHooks(config map[string]any) map[string]any {
@@ -493,41 +660,35 @@ func stripDevritesSettings(config map[string]any, removeOwnedDefaultMode bool, m
493
660
  return next
494
661
  }
495
662
 
496
- func mergeClaudeSettingsConfig(current, desired map[string]any, defaultModeOwned bool, managed map[string]bool) (map[string]any, bool, error) {
497
- desiredPermissions, ok := desired["permissions"].(map[string]any)
498
- if !ok || desiredPermissions["defaultMode"] != "plan" {
499
- return nil, false, fmt.Errorf("DevRites Claude settings payload must declare permissions.defaultMode=plan")
500
- }
663
+ // mergeClaudeSettingsConfig also returns the non-engine payload rules the
664
+ // merge added, i.e. those the user did not already grant themselves. It never
665
+ // sets permissions.defaultMode; removeOwnedPlan drops a plan mode an older
666
+ // DevRites install wrote.
667
+ func mergeClaudeSettingsConfig(current, desired map[string]any, removeOwnedPlan bool, managed map[string]bool) (map[string]any, map[string]bool, error) {
668
+ desiredPermissions, _ := desired["permissions"].(map[string]any)
501
669
  desiredAllow, ok := desiredPermissions["allow"].([]any)
502
670
  if !ok {
503
- return nil, false, fmt.Errorf("DevRites Claude settings payload permissions.allow must be an array")
671
+ return nil, nil, fmt.Errorf("DevRites Claude settings payload permissions.allow must be an array")
504
672
  }
505
673
 
506
- next := stripDevritesSettings(current, false, managed)
674
+ next := stripDevritesSettings(current, removeOwnedPlan, managed)
507
675
  permissions := map[string]any{}
508
676
  if raw, exists := next["permissions"]; exists {
509
677
  var ok bool
510
678
  permissions, ok = raw.(map[string]any)
511
679
  if !ok {
512
- return nil, false, fmt.Errorf("existing Claude permissions must be a JSON object")
680
+ return nil, nil, fmt.Errorf("existing Claude permissions must be a JSON object")
513
681
  }
514
682
  }
515
683
 
516
- switch mode, exists := permissions["defaultMode"]; {
517
- case !exists:
518
- defaultModeOwned = true
519
- case mode == "plan":
520
- case mode != "plan":
521
- return nil, false, fmt.Errorf("existing Claude permissions.defaultMode is %q; DevRites requires plan mode for the read-only root orchestrator", mode)
522
- }
523
- permissions["defaultMode"] = "plan"
524
684
  var allow []any
525
685
  if existingAllow, exists := permissions["allow"]; exists {
526
686
  allow, ok = existingAllow.([]any)
527
687
  if !ok {
528
- return nil, false, fmt.Errorf("existing Claude permissions.allow must be an array")
688
+ return nil, nil, fmt.Errorf("existing Claude permissions.allow must be an array")
529
689
  }
530
690
  }
691
+ added := map[string]bool{}
531
692
  seen := map[string]bool{}
532
693
  for _, rule := range allow {
533
694
  if value, ok := rule.(string); ok {
@@ -537,11 +698,14 @@ func mergeClaudeSettingsConfig(current, desired map[string]any, defaultModeOwned
537
698
  for _, rule := range desiredAllow {
538
699
  value, ok := rule.(string)
539
700
  if !ok {
540
- return nil, false, fmt.Errorf("DevRites Claude permission rules must be strings")
701
+ return nil, nil, fmt.Errorf("DevRites Claude permission rules must be strings")
541
702
  }
542
703
  if !seen[value] {
543
704
  allow = append(allow, value)
544
705
  seen[value] = true
706
+ if !strings.HasPrefix(value, "Bash(devrites-engine ") {
707
+ added[value] = true
708
+ }
545
709
  }
546
710
  }
547
711
  permissions["allow"] = allow
@@ -551,7 +715,7 @@ func mergeClaudeSettingsConfig(current, desired map[string]any, defaultModeOwned
551
715
  next["$comment"] = comment
552
716
  }
553
717
  }
554
- return next, defaultModeOwned, nil
718
+ return next, added, nil
555
719
  }
556
720
 
557
721
  // isDevritesPermissionRule reports whether a permissions.allow rule is