devrites 6.0.4 → 6.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 (764) hide show
  1. package/CHANGELOG.md +6 -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/cli.md +25 -2
  9. package/docs/command-map.md +10 -8
  10. package/docs/engine/commands.md +6 -3
  11. package/docs/harness-compliance.md +2 -2
  12. package/docs/orchestration.md +5 -4
  13. package/docs/release.md +4 -4
  14. package/docs/skills.md +2 -2
  15. package/engine/commands.go +1 -1
  16. package/engine/help.go +10 -6
  17. package/engine/internal/acceptance/cli.go +4 -1
  18. package/engine/internal/acceptance/exec.go +11 -11
  19. package/engine/internal/devritespaths/paths.go +5 -0
  20. package/engine/internal/hostpack/hostpack.go +48 -3
  21. package/engine/internal/install/apply.go +68 -1
  22. package/engine/internal/install/binary.go +4 -0
  23. package/engine/internal/install/install.go +25 -15
  24. package/engine/internal/install/merge.go +287 -123
  25. package/engine/internal/install/preflight.go +71 -1
  26. package/engine/internal/install/uninstall.go +7 -1
  27. package/engine/internal/install/update.go +7 -3
  28. package/engine/internal/lib/claims.go +30 -14
  29. package/engine/internal/lib/cli_observe.go +6 -0
  30. package/engine/internal/lib/context.go +24 -7
  31. package/engine/internal/lib/diffscope.go +79 -3
  32. package/engine/internal/lib/dispatch.go +34 -7
  33. package/engine/internal/lib/drift.go +9 -2
  34. package/engine/internal/lib/handoff.go +14 -5
  35. package/engine/internal/lib/metrics.go +29 -9
  36. package/engine/internal/lib/migrate.go +30 -12
  37. package/engine/internal/lib/next.go +22 -2
  38. package/engine/internal/lib/open_visual.go +3 -1
  39. package/engine/internal/lib/recall.go +355 -0
  40. package/engine/internal/lib/regression.go +20 -0
  41. package/engine/internal/lib/resolve.go +96 -53
  42. package/engine/internal/lib/secretscan.go +24 -1
  43. package/engine/internal/lib/taskgraph.go +31 -1
  44. package/engine/internal/lib/util.go +18 -7
  45. package/engine/internal/lib/windows.go +68 -15
  46. package/engine/internal/markdowntext/markdowntext.go +45 -6
  47. package/engine/internal/notes/cli.go +5 -3
  48. package/engine/internal/notes/notes.go +8 -3
  49. package/engine/internal/overhaul/admit/run.go +16 -12
  50. package/engine/internal/overhaul/overhaul.go +1 -0
  51. package/engine/internal/overhaul/records/check.go +52 -9
  52. package/engine/internal/overhaul/render/run.go +3 -2
  53. package/engine/internal/overhaul/snapshot/run.go +2 -2
  54. package/engine/internal/parallel/git.go +5 -6
  55. package/engine/internal/parallel/ops.go +3 -0
  56. package/engine/internal/parallel/pathdisjoint.go +9 -4
  57. package/engine/internal/release/release.go +11 -9
  58. package/engine/internal/safepath/safepath.go +17 -1
  59. package/engine/internal/state/budgets.go +8 -4
  60. package/engine/internal/state/feature.go +3 -1
  61. package/engine/internal/state/observation.go +12 -7
  62. package/engine/internal/state/taskgraph.go +67 -12
  63. package/engine/internal/state/write.go +7 -1
  64. package/engine/main.go +5 -1
  65. package/pack/.claude/agents/_shared/composition-overhaul.md +2 -0
  66. package/pack/.claude/agents/devrites-devex-reviewer.md +5 -0
  67. package/pack/.claude/agents/devrites-evidence-scout.md +4 -0
  68. package/pack/.claude/agents/devrites-plan-reviewer.md +4 -1
  69. package/pack/.claude/agents/overhaul-implementer.md +1 -0
  70. package/pack/.claude/settings.json +4 -4
  71. package/pack/.claude/skills/devrites-api-interface/SKILL.md +1 -1
  72. package/pack/.claude/skills/devrites-audit/SKILL.md +1 -1
  73. package/pack/.claude/skills/devrites-browser-proof/SKILL.md +1 -1
  74. package/pack/.claude/skills/devrites-debug-recovery/SKILL.md +3 -2
  75. package/pack/.claude/skills/devrites-doubt/SKILL.md +1 -1
  76. package/pack/.claude/skills/devrites-frontend-craft/SKILL.md +1 -1
  77. package/pack/.claude/skills/devrites-interview/SKILL.md +1 -1
  78. package/pack/.claude/skills/devrites-lib/reference/intent-map.md +3 -3
  79. package/pack/.claude/skills/devrites-lib/reference/parallel-dispatch.md +4 -3
  80. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +5 -4
  81. package/pack/.claude/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  82. package/pack/.claude/skills/devrites-lib/reference/standards/code-review.md +1 -1
  83. package/pack/.claude/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  84. package/pack/.claude/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  85. package/pack/.claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  86. package/pack/.claude/skills/devrites-lib/reference/standards/performance.md +2 -0
  87. package/pack/.claude/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  88. package/pack/.claude/skills/devrites-lib/reference/standards/testing.md +13 -0
  89. package/pack/.claude/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -6
  90. package/pack/.claude/skills/devrites-prose-craft/SKILL.md +1 -1
  91. package/pack/.claude/skills/devrites-source-driven/SKILL.md +1 -1
  92. package/pack/.claude/skills/devrites-ux-shape/SKILL.md +1 -1
  93. package/pack/.claude/skills/overhaul/references/orchestration.md +6 -2
  94. package/pack/.claude/skills/overhaul/references/records.md +8 -3
  95. package/pack/.claude/skills/rite/SKILL.md +4 -3
  96. package/pack/.claude/skills/rite/reference/menu.md +6 -5
  97. package/pack/.claude/skills/rite-adopt/SKILL.md +4 -3
  98. package/pack/.claude/skills/rite-autocomplete/SKILL.md +6 -5
  99. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +2 -1
  100. package/pack/.claude/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
  101. package/pack/.claude/skills/rite-build/reference/wright-dispatch.md +19 -0
  102. package/pack/.claude/skills/rite-converge/SKILL.md +4 -3
  103. package/pack/.claude/skills/rite-customize/SKILL.md +1 -1
  104. package/pack/.claude/skills/rite-define/SKILL.md +3 -2
  105. package/pack/.claude/skills/rite-doctor/SKILL.md +12 -6
  106. package/pack/.claude/skills/rite-dogfood/SKILL.md +2 -2
  107. package/pack/.claude/skills/rite-explain/SKILL.md +1 -1
  108. package/pack/.claude/skills/rite-fast/SKILL.md +3 -1
  109. package/pack/.claude/skills/rite-handoff/SKILL.md +4 -3
  110. package/pack/.claude/skills/rite-learn/SKILL.md +2 -2
  111. package/pack/.claude/skills/rite-plan/reference/replan-and-repair.md +2 -0
  112. package/pack/.claude/skills/rite-plan/reference/slicing.md +3 -1
  113. package/pack/.claude/skills/rite-pov/SKILL.md +1 -1
  114. package/pack/.claude/skills/rite-pr-feedback/SKILL.md +5 -4
  115. package/pack/.claude/skills/rite-pressure-test/SKILL.md +7 -5
  116. package/pack/.claude/skills/rite-prototype/SKILL.md +1 -1
  117. package/pack/.claude/skills/rite-quick/SKILL.md +10 -5
  118. package/pack/.claude/skills/rite-resolve/SKILL.md +3 -3
  119. package/pack/.claude/skills/rite-resolve/reference/answer-protocol.md +4 -5
  120. package/pack/.claude/skills/rite-review/SKILL.md +2 -1
  121. package/pack/.claude/skills/rite-seal/SKILL.md +3 -3
  122. package/pack/.claude/skills/rite-seal/reference/go-no-go.md +2 -0
  123. package/pack/.claude/skills/rite-seal/reference/seal-template.md +5 -2
  124. package/pack/.claude/skills/rite-ship/reference/close-out.md +3 -2
  125. package/pack/.claude/skills/rite-spec/SKILL.md +4 -1
  126. package/pack/.claude/skills/rite-status/SKILL.md +1 -1
  127. package/pack/.claude/skills/rite-temper/reference/significance.md +2 -0
  128. package/pack/.claude/skills/rite-upgrade/SKILL.md +4 -2
  129. package/pack/.claude/skills/rite-vet/SKILL.md +3 -2
  130. package/pack/.claude/skills/rite-vet/reference/artifacts.md +1 -1
  131. package/pack/.claude/skills/rite-watch-pr/SKILL.md +1 -1
  132. package/pack/.claude/skills/rite-zoom-out/SKILL.md +1 -1
  133. package/pack/generated/claude/agents/devrites-devex-reviewer.md +5 -0
  134. package/pack/generated/claude/agents/devrites-evidence-scout.md +4 -0
  135. package/pack/generated/claude/agents/devrites-plan-reviewer.md +4 -1
  136. package/pack/generated/claude/agents/overhaul-backend-engineer.md +2 -0
  137. package/pack/generated/claude/agents/overhaul-boundary.md +2 -0
  138. package/pack/generated/claude/agents/overhaul-craft.md +2 -0
  139. package/pack/generated/claude/agents/overhaul-frontend-engineer.md +2 -0
  140. package/pack/generated/claude/agents/overhaul-implementer.md +3 -0
  141. package/pack/generated/claude/agents/overhaul-recon.md +2 -0
  142. package/pack/generated/claude/agents/overhaul-specialist.md +2 -0
  143. package/pack/generated/claude/agents/overhaul-verifier.md +2 -0
  144. package/pack/generated/claude/settings.json +4 -4
  145. package/pack/generated/claude/skills/devrites-api-interface/SKILL.md +1 -1
  146. package/pack/generated/claude/skills/devrites-audit/SKILL.md +1 -1
  147. package/pack/generated/claude/skills/devrites-browser-proof/SKILL.md +1 -1
  148. package/pack/generated/claude/skills/devrites-debug-recovery/SKILL.md +3 -2
  149. package/pack/generated/claude/skills/devrites-doubt/SKILL.md +1 -1
  150. package/pack/generated/claude/skills/devrites-frontend-craft/SKILL.md +1 -1
  151. package/pack/generated/claude/skills/devrites-interview/SKILL.md +1 -1
  152. package/pack/generated/claude/skills/devrites-lib/reference/intent-map.md +3 -3
  153. package/pack/generated/claude/skills/devrites-lib/reference/parallel-dispatch.md +4 -3
  154. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +5 -4
  155. package/pack/generated/claude/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  156. package/pack/generated/claude/skills/devrites-lib/reference/standards/code-review.md +1 -1
  157. package/pack/generated/claude/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  158. package/pack/generated/claude/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  159. package/pack/generated/claude/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  160. package/pack/generated/claude/skills/devrites-lib/reference/standards/performance.md +2 -0
  161. package/pack/generated/claude/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  162. package/pack/generated/claude/skills/devrites-lib/reference/standards/testing.md +13 -0
  163. package/pack/generated/claude/skills/devrites-lib/reference/workspace-artifact-schema.md +10 -6
  164. package/pack/generated/claude/skills/devrites-prose-craft/SKILL.md +1 -1
  165. package/pack/generated/claude/skills/devrites-source-driven/SKILL.md +1 -1
  166. package/pack/generated/claude/skills/devrites-ux-shape/SKILL.md +1 -1
  167. package/pack/generated/claude/skills/overhaul/references/orchestration.md +6 -2
  168. package/pack/generated/claude/skills/overhaul/references/records.md +8 -3
  169. package/pack/generated/claude/skills/rite/SKILL.md +4 -3
  170. package/pack/generated/claude/skills/rite/reference/menu.md +6 -5
  171. package/pack/generated/claude/skills/rite-adopt/SKILL.md +4 -3
  172. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +6 -5
  173. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +2 -1
  174. package/pack/generated/claude/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
  175. package/pack/generated/claude/skills/rite-build/reference/wright-dispatch.md +19 -0
  176. package/pack/generated/claude/skills/rite-converge/SKILL.md +4 -3
  177. package/pack/generated/claude/skills/rite-customize/SKILL.md +1 -1
  178. package/pack/generated/claude/skills/rite-define/SKILL.md +3 -2
  179. package/pack/generated/claude/skills/rite-doctor/SKILL.md +12 -6
  180. package/pack/generated/claude/skills/rite-dogfood/SKILL.md +2 -2
  181. package/pack/generated/claude/skills/rite-explain/SKILL.md +1 -1
  182. package/pack/generated/claude/skills/rite-fast/SKILL.md +3 -1
  183. package/pack/generated/claude/skills/rite-handoff/SKILL.md +4 -3
  184. package/pack/generated/claude/skills/rite-learn/SKILL.md +2 -2
  185. package/pack/generated/claude/skills/rite-plan/reference/replan-and-repair.md +2 -0
  186. package/pack/generated/claude/skills/rite-plan/reference/slicing.md +3 -1
  187. package/pack/generated/claude/skills/rite-pov/SKILL.md +1 -1
  188. package/pack/generated/claude/skills/rite-pr-feedback/SKILL.md +5 -4
  189. package/pack/generated/claude/skills/rite-pressure-test/SKILL.md +7 -5
  190. package/pack/generated/claude/skills/rite-prototype/SKILL.md +1 -1
  191. package/pack/generated/claude/skills/rite-quick/SKILL.md +10 -5
  192. package/pack/generated/claude/skills/rite-resolve/SKILL.md +3 -3
  193. package/pack/generated/claude/skills/rite-resolve/reference/answer-protocol.md +4 -5
  194. package/pack/generated/claude/skills/rite-review/SKILL.md +2 -1
  195. package/pack/generated/claude/skills/rite-seal/SKILL.md +3 -3
  196. package/pack/generated/claude/skills/rite-seal/reference/go-no-go.md +2 -0
  197. package/pack/generated/claude/skills/rite-seal/reference/seal-template.md +5 -2
  198. package/pack/generated/claude/skills/rite-ship/reference/close-out.md +3 -2
  199. package/pack/generated/claude/skills/rite-spec/SKILL.md +4 -1
  200. package/pack/generated/claude/skills/rite-status/SKILL.md +1 -1
  201. package/pack/generated/claude/skills/rite-temper/reference/significance.md +2 -0
  202. package/pack/generated/claude/skills/rite-upgrade/SKILL.md +4 -2
  203. package/pack/generated/claude/skills/rite-vet/SKILL.md +3 -2
  204. package/pack/generated/claude/skills/rite-vet/reference/artifacts.md +1 -1
  205. package/pack/generated/claude/skills/rite-watch-pr/SKILL.md +1 -1
  206. package/pack/generated/claude/skills/rite-zoom-out/SKILL.md +1 -1
  207. package/pack/generated/codex/agents/devrites-code-reviewer.toml +7 -7
  208. package/pack/generated/codex/agents/devrites-devex-reviewer.toml +6 -1
  209. package/pack/generated/codex/agents/devrites-evidence-scout.toml +4 -0
  210. package/pack/generated/codex/agents/devrites-frontend-reviewer.toml +1 -1
  211. package/pack/generated/codex/agents/devrites-plan-drafter.toml +3 -3
  212. package/pack/generated/codex/agents/devrites-plan-reviewer.toml +5 -2
  213. package/pack/generated/codex/agents/devrites-proof-runner.toml +2 -2
  214. package/pack/generated/codex/agents/devrites-security-auditor.toml +1 -1
  215. package/pack/generated/codex/agents/devrites-simplifier-reviewer.toml +1 -1
  216. package/pack/generated/codex/agents/devrites-slice-wright.toml +5 -5
  217. package/pack/generated/codex/agents/devrites-test-analyst.toml +5 -5
  218. package/pack/generated/codex/agents/devrites-upgrade-planner.toml +1 -1
  219. package/pack/generated/codex/agents/fast-builder.toml +3 -3
  220. package/pack/generated/codex/agents/fast-critic.toml +3 -3
  221. package/pack/generated/codex/agents/overhaul-backend-engineer.toml +2 -0
  222. package/pack/generated/codex/agents/overhaul-boundary.toml +2 -0
  223. package/pack/generated/codex/agents/overhaul-craft.toml +2 -0
  224. package/pack/generated/codex/agents/overhaul-frontend-engineer.toml +2 -0
  225. package/pack/generated/codex/agents/overhaul-implementer.toml +2 -0
  226. package/pack/generated/codex/agents/overhaul-recon.toml +2 -0
  227. package/pack/generated/codex/agents/overhaul-specialist.toml +2 -0
  228. package/pack/generated/codex/agents/overhaul-verifier.toml +2 -0
  229. package/pack/generated/codex/skills/devrites-api-interface/SKILL.md +1 -1
  230. package/pack/generated/codex/skills/devrites-audit/SKILL.md +1 -1
  231. package/pack/generated/codex/skills/devrites-browser-proof/SKILL.md +1 -1
  232. package/pack/generated/codex/skills/devrites-debug-recovery/SKILL.md +3 -2
  233. package/pack/generated/codex/skills/devrites-doubt/SKILL.md +1 -1
  234. package/pack/generated/codex/skills/devrites-frontend-craft/SKILL.md +1 -1
  235. package/pack/generated/codex/skills/devrites-interview/SKILL.md +1 -1
  236. package/pack/generated/codex/skills/devrites-lib/reference/intent-map.md +3 -3
  237. package/pack/generated/codex/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
  238. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +5 -4
  239. package/pack/generated/codex/skills/devrites-lib/reference/standards/agents.md +1 -1
  240. package/pack/generated/codex/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  241. package/pack/generated/codex/skills/devrites-lib/reference/standards/code-review.md +1 -1
  242. package/pack/generated/codex/skills/devrites-lib/reference/standards/core.md +1 -1
  243. package/pack/generated/codex/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  244. package/pack/generated/codex/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  245. package/pack/generated/codex/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  246. package/pack/generated/codex/skills/devrites-lib/reference/standards/performance.md +2 -0
  247. package/pack/generated/codex/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  248. package/pack/generated/codex/skills/devrites-lib/reference/standards/testing.md +13 -0
  249. package/pack/generated/codex/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
  250. package/pack/generated/codex/skills/devrites-prose-craft/SKILL.md +1 -1
  251. package/pack/generated/codex/skills/devrites-source-driven/SKILL.md +1 -1
  252. package/pack/generated/codex/skills/devrites-ux-shape/SKILL.md +1 -1
  253. package/pack/generated/codex/skills/overhaul/SKILL.md +15 -15
  254. package/pack/generated/codex/skills/overhaul/references/audit-domains.md +2 -2
  255. package/pack/generated/codex/skills/overhaul/references/orchestration.md +11 -7
  256. package/pack/generated/codex/skills/overhaul/references/records.md +8 -3
  257. package/pack/generated/codex/skills/rite/SKILL.md +4 -3
  258. package/pack/generated/codex/skills/rite/reference/menu.md +6 -5
  259. package/pack/generated/codex/skills/rite-adopt/SKILL.md +4 -3
  260. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +7 -6
  261. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +2 -1
  262. package/pack/generated/codex/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
  263. package/pack/generated/codex/skills/rite-build/SKILL.md +2 -2
  264. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +1 -1
  265. package/pack/generated/codex/skills/rite-build/reference/wright-dispatch.md +20 -1
  266. package/pack/generated/codex/skills/rite-clarify/SKILL.md +1 -1
  267. package/pack/generated/codex/skills/rite-converge/SKILL.md +5 -4
  268. package/pack/generated/codex/skills/rite-customize/SKILL.md +1 -1
  269. package/pack/generated/codex/skills/rite-define/SKILL.md +4 -3
  270. package/pack/generated/codex/skills/rite-doctor/SKILL.md +12 -6
  271. package/pack/generated/codex/skills/rite-dogfood/SKILL.md +2 -2
  272. package/pack/generated/codex/skills/rite-explain/SKILL.md +1 -1
  273. package/pack/generated/codex/skills/rite-fast/SKILL.md +8 -6
  274. package/pack/generated/codex/skills/rite-frame/SKILL.md +1 -1
  275. package/pack/generated/codex/skills/rite-handoff/SKILL.md +4 -3
  276. package/pack/generated/codex/skills/rite-learn/SKILL.md +2 -2
  277. package/pack/generated/codex/skills/rite-plan/SKILL.md +1 -1
  278. package/pack/generated/codex/skills/rite-plan/reference/replan-and-repair.md +2 -0
  279. package/pack/generated/codex/skills/rite-plan/reference/slicing.md +3 -1
  280. package/pack/generated/codex/skills/rite-polish/SKILL.md +2 -2
  281. package/pack/generated/codex/skills/rite-pov/SKILL.md +1 -1
  282. package/pack/generated/codex/skills/rite-pr-feedback/SKILL.md +5 -4
  283. package/pack/generated/codex/skills/rite-pressure-test/SKILL.md +7 -5
  284. package/pack/generated/codex/skills/rite-prototype/SKILL.md +1 -1
  285. package/pack/generated/codex/skills/rite-prove/SKILL.md +1 -1
  286. package/pack/generated/codex/skills/rite-quick/SKILL.md +11 -6
  287. package/pack/generated/codex/skills/rite-resolve/SKILL.md +3 -3
  288. package/pack/generated/codex/skills/rite-resolve/reference/answer-protocol.md +4 -5
  289. package/pack/generated/codex/skills/rite-review/SKILL.md +3 -2
  290. package/pack/generated/codex/skills/rite-seal/SKILL.md +4 -4
  291. package/pack/generated/codex/skills/rite-seal/reference/go-no-go.md +2 -0
  292. package/pack/generated/codex/skills/rite-seal/reference/seal-template.md +5 -2
  293. package/pack/generated/codex/skills/rite-ship/SKILL.md +1 -1
  294. package/pack/generated/codex/skills/rite-ship/reference/close-out.md +3 -2
  295. package/pack/generated/codex/skills/rite-spec/SKILL.md +5 -2
  296. package/pack/generated/codex/skills/rite-status/SKILL.md +1 -1
  297. package/pack/generated/codex/skills/rite-temper/SKILL.md +2 -2
  298. package/pack/generated/codex/skills/rite-temper/reference/significance.md +2 -0
  299. package/pack/generated/codex/skills/rite-upgrade/SKILL.md +4 -2
  300. package/pack/generated/codex/skills/rite-vet/SKILL.md +4 -3
  301. package/pack/generated/codex/skills/rite-vet/reference/artifacts.md +1 -1
  302. package/pack/generated/codex/skills/rite-watch-pr/SKILL.md +1 -1
  303. package/pack/generated/codex/skills/rite-zoom-out/SKILL.md +1 -1
  304. package/pack/generated/devin/AGENTS.md +1 -1
  305. package/pack/generated/devin/agents/devrites-devex-reviewer.md +5 -0
  306. package/pack/generated/devin/agents/devrites-evidence-scout.md +4 -0
  307. package/pack/generated/devin/agents/devrites-plan-reviewer.md +4 -1
  308. package/pack/generated/devin/agents/overhaul-backend-engineer.md +2 -0
  309. package/pack/generated/devin/agents/overhaul-boundary.md +2 -0
  310. package/pack/generated/devin/agents/overhaul-craft.md +2 -0
  311. package/pack/generated/devin/agents/overhaul-frontend-engineer.md +2 -0
  312. package/pack/generated/devin/agents/overhaul-implementer.md +2 -0
  313. package/pack/generated/devin/agents/overhaul-recon.md +2 -0
  314. package/pack/generated/devin/agents/overhaul-specialist.md +2 -0
  315. package/pack/generated/devin/agents/overhaul-verifier.md +2 -0
  316. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +1 -1
  317. package/pack/generated/devin/skills/devrites-audit/SKILL.md +1 -1
  318. package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +1 -1
  319. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +3 -2
  320. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +1 -1
  321. package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +1 -1
  322. package/pack/generated/devin/skills/devrites-interview/SKILL.md +2 -2
  323. package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +3 -3
  324. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
  325. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +8 -7
  326. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +1 -1
  327. package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  328. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +1 -1
  329. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +1 -1
  330. package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  331. package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  332. package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  333. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +2 -0
  334. package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  335. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +13 -0
  336. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
  337. package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +1 -1
  338. package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +1 -1
  339. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +1 -1
  340. package/pack/generated/devin/skills/overhaul/SKILL.md +15 -15
  341. package/pack/generated/devin/skills/overhaul/references/audit-domains.md +2 -2
  342. package/pack/generated/devin/skills/overhaul/references/orchestration.md +11 -7
  343. package/pack/generated/devin/skills/overhaul/references/records.md +8 -3
  344. package/pack/generated/devin/skills/rite/SKILL.md +4 -3
  345. package/pack/generated/devin/skills/rite/reference/menu.md +6 -5
  346. package/pack/generated/devin/skills/rite-adopt/SKILL.md +4 -3
  347. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +8 -7
  348. package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +1 -1
  349. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +2 -1
  350. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +3 -2
  351. package/pack/generated/devin/skills/rite-build/SKILL.md +2 -2
  352. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +2 -2
  353. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +1 -1
  354. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +20 -1
  355. package/pack/generated/devin/skills/rite-clarify/SKILL.md +1 -1
  356. package/pack/generated/devin/skills/rite-converge/SKILL.md +5 -4
  357. package/pack/generated/devin/skills/rite-customize/SKILL.md +1 -1
  358. package/pack/generated/devin/skills/rite-define/SKILL.md +4 -3
  359. package/pack/generated/devin/skills/rite-doctor/SKILL.md +12 -6
  360. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +2 -2
  361. package/pack/generated/devin/skills/rite-explain/SKILL.md +3 -3
  362. package/pack/generated/devin/skills/rite-explain/reference/intake.md +1 -1
  363. package/pack/generated/devin/skills/rite-fast/SKILL.md +8 -6
  364. package/pack/generated/devin/skills/rite-frame/SKILL.md +1 -1
  365. package/pack/generated/devin/skills/rite-handoff/SKILL.md +4 -3
  366. package/pack/generated/devin/skills/rite-learn/SKILL.md +2 -2
  367. package/pack/generated/devin/skills/rite-plan/SKILL.md +1 -1
  368. package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +2 -0
  369. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +3 -1
  370. package/pack/generated/devin/skills/rite-polish/SKILL.md +2 -2
  371. package/pack/generated/devin/skills/rite-pov/SKILL.md +1 -1
  372. package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +5 -4
  373. package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +7 -5
  374. package/pack/generated/devin/skills/rite-prototype/SKILL.md +1 -1
  375. package/pack/generated/devin/skills/rite-prove/SKILL.md +1 -1
  376. package/pack/generated/devin/skills/rite-quick/SKILL.md +11 -6
  377. package/pack/generated/devin/skills/rite-resolve/SKILL.md +4 -4
  378. package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +4 -5
  379. package/pack/generated/devin/skills/rite-review/SKILL.md +3 -2
  380. package/pack/generated/devin/skills/rite-seal/SKILL.md +4 -4
  381. package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +2 -0
  382. package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +5 -2
  383. package/pack/generated/devin/skills/rite-ship/SKILL.md +1 -1
  384. package/pack/generated/devin/skills/rite-ship/reference/close-out.md +3 -2
  385. package/pack/generated/devin/skills/rite-spec/SKILL.md +5 -2
  386. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +1 -1
  387. package/pack/generated/devin/skills/rite-status/SKILL.md +1 -1
  388. package/pack/generated/devin/skills/rite-temper/SKILL.md +3 -3
  389. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +1 -1
  390. package/pack/generated/devin/skills/rite-temper/reference/significance.md +3 -1
  391. package/pack/generated/devin/skills/rite-upgrade/SKILL.md +4 -2
  392. package/pack/generated/devin/skills/rite-vet/SKILL.md +4 -3
  393. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +1 -1
  394. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +2 -2
  395. package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +1 -1
  396. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +1 -1
  397. package/pack/generated/omp/agents/devrites-code-reviewer.md +7 -7
  398. package/pack/generated/omp/agents/devrites-devex-reviewer.md +6 -1
  399. package/pack/generated/omp/agents/devrites-evidence-scout.md +4 -0
  400. package/pack/generated/omp/agents/devrites-frontend-reviewer.md +1 -1
  401. package/pack/generated/omp/agents/devrites-plan-drafter.md +3 -3
  402. package/pack/generated/omp/agents/devrites-plan-reviewer.md +5 -2
  403. package/pack/generated/omp/agents/devrites-proof-runner.md +2 -2
  404. package/pack/generated/omp/agents/devrites-security-auditor.md +1 -1
  405. package/pack/generated/omp/agents/devrites-simplifier-reviewer.md +1 -1
  406. package/pack/generated/omp/agents/devrites-slice-wright.md +5 -5
  407. package/pack/generated/omp/agents/devrites-test-analyst.md +5 -5
  408. package/pack/generated/omp/agents/devrites-upgrade-planner.md +1 -1
  409. package/pack/generated/omp/agents/fast-builder.md +3 -3
  410. package/pack/generated/omp/agents/fast-critic.md +3 -3
  411. package/pack/generated/omp/agents/overhaul-backend-engineer.md +2 -0
  412. package/pack/generated/omp/agents/overhaul-boundary.md +2 -0
  413. package/pack/generated/omp/agents/overhaul-craft.md +2 -0
  414. package/pack/generated/omp/agents/overhaul-frontend-engineer.md +2 -0
  415. package/pack/generated/omp/agents/overhaul-implementer.md +2 -0
  416. package/pack/generated/omp/agents/overhaul-recon.md +2 -0
  417. package/pack/generated/omp/agents/overhaul-specialist.md +2 -0
  418. package/pack/generated/omp/agents/overhaul-verifier.md +2 -0
  419. package/pack/generated/omp/commands/rite-resolve.md +1 -1
  420. package/pack/generated/omp/skills/devrites-api-interface/SKILL.md +4 -4
  421. package/pack/generated/omp/skills/devrites-audit/SKILL.md +5 -5
  422. package/pack/generated/omp/skills/devrites-browser-proof/SKILL.md +5 -5
  423. package/pack/generated/omp/skills/devrites-browser-proof/reference/browser-performance.md +1 -1
  424. package/pack/generated/omp/skills/devrites-browser-proof/reference/visual-verdict.md +1 -1
  425. package/pack/generated/omp/skills/devrites-debug-recovery/SKILL.md +7 -6
  426. package/pack/generated/omp/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +1 -1
  427. package/pack/generated/omp/skills/devrites-doubt/SKILL.md +6 -6
  428. package/pack/generated/omp/skills/devrites-frontend-craft/SKILL.md +3 -3
  429. package/pack/generated/omp/skills/devrites-frontend-craft/reference/craft.md +1 -1
  430. package/pack/generated/omp/skills/devrites-frontend-craft/reference/design-references.md +4 -4
  431. package/pack/generated/omp/skills/devrites-frontend-craft/reference/fullstack.md +1 -1
  432. package/pack/generated/omp/skills/devrites-frontend-craft/reference/quality-standards.md +8 -8
  433. package/pack/generated/omp/skills/devrites-frontend-craft/reference/reuse-first.md +2 -2
  434. package/pack/generated/omp/skills/devrites-frontend-craft/reference/shape.md +2 -2
  435. package/pack/generated/omp/skills/devrites-interview/SKILL.md +3 -3
  436. package/pack/generated/omp/skills/devrites-lib/reference/intent-map.md +4 -4
  437. package/pack/generated/omp/skills/devrites-lib/reference/parallel-dispatch.md +8 -7
  438. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +13 -12
  439. package/pack/generated/omp/skills/devrites-lib/reference/standards/agents.md +6 -6
  440. package/pack/generated/omp/skills/devrites-lib/reference/standards/browser-proof-checklist.md +2 -2
  441. package/pack/generated/omp/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  442. package/pack/generated/omp/skills/devrites-lib/reference/standards/code-review.md +3 -3
  443. package/pack/generated/omp/skills/devrites-lib/reference/standards/coding-style.md +1 -1
  444. package/pack/generated/omp/skills/devrites-lib/reference/standards/context-hygiene.md +2 -2
  445. package/pack/generated/omp/skills/devrites-lib/reference/standards/core.md +3 -3
  446. package/pack/generated/omp/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  447. package/pack/generated/omp/skills/devrites-lib/reference/standards/debug-recovery.md +1 -1
  448. package/pack/generated/omp/skills/devrites-lib/reference/standards/definition-of-done.md +1 -1
  449. package/pack/generated/omp/skills/devrites-lib/reference/standards/developer-experience.md +8 -3
  450. package/pack/generated/omp/skills/devrites-lib/reference/standards/glossary.md +3 -3
  451. package/pack/generated/omp/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  452. package/pack/generated/omp/skills/devrites-lib/reference/standards/performance.md +3 -1
  453. package/pack/generated/omp/skills/devrites-lib/reference/standards/prose-style.md +4 -4
  454. package/pack/generated/omp/skills/devrites-lib/reference/standards/release/ship-checklist.md +1 -1
  455. package/pack/generated/omp/skills/devrites-lib/reference/standards/review/README.md +1 -1
  456. package/pack/generated/omp/skills/devrites-lib/reference/standards/review/ci-workflows.md +1 -1
  457. package/pack/generated/omp/skills/devrites-lib/reference/standards/review/react.md +1 -1
  458. package/pack/generated/omp/skills/devrites-lib/reference/standards/review/stack-profile.md +5 -5
  459. package/pack/generated/omp/skills/devrites-lib/reference/standards/skill-authoring.md +15 -3
  460. package/pack/generated/omp/skills/devrites-lib/reference/standards/spec-grammar.md +3 -3
  461. package/pack/generated/omp/skills/devrites-lib/reference/standards/testing.md +14 -1
  462. package/pack/generated/omp/skills/devrites-lib/reference/standards/tooling.md +1 -1
  463. package/pack/generated/omp/skills/devrites-lib/reference/standards/verification-methods.md +1 -1
  464. package/pack/generated/omp/skills/devrites-lib/reference/visual-playbooks/index.md +2 -2
  465. package/pack/generated/omp/skills/devrites-lib/reference/workspace-artifact-schema.md +12 -8
  466. package/pack/generated/omp/skills/devrites-prose-craft/SKILL.md +4 -4
  467. package/pack/generated/omp/skills/devrites-prose-craft/reference/examples.md +1 -1
  468. package/pack/generated/omp/skills/devrites-source-driven/SKILL.md +3 -3
  469. package/pack/generated/omp/skills/devrites-ux-shape/SKILL.md +10 -10
  470. package/pack/generated/omp/skills/devrites-ux-shape/reference/brief-template.md +3 -3
  471. package/pack/generated/omp/skills/devrites-ux-shape/reference/visual-direction-probe.md +1 -1
  472. package/pack/generated/omp/skills/overhaul/references/orchestration.md +6 -2
  473. package/pack/generated/omp/skills/overhaul/references/records.md +8 -3
  474. package/pack/generated/omp/skills/rite/SKILL.md +8 -7
  475. package/pack/generated/omp/skills/rite/reference/menu.md +6 -5
  476. package/pack/generated/omp/skills/rite-adopt/SKILL.md +6 -5
  477. package/pack/generated/omp/skills/rite-adopt/reference/anti-patterns.md +1 -1
  478. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +11 -10
  479. package/pack/generated/omp/skills/rite-autocomplete/reference/decision-policy.md +1 -1
  480. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +4 -3
  481. package/pack/generated/omp/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
  482. package/pack/generated/omp/skills/rite-build/SKILL.md +7 -7
  483. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +1 -1
  484. package/pack/generated/omp/skills/rite-build/reference/anti-patterns.md +1 -1
  485. package/pack/generated/omp/skills/rite-build/reference/checkpoint-protocol.md +2 -2
  486. package/pack/generated/omp/skills/rite-build/reference/checkpoint.md +2 -2
  487. package/pack/generated/omp/skills/rite-build/reference/frontend-trigger.md +1 -1
  488. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +4 -4
  489. package/pack/generated/omp/skills/rite-build/reference/phase-contract.md +6 -6
  490. package/pack/generated/omp/skills/rite-build/reference/tdd.md +1 -1
  491. package/pack/generated/omp/skills/rite-build/reference/wright-dispatch.md +27 -8
  492. package/pack/generated/omp/skills/rite-clarify/SKILL.md +4 -4
  493. package/pack/generated/omp/skills/rite-clarify/reference/anti-patterns.md +1 -1
  494. package/pack/generated/omp/skills/rite-converge/SKILL.md +16 -15
  495. package/pack/generated/omp/skills/rite-converge/reference/convergence-assessment.md +4 -4
  496. package/pack/generated/omp/skills/rite-customize/SKILL.md +2 -2
  497. package/pack/generated/omp/skills/rite-define/SKILL.md +25 -24
  498. package/pack/generated/omp/skills/rite-define/reference/anti-patterns.md +2 -2
  499. package/pack/generated/omp/skills/rite-define/reference/gates.md +2 -2
  500. package/pack/generated/omp/skills/rite-doctor/SKILL.md +12 -6
  501. package/pack/generated/omp/skills/rite-dogfood/SKILL.md +5 -5
  502. package/pack/generated/omp/skills/rite-explain/SKILL.md +7 -7
  503. package/pack/generated/omp/skills/rite-explain/reference/intake.md +1 -1
  504. package/pack/generated/omp/skills/rite-fast/SKILL.md +12 -10
  505. package/pack/generated/omp/skills/rite-fast/reference/artifacts.md +1 -1
  506. package/pack/generated/omp/skills/rite-frame/SKILL.md +6 -6
  507. package/pack/generated/omp/skills/rite-frame/reference/failure-modes.md +4 -4
  508. package/pack/generated/omp/skills/rite-handoff/SKILL.md +7 -6
  509. package/pack/generated/omp/skills/rite-learn/SKILL.md +6 -6
  510. package/pack/generated/omp/skills/rite-plan/SKILL.md +8 -8
  511. package/pack/generated/omp/skills/rite-plan/reference/anti-patterns.md +1 -1
  512. package/pack/generated/omp/skills/rite-plan/reference/replan-and-repair.md +3 -1
  513. package/pack/generated/omp/skills/rite-plan/reference/slicing.md +6 -4
  514. package/pack/generated/omp/skills/rite-plan/reference/task-breakdown.md +1 -1
  515. package/pack/generated/omp/skills/rite-polish/SKILL.md +6 -6
  516. package/pack/generated/omp/skills/rite-polish/reference/anti-ai-slop.md +9 -9
  517. package/pack/generated/omp/skills/rite-polish/reference/anti-patterns.md +1 -1
  518. package/pack/generated/omp/skills/rite-polish/reference/backend-polish.md +2 -2
  519. package/pack/generated/omp/skills/rite-polish/reference/browser-polish-evidence.md +1 -1
  520. package/pack/generated/omp/skills/rite-polish/reference/code.md +8 -8
  521. package/pack/generated/omp/skills/rite-polish/reference/design-memory.md +3 -3
  522. package/pack/generated/omp/skills/rite-polish/reference/design-system-discovery.md +1 -1
  523. package/pack/generated/omp/skills/rite-polish/reference/harden-checklist.md +1 -1
  524. package/pack/generated/omp/skills/rite-polish/reference/ledger.md +3 -3
  525. package/pack/generated/omp/skills/rite-polish/reference/ui.md +1 -1
  526. package/pack/generated/omp/skills/rite-pov/SKILL.md +2 -2
  527. package/pack/generated/omp/skills/rite-pr-feedback/SKILL.md +6 -5
  528. package/pack/generated/omp/skills/rite-pressure-test/SKILL.md +9 -7
  529. package/pack/generated/omp/skills/rite-prototype/SKILL.md +1 -1
  530. package/pack/generated/omp/skills/rite-prove/SKILL.md +13 -13
  531. package/pack/generated/omp/skills/rite-prove/reference/acceptance-proof.md +7 -7
  532. package/pack/generated/omp/skills/rite-prove/reference/anti-patterns.md +1 -1
  533. package/pack/generated/omp/skills/rite-prove/reference/browser-proof.md +3 -3
  534. package/pack/generated/omp/skills/rite-prove/reference/failure-triage.md +2 -2
  535. package/pack/generated/omp/skills/rite-quick/SKILL.md +19 -14
  536. package/pack/generated/omp/skills/rite-resolve/SKILL.md +6 -6
  537. package/pack/generated/omp/skills/rite-resolve/reference/answer-protocol.md +4 -5
  538. package/pack/generated/omp/skills/rite-review/SKILL.md +23 -22
  539. package/pack/generated/omp/skills/rite-review/reference/anti-patterns.md +1 -1
  540. package/pack/generated/omp/skills/rite-review/reference/cognitive-load.md +2 -2
  541. package/pack/generated/omp/skills/rite-review/reference/nielsen-heuristics.md +1 -1
  542. package/pack/generated/omp/skills/rite-review/reference/performance-checklist.md +1 -1
  543. package/pack/generated/omp/skills/rite-review/reference/performance-review.md +1 -1
  544. package/pack/generated/omp/skills/rite-review/reference/security-review.md +2 -2
  545. package/pack/generated/omp/skills/rite-seal/SKILL.md +11 -11
  546. package/pack/generated/omp/skills/rite-seal/reference/anti-patterns.md +1 -1
  547. package/pack/generated/omp/skills/rite-seal/reference/final-evidence.md +3 -3
  548. package/pack/generated/omp/skills/rite-seal/reference/go-no-go.md +3 -1
  549. package/pack/generated/omp/skills/rite-seal/reference/output.md +1 -1
  550. package/pack/generated/omp/skills/rite-seal/reference/phase-contract.md +4 -4
  551. package/pack/generated/omp/skills/rite-seal/reference/seal-template.md +5 -2
  552. package/pack/generated/omp/skills/rite-ship/SKILL.md +7 -7
  553. package/pack/generated/omp/skills/rite-ship/reference/anti-patterns.md +1 -1
  554. package/pack/generated/omp/skills/rite-ship/reference/close-out.md +5 -4
  555. package/pack/generated/omp/skills/rite-ship/reference/git-ship.md +2 -2
  556. package/pack/generated/omp/skills/rite-ship/reference/rollout.md +3 -3
  557. package/pack/generated/omp/skills/rite-spec/SKILL.md +17 -14
  558. package/pack/generated/omp/skills/rite-spec/reference/anti-patterns.md +1 -1
  559. package/pack/generated/omp/skills/rite-spec/reference/investigation.md +3 -3
  560. package/pack/generated/omp/skills/rite-spec/reference/question-protocol.md +1 -1
  561. package/pack/generated/omp/skills/rite-spec/reference/spec-template.md +2 -2
  562. package/pack/generated/omp/skills/rite-spec/reference/state-workspace.md +8 -8
  563. package/pack/generated/omp/skills/rite-status/SKILL.md +2 -2
  564. package/pack/generated/omp/skills/rite-temper/SKILL.md +13 -13
  565. package/pack/generated/omp/skills/rite-temper/reference/anti-patterns.md +2 -2
  566. package/pack/generated/omp/skills/rite-temper/reference/review-dimensions.md +3 -3
  567. package/pack/generated/omp/skills/rite-temper/reference/scope-modes.md +3 -3
  568. package/pack/generated/omp/skills/rite-temper/reference/significance.md +4 -2
  569. package/pack/generated/omp/skills/rite-upgrade/SKILL.md +7 -5
  570. package/pack/generated/omp/skills/rite-vet/SKILL.md +14 -13
  571. package/pack/generated/omp/skills/rite-vet/reference/anti-patterns.md +2 -2
  572. package/pack/generated/omp/skills/rite-vet/reference/artifacts.md +3 -3
  573. package/pack/generated/omp/skills/rite-vet/reference/depth.md +3 -3
  574. package/pack/generated/omp/skills/rite-vet/reference/review-axes.md +5 -5
  575. package/pack/generated/omp/skills/rite-watch-pr/SKILL.md +2 -2
  576. package/pack/generated/omp/skills/rite-zoom-out/SKILL.md +1 -1
  577. package/pack/generated/pi/agents/devrites-devex-reviewer.md +5 -0
  578. package/pack/generated/pi/agents/devrites-evidence-scout.md +4 -0
  579. package/pack/generated/pi/agents/devrites-plan-reviewer.md +4 -1
  580. package/pack/generated/pi/agents/overhaul-backend-engineer.md +2 -0
  581. package/pack/generated/pi/agents/overhaul-boundary.md +2 -0
  582. package/pack/generated/pi/agents/overhaul-craft.md +2 -0
  583. package/pack/generated/pi/agents/overhaul-frontend-engineer.md +2 -0
  584. package/pack/generated/pi/agents/overhaul-implementer.md +2 -0
  585. package/pack/generated/pi/agents/overhaul-recon.md +2 -0
  586. package/pack/generated/pi/agents/overhaul-specialist.md +2 -0
  587. package/pack/generated/pi/agents/overhaul-verifier.md +2 -0
  588. package/pack/generated/pi/prompts/rite-resolve.md +1 -1
  589. package/pack/generated/pi/skills/devrites-api-interface/SKILL.md +1 -1
  590. package/pack/generated/pi/skills/devrites-audit/SKILL.md +1 -1
  591. package/pack/generated/pi/skills/devrites-browser-proof/SKILL.md +1 -1
  592. package/pack/generated/pi/skills/devrites-debug-recovery/SKILL.md +3 -2
  593. package/pack/generated/pi/skills/devrites-doubt/SKILL.md +1 -1
  594. package/pack/generated/pi/skills/devrites-frontend-craft/SKILL.md +1 -1
  595. package/pack/generated/pi/skills/devrites-interview/SKILL.md +1 -1
  596. package/pack/generated/pi/skills/devrites-lib/reference/intent-map.md +3 -3
  597. package/pack/generated/pi/skills/devrites-lib/reference/parallel-dispatch.md +6 -5
  598. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +5 -4
  599. package/pack/generated/pi/skills/devrites-lib/reference/standards/agents.md +1 -1
  600. package/pack/generated/pi/skills/devrites-lib/reference/standards/ci-cd.md +2 -1
  601. package/pack/generated/pi/skills/devrites-lib/reference/standards/code-review.md +1 -1
  602. package/pack/generated/pi/skills/devrites-lib/reference/standards/core.md +1 -1
  603. package/pack/generated/pi/skills/devrites-lib/reference/standards/data-integrity.md +4 -0
  604. package/pack/generated/pi/skills/devrites-lib/reference/standards/developer-experience.md +5 -0
  605. package/pack/generated/pi/skills/devrites-lib/reference/standards/loop-operations.md +3 -0
  606. package/pack/generated/pi/skills/devrites-lib/reference/standards/performance.md +2 -0
  607. package/pack/generated/pi/skills/devrites-lib/reference/standards/skill-authoring.md +13 -1
  608. package/pack/generated/pi/skills/devrites-lib/reference/standards/testing.md +13 -0
  609. package/pack/generated/pi/skills/devrites-lib/reference/workspace-artifact-schema.md +11 -7
  610. package/pack/generated/pi/skills/devrites-prose-craft/SKILL.md +1 -1
  611. package/pack/generated/pi/skills/devrites-source-driven/SKILL.md +1 -1
  612. package/pack/generated/pi/skills/devrites-ux-shape/SKILL.md +1 -1
  613. package/pack/generated/pi/skills/overhaul/SKILL.md +15 -15
  614. package/pack/generated/pi/skills/overhaul/references/audit-domains.md +2 -2
  615. package/pack/generated/pi/skills/overhaul/references/orchestration.md +11 -7
  616. package/pack/generated/pi/skills/overhaul/references/records.md +8 -3
  617. package/pack/generated/pi/skills/rite/SKILL.md +4 -3
  618. package/pack/generated/pi/skills/rite/reference/menu.md +6 -5
  619. package/pack/generated/pi/skills/rite-adopt/SKILL.md +4 -3
  620. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +7 -6
  621. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +2 -1
  622. package/pack/generated/pi/skills/rite-autocomplete/reference/stop-conditions.md +2 -1
  623. package/pack/generated/pi/skills/rite-build/SKILL.md +2 -2
  624. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +1 -1
  625. package/pack/generated/pi/skills/rite-build/reference/wright-dispatch.md +20 -1
  626. package/pack/generated/pi/skills/rite-clarify/SKILL.md +1 -1
  627. package/pack/generated/pi/skills/rite-converge/SKILL.md +5 -4
  628. package/pack/generated/pi/skills/rite-customize/SKILL.md +1 -1
  629. package/pack/generated/pi/skills/rite-define/SKILL.md +4 -3
  630. package/pack/generated/pi/skills/rite-doctor/SKILL.md +12 -6
  631. package/pack/generated/pi/skills/rite-dogfood/SKILL.md +2 -2
  632. package/pack/generated/pi/skills/rite-explain/SKILL.md +1 -1
  633. package/pack/generated/pi/skills/rite-fast/SKILL.md +8 -6
  634. package/pack/generated/pi/skills/rite-frame/SKILL.md +1 -1
  635. package/pack/generated/pi/skills/rite-handoff/SKILL.md +4 -3
  636. package/pack/generated/pi/skills/rite-learn/SKILL.md +2 -2
  637. package/pack/generated/pi/skills/rite-plan/SKILL.md +1 -1
  638. package/pack/generated/pi/skills/rite-plan/reference/replan-and-repair.md +2 -0
  639. package/pack/generated/pi/skills/rite-plan/reference/slicing.md +3 -1
  640. package/pack/generated/pi/skills/rite-polish/SKILL.md +2 -2
  641. package/pack/generated/pi/skills/rite-pov/SKILL.md +1 -1
  642. package/pack/generated/pi/skills/rite-pr-feedback/SKILL.md +5 -4
  643. package/pack/generated/pi/skills/rite-pressure-test/SKILL.md +7 -5
  644. package/pack/generated/pi/skills/rite-prototype/SKILL.md +1 -1
  645. package/pack/generated/pi/skills/rite-prove/SKILL.md +1 -1
  646. package/pack/generated/pi/skills/rite-quick/SKILL.md +11 -6
  647. package/pack/generated/pi/skills/rite-resolve/SKILL.md +3 -3
  648. package/pack/generated/pi/skills/rite-resolve/reference/answer-protocol.md +4 -5
  649. package/pack/generated/pi/skills/rite-review/SKILL.md +3 -2
  650. package/pack/generated/pi/skills/rite-seal/SKILL.md +4 -4
  651. package/pack/generated/pi/skills/rite-seal/reference/go-no-go.md +2 -0
  652. package/pack/generated/pi/skills/rite-seal/reference/seal-template.md +5 -2
  653. package/pack/generated/pi/skills/rite-ship/SKILL.md +1 -1
  654. package/pack/generated/pi/skills/rite-ship/reference/close-out.md +3 -2
  655. package/pack/generated/pi/skills/rite-spec/SKILL.md +5 -2
  656. package/pack/generated/pi/skills/rite-status/SKILL.md +1 -1
  657. package/pack/generated/pi/skills/rite-temper/SKILL.md +2 -2
  658. package/pack/generated/pi/skills/rite-temper/reference/significance.md +2 -0
  659. package/pack/generated/pi/skills/rite-upgrade/SKILL.md +4 -2
  660. package/pack/generated/pi/skills/rite-vet/SKILL.md +4 -3
  661. package/pack/generated/pi/skills/rite-vet/reference/artifacts.md +1 -1
  662. package/pack/generated/pi/skills/rite-watch-pr/SKILL.md +1 -1
  663. package/pack/generated/pi/skills/rite-zoom-out/SKILL.md +1 -1
  664. package/package.json +3 -2
  665. package/scripts/build-host-artifacts.sh +13 -0
  666. package/scripts/codex-generate.sh +5 -1
  667. package/scripts/devin-generate.sh +4 -3
  668. package/scripts/install-lib.sh +5 -0
  669. package/scripts/omp-generate.sh +23 -1
  670. package/scripts/pi-generate.sh +2 -2
  671. package/engine/cmd/releasepack/main_test.go +0 -239
  672. package/engine/harnessmatrix_test.go +0 -46
  673. package/engine/help_test.go +0 -241
  674. package/engine/internal/acceptance/acceptance_test.go +0 -946
  675. package/engine/internal/devritespaths/paths_test.go +0 -128
  676. package/engine/internal/fsutil/copy_test.go +0 -154
  677. package/engine/internal/gate/gate_test.go +0 -865
  678. package/engine/internal/gate/readiness_binding_test.go +0 -443
  679. package/engine/internal/gitenv/env_test.go +0 -48
  680. package/engine/internal/hostpack/hostpack_test.go +0 -269
  681. package/engine/internal/install/install_test.go +0 -1741
  682. package/engine/internal/install/workspace_advisory_test.go +0 -54
  683. package/engine/internal/lib/candidate_test.go +0 -506
  684. package/engine/internal/lib/claims_test.go +0 -267
  685. package/engine/internal/lib/closeout_test.go +0 -266
  686. package/engine/internal/lib/context_next_test.go +0 -912
  687. package/engine/internal/lib/cursor_compat_test.go +0 -65
  688. package/engine/internal/lib/detect_test.go +0 -118
  689. package/engine/internal/lib/drift_test.go +0 -135
  690. package/engine/internal/lib/dup_test.go +0 -666
  691. package/engine/internal/lib/environment_report_test.go +0 -54
  692. package/engine/internal/lib/evidencefresh_test.go +0 -120
  693. package/engine/internal/lib/handoff_test.go +0 -83
  694. package/engine/internal/lib/manifest_union_test.go +0 -251
  695. package/engine/internal/lib/metrics_test.go +0 -28
  696. package/engine/internal/lib/migrate_test.go +0 -213
  697. package/engine/internal/lib/observe_budgets_test.go +0 -428
  698. package/engine/internal/lib/open_visual_test.go +0 -291
  699. package/engine/internal/lib/regression_test.go +0 -282
  700. package/engine/internal/lib/resolve_remediation_test.go +0 -192
  701. package/engine/internal/lib/secretscan_test.go +0 -556
  702. package/engine/internal/lib/slicecheck_test.go +0 -170
  703. package/engine/internal/lib/taskgraph_test.go +0 -353
  704. package/engine/internal/lib/triggers_test.go +0 -23
  705. package/engine/internal/lib/util_test.go +0 -148
  706. package/engine/internal/lib/visual_outline_test.go +0 -189
  707. package/engine/internal/lib/windows_test.go +0 -420
  708. package/engine/internal/lib/workspace_read_test.go +0 -102
  709. package/engine/internal/markdowntext/markdowntext_fuzz_test.go +0 -36
  710. package/engine/internal/markdowntext/markdowntext_test.go +0 -58
  711. package/engine/internal/markdowntext/testdata/structural.json +0 -277
  712. package/engine/internal/notes/notes_test.go +0 -545
  713. package/engine/internal/overhaul/admit/admit_test.go +0 -204
  714. package/engine/internal/overhaul/admit/packet_test.go +0 -223
  715. package/engine/internal/overhaul/bench/run_test.go +0 -316
  716. package/engine/internal/overhaul/ovio/ovio_test.go +0 -75
  717. package/engine/internal/overhaul/packet/packet_test.go +0 -263
  718. package/engine/internal/overhaul/records/init_test.go +0 -96
  719. package/engine/internal/overhaul/records/records_test.go +0 -696
  720. package/engine/internal/overhaul/records/run_test.go +0 -77
  721. package/engine/internal/overhaul/render/run_test.go +0 -928
  722. package/engine/internal/overhaul/score/run_test.go +0 -636
  723. package/engine/internal/overhaul/snapshot/run_test.go +0 -718
  724. package/engine/internal/parallel/cli_test.go +0 -91
  725. package/engine/internal/parallel/ops_test.go +0 -939
  726. package/engine/internal/parallel/parallel_test.go +0 -645
  727. package/engine/internal/parallel/pathdisjoint_fuzz_test.go +0 -43
  728. package/engine/internal/parallel/pathdisjoint_test.go +0 -193
  729. package/engine/internal/parallel/select_test.go +0 -95
  730. package/engine/internal/parallel/testdata/fuzz/FuzzPathDisjoint/a449b81b4711b7b4 +0 -3
  731. package/engine/internal/reason/reason_test.go +0 -37
  732. package/engine/internal/release/release_test.go +0 -181
  733. package/engine/internal/rootfacts/facts_test.go +0 -364
  734. package/engine/internal/safepath/safepath_fuzz_test.go +0 -21
  735. package/engine/internal/safepath/safepath_test.go +0 -69
  736. package/engine/internal/safepath/safepath_windows_test.go +0 -26
  737. package/engine/internal/state/acceptance_test.go +0 -57
  738. package/engine/internal/state/budgets_test.go +0 -135
  739. package/engine/internal/state/cmd/workflowmanifest/main_test.go +0 -96
  740. package/engine/internal/state/concurrency_test.go +0 -184
  741. package/engine/internal/state/cursor_fuzz_test.go +0 -80
  742. package/engine/internal/state/cursor_test.go +0 -276
  743. package/engine/internal/state/observation_test.go +0 -961
  744. package/engine/internal/state/observation_unix_test.go +0 -68
  745. package/engine/internal/state/state_test.go +0 -986
  746. package/engine/internal/state/taskgraph_fuzz_test.go +0 -38
  747. package/engine/internal/state/taskgraph_test.go +0 -43
  748. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/114b28f68c1fa4db +0 -4
  749. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/378a0f2218e812ea +0 -4
  750. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/39eaa26fcb481e3c +0 -4
  751. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/776ca1dc0143acf0 +0 -4
  752. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/9295930c1ebb81df +0 -4
  753. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/a60de309dc33be0d +0 -4
  754. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f04dc7b06ef7c99f +0 -4
  755. package/engine/internal/state/testdata/fuzz/FuzzCursorRoundTrip/f3000ac510878bd6 +0 -4
  756. package/engine/internal/state/testdata/fuzz/FuzzWorkspaceSchemaRow/a75aabb9f2a847d5 +0 -2
  757. package/engine/internal/state/workspaceschema_fuzz_test.go +0 -27
  758. package/engine/internal/state/workspaceschema_test.go +0 -101
  759. package/engine/internal/state/write_test.go +0 -136
  760. package/engine/internal/version/version_test.go +0 -29
  761. package/engine/internal/workflow/commands_test.go +0 -18
  762. package/engine/note_routing_test.go +0 -95
  763. package/engine/observation_contract_test.go +0 -175
  764. package/engine/root_routing_test.go +0 -340
