@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,293 @@
1
+ {
2
+ "errors": {
3
+ "E_CONFIG_NOT_FOUND": "No arbiter.json found. Run `arbiter init` to initialize.",
4
+ "E_CONFIG_INVALID": "arbiter.json is invalid after the requested changes.",
5
+ "E_CONFIG_WRITE": "Failed to write arbiter.json.",
6
+ "E_INIT_ALREADY_EXISTS": "arbiter.json already exists in this directory.",
7
+ "E_UPGRADE_UNKNOWN_LEVEL": "Unknown governance level: {level}",
8
+ "E_UPGRADE_ALREADY_AT_LEVEL": "Already at governance level {level}.",
9
+ "E_UPGRADE_PARSE": "Could not parse current governance level.",
10
+ "E_UPGRADE_WRITE": "Failed to write upgraded config.",
11
+ "E_UPGRADE_GENERATE": "Failed to generate governance files.",
12
+ "E_LOCK_TIMEOUT": "File lock timed out after {ms}ms.",
13
+ "E_LOCK_STALE": "Stale lock file detected at {path}.",
14
+ "E_LOCK_RELEASE": "Failed to release file lock at {path}.",
15
+ "E_LOCK_SYMLINK": "Lock path {path} is a symlink \u2014 refusing to create lock.",
16
+ "E_LOCK_FOREIGN_HOST": "Lock held by a process on a different host ({host}). Run `arbiter doctor --recover-lock` to manually release.",
17
+ "E_LOCK_BUSY": "arbiter is already running (PID {pid}, host {host}, cmd: {cmd}, age: {age}s). Run `arbiter doctor --recover-lock` to force-release if the process is gone.",
18
+ "E_LOCK_CONFLICT": "Lock already exists at {path}.",
19
+ "E_LOCK_PATH_ESCAPE": "Refusing to release lock at {path} \u2014 path escapes outside the project root.",
20
+ "E_LOCK_SYMLINK_UNLINK": "Lock path {path} is a symlink \u2014 refusing to unlink. Remove it manually.",
21
+ "E_LOCK_UNREADABLE": "Cannot read lock at {path} \u2014 it may not exist or is not a valid arbiter lock. Check permissions with `ls -la {path}`.",
22
+ "E_LOCK_PID_CHANGED": "Lock PID changed: expected {expected} but found {found}. The lock was released and re-acquired between inspect and recover. Aborting.",
23
+ "E_GATE_MUTEX_UNSUPPORTED": "flock(1) is {detail} \u2014 the per-repo gate mutex requires util-linux flock (kernel-side release when the gate-exec supervisor is SIGKILL/OOM-killed; killing the Arbiter Node PID alone leaves that supervisor holding the mutex). Run the wave serially (--max-parallel 1, no mutex needed) or install flock. (ADR-103)",
24
+ "E_NO_PLAN_ANCHOR": "No active plan anchor found. Run `/task #NNN` to initialize a plan.",
25
+ "E_WORK_NO_CONFIG": "No arbiter.json found. Run `arbiter init` first.",
26
+ "E_WORK_NO_PHASE": "Cannot advance: no active task phase.",
27
+ "E_WORK_INVALID_PHASE": "Invalid task phase: {phase}.",
28
+ "E_PLUGIN_NOT_FOUND": "Plugin not found: {name}.",
29
+ "E_PLUGIN_INSTALL": "Failed to install plugin: {name}.",
30
+ "E_PLUGIN_REMOVE": "Failed to remove plugin: {name}.",
31
+ "E_PLUGIN_NOT_INSTALLED": "Plugin not found: {name}. Check `arbiter configure --set plugins={name}` to enable it.",
32
+ "E_CONFIGURE_INVALID": "Invalid configuration value for {key}: {value}.",
33
+ "E_CONFIGURE_NO_CONFIG": "No arbiter.json found. Run `arbiter init` first.",
34
+ "E_CONFIGURE_INVALID_KEY": "Unknown configuration key: {key}.",
35
+ "E_CONFIGURE_READ": "Failed to read current configuration.",
36
+ "E_CONFIGURE_CONFIG_INVALID": "Configuration invalid after changes: {errors}",
37
+ "E_UPDATE_FETCH": "Failed to fetch update information.",
38
+ "E_UPDATE_WRITE": "Failed to write update files.",
39
+ "E_UPDATE_CONFIG_INVALID": "Config invalid after update: {errors}.",
40
+ "E_FS_READ": "Failed to read file: {path}.",
41
+ "E_FS_WRITE": "Failed to write file: {path}.",
42
+ "E_FS_ENOSPC": "Disk full while writing {path}. Free up space and retry. Use `df -h` to check available space.",
43
+ "E_FS_EACCES": "Permission denied accessing {path}. Check file ownership and directory permissions.",
44
+ "E_FS_EROFS": "Cannot write {path} \u2014 filesystem is read-only. Check mount options.",
45
+ "E_FS_EDQUOT": "Disk quota exceeded while writing {path}. Free up space or raise your quota.",
46
+ "E_FS_EPERM": "Operation not permitted on {path}. Check immutable bit, SELinux/AppArmor, ACLs, or file ownership.",
47
+ "E_FS_ENOTDIR": "Cannot access {path} \u2014 a component of the path is not a directory.",
48
+ "E_FS_EISDIR": "Cannot access {path} \u2014 target is a directory, expected a file.",
49
+ "E_FS_ENOENT": "Cannot access {path} \u2014 the path does not exist. Check the path, or create the parent directory first (for example: `mkdir -p`).",
50
+ "E_FS_EBUSY": "Cannot access {path} \u2014 the file is busy or locked by another process. Close it and retry.",
51
+ "E_FS_EMFILE": "Cannot access {path} \u2014 too many open files. Close other files or raise the limit with `ulimit -n`, then retry.",
52
+ "E_GENERATE_FAILED": "Generator failed: {key}.",
53
+ "E_WORK_ADVANCE_FAILED": "Failed to advance task phase.",
54
+ "E_INIT_GITHUB_SETUP": "Failed to set up GitHub Actions.",
55
+ "E_INIT_GITHUB_UNAUTHENTICATED": "--github was requested but GitHub CLI (gh) is not authenticated: {error}. No GitHub workflows or their 8 gates (ci-tiers, action-pins, workflow-perms, workflow-runners, workflow-sha-pinning, workflow-job-naming, pr-size-gate, merge-method-ff-only) were emitted. Run `gh auth login` (or set GH_TOKEN) and re-run `arbiter init --github`.",
56
+ "E_UPDATE_GITHUB_UNAUTHENTICATED": "--github was requested but GitHub CLI (gh) is not authenticated: {error}. No GitHub workflows or their 8 gates (ci-tiers, action-pins, workflow-perms, workflow-runners, workflow-sha-pinning, workflow-job-naming, pr-size-gate, merge-method-ff-only) were emitted. Run `gh auth login` (or set GH_TOKEN) and re-run `arbiter update --github`.",
57
+ "E_INIT_WRITE": "Failed to write initialization files.",
58
+ "E_INIT_DETECT": "Failed to detect project structure.",
59
+ "E_INIT_UNKNOWN_LANGUAGE": "Language is unknown: test naming and test pyramid checks cannot be configured. Re-run `arbiter init --language <lang>` with the project language; governance files were not generated.",
60
+ "E_INIT_DIRTY_TREE": "Working tree has uncommitted changes. Commit or stash first, or use --force to override.",
61
+ "E_INIT_PLUGIN_FAILURES": "Plugin(s) failed:\n {failures}",
62
+ "E_TARGET_REQUIRED": "--target is required. Specify L2 or L3.",
63
+ "E_ALREADY_AT_LEVEL": "Already at {level}. Nothing to upgrade.",
64
+ "E_DOWNGRADE_NOT_SUPPORTED": "Downgrade not supported. Edit arbiter.json manually and run arbiter update.",
65
+ "E_GRACE_NOT_SUPPORTED": "The grace period is implemented for L1\u2192L2 only (ADR-028). To move to a higher level, run `arbiter configure --set governanceLevel=<L3|L4>` followed by `arbiter update`.",
66
+ "E_UPGRADE_CONFIG_INVALID": "Config invalid after upgrade: {errors}.",
67
+ "E_NO_GRACE_PERIOD": "No grace period to extend (none set or already expired).",
68
+ "E_GRACE_LOG_MALFORMED": "grace-log.json is malformed \u2014 delete {path} to reset extend history.",
69
+ "E_INVALID_ARCHETYPE": "Invalid {field}: \"{value}\". Valid: {valid}",
70
+ "E_INVALID_BOOL": "{path} must be true or false \u2014 got: {value}",
71
+ "E_INVALID_NUMBER": "{path} must be a number \u2014 got: {value}",
72
+ "E_INVALID_TOOL": "Invalid {noun}: {tool}. Valid tools: {valid}",
73
+ "E_INVALID_FORMAT": "Invalid --set format (expected path=value): {assignment}",
74
+ "E_UNKNOWN_PATH": "Unknown configuration path: {path}",
75
+ "E_UNSUPPORTED_PATH_DEPTH": "Unsupported path depth: {path}",
76
+ "E_INIT_WIN32": "arbiter does not support native Win32. Install WSL2 and run arbiter inside it. Setup guide: https://docs.arbiter.dev/install/windows",
77
+ "E_INVALID_LEVEL": "Unknown governance level: \"{level}\". Valid: L1, L2, L3, L4",
78
+ "E_INVALID_LANGUAGE": "Unknown language: \"{language}\". Valid: typescript, java, kotlin, rust, python, go, multi",
79
+ "E_TRAIN_SEALED": "SEALED: {reason} \u2014 {detail}. Land this train (gate, push, one PR closing every id) before starting the next one.",
80
+ "E_REVIEW_ROUNDS_EXHAUSTED": "REVIEW ROUNDS EXHAUSTED \u2014 {detail}",
81
+ "E_PR_NOT_MERGED": "NOT MERGED \u2014 {detail} A PR is owned until it is merged."
82
+ },
83
+ "cli": {
84
+ "shared": {
85
+ "done": "Done.",
86
+ "version_info": "arbiter {version}",
87
+ "dry_run_notice": "[dry-run] No files written.",
88
+ "dry_run_prefix": "[dry-run]",
89
+ "running": "Running {action}...",
90
+ "success": "Success.",
91
+ "error_prefix": "Error",
92
+ "warning_prefix": "Warning",
93
+ "hint_prefix": "Hint",
94
+ "docs_prefix": "Docs",
95
+ "force_override_hint": "Use --force to override this check."
96
+ },
97
+ "init": {
98
+ "banner": "Initializing arbiter governance...",
99
+ "detecting": "Detecting project structure...",
100
+ "detected_language": "Detected language: {language}",
101
+ "detected_archetype": "Detected archetype: {archetype}",
102
+ "detected_level": "Detected governance level: {level}",
103
+ "writing_files": "Writing governance files...",
104
+ "github_setup": "Setting up GitHub Actions...",
105
+ "github_skipped": "GitHub Actions setup skipped (no .github dir).",
106
+ "complete": "Governance initialized at level {level}.",
107
+ "dry_run_diff": "Dry-run diff ({count} files):",
108
+ "dry_run_file_create": " [create] {path}",
109
+ "dry_run_file_update": " [update] {path}",
110
+ "dry_run_file_skip": " [skip] {path}",
111
+ "brownfield_detected": "Brownfield project detected. Applying safe defaults.",
112
+ "brownfield_route": "Existing project detected (tests, CI workflows, lint config). The first gate run will measure your project as it is today. To select brownfield initialization, re-run with --brownfield. To capture a debt baseline when debt gates are enabled, run: node scripts/capture-debt-baseline.mjs.",
113
+ "already_exists": "arbiter.json already exists. Use --force to reinitialize.",
114
+ "prompt_confirm": "Proceed with initialization?",
115
+ "prompt_level": "Select governance level:",
116
+ "prompt_language": "Select primary language:",
117
+ "prompt_archetype": "Select project archetype:",
118
+ "local_arbiter_setup": "\n Install the root-local Arbiter CLI with a caller-selected immutable package spec (exact release or full Git ref):\n {setupCommand}",
119
+ "verify_hint": "\n Run: node scripts/check-all.mjs L1 to verify\n",
120
+ "install_first_hint": "\n Next: run `{installCommand}` first — init added the gate toolchain to devDependencies but did not install it.",
121
+ "install_first_hint_unreadable": "\n Next: run `{installCommand}` first — package.json could not be read, so the gate toolchain in devDependencies cannot be assumed installed.",
122
+ "existing_agents_md": " \u251c\u2500\u2500 Existing AGENTS.md detected \u2014 will back up",
123
+ "existing_claude_dir": " \u251c\u2500\u2500 Existing .claude/ detected \u2014 will merge",
124
+ "existing_agents_dir": " \u251c\u2500\u2500 Existing .agents/ detected \u2014 will merge",
125
+ "existing_gemini_dir": " \u251c\u2500\u2500 Existing .gemini/ detected \u2014 will back up",
126
+ "existing_windsurf": " \u251c\u2500\u2500 Existing windsurf-instructions.md detected \u2014 will back up",
127
+ "existing_aider": " \u251c\u2500\u2500 Existing .aider.conf.yml detected \u2014 will back up",
128
+ "ai_rulez_detected": " \u251c\u2500\u2500 ai-rulez detected \u2014 skipping tool configs (AGENTS.md + GitHub only)",
129
+ "capturing_baseline": "\n Capturing debt baseline (this may take a few minutes)\u2026",
130
+ "baseline_captured": " Baseline captured at scripts/debt-baseline.json",
131
+ "file_entry": " {icon} {relPath}{label}",
132
+ "dry_run_notice_full": "\n Dry run \u2014 no files will be written.\n",
133
+ "dry_run_create_header": " [create]",
134
+ "dry_run_create_file": " + {entry}",
135
+ "dry_run_modify_header": " [modify]",
136
+ "dry_run_modify_file": " ~ {entry}",
137
+ "dry_run_skip_header": " [skip]",
138
+ "dry_run_skip_file": " = {entry}",
139
+ "dry_run_deferred_note": "\n Not listed: the doc-set skeletons. They are resolved from standards/gold-doc-set.yml, which this same run writes, so they can only be decided once init has run.",
140
+ "dry_run_run_hint": "\n Run without --dry-run to apply.\n",
141
+ "gate_failed": "\n arbiter init aborted: L3 maturity gate failed.\n",
142
+ "coherence_gate_failed": "\n arbiter init aborted: collaborationMode \u00d7 governanceLevel coherence gate failed.\n",
143
+ "accept_beta_hint": "\n Use --accept-beta-tools to allow beta tools, or reduce governance to L2.\n",
144
+ "verifying_toolchain": "\n Verifying toolchain compatibility...",
145
+ "gh_access_note": " Note: {message}",
146
+ "dirty_tree_warn": "\n Warning: working tree has uncommitted changes (--force override active)\n"
147
+ },
148
+ "configure": {
149
+ "reading": "Reading current configuration...",
150
+ "updating": "Updating {key} to {value}...",
151
+ "updated": " Updated: {keys}",
152
+ "list_header": "Current arbiter configuration:",
153
+ "no_changes": "No changes made.",
154
+ "reset_confirm": "Reset all configuration to defaults?",
155
+ "usage_hint": " Usage: arbiter configure --set <path>=<value>\n Interactive mode requires a TTY. Non-interactive usage requires --set.",
156
+ "drain_sync_withheld": "warning: {path} carries the `arbiter:preserve` marker, so its --max-parallel default was not updated. Set it to {cap} by hand to keep it in sync.",
157
+ "interactive": {
158
+ "intro": "arbiter configure \u2014 interactive mode",
159
+ "save_confirm": "Save these changes?",
160
+ "invalid_number": "Must be a positive integer",
161
+ "no_config": "No arbiter.json found. Run `arbiter init` first.",
162
+ "axis_header": "Project shape",
163
+ "features_header": "Feature flags",
164
+ "thresholds_header": "Quality thresholds",
165
+ "collaboration_header": "Collaboration mode",
166
+ "access_header": "AI tools & GitHub access",
167
+ "automation_header": "Ship automation"
168
+ }
169
+ },
170
+ "work": {
171
+ "no_units": "No work units found.",
172
+ "unit_row": " {id} {status}{phase} {title}{labels}",
173
+ "created": " Created: {id} {title}",
174
+ "show": {
175
+ "id": " id: {id}",
176
+ "title": " title: {title}",
177
+ "status": " status: {status}",
178
+ "phase": " phase: {phase}",
179
+ "parent": " parent: {parent}",
180
+ "labels": " labels: {labels}"
181
+ },
182
+ "closed": " Closed: {id}",
183
+ "advanced": " Advanced: {id} \u2192 {phase}",
184
+ "no_task": "No active task. Run `/task #NNN` to start.",
185
+ "complete": "Task complete."
186
+ },
187
+ "upgrade_level": {
188
+ "grace_ends_warn": "Grace ends {date} ({days} days). {target} gates will WARN until then.",
189
+ "grace_extended": "Grace extended to {date} (+{days} days).",
190
+ "grace_capped": "Grace window capped at {max} days (requested {requested}). The generated gate ignores any grace longer than {max} days.",
191
+ "grace_extend_capped": "Grace window capped at {max} days from now (extend by {requested} would exceed it). The generated gate ignores any grace longer than {max} days."
192
+ },
193
+ "update": {
194
+ "checking": "Checking for updates...",
195
+ "up_to_date": "arbiter is up to date.",
196
+ "available": "Update available: {version}",
197
+ "updating": "Updating to {version}...",
198
+ "complete": "Updated to {version}.",
199
+ "failed": "Update failed.",
200
+ "done": "\n Done! {created} created, {replaced} updated, {skipped} skipped, {withheld} withheld.",
201
+ "no_config_changes": " No config changes detected \u2014 re-running to pick up template updates.",
202
+ "reason_regen": " {reason} detected \u2014 full regeneration.",
203
+ "selective": " Selective update: {count} generator group(s).",
204
+ "verify_hint": "\n Run: node scripts/check-all.mjs L1 to verify\n",
205
+ "config_invalid": " [arbiter] Config invalid after update: {errors}"
206
+ },
207
+ "plugin": {
208
+ "installing": "Installing plugin: {name}...",
209
+ "installed": "Plugin installed: {name}",
210
+ "removing": "Removing plugin: {name}...",
211
+ "removed": "Plugin removed: {name}",
212
+ "listing": "Installed plugins:",
213
+ "none": "No plugins installed.",
214
+ "not_found": "Plugin not found: {name}.",
215
+ "scaffolded": " Scaffolded plugin: {name}",
216
+ "location": " Location: {path}",
217
+ "next_steps": " Next steps:",
218
+ "cd_hint": " cd {path}",
219
+ "npm_install": " npm install",
220
+ "npm_build": " npm run build",
221
+ "no_config": " No arbiter.json found. Run `arbiter init` first.",
222
+ "added": " Plugin added: {name}",
223
+ "removed_msg": " Plugin removed: {name}",
224
+ "no_plugins": " No plugins configured.",
225
+ "plugins_header": " Configured plugins:",
226
+ "plugin_row": " \u251c\u2500\u2500 {name} ({status})",
227
+ "timeout": "Plugin \"{name}\" timed out after {ms}ms",
228
+ "interrupted": "Plugin \"{name}\" was interrupted by signal",
229
+ "crashed": "Plugin \"{name}\" crashed (exit code {code})",
230
+ "load_error": "Failed to load plugin \"{name}\": {message}\n arbiter.json was not modified.\n {hint}",
231
+ "retry_network": "Network issue detected. Remove the plugin from arbiter.json's `plugins` array, then re-run `arbiter update`.",
232
+ "retry_local": "Verify the package is installed (`npm install {name}`), or remove it from arbiter.json's `plugins` array and re-run `arbiter update`.",
233
+ "security_advisory": " Security advisory: Plugin {name} will execute Node code during `arbiter update`. Verify source before use.",
234
+ "already_configured": " Plugin already configured: {name}"
235
+ },
236
+ "diff": {
237
+ "banner": "\n Arbiter \u2014 diff (dry run)\n",
238
+ "no_config": " No arbiter.json found. Run `arbiter init` first.\n",
239
+ "new_file": " + {key} (new file)",
240
+ "changed_file": " ~ {key} (would update)",
241
+ "unchanged_file": " = {key} (unchanged)",
242
+ "up_to_date": "\n All files up to date. Nothing to update.\n",
243
+ "run_update": "\n Run `arbiter update` to apply changes.\n",
244
+ "remote_header": "\n Remote side effects (`arbiter update --github` would perform):",
245
+ "remote_effect": " \u2192 {op} {target}",
246
+ "ignored_file": " \u2013 {key} (skipped \u2014 .arbiterignore)",
247
+ "withheld_file": " ! {key} (template fix WITHHELD \u2014 user-modified)",
248
+ "withheld_header": "\n Withheld template fixes ({count}) \u2014 preserved because user-modified, fix NOT applied:",
249
+ "withheld_hint": " These files are behind the current template. Review the upstream changes and merge them manually, or run `arbiter diff --withheld` for a focused list.",
250
+ "governance_stale_section": "STALE {file}: {section} \u2014 {detail}",
251
+ "governance_stale_footer": "Governance sections are stale \u2014 run `arbiter update`.",
252
+ "governance_up_to_date": "Governance sections are up to date."
253
+ },
254
+ "worktree": {
255
+ "ready": "\nWorktree ready: {path}",
256
+ "branch": "Branch: {branch}",
257
+ "base": "Base: {base} @ {ref}",
258
+ "next": "\nNext: cd '{path}'\n",
259
+ "harvested": "Harvested {count} file(s):",
260
+ "harvest_copied": " copied: {file}",
261
+ "skipped_count": "Skipped {count} file(s) (uncommitted changes in main repo):",
262
+ "harvest_skipped": " skipped: {file}",
263
+ "harvest_protected": " protected-untracked: {file}",
264
+ "no_harvest": "No files to harvest (worktree has no changes).",
265
+ "branch_deleted": "Branch {branch} deleted.",
266
+ "closed": "\nWorktree closed: {path}",
267
+ "relinked": "\nWorktree relinked: {path}"
268
+ },
269
+ "doctor": {
270
+ "recover_lock": {
271
+ "refused": "Refusing to release live or unconfirmed lock holder(s): {holders}. Use `arbiter doctor recover-lock --force` to override deliberately."
272
+ }
273
+ },
274
+ "wizard": {
275
+ "migration_plan": "\n Migration plan:",
276
+ "replace_entry": " \u251c\u2500\u2500 Replace (backed up): {entry}",
277
+ "merge_entry": " \u251c\u2500\u2500 Merge: {entry}",
278
+ "preserve_entry": " \u251c\u2500\u2500 Preserve: {entry}",
279
+ "create_entry": " \u251c\u2500\u2500 Create: {entry}",
280
+ "existing_governance": " Existing governance detected:",
281
+ "existing_agents_md": " \u251c\u2500\u2500 AGENTS.md",
282
+ "existing_claude_dir": " \u251c\u2500\u2500 .claude/ directory",
283
+ "existing_agents_dir": " \u251c\u2500\u2500 .agents/ directory",
284
+ "existing_gemini_dir": " \u251c\u2500\u2500 .gemini/ directory",
285
+ "existing_windsurf": " \u251c\u2500\u2500 windsurf-instructions.md",
286
+ "existing_aider": " \u251c\u2500\u2500 .aider.conf.yml",
287
+ "tools_header": "\n Will generate governance files for: {tools}",
288
+ "cancelled": "\n Cancelled.\n",
289
+ "aborted": "\n Aborted \u2014 no changes made.\n",
290
+ "gh_access_note": " Note: {message}"
291
+ }
292
+ }
293
+ }
@@ -0,0 +1,4 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import{readFileSync,existsSync}from"node:fs";import{dirname,join}from"node:path";import{fileURLToPath}from"node:url";const __dirname=dirname(fileURLToPath(import.meta.url)),cache=new Map;let activeCatalog=null;function flatten(obj,prefix=""){const result=new Map;for(const[k,v]of Object.entries(obj)){const key=prefix?`${prefix}.${k}`:k;if(typeof v=="string")result.set(key,v);else for(const[sk,sv]of flatten(v,key))result.set(sk,sv)}return result}function readLocaleFile(loc){const path=join(__dirname,`${loc}.json`);if(!existsSync(path))return null;try{return JSON.parse(readFileSync(path,"utf-8"))}catch{return process.stderr.write(`[arbiter i18n] malformed locale file: ${path}
3
+ `),null}}function buildLocaleChain(locale){if(!locale||locale==="C"||locale==="POSIX")return["en"];const chain=[locale],noEncoding=locale.replace(/\..+$/,"");noEncoding!==locale&&chain.push(noEncoding);const base=noEncoding.replace(/[_-].+$/,"");return base!==noEncoding&&chain.push(base),chain.includes("en")||chain.push("en"),chain}export function loadCatalog(locale){const cached=cache.get(locale);if(cached)return cached;const chain=buildLocaleChain(locale);for(const loc of chain){const raw=readLocaleFile(loc);if(raw){const catalog=flatten(raw);return cache.set(locale,catalog),catalog}}process.stderr.write(`[arbiter i18n] no locale file found for '${locale}' (chain exhausted)
4
+ `);const fallback=flatten({});return cache.set(locale,fallback),fallback}export function resolveLocale(env){const raw=env.ARBITER_LOCALE||env.LC_ALL||env.LC_MESSAGES||env.LANG||"en";return!raw||raw==="C"||raw==="POSIX"?"en":raw}function getActiveCatalog(){return activeCatalog||(activeCatalog=loadCatalog(resolveLocale(process.env))),activeCatalog}export function t(key,params){let value=getActiveCatalog().get(key)??key;if(params)for(const[k,v]of Object.entries(params))value=value.replaceAll(`{${k}}`,String(v));return value}export function resetForTest(){activeCatalog=null,cache.clear()}
@@ -0,0 +1,2 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ export{};
@@ -0,0 +1,2 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import{detectInstalledSkills}from"./skill-detector.js";import{SKILLS_MATRIX,bareName}from"./skills-matrix.js";export function resolveCompanions(input){if(input.self)return[];const installed=detectInstalledSkills({targetDir:"",claudeHome:input.claudeHome}),installedIds=new Set(installed.map(s=>s.skillId)),installedBare=new Set(installed.map(s=>bareName(s.skillId))),active=[];for(const entry of SKILLS_MATRIX){const one=resolveOne(entry,installedIds,installedBare,input.overrides,input.language);one&&active.push(one)}return active}function resolveOne(entry,installedIds,installedBare,overrides,language){const policy=entry.companion;if(!policy||!installedIds.has(entry.id)&&!installedBare.has(bareName(entry.id)))return null;const override=overrides?.[bareName(entry.id)]??overrides?.[entry.id];return override?.enabled===!1?null:{id:entry.id,label:policy.label,mode:resolveMode(override,policy,language),policy}}const CONSERVATIVE_LITE_STACKS=new Set(["java","kotlin","csharp"]);function resolveModeWithSource(override,policy,language){const mode=override?.mode;return mode==="lite"||mode==="full"?{mode,source:"arbiter.json override"}:language!==void 0&&CONSERVATIVE_LITE_STACKS.has(language)?{mode:"lite",source:"stack default"}:{mode:policy.defaultMode,source:"policy default"}}function resolveMode(override,policy,language){return resolveModeWithSource(override,policy,language).mode}export function companionGreenInstruction(active){return active.filter(c=>c.policy.greenInstruction).map(c=>(c.policy.greenInstruction??"").replaceAll("{mode}",c.mode)).join(" ")}export function companionStatusLine(active){return active.map(c=>`${c.label} (${c.mode})`).join(", ")}export function diagnoseCompanions(input){const installed=detectInstalledSkills({targetDir:"",claudeHome:input.claudeHome}),installedIds=new Set(installed.map(s=>s.skillId)),installedBare=new Set(installed.map(s=>bareName(s.skillId))),out=[];for(const entry of SKILLS_MATRIX){const policy=entry.companion;if(!policy)continue;const override=input.overrides?.[bareName(entry.id)]??input.overrides?.[entry.id],{mode,source}=resolveModeWithSource(override,policy,input.language);out.push({id:entry.id,label:policy.label,installed:installedIds.has(entry.id)||installedBare.has(bareName(entry.id)),disabledByConfig:override?.enabled===!1,mode,modeSource:source})}return out}
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import{existsSync,lstatSync,realpathSync,statSync}from"node:fs";import{tmpdir}from"node:os";import{dirname,isAbsolute,join,relative,resolve,sep}from"node:path";import{currentBranch,headSha}from"../evidence/git-checks.js";import{mkdtempTranslated,readFileContained,readFileTranslated,rmTranslated,toFsError,writeFileContained}from"../utils/fs.js";import{getLogger}from"../utils/logger.js";import{CliError,runCli}from"../utils/run-cli.js";const CODEX_ENV_KEYS=["PATH","HOME","CODEX_HOME","TMPDIR","TMP","TEMP","LANG","LC_ALL","NO_COLOR"],EXTERNAL_REVIEW_SCHEMA="schemas/agent-return-external.schema.json",EXTERNAL_REVIEW_MAX_DIFF_BYTES=512*1024,EXTERNAL_REVIEW_MAX_OUTPUT_BYTES=512*1024,CROSS_MODEL_DISPATCH_SCHEMA="arbiter-cross-model-dispatch-v1";function externalSlotsForTier(tier){return tier==="Standard"?1:0}function slotCount(totalSlots){return Number.isInteger(totalSlots)&&totalSlots>0?totalSlots:0}function fallbackPlan(input,reason){const total=slotCount(input.totalSlots),labels=input.verticals.length>0?input.verticals:["bugs"];return{tier:input.tier,phase:input.phase,external:[],anthropic:Array.from({length:total},(_,index)=>labels[index%labels.length]??"bugs"),degradationReason:reason}}function configuredSlotCount(input){const cfg=input.cfg;return cfg===void 0||!cfg.enabled||!cfg.diffEgressConsent||!cfg.providers.includes("codex")?null:cfg.slots.codeReview<=0?0:!input.access?.available||!input.access.authenticated?null:Math.min(externalSlotsForTier(input.tier),slotCount(input.totalSlots),Math.max(0,cfg.slots.codeReview))}function fallbackReason(input){return input.cfg===void 0||!input.cfg.enabled?"disabled":input.cfg.slots.codeReview<=0?"provider-not-configured":input.cfg.diffEgressConsent?input.cfg.providers.includes("codex")?input.access?.available!==!0?"provider-unavailable":"provider-unauthenticated":"provider-not-configured":"consent-missing"}function preferredVertical(verticals){return verticals.includes("security")?"security":verticals.includes("bugs")?"bugs":verticals[0]??"bugs"}function planCrossModelSlots(input){if(input.phase!=="refactor")return fallbackPlan(input,"disabled");const count=configuredSlotCount(input);if(count===null||count===0)return fallbackPlan(input,fallbackReason(input));const labels=input.verticals.length>0?input.verticals:["bugs"],external=[preferredVertical(labels)],anthropicCount=slotCount(input.totalSlots)-count,anthropic=Array.from({length:anthropicCount},(_,index)=>labels[index%labels.length]??"bugs");return{tier:input.tier,phase:input.phase,external,anthropic}}function parseObject(value){try{const parsed=JSON.parse(value);return isPayloadObject(parsed)?parsed:null}catch{return null}}function isPayloadObject(value){if(value===null||typeof value!="object"||Array.isArray(value))return!1;const record=value;return Object.keys(record).some(key=>!["verdict","confidence","findings","refutations"].includes(key))?!1:(record.verdict==="PASS"||record.verdict==="WARN"||record.verdict==="FAIL")&&typeof record.confidence=="number"&&Array.isArray(record.findings)&&Array.isArray(record.refutations)}function balancedObjectAt(text,start){let depth=0,quoted=!1,escaped=!1;for(let index=start;index<text.length;index++){const char=text[index];if(quoted){escaped?escaped=!1:char==="\\"?escaped=!0:quoted=char!=='"';continue}if(char==='"'){quoted=!0;continue}if(depth+=char==="{"?1:char==="}"?-1:0,depth===0)return{value:text.slice(start,index+1),end:index}}return null}function balancedObjects(text){const objects=[];for(let start=0;start<text.length;start++){if(text[start]!=="{")continue;const object=balancedObjectAt(text,start);object!==null&&(objects.push(object.value),start=object.end)}return objects}function extractAgentReturnJson(text){const trimmed=text.trim();if(trimmed==="")return null;const direct=parseObject(trimmed);if(direct!==null)return direct;const fenced=trimmed.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i)?.[1];if(fenced!==void 0){const parsedFence=parseObject(fenced);if(parsedFence!==null)return parsedFence}let last=null;for(const candidate of balancedObjects(trimmed)){const parsed=parseObject(candidate);parsed!==null&&(last=parsed)}return last}function truncateDiff(diff){const bytes=Buffer.byteLength(diff,"utf8");return bytes<=EXTERNAL_REVIEW_MAX_DIFF_BYTES?{text:diff,bytes,truncated:!1}:{text:Buffer.from(diff,"utf8").subarray(0,EXTERNAL_REVIEW_MAX_DIFF_BYTES).toString("utf8"),bytes,truncated:!0}}function buildPrompt(prompt,diff,truncated){return`${prompt}
3
+
4
+ --- BEGIN DIFF ---
5
+ ${diff}${truncated?`
6
+
7
+ [arbiter cross-model review: diff truncated at 512 KiB; degradation=diff-truncated]
8
+ `:""}--- END DIFF ---
9
+ `}function resultStatus(reasons){return reasons.length>0?"degraded":"fulfilled"}function resultFor(request,prepared,reasons,extra={}){return{provider:"codex",status:resultStatus(reasons),diffBytes:prepared.bytes,diffTruncated:prepared.truncated,degradationReasons:reasons,...reasons[0]!==void 0?{degradationReason:reasons[0]}:{},recorded:extra.recorded??!1,...extra.envelope!==void 0?{envelope:extra.envelope}:{}}}function recorderArgs(request,access){return[join(request.repoRoot,"scripts","record-agent-return.mjs"),"--task",request.taskId,"--repo-root",request.repoRoot,...request.evidenceDir!==void 0?["--evidence-dir",request.evidenceDir]:[],"--provenance-vendor",access.vendor,"--provenance-cli","codex",...access.version!==null?["--provenance-cli-version",access.version]:[],"--provenance-dispatch","external-cli"]}function outputText(outputPath,codex){if(existsSync(outputPath)){if(statSync(outputPath).size>EXTERNAL_REVIEW_MAX_OUTPUT_BYTES)return null;const file=readFileTranslated(outputPath,"utf-8");if(Buffer.byteLength(file,"utf8")>EXTERNAL_REVIEW_MAX_OUTPUT_BYTES)return null;if(file.trim()!=="")return file}return Buffer.byteLength(codex.stdout,"utf8")>EXTERNAL_REVIEW_MAX_OUTPUT_BYTES?null:codex.stdout}function invokeCodex(request,prompt,outputPath,schemaPath){const sandboxRoot=dirname(outputPath),sourceEnv=request.env??process.env,env=Object.fromEntries(CODEX_ENV_KEYS.flatMap(key=>{const value=sourceEnv[key];return value===void 0?[]:[[key,value]]}));return runCli("codex",["exec","--strict-config","--ephemeral","--ignore-user-config","-c",'shell_environment_policy.inherit="none"',"-c",'default_permissions="arbiter-cross-model-review"',"-c",'permissions.arbiter-cross-model-review.extends=":read-only"',"-c",'permissions.arbiter-cross-model-review.filesystem.:root="deny"',"-c",'permissions.arbiter-cross-model-review.filesystem.:minimal="read"',"-c","permissions.arbiter-cross-model-review.network.enabled=false","--skip-git-repo-check","--output-schema",schemaPath,"-o",outputPath,"-C",sandboxRoot,"-"],{cwd:sandboxRoot,env,input:prompt,timeoutMs:request.cfg.timeoutMs,retries:0})}function persistEnvelope(request,access,envelope){return request.evidenceDir===void 0&&assertSafeDirectoryPath(request.repoRoot,join(request.repoRoot,".arbiter","evidence","agent-returns",sanitizeTask(request.taskId))),runCli("node",recorderArgs(request,access),{cwd:request.repoRoot,input:JSON.stringify({schema:"arbiter-agent-return-v1",agent:"codex-reviewer",role:"reviewer",taskId:request.taskId,verdict:envelope.verdict,confidence:envelope.confidence,findings:envelope.findings,refutations:envelope.refutations}),timeoutMs:request.cfg.timeoutMs,retries:0}).stdout.match(/\[record-agent-return\] OK — wrote (.+)\s*$/m)?.[1]??null}function sanitizeTask(taskId){return taskId.replace(/[^a-zA-Z0-9_-]/g,"_").slice(0,64)||"unknown"}const DIRECT_DISPATCH_REASONS={"consent-missing":"consent-absent","provider-unauthenticated":"not-authenticated",disabled:"disabled-by-env","provider-not-configured":"disabled-by-env","diff-truncated":"diff-truncated","coercion-failed":"coercion-failed","envelope-rejected":"envelope-rejected"};function dispatchReasonFromCliError(error){return error instanceof CliError?error.notFound?"cli-not-found":error.timedOut?"timeout":"nonzero-exit":"nonzero-exit"}function dispatchReasonFromUnavailableError(error){const detail=errorMessage(error)?.toLowerCase();return detail?.includes("timed out")||detail?.includes("timeout")?"timeout":detail?.includes("exit")||detail?.includes("failed")?"nonzero-exit":"cli-not-found"}function dispatchReason(reason,error){return DIRECT_DISPATCH_REASONS[reason]??(reason==="invocation-failed"?dispatchReasonFromCliError(error):reason==="provider-unavailable"?dispatchReasonFromUnavailableError(error):"nonzero-exit")}function errorMessage(error){return typeof error=="string"&&error.trim()!==""?error.trim():error instanceof Error&&error.message.trim()!==""?error.message.trim():null}function nonzeroExitDetail(error,message){return error instanceof CliError?`${error.cmd==="codex"?"Codex":error.cmd} exited with status ${error.exitCode}`:message??"Codex CLI exited unsuccessfully"}function dispatchDetail(reason,error){const message=errorMessage(error);return reason==="cli-not-found"?error instanceof CliError&&error.notFound?`Command not found: ${error.cmd}`:message??"Codex CLI unavailable":reason==="timeout"?message??"Codex invocation timed out":reason==="nonzero-exit"?nonzeroExitDetail(error,message):{"not-authenticated":"Codex CLI is not authenticated","consent-absent":"cross-model diff egress consent is absent","disabled-by-env":"cross-model review is disabled by configuration or environment","coercion-failed":"Codex output did not contain a valid review payload","envelope-rejected":"the recorder rejected the Codex envelope","diff-truncated":"diff exceeded the 512 KiB review limit"}[reason]}function relativeEvidencePath(repoRoot,path){return path===null?null:relative(repoRoot,path).replaceAll("\\","/")}function requestedEntries(request,plan){return!request.cfg.enabled||request.cfg.slots.codeReview<=0||plan.phase!=="refactor"||externalSlotsForTier(request.tier??"Standard")===0?[]:[{provider:"codex",vertical:request.vertical??plan.external[0]??"bugs"}]}function fulfilledEntries(request,result,envelopePath){return result.status!=="fulfilled"||result.envelope===void 0||!result.recorded||envelopePath===null?[]:[{provider:"codex",cliVersion:request.access?.version??"unknown",envelope:relativeEvidencePath(request.repoRoot,envelopePath)??envelopePath}]}function degradedEntries(request,plan,result,error){if(request.cfg.slots.codeReview<=0||plan.phase!=="refactor"||externalSlotsForTier(request.tier??"Standard")===0)return[];if(result.status!=="degraded")return[];const vertical=request.vertical??plan.external[0]??"bugs",originalReason=result.degradationReasons.at(-1)??plan.degradationReason;if(originalReason===void 0)return[];const reason=dispatchReason(originalReason,error);return[{provider:"codex",vertical,substitute:"anthropic",reason,detail:dispatchDetail(reason,error)}]}function writeDispatchEvidence(request,plan,result,envelopePath,error){const artifact={schema:CROSS_MODEL_DISPATCH_SCHEMA,taskId:request.taskId,branch:currentBranch(request.repoRoot),sha:headSha(request.repoRoot),ts:new Date().toISOString(),phase:request.phase??plan.phase,requested:requestedEntries(request,plan),fulfilled:fulfilledEntries(request,result,envelopePath),degraded:degradedEntries(request,plan,result,error??request.access?.error)},content=`${JSON.stringify(artifact,null,2)}
10
+ `;if(request.dispatchEvidenceDir!==void 0){writeFileContained(request.dispatchEvidenceDir,join(sanitizeTask(request.taskId),"dispatch.json"),content);return}writeFileContained(request.repoRoot,join(".arbiter","evidence","cross-model",sanitizeTask(request.taskId),"dispatch.json"),content)}function outsideRoot(root,candidate){const path=relative(root,candidate);return isAbsolute(path)||path===".."||path.startsWith(`..${sep}`)}function assertSafeDirectoryPath(repoRoot,targetPath){let repoResolved;try{repoResolved=realpathSync(repoRoot)}catch(error){throw toFsError(error,repoRoot)}const target=resolve(targetPath);if(outsideRoot(repoResolved,target))throw new Error(`${targetPath} resolves outside the repository`);let current=target;for(;current!==repoResolved;){try{const stat=lstatSync(current);if(stat.isSymbolicLink())throw new Error(`${current} must not be a symbolic link`);if(!stat.isDirectory())throw new Error(`${current} must be a directory`);if(outsideRoot(repoResolved,realpathSync(current)))throw new Error(`${current} resolves outside the repository`)}catch(error){if(error.code!=="ENOENT")throw toFsError(error,current)}current=dirname(current)}}function assertSafeArbiterEvidenceRoot(repoRoot){for(const path of[join(repoRoot,".arbiter"),join(repoRoot,".arbiter","evidence"),join(repoRoot,".arbiter","evidence","cross-model"),join(repoRoot,".arbiter","evidence","agent-returns")])assertSafeDirectoryPath(repoRoot,path)}function finalizeResult(request,plan,result,envelopePath=null,error){if(writeDispatchEvidence(request,plan,result,envelopePath,error),request.cfg.onUnavailable==="fail"&&result.status==="degraded")throw new Error(`cross-model review unavailable: ${result.degradationReasons.join(", ")}`);return result}function cleanupTemp(dir){try{rmTranslated(dir,{recursive:!0,force:!0})}catch(error){getLogger().warn("cross_model_review.temp_cleanup_failed",{path:dir},`could not remove external-review scratch directory: ${error instanceof Error?error.message:String(error)}`)}}function resultWithoutExternal(request,plan,prepared){const reasons=request.cfg.slots.codeReview<=0||externalSlotsForTier(request.tier??"Standard")===0||plan.phase!=="refactor"?[]:[request.preflightDegradation??plan.degradationReason??"provider-unavailable"],result=resultFor(request,prepared,reasons);return request.cfg.enabled?finalizeResult(request,plan,result,null,request.preflightError):result}function persistExternalPayload(request,plan,prepared,reasons,payload){let envelopePath;try{if(request.access===void 0)throw new Error("external access disappeared before persistence");if(envelopePath=persistEnvelope(request,request.access,payload),envelopePath===null)throw new Error("recorder did not confirm envelope persistence")}catch(error){return finalizeResult(request,plan,resultFor(request,prepared,[...reasons,"envelope-rejected"],{envelope:payload}),null,error)}return finalizeResult(request,plan,resultFor(request,prepared,reasons,{envelope:payload,recorded:!0}),envelopePath)}function prepareExternalReview(request){request.cfg.enabled&&(request.dispatchEvidenceDir===void 0||request.evidenceDir===void 0)&&assertSafeArbiterEvidenceRoot(request.repoRoot);const prepared=truncateDiff(request.diff),tier=request.tier??"Standard",initial=planCrossModelSlots({tier,phase:request.phase??"refactor",totalSlots:externalSlotsForTier(tier),verticals:[request.vertical??"bugs"],cfg:request.cfg,...request.access!==void 0?{access:request.access}:{}});return{prepared,initial}}function invokeExternalReview(request){const{prepared,initial}=prepareExternalReview(request);if(initial.external.length===0)return resultWithoutExternal(request,initial,prepared);const reasons=prepared.truncated?["diff-truncated"]:[],prompt=buildPrompt(request.prompt,prepared.text,prepared.truncated);let scratch=null;try{scratch=mkdtempTranslated(join(tmpdir(),"arbiter-cross-model-review-"));const outputPath=join(scratch,"return.json"),schemaPath=join(scratch,"agent-return-external.schema.json");writeFileContained(scratch,"agent-return-external.schema.json",readFileContained(request.repoRoot,EXTERNAL_REVIEW_SCHEMA));const codex=invokeCodex(request,prompt,outputPath,schemaPath),output=outputText(outputPath,codex),payload=output===null?null:extractAgentReturnJson(output);return payload===null?finalizeResult(request,initial,resultFor(request,prepared,[...reasons,"coercion-failed"]),null):persistExternalPayload(request,initial,prepared,reasons,payload)}catch(error){if(error instanceof Error&&error.message.startsWith("cross-model review unavailable:"))throw error;return finalizeResult(request,initial,resultFor(request,prepared,[...reasons,"invocation-failed"]),null,error)}finally{scratch!==null&&cleanupTemp(scratch)}}export{externalSlotsForTier,planCrossModelSlots,extractAgentReturnJson,assertSafeArbiterEvidenceRoot,invokeExternalReview};
@@ -0,0 +1,2 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import{z}from"zod";const PluginPackageSchema=z.object({name:z.string().regex(/^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/,"Invalid npm package name"),version:z.string().regex(/^\d+\.\d+\.\d+/,"Must follow semver (MAJOR.MINOR.PATCH)"),keywords:z.array(z.string()).refine(kw=>kw.includes("arbiter-plugin"),{message:'keywords must include "arbiter-plugin"'}),main:z.string().optional(),module:z.string().optional(),peerDependencies:z.record(z.string(),z.string()).optional()});export function validatePluginPackageJson(raw){const result=PluginPackageSchema.safeParse(raw);return result.success?{ok:!0,errors:[]}:{ok:!1,errors:result.error.issues.map(i=>`${i.path.join(".")}: ${i.message}`)}}
@@ -0,0 +1,7 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import{existsSync,readdirSync,readFileSync,statSync}from"node:fs";import{join}from"node:path";const MAX_DEPTH=6,MAX_ENTRIES=5e4,SKIP_DIRS=new Set(["node_modules"]);function parseFrontmatter(content){const normalized=content.replace(/\r\n/g,`
3
+ `);if(!normalized.startsWith(`---
4
+ `))return null;const end=normalized.indexOf(`
5
+ ---`,4);if(end===-1)return null;const block=normalized.slice(4,end),result={};for(const line of block.split(`
6
+ `)){const colon=line.indexOf(":");if(colon===-1)continue;const key=line.slice(0,colon).trim();let val=line.slice(colon+1).trim();(val.startsWith('"')&&val.endsWith('"')||val.startsWith("'")&&val.endsWith("'"))&&(val=val.slice(1,-1)),key&&(result[key]=val)}return result}function sortedDirectoryEntries(dir){try{return readdirSync(dir).sort()}catch{return null}}function visitSkillEntry(dir,entry,depth,context){const{found,count}=context;if(entry.startsWith(".")||SKIP_DIRS.has(entry))return;const full=join(dir,entry);let stat;try{stat=statSync(full)}catch{return}if(stat.isDirectory()){findSkillFiles(full,depth+1,context);return}entry==="SKILL.md"&&(found.push(full),count.n++)}function findSkillFiles(dir,depth,context){const{count,limits}=context;if(depth>limits.maxDepth||count.n>=limits.maxEntries||!existsSync(dir))return;const entries=sortedDirectoryEntries(dir);if(entries!==null)for(const entry of entries){if(count.n>=limits.maxEntries){count.truncated=!0;break}visitSkillEntry(dir,entry,depth,context)}}function derivePluginOwner(path,root){const segs=path.split(/[\\/]+/).filter(Boolean),rootLen=root.split(/[\\/]+/).filter(Boolean).length,rel=segs.slice(rootLen),skillsIdx=rel.lastIndexOf("skills");return skillsIdx>=1?rel[skillsIdx-2]??rel[skillsIdx-1]??"plugin":rel.length>=4?rel[rel.length-4]??"plugin":rel.length>=3?rel[rel.length-3]??"plugin":"plugin"}function readSkill(path,deriveOwner){let content;try{content=readFileSync(path,"utf-8")}catch{return null}const fm=parseFrontmatter(content);if(!fm||!fm.name)return null;const owner=fm.pluginOwner??deriveOwner(path);return{skillId:`${owner}:${fm.name}`,pluginOwner:owner,version:fm.version??"unknown",sourcePath:path,...fm.role?{role:fm.role}:{}}}function collectFromDir(dir,seen,results,deriveOwner,limits){const found=[],count={n:0,truncated:!1};findSkillFiles(dir,0,{found,count,limits}),count.truncated&&process.stderr.write(`[arbiter] skill scan reached MAX_ENTRIES (${limits.maxEntries}) under ${dir}; results may be partial
7
+ `);for(const path of found){const skill=readSkill(path,deriveOwner);skill&&(seen.has(skill.skillId)||(seen.add(skill.skillId),results.push(skill)))}}const projectOwner=()=>"project",userOwner=()=>"user";export function detectInstalledSkills(opts){const{targetDir,claudeHome}=opts,limits=opts.scanLimits??{maxDepth:MAX_DEPTH,maxEntries:MAX_ENTRIES},cacheKey=`${targetDir}\0${claudeHome}\0${limits.maxDepth}\0${limits.maxEntries}`,hit=skillCache.get(cacheKey);if(hit)return hit;const seen=new Set,results=[];if(targetDir){const pluginsRoot=join(targetDir,".claude","plugins");collectFromDir(pluginsRoot,seen,results,p=>derivePluginOwner(p,pluginsRoot),limits),collectFromDir(join(targetDir,".claude","skills"),seen,results,projectOwner,limits)}if(claudeHome){const cacheRoot=join(claudeHome,"plugins","cache");collectFromDir(cacheRoot,seen,results,p=>derivePluginOwner(p,cacheRoot),limits),collectFromDir(join(claudeHome,"skills"),seen,results,userOwner,limits)}return Object.freeze(results),skillCache.set(cacheKey,results),results}const skillCache=new Map;export function clearSkillCache(){skillCache.clear()}
@@ -0,0 +1,2 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import{SKILL_NAMES}from"../generators/skills.js";export function bareName(id){return id.includes(":")?id.split(":")[1]??id:id}const ARBITER_SKILLS=SKILL_NAMES.map(id=>({id,owner:"arbiter",role:"governance",installCmd:"arbiter init # generates automatically",installSource:"builtin"})),UPSTREAM_SKILLS=[{id:"superpowers:using-superpowers",owner:"claude-plugins-official",role:"session-bootstrap",installCmd:"/plugin add claude-plugins-official/superpowers",installSource:"plugin"},{id:"pr-review-toolkit:review-pr",owner:"claude-plugins-official",role:"pr-review",installCmd:"/plugin add claude-plugins-official/pr-review-toolkit",installSource:"plugin"},{id:"frontend-design:frontend-design",owner:"claude-plugins-official",role:"ui-design",installCmd:"/plugin add claude-plugins-official/frontend-design",installSource:"plugin"},{id:"ponytail:ponytail",owner:"DietrichGebert",role:"drafting-persona",installCmd:"/plugin marketplace add DietrichGebert/ponytail && /plugin install ponytail@ponytail",installSource:"plugin",companion:{label:"ponytail",defaultMode:"full",greenInstruction:"Companion ponytail is active in {mode} mode: while implementing, climb ponytail\u2019s YAGNI ladder \u2014 reuse existing code, prefer stdlib/native features, resist new dependencies and speculative abstractions, and ship the shortest working diff. Never skip tests, input validation, security, or error handling, and never use ultra mode \u2014 arbiter\u2019s gates remain the safety net."}}];export const SKILLS_MATRIX=[...ARBITER_SKILLS,...UPSTREAM_SKILLS];
@@ -0,0 +1,23 @@
1
+ export interface InstalledSkill {
2
+ /** Composite key: "<pluginOwner>:<skillName>" */
3
+ skillId: string;
4
+ pluginOwner: string;
5
+ version: string;
6
+ sourcePath: string;
7
+ role?: string;
8
+ }
9
+ export interface SkillMatrixEntry {
10
+ skillId: string;
11
+ pluginOwner: string;
12
+ versionRange: string;
13
+ role: string;
14
+ integrationStatus: 'proven' | 'beta' | 'unknown';
15
+ /** Built-in SKILL_NAMES this skill replaces when detected */
16
+ replaces: string[];
17
+ referenceUrl: string;
18
+ }
19
+ export interface SkipReport {
20
+ generator: string;
21
+ reason: string;
22
+ replacedBy: string;
23
+ }
@@ -0,0 +1,2 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ export{};
@@ -0,0 +1,2 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ export const CLI_DEPRECATED_FLAGS=[{flag:"--no-adopt-gate-spine",stage:"warn",deprecatedIn:"0.5.0",removeIn:"0.8.0",replacement:"(none \u2014 omit the flag; withholding the gate spine is already the default)"},{flag:"--no-adopt-governance",stage:"warn",deprecatedIn:"0.5.0",removeIn:"0.8.0",replacement:"(none \u2014 omit the flag; withholding governance files is already the default)"}];
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ export function applyDeprecatedFlagFilter(argv,registry){const remaining=[];for(const arg of argv){const eqIdx=arg.indexOf("="),flagName=eqIdx===-1?arg:arg.slice(0,eqIdx),record=registry.find(r=>r.flag===flagName);if(record===void 0){remaining.push(arg);continue}if(record.stage==="remove")return{remaining:argv,exitCode:1,errorMessage:`[arbiter] "${record.flag}" was removed in ${record.removeIn}. Use "${record.replacement}" instead. See docs/DEPRECATIONS.md.`};process.stderr.write(`[arbiter] DEPRECATED: "${record.flag}" is deprecated (since ${record.deprecatedIn}, removed in ${record.removeIn}). Use "${record.replacement}" instead.
3
+ `),record.stage==="warn"&&remaining.push(arg)}return{remaining}}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ const warned=new Set;export function warnExperimental(name){warned.has(name)||(warned.add(name),process.stderr.write(`[arbiter] EXPERIMENTAL: "${name}" is an experimental feature and may change without notice. Enable with --experimental.${name}.
3
+ `))}export function _resetWarned(){warned.clear()}
@@ -0,0 +1,2 @@
1
+ import type { Invariant } from './types.js';
2
+ export declare const INVARIANT_CATALOG: readonly Invariant[];