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,636 +0,0 @@
1
- package score
2
-
3
- import (
4
- "bytes"
5
- "encoding/json"
6
- "fmt"
7
- "maps"
8
- "math/big"
9
- "os"
10
- "path/filepath"
11
- "strings"
12
- "testing"
13
-
14
- "github.com/devrites/devrites/internal/overhaul/ovio"
15
- )
16
-
17
- var doms = []string{"correctness", "security", "reliability", "performance", "tests", "architecture", "ux", "operations"}
18
-
19
- var fp = strings.Repeat("a", 64)
20
-
21
- func ctl(i int, d string, w any, lanes ...string) map[string]any {
22
- if len(lanes) == 0 {
23
- lanes = []string{"backend"}
24
- }
25
- return map[string]any{"id": fmt.Sprintf("C-%03d", i), "domain": d, "lanes": lanes, "weight": w, "hard_gate": false, "evaluation": "executed"}
26
- }
27
-
28
- func rubricOf(controls []map[string]any) map[string]any {
29
- return map[string]any{"schema": "overhaul.rubric/1", "rev": 1, "lanes": []string{"frontend", "backend"},
30
- "controls": controls, "domains": map[string]any{"correctness": 20, "security": 20, "reliability": 15,
31
- "performance": 15, "tests": 10, "architecture": 10, "ux": 5, "operations": 5}}
32
- }
33
-
34
- func resOf(status map[string]string) map[string]any {
35
- r := map[string]any{}
36
- for k, v := range status {
37
- r[k] = map[string]any{"status": v, "evidence": []string{"EV-1"}}
38
- }
39
- return map[string]any{"schema": "overhaul.results/1", "subject": "candidate", "fingerprint": fp, "results": r}
40
- }
41
-
42
- func passing() map[string]any {
43
- g := map[string]any{}
44
- for _, id := range auditGates {
45
- g[id] = map[string]any{"status": "PASS", "evidence": []string{"EV-g"}}
46
- }
47
- return map[string]any{"mode": "audit", "gates": g}
48
- }
49
-
50
- func allPass(cs []map[string]any) map[string]string {
51
- st := map[string]string{}
52
- for _, c := range cs {
53
- st[c["id"].(string)] = "PASS"
54
- }
55
- return st
56
- }
57
-
58
- // norm round-trips v through JSON with UseNumber, exactly as file input arrives.
59
- func norm(t *testing.T, v any) map[string]any {
60
- t.Helper()
61
- b, err := json.Marshal(v)
62
- if err != nil {
63
- t.Fatal(err)
64
- }
65
- dec := json.NewDecoder(bytes.NewReader(b))
66
- dec.UseNumber()
67
- var m map[string]any
68
- if err := dec.Decode(&m); err != nil {
69
- t.Fatal(err)
70
- }
71
- return m
72
- }
73
-
74
- func tryScore(t *testing.T, r, s, g any) (map[string]any, error) {
75
- t.Helper()
76
- out, err := score(norm(t, r), norm(t, s), norm(t, g))
77
- if err != nil {
78
- return nil, err
79
- }
80
- return norm(t, out), nil
81
- }
82
-
83
- func mustScore(t *testing.T, r, s, g any) map[string]any {
84
- t.Helper()
85
- out, err := tryScore(t, r, s, g)
86
- if err != nil {
87
- t.Fatalf("score: %v", err)
88
- }
89
- return out
90
- }
91
-
92
- func get(v any, path string) string { return fmt.Sprint(ovio.Get(v, path)) }
93
-
94
- func exact(t *testing.T, v any, path string) *big.Rat {
95
- t.Helper()
96
- r, ok := new(big.Rat).SetString(get(v, path))
97
- if !ok {
98
- t.Fatalf("%s is not exact: %v", path, ovio.Get(v, path))
99
- }
100
- return r
101
- }
102
-
103
- func base() []map[string]any {
104
- var b []map[string]any
105
- for i, d := range doms {
106
- b = append(b, ctl(i, d, 5, "frontend", "backend"))
107
- }
108
- return b
109
- }
110
-
111
- func workedExample() ([]map[string]any, map[string]string) {
112
- ex := append(base(), ctl(10, "correctness", 5), ctl(11, "correctness", 5), ctl(12, "correctness", 3), ctl(13, "correctness", 1))
113
- st := allPass(ex)
114
- st["C-013"] = "FAIL"
115
- return ex, st
116
- }
117
-
118
- func laneMasking() []map[string]any {
119
- l := base()
120
- for k := range 10 {
121
- l = append(l, ctl(30+k, "correctness", 5, "backend"))
122
- }
123
- return append(l, ctl(40, "correctness", 5, "frontend"))
124
- }
125
-
126
- // 1. Worked example: correctness 5,5,5,3 PASS + 1 FAIL -> D=180/19, Q=18800/1900.
127
- func TestWorkedExample(t *testing.T) {
128
- ex, st := workedExample()
129
- out := mustScore(t, rubricOf(ex), resOf(st), passing())
130
- if got := get(out, "global.domains.correctness.exact"); got != "180/19" {
131
- t.Fatalf("correctness = %s", got)
132
- }
133
- if got := get(out, "global.Q.exact"); got != "188/19" {
134
- t.Fatalf("Q = %s", got)
135
- }
136
- if got := get(out, "global.Q.decimal"); got != "9.894736842105" {
137
- t.Fatalf("decimal = %s", got)
138
- }
139
- if v := get(out, "readiness_verdict"); v != "MEETS_TARGETS" {
140
- t.Fatalf("verdict = %s", v)
141
- }
142
- }
143
-
144
- // 2. Same numbers, failing control is a hard gate -> NOT_READY despite Q 9.89.
145
- func TestHardGateBlocks(t *testing.T) {
146
- ex, st := workedExample()
147
- ex[len(ex)-1]["hard_gate"] = true
148
- out := mustScore(t, rubricOf(ex), resOf(st), passing())
149
- if get(out, "readiness_verdict") != "NOT_READY" || get(out, "gates.G-MANDATORY") != "FAIL" {
150
- t.Fatalf("verdict %s, G-MANDATORY %s", get(out, "readiness_verdict"), get(out, "gates.G-MANDATORY"))
151
- }
152
- if got := get(out, "global.Q.exact"); got != "188/19" {
153
- t.Fatalf("Q = %s", got)
154
- }
155
- }
156
-
157
- // 3. Q exactly 9.696 fails 9.7 at full precision.
158
- func TestFullPrecisionThreshold(t *testing.T) {
159
- var cs []map[string]any
160
- st := map[string]string{}
161
- i := 100
162
- for _, d := range doms {
163
- n := 1
164
- if d == "correctness" || d == "security" {
165
- n = 250
166
- }
167
- for k := range n {
168
- cs = append(cs, ctl(i, d, 1, "frontend", "backend"))
169
- st[fmt.Sprintf("C-%03d", i)] = "PASS"
170
- if n == 250 && k < 19 {
171
- st[fmt.Sprintf("C-%03d", i)] = "FAIL"
172
- }
173
- i++
174
- }
175
- }
176
- out := mustScore(t, rubricOf(cs), resOf(st), passing())
177
- if got := get(out, "global.Q.exact"); got != "1212/125" {
178
- t.Fatalf("Q = %s", got)
179
- }
180
- row := ovio.List(out["thresholds"])[0]
181
- if get(row, "scope") != "global" || get(row, "result") != "FAIL" || get(out, "readiness_verdict") != "NOT_READY" {
182
- t.Fatalf("row %v verdict %s", row, get(out, "readiness_verdict"))
183
- }
184
- }
185
-
186
- // 4. Zero denominator: an applicable domain whose only control is N/A -> NOT_ASSESSABLE, never 10.
187
- func TestZeroDenominatorNotAssessable(t *testing.T) {
188
- b := base()
189
- z := make([]map[string]any, len(b))
190
- for i, c := range b {
191
- z[i] = maps.Clone(c)
192
- }
193
- z[6]["na"] = map[string]any{"reason": "no UI", "evidence": []string{"EV-2"}, "approved": true}
194
- out := mustScore(t, rubricOf(z), resOf(allPass(b)), passing())
195
- if ovio.Get(out, "global.Q") != nil || get(out, "readiness_verdict") != "NOT_ASSESSABLE" {
196
- t.Fatalf("Q %v verdict %s", ovio.Get(out, "global.Q"), get(out, "readiness_verdict"))
197
- }
198
- }
199
-
200
- // 5. Global 59/6 and backend 10 cannot mask frontend 9.0; shared controls count once globally.
201
- func TestLaneMasking(t *testing.T) {
202
- l := laneMasking()
203
- st := allPass(l)
204
- st["C-040"] = "FAIL"
205
- out := mustScore(t, rubricOf(l), resOf(st), passing())
206
- if row := ovio.List(out["thresholds"])[0]; get(row, "result") != "PASS" || get(out, "global.Q.exact") != "59/6" {
207
- t.Fatalf("global row %v Q %s", row, get(out, "global.Q.exact"))
208
- }
209
- if get(out, "lanes.frontend.Q.exact") != "9/1" || get(out, "lanes.backend.Q.exact") != "10/1" {
210
- t.Fatalf("lanes %v", out["lanes"])
211
- }
212
- laneRow := "missing"
213
- for _, row := range ovio.List(out["thresholds"]) {
214
- if get(row, "scope") == "lane frontend" {
215
- laneRow = get(row, "result")
216
- }
217
- }
218
- if laneRow != "FAIL" {
219
- t.Fatalf("lane frontend threshold row = %s", laneRow)
220
- }
221
- if get(out, "readiness_verdict") != "NOT_READY" {
222
- t.Fatalf("verdict %s", get(out, "readiness_verdict"))
223
- }
224
- if get(out, "counts.controls") != "19" || get(out, "counts.lane_appearances") != "27" {
225
- t.Fatalf("counts %v", out["counts"])
226
- }
227
- }
228
-
229
- // 6. PASS without evidence counts as UNKNOWN; UNKNOWN earns zero, not N/A.
230
- func TestPassWithoutEvidenceIsUnknown(t *testing.T) {
231
- b := base()
232
- r := resOf(allPass(b))
233
- r["results"].(map[string]any)["C-000"].(map[string]any)["evidence"] = []string{}
234
- out := mustScore(t, rubricOf(b), r, passing())
235
- if get(out, "status_by_control.C-000") != "UNKNOWN" || get(out, "global.domains.correctness.exact") != "0/1" {
236
- t.Fatalf("status %s correctness %s", get(out, "status_by_control.C-000"), get(out, "global.domains.correctness.exact"))
237
- }
238
- if len(ovio.List(out["downgrades"])) != 1 {
239
- t.Fatalf("downgrades %v", out["downgrades"])
240
- }
241
- }
242
-
243
- // 7. Fixed-catalog monotonicity: turning any PASS into FAIL never raises any score.
244
- func TestMonotonicity(t *testing.T) {
245
- l := laneMasking()
246
- full := allPass(l)
247
- top := mustScore(t, rubricOf(l), resOf(full), passing())
248
- for id := range full {
249
- worse := maps.Clone(full)
250
- worse[id] = "FAIL"
251
- low := mustScore(t, rubricOf(l), resOf(worse), passing())
252
- for _, p := range []string{"global.Q.exact", "lanes.frontend.Q.exact", "lanes.backend.Q.exact"} {
253
- if exact(t, low, p).Cmp(exact(t, top, p)) > 0 {
254
- t.Fatalf("failing %s raised %s", id, p)
255
- }
256
- }
257
- if exact(t, low, "global.Q.exact").Cmp(exact(t, top, "global.Q.exact")) >= 0 {
258
- t.Fatalf("failing %s did not lower global Q", id)
259
- }
260
- }
261
- }
262
-
263
- // Adding a FAIL or UNKNOWN control strictly lowers its own domain and never raises any domain.
264
- func TestAddedNonPassControlLowersItsDomain(t *testing.T) {
265
- b := base()
266
- top := mustScore(t, rubricOf(b), resOf(allPass(b)), passing())
267
- for _, d := range doms {
268
- for _, status := range []string{"FAIL", "UNKNOWN"} {
269
- t.Run(d+"/"+status, func(t *testing.T) {
270
- cs := append(base(), ctl(50, d, 1, "frontend", "backend"))
271
- st := allPass(cs)
272
- st["C-050"] = status
273
- out := mustScore(t, rubricOf(cs), resOf(st), passing())
274
- for _, o := range doms {
275
- p := "global.domains." + o + ".exact"
276
- cmp := exact(t, out, p).Cmp(exact(t, top, p))
277
- if o == d && cmp >= 0 {
278
- t.Fatalf("%s control did not lower %s: %s", status, d, get(out, p))
279
- }
280
- if cmp > 0 {
281
- t.Fatalf("%s control in %s raised %s", status, d, o)
282
- }
283
- }
284
- })
285
- }
286
- }
287
- }
288
-
289
- // A control shared by two lanes adds its weight to the global domain denominator once.
290
- func TestSharedControlWeightCountsOnceGlobally(t *testing.T) {
291
- cs := []map[string]any{ctl(0, "correctness", 5, "frontend", "backend"), ctl(1, "correctness", 5, "backend")}
292
- for _, d := range doms[1:] {
293
- cs = append(cs, ctl(2+len(cs), d, 5, "frontend", "backend"))
294
- }
295
- st := allPass(cs)
296
- st["C-001"] = "FAIL"
297
- out := mustScore(t, rubricOf(cs), resOf(st), passing())
298
- if got := get(out, "global.domains.correctness.exact"); got != "5/1" {
299
- t.Fatalf("correctness = %s, want 5/1", got)
300
- }
301
- }
302
-
303
- // 8. Duplicate control ids, weights off the 1/3/5 scale and unknown evaluations are invalid input.
304
- func TestInvalidCatalog(t *testing.T) {
305
- zero := base()
306
- zero[0] = maps.Clone(zero[0])
307
- zero[0]["weight"] = 0
308
- two := base()
309
- two[0] = maps.Clone(two[0])
310
- two[0]["weight"] = 2
311
- noEval := base()
312
- noEval[0] = maps.Clone(noEval[0])
313
- delete(noEval[0], "evaluation")
314
- for _, tc := range []struct {
315
- cs []map[string]any
316
- want string
317
- }{{append(base(), base()[0]), "duplicate control id"}, {zero, "must be > 0"}, {two, "weight must be 1, 3 or 5"},
318
- {noEval, "evaluation must be"}} {
319
- if _, err := tryScore(t, rubricOf(tc.cs), resOf(nil), passing()); err == nil || !strings.Contains(err.Error(), tc.want) {
320
- t.Fatalf("want %q, got %v", tc.want, err)
321
- }
322
- }
323
- }
324
-
325
- // 9. Approved sequential degradation is the only open gate -> qualified outcome.
326
- func TestApprovedDegradation(t *testing.T) {
327
- b := base()
328
- g := passing()
329
- g["gates"].(map[string]any)["G-CONCURRENCY"] = map[string]any{"status": "WAIVED_OPERATIONAL", "approval": "AP-2"}
330
- out := mustScore(t, rubricOf(b), resOf(allPass(b)), g)
331
- if v := get(out, "readiness_verdict"); v != "MEETS_TARGETS_WITH_APPROVED_DEGRADATION" {
332
- t.Fatalf("verdict %s", v)
333
- }
334
- }
335
-
336
- // 10. Missing gate evidence -> UNKNOWN -> NOT_READY.
337
- func TestGatePassWithoutEvidence(t *testing.T) {
338
- b := base()
339
- g := passing()
340
- g["gates"].(map[string]any)["G-COVERAGE"] = map[string]any{"status": "PASS"}
341
- out := mustScore(t, rubricOf(b), resOf(allPass(b)), g)
342
- if get(out, "gates.G-COVERAGE") != "UNKNOWN" || get(out, "readiness_verdict") != "NOT_READY" {
343
- t.Fatalf("gate %s verdict %s", get(out, "gates.G-COVERAGE"), get(out, "readiness_verdict"))
344
- }
345
- }
346
-
347
- // 11. A rubric cannot lower the policy thresholds or drop a domain without a recorded exclusion.
348
- func TestWeakenedRubric(t *testing.T) {
349
- b := base()
350
- low := rubricOf(b)
351
- low["policy"] = map[string]any{"global_min": "0"}
352
- var four []map[string]any
353
- for i, d := range []string{"tests", "architecture", "ux", "operations"} {
354
- four = append(four, ctl(i+1, d, 5))
355
- }
356
- partial := rubricOf(four)
357
- partial["domains"] = map[string]any{"tests": 10, "architecture": 10, "ux": 5, "operations": 5}
358
- for _, tc := range []struct {
359
- r map[string]any
360
- st map[string]string
361
- want string
362
- }{{low, allPass(b), "policy may only raise"}, {partial, allPass(four), "needs a weight or a recorded exclusion"}} {
363
- if _, err := tryScore(t, tc.r, resOf(tc.st), passing()); err == nil || !strings.Contains(err.Error(), tc.want) {
364
- t.Fatalf("want %q, got %v", tc.want, err)
365
- }
366
- }
367
- }
368
-
369
- func writeJSON(t *testing.T, dir, name string, v any) string {
370
- t.Helper()
371
- b, err := json.Marshal(v)
372
- if err != nil {
373
- t.Fatal(err)
374
- }
375
- p := filepath.Join(dir, name)
376
- if err := os.WriteFile(p, b, 0o644); err != nil {
377
- t.Fatal(err)
378
- }
379
- return p
380
- }
381
-
382
- // pinned sets the results' rubric_digest to the digest of the rubric file.
383
- func pinned(t *testing.T, rubricPath string, results map[string]any) map[string]any {
384
- t.Helper()
385
- d, err := ovio.SHA256File(rubricPath)
386
- if err != nil {
387
- t.Fatal(err)
388
- }
389
- results["rubric_digest"] = d
390
- return results
391
- }
392
-
393
- func runCLI(args ...string) (int, string, string) {
394
- var o, e bytes.Buffer
395
- code := Run(args, &o, &e)
396
- return code, o.String(), e.String()
397
- }
398
-
399
- func TestCompare(t *testing.T) {
400
- var excl []any
401
- for _, d := range doms[2:] {
402
- excl = append(excl, map[string]any{"domain": d, "reason": "out of scope", "evidence": []string{"EV-x"}})
403
- }
404
- r := map[string]any{"schema": "overhaul.rubric/1", "rev": 1, "lanes": []string{"backend"},
405
- "domains": map[string]any{"correctness": 50, "security": 50}, "domain_exclusions": excl,
406
- "weight_deviations": []any{
407
- map[string]any{"domain": "correctness", "reason": "two-domain library", "approval": "AP-1"},
408
- map[string]any{"domain": "security", "reason": "two-domain library", "approval": "AP-1"}},
409
- "controls": []map[string]any{ctl(1, "correctness", 5), ctl(2, "correctness", 5), ctl(3, "security", 5)}}
410
- dir := t.TempDir()
411
- rp := writeJSON(t, dir, "r.json", r)
412
- code, stdout, stderr := runCLI("compare", "--rubric", rp,
413
- "--baseline", writeJSON(t, dir, "a.json", pinned(t, rp, resOf(map[string]string{"C-001": "PASS", "C-002": "UNKNOWN", "C-003": "PASS"}))),
414
- "--candidate", writeJSON(t, dir, "b.json", pinned(t, rp, resOf(map[string]string{"C-001": "FAIL", "C-002": "PASS", "C-003": "PASS"}))))
415
- if code != 0 {
416
- t.Fatalf("exit %d: %s", code, stderr)
417
- }
418
- out := norm(t, json.RawMessage(stdout))
419
- if get(out, "baseline_Q.exact") != "15/2" || get(out, "candidate_Q.exact") != "15/2" {
420
- t.Fatalf("Q %v / %v", out["baseline_Q"], out["candidate_Q"])
421
- }
422
- rows := ovio.List(out["transitions"])
423
- if len(rows) != 2 ||
424
- get(rows[0], "control") != "C-001" || get(rows[0], "kind") != "regression-or-new-failure" ||
425
- get(rows[1], "control") != "C-002" || get(rows[1], "kind") != "evidence-only" {
426
- t.Fatalf("transitions %v", rows)
427
- }
428
- }
429
-
430
- func TestCLIOutWritesScorecard(t *testing.T) {
431
- dir := t.TempDir()
432
- b := base()
433
- outPath := filepath.Join(dir, "scorecard.json")
434
- rp := writeJSON(t, dir, "r.json", rubricOf(b))
435
- code, stdout, stderr := runCLI("--rubric", rp,
436
- "--results", writeJSON(t, dir, "s.json", pinned(t, rp, resOf(allPass(b)))),
437
- "--gates", writeJSON(t, dir, "g.json", passing()), "--out", outPath)
438
- if code != 0 || stdout != "MEETS_TARGETS -> "+outPath+"\n" {
439
- t.Fatalf("exit %d stdout %q stderr %q", code, stdout, stderr)
440
- }
441
- card, err := ovio.LoadObject(outPath)
442
- if err != nil {
443
- t.Fatal(err)
444
- }
445
- if get(card, "schema") != "overhaul.scorecard/1" || get(card, "readiness_verdict") != "MEETS_TARGETS" ||
446
- len(get(card, "inputs.rubric_sha256")) != 64 {
447
- t.Fatalf("scorecard %v", card)
448
- }
449
- }
450
-
451
- func TestCLIInvalidInputExits2(t *testing.T) {
452
- dir := t.TempDir()
453
- b := base()
454
- bad := rubricOf(b)
455
- bad["schema"] = "overhaul.rubric/0"
456
- rubric := writeJSON(t, dir, "r.json", rubricOf(b))
457
- stale := resOf(allPass(b))
458
- stale["rubric_digest"] = strings.Repeat("0", 64)
459
- for name, args := range map[string][]string{
460
- "bad rubric": {"--rubric", writeJSON(t, dir, "bad.json", bad), "--results", writeJSON(t, dir, "s.json", resOf(allPass(b))),
461
- "--gates", writeJSON(t, dir, "g.json", passing())},
462
- "stale digest": {"--rubric", rubric, "--results", writeJSON(t, dir, "stale.json", stale),
463
- "--gates", filepath.Join(dir, "g.json")},
464
- } {
465
- code, stdout, stderr := runCLI(args...)
466
- if code != 2 || stdout != "" || !strings.HasPrefix(stderr, "ERROR: ") {
467
- t.Fatalf("%s: exit %d stdout %q stderr %q", name, code, stdout, stderr)
468
- }
469
- }
470
- }
471
-
472
- // A domain weight off the default table needs a recorded deviation with an approval.
473
- func TestDomainWeightDeviation(t *testing.T) {
474
- b := base()
475
- r := rubricOf(b)
476
- r["domains"].(map[string]any)["security"] = 30
477
- if _, err := tryScore(t, r, resOf(allPass(b)), passing()); err == nil || !strings.Contains(err.Error(), "weight_deviations") {
478
- t.Fatalf("undeclared deviation accepted: %v", err)
479
- }
480
- r["weight_deviations"] = []any{map[string]any{"domain": "security", "reason": "payments service"}}
481
- if _, err := tryScore(t, r, resOf(allPass(b)), passing()); err == nil || !strings.Contains(err.Error(), "approval reference") {
482
- t.Fatalf("deviation without approval accepted: %v", err)
483
- }
484
- dup := map[string]any{"domain": "security", "reason": "payments service", "approval": "AP-1"}
485
- r["weight_deviations"] = []any{dup, dup}
486
- if _, err := tryScore(t, r, resOf(allPass(b)), passing()); err == nil || !strings.Contains(err.Error(), "unknown or repeated") {
487
- t.Fatalf("repeated deviation accepted: %v", err)
488
- }
489
- r["weight_deviations"] = []any{dup}
490
- mustScore(t, r, resOf(allPass(b)), passing())
491
- }
492
-
493
- // A performance PASS from static inspection earns nothing.
494
- func TestStaticPerformancePassIsUnknown(t *testing.T) {
495
- b := base()
496
- b[3] = maps.Clone(b[3])
497
- b[3]["evaluation"] = "static"
498
- out := mustScore(t, rubricOf(b), resOf(allPass(b)), passing())
499
- if get(out, "status_by_control."+b[3]["id"].(string)) != "UNKNOWN" || get(out, "readiness_verdict") != "NOT_READY" {
500
- t.Fatalf("static performance PASS counted: %v", out["status_by_control"])
501
- }
502
- }
503
-
504
- // Results without the rubric digest, or compared against another rubric, are invalid.
505
- func TestRubricDigestRequired(t *testing.T) {
506
- dir := t.TempDir()
507
- b := base()
508
- rp := writeJSON(t, dir, "r.json", rubricOf(b))
509
- other := rubricOf(b)
510
- other["rev"] = 2
511
- op := writeJSON(t, dir, "other.json", other)
512
- g := writeJSON(t, dir, "g.json", passing())
513
- for name, args := range map[string][]string{
514
- "score without digest": {"--rubric", rp, "--results", writeJSON(t, dir, "s.json", resOf(allPass(b))), "--gates", g},
515
- "compare other rubric": {"compare", "--rubric", rp,
516
- "--baseline", writeJSON(t, dir, "a.json", pinned(t, rp, resOf(allPass(b)))),
517
- "--candidate", writeJSON(t, dir, "c.json", pinned(t, op, resOf(allPass(b))))},
518
- } {
519
- if code, _, stderr := runCLI(args...); code != 2 || !strings.Contains(stderr, "rubric") {
520
- t.Fatalf("%s: exit %d %q", name, code, stderr)
521
- }
522
- }
523
- }
524
-
525
- // A results document that names no code state is invalid input: exit 2, one
526
- // diagnostic naming the absent field, and no scorecard written.
527
- func TestResultsMustIdentifyScoredState(t *testing.T) {
528
- dir := t.TempDir()
529
- b := base()
530
- rp := writeJSON(t, dir, "r.json", rubricOf(b))
531
- g := writeJSON(t, dir, "g.json", passing())
532
- for i, tc := range []struct {
533
- name string
534
- mutate func(map[string]any)
535
- want string
536
- }{
537
- {"fingerprint absent", func(r map[string]any) { delete(r, "fingerprint") }, "fingerprint"},
538
- {"fingerprint null", func(r map[string]any) { r["fingerprint"] = nil }, "fingerprint"},
539
- {"fingerprint empty", func(r map[string]any) { r["fingerprint"] = "" }, "fingerprint"},
540
- {"fingerprint placeholder", func(r map[string]any) { r["fingerprint"] = "not-a-sha256" }, "fingerprint"},
541
- {"fingerprint one short", func(r map[string]any) { r["fingerprint"] = fp[:len(fp)-1] }, "fingerprint"},
542
- {"fingerprint non-hex", func(r map[string]any) { r["fingerprint"] = strings.Repeat("z", 64) }, "fingerprint"},
543
- {"subject absent", func(r map[string]any) { delete(r, "subject") }, "subject"},
544
- {"subject empty", func(r map[string]any) { r["subject"] = "" }, "subject"},
545
- {"subject not a string", func(r map[string]any) { r["subject"] = 12 }, "subject"},
546
- } {
547
- res := pinned(t, rp, resOf(allPass(b)))
548
- tc.mutate(res)
549
- sp := writeJSON(t, dir, "s.json", res)
550
- card := filepath.Join(dir, fmt.Sprintf("card-%d.json", i))
551
- other := "fingerprint"
552
- if tc.want == "fingerprint" {
553
- other = "subject"
554
- }
555
- code, stdout, stderr := runCLI("--rubric", rp, "--results", sp, "--gates", g, "--out", card)
556
- switch {
557
- case code != 2:
558
- t.Errorf("%s: exit %d, want 2 (stdout %q stderr %q)", tc.name, code, stdout, stderr)
559
- case stdout != "":
560
- t.Errorf("%s: published %q", tc.name, stdout)
561
- case !strings.HasPrefix(stderr, "ERROR: "):
562
- t.Errorf("%s: %q is not a tool diagnostic", tc.name, stderr)
563
- case !strings.Contains(stderr, tc.want):
564
- t.Errorf("%s: %q does not name %s", tc.name, stderr, tc.want)
565
- case strings.Contains(stderr, other):
566
- t.Errorf("%s: %q names %s, not %s", tc.name, stderr, other, tc.want)
567
- case strings.Contains(stderr, "rubric_digest"):
568
- t.Errorf("%s: the digest check fired, not the field check: %q", tc.name, stderr)
569
- }
570
- if _, err := os.Stat(card); err == nil {
571
- t.Errorf("%s: wrote a scorecard for an unidentified code state", tc.name)
572
- }
573
- }
574
- }
575
-
576
- // The exit 2 above is the absent field, not scoring: identified results score,
577
- // and a failing control is a scorecard at exit 0 carrying the validated
578
- // fingerprint verbatim.
579
- func TestIdentifiedResultsStillScore(t *testing.T) {
580
- dir := t.TempDir()
581
- b := base()
582
- rp := writeJSON(t, dir, "r.json", rubricOf(b))
583
- g := writeJSON(t, dir, "g.json", passing())
584
- card := filepath.Join(dir, "card.json")
585
- code, stdout, stderr := runCLI("--rubric", rp, "--results", writeJSON(t, dir, "s.json", pinned(t, rp, resOf(allPass(b)))),
586
- "--gates", g, "--out", card)
587
- if code != 0 || stderr != "" {
588
- t.Fatalf("identified results: exit %d stdout %q stderr %q", code, stdout, stderr)
589
- }
590
- c, err := ovio.LoadObject(card)
591
- if err != nil {
592
- t.Fatal(err)
593
- }
594
- if get(c, "fingerprint") != fp || get(c, "subject") != "candidate" || get(c, "readiness_verdict") != "MEETS_TARGETS" {
595
- t.Fatalf("scorecard %v", c)
596
- }
597
- st := allPass(b)
598
- st[b[0]["id"].(string)] = "FAIL"
599
- code, _, stderr = runCLI("--rubric", rp, "--results", writeJSON(t, dir, "f.json", pinned(t, rp, resOf(st))), "--gates", g)
600
- if code != 0 || stderr != "" {
601
- t.Fatalf("failing control: exit %d stderr %q", code, stderr)
602
- }
603
- out := mustScore(t, rubricOf(b), resOf(st), passing())
604
- if get(out, "readiness_verdict") != "NOT_READY" || get(out, "fingerprint") != fp {
605
- t.Fatalf("failing control: verdict %s fingerprint %s", get(out, "readiness_verdict"), get(out, "fingerprint"))
606
- }
607
- }
608
-
609
- // compare scores both arms through the same check, so an arm that identifies no
610
- // code state is rejected with the arm named.
611
- func TestCompareArmsRequireScoredState(t *testing.T) {
612
- dir := t.TempDir()
613
- b := base()
614
- rp := writeJSON(t, dir, "r.json", rubricOf(b))
615
- arm := func(name string, identified bool) string {
616
- res := pinned(t, rp, resOf(allPass(b)))
617
- if !identified {
618
- delete(res, "fingerprint")
619
- }
620
- return writeJSON(t, dir, name, res)
621
- }
622
- for _, tc := range []struct {
623
- arm string
624
- baseline string
625
- candidate string
626
- }{
627
- {"baseline", arm("blank-baseline.json", false), arm("ok-candidate.json", true)},
628
- {"candidate", arm("ok-baseline.json", true), arm("blank-candidate.json", false)},
629
- } {
630
- code, stdout, stderr := runCLI("compare", "--rubric", rp, "--baseline", tc.baseline, "--candidate", tc.candidate)
631
- if code != 2 || stdout != "" || !strings.HasPrefix(stderr, "ERROR: "+tc.arm+": ") ||
632
- !strings.Contains(stderr, "fingerprint") {
633
- t.Fatalf("%s arm: exit %d stdout %q stderr %q", tc.arm, code, stdout, stderr)
634
- }
635
- }
636
- }