@@ -1,718 +0,0 @@
1
- package snapshot
2
-
3
- import (
4
- "bytes"
5
- "crypto/sha256"
6
- "encoding/hex"
7
- "encoding/json"
8
- "os"
9
- "os/exec"
10
- "path/filepath"
11
- "runtime"
12
- "slices"
13
- "strings"
14
- "testing"
15
- "time"
16
-
17
- "github.com/devrites/devrites/internal/gitenv"
18
- )
19
-
20
- const (
21
- envSecret = "hunter2-env-value"
22
- keySecret = "secretkeybody-xyz"
23
- )
24
-
25
- func gitRun(dir string, args ...string) ([]byte, error) {
26
- cmd := exec.Command("git", append([]string{"-C", dir}, args...)...)
27
- cmd.Env = append(gitenv.Sanitize(os.Environ()), "GIT_CONFIG_GLOBAL=/dev/null", "GIT_CONFIG_NOSYSTEM=1",
28
- "GIT_AUTHOR_NAME=t", "GIT_AUTHOR_EMAIL=t@example.com", "GIT_COMMITTER_NAME=t", "GIT_COMMITTER_EMAIL=t@example.com")
29
- return cmd.CombinedOutput()
30
- }
31
-
32
- func gitT(t *testing.T, dir string, args ...string) {
33
- t.Helper()
34
- if out, err := gitRun(dir, args...); err != nil {
35
- t.Fatalf("git %v: %v\n%s", args, err, out)
36
- }
37
- }
38
-
39
- func write(t *testing.T, root, rel, content string) {
40
- t.Helper()
41
- p := filepath.Join(root, rel)
42
- if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil {
43
- t.Fatal(err)
44
- }
45
- if err := os.WriteFile(p, []byte(content), 0o644); err != nil {
46
- t.Fatal(err)
47
- }
48
- }
49
-
50
- // regularFileText concatenates every regular file under root and fails on any
51
- // walk or read error, so an unreadable entry cannot make a leak scan pass.
52
- func regularFileText(root string) (string, error) {
53
- var sb strings.Builder
54
- err := filepath.WalkDir(root, func(p string, d os.DirEntry, err error) error {
55
- if err != nil {
56
- return err
57
- }
58
- if d.Type().IsRegular() {
59
- b, err := os.ReadFile(p)
60
- if err != nil {
61
- return err
62
- }
63
- sb.Write(b)
64
- }
65
- return nil
66
- })
67
- return sb.String(), err
68
- }
69
-
70
- func TestRegularFileTextReportsWalkErrors(t *testing.T) {
71
- root := t.TempDir()
72
- if _, err := regularFileText(filepath.Join(root, "missing")); err == nil {
73
- t.Error("missing root: want error")
74
- }
75
- if runtime.GOOS == "windows" || os.Geteuid() == 0 {
76
- return
77
- }
78
- write(t, root, "locked/secret.txt", "hidden")
79
- if err := os.Chmod(filepath.Join(root, "locked"), 0); err != nil {
80
- t.Fatal(err)
81
- }
82
- t.Cleanup(func() { _ = os.Chmod(filepath.Join(root, "locked"), 0o700) })
83
- if _, err := regularFileText(root); err == nil {
84
- t.Error("unreadable directory: want error")
85
- }
86
- }
87
-
88
- func read(t *testing.T, p string) string {
89
- t.Helper()
90
- b, err := os.ReadFile(p)
91
- if err != nil {
92
- t.Fatal(err)
93
- }
94
- return string(b)
95
- }
96
-
97
- func lines(first, last string) string {
98
- l := []string{first, "two", "three", "four", "five", "six", "seven", "eight", "nine", last}
99
- return strings.Join(l, "\n") + "\n"
100
- }
101
-
102
- // newRepo commits src/a.py, src/b.py, src/clean.py and gone.txt.
103
- func newRepo(t *testing.T) string {
104
- t.Helper()
105
- root := t.TempDir()
106
- gitT(t, root, "init", "-q", "-b", "main")
107
- write(t, root, "src/a.py", lines("one", "ten"))
108
- write(t, root, "src/b.py", "b\n")
109
- write(t, root, "gone.txt", "gone\n")
110
- write(t, root, "src/clean.py", "clean\n")
111
- gitT(t, root, "add", "-A")
112
- gitT(t, root, "commit", "-q", "-m", "init")
113
- return root
114
- }
115
-
116
- // dirtyRepo adds a staged edit, an unstaged edit on top, an unstaged edit
117
- // elsewhere, a deleted tracked file, an untracked note and two secrets.
118
- func dirtyRepo(t *testing.T) string {
119
- t.Helper()
120
- root := newRepo(t)
121
- write(t, root, "src/a.py", lines("ONE-staged", "ten"))
122
- gitT(t, root, "add", "src/a.py")
123
- write(t, root, "src/a.py", lines("ONE-staged", "TEN-unstaged"))
124
- write(t, root, "src/b.py", "B-unstaged\n")
125
- if err := os.Remove(filepath.Join(root, "gone.txt")); err != nil {
126
- t.Fatal(err)
127
- }
128
- write(t, root, "note.txt", "note\n")
129
- write(t, root, ".env", "TOKEN="+envSecret+"\n")
130
- write(t, root, "id_material.txt", "-----BEGIN OPENSSH PRIVATE KEY-----\n"+keySecret+"\n-----END OPENSSH PRIVATE KEY-----\n")
131
- write(t, root, "deploy.tfvars", "token = \"staged-"+envSecret+"\"\n")
132
- gitT(t, root, "add", "deploy.tfvars")
133
- write(t, root, "deploy.tfvars", "token = \"unstaged-"+keySecret+"\"\n")
134
- return root
135
- }
136
-
137
- func run(args ...string) (int, string, string) {
138
- var out, errb bytes.Buffer
139
- code := Run(args, &out, &errb)
140
- return code, out.String(), errb.String()
141
- }
142
-
143
- func indexState(t *testing.T, root string) (string, time.Time) {
144
- t.Helper()
145
- p := filepath.Join(root, ".git", "index")
146
- fi, err := os.Stat(p)
147
- if err != nil {
148
- t.Fatal(err)
149
- }
150
- return read(t, p), fi.ModTime()
151
- }
152
-
153
- func loadManifest(t *testing.T, out string) manifest {
154
- t.Helper()
155
- var m manifest
156
- if err := json.Unmarshal([]byte(read(t, filepath.Join(out, "manifest.json"))), &m); err != nil {
157
- t.Fatal(err)
158
- }
159
- return m
160
- }
161
-
162
- func captureOK(t *testing.T, root string) string {
163
- t.Helper()
164
- out := filepath.Join(t.TempDir(), "snap")
165
- if code, _, stderr := run("capture", root, out); code != 0 {
166
- t.Fatalf("capture exit %d: %s", code, stderr)
167
- }
168
- return out
169
- }
170
-
171
- func TestCaptureDirtyRepo(t *testing.T) {
172
- root := dirtyRepo(t)
173
- idxBefore, mtimeBefore := indexState(t, root)
174
- out := filepath.Join(t.TempDir(), "snap")
175
- code, stdout, stderr := run("capture", root, out)
176
- if code != 0 {
177
- t.Fatalf("capture exit %d: %s", code, stderr)
178
- }
179
- if idx, mtime := indexState(t, root); idx != idxBefore || !mtime.Equal(mtimeBefore) {
180
- t.Fatal(".git/index bytes or mtime changed during capture")
181
- }
182
-
183
- m := loadManifest(t, out)
184
- if m.Schema != "overhaul.snapshot/1" || m.Head == nil || m.IndexSHA256 == "" || m.Fingerprint == "" {
185
- t.Fatalf("manifest header: %+v", m)
186
- }
187
- want := map[string]entry{
188
- "src/a.py": {Source: "tracked", Copied: true},
189
- "src/b.py": {Source: "tracked", Copied: true},
190
- "gone.txt": {Source: "tracked", SHA256: "deleted"},
191
- "src/clean.py": {Source: "tracked"}, // clean: git holds it, so only its hash is kept
192
- "note.txt": {Source: "untracked", Copied: true},
193
- ".env": {Source: "untracked", Sensitive: true},
194
- "id_material.txt": {Source: "untracked", Sensitive: true},
195
- }
196
- for p, w := range want {
197
- g := m.Files[p]
198
- if g == nil || g.Source != w.Source || g.Copied != w.Copied || g.Sensitive != w.Sensitive ||
199
- (w.SHA256 != "" && g.SHA256 != w.SHA256) {
200
- t.Errorf("%s: got %+v want %+v", p, g, w)
201
- }
202
- _, err := os.Lstat(filepath.Join(out, "tree", p))
203
- if copied := err == nil; copied != w.Copied {
204
- t.Errorf("%s: copied on disk = %v, want %v", p, copied, w.Copied)
205
- }
206
- }
207
- if got := read(t, filepath.Join(out, "tree", "src/a.py")); got != lines("ONE-staged", "TEN-unstaged") {
208
- t.Errorf("tree copy of src/a.py = %q", got)
209
- }
210
-
211
- staged := read(t, filepath.Join(out, "staged.patch"))
212
- unstaged := read(t, filepath.Join(out, "unstaged.patch"))
213
- if !strings.Contains(staged, "+ONE-staged") || strings.Contains(staged, "TEN-unstaged") ||
214
- strings.Contains(staged, "B-unstaged") || strings.Contains(staged, "gone.txt") {
215
- t.Errorf("staged.patch:\n%s", staged)
216
- }
217
- if strings.Contains(unstaged, "+ONE-staged") || !strings.Contains(unstaged, "+TEN-unstaged") ||
218
- !strings.Contains(unstaged, "+B-unstaged") || !strings.Contains(unstaged, "deleted file mode") {
219
- t.Errorf("unstaged.patch:\n%s", unstaged)
220
- }
221
- for _, name := range []string{"status.bin", "index.bin", "staged.patch", "unstaged.patch", "manifest.json"} {
222
- fi, err := os.Stat(filepath.Join(out, name))
223
- if err != nil {
224
- t.Error(err)
225
- continue
226
- }
227
- if runtime.GOOS != "windows" && fi.Mode().Perm()&0o077 != 0 {
228
- t.Errorf("%s mode %v is group or world accessible", name, fi.Mode().Perm())
229
- }
230
- }
231
-
232
- var summary struct {
233
- Withheld []string `json:"sensitive_not_copied"`
234
- }
235
- if err := json.Unmarshal([]byte(stdout), &summary); err != nil ||
236
- !slices.Equal(summary.Withheld, []string{".env", "deploy.tfvars", "id_material.txt"}) {
237
- t.Errorf("summary %q: %v", stdout, err)
238
- }
239
- leaks := stdout + stderr
240
- tree, err := regularFileText(out)
241
- if err != nil {
242
- t.Fatal(err)
243
- }
244
- leaks += tree
245
- for _, s := range []string{envSecret, keySecret} {
246
- if strings.Contains(leaks, s) {
247
- t.Errorf("secret %q leaked into output or snapshot", s)
248
- }
249
- }
250
-
251
- fi, err := os.Stat(out)
252
- if err != nil || (runtime.GOOS != "windows" && fi.Mode().Perm() != 0o700) {
253
- t.Errorf("snapshot dir mode: %v %v", fi.Mode(), err)
254
- }
255
- }
256
-
257
- func TestCaptureRefusals(t *testing.T) {
258
- root := newRepo(t)
259
-
260
- inside := filepath.Join(root, "snap")
261
- code, _, stderr := run("capture", root, inside)
262
- if code != 2 || !strings.Contains(stderr, "snapshot must live outside the target repository or inside its .devrites/overhaul/ run area") {
263
- t.Errorf("inside target: exit %d %q", code, stderr)
264
- }
265
- if _, err := os.Lstat(inside); err == nil {
266
- t.Error("snapshot created inside the target")
267
- }
268
-
269
- // The run area inside the target is the one allowed place, and never counts as repository content.
270
- before := fingerprintOf(t, root)
271
- runArea := filepath.Join(root, ".devrites", "overhaul", "r1")
272
- if code, _, stderr := run("capture", root, filepath.Join(runArea, "baseline")); code != 0 {
273
- t.Fatalf("capture into run area: exit %d %q", code, stderr)
274
- }
275
- write(t, runArea, "g0001/run.json", "{}\n")
276
- if after := fingerprintOf(t, root); after != before {
277
- t.Error("run area contents changed the repository fingerprint")
278
- }
279
-
280
- existing := t.TempDir()
281
- write(t, existing, "keep.txt", "keep")
282
- code, _, stderr = run("capture", root, existing)
283
- if code != 2 || !strings.Contains(stderr, "refusing to overwrite existing snapshot") {
284
- t.Errorf("overwrite: exit %d %q", code, stderr)
285
- }
286
- if entries, _ := os.ReadDir(existing); len(entries) != 1 {
287
- t.Errorf("existing snapshot dir was modified: %v", entries)
288
- }
289
- }
290
-
291
- func TestCaptureRefusesUnmergedIndex(t *testing.T) {
292
- root := newRepo(t)
293
- gitT(t, root, "checkout", "-q", "-b", "other")
294
- write(t, root, "src/b.py", "other\n")
295
- gitT(t, root, "commit", "-q", "-am", "other")
296
- gitT(t, root, "checkout", "-q", "main")
297
- write(t, root, "src/b.py", "main\n")
298
- gitT(t, root, "commit", "-q", "-am", "main")
299
- if out, err := gitRun(root, "merge", "other"); err == nil {
300
- t.Fatalf("expected a merge conflict: %s", out)
301
- }
302
- out := filepath.Join(t.TempDir(), "snap")
303
- code, _, stderr := run("capture", root, out)
304
- if code != 2 || !strings.Contains(stderr, "index has unmerged entries") {
305
- t.Fatalf("exit %d %q", code, stderr)
306
- }
307
- if _, err := os.Lstat(out); err == nil {
308
- t.Error("snapshot dir created despite refusal")
309
- }
310
- }
311
-
312
- type report struct {
313
- IndexUnchanged bool `json:"index_unchanged"`
314
- Agent []string `json:"agent_owned_changes"`
315
- User []string `json:"changes_outside_agent_paths"`
316
- }
317
-
318
- func verifyRun(t *testing.T, root, out string) (int, report) {
319
- t.Helper()
320
- agentFile := filepath.Join(t.TempDir(), "agent.txt")
321
- write(t, filepath.Dir(agentFile), "agent.txt", "src/a.py\n\n")
322
- code, stdout, stderr := run("verify", root, out, "--agent-paths", agentFile)
323
- var r report
324
- if err := json.Unmarshal([]byte(stdout), &r); err != nil {
325
- t.Fatalf("verify exit %d output %q %s: %v", code, stdout, stderr, err)
326
- }
327
- return code, r
328
- }
329
-
330
- func TestVerifySeparatesAgentAndUserChanges(t *testing.T) {
331
- root := dirtyRepo(t)
332
- out := captureOK(t, root)
333
-
334
- write(t, root, "src/a.py", "agent edit\n")
335
- code, r := verifyRun(t, root, out)
336
- if code != 0 || !r.IndexUnchanged || !slices.Equal(r.Agent, []string{"src/a.py"}) || len(r.User) != 0 {
337
- t.Fatalf("agent-only change: exit %d %+v", code, r)
338
- }
339
-
340
- write(t, root, "note.txt", "user edit\n")
341
- code, r = verifyRun(t, root, out)
342
- if code != 1 || !slices.Equal(r.User, []string{"note.txt"}) || !slices.Equal(r.Agent, []string{"src/a.py"}) {
343
- t.Fatalf("user change: exit %d %+v", code, r)
344
- }
345
- }
346
-
347
- func TestVerifyReportsModeOnlyChange(t *testing.T) {
348
- if runtime.GOOS == "windows" {
349
- t.Skip("permission bits are not meaningful on windows")
350
- }
351
- root := dirtyRepo(t)
352
- out := captureOK(t, root)
353
- if err := os.Chmod(filepath.Join(root, "note.txt"), 0o755); err != nil {
354
- t.Fatal(err)
355
- }
356
- code, r := verifyRun(t, root, out)
357
- if code != 1 || !slices.Equal(r.User, []string{"note.txt"}) || len(r.Agent) != 0 {
358
- t.Fatalf("mode-only change: exit %d %+v", code, r)
359
- }
360
- }
361
-
362
- func TestVerifyDetectsIndexChange(t *testing.T) {
363
- root := dirtyRepo(t)
364
- out := captureOK(t, root)
365
- gitT(t, root, "add", "src/b.py")
366
- code, r := verifyRun(t, root, out)
367
- if code != 1 || r.IndexUnchanged || len(r.User) != 0 {
368
- t.Fatalf("exit %d %+v", code, r)
369
- }
370
- }
371
-
372
- func TestCaptureStaysReadOnlyAtBoundaries(t *testing.T) {
373
- root := newRepo(t)
374
- gitT(t, root, "config", "diff.noprefix", "true")
375
- gitT(t, root, "config", "diff.external", "false")
376
-
377
- inner := filepath.Join(root, "vendor", "inner")
378
- if err := os.MkdirAll(inner, 0o755); err != nil {
379
- t.Fatal(err)
380
- }
381
- gitT(t, inner, "init", "-q", "-b", "main")
382
- write(t, inner, "lib.txt", "inner\n")
383
- gitT(t, inner, "add", "-A")
384
- gitT(t, inner, "commit", "-q", "-m", "inner")
385
- gitT(t, root, "add", "vendor/inner")
386
-
387
- write(t, root, "src/a.py", lines("ONE-staged", "ten"))
388
- gitT(t, root, "add", "src/a.py")
389
- write(t, root, "src/a.py", lines("ONE-staged", "TEN-unstaged"))
390
- // Stale stat info: content matches the index but the timestamp does not.
391
- old := time.Now().Add(-48 * time.Hour)
392
- if err := os.Chtimes(filepath.Join(root, "src/b.py"), old, old); err != nil {
393
- t.Fatal(err)
394
- }
395
-
396
- idxBefore, mtimeBefore := indexState(t, root)
397
- out := captureOK(t, root)
398
- if idx, mtime := indexState(t, root); idx != idxBefore || !mtime.Equal(mtimeBefore) {
399
- t.Fatal(".git/index changed during capture")
400
- }
401
-
402
- m := loadManifest(t, out)
403
- if !slices.Contains(m.Submodules, "vendor/inner") {
404
- t.Errorf("submodules_not_captured = %v", m.Submodules)
405
- }
406
- if e := m.Files["vendor/inner"]; e == nil || e.SHA256 != "directory" || e.Copied {
407
- t.Errorf("gitlink entry = %+v", e)
408
- }
409
- if _, err := os.Lstat(filepath.Join(out, "tree", "vendor", "inner", "lib.txt")); err == nil {
410
- t.Error("nested repository content was copied")
411
- }
412
- for _, name := range []string{"staged.patch", "unstaged.patch"} {
413
- if p := read(t, filepath.Join(out, name)); !strings.Contains(p, "diff --git a/src/a.py b/src/a.py") {
414
- t.Errorf("%s lacks prefixed header:\n%s", name, p)
415
- }
416
- }
417
- }
418
-
419
- func TestCaptureFailsWhenIndexChangesDuringCapture(t *testing.T) {
420
- root := dirtyRepo(t)
421
- calls := 0
422
- orig := indexDigest
423
- indexDigest = func(string) (string, error) {
424
- calls++
425
- return strings.Repeat("0", 63) + string(rune('0'+calls)), nil
426
- }
427
- t.Cleanup(func() { indexDigest = orig })
428
-
429
- out := filepath.Join(t.TempDir(), "snap")
430
- code, _, stderr := run("capture", root, out)
431
- if code == 0 || !strings.Contains(stderr, "index changed during capture") {
432
- t.Fatalf("capture exit %d, stderr %q", code, stderr)
433
- }
434
- if _, err := os.Lstat(filepath.Join(out, "manifest.json")); err == nil {
435
- t.Error("manifest.json written despite index change")
436
- }
437
- }
438
-
439
- func TestDeltaReportsOnlyAttemptChanges(t *testing.T) {
440
- root := dirtyRepo(t)
441
- before := filepath.Join(t.TempDir(), "before.json")
442
- if code, _, stderr := run("state", root, before); code != 0 {
443
- t.Fatalf("state exit %d: %s", code, stderr)
444
- }
445
- write(t, root, "src/b.py", "changed during the attempt\n")
446
- code, stdout, stderr := run("delta", before, root)
447
- if code != 0 || stdout != "src/b.py\n" {
448
- t.Fatalf("delta exit %d stdout %q stderr %q", code, stdout, stderr)
449
- }
450
- }
451
-
452
- func TestDeltaReportsModeOnlyChange(t *testing.T) {
453
- if runtime.GOOS == "windows" {
454
- t.Skip("permission bits are not meaningful on windows")
455
- }
456
- root := dirtyRepo(t)
457
- before := filepath.Join(t.TempDir(), "before.json")
458
- if code, _, stderr := run("state", root, before); code != 0 {
459
- t.Fatalf("state exit %d: %s", code, stderr)
460
- }
461
- if err := os.Chmod(filepath.Join(root, "src/b.py"), 0o755); err != nil {
462
- t.Fatal(err)
463
- }
464
- code, stdout, stderr := run("delta", before, root)
465
- if code != 0 || stdout != "src/b.py\n" {
466
- t.Fatalf("delta exit %d stdout %q stderr %q", code, stdout, stderr)
467
- }
468
- }
469
-
470
- func fingerprintOf(t *testing.T, root string) string {
471
- t.Helper()
472
- code, stdout, stderr := run("fingerprint", root)
473
- if code != 0 {
474
- t.Fatalf("fingerprint exit %d: %s", code, stderr)
475
- }
476
- return strings.TrimSpace(stdout)
477
- }
478
-
479
- func TestCaptureWithholdsKeysBeyondFirstWindow(t *testing.T) {
480
- const window = 65536
481
- root := newRepo(t)
482
- block := func(kind, body string) (string, string) {
483
- return "-----BEGIN " + kind + "-----\n" + body + "\n", "-----END " + kind + "-----"
484
- }
485
- pad := func(n int) string { return strings.Repeat("A", n) }
486
-
487
- files := map[string]string{}
488
- bodies := map[string]string{}
489
- add := func(name, prefix, kind, body string) {
490
- head, tail := block(kind, body)
491
- files[name] = prefix + head + tail
492
- bodies[name] = body
493
- }
494
- add("k0.txt", "", "OPENSSH PRIVATE KEY", "body-k0-4d1f")
495
- nearHead, nearTail := block("RSA PRIVATE KEY", "body-knear-4d1f")
496
- add("knear.txt", pad(window-len(nearHead)-len(nearTail)), "RSA PRIVATE KEY", "body-knear-4d1f")
497
- edgeHead := "-----BEGIN ENCRYPTED "
498
- add("kedge.txt", pad(window-8-len(edgeHead)), "ENCRYPTED PRIVATE KEY", "body-kedge-4d1f")
499
- // Drop the END line: it holds a second, fully in-window marker that would hide a missing carry.
500
- files["kedge.txt"] = strings.TrimSuffix(files["kedge.txt"], "-----END ENCRYPTED PRIVATE KEY-----")
501
- add("kfar.txt", pad(200000), "EC PRIVATE KEY", "body-kfar-4d1f")
502
- add("kpgp.txt", "", "PGP PRIVATE KEY BLOCK", "body-kpgp-4d1f")
503
- if len(files["knear.txt"]) != window {
504
- t.Fatalf("knear.txt is %d bytes, want %d", len(files["knear.txt"]), window)
505
- }
506
- for _, name := range []string{"a.pem", "a.asc", "a.pgp", "a.gpg", "a.p8"} {
507
- files[name] = "body-" + name + "-4d1f"
508
- bodies[name] = files[name]
509
- }
510
- for name, content := range files {
511
- write(t, root, name, content)
512
- }
513
- write(t, root, "clean_big.txt", strings.Repeat("B", 200000))
514
-
515
- out := captureOK(t, root)
516
- m := loadManifest(t, out)
517
- var leaks string
518
- for _, p := range []string{"staged.patch", "unstaged.patch"} {
519
- leaks += read(t, filepath.Join(out, p))
520
- }
521
- tree, err := regularFileText(filepath.Join(out, "tree"))
522
- if err != nil {
523
- t.Fatal(err)
524
- }
525
- leaks += tree
526
- for name, body := range bodies {
527
- g := m.Files[name]
528
- if g == nil || !g.Sensitive || g.Copied {
529
- t.Errorf("%s: got %+v, want sensitive and not copied", name, g)
530
- }
531
- if _, err := os.Lstat(filepath.Join(out, "tree", name)); err == nil {
532
- t.Errorf("%s: present in tree", name)
533
- }
534
- if strings.Contains(leaks, body) {
535
- t.Errorf("%s: body leaked into snapshot", name)
536
- }
537
- }
538
- if g := m.Files["clean_big.txt"]; g == nil || g.Sensitive || !g.Copied {
539
- t.Errorf("clean_big.txt: got %+v, want copied and not sensitive", g)
540
- }
541
-
542
- stdout := func() string {
543
- _, s, _ := run("capture", root, filepath.Join(t.TempDir(), "again"))
544
- return s
545
- }()
546
- var summary struct {
547
- Withheld []string `json:"sensitive_not_copied"`
548
- }
549
- if err := json.Unmarshal([]byte(stdout), &summary); err != nil {
550
- t.Fatal(err)
551
- }
552
- for name := range bodies {
553
- if !slices.Contains(summary.Withheld, name) {
554
- t.Errorf("%s: missing from sensitive_not_copied", name)
555
- }
556
- }
557
- }
558
-
559
- func TestCaptureManifestFingerprintMatchesFiles(t *testing.T) {
560
- root := newRepo(t)
561
- stop := make(chan struct{})
562
- done := make(chan struct{})
563
- go func() {
564
- defer close(done)
565
- for i := 0; ; i++ {
566
- select {
567
- case <-stop:
568
- return
569
- default:
570
- }
571
- _ = os.WriteFile(filepath.Join(root, "src", "b.py"), []byte(strings.Repeat("x", i%97+1)+"\n"), 0o644)
572
- }
573
- }()
574
- defer func() { close(stop); <-done }()
575
- for i := 0; i < 20; i++ {
576
- out := filepath.Join(t.TempDir(), "snap")
577
- if code, _, _ := run("capture", root, out); code != 0 {
578
- continue
579
- }
580
- m := loadManifest(t, out)
581
- if got := fingerprint(m.Files); got != m.Fingerprint {
582
- t.Fatalf("capture %d: manifest.fingerprint %s does not match manifest.files %s", i, m.Fingerprint, got)
583
- }
584
- }
585
- }
586
-
587
- func TestUnreadablePathFailsClosed(t *testing.T) {
588
- if runtime.GOOS == "windows" || os.Geteuid() == 0 {
589
- t.Skip("directory permissions are not enforced")
590
- }
591
- root := newRepo(t)
592
- write(t, root, "locked/x.txt", "x\n")
593
- gitT(t, root, "add", "-A")
594
- gitT(t, root, "commit", "-q", "-m", "locked")
595
- locked := filepath.Join(root, "locked")
596
- if err := os.Chmod(locked, 0); err != nil {
597
- t.Fatal(err)
598
- }
599
- t.Cleanup(func() { _ = os.Chmod(locked, 0o700) })
600
- if _, err := os.Lstat(filepath.Join(locked, "x.txt")); err == nil {
601
- t.Skip("path stays readable")
602
- }
603
- out := t.TempDir()
604
- for _, args := range [][]string{
605
- {"state", root, filepath.Join(out, "state.json")},
606
- {"capture", root, filepath.Join(out, "cap")},
607
- } {
608
- code, _, stderr := run(args...)
609
- if code == 0 || !strings.Contains(stderr, "permission denied") {
610
- t.Errorf("%s exit %d stderr %q: want non-zero naming the permission error", args[0], code, stderr)
611
- }
612
- }
613
- }
614
-
615
- func TestDirectoryReplacedByFileReportsDeleted(t *testing.T) {
616
- root := newRepo(t)
617
- write(t, root, "src/a.py", "a\n")
618
- gitT(t, root, "add", "-A")
619
- gitT(t, root, "commit", "-q", "-m", "src")
620
- if err := os.RemoveAll(filepath.Join(root, "src")); err != nil {
621
- t.Fatal(err)
622
- }
623
- write(t, root, "src", "now a file\n")
624
- m := loadManifest(t, captureOK(t, root))
625
- if got := m.Files["src/a.py"]; got == nil || got.SHA256 != "deleted" {
626
- t.Errorf("src/a.py = %+v, want deleted", got)
627
- }
628
- }
629
-
630
- func TestCaptureClassifiesSymlinks(t *testing.T) {
631
- root := newRepo(t)
632
- outside := filepath.Join(t.TempDir(), "outside.txt")
633
- otherOutside := filepath.Join(t.TempDir(), "other.txt")
634
- for _, p := range []string{outside, otherOutside} {
635
- if err := os.WriteFile(p, []byte("outside\n"), 0o644); err != nil {
636
- t.Fatal(err)
637
- }
638
- }
639
- link := func(target, name string) {
640
- t.Helper()
641
- if err := os.Symlink(target, filepath.Join(root, name)); err != nil {
642
- t.Skipf("symlinks unavailable: %v", err)
643
- }
644
- }
645
- retarget := func(target, name string) {
646
- t.Helper()
647
- if err := os.Remove(filepath.Join(root, name)); err != nil {
648
- t.Fatal(err)
649
- }
650
- link(target, name)
651
- }
652
- link("src/b.py", "clean.lnk")
653
- link("src/b.py", "in.lnk")
654
- link(outside, "out.lnk")
655
- gitT(t, root, "add", "-A")
656
- gitT(t, root, "commit", "-q", "-m", "links")
657
- retarget("src/a.py", "in.lnk")
658
- retarget(otherOutside, "out.lnk")
659
- link("src/clean.py", "new.lnk")
660
-
661
- out := captureOK(t, root)
662
- m := loadManifest(t, out)
663
- for _, c := range []struct {
664
- name, target, source string
665
- copied bool
666
- }{
667
- {"clean.lnk", "src/b.py", "tracked", false},
668
- {"in.lnk", "src/a.py", "tracked", true},
669
- {"out.lnk", otherOutside, "tracked", true},
670
- {"new.lnk", "src/clean.py", "untracked", true},
671
- } {
672
- // Windows stores link targets with its own separator.
673
- c.target = filepath.FromSlash(c.target)
674
- sum := sha256.Sum256([]byte(c.target))
675
- want := entry{SHA256: "link:" + hex.EncodeToString(sum[:]), Mode: 0o120000, Source: c.source, Copied: c.copied}
676
- if g := m.Files[c.name]; g == nil || *g != want {
677
- t.Errorf("%s: got %+v want %+v", c.name, g, want)
678
- }
679
- fi, err := os.Lstat(filepath.Join(out, "tree", c.name))
680
- if !c.copied {
681
- if err == nil {
682
- t.Errorf("%s: clean link copied into tree", c.name)
683
- }
684
- continue
685
- }
686
- if err != nil || fi.Mode()&os.ModeSymlink == 0 {
687
- t.Errorf("%s: tree entry must be a symlink: %v %v", c.name, fi, err)
688
- continue
689
- }
690
- if got, err := os.Readlink(filepath.Join(out, "tree", c.name)); err != nil || got != c.target {
691
- t.Errorf("%s: tree link target %q (%v), want %q", c.name, got, err, c.target)
692
- }
693
- }
694
- }
695
-
696
- func TestGitRunnerTimesOut(t *testing.T) {
697
- if runtime.GOOS == "windows" {
698
- t.Skip("shell stub")
699
- }
700
- bin := t.TempDir()
701
- stub := "#!/bin/sh\nexec sleep 10\n"
702
- if err := os.WriteFile(filepath.Join(bin, "git"), []byte(stub), 0o755); err != nil { // #nosec G306 -- test stub must be executable
703
- t.Fatal(err)
704
- }
705
- t.Setenv("PATH", bin+string(os.PathListSeparator)+os.Getenv("PATH"))
706
- old := gitTimeout
707
- gitTimeout = 200 * time.Millisecond
708
- t.Cleanup(func() { gitTimeout = old })
709
- start := time.Now()
710
- var out, errb bytes.Buffer
711
- code := Run([]string{"fingerprint", t.TempDir()}, &out, &errb)
712
- if code == 0 {
713
- t.Fatalf("fingerprint succeeded against a hung git: %q", out.String())
714
- }
715
- if d := time.Since(start); d > 2*time.Second {
716
- t.Fatalf("hung git held fingerprint for %v", d)
717
- }
718
- }