@getarbiter/cli 0.5.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 (989) hide show
  1. package/CHANGELOG.md +713 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +31 -0
  4. package/PRIVACY.md +111 -0
  5. package/README.md +237 -0
  6. package/THIRD_PARTY_LICENSES.md +472 -0
  7. package/dist/.src-manifest.json +1 -0
  8. package/dist/capabilities/host-probe.js +3 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.js +87 -0
  11. package/dist/commands/adopt-policy.js +3 -0
  12. package/dist/commands/configure-interactive.js +3 -0
  13. package/dist/commands/configure.js +5 -0
  14. package/dist/commands/cross-model-review.js +3 -0
  15. package/dist/commands/diff.js +20 -0
  16. package/dist/commands/doc-set.js +3 -0
  17. package/dist/commands/doctor/clean.js +2 -0
  18. package/dist/commands/doctor/fail-open-census.js +12 -0
  19. package/dist/commands/doctor/health.js +11 -0
  20. package/dist/commands/doctor/prove-gates.js +13 -0
  21. package/dist/commands/doctor/recover-lock.js +12 -0
  22. package/dist/commands/doctor/repair-state.js +6 -0
  23. package/dist/commands/doctor/tool-pin-extract.js +4 -0
  24. package/dist/commands/doctor/tool-pins.js +9 -0
  25. package/dist/commands/doctor-interactive.js +2 -0
  26. package/dist/commands/doctor.js +2 -0
  27. package/dist/commands/explain.js +19 -0
  28. package/dist/commands/gate-exec.js +4 -0
  29. package/dist/commands/gold-audit.js +14 -0
  30. package/dist/commands/graph.js +5 -0
  31. package/dist/commands/init/build-arbiter-config.js +1 -0
  32. package/dist/commands/init/generate.js +42 -0
  33. package/dist/commands/init/github-setup.js +5 -0
  34. package/dist/commands/init/maturity-gates.js +10 -0
  35. package/dist/commands/init/resolve-config.js +3 -0
  36. package/dist/commands/init/toolchain.js +10 -0
  37. package/dist/commands/init/types.js +1 -0
  38. package/dist/commands/init.js +17 -0
  39. package/dist/commands/method-interactive.js +4 -0
  40. package/dist/commands/method.js +11 -0
  41. package/dist/commands/obsidian.js +2 -0
  42. package/dist/commands/plugin.js +8 -0
  43. package/dist/commands/pr-merged.js +2 -0
  44. package/dist/commands/retire-policy.js +3 -0
  45. package/dist/commands/review-diff.js +3 -0
  46. package/dist/commands/settings.js +7 -0
  47. package/dist/commands/ship-config.js +2 -0
  48. package/dist/commands/ship-profile.js +2 -0
  49. package/dist/commands/ship-review.js +1 -0
  50. package/dist/commands/ship-tier.js +2 -0
  51. package/dist/commands/ship-train.js +2 -0
  52. package/dist/commands/task-mark.js +2 -0
  53. package/dist/commands/task-note.js +3 -0
  54. package/dist/commands/task-record-red.js +2 -0
  55. package/dist/commands/task-record-tech-debt.js +4 -0
  56. package/dist/commands/task-ship.js +3 -0
  57. package/dist/commands/task-state.js +6 -0
  58. package/dist/commands/task.js +59 -0
  59. package/dist/commands/update.js +60 -0
  60. package/dist/commands/upgrade-level-interactive.js +2 -0
  61. package/dist/commands/upgrade-level.js +7 -0
  62. package/dist/commands/verify-plan.js +8 -0
  63. package/dist/commands/verify-tdd.js +2 -0
  64. package/dist/commands/verify.js +7 -0
  65. package/dist/commands/wizard/coherence.js +1 -0
  66. package/dist/commands/worktree-prune.js +4 -0
  67. package/dist/commands/worktree.js +39 -0
  68. package/dist/compatibility/cross-language-matrix.json +540 -0
  69. package/dist/compatibility/index.d.ts +4 -0
  70. package/dist/compatibility/index.js +2 -0
  71. package/dist/compatibility/matcher.js +1 -0
  72. package/dist/compatibility/matrix.json +27 -0
  73. package/dist/compatibility/parsers.d.ts +38 -0
  74. package/dist/compatibility/parsers.js +1 -0
  75. package/dist/compatibility/probe.d.ts +41 -0
  76. package/dist/compatibility/probe.js +4 -0
  77. package/dist/compatibility/report.js +2 -0
  78. package/dist/compatibility/schema.d.ts +80 -0
  79. package/dist/compatibility/schema.js +1 -0
  80. package/dist/compatibility/skills-matrix.json +98 -0
  81. package/dist/compatibility/skills-validator.d.ts +30 -0
  82. package/dist/compatibility/skills-validator.js +4 -0
  83. package/dist/compatibility/tooling-proposals.json +5 -0
  84. package/dist/config/arbiter-ignore.js +3 -0
  85. package/dist/config/collaboration-mode-defaults.js +1 -0
  86. package/dist/config/diff.js +1 -0
  87. package/dist/config/env-overrides.js +3 -0
  88. package/dist/config/env-registry.js +2 -0
  89. package/dist/config/levels.js +1 -0
  90. package/dist/config/migrations/index.js +2 -0
  91. package/dist/config/migrations/v0-to-v1.js +2 -0
  92. package/dist/config/migrations/v1-to-v2.js +2 -0
  93. package/dist/config/migrations/v2-to-v3.js +2 -0
  94. package/dist/config/migrations/v3-to-v4.js +2 -0
  95. package/dist/config/override-resolver.js +2 -0
  96. package/dist/config/resolve-project-config.js +2 -0
  97. package/dist/config/resolve-project-name.js +2 -0
  98. package/dist/config/schema.d.ts +480 -0
  99. package/dist/config/schema.js +1 -0
  100. package/dist/config/test-pyramid-profiles.js +1 -0
  101. package/dist/config/thresholds.js +2 -0
  102. package/dist/conformance/dimensions.js +3 -0
  103. package/dist/conformance/engine.js +7 -0
  104. package/dist/conformance/gate-proofs.js +4 -0
  105. package/dist/conformance/shared.js +2 -0
  106. package/dist/detectors/axis.js +1 -0
  107. package/dist/detectors/build.js +2 -0
  108. package/dist/detectors/existing.js +2 -0
  109. package/dist/detectors/external-model.js +2 -0
  110. package/dist/detectors/framework.js +2 -0
  111. package/dist/detectors/git.js +11 -0
  112. package/dist/detectors/github.js +2 -0
  113. package/dist/detectors/lanes.js +5 -0
  114. package/dist/detectors/language-hooks.js +117 -0
  115. package/dist/detectors/language.js +2 -0
  116. package/dist/detectors/package-manager.js +2 -0
  117. package/dist/detectors/package.js +2 -0
  118. package/dist/detectors/scaffold-wiring.js +2 -0
  119. package/dist/detectors/workflow-collision.js +4 -0
  120. package/dist/evidence/gate-binding.js +4 -0
  121. package/dist/evidence/git-checks.js +3 -0
  122. package/dist/evidence/load.js +2 -0
  123. package/dist/evidence/provenance.js +2 -0
  124. package/dist/evidence/summary.js +2 -0
  125. package/dist/evidence/tdd-reexecute.js +2 -0
  126. package/dist/evidence/tdd.js +4 -0
  127. package/dist/experimental/index.js +2 -0
  128. package/dist/experimental/parse-argv.js +2 -0
  129. package/dist/experimental/registry.js +2 -0
  130. package/dist/generators/agents-claude.js +2 -0
  131. package/dist/generators/agents-md.js +2 -0
  132. package/dist/generators/anti-drift-validators.js +3 -0
  133. package/dist/generators/anti-proforma.js +2 -0
  134. package/dist/generators/api-e2e.js +2 -0
  135. package/dist/generators/api-middleware.js +2 -0
  136. package/dist/generators/archunit.js +2 -0
  137. package/dist/generators/audit-toolchain.js +2 -0
  138. package/dist/generators/auth.js +2 -0
  139. package/dist/generators/behavioral-tests.js +2 -0
  140. package/dist/generators/boundaries.js +2 -0
  141. package/dist/generators/check-all.js +2 -0
  142. package/dist/generators/check-stack-conformity.js +2 -0
  143. package/dist/generators/ci-five-lane.js +2 -0
  144. package/dist/generators/ci-tier.js +2 -0
  145. package/dist/generators/claude.js +3 -0
  146. package/dist/generators/codex-hooks.js +2 -0
  147. package/dist/generators/codex-known-limitations.js +2 -0
  148. package/dist/generators/codex.js +15 -0
  149. package/dist/generators/commit-footer.js +2 -0
  150. package/dist/generators/compliance-menu.js +2 -0
  151. package/dist/generators/compliance.js +2 -0
  152. package/dist/generators/conformance.js +2 -0
  153. package/dist/generators/contract-testing.js +2 -0
  154. package/dist/generators/coverage.js +2 -0
  155. package/dist/generators/debt-gates.js +24 -0
  156. package/dist/generators/debt-ratchet.js +2 -0
  157. package/dist/generators/derived-class.js +2 -0
  158. package/dist/generators/doc-set.js +4 -0
  159. package/dist/generators/docs.js +2 -0
  160. package/dist/generators/duplication.js +2 -0
  161. package/dist/generators/e2e-constitution.js +2 -0
  162. package/dist/generators/env-template.js +2 -0
  163. package/dist/generators/evidence-retention.js +2 -0
  164. package/dist/generators/feature-matrix.js +2 -0
  165. package/dist/generators/frontend-governance.js +2 -0
  166. package/dist/generators/frontend-quality.js +2 -0
  167. package/dist/generators/gap.js +2 -0
  168. package/dist/generators/gdpr.js +2 -0
  169. package/dist/generators/githooks.js +2 -0
  170. package/dist/generators/github-setup.js +2 -0
  171. package/dist/generators/github.js +2 -0
  172. package/dist/generators/gitignore.js +2 -0
  173. package/dist/generators/global-invariants.js +3 -0
  174. package/dist/generators/go-boundaries.js +2 -0
  175. package/dist/generators/gold-kit.js +2 -0
  176. package/dist/generators/infra.js +2 -0
  177. package/dist/generators/integration-testing.js +7 -0
  178. package/dist/generators/iso27001.js +2 -0
  179. package/dist/generators/iso9001.js +2 -0
  180. package/dist/generators/labels.js +2 -0
  181. package/dist/generators/local-wrapper.js +2 -0
  182. package/dist/generators/modulith.js +2 -0
  183. package/dist/generators/mutation.js +2 -0
  184. package/dist/generators/observability.js +2 -0
  185. package/dist/generators/operations.js +2 -0
  186. package/dist/generators/perf-k6.js +2 -0
  187. package/dist/generators/pharma.js +2 -0
  188. package/dist/generators/playwright-python.js +2 -0
  189. package/dist/generators/playwright-ts.js +2 -0
  190. package/dist/generators/pr-tooling.js +2 -0
  191. package/dist/generators/python-boundaries.js +2 -0
  192. package/dist/generators/quality.js +2 -0
  193. package/dist/generators/registry.js +2 -0
  194. package/dist/generators/regulated.js +2 -0
  195. package/dist/generators/resilience.js +2 -0
  196. package/dist/generators/risk-register.js +2 -0
  197. package/dist/generators/root.js +2 -0
  198. package/dist/generators/rust-boundaries.js +2 -0
  199. package/dist/generators/safety-class.js +2 -0
  200. package/dist/generators/security.js +2 -0
  201. package/dist/generators/seed.js +2 -0
  202. package/dist/generators/self-validation.js +2 -0
  203. package/dist/generators/ship-driver.js +2 -0
  204. package/dist/generators/skill-names.json +17 -0
  205. package/dist/generators/skills.js +2 -0
  206. package/dist/generators/smoke-journeys.js +2 -0
  207. package/dist/generators/solo-exception.js +2 -0
  208. package/dist/generators/ssot.js +2 -0
  209. package/dist/generators/stride-enforcement.js +2 -0
  210. package/dist/generators/suppressions.js +2 -0
  211. package/dist/generators/test-pyramid-manifest.js +3 -0
  212. package/dist/generators/test-taxonomy.js +2 -0
  213. package/dist/generators/wiki.js +2 -0
  214. package/dist/github/branch-protection.js +2 -0
  215. package/dist/github/classify-gh-error.js +2 -0
  216. package/dist/github/labels.js +2 -0
  217. package/dist/github/project-board.js +2 -0
  218. package/dist/graph/builders/adr.js +4 -0
  219. package/dist/graph/builders/ast.js +3 -0
  220. package/dist/graph/builders/canon.js +2 -0
  221. package/dist/graph/builders/evidence.js +2 -0
  222. package/dist/graph/builders/inv.js +1 -0
  223. package/dist/graph/builders/req.js +3 -0
  224. package/dist/graph/builders/test-nodes.js +3 -0
  225. package/dist/graph/builders/utils.js +2 -0
  226. package/dist/graph/load.js +2 -0
  227. package/dist/graph/model.js +2 -0
  228. package/dist/graph/query.js +3 -0
  229. package/dist/graph/store.js +1 -0
  230. package/dist/i18n/en.json +293 -0
  231. package/dist/i18n/index.js +4 -0
  232. package/dist/i18n/types.js +2 -0
  233. package/dist/integrations/companions.js +2 -0
  234. package/dist/integrations/external-review.js +10 -0
  235. package/dist/integrations/plugin-schema.js +2 -0
  236. package/dist/integrations/skill-detector.js +7 -0
  237. package/dist/integrations/skills-matrix.js +2 -0
  238. package/dist/integrations/types.d.ts +23 -0
  239. package/dist/integrations/types.js +2 -0
  240. package/dist/internal/cli-deprecation-registry.js +2 -0
  241. package/dist/internal/deprecate.js +3 -0
  242. package/dist/internal/experimental-warn.js +3 -0
  243. package/dist/invariants/catalog.d.ts +2 -0
  244. package/dist/invariants/catalog.js +1 -0
  245. package/dist/invariants/filter.d.ts +28 -0
  246. package/dist/invariants/filter.js +1 -0
  247. package/dist/invariants/index.d.ts +4 -0
  248. package/dist/invariants/index.js +2 -0
  249. package/dist/invariants/tiers.js +1 -0
  250. package/dist/invariants/types.d.ts +1 -0
  251. package/dist/invariants/types.js +1 -0
  252. package/dist/kit/applicability.js +3 -0
  253. package/dist/kit/audit-report.js +3 -0
  254. package/dist/kit/brownfield-detect.js +4 -0
  255. package/dist/kit/canonical-mapping.json +1 -0
  256. package/dist/kit/catalog.js +2 -0
  257. package/dist/kit/catalog.json +1 -0
  258. package/dist/kit/derived.json +1 -0
  259. package/dist/kit/emit-issues.js +8 -0
  260. package/dist/kit/measure.js +5 -0
  261. package/dist/kit/redaction.js +3 -0
  262. package/dist/kit/schema.js +2 -0
  263. package/dist/kit/taxonomy.js +2 -0
  264. package/dist/kit/thresholds.d.ts +12 -0
  265. package/dist/kit/thresholds.js +2 -0
  266. package/dist/kit/wave-engine.js +1 -0
  267. package/dist/recipes/loader.js +6 -0
  268. package/dist/recipes/schema.js +2 -0
  269. package/dist/risk/classifier.js +2 -0
  270. package/dist/risk/sha-check.js +2 -0
  271. package/dist/state/backups.js +2 -0
  272. package/dist/state/envelope.js +2 -0
  273. package/dist/state/generated-manifest.js +3 -0
  274. package/dist/state/manifest-key.js +2 -0
  275. package/dist/state/migrations/index.js +1 -0
  276. package/dist/state/migrations/v0-to-v1.js +2 -0
  277. package/dist/state/retired-renders.js +2 -0
  278. package/dist/templates/.nvmrc.ejs +1 -0
  279. package/dist/templates/HANDOFF.template.md +45 -0
  280. package/dist/templates/__tests__/contract/error-shape.contract.test.ts.ejs +47 -0
  281. package/dist/templates/agents-md/AGENTS.md.ejs +517 -0
  282. package/dist/templates/api-e2e/README.md.ejs +33 -0
  283. package/dist/templates/api-e2e/go-httptest.go.ejs +43 -0
  284. package/dist/templates/api-e2e/java-restassured.java.ejs +28 -0
  285. package/dist/templates/api-e2e/kotlin-restassured.kt.ejs +30 -0
  286. package/dist/templates/api-e2e/manifest.json.ejs +8 -0
  287. package/dist/templates/api-e2e/postman.collection.json.ejs +30 -0
  288. package/dist/templates/api-e2e/python-httpx.py.ejs +17 -0
  289. package/dist/templates/api-e2e/run.sh.ejs +61 -0
  290. package/dist/templates/api-e2e/ts-supertest.test.ts.ejs +18 -0
  291. package/dist/templates/archunit/AntiCyclicTest.java.ejs +29 -0
  292. package/dist/templates/archunit/AntiProformaExempt.java.ejs +35 -0
  293. package/dist/templates/archunit/AntiProformaTest.java.ejs +104 -0
  294. package/dist/templates/archunit/ArchitectureTest.java.ejs +87 -0
  295. package/dist/templates/archunit/DependencyFlowTest.java.ejs +55 -0
  296. package/dist/templates/archunit/DomainPurityTest.java.ejs +47 -0
  297. package/dist/templates/archunit/NamingConventionsTest.java.ejs +54 -0
  298. package/dist/templates/archunit/NoH2ArchTest.java.ejs +30 -0
  299. package/dist/templates/archunit/NoMockMvcTest.java.ejs +71 -0
  300. package/dist/templates/archunit/PortsIndependenceTest.java.ejs +55 -0
  301. package/dist/templates/archunit/RestAssuredArchTest.java.ejs +32 -0
  302. package/dist/templates/archunit/RestAssuredBaseIT.java.ejs +66 -0
  303. package/dist/templates/archunit/TestCoverageArchTest.java.ejs +29 -0
  304. package/dist/templates/archunit/arch-test-deps-maven.md.ejs +42 -0
  305. package/dist/templates/archunit/arch-test-deps.gradle.ejs +14 -0
  306. package/dist/templates/audit/gdpr/check-gdpr-controls.mjs.ejs +102 -0
  307. package/dist/templates/audit/gdpr/controls-to-gates.md.ejs +42 -0
  308. package/dist/templates/audit/gdpr/data-flow-map.md.ejs +30 -0
  309. package/dist/templates/audit/gdpr/dpia.md.ejs +45 -0
  310. package/dist/templates/audit/generic/audit-gate-rules.md.ejs +24 -0
  311. package/dist/templates/audit/generic/audit-trail-policy.md.ejs +38 -0
  312. package/dist/templates/audit/iso27001/iso27001-controls-gate-map.md.ejs +60 -0
  313. package/dist/templates/auth/setup.md.ejs +661 -0
  314. package/dist/templates/behavioral-tests/ExampleBehavioralTest.java.ejs +67 -0
  315. package/dist/templates/behavioral-tests/TESTING_POLICY.md.ejs +116 -0
  316. package/dist/templates/behavioral-tests/bdd/ExampleBddIT.java.ejs +19 -0
  317. package/dist/templates/behavioral-tests/bdd/ExampleSteps.java.ejs +61 -0
  318. package/dist/templates/behavioral-tests/bdd/example.feature.ejs +14 -0
  319. package/dist/templates/behavioral-tests/bdd/example.steps.ts.ejs +37 -0
  320. package/dist/templates/behavioral-tests/bdd/example_bdd_test.rs.ejs +64 -0
  321. package/dist/templates/behavioral-tests/bdd/example_test.go.ejs +80 -0
  322. package/dist/templates/behavioral-tests/bdd/test_example_bdd.py.ejs +47 -0
  323. package/dist/templates/behavioral-tests/eslint-playwright.json.ejs +10 -0
  324. package/dist/templates/behavioral-tests/eslint.config.playwright.mjs.ejs +29 -0
  325. package/dist/templates/behavioral-tests/example.behavioral.test.ts.ejs +47 -0
  326. package/dist/templates/behavioral-tests/example_behavioral_test.go.ejs +51 -0
  327. package/dist/templates/behavioral-tests/example_behavioral_test.rs.ejs +47 -0
  328. package/dist/templates/behavioral-tests/test_example_behavioral.py.ejs +40 -0
  329. package/dist/templates/boundaries/.eslintrc-boundaries.cjs.ejs +81 -0
  330. package/dist/templates/boundaries/.eslintrc-frontend-spa.cjs.ejs +79 -0
  331. package/dist/templates/boundaries/.importlinter.ejs +48 -0
  332. package/dist/templates/boundaries/check-boundaries-go.mjs.ejs +94 -0
  333. package/dist/templates/boundaries/check-boundaries-python.mjs.ejs +118 -0
  334. package/dist/templates/boundaries/check-boundaries-rust.mjs.ejs +111 -0
  335. package/dist/templates/boundaries/check-boundaries.mjs.ejs +34 -0
  336. package/dist/templates/boundaries/clippy.toml.ejs +50 -0
  337. package/dist/templates/boundaries/deny.toml.ejs +56 -0
  338. package/dist/templates/boundaries/eslint.config.boundaries.mjs.ejs +112 -0
  339. package/dist/templates/boundaries/eslint.config.frontend-spa.mjs.ejs +93 -0
  340. package/dist/templates/boundaries/golangci-boundaries.yml.ejs +70 -0
  341. package/dist/templates/boundaries/ruff-boundaries.toml.ejs +32 -0
  342. package/dist/templates/claude/CLAUDE.md.ejs +78 -0
  343. package/dist/templates/claude/agents/agent-write-classes.json +30 -0
  344. package/dist/templates/claude/agents/bridge-reviewer.md.ejs +68 -0
  345. package/dist/templates/claude/agents/codebase-scanner.md.ejs +69 -0
  346. package/dist/templates/claude/agents/context-checker.md.ejs +73 -0
  347. package/dist/templates/claude/agents/red-team.md.ejs +134 -0
  348. package/dist/templates/claude/commands/close-gold-gap.md.ejs +43 -0
  349. package/dist/templates/claude/commands/drain.md.ejs +81 -0
  350. package/dist/templates/claude/commands/gold-audit.md.ejs +43 -0
  351. package/dist/templates/claude/commands/impact.md.ejs +39 -0
  352. package/dist/templates/claude/commands/levelup.md.ejs +61 -0
  353. package/dist/templates/claude/commands/ship.md.ejs +902 -0
  354. package/dist/templates/claude/commands/tabletop.md.ejs +46 -0
  355. package/dist/templates/claude/commands/task.md.ejs +87 -0
  356. package/dist/templates/claude/commands/wt-close.md.ejs +58 -0
  357. package/dist/templates/claude/commands/wt-list.md.ejs +48 -0
  358. package/dist/templates/claude/commands/wt-open.md.ejs +61 -0
  359. package/dist/templates/claude/commands/wt-prune.md.ejs +38 -0
  360. package/dist/templates/claude/hooks/check-circular-deps.mjs.ejs +56 -0
  361. package/dist/templates/claude/hooks/check-no-orphan-todo.mjs.ejs +45 -0
  362. package/dist/templates/claude/hooks/check-no-pii.mjs.ejs +121 -0
  363. package/dist/templates/claude/hooks/check-no-placeholders.mjs.ejs +71 -0
  364. package/dist/templates/claude/hooks/check-no-skipped-tests.mjs +80 -0
  365. package/dist/templates/claude/hooks/check-no-unused-exports.mjs +62 -0
  366. package/dist/templates/claude/hooks/closer-mode-guard.mjs.ejs +102 -0
  367. package/dist/templates/claude/hooks/debug-state-on-failure.mjs.ejs +98 -0
  368. package/dist/templates/claude/hooks/enforce-gate-before-pr.mjs +142 -0
  369. package/dist/templates/claude/hooks/enforce-read-only.mjs +28 -0
  370. package/dist/templates/claude/hooks/exitplanmode-banner.mjs.ejs +43 -0
  371. package/dist/templates/claude/hooks/guard-done-evidence.mjs.ejs +85 -0
  372. package/dist/templates/claude/hooks/guard-task-completion.mjs.ejs +56 -0
  373. package/dist/templates/claude/hooks/hooks.mjs.ejs +127 -0
  374. package/dist/templates/claude/hooks/lib.mjs.ejs +523 -0
  375. package/dist/templates/claude/hooks/post-brainstorm-stop.mjs +48 -0
  376. package/dist/templates/claude/hooks/post-commit-check.mjs.ejs +65 -0
  377. package/dist/templates/claude/hooks/post-commit-checklists/go/backend.ejs +4 -0
  378. package/dist/templates/claude/hooks/post-commit-checklists/go/docs.ejs +4 -0
  379. package/dist/templates/claude/hooks/post-commit-checklists/go/frontend.ejs +4 -0
  380. package/dist/templates/claude/hooks/post-commit-checklists/java/backend.ejs +4 -0
  381. package/dist/templates/claude/hooks/post-commit-checklists/java/docs.ejs +4 -0
  382. package/dist/templates/claude/hooks/post-commit-checklists/java/frontend.ejs +4 -0
  383. package/dist/templates/claude/hooks/post-commit-checklists/python/backend.ejs +4 -0
  384. package/dist/templates/claude/hooks/post-commit-checklists/python/docs.ejs +4 -0
  385. package/dist/templates/claude/hooks/post-commit-checklists/python/frontend.ejs +4 -0
  386. package/dist/templates/claude/hooks/post-commit-checklists/rust/backend.ejs +5 -0
  387. package/dist/templates/claude/hooks/post-commit-checklists/rust/docs.ejs +4 -0
  388. package/dist/templates/claude/hooks/post-commit-checklists/rust/frontend.ejs +4 -0
  389. package/dist/templates/claude/hooks/post-commit-checklists/ts/backend.ejs +4 -0
  390. package/dist/templates/claude/hooks/post-commit-checklists/ts/docs.ejs +4 -0
  391. package/dist/templates/claude/hooks/post-commit-checklists/ts/frontend.ejs +5 -0
  392. package/dist/templates/claude/hooks/post-edit-dispatch.mjs.ejs +73 -0
  393. package/dist/templates/claude/hooks/post-subagent-release.mjs +80 -0
  394. package/dist/templates/claude/hooks/pre-compact.mjs.ejs +79 -0
  395. package/dist/templates/claude/hooks/pre-edit-plan-anchor.mjs.ejs +225 -0
  396. package/dist/templates/claude/hooks/pre-edit-ssot-guard.mjs +204 -0
  397. package/dist/templates/claude/hooks/pre-spawn-worktree-guard.mjs +129 -0
  398. package/dist/templates/claude/hooks/skill-forced-eval.mjs.ejs +281 -0
  399. package/dist/templates/claude/hooks/stop-dangerous.mjs +86 -0
  400. package/dist/templates/claude/hooks/stop-evidence-guard.mjs.ejs +245 -0
  401. package/dist/templates/claude/hooks/stop-finding-loss.mjs.ejs +168 -0
  402. package/dist/templates/claude/hooks/wiki-on-commit.mjs.ejs +38 -0
  403. package/dist/templates/claude/knowledge-map.json.ejs +26 -0
  404. package/dist/templates/claude/rules/05-agent-lifecycle.md +7 -0
  405. package/dist/templates/claude/rules/25-todo-folder-policy.md +5 -0
  406. package/dist/templates/claude/rules/40-context-economy.md +32 -0
  407. package/dist/templates/claude/rules/45-mcp-fallback.md +25 -0
  408. package/dist/templates/claude/rules/50-batch-execution.md +75 -0
  409. package/dist/templates/claude/rules/55-brainstorm-terminal-state.md +44 -0
  410. package/dist/templates/claude/rules/60-incidental-capture.md +43 -0
  411. package/dist/templates/claude/rules/75-impact-vault-reading.md +43 -0
  412. package/dist/templates/claude/rules/90-exec-protocol.md.ejs +40 -0
  413. package/dist/templates/claude/rules/95-closer-mode.md +45 -0
  414. package/dist/templates/claude/settings.json.ejs +165 -0
  415. package/dist/templates/claude/skills/architect-review/SKILL.md.ejs +82 -0
  416. package/dist/templates/claude/skills/brainstorming/SKILL.md.ejs +86 -0
  417. package/dist/templates/claude/skills/clean-code/SKILL.md.ejs +39 -0
  418. package/dist/templates/claude/skills/close-gold-gap/SKILL.md.ejs +58 -0
  419. package/dist/templates/claude/skills/codebase-audit/SKILL.md.ejs +88 -0
  420. package/dist/templates/claude/skills/configure/SKILL.md.ejs +72 -0
  421. package/dist/templates/claude/skills/epic-decompose/SKILL.md.ejs +86 -0
  422. package/dist/templates/claude/skills/gold-audit/SKILL.md.ejs +91 -0
  423. package/dist/templates/claude/skills/impact/SKILL.md.ejs +104 -0
  424. package/dist/templates/claude/skills/levelup/SKILL.md.ejs +146 -0
  425. package/dist/templates/claude/skills/tabletop/SKILL.md.ejs +118 -0
  426. package/dist/templates/claude/skills/tdd/SKILL.md.ejs +157 -0
  427. package/dist/templates/claude/skills/understand-code/SKILL.md.ejs +93 -0
  428. package/dist/templates/claude/skills/verification/SKILL.md.ejs +68 -0
  429. package/dist/templates/claude/skills/wave-drain/SKILL.md.ejs +491 -0
  430. package/dist/templates/codex/CODEX.md.ejs +140 -0
  431. package/dist/templates/codex/codex-adapter.mjs +132 -0
  432. package/dist/templates/codex/config.toml.ejs +189 -0
  433. package/dist/templates/compliance/compliance-mapping.md.ejs +124 -0
  434. package/dist/templates/compliance/compliance-menu.md.ejs +89 -0
  435. package/dist/templates/contract-testing/CONTRACTS_POLICY.md.ejs +30 -0
  436. package/dist/templates/contract-testing/api-snapshots/config-keys-baseline.json.ejs +1 -0
  437. package/dist/templates/contract-testing/api-snapshots/config-response-baseline.json.ejs +1 -0
  438. package/dist/templates/contract-testing/api-snapshots/enum-values-baseline.json.ejs +1 -0
  439. package/dist/templates/contract-testing/api-snapshots/error-shape-baseline.json.ejs +6 -0
  440. package/dist/templates/contract-testing/api-snapshots/openapi-baseline.json.ejs +12 -0
  441. package/dist/templates/contract-testing/api-snapshots/openapi-content-types-baseline.json.ejs +3 -0
  442. package/dist/templates/contract-testing/api-snapshots/openapi-paths-baseline.json.ejs +1 -0
  443. package/dist/templates/contract-testing/api-snapshots/openapi-required-fields-baseline.json.ejs +1 -0
  444. package/dist/templates/contract-testing/api-snapshots/openapi-response-status-baseline.json.ejs +3 -0
  445. package/dist/templates/contract-testing/api-snapshots/test-snapshot.json.ejs +4 -0
  446. package/dist/templates/contract-testing/env/.env.pact.ejs +4 -0
  447. package/dist/templates/contract-testing/graphql/GraphqlSchemaTest.java.ejs +29 -0
  448. package/dist/templates/contract-testing/graphql/graphql-inspector.test.ts.ejs +20 -0
  449. package/dist/templates/contract-testing/graphql/graphql_schema_test.go.ejs +27 -0
  450. package/dist/templates/contract-testing/graphql/graphql_schema_test.rs.ejs +27 -0
  451. package/dist/templates/contract-testing/graphql/test_graphql_schema.py.ejs +21 -0
  452. package/dist/templates/contract-testing/grpc/GrpcContractTest.java.ejs +23 -0
  453. package/dist/templates/contract-testing/grpc/buf-breaking.yml.ejs +6 -0
  454. package/dist/templates/contract-testing/grpc/buf.yaml.ejs +11 -0
  455. package/dist/templates/contract-testing/grpc/grpc-contract.test.ts.ejs +16 -0
  456. package/dist/templates/contract-testing/grpc/grpc_contract_test.go.ejs +22 -0
  457. package/dist/templates/contract-testing/grpc/grpc_contract_test.rs.ejs +22 -0
  458. package/dist/templates/contract-testing/grpc/test_grpc_contract.py.ejs +18 -0
  459. package/dist/templates/contract-testing/message-queue/SchemaRegistryCheckIT.java.ejs +44 -0
  460. package/dist/templates/contract-testing/message-queue/schema-registry-check.ts.ejs +42 -0
  461. package/dist/templates/contract-testing/message-queue/schema_registry_test.go.ejs +71 -0
  462. package/dist/templates/contract-testing/message-queue/schema_registry_test.rs.ejs +61 -0
  463. package/dist/templates/contract-testing/message-queue/test_schema_registry.py.ejs +31 -0
  464. package/dist/templates/contract-testing/pact-samples/assignment-response.json.ejs +7 -0
  465. package/dist/templates/contract-testing/pact-samples/availability-response.json.ejs +13 -0
  466. package/dist/templates/contract-testing/pact-samples/availability-rule-response.json.ejs +8 -0
  467. package/dist/templates/contract-testing/pact-samples/capacity-response.json.ejs +11 -0
  468. package/dist/templates/contract-testing/pact-samples/fully-booked-response.json.ejs +6 -0
  469. package/dist/templates/contract-testing/pact-samples/schedule-override-response.json.ejs +7 -0
  470. package/dist/templates/contract-testing/rest-owned/PactVerificationIT.java.ejs +31 -0
  471. package/dist/templates/contract-testing/rest-owned/pact-consumer.test.ts.ejs +36 -0
  472. package/dist/templates/contract-testing/rest-owned/pact-deps.gradle.ejs +15 -0
  473. package/dist/templates/contract-testing/rest-owned/pact_consumer_test.go.ejs +48 -0
  474. package/dist/templates/contract-testing/rest-owned/pact_consumer_test.rs.ejs +23 -0
  475. package/dist/templates/contract-testing/rest-owned/test_pact_consumer.py.ejs +35 -0
  476. package/dist/templates/contract-testing/rest-public/OpenApiDiffIT.java.ejs +44 -0
  477. package/dist/templates/contract-testing/rest-public/export-openapi-java.gradle.ejs +13 -0
  478. package/dist/templates/contract-testing/rest-public/export-openapi.mjs.ejs +21 -0
  479. package/dist/templates/contract-testing/rest-public/export_openapi.go.ejs +30 -0
  480. package/dist/templates/contract-testing/rest-public/export_openapi.py.ejs +27 -0
  481. package/dist/templates/contract-testing/rest-public/export_openapi.rs.ejs +32 -0
  482. package/dist/templates/contract-testing/rest-public/openapi-diff.ts.ejs +42 -0
  483. package/dist/templates/contract-testing/rest-public/openapi_diff_test.go.ejs +35 -0
  484. package/dist/templates/contract-testing/rest-public/openapi_diff_test.rs.ejs +36 -0
  485. package/dist/templates/contract-testing/rest-public/test_openapi_diff.py.ejs +32 -0
  486. package/dist/templates/coverage/.coveragerc.ejs +26 -0
  487. package/dist/templates/coverage/.tarpaulin.toml.ejs +30 -0
  488. package/dist/templates/coverage/Cargo.toml.profile.release.ejs +24 -0
  489. package/dist/templates/coverage/jacoco-maven-setup.md.ejs +72 -0
  490. package/dist/templates/coverage/jacoco.gradle.ejs +49 -0
  491. package/dist/templates/coverage/kover.gradle.ejs +35 -0
  492. package/dist/templates/coverage/vitest.browser.config.ts.ejs +47 -0
  493. package/dist/templates/coverage/vitest.config.ts.ejs +47 -0
  494. package/dist/templates/docs/CODING_STANDARDS.md.ejs +81 -0
  495. package/dist/templates/docs/FEATURE_MATRIX.md.ejs +84 -0
  496. package/dist/templates/docs/GAP.md.ejs +58 -0
  497. package/dist/templates/docs/ISO27001_ANNEX_A.md.ejs +144 -0
  498. package/dist/templates/docs/MASTER_TEST_PLAN.md.ejs +52 -0
  499. package/dist/templates/docs/POST_MERGE_REVIEW_TEMPLATE.md.ejs +63 -0
  500. package/dist/templates/docs/SECURE_CODING_CHECKLIST.md.ejs +61 -0
  501. package/dist/templates/docs/adr/ADR-000_template.md.ejs +28 -0
  502. package/dist/templates/docs/bugs/bug-analysis.md.ejs +47 -0
  503. package/dist/templates/docs/bugs/bug-report.md.ejs +51 -0
  504. package/dist/templates/docs/bugs/bug-verification.md.ejs +42 -0
  505. package/dist/templates/docs/runbooks/deployment.md.ejs +119 -0
  506. package/dist/templates/docs/runbooks/prod-checklist.md.ejs +90 -0
  507. package/dist/templates/docs/runbooks/rollback.md.ejs +124 -0
  508. package/dist/templates/docs/runbooks/troubleshooting.md.ejs +130 -0
  509. package/dist/templates/docs/skeletons/arc42-canvas.md.ejs +46 -0
  510. package/dist/templates/docs/skeletons/arc42-full.md.ejs +59 -0
  511. package/dist/templates/docs/skeletons/decision-registry.md.ejs +38 -0
  512. package/dist/templates/docs/skeletons/er-model.md.ejs +19 -0
  513. package/dist/templates/docs/skeletons/glossary.md.ejs +8 -0
  514. package/dist/templates/docs/skeletons/governance.md.ejs +13 -0
  515. package/dist/templates/docs/skeletons/slo.md.ejs +21 -0
  516. package/dist/templates/docs/skeletons/technical-debt.md.ejs +8 -0
  517. package/dist/templates/docs/skeletons/test-strategy.md.ejs +14 -0
  518. package/dist/templates/docs/skeletons/threat-model-4q.md.ejs +20 -0
  519. package/dist/templates/docs/skeletons/threat-model-stride.md.ejs +22 -0
  520. package/dist/templates/docs/specs/atomic-task-list.md.ejs +57 -0
  521. package/dist/templates/docs/steering/product.md.ejs +44 -0
  522. package/dist/templates/docs/steering/structure.md.ejs +49 -0
  523. package/dist/templates/docs/steering/tech.md.ejs +53 -0
  524. package/dist/templates/documentation/cli-catalog.md.ejs +21 -0
  525. package/dist/templates/e2e/E2E_CONSTITUTION.md.ejs +77 -0
  526. package/dist/templates/e2e/playwright-python/conftest.py.ejs +22 -0
  527. package/dist/templates/e2e/playwright-python/run_axe.py.ejs +99 -0
  528. package/dist/templates/e2e/playwright-python/test_a11y.py.ejs +38 -0
  529. package/dist/templates/e2e/playwright-python/test_smoke.py.ejs +28 -0
  530. package/dist/templates/e2e/playwright-ts/a11y.spec.ts.ejs +20 -0
  531. package/dist/templates/e2e/playwright-ts/render-smoke.spec.ts.ejs +90 -0
  532. package/dist/templates/e2e/playwright-ts/run-axe.ts.ejs +74 -0
  533. package/dist/templates/e2e/smoke-journeys/journeys.spec.ts.ejs +53 -0
  534. package/dist/templates/evidence-files.json.ejs +13 -0
  535. package/dist/templates/frontend/FE_DESIGN_PRINCIPLES.md.ejs +115 -0
  536. package/dist/templates/frontend/FRONTEND_CONSTITUTION.md.ejs +170 -0
  537. package/dist/templates/frontend/design-tokens.json.ejs +107 -0
  538. package/dist/templates/frontend/vrt-setup.md.ejs +83 -0
  539. package/dist/templates/githooks/commit-msg.ejs +60 -0
  540. package/dist/templates/githooks/pre-commit.ejs +95 -0
  541. package/dist/templates/githooks/pre-push.ejs +251 -0
  542. package/dist/templates/githooks/setup-hooks.sh.ejs +8 -0
  543. package/dist/templates/github/PULL_REQUEST_TEMPLATE.md +37 -0
  544. package/dist/templates/github/PULL_REQUEST_TEMPLATE.md.ejs +52 -0
  545. package/dist/templates/github/actions/build-cache/action.yml.ejs +84 -0
  546. package/dist/templates/github/actions/nas-ssh/action.yml.ejs +53 -0
  547. package/dist/templates/github/actions/setup-java-maven/action.yml.ejs +53 -0
  548. package/dist/templates/github/actions/setup-node-pnpm/action.yml.ejs +39 -0
  549. package/dist/templates/github/actions/sign-and-attest/action.yml.ejs +53 -0
  550. package/dist/templates/github/dependabot.yml.ejs +66 -0
  551. package/dist/templates/github/extended-ci-paths.txt.ejs +38 -0
  552. package/dist/templates/github/issue-templates/bug-report.yml +72 -0
  553. package/dist/templates/github/issue-templates/compliance-item.yml.ejs +75 -0
  554. package/dist/templates/github/issue-templates/config.yml +2 -0
  555. package/dist/templates/github/issue-templates/epic.yml +66 -0
  556. package/dist/templates/github/issue-templates/feature-request.yml +24 -0
  557. package/dist/templates/github/issue-templates/task-brief.yml.ejs +125 -0
  558. package/dist/templates/github/labels.yml.ejs +161 -0
  559. package/dist/templates/github/scripts/sticky-failure-issue.sh.ejs +61 -0
  560. package/dist/templates/github/workflows/01-pr-fast.yml.ejs +1089 -0
  561. package/dist/templates/github/workflows/02-pr-extended.yml.ejs +512 -0
  562. package/dist/templates/github/workflows/03-human-approval.yml.ejs +76 -0
  563. package/dist/templates/github/workflows/04-deploy-test.yml.ejs +425 -0
  564. package/dist/templates/github/workflows/05-release.yml.ejs +813 -0
  565. package/dist/templates/github/workflows/06-nightly-lite.yml.ejs +125 -0
  566. package/dist/templates/github/workflows/06-nightly.yml.ejs +25 -0
  567. package/dist/templates/github/workflows/07-weekly-lite.yml.ejs +221 -0
  568. package/dist/templates/github/workflows/07-weekly.yml.ejs +23 -0
  569. package/dist/templates/github/workflows/08-monthly.yml.ejs +23 -0
  570. package/dist/templates/github/workflows/09-heartbeat.yml.ejs +268 -0
  571. package/dist/templates/github/workflows/10-deploy-prod.yml.ejs +144 -0
  572. package/dist/templates/github/workflows/11-k6-on-demand.yml.ejs +43 -0
  573. package/dist/templates/github/workflows/12-mutation-scheduled.yml.ejs +100 -0
  574. package/dist/templates/github/workflows/13-archunit-extended.yml.ejs +33 -0
  575. package/dist/templates/github/workflows/14-license-scan.yml.ejs +45 -0
  576. package/dist/templates/github/workflows/15-codeql.yml.ejs +117 -0
  577. package/dist/templates/github/workflows/16-frontend-quality.yml.ejs +154 -0
  578. package/dist/templates/github/workflows/17-ossf-scorecard.yml.ejs +46 -0
  579. package/dist/templates/github/workflows/18-frontend-lane.yml.ejs +50 -0
  580. package/dist/templates/github/workflows/_ai-draft-check.yml.ejs +44 -0
  581. package/dist/templates/github/workflows/_contract-postman.yml.ejs +93 -0
  582. package/dist/templates/github/workflows/_cosign-copy/aws-ecs.ejs +90 -0
  583. package/dist/templates/github/workflows/_cosign-copy/azure-container-app.ejs +97 -0
  584. package/dist/templates/github/workflows/_cosign-copy/gcp-cloud-run.ejs +102 -0
  585. package/dist/templates/github/workflows/_cosign-copy/ghcr.ejs +76 -0
  586. package/dist/templates/github/workflows/_cosign-copy/nas-compose.ejs +69 -0
  587. package/dist/templates/github/workflows/_deploy/aws-ecs.ejs +78 -0
  588. package/dist/templates/github/workflows/_deploy/azure-container-app.ejs +59 -0
  589. package/dist/templates/github/workflows/_deploy/gcp-cloud-run.ejs +71 -0
  590. package/dist/templates/github/workflows/_deploy/ghcr.ejs +19 -0
  591. package/dist/templates/github/workflows/_deploy/nas-compose.ejs +45 -0
  592. package/dist/templates/github/workflows/_k6-runner.yml.ejs +107 -0
  593. package/dist/templates/github/workflows/_label-on-approve.yml.ejs +44 -0
  594. package/dist/templates/github/workflows/_label-sync.yml.ejs +58 -0
  595. package/dist/templates/github/workflows/_monthly.yml.ejs +343 -0
  596. package/dist/templates/github/workflows/_nightly.yml.ejs +826 -0
  597. package/dist/templates/github/workflows/_notify.yml.ejs +96 -0
  598. package/dist/templates/github/workflows/_partials/macos-keychain-bypass.ejs +6 -0
  599. package/dist/templates/github/workflows/_partials/macos-keychain-restore.ejs +6 -0
  600. package/dist/templates/github/workflows/_partials/scheduled-heavy-jobs.ejs +117 -0
  601. package/dist/templates/github/workflows/_partials/sigstore-preflight.ejs +8 -0
  602. package/dist/templates/github/workflows/_partials/trivy-fs-java.ejs +27 -0
  603. package/dist/templates/github/workflows/_post-merge-notify.yml.ejs +228 -0
  604. package/dist/templates/github/workflows/_pr-staleness.yml.ejs +85 -0
  605. package/dist/templates/github/workflows/_shared-security.yml.ejs +132 -0
  606. package/dist/templates/github/workflows/_sigstore-retry-sign.yml.ejs +102 -0
  607. package/dist/templates/github/workflows/_weekly.yml.ejs +313 -0
  608. package/dist/templates/github/workflows/drift-shadow.yml.ejs +51 -0
  609. package/dist/templates/github/workflows/five-lane/ci.yml.ejs +54 -0
  610. package/dist/templates/github/workflows/five-lane/nightly.yml.ejs +70 -0
  611. package/dist/templates/github/workflows/five-lane/release.yml.ejs +53 -0
  612. package/dist/templates/github/workflows/five-lane/weekly.yml.ejs +72 -0
  613. package/dist/templates/github/workflows/issue-state.yml.ejs +93 -0
  614. package/dist/templates/global-invariants/GLOBAL_INVARIANTS.md.ejs +34 -0
  615. package/dist/templates/governance/RACI.md.ejs +21 -0
  616. package/dist/templates/governance/ci-mental-model.md.ejs +268 -0
  617. package/dist/templates/governance/contract-integrity-policy.md.ejs +116 -0
  618. package/dist/templates/governance/enterprise-compliance-baseline.md.ejs +111 -0
  619. package/dist/templates/governance/evidence-retention.md.ejs +43 -0
  620. package/dist/templates/governance/gdpr-erasure-runbook.md.ejs +165 -0
  621. package/dist/templates/governance/qa-audit-phases.md.ejs +129 -0
  622. package/dist/templates/governance/risk-assessment-template.md.ejs +105 -0
  623. package/dist/templates/governance/risk-register.md.ejs +76 -0
  624. package/dist/templates/governance/solo-dev-exception.md.ejs +96 -0
  625. package/dist/templates/governance/validation-evidence.md.ejs +131 -0
  626. package/dist/templates/infra/azure/containerapp.tpl.yaml.ejs +74 -0
  627. package/dist/templates/infra/nas-compose/deploy.sh.ejs +114 -0
  628. package/dist/templates/integration-testing/AbstractIntegrationTest.java.ejs +36 -0
  629. package/dist/templates/integration-testing/NoH2ArchTest.java.ejs +24 -0
  630. package/dist/templates/integration-testing/conftest.py.ejs +20 -0
  631. package/dist/templates/integration-testing/db_fixture.rs.ejs +48 -0
  632. package/dist/templates/integration-testing/eslint-no-fake-db.json.ejs +19 -0
  633. package/dist/templates/integration-testing/eslint.config.no-fake-db.mjs.ejs +46 -0
  634. package/dist/templates/integration-testing/main_test.go.ejs +53 -0
  635. package/dist/templates/integration-testing/main_test_sqlite.go.ejs +37 -0
  636. package/dist/templates/integration-testing/test-setup.ts.ejs +26 -0
  637. package/dist/templates/integration-testing/testcontainers-deps.gradle.ejs +9 -0
  638. package/dist/templates/java/DeprecationInterceptor.java.ejs +50 -0
  639. package/dist/templates/java/archunit-hexagonal.ejs +69 -0
  640. package/dist/templates/java/modulith/ApplicationModulesTest.java.ejs +21 -0
  641. package/dist/templates/java/modulith/modulith-deps.gradle.ejs +13 -0
  642. package/dist/templates/java/modulith/modulith-maven-setup.md.ejs +21 -0
  643. package/dist/templates/java/pharma/AuditEvent.java.ejs +138 -0
  644. package/dist/templates/java/pharma/AuditMapper.java.ejs +60 -0
  645. package/dist/templates/java/pharma/archunit-pharma.ejs +128 -0
  646. package/dist/templates/kit/GLOBAL_KIT.md.ejs +11 -0
  647. package/dist/templates/kit/dim.md.ejs +33 -0
  648. package/dist/templates/llms-txt.config.json.ejs +22 -0
  649. package/dist/templates/local-wrapper/.env.example.ejs +15 -0
  650. package/dist/templates/local-wrapper/Makefile.ejs +44 -0
  651. package/dist/templates/local-wrapper/run.sh.ejs +5 -0
  652. package/dist/templates/middleware/410-gone-handler.ts.ejs +41 -0
  653. package/dist/templates/middleware/correlation-id.ts.ejs +32 -0
  654. package/dist/templates/middleware/deprecation.ts.ejs +45 -0
  655. package/dist/templates/middleware/error-handler.ts.ejs +73 -0
  656. package/dist/templates/middleware/payload-size-limit.ts.ejs +51 -0
  657. package/dist/templates/mutation/README.md.ejs +67 -0
  658. package/dist/templates/mutation/cargo-mutants.toml.ejs +9 -0
  659. package/dist/templates/mutation/mutmut-config.toml.ejs +7 -0
  660. package/dist/templates/mutation/parse-mutants.mjs.ejs +44 -0
  661. package/dist/templates/mutation/parse-mutmut.py.ejs +44 -0
  662. package/dist/templates/mutation/pitest-l2-setup.md.ejs +66 -0
  663. package/dist/templates/mutation/pitest-maven-setup.md.ejs +64 -0
  664. package/dist/templates/mutation/pitest.gradle.ejs +23 -0
  665. package/dist/templates/mutation/stryker.conf.json.ejs +17 -0
  666. package/dist/templates/observability/setup.md.ejs +495 -0
  667. package/dist/templates/operations/handbook.md.ejs +217 -0
  668. package/dist/templates/perf/bundle-budget.json.ejs +29 -0
  669. package/dist/templates/perf/k6/reports/csv-report.py.ejs +91 -0
  670. package/dist/templates/perf/k6/reports/html-report.py.ejs +114 -0
  671. package/dist/templates/perf/k6/reports/json-report.py.ejs +74 -0
  672. package/dist/templates/perf/k6/scenarios/breakpoint.js.ejs +26 -0
  673. package/dist/templates/perf/k6/scenarios/burst.js.ejs +43 -0
  674. package/dist/templates/perf/k6/scenarios/endurance.js.ejs +36 -0
  675. package/dist/templates/perf/k6/scenarios/load.js.ejs +26 -0
  676. package/dist/templates/perf/k6/scenarios/ramp-down.js.ejs +29 -0
  677. package/dist/templates/perf/k6/scenarios/ramp-up.js.ejs +32 -0
  678. package/dist/templates/perf/k6/scenarios/smoke.js.ejs +23 -0
  679. package/dist/templates/perf/k6/scenarios/soak.js.ejs +26 -0
  680. package/dist/templates/perf/k6/scenarios/spike.js.ejs +29 -0
  681. package/dist/templates/perf/k6/scenarios/steady-state.js.ejs +31 -0
  682. package/dist/templates/perf/k6/scenarios/stress.js.ejs +29 -0
  683. package/dist/templates/perf/k6/scenarios/volume.js.ejs +36 -0
  684. package/dist/templates/perf/k6/seed/test-data.sql.ejs +59 -0
  685. package/dist/templates/perf/lighthouserc.json.ejs +41 -0
  686. package/dist/templates/quality/iso9001/CAPA_LOG.md.ejs +36 -0
  687. package/dist/templates/quality/iso9001/DOCUMENT_CONTROL.md.ejs +36 -0
  688. package/dist/templates/quality/iso9001/REQUIREMENTS_TRACEABILITY.md.ejs +61 -0
  689. package/dist/templates/regulated/overlay.json.ejs +26 -0
  690. package/dist/templates/regulated/regulated-overlay.md.ejs +40 -0
  691. package/dist/templates/resilience/RESILIENCE.md.ejs +310 -0
  692. package/dist/templates/root/.gitignore.ejs +85 -0
  693. package/dist/templates/root/CODEOWNERS.ejs +18 -0
  694. package/dist/templates/root/CONTRIBUTING.md.ejs +62 -0
  695. package/dist/templates/root/SECURITY.md.ejs +19 -0
  696. package/dist/templates/root/TEST_TAXONOMY.md.ejs +100 -0
  697. package/dist/templates/root/commitlint.config.js.ejs +4 -0
  698. package/dist/templates/root/docs/METHOD/CANONICAL_PATHS.md.ejs +24 -0
  699. package/dist/templates/root/docs/METHOD/ENGINEERING_DEFAULTS.md.ejs +136 -0
  700. package/dist/templates/root/docs/METHOD/KNOWLEDGE_MAP.md.ejs +90 -0
  701. package/dist/templates/root/docs/METHOD/PATTERNS_CATALOG.md.ejs +51 -0
  702. package/dist/templates/root/docs/METHOD/REUSE_REGISTRY.md.ejs +26 -0
  703. package/dist/templates/root/docs/METHOD/REUSE_REGISTRY_SPEC.md.ejs +80 -0
  704. package/dist/templates/root/docs/METHOD/SSOT_CORE_SET.md.ejs +62 -0
  705. package/dist/templates/root/docs/METHOD/TRACK_ROUTER.md.ejs +39 -0
  706. package/dist/templates/root/docs/SYSTEM/CANON.md.ejs +359 -0
  707. package/dist/templates/root/docs/SYSTEM/FAIL_CLOSED.md.ejs +171 -0
  708. package/dist/templates/root/editorconfig.ejs +39 -0
  709. package/dist/templates/root/tsconfig.json.ejs +21 -0
  710. package/dist/templates/rust/clippy.toml.ejs +14 -0
  711. package/dist/templates/schemas/milestone.schema.json.ejs +164 -0
  712. package/dist/templates/schemas/rtm-verdict.schema.json.ejs +52 -0
  713. package/dist/templates/schemas/source-record.schema.json.ejs +91 -0
  714. package/dist/templates/schemas/tabletop-evidence.schema.json.ejs +53 -0
  715. package/dist/templates/schemas/use-case.schema.json.ejs +59 -0
  716. package/dist/templates/scripts/apply-branch-protection.mjs.ejs +70 -0
  717. package/dist/templates/scripts/audit-toolchain.mjs.ejs +112 -0
  718. package/dist/templates/scripts/bg-run.sh.ejs +59 -0
  719. package/dist/templates/scripts/capacity-probe.mjs.ejs +147 -0
  720. package/dist/templates/scripts/capture-debt-baseline.mjs.ejs +99 -0
  721. package/dist/templates/scripts/check-acceptance.mjs.ejs +298 -0
  722. package/dist/templates/scripts/check-action-pins.mjs.ejs +215 -0
  723. package/dist/templates/scripts/check-agent-return.mjs.ejs +177 -0
  724. package/dist/templates/scripts/check-all.mjs.ejs +1746 -0
  725. package/dist/templates/scripts/check-anti-fake-green.mjs.ejs +80 -0
  726. package/dist/templates/scripts/check-anti-proforma.mjs.ejs +547 -0
  727. package/dist/templates/scripts/check-api-e2e.mjs.ejs +106 -0
  728. package/dist/templates/scripts/check-arc42-slots.mjs.ejs +25 -0
  729. package/dist/templates/scripts/check-assertion-delta.mjs.ejs +287 -0
  730. package/dist/templates/scripts/check-audit-dry-pass.mjs.ejs +176 -0
  731. package/dist/templates/scripts/check-bundle-size.mjs.ejs +151 -0
  732. package/dist/templates/scripts/check-canonical-paths.mjs.ejs +39 -0
  733. package/dist/templates/scripts/check-ci-tiers.mjs.ejs +111 -0
  734. package/dist/templates/scripts/check-claude-md-lint.mjs.ejs +142 -0
  735. package/dist/templates/scripts/check-collab-mode-wired.mjs.ejs +60 -0
  736. package/dist/templates/scripts/check-commit-footer-rationale.mjs.ejs +170 -0
  737. package/dist/templates/scripts/check-constraint-scan.mjs.ejs +681 -0
  738. package/dist/templates/scripts/check-consumer-audit.mjs.ejs +414 -0
  739. package/dist/templates/scripts/check-continue-on-error.mjs.ejs +227 -0
  740. package/dist/templates/scripts/check-cross-model-review.mjs.ejs +458 -0
  741. package/dist/templates/scripts/check-decision-registry.mjs.ejs +101 -0
  742. package/dist/templates/scripts/check-doc-freshness.mjs.ejs +17 -0
  743. package/dist/templates/scripts/check-doc-links.mjs.ejs +98 -0
  744. package/dist/templates/scripts/check-doc-set.mjs.ejs +18 -0
  745. package/dist/templates/scripts/check-docs.mjs.ejs +71 -0
  746. package/dist/templates/scripts/check-domain-api-surface.mjs.ejs +80 -0
  747. package/dist/templates/scripts/check-drift.mjs.ejs +167 -0
  748. package/dist/templates/scripts/check-duplication.mjs.ejs +45 -0
  749. package/dist/templates/scripts/check-e2e-escalation.mjs.ejs +199 -0
  750. package/dist/templates/scripts/check-e2e-quarantine.mjs.ejs +68 -0
  751. package/dist/templates/scripts/check-emission-parity.mjs.ejs +91 -0
  752. package/dist/templates/scripts/check-exit-code-contract.mjs.ejs +138 -0
  753. package/dist/templates/scripts/check-fail-closed-audit.mjs.ejs +389 -0
  754. package/dist/templates/scripts/check-fe-boundaries.mjs.ejs +184 -0
  755. package/dist/templates/scripts/check-feature-matrix.mjs.ejs +835 -0
  756. package/dist/templates/scripts/check-frontend-lane.mjs.ejs +73 -0
  757. package/dist/templates/scripts/check-grace-window.mjs.ejs +102 -0
  758. package/dist/templates/scripts/check-handoff-doc.mjs.ejs +192 -0
  759. package/dist/templates/scripts/check-hook-routing.mjs.ejs +224 -0
  760. package/dist/templates/scripts/check-image-pins.mjs.ejs +90 -0
  761. package/dist/templates/scripts/check-inline-suppressions.mjs.ejs +153 -0
  762. package/dist/templates/scripts/check-iso9001.mjs.ejs +146 -0
  763. package/dist/templates/scripts/check-knowledge-map.mjs.ejs +49 -0
  764. package/dist/templates/scripts/check-local-ci-parity.mjs.ejs +382 -0
  765. package/dist/templates/scripts/check-m16-handoff.mjs.ejs +112 -0
  766. package/dist/templates/scripts/check-merge-method.mjs.ejs +92 -0
  767. package/dist/templates/scripts/check-milestones.mjs.ejs +678 -0
  768. package/dist/templates/scripts/check-min-test-execution.mjs.ejs +225 -0
  769. package/dist/templates/scripts/check-muted-test.mjs.ejs +270 -0
  770. package/dist/templates/scripts/check-no-stub-redirects.mjs.ejs +154 -0
  771. package/dist/templates/scripts/check-no-tracked-artifacts.mjs.ejs +134 -0
  772. package/dist/templates/scripts/check-oracle-discrimination.mjs.ejs +244 -0
  773. package/dist/templates/scripts/check-pii-scan.mjs.ejs +67 -0
  774. package/dist/templates/scripts/check-pipe-tee-hazard.mjs.ejs +85 -0
  775. package/dist/templates/scripts/check-pr-size-gate.mjs.ejs +85 -0
  776. package/dist/templates/scripts/check-refutation-verdicts.mjs.ejs +256 -0
  777. package/dist/templates/scripts/check-regulated-overlay.mjs.ejs +158 -0
  778. package/dist/templates/scripts/check-render-smoke.mjs.ejs +100 -0
  779. package/dist/templates/scripts/check-reuse-registry.mjs.ejs +44 -0
  780. package/dist/templates/scripts/check-review-completion.mjs.ejs +708 -0
  781. package/dist/templates/scripts/check-safety-adopt-ratchet.mjs.ejs +142 -0
  782. package/dist/templates/scripts/check-secret-presence.mjs.ejs +191 -0
  783. package/dist/templates/scripts/check-secret-scan.mjs.ejs +82 -0
  784. package/dist/templates/scripts/check-skip-critical-e2e.mjs.ejs +142 -0
  785. package/dist/templates/scripts/check-smoke-journeys.mjs.ejs +272 -0
  786. package/dist/templates/scripts/check-solo-reactivation.mjs.ejs +102 -0
  787. package/dist/templates/scripts/check-sources.mjs.ejs +245 -0
  788. package/dist/templates/scripts/check-ssot-core.mjs.ejs +45 -0
  789. package/dist/templates/scripts/check-stack-conformity.mjs.ejs +160 -0
  790. package/dist/templates/scripts/check-stride-traceability.mjs.ejs +101 -0
  791. package/dist/templates/scripts/check-suppression-expiry.mjs.ejs +79 -0
  792. package/dist/templates/scripts/check-suppression-rationale.mjs.ejs +76 -0
  793. package/dist/templates/scripts/check-suppressions.mjs.ejs +150 -0
  794. package/dist/templates/scripts/check-tabletop-evidence.mjs.ejs +499 -0
  795. package/dist/templates/scripts/check-tdd-evidence.mjs.ejs +381 -0
  796. package/dist/templates/scripts/check-test-naming.mjs.ejs +151 -0
  797. package/dist/templates/scripts/check-test-pyramid.mjs.ejs +170 -0
  798. package/dist/templates/scripts/check-test-scope-tier.mjs.ejs +208 -0
  799. package/dist/templates/scripts/check-tier-coverage.mjs.ejs +71 -0
  800. package/dist/templates/scripts/check-todo-max-age.mjs.ejs +205 -0
  801. package/dist/templates/scripts/check-touched-vs-manifest.mjs.ejs +179 -0
  802. package/dist/templates/scripts/check-unwired-guards.mjs.ejs +367 -0
  803. package/dist/templates/scripts/check-use-cases.mjs.ejs +345 -0
  804. package/dist/templates/scripts/check-validator-helptext.mjs.ejs +80 -0
  805. package/dist/templates/scripts/check-wiki-lint.mjs.ejs +162 -0
  806. package/dist/templates/scripts/check-workflow-docs-sync.mjs.ejs +91 -0
  807. package/dist/templates/scripts/check-workflow-job-naming.mjs.ejs +102 -0
  808. package/dist/templates/scripts/check-workflow-perms.mjs.ejs +54 -0
  809. package/dist/templates/scripts/check-workflow-runners.mjs.ejs +87 -0
  810. package/dist/templates/scripts/check-workflow-sha-pinning.mjs.ejs +89 -0
  811. package/dist/templates/scripts/check-workflow-test-integrity.mjs.ejs +235 -0
  812. package/dist/templates/scripts/checks/check-rust-no-unsafe.mjs.ejs +58 -0
  813. package/dist/templates/scripts/checks/check-rust-no-unwrap.mjs.ejs +61 -0
  814. package/dist/templates/scripts/ci-classify-changes.mjs.ejs +119 -0
  815. package/dist/templates/scripts/conformance.mjs.ejs +37 -0
  816. package/dist/templates/scripts/constraint-map.json.ejs +25 -0
  817. package/dist/templates/scripts/debt-lib.mjs.ejs +1015 -0
  818. package/dist/templates/scripts/debt-report.mjs.ejs +199 -0
  819. package/dist/templates/scripts/domain-api-surface.json.ejs +23 -0
  820. package/dist/templates/scripts/done-evidence.mjs.ejs +359 -0
  821. package/dist/templates/scripts/evidence-collect.mjs.ejs +264 -0
  822. package/dist/templates/scripts/evidence-prune.mjs.ejs +96 -0
  823. package/dist/templates/scripts/evidence-rotate.mjs.ejs +53 -0
  824. package/dist/templates/scripts/evidence-writer.sh.ejs +220 -0
  825. package/dist/templates/scripts/gate-registry.yml.ejs +286 -0
  826. package/dist/templates/scripts/gen-doc-index.mjs.ejs +19 -0
  827. package/dist/templates/scripts/gen-gap.mjs.ejs +153 -0
  828. package/dist/templates/scripts/gen-llms-txt.mjs.ejs +18 -0
  829. package/dist/templates/scripts/gen-wiki.mjs.ejs +196 -0
  830. package/dist/templates/scripts/gh-cleanup-expired-artifacts.mjs.ejs +134 -0
  831. package/dist/templates/scripts/gold-audit.mjs.ejs +19 -0
  832. package/dist/templates/scripts/i18n-literal-scanner.mjs.ejs +175 -0
  833. package/dist/templates/scripts/ingest-zap-report.mjs.ejs +107 -0
  834. package/dist/templates/scripts/inject-pact-samples.sh.ejs +96 -0
  835. package/dist/templates/scripts/issue-readiness.mjs.ejs +84 -0
  836. package/dist/templates/scripts/knowledge-map-update.mjs.ejs +32 -0
  837. package/dist/templates/scripts/lib/acceptance-criteria.mjs.ejs +213 -0
  838. package/dist/templates/scripts/lib/agent-return-validate.mjs.ejs +481 -0
  839. package/dist/templates/scripts/lib/coverage-gate.mjs.ejs +54 -0
  840. package/dist/templates/scripts/lib/e2e-reliability.mjs.ejs +207 -0
  841. package/dist/templates/scripts/lib/ephemeral-server.mjs.ejs +148 -0
  842. package/dist/templates/scripts/lib/evidence-binding.mjs.ejs +140 -0
  843. package/dist/templates/scripts/lib/exact-sha-policy.mjs.ejs +233 -0
  844. package/dist/templates/scripts/lib/gate-args.mjs.ejs +20 -0
  845. package/dist/templates/scripts/lib/gate-evidence.mjs.ejs +622 -0
  846. package/dist/templates/scripts/lib/gate-mutex.mjs.ejs +340 -0
  847. package/dist/templates/scripts/lib/glob-walk.mjs.ejs +148 -0
  848. package/dist/templates/scripts/lib/run-helpers.mjs.ejs +416 -0
  849. package/dist/templates/scripts/lib/seed-common.sh.ejs +105 -0
  850. package/dist/templates/scripts/lib/waiter-count.mjs.ejs +62 -0
  851. package/dist/templates/scripts/muted-tests-baseline.json.ejs +4 -0
  852. package/dist/templates/scripts/optional-emissions.json.ejs +117 -0
  853. package/dist/templates/scripts/oracle-discrimination-baseline.json.ejs +6 -0
  854. package/dist/templates/scripts/pid-watch.sh.ejs +78 -0
  855. package/dist/templates/scripts/pii-scan.mjs.ejs +125 -0
  856. package/dist/templates/scripts/pr-merge-watch.mjs.ejs +445 -0
  857. package/dist/templates/scripts/record-agent-return.mjs.ejs +279 -0
  858. package/dist/templates/scripts/record-journey-evidence.mjs.ejs +69 -0
  859. package/dist/templates/scripts/rework-log.mjs.ejs +172 -0
  860. package/dist/templates/scripts/run-postman-tests.sh.ejs +112 -0
  861. package/dist/templates/scripts/schemas/agent-return-external.schema.json +74 -0
  862. package/dist/templates/scripts/schemas/agent-return.schema.json.ejs +181 -0
  863. package/dist/templates/scripts/schemas/cross-model-dispatch.schema.json +95 -0
  864. package/dist/templates/scripts/seed-test-data.sh.ejs +99 -0
  865. package/dist/templates/scripts/self-validation.mjs.ejs +126 -0
  866. package/dist/templates/scripts/setup-repo.sh.ejs +78 -0
  867. package/dist/templates/scripts/spotbugs-baseline.json.ejs +4 -0
  868. package/dist/templates/scripts/test-gate-layering.mjs.ejs +92 -0
  869. package/dist/templates/scripts/validate-api-snapshots.mjs.ejs +86 -0
  870. package/dist/templates/scripts/validate-k6-scenarios.mjs.ejs +96 -0
  871. package/dist/templates/scripts/validate-openapi-field-types.mjs.ejs +124 -0
  872. package/dist/templates/scripts/validate-postman-collection.mjs.ejs +159 -0
  873. package/dist/templates/scripts/verify-fe-coverage.mjs.ejs +138 -0
  874. package/dist/templates/scripts/verify-i18n-parity.mjs.ejs +114 -0
  875. package/dist/templates/scripts/verify-module-coverage.mjs.ejs +207 -0
  876. package/dist/templates/scripts/verify-mutation-baseline.mjs.ejs +209 -0
  877. package/dist/templates/scripts/verify-spotbugs.mjs.ejs +216 -0
  878. package/dist/templates/scripts/verify-tokens.mjs.ejs +177 -0
  879. package/dist/templates/security/RISK_ASSESSMENT.md.ejs +35 -0
  880. package/dist/templates/security/STRIDE.md.ejs +24 -0
  881. package/dist/templates/security/gitleaks.toml.ejs +21 -0
  882. package/dist/templates/security/zap/baseline-auth.context.ejs +58 -0
  883. package/dist/templates/security/zap/rules.tsv.ejs +100 -0
  884. package/dist/templates/ship/TICK_PROMPT.md.ejs +55 -0
  885. package/dist/templates/ship/supervisor.sh.ejs +46 -0
  886. package/dist/templates/smoke-journeys/manifest.json.ejs +1 -0
  887. package/dist/templates/sonar-project.properties.ejs +25 -0
  888. package/dist/templates/standards/doc-profile.ejs +27 -0
  889. package/dist/templates/standards/gold-doc-set.yml.ejs +528 -0
  890. package/dist/templates/standards/gold-registry.java.yml.ejs +266 -0
  891. package/dist/templates/standards/gold-registry.typescript.yml.ejs +104 -0
  892. package/dist/templates/standards/gold-registry.yml.ejs +119 -0
  893. package/dist/templates/standards/thresholds.yml.ejs +86 -0
  894. package/dist/templates/static-analysis/.dependency-cruiser.cjs.ejs +78 -0
  895. package/dist/templates/static-analysis/.golangci.yml.ejs +70 -0
  896. package/dist/templates/static-analysis/.shellcheckrc.ejs +13 -0
  897. package/dist/templates/static-analysis/.yamllint.yml.ejs +41 -0
  898. package/dist/templates/static-analysis/checkstyle.xml.ejs +83 -0
  899. package/dist/templates/static-analysis/detekt.yml.ejs +26 -0
  900. package/dist/templates/static-analysis/eslint.config.mjs.ejs +54 -0
  901. package/dist/templates/static-analysis/eslint.config.static.mjs.ejs +38 -0
  902. package/dist/templates/static-analysis/eslintrc-static.json.ejs +30 -0
  903. package/dist/templates/static-analysis/jscpd.json.ejs +25 -0
  904. package/dist/templates/static-analysis/knip.json.ejs +26 -0
  905. package/dist/templates/static-analysis/pmd-ruleset.xml.ejs +92 -0
  906. package/dist/templates/static-analysis/prettierignore.ejs +59 -0
  907. package/dist/templates/static-analysis/prettierrc.json.ejs +10 -0
  908. package/dist/templates/static-analysis/requirements-dev.txt.ejs +11 -0
  909. package/dist/templates/static-analysis/ruff.toml.ejs +40 -0
  910. package/dist/templates/static-analysis/rustfmt.toml.ejs +3 -0
  911. package/dist/templates/static-analysis/spotbugs-exclude.xml.ejs +120 -0
  912. package/dist/templates/static-analysis/spotbugs.gradle.ejs +18 -0
  913. package/dist/templates/static-analysis/spotless.gradle.ejs +38 -0
  914. package/dist/templates/static-analysis/stylelintrc.json.ejs +16 -0
  915. package/dist/templates/suppressions/archunit-baseline.json.ejs +1 -0
  916. package/dist/templates/suppressions/consumer-audit-allowlist.json.ejs +1 -0
  917. package/dist/templates/suppressions/gitleaksignore.ejs +20 -0
  918. package/dist/templates/suppressions/pii-allowlist.json.ejs +1 -0
  919. package/dist/templates/suppressions/suppressions-schema.json.ejs +39 -0
  920. package/dist/templates/suppressions/trivyignore.ejs +17 -0
  921. package/dist/templates/testing/test-taxonomy.md.ejs +120 -0
  922. package/dist/test/example.behavioral.test.js +2 -0
  923. package/dist/types/memory.d.ts +19 -0
  924. package/dist/types/memory.js +1 -0
  925. package/dist/types/plan.d.ts +102 -0
  926. package/dist/types/plan.js +2 -0
  927. package/dist/types/plugin.d.ts +45 -0
  928. package/dist/types/plugin.js +1 -0
  929. package/dist/utils/canon-loader.js +2 -0
  930. package/dist/utils/channel.js +1 -0
  931. package/dist/utils/config.d.ts +79 -0
  932. package/dist/utils/config.js +5 -0
  933. package/dist/utils/confirm-downgrade.js +5 -0
  934. package/dist/utils/env.js +2 -0
  935. package/dist/utils/error-catalog.js +2 -0
  936. package/dist/utils/errors.js +2 -0
  937. package/dist/utils/evidence-log.js +3 -0
  938. package/dist/utils/file-lock.js +2 -0
  939. package/dist/utils/first-run.js +8 -0
  940. package/dist/utils/fs.js +3 -0
  941. package/dist/utils/github-issue-helper.js +4 -0
  942. package/dist/utils/gradle.js +21 -0
  943. package/dist/utils/json-output.js +2 -0
  944. package/dist/utils/logger-config.js +4 -0
  945. package/dist/utils/logger.js +3 -0
  946. package/dist/utils/maturity-check.js +2 -0
  947. package/dist/utils/pkg.js +3 -0
  948. package/dist/utils/platform.js +2 -0
  949. package/dist/utils/plugin-loader.js +2 -0
  950. package/dist/utils/plugin-worker.js +2 -0
  951. package/dist/utils/prettier-format.js +2 -0
  952. package/dist/utils/profiler.js +2 -0
  953. package/dist/utils/render.js +2 -0
  954. package/dist/utils/replay.js +3 -0
  955. package/dist/utils/run-cli.js +6 -0
  956. package/dist/utils/run-id.js +3 -0
  957. package/dist/utils/safe-read.js +2 -0
  958. package/dist/utils/task-id.js +2 -0
  959. package/dist/utils/today.js +2 -0
  960. package/dist/utils/tty.js +2 -0
  961. package/dist/utils/walk-dir.js +2 -0
  962. package/dist/verify/rules/drive-by-scope.js +1 -0
  963. package/dist/verify/rules/orphan-todos.js +1 -0
  964. package/dist/verify/rules/registry.js +1 -0
  965. package/dist/verify/rules/skip-patterns.js +1 -0
  966. package/dist/verify/rules/types.d.ts +15 -0
  967. package/dist/verify/rules/types.js +1 -0
  968. package/dist/verify/rules/ui-language.js +1 -0
  969. package/dist/verify/run.js +3 -0
  970. package/dist/wizard/archetype-defaults.js +1 -0
  971. package/dist/wizard/presets.js +1 -0
  972. package/dist/wizard/prompts.js +44 -0
  973. package/dist/wizard/types.d.ts +637 -0
  974. package/dist/wizard/types.js +1 -0
  975. package/dist/worktree/harvest.js +2 -0
  976. package/dist/worktree/links.js +2 -0
  977. package/dist/worktree/paths.js +2 -0
  978. package/dist/worktree/validate.js +3 -0
  979. package/package.json +124 -0
  980. package/scripts/check-arc42-slots.mjs +738 -0
  981. package/scripts/check-doc-freshness.mjs +236 -0
  982. package/scripts/check-doc-set.mjs +243 -0
  983. package/scripts/check-doc-style.mjs +228 -0
  984. package/scripts/gold-audit.mjs +319 -0
  985. package/scripts/lib/doc-gate-allowlist.mjs +123 -0
  986. package/scripts/lib/doc-set-resolve.mjs +274 -0
  987. package/scripts/lib/glob-walk.mjs +148 -0
  988. package/scripts/lib/gold-audit-lib.mjs +1260 -0
  989. package/scripts/lib/run-helpers.mjs +413 -0
@@ -0,0 +1,491 @@
1
+ ---
2
+ name: wave-drain
3
+ description: Use when draining the open backlog at maximum throughput. Batch up to ~10 workable issues into a WAVE, plan and review the wave once cumulatively, dispatch parallel TDD agents in isolated worktrees, then integrate into a SINGLE wave PR merged GREEN. Issues that cannot proceed become needs-human with a blocker report. The orchestrator directs parallel agents — it never implements.
4
+ argument-hint: '[--wave-size N] [--max-parallel N]'
5
+ title: 'Wave Drain'
6
+ doc_version: '2.0.0'
7
+ status: active
8
+ last_review: '2026-07-10'
9
+ owner: ''
10
+ canonical_id: ''
11
+ tags: ['audience/agent', 'audience/dev', 'kind/internal', 'kind/orchestration']
12
+ related: ['epic-decompose', 'understand-code', 'tdd', 'verification', 'ssot-navigation']
13
+ ---
14
+
15
+ # Wave Drain
16
+
17
+ **Goal:** Drain the open backlog at maximum throughput. Every workable issue ends either
18
+ **merged** (inside a wave PR merged GREEN) or **needs-human** with a blocker report.
19
+
20
+ **Mental model:** You are the Claude Code **orchestrator**. You do **not** implement — you
21
+ **direct parallel agents**. Tokens are saved by running the heavy ceremony **once per wave**
22
+ (one cumulative plan, one plan review, one code review, one full gate, one PR), never by
23
+ skipping phases.
24
+
25
+ > `/ship` drives **one issue → one PR**. Wave Drain is its multi-issue sibling: **N issues →
26
+ > one wave PR**, reusing the same engine and the same gates.
27
+
28
+ **Legality (ADR-103):** parallel write-agents are in-contract ONLY under the rule-50
29
+ carve-out — every agent in a **dedicated worktree** (`/wt-open`), on a **distinct branch**,
30
+ with **plan-manifest-disjoint file-sets**. Dependency changes (`package.json`/lockfiles),
31
+ main-tree edits and tags stay serial-only. **Convergence model (owner-ratified
32
+ 2026-07-10):** on arbiter-governed repos every wave converges into **ONE wave PR** — the
33
+ parallelism is in HOW the wave is built, never in N PRs racing to `main`. For repos
34
+ WITHOUT arbiter governance, see the **cross-repo appendix** at the end (N-PR +
35
+ merge-train).
36
+
37
+ ## Primitives
38
+
39
+ | Primitive | Role here |
40
+ | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
41
+ | `/ship` | Pipeline reference for the per-issue phase contract (plan → red-team → TDD → review → verify → merge) |
42
+ | `arbiter task init / advance / record-red / recover / get` | The state engine each agent anchors its work to |
43
+ | `/wt-open`, `/wt-close`, `/wt-prune`, `/wt-list` | Isolated git worktrees, one per group |
44
+ | `arbiter gate-exec -- <cmd>` | Per-repo gate mutex (flock(1)): serializes expensive gates across parallel agents (ADR-103) |
45
+ | `arbiter worktree prune --stale [h]` | Zombie reaper: merged/inactive clean worktrees, dry-run default (ADR-103) |
46
+ | Skill `epic-decompose` | Only if an entangled issue must be split before batching |
47
+ | Skill `understand-code` | Per-agent code comprehension before editing |
48
+ | Skill `tdd` | The red → green → refactor loop every agent runs per unit |
49
+ | Skill `verification` | Claim-based verification on the cumulative branch before the gate |
50
+ | Skill `ssot-navigation` | Locate invariants / SSOT before touching guarded files |
51
+
52
+ ---
53
+
54
+ ## Phase 0 — Triage + Wave composition
55
+
56
+ 1. `gh issue list --state open` (this repo). **Exclude** anything labelled `blocked`,
57
+ `needs-human`, `epic`, or `needs-clarification`.
58
+ 1b. **Readiness gate (INV-138)** — for each issue that survives the label filter AND is
59
+ about to be selected into the wave (never a mass sweep of the whole backlog), run:
60
+
61
+ ```bash
62
+ gh issue view <n> --json body -q .body > /tmp/issue-<n>.md
63
+ node scripts/issue-readiness.mjs --body-file /tmp/issue-<n>.md --emit-comment
64
+ ```
65
+
66
+ Exit 1 (not ready — missing explicit `AC-N:` acceptance criteria, non-goals, or
67
+ files/contracts touched) ⇒ label it `needs-clarification`, post the emitted comment
68
+ (skip the comment when the label is already present), and **exclude it from the wave**.
69
+ Underspecification is paid here, as a prompt before dispatch — not after review as a
70
+ thrown-away PR. Exit 2 (gh/network error) ⇒ treat the issue as not composable this wave.
71
+ If `scripts/issue-readiness.mjs` does not exist in this repo (Track-B emission is a
72
+ tracked follow-up, ADR-110), a `Cannot find module` failure is never a "not ready"
73
+ verdict — record `readiness: script absent — skipped` in the wave roster and move on.
74
+ The skip is declared, never silent: an unrecorded skip is indistinguishable from a
75
+ forgotten step.
76
+
77
+ 2. Compose a **WAVE**: up to **10 issues**, partitioned into **groups** of **≤5 issues** each,
78
+ grouped by module / dependency. Independent groups are parallelizable. Entangled issues
79
+ (shared modules, or a declared `conflicts-with:#N`) go in the **same group** or get
80
+ **split** first via `epic-decompose`.
81
+ 3. Record the wave roster: for each group list its issues, target modules, and the
82
+ conflict-risk ordering you will use at integration.
83
+
84
+ A group is the unit of parallelism. Keep groups module-coherent so two agents never edit the
85
+ same file concurrently (see `.claude/rules/50-batch-execution.md` — the ADR-103 carve-out is
86
+ what makes parallel write-agents legal, and its disjoint-file-set condition is satisfied
87
+ HERE, at composition time).
88
+
89
+ **Declared conflicts:** an issue labelled/marked `conflicts-with:#N` goes in the **same
90
+ group as #N** (serial lane, same worktree, sequential) — never in a parallel group. This is
91
+ declarative and cheap; the integration merge + single gate remain the safety net for
92
+ conflicts nobody declared.
93
+
94
+ ## Phase 0.5 — Harvest the finding spool (#1404)
95
+
96
+ Before composing the wave's work, **drain the incidental-finding spool into tracked issues** so
97
+ findings noticed in prior waves become first-class backlog candidates instead of rotting in
98
+ `.arbiter/findings/`:
99
+
100
+ ```bash
101
+ # arbiter findings promote/list was removed in the B-prune (#1817 B2) — no CLI
102
+ # automation ships for this step anymore. Inspect the spool directly:
103
+ cat .arbiter/findings/*.jsonl 2>/dev/null | jq -s '.'
104
+ ```
105
+
106
+ Each shard entry is a finding recorded via `arbiter note` (fingerprinted by file+kind+text, line
107
+ excluded). Triage manually: drop entries whose file/graph-node no longer exists at HEAD, skip
108
+ anything already tracked by an open issue, and `gh issue create` the survivors yourself
109
+ (`finding`+`tech-debt`+`priority/Pn` labels). The spool being absent/empty is a clean no-op.
110
+
111
+ **Newly-triaged `severity: low` findings are candidate issues for THIS wave** — fold them into the
112
+ Phase 0 triage roster (subject to the same workability filter). Higher-severity findings enter
113
+ the backlog like any other issue.
114
+
115
+ ### Transactional claim (#1378)
116
+
117
+ **Check-ALL-then-claim-ALL** to avoid race conditions when multiple drain runs overlap:
118
+
119
+ ```bash
120
+ # 1. Verify ALL selected issues are still open and unassigned
121
+ for issue in $WAVE_ISSUES; do
122
+ state=$(gh issue view "$issue" --json state,assignees --jq '{state:.state,assignees:(.assignees|length)}')
123
+ echo "$state" | jq -e '.state == "OPEN" and .assignees == 0' > /dev/null || { echo "Issue #$issue not claimable"; exit 1; }
124
+ done
125
+
126
+ # 2. Claim ALL atomically
127
+ claimed=()
128
+ for issue in $WAVE_ISSUES; do
129
+ if gh issue edit "$issue" --assignees @me; then
130
+ claimed+=("$issue")
131
+ else
132
+ for c in "${claimed[@]}"; do gh issue edit "$c" --remove-assignee @me; done
133
+ echo "Claim failed for #$issue — rolled back all assignments"; exit 1
134
+ fi
135
+ done
136
+ ```
137
+
138
+ **Rules:**
139
+
140
+ - Never claim before verifying. A closed or already-assigned issue must be excluded.
141
+ - Never swallow `gh issue edit` errors — propagate them and trigger rollback.
142
+ - On partial failure, release all already-claimed issues before aborting.
143
+ - If rollback itself fails, log the orphaned claims explicitly for manual cleanup.
144
+
145
+ ---
146
+
147
+ ## Phase 1 — One cumulative plan (session model — plan synthesis is a judgment stage)
148
+
149
+ Write **a single cumulative plan** for the whole wave to `.claude/plans/wave-N.md`. For each
150
+ group include a **manifest**:
151
+
152
+ - **Files** the group will touch — file-sets must be disjoint across parallel groups
153
+ (ADR-103 carve-out condition; overlap → same group, serial)
154
+ - **Read-set** — files/globs the group is expected to READ beyond its write set (M6 #1943;
155
+ reads bounded socially, writes mechanically)
156
+ - **Invariants** in scope (from `GLOBAL_INVARIANTS.md` + `AGENTS.md` — cite INV-IDs)
157
+ - **Acceptance-criteria anchor (INV-138)** — per issue, copy the issue's criteria
158
+ **verbatim** into a `## Acceptance Criteria` block (plus `## Non-Goals`) under the
159
+ group's section, **namespacing each id per issue**: issue #123's `AC-1` becomes
160
+ `AC-123.1` in the wave plan (duplicate bare ids across issues are a gate error).
161
+ Tests and review cite these frozen ids, never a re-reading of the issue: the anchor —
162
+ not the implementing agent's interpretation — is the DoD.
163
+ - **TDD units** (the red → green slices) — each unit names the `AC-N` id(s) it proves
164
+ - **Conflict risks** vs other groups (which files / interfaces overlap)
165
+
166
+ This manifest is the group's **merge contract** (INV-138): acceptance criteria + repo
167
+ policy + required tests + CI expectations + review/security surfaces + dependencies,
168
+ derived BEFORE writing. Code and tests are born against it — adversarial review judges
169
+ the diff against it before integration, which is what kills accordion PRs.
170
+
171
+ Every implementation agent will **anchor its `arbiter task` to its group's section** of this
172
+ plan (CANON-16, enforced by the `pre-edit-plan-anchor` hook). No per-issue plans.
173
+
174
+ ---
175
+
176
+ ## Phase 2 — One plan review
177
+
178
+ Run the plan gate **once** on the cumulative plan: dispatch the plan-review agents against
179
+ `.claude/plans/wave-N.md` and record their verdict in
180
+ `.arbiter/evidence/plan-review/<id>/latest.json` (the review-dispatch CLI was removed in #1817 —
181
+ the gate now reads that evidence file, it is not a single command).
182
+
183
+ In parallel, dispatch a **tier-Standard red-team** (3 agents) against the cumulative plan.
184
+
185
+ - **CRITICAL** → rework the plan (**max 2 cycles**, then escalate to a human).
186
+ - **PASS** = **GO for the entire wave**.
187
+
188
+ ## Phase 2.5 — Per-issue 3-hop plan gate (default-on)
189
+
190
+ Every issue in the wave gets a **per-issue 3-hop plan trail as issue comments before any
191
+ code**:
192
+
193
+ 1. **hop 1/3** — draft plan (comment headed `## Piano hop 1/3` or `## Plan hop 1/3`)
194
+ 2. **hop 2/3** — adversarial red-team: every finding with `file:line` evidence and a verdict
195
+ 3. **hop 3/3** — final plan incorporating every finding (or refuting it with evidence)
196
+
197
+ The orchestrator verifies the trail **deterministically via `gh`**: three hop-header
198
+ comments, each carrying at least one `file:line` evidence marker and a non-trivial body.
199
+ The quality of the hops is model-side — this check catches absence, not proforma.
200
+
201
+ The gate is default-on and unconditional: a plan discovered wrong at integration costs the
202
+ whole group's rework, which is far more than the gate's explicit up-front cost. That cost
203
+ scales with the tier, not with enthusiasm — hop 2's adversarial pass runs with the tier's
204
+ `refutation_skeptics` count from `.claude/agent-dispatch-matrix.json` (XS/S = 1 skeptic,
205
+ Standard = 3). The `needs-plan` label no longer switches the gate on (it is always on); it
206
+ raises hop 2 to the Standard floor (3 skeptics) for architectural or ambiguous-scope
207
+ issues regardless of tier.
208
+
209
+ ---
210
+
211
+ ## Phase 3 — Parallel execution (scale out)
212
+
213
+ Spawn **one agent per group** in an **isolated worktree** (`/wt-open`, a branch per group).
214
+ `--max-parallel` defaults to **<%= maxParallelWorktrees %>** from
215
+ `automation.maxParallelWorktrees` (or the collaboration-mode default when absent).
216
+ Effective cap: **`min(--max-parallel, nproc - 2, wave size)`** — the mutex serializes the
217
+ GATE, not the workers' implicit builds, so leave the box headroom.
218
+
219
+ **Worktree discipline (speed):** inside a worktree run **only light checks** — targeted
220
+ `vitest` + the lint from `post-edit-dispatch`. The **full gate is forbidden in worktrees**; it
221
+ runs **once**, on integration.
222
+
223
+ **Gate mutex (ADR-103):** any expensive gate that could run concurrently with another
224
+ agent's gate on the same repo (parallel waves, ship agents, overnight batches) goes through
225
+ `arbiter gate-exec -- <gate-cmd>`. The wait is kernel-side (`flock(1)`, blocking) and the
226
+ lock releases if the gate-exec supervisor is SIGKILL/OOM-killed; killing the Arbiter Node
227
+ PID alone leaves that supervisor holding — no 1h stale stall, no poll loop. Linux tracks ordinary
228
+ process-group escapes by an inherited sentinel; a payload that deliberately closes it before
229
+ escaping is outside the guarantee and can outlive mutex release.
230
+ Where `flock(1)` does not exist (macOS base system, Windows) `gate-exec` fails closed:
231
+ degrade the wave to serial (`--max-parallel 1`).
232
+
233
+ **Cache isolation:** `arbiter worktree open` links `node_modules` with the
234
+ `symlink-children` strategy — `.vite`/`.cache` stay per-worktree, so parallel builds cannot
235
+ corrupt one shared cache into spurious reds. Belt-and-braces in each worker brief:
236
+ `export VITE_CACHE_DIR="$PWD/.cache/vite"`.
237
+
238
+ **M16 handoff-contract: subagents never own waits** — worker briefs end at commit + launch + structured handoff
239
+ {SHA, worktree, PID, exit-file, log} with an explicit END-TURN; ALL watches belong to the
240
+ coordinator (`bg-run.sh` + `pid-watch.sh`, #2103).
241
+
242
+ **Anti-stall (two DIFFERENT problems — never conflate them):**
243
+
244
+ - **Gate-wait** is deterministic: `gate-exec` blocks in the foreground — issue **ONE** wait
245
+ and let the kernel queue you. Never poll for the lock, never close a turn "checking back
246
+ later" on a mutex.
247
+ - **Turn-stall** (an agent idling mid-task) is only **bounded**, never prevented, by the
248
+ **watchdog sweep**: at every orchestrator turn boundary, reconcile REAL state — `gh pr
249
+ checks`, `gh issue view`, `arbiter worktree list`, DONE reports — and re-dispatch, mark
250
+ `needs-human`, or reap what stalled beyond its budget. Never rely on memory of what
251
+ agents "should" be doing; never close an orchestrator turn passively waiting on a PR —
252
+ arm auto-merge and let the NEXT sweep observe it.
253
+
254
+ Each agent's loop:
255
+
256
+ ```bash
257
+ arbiter task init --plan <wave-N.md#group-anchor> # anchor to the group's plan section
258
+ # invoke the tdd skill per unit: red → verify-red → green → verify-green → refactor
259
+ # targeted tests green
260
+ git commit # format enforced by post-commit-check
261
+ ```
262
+
263
+ Every worker brief names the `tdd` skill explicitly — a worker that starts from
264
+ implementation code has skipped the red step, and the pre-push tdd-evidence check will fail
265
+ its branch structurally (see Iron Law below).
266
+
267
+ Then emit a **DONE report**: files touched, tests added, commits, and `findings[]`.
268
+
269
+ #### Canonical finding shape (#1404)
270
+
271
+ The DONE-report `findings[]` use the **same `FindingEntry` shape as `arbiter note`** — the SSOT is
272
+ `src/commands/task-note.ts` (interface `FindingEntry`). This is what lets a finding flow straight
273
+ into the `.arbiter/findings` spool and get triaged manually (see "Phase 0.5 — Harvest the finding
274
+ spool" above) in the next wave, with fingerprint dedup using the SAME material as `task-note.ts`
275
+ `computeFingerprint` (so a finding is never double-filed). Do **not** invent a parallel free-prose
276
+ shape.
277
+
278
+ Each finding is one object with these fields (`graphNode` and `auditorHint` are optional; every
279
+ other field is required):
280
+
281
+ ```json
282
+ {
283
+ "ts": "2026-06-16T00:00:00.000Z",
284
+ "note": "duplicated retry helper — extract a shared utility",
285
+ "kind": "dup",
286
+ "severity": "low",
287
+ "foundDuring": "#1404",
288
+ "file": "src/commands/findings-promote.ts",
289
+ "line": 120,
290
+ "sha": "deadbeefcafef00d",
291
+ "graphNode": "src/commands/findings-promote.ts#revalidate",
292
+ "fingerprint": "<sha1 of kind+normalizedPath+symbol+normalizedNote>",
293
+ "auditorHint": "code-quality"
294
+ }
295
+ ```
296
+
297
+ - `kind` — finding class: `dup` | `smell` | `risk` | `debt` | `note`.
298
+ - `severity` — `low` | `med` | `high` | `info` (drives the promoted issue's `priority/Pn` label).
299
+ - `line` — number or `null`; it is **excluded** from the fingerprint.
300
+ - `graphNode` — optional graph-node id; **omitted** (not a key) when absent.
301
+ - `auditorHint` — optional; the `auditor-routing.json` auditor whose remit covers the finding.
302
+
303
+ The cheapest way to honour this shape is to capture findings in-band with `arbiter note` (which
304
+ writes exactly this entry); the DONE report then just mirrors what is already in the spool.
305
+
306
+ **A blocked agent → mark its issue `needs-human` and STOP that agent. It does NOT block the
307
+ wave.** The rest of the wave proceeds.
308
+
309
+ ---
310
+
311
+ ## Phase 4 — Local integration (one PR per wave)
312
+
313
+ 1. Create a local integration branch `wave-N-integration` **from `main`** (never commit to
314
+ `main`).
315
+ 2. **Merge the DONE worktrees sequentially**, minimum-overlap first, with the order computed
316
+ from the REAL branches — `git diff --name-only main...<branch>` per branch, fewest shared
317
+ files first — not from the plan's estimates. Conflicts → hand to a dedicated conflict
318
+ agent with the relevant DONE reports.
319
+ 3. **On the cumulative branch, once only — multiagent code review:**
320
+ - Route auditors:
321
+ `[ -f scripts/route-auditors.mjs ] && node scripts/route-auditors.mjs --size-floor Standard || echo "route-auditors: script absent — skipped"`
322
+ (arbiter's own wave-routing helper; a generated project does not receive it. The skip
323
+ is declared, never silent — record it in the wave roster and route the auditors by hand.)
324
+ - Self-review pass + **Adversarial Verifier**: trace each feature end-to-end, hunt dead
325
+ code and unwired options.
326
+ - **FIT rubric (INV-138):** the review judges fit against the frozen anchor, not just
327
+ code quality — for **each** `AC-N` in each group's `## Acceptance Criteria` block,
328
+ cite the diff/test line that proves it; any criterion without cited evidence ⇒
329
+ REJECT for that group. Non-goals violated ⇒ scope-creep finding. Record the
330
+ per-criterion verdicts in `.arbiter/evidence/ac-fit/wave-N.json` (schema
331
+ `arbiter-ac-fit-v1`), then run the deterministic check — anchor AND all-PASS fit:
332
+ `[ -f scripts/check-acceptance.mjs ] && node scripts/check-acceptance.mjs --plan .claude/plans/wave-N.md --ac-fit .arbiter/evidence/ac-fit/wave-N.json || echo "check-acceptance: script absent — skipped"`
333
+ (arbiter's own AC-fit verifier; a generated project does not receive it. When it is
334
+ absent the per-criterion verdicts above are still MANDATORY — record
335
+ `ac-fit: script absent — verdicts reviewed by hand` so the skip stays visible.)
336
+ - Write the **evidence file** (fail-closed, INV-114).
337
+ - Any still-unresolved `redTeamFindings` cap their mapped auditor's score (`[RT-xx UNRESOLVED]`).
338
+ - **CRITICAL / MAJOR** → dispatch a fixer agent.
339
+ 4. **Commit the cumulative candidate and all review/evidence artifacts.** This is the final
340
+ pre-gate commit. The working tree must be clean; nothing may be committed after L2 because
341
+ `gate-pass.json` is bound to the exact HEAD and tree hash.
342
+ 5. **Verify, then gate:**
343
+
344
+ Run the `verification` skill on the cumulative branch first (claim-based pass: every
345
+ claim in the DONE reports gets checked against the tree, not trusted), then the gate:
346
+
347
+ ```bash
348
+ # skill: verification — claim-based pass on the cumulative branch first
349
+ # FULL GATE → writes gate-pass.json; under the per-repo mutex (ADR-103) so a
350
+ # concurrent agent's gate never interleaves with this one:
351
+ arbiter gate-exec -- node scripts/check-all.mjs L2
352
+ ```
353
+
354
+ `gate-pass.json` is required by the `enforce-gate-before-pr` hook.
355
+
356
+ 6. **RED → root-cause structural fix** (never `--no-verify`, never skip). If the culprit is
357
+ one group, **revert that group's merge** → mark its issues `needs-human` → the wave
358
+ continues with the rest. **Any reverted/redone group and any FIT REJECT is rework
359
+ data**: append the why × where-caught before proceeding —
360
+ `node scripts/rework-log.mjs add --issue <n> --reason <r> --caught review` (taxonomy in
361
+ the script; `report` mode shows which issue-template section is leaking).
362
+ 7. **One PR per wave.** Body: a table mapping each issue → its commit, and **one `Closes #N`
363
+ line per issue** — never a comma-separated list (`Closes #N1, #N2, ...`); GitHub's
364
+ closing-keyword parser only reliably auto-closes the first issue in such a list on
365
+ admin/rebase-merge (#1766). Merge **only with checks GREEN**:
366
+
367
+ ```bash
368
+ gh pr create --title "wave(N): <summary>" --body "<issue→commit table>
369
+
370
+ Closes #N1
371
+ Closes #N2
372
+ ..."
373
+ <%_ const _waveCollaborationMode = typeof collaborationMode === 'string' ? collaborationMode : ''; const _waveMergeMode = typeof mergeMode === 'string' ? mergeMode : (typeof solo !== 'undefined' && solo !== null && typeof solo.mergeMode === 'string' ? solo.mergeMode : 'direct'); if (_waveCollaborationMode === 'trunk-solo' && _waveMergeMode === 'pr-ff') { _%>
374
+ node scripts/pr-merge-watch.mjs \
375
+ "$(gh repo view --json nameWithOwner -q .nameWithOwner)" \
376
+ "$(gh pr view --json number -q .number)"
377
+ <%_ } else { _%>
378
+ gh pr checks --watch
379
+ gh pr merge --merge # only when CI is GREEN
380
+ <%_ } _%>
381
+ # post-merge: confirm every ref closed, close stragglers. arbiter's own helper —
382
+ # absent in a generated project, where the skip is declared and the refs checked by hand.
383
+ [ -f scripts/verify-pr-closes.mjs ] && node scripts/verify-pr-closes.mjs <PR#> \
384
+ || echo "verify-pr-closes: script absent — skipped"
385
+ ```
386
+
387
+ CI red → root-cause fix → re-gate (PRs are owned until merged green).
388
+
389
+ 8. `/wt-close` (harvest) + `arbiter worktree prune --stale 24` (review the dry-run report,
390
+ then re-run with `--execute`) → `/clear` → **next wave**, until the backlog is empty. The
391
+ reaper also runs inside the watchdog sweep, so a crashed worker's zombie worktree never
392
+ outlives the wave (dirty trees are never touched — INV-96).
393
+
394
+ **M6 touched-vs-manifest GO condition (#1943):** before merging each group's branch, run
395
+ `node scripts/check-touched-vs-manifest.mjs --plan .claude/plans/wave-N.md --group <G>
396
+ --base main --branch <group-branch>` — this verifies touched(G) ⊆ declared(G) for one group;
397
+ it does not prove cross-group pairwise disjointness. Non-zero ⇒ the group is not clear to
398
+ merge (root-cause: either the manifest was under-declared or the agent scope-crept). A
399
+ read-set row absent from the manifest fails the check for that group the same way: an
400
+ omitted row must not be able to disarm the check it feeds — fix the plan's manifest, then
401
+ re-run.
402
+
403
+ ---
404
+
405
+ ## Iron Law
406
+
407
+ - **No group enters integration** without TDD + targeted tests **green**.
408
+ - **Nothing reaches `main`** without: red-team on the plan, multiagent review + adversarial
409
+ verify, and a **full gate GREEN** on the wave PR.
410
+ - The ceremony is **per-wave, not per-issue** — that is where the tokens are saved, **not by
411
+ skipping it**.
412
+ - **Iff-closure contract (field-validated 2026-08-09):** an issue closes ⟺ (E2E evidence ∧
413
+ doc evidence) — real-binary proof (bake/fixture/consumer/live-CI, never unit-only) AND
414
+ doc gates green with content updated. The PR body carries a per-issue evidence table; an
415
+ issue missing either half gets NO `Closes` line — it stays open with a comment naming
416
+ the missing half. Post-merge-only evidence (a live nightly, a consumer run) closes the
417
+ issue AFTER that run is green, not at merge.
418
+ - **RED-first branch construction:** the pre-push tdd-evidence check RE-RUNS the RED at its
419
+ pinned `test_commit_sha` — order every branch test(RED)→fix→evidence-pinned-to-the-test-
420
+ commit, `observed_failure` matching the re-run format exactly. Fix-before-test ordering
421
+ fails verification structurally, not stylistically.
422
+ - **Leads run composed L1 before the DONE report:** the worktree pre-commit skips L1
423
+ (#1695) — sub-check spot-checks miss bake goldens, examples drift, docs-gate, format.
424
+ Full `check-all.mjs L1` in the worktree is part of every lead brief's exit criteria.
425
+ - **Snapshot conflicts: regenerate, never hand-resolve.** Generated artifacts (bake
426
+ goldens, examples/**, manifests) conflicting at merge: take either side, then rebuild +
427
+ regenerate on the MERGED tree and audit the diff (hash-only expected, file-list moves
428
+ explained, nothing disappears).
429
+ - **Runner contention is not a test failure:** `status: null`/exit 137 on the single-slot
430
+ runner = SIGKILL from parallel-workflow racing. Re-run after the queue drains; never
431
+ patch the test.
432
+ - **Premise falsification with line-drift awareness:** locate issue-body claims BY
433
+ CONTENT, never by cited line numbers (audits go stale in days); re-verify every premise
434
+ on the CURRENT tree before implementing.
435
+
436
+ ## Stop conditions (fail-closed)
437
+
438
+ STOP, write a blocker report, mark the issue `needs-human`, and **move on** when you hit:
439
+
440
+ - An invariant violation → **cite the INV-ID**.
441
+ - An unauthorized edit to an SSOT or read-only file.
442
+ - An orphan TODO (no task ID).
443
+ - An `any` type / placeholder left in edited code.
444
+ - **2 failed plan-review cycles.**
445
+
446
+ A stop never halts the whole wave — it removes one group/issue and the wave proceeds.
447
+
448
+ ## Completion
449
+
450
+ Done **only when the backlog is empty** — every issue is either **merged** or **needs-human
451
+ with a stated reason**. Emit a final report: **issue → outcome + PR**.
452
+
453
+ ---
454
+
455
+ ## Appendix — Cross-repo manual protocol (repos WITHOUT arbiter governance)
456
+
457
+ On a repo with no `arbiter.json` (no `/drain`, no engine) the wave technique still applies,
458
+ but the convergence model flips: **N PRs + auto-merge armed + merge-train** (this is where
459
+ the train is native — PRs are the only integration unit). Field-proven 2026-07-09/10.
460
+
461
+ 1. **Worktrees + branches:** one `git worktree add` per issue, one branch per agent, disjoint
462
+ file-sets — the ADR-103 conditions apply verbatim even without the engine.
463
+ 2. **Gate mutex (one-liner):** no `arbiter gate-exec` here — use flock directly,
464
+ parameterized on the repo's own gate:
465
+
466
+ ```bash
467
+ flock /tmp/<repo>-gate.lock -c '<gate-cmd>' # e.g. 'make gate' or './run.sh ci'
468
+ ```
469
+
470
+ Same semantics: kernel wait, kernel release when the direct flock process is
471
+ SIGKILL/OOM-killed, one foreground wait.
472
+
473
+ 3. **Per-PR convergence:** each finished issue → its own PR with auto-merge armed. Never
474
+ watch-loop a PR; the sweep observes.
475
+ 4. **Merge-train (integration net):** when **≥3 PRs** are green-and-armed, build a local
476
+ train branch from `main`, merge the PR branches sequentially (minimum-overlap order from
477
+ the REAL `git diff --name-only`), run the full gate ONCE on the train under the flock
478
+ one-liner, and only then let the train land. The train catches integration defects that
479
+ are invisible to each green PR alone.
480
+
481
+ **Caveats (explicit — these are the failure modes the governed wave-PR model eliminates
482
+ structurally):**
483
+
484
+ - **Crash mid-train (#4):** recovery is stateless — recompute from `gh pr list` +
485
+ `git branch`/`worktree list`; never from memory. Do not close issues/PRs until the train
486
+ itself is merged.
487
+ - **Branch protection (#6):** verify the target repo's required checks BEFORE relying on
488
+ train-only CI — if required checks are per-PR, each PR still needs its own green CI.
489
+ - **Exclusion instability (#7):** when a branch is EXCLUDED from the train (conflict/red),
490
+ recompute the train order from scratch and re-examine branches that assumed the excluded
491
+ content — the minimum-overlap order is NOT stable under exclusions.
@@ -0,0 +1,140 @@
1
+ # <%= projectName %> — Codex Configuration
2
+
3
+ > **Governance rules are in `AGENTS.md` (canonical, AAIF standard).**
4
+ > This file adds OpenAI Codex-specific configuration only.
5
+
6
+ ---
7
+
8
+ ## Quick Reference
9
+
10
+ | Fact | Value |
11
+ |------|-------|
12
+ | **Project** | <%= projectName %> |
13
+ | **Test** | `<%= testCommand %>` |
14
+ | **Gate** | `node scripts/check-all.mjs` |
15
+ | **Full governance** | `../AGENTS.md` |
16
+
17
+ ---
18
+
19
+ ## Startup Protocol (Read First)
20
+
21
+ 1. Read `AGENTS.md` — this contains ALL governance rules and invariants
22
+ 2. Read `docs/architecture/ARCHITECTURE.md` if it exists
23
+ 3. Check current branch: must be `task/#NNN-description` (not `main`)
24
+ 4. If no task branch exists, create one before any edits
25
+
26
+ ## Execution Model
27
+
28
+ Codex operates via explicit plans. Before any implementation:
29
+
30
+ 1. Create a plan in `.agents/plan/PLAN.json`
31
+ 2. List all files to modify with their operations
32
+ 3. Identify invariants that apply
33
+ 4. Await GO from the user
34
+
35
+ ## Plan Schema
36
+
37
+ The plan is validated by `arbiter verify plan` against the `PlanJsonV1` schema
38
+ (the contract). Unknown fields are stripped, so only the fields below are
39
+ honoured.
40
+
41
+ ```json
42
+ {
43
+ "task_id": "#NNN",
44
+ "scope": {
45
+ "track": "A",
46
+ "paths": ["src/feature.ts"]
47
+ },
48
+ "files": [
49
+ {
50
+ "path": "src/feature.ts",
51
+ "operation": "modify"
52
+ }
53
+ ],
54
+ "invariants": {
55
+ "ui_language": "EN",
56
+ "no_skips": true
57
+ },
58
+ "invariant_ids": ["INV-01", "INV-22"],
59
+ "review_bridge": { "enabled": true, "reviewer": "bridge-reviewer", "fail_on_warn": false }
60
+ }
61
+ ```
62
+
63
+ - `task_id` matches `#<issue-number>`.
64
+ - `scope.track` is the evidence track (`A|B|C|D`).
65
+ - `files[].operation` is `create|modify|delete`.
66
+ - `invariants` is a **policy object** (`ui_language:"EN"` asserts the change
67
+ adds no non-EN UI strings; `no_skips:true` asserts no skipped tests) — it is
68
+ NOT a list of invariant IDs.
69
+ - `invariant_ids` lists the SSOT invariants (`INV-NN`) the plan intends to
70
+ honour — this is where invariant IDs belong, not in `invariants`.
71
+ - `review_bridge` is required (`run_id` is generated by `arbiter verify plan`
72
+ into the review output, not supplied in the plan).
73
+
74
+ ## Task Workflow
75
+
76
+ Follow this lifecycle for every task:
77
+
78
+ 1. **Start**: Read GitHub issue → read `AGENTS.md` → create `task/#NNN-description` branch
79
+ 2. **Plan**: Create `.agents/plan/PLAN.json` with file manifest and invariants
80
+ 3. **Implement**: Write tests first, then implementation. Run `<%= testCommand %>` after each unit
81
+ 4. **Gate**: `node scripts/check-all.mjs L1` before commit, `node scripts/check-all.mjs L2` before push
82
+ 5. **Finalize**: Commit → push → PR → verify CI → merge
83
+
84
+ ## Command Translation
85
+
86
+ | Claude Code | Codex Equivalent |
87
+ |-------------|-----------------|
88
+ | `/ship #NNN` | **Orchestration entrypoint** — drive an issue to a merged PR |
89
+ | `/task` | Low-level engine/CLI: `arbiter task init/advance/record-red/recover/get` |
90
+ | `<%= testCommand %>` | Run tests for this stack |
91
+ | `node scripts/check-all.mjs L1` | Run before each commit |
92
+ | `node scripts/check-all.mjs L2` | Run before push/PR |
93
+
94
+ ## Hard Stops
95
+
96
+ All hard stops from `AGENTS.md` apply. Additionally:
97
+ - Never edit without a plan in `.agents/plan/PLAN.json`
98
+ - Never commit directly to `main`
99
+ - Never skip the gate
100
+
101
+ ---
102
+
103
+ ## Known Limitations — Codex Governance Parity
104
+
105
+ Codex has a hook system (`[features] hooks`), but it covers a smaller set of
106
+ events than Claude Code. The table below is **generated from
107
+ the actual Claude-track inventory for this configuration** (ADR-106, arbiter
108
+ #1966) — do not edit it by hand; it is re-derived on every generation and
109
+ checked against the emitted hook inventory by the arbiter parity gate.
110
+
111
+ Hooks marked as *bridged* run in real time on Codex too, via
112
+ `.codex/config.toml` → `codex-adapter.mjs`. Everything else is covered at
113
+ gate time (`node scripts/check-all.mjs`) or is manual discipline, as stated.
114
+
115
+ **A bridged hook only runs once you approve it.** Codex requires a one-time
116
+ trust approval per project hook entry (stored as a `trusted_hash` under
117
+ `[hooks.state]` in `~/.codex/config.toml`); an unapproved entry is skipped
118
+ **silently** — no warning, no exit code, the guard simply does not run, and the
119
+ table above then overstates your real coverage. Approve them once interactively,
120
+ or pass `codex exec --dangerously-bypass-hook-trust` in automation. Editing
121
+ `.codex/config.toml` re-invalidates the approval for the entries it changes.
122
+
123
+ | Claude Code Hook | What it enforces | Codex equivalent |
124
+ |-----------------|-----------------|------------------|
125
+ <% for (const row of knownLimitations.hooks) { -%>
126
+ | `<%= row.name %>` | <%- row.enforces %> | <%- row.codexEquivalent %> |
127
+ <% } -%>
128
+
129
+ Claude-only surfaces with no Codex equivalent (by design, ADR-106 — accurate
130
+ disclosure, not implementation parity):
131
+
132
+ - **Commands** (<%= knownLimitations.commands.length %>): <%- knownLimitations.commands.map((c) => '`/' + c + '`').join(', ') %>
133
+ - **Agents** (<%= knownLimitations.agents.length %>): <%- knownLimitations.agents.map((a) => '`' + a + '`').join(', ') %>
134
+ - **Skills** (<%= knownLimitations.skills.length %>): <%- knownLimitations.skills.map((s) => '`' + s + '`').join(', ') %>
135
+ - **Rules not derived into the Codex track** (<%= knownLimitations.claudeOnlyRules.length %>): <%- knownLimitations.claudeOnlyRules.map((r) => '`' + r + '`').join(', ') %> — each is coupled to a Claude-only mechanism (knowledge-map routing, brainstorm hook, `/impact` skill, CLOSER hook)
136
+
137
+ **Decision:** This gap is intentional. OpenAI Codex has no plugin/hook extension
138
+ point at the time of writing. When Codex adds a hook system, `codex-adapter.mjs`
139
+ should be extended to bridge these checks. Gate-level enforcement catches all
140
+ critical violations before merge.