@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.
- package/CHANGELOG.md +713 -0
- package/LICENSE +202 -0
- package/NOTICE +31 -0
- package/PRIVACY.md +111 -0
- package/README.md +237 -0
- package/THIRD_PARTY_LICENSES.md +472 -0
- package/dist/.src-manifest.json +1 -0
- package/dist/capabilities/host-probe.js +3 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +87 -0
- package/dist/commands/adopt-policy.js +3 -0
- package/dist/commands/configure-interactive.js +3 -0
- package/dist/commands/configure.js +5 -0
- package/dist/commands/cross-model-review.js +3 -0
- package/dist/commands/diff.js +20 -0
- package/dist/commands/doc-set.js +3 -0
- package/dist/commands/doctor/clean.js +2 -0
- package/dist/commands/doctor/fail-open-census.js +12 -0
- package/dist/commands/doctor/health.js +11 -0
- package/dist/commands/doctor/prove-gates.js +13 -0
- package/dist/commands/doctor/recover-lock.js +12 -0
- package/dist/commands/doctor/repair-state.js +6 -0
- package/dist/commands/doctor/tool-pin-extract.js +4 -0
- package/dist/commands/doctor/tool-pins.js +9 -0
- package/dist/commands/doctor-interactive.js +2 -0
- package/dist/commands/doctor.js +2 -0
- package/dist/commands/explain.js +19 -0
- package/dist/commands/gate-exec.js +4 -0
- package/dist/commands/gold-audit.js +14 -0
- package/dist/commands/graph.js +5 -0
- package/dist/commands/init/build-arbiter-config.js +1 -0
- package/dist/commands/init/generate.js +42 -0
- package/dist/commands/init/github-setup.js +5 -0
- package/dist/commands/init/maturity-gates.js +10 -0
- package/dist/commands/init/resolve-config.js +3 -0
- package/dist/commands/init/toolchain.js +10 -0
- package/dist/commands/init/types.js +1 -0
- package/dist/commands/init.js +17 -0
- package/dist/commands/method-interactive.js +4 -0
- package/dist/commands/method.js +11 -0
- package/dist/commands/obsidian.js +2 -0
- package/dist/commands/plugin.js +8 -0
- package/dist/commands/pr-merged.js +2 -0
- package/dist/commands/retire-policy.js +3 -0
- package/dist/commands/review-diff.js +3 -0
- package/dist/commands/settings.js +7 -0
- package/dist/commands/ship-config.js +2 -0
- package/dist/commands/ship-profile.js +2 -0
- package/dist/commands/ship-review.js +1 -0
- package/dist/commands/ship-tier.js +2 -0
- package/dist/commands/ship-train.js +2 -0
- package/dist/commands/task-mark.js +2 -0
- package/dist/commands/task-note.js +3 -0
- package/dist/commands/task-record-red.js +2 -0
- package/dist/commands/task-record-tech-debt.js +4 -0
- package/dist/commands/task-ship.js +3 -0
- package/dist/commands/task-state.js +6 -0
- package/dist/commands/task.js +59 -0
- package/dist/commands/update.js +60 -0
- package/dist/commands/upgrade-level-interactive.js +2 -0
- package/dist/commands/upgrade-level.js +7 -0
- package/dist/commands/verify-plan.js +8 -0
- package/dist/commands/verify-tdd.js +2 -0
- package/dist/commands/verify.js +7 -0
- package/dist/commands/wizard/coherence.js +1 -0
- package/dist/commands/worktree-prune.js +4 -0
- package/dist/commands/worktree.js +39 -0
- package/dist/compatibility/cross-language-matrix.json +540 -0
- package/dist/compatibility/index.d.ts +4 -0
- package/dist/compatibility/index.js +2 -0
- package/dist/compatibility/matcher.js +1 -0
- package/dist/compatibility/matrix.json +27 -0
- package/dist/compatibility/parsers.d.ts +38 -0
- package/dist/compatibility/parsers.js +1 -0
- package/dist/compatibility/probe.d.ts +41 -0
- package/dist/compatibility/probe.js +4 -0
- package/dist/compatibility/report.js +2 -0
- package/dist/compatibility/schema.d.ts +80 -0
- package/dist/compatibility/schema.js +1 -0
- package/dist/compatibility/skills-matrix.json +98 -0
- package/dist/compatibility/skills-validator.d.ts +30 -0
- package/dist/compatibility/skills-validator.js +4 -0
- package/dist/compatibility/tooling-proposals.json +5 -0
- package/dist/config/arbiter-ignore.js +3 -0
- package/dist/config/collaboration-mode-defaults.js +1 -0
- package/dist/config/diff.js +1 -0
- package/dist/config/env-overrides.js +3 -0
- package/dist/config/env-registry.js +2 -0
- package/dist/config/levels.js +1 -0
- package/dist/config/migrations/index.js +2 -0
- package/dist/config/migrations/v0-to-v1.js +2 -0
- package/dist/config/migrations/v1-to-v2.js +2 -0
- package/dist/config/migrations/v2-to-v3.js +2 -0
- package/dist/config/migrations/v3-to-v4.js +2 -0
- package/dist/config/override-resolver.js +2 -0
- package/dist/config/resolve-project-config.js +2 -0
- package/dist/config/resolve-project-name.js +2 -0
- package/dist/config/schema.d.ts +480 -0
- package/dist/config/schema.js +1 -0
- package/dist/config/test-pyramid-profiles.js +1 -0
- package/dist/config/thresholds.js +2 -0
- package/dist/conformance/dimensions.js +3 -0
- package/dist/conformance/engine.js +7 -0
- package/dist/conformance/gate-proofs.js +4 -0
- package/dist/conformance/shared.js +2 -0
- package/dist/detectors/axis.js +1 -0
- package/dist/detectors/build.js +2 -0
- package/dist/detectors/existing.js +2 -0
- package/dist/detectors/external-model.js +2 -0
- package/dist/detectors/framework.js +2 -0
- package/dist/detectors/git.js +11 -0
- package/dist/detectors/github.js +2 -0
- package/dist/detectors/lanes.js +5 -0
- package/dist/detectors/language-hooks.js +117 -0
- package/dist/detectors/language.js +2 -0
- package/dist/detectors/package-manager.js +2 -0
- package/dist/detectors/package.js +2 -0
- package/dist/detectors/scaffold-wiring.js +2 -0
- package/dist/detectors/workflow-collision.js +4 -0
- package/dist/evidence/gate-binding.js +4 -0
- package/dist/evidence/git-checks.js +3 -0
- package/dist/evidence/load.js +2 -0
- package/dist/evidence/provenance.js +2 -0
- package/dist/evidence/summary.js +2 -0
- package/dist/evidence/tdd-reexecute.js +2 -0
- package/dist/evidence/tdd.js +4 -0
- package/dist/experimental/index.js +2 -0
- package/dist/experimental/parse-argv.js +2 -0
- package/dist/experimental/registry.js +2 -0
- package/dist/generators/agents-claude.js +2 -0
- package/dist/generators/agents-md.js +2 -0
- package/dist/generators/anti-drift-validators.js +3 -0
- package/dist/generators/anti-proforma.js +2 -0
- package/dist/generators/api-e2e.js +2 -0
- package/dist/generators/api-middleware.js +2 -0
- package/dist/generators/archunit.js +2 -0
- package/dist/generators/audit-toolchain.js +2 -0
- package/dist/generators/auth.js +2 -0
- package/dist/generators/behavioral-tests.js +2 -0
- package/dist/generators/boundaries.js +2 -0
- package/dist/generators/check-all.js +2 -0
- package/dist/generators/check-stack-conformity.js +2 -0
- package/dist/generators/ci-five-lane.js +2 -0
- package/dist/generators/ci-tier.js +2 -0
- package/dist/generators/claude.js +3 -0
- package/dist/generators/codex-hooks.js +2 -0
- package/dist/generators/codex-known-limitations.js +2 -0
- package/dist/generators/codex.js +15 -0
- package/dist/generators/commit-footer.js +2 -0
- package/dist/generators/compliance-menu.js +2 -0
- package/dist/generators/compliance.js +2 -0
- package/dist/generators/conformance.js +2 -0
- package/dist/generators/contract-testing.js +2 -0
- package/dist/generators/coverage.js +2 -0
- package/dist/generators/debt-gates.js +24 -0
- package/dist/generators/debt-ratchet.js +2 -0
- package/dist/generators/derived-class.js +2 -0
- package/dist/generators/doc-set.js +4 -0
- package/dist/generators/docs.js +2 -0
- package/dist/generators/duplication.js +2 -0
- package/dist/generators/e2e-constitution.js +2 -0
- package/dist/generators/env-template.js +2 -0
- package/dist/generators/evidence-retention.js +2 -0
- package/dist/generators/feature-matrix.js +2 -0
- package/dist/generators/frontend-governance.js +2 -0
- package/dist/generators/frontend-quality.js +2 -0
- package/dist/generators/gap.js +2 -0
- package/dist/generators/gdpr.js +2 -0
- package/dist/generators/githooks.js +2 -0
- package/dist/generators/github-setup.js +2 -0
- package/dist/generators/github.js +2 -0
- package/dist/generators/gitignore.js +2 -0
- package/dist/generators/global-invariants.js +3 -0
- package/dist/generators/go-boundaries.js +2 -0
- package/dist/generators/gold-kit.js +2 -0
- package/dist/generators/infra.js +2 -0
- package/dist/generators/integration-testing.js +7 -0
- package/dist/generators/iso27001.js +2 -0
- package/dist/generators/iso9001.js +2 -0
- package/dist/generators/labels.js +2 -0
- package/dist/generators/local-wrapper.js +2 -0
- package/dist/generators/modulith.js +2 -0
- package/dist/generators/mutation.js +2 -0
- package/dist/generators/observability.js +2 -0
- package/dist/generators/operations.js +2 -0
- package/dist/generators/perf-k6.js +2 -0
- package/dist/generators/pharma.js +2 -0
- package/dist/generators/playwright-python.js +2 -0
- package/dist/generators/playwright-ts.js +2 -0
- package/dist/generators/pr-tooling.js +2 -0
- package/dist/generators/python-boundaries.js +2 -0
- package/dist/generators/quality.js +2 -0
- package/dist/generators/registry.js +2 -0
- package/dist/generators/regulated.js +2 -0
- package/dist/generators/resilience.js +2 -0
- package/dist/generators/risk-register.js +2 -0
- package/dist/generators/root.js +2 -0
- package/dist/generators/rust-boundaries.js +2 -0
- package/dist/generators/safety-class.js +2 -0
- package/dist/generators/security.js +2 -0
- package/dist/generators/seed.js +2 -0
- package/dist/generators/self-validation.js +2 -0
- package/dist/generators/ship-driver.js +2 -0
- package/dist/generators/skill-names.json +17 -0
- package/dist/generators/skills.js +2 -0
- package/dist/generators/smoke-journeys.js +2 -0
- package/dist/generators/solo-exception.js +2 -0
- package/dist/generators/ssot.js +2 -0
- package/dist/generators/stride-enforcement.js +2 -0
- package/dist/generators/suppressions.js +2 -0
- package/dist/generators/test-pyramid-manifest.js +3 -0
- package/dist/generators/test-taxonomy.js +2 -0
- package/dist/generators/wiki.js +2 -0
- package/dist/github/branch-protection.js +2 -0
- package/dist/github/classify-gh-error.js +2 -0
- package/dist/github/labels.js +2 -0
- package/dist/github/project-board.js +2 -0
- package/dist/graph/builders/adr.js +4 -0
- package/dist/graph/builders/ast.js +3 -0
- package/dist/graph/builders/canon.js +2 -0
- package/dist/graph/builders/evidence.js +2 -0
- package/dist/graph/builders/inv.js +1 -0
- package/dist/graph/builders/req.js +3 -0
- package/dist/graph/builders/test-nodes.js +3 -0
- package/dist/graph/builders/utils.js +2 -0
- package/dist/graph/load.js +2 -0
- package/dist/graph/model.js +2 -0
- package/dist/graph/query.js +3 -0
- package/dist/graph/store.js +1 -0
- package/dist/i18n/en.json +293 -0
- package/dist/i18n/index.js +4 -0
- package/dist/i18n/types.js +2 -0
- package/dist/integrations/companions.js +2 -0
- package/dist/integrations/external-review.js +10 -0
- package/dist/integrations/plugin-schema.js +2 -0
- package/dist/integrations/skill-detector.js +7 -0
- package/dist/integrations/skills-matrix.js +2 -0
- package/dist/integrations/types.d.ts +23 -0
- package/dist/integrations/types.js +2 -0
- package/dist/internal/cli-deprecation-registry.js +2 -0
- package/dist/internal/deprecate.js +3 -0
- package/dist/internal/experimental-warn.js +3 -0
- package/dist/invariants/catalog.d.ts +2 -0
- package/dist/invariants/catalog.js +1 -0
- package/dist/invariants/filter.d.ts +28 -0
- package/dist/invariants/filter.js +1 -0
- package/dist/invariants/index.d.ts +4 -0
- package/dist/invariants/index.js +2 -0
- package/dist/invariants/tiers.js +1 -0
- package/dist/invariants/types.d.ts +1 -0
- package/dist/invariants/types.js +1 -0
- package/dist/kit/applicability.js +3 -0
- package/dist/kit/audit-report.js +3 -0
- package/dist/kit/brownfield-detect.js +4 -0
- package/dist/kit/canonical-mapping.json +1 -0
- package/dist/kit/catalog.js +2 -0
- package/dist/kit/catalog.json +1 -0
- package/dist/kit/derived.json +1 -0
- package/dist/kit/emit-issues.js +8 -0
- package/dist/kit/measure.js +5 -0
- package/dist/kit/redaction.js +3 -0
- package/dist/kit/schema.js +2 -0
- package/dist/kit/taxonomy.js +2 -0
- package/dist/kit/thresholds.d.ts +12 -0
- package/dist/kit/thresholds.js +2 -0
- package/dist/kit/wave-engine.js +1 -0
- package/dist/recipes/loader.js +6 -0
- package/dist/recipes/schema.js +2 -0
- package/dist/risk/classifier.js +2 -0
- package/dist/risk/sha-check.js +2 -0
- package/dist/state/backups.js +2 -0
- package/dist/state/envelope.js +2 -0
- package/dist/state/generated-manifest.js +3 -0
- package/dist/state/manifest-key.js +2 -0
- package/dist/state/migrations/index.js +1 -0
- package/dist/state/migrations/v0-to-v1.js +2 -0
- package/dist/state/retired-renders.js +2 -0
- package/dist/templates/.nvmrc.ejs +1 -0
- package/dist/templates/HANDOFF.template.md +45 -0
- package/dist/templates/__tests__/contract/error-shape.contract.test.ts.ejs +47 -0
- package/dist/templates/agents-md/AGENTS.md.ejs +517 -0
- package/dist/templates/api-e2e/README.md.ejs +33 -0
- package/dist/templates/api-e2e/go-httptest.go.ejs +43 -0
- package/dist/templates/api-e2e/java-restassured.java.ejs +28 -0
- package/dist/templates/api-e2e/kotlin-restassured.kt.ejs +30 -0
- package/dist/templates/api-e2e/manifest.json.ejs +8 -0
- package/dist/templates/api-e2e/postman.collection.json.ejs +30 -0
- package/dist/templates/api-e2e/python-httpx.py.ejs +17 -0
- package/dist/templates/api-e2e/run.sh.ejs +61 -0
- package/dist/templates/api-e2e/ts-supertest.test.ts.ejs +18 -0
- package/dist/templates/archunit/AntiCyclicTest.java.ejs +29 -0
- package/dist/templates/archunit/AntiProformaExempt.java.ejs +35 -0
- package/dist/templates/archunit/AntiProformaTest.java.ejs +104 -0
- package/dist/templates/archunit/ArchitectureTest.java.ejs +87 -0
- package/dist/templates/archunit/DependencyFlowTest.java.ejs +55 -0
- package/dist/templates/archunit/DomainPurityTest.java.ejs +47 -0
- package/dist/templates/archunit/NamingConventionsTest.java.ejs +54 -0
- package/dist/templates/archunit/NoH2ArchTest.java.ejs +30 -0
- package/dist/templates/archunit/NoMockMvcTest.java.ejs +71 -0
- package/dist/templates/archunit/PortsIndependenceTest.java.ejs +55 -0
- package/dist/templates/archunit/RestAssuredArchTest.java.ejs +32 -0
- package/dist/templates/archunit/RestAssuredBaseIT.java.ejs +66 -0
- package/dist/templates/archunit/TestCoverageArchTest.java.ejs +29 -0
- package/dist/templates/archunit/arch-test-deps-maven.md.ejs +42 -0
- package/dist/templates/archunit/arch-test-deps.gradle.ejs +14 -0
- package/dist/templates/audit/gdpr/check-gdpr-controls.mjs.ejs +102 -0
- package/dist/templates/audit/gdpr/controls-to-gates.md.ejs +42 -0
- package/dist/templates/audit/gdpr/data-flow-map.md.ejs +30 -0
- package/dist/templates/audit/gdpr/dpia.md.ejs +45 -0
- package/dist/templates/audit/generic/audit-gate-rules.md.ejs +24 -0
- package/dist/templates/audit/generic/audit-trail-policy.md.ejs +38 -0
- package/dist/templates/audit/iso27001/iso27001-controls-gate-map.md.ejs +60 -0
- package/dist/templates/auth/setup.md.ejs +661 -0
- package/dist/templates/behavioral-tests/ExampleBehavioralTest.java.ejs +67 -0
- package/dist/templates/behavioral-tests/TESTING_POLICY.md.ejs +116 -0
- package/dist/templates/behavioral-tests/bdd/ExampleBddIT.java.ejs +19 -0
- package/dist/templates/behavioral-tests/bdd/ExampleSteps.java.ejs +61 -0
- package/dist/templates/behavioral-tests/bdd/example.feature.ejs +14 -0
- package/dist/templates/behavioral-tests/bdd/example.steps.ts.ejs +37 -0
- package/dist/templates/behavioral-tests/bdd/example_bdd_test.rs.ejs +64 -0
- package/dist/templates/behavioral-tests/bdd/example_test.go.ejs +80 -0
- package/dist/templates/behavioral-tests/bdd/test_example_bdd.py.ejs +47 -0
- package/dist/templates/behavioral-tests/eslint-playwright.json.ejs +10 -0
- package/dist/templates/behavioral-tests/eslint.config.playwright.mjs.ejs +29 -0
- package/dist/templates/behavioral-tests/example.behavioral.test.ts.ejs +47 -0
- package/dist/templates/behavioral-tests/example_behavioral_test.go.ejs +51 -0
- package/dist/templates/behavioral-tests/example_behavioral_test.rs.ejs +47 -0
- package/dist/templates/behavioral-tests/test_example_behavioral.py.ejs +40 -0
- package/dist/templates/boundaries/.eslintrc-boundaries.cjs.ejs +81 -0
- package/dist/templates/boundaries/.eslintrc-frontend-spa.cjs.ejs +79 -0
- package/dist/templates/boundaries/.importlinter.ejs +48 -0
- package/dist/templates/boundaries/check-boundaries-go.mjs.ejs +94 -0
- package/dist/templates/boundaries/check-boundaries-python.mjs.ejs +118 -0
- package/dist/templates/boundaries/check-boundaries-rust.mjs.ejs +111 -0
- package/dist/templates/boundaries/check-boundaries.mjs.ejs +34 -0
- package/dist/templates/boundaries/clippy.toml.ejs +50 -0
- package/dist/templates/boundaries/deny.toml.ejs +56 -0
- package/dist/templates/boundaries/eslint.config.boundaries.mjs.ejs +112 -0
- package/dist/templates/boundaries/eslint.config.frontend-spa.mjs.ejs +93 -0
- package/dist/templates/boundaries/golangci-boundaries.yml.ejs +70 -0
- package/dist/templates/boundaries/ruff-boundaries.toml.ejs +32 -0
- package/dist/templates/claude/CLAUDE.md.ejs +78 -0
- package/dist/templates/claude/agents/agent-write-classes.json +30 -0
- package/dist/templates/claude/agents/bridge-reviewer.md.ejs +68 -0
- package/dist/templates/claude/agents/codebase-scanner.md.ejs +69 -0
- package/dist/templates/claude/agents/context-checker.md.ejs +73 -0
- package/dist/templates/claude/agents/red-team.md.ejs +134 -0
- package/dist/templates/claude/commands/close-gold-gap.md.ejs +43 -0
- package/dist/templates/claude/commands/drain.md.ejs +81 -0
- package/dist/templates/claude/commands/gold-audit.md.ejs +43 -0
- package/dist/templates/claude/commands/impact.md.ejs +39 -0
- package/dist/templates/claude/commands/levelup.md.ejs +61 -0
- package/dist/templates/claude/commands/ship.md.ejs +902 -0
- package/dist/templates/claude/commands/tabletop.md.ejs +46 -0
- package/dist/templates/claude/commands/task.md.ejs +87 -0
- package/dist/templates/claude/commands/wt-close.md.ejs +58 -0
- package/dist/templates/claude/commands/wt-list.md.ejs +48 -0
- package/dist/templates/claude/commands/wt-open.md.ejs +61 -0
- package/dist/templates/claude/commands/wt-prune.md.ejs +38 -0
- package/dist/templates/claude/hooks/check-circular-deps.mjs.ejs +56 -0
- package/dist/templates/claude/hooks/check-no-orphan-todo.mjs.ejs +45 -0
- package/dist/templates/claude/hooks/check-no-pii.mjs.ejs +121 -0
- package/dist/templates/claude/hooks/check-no-placeholders.mjs.ejs +71 -0
- package/dist/templates/claude/hooks/check-no-skipped-tests.mjs +80 -0
- package/dist/templates/claude/hooks/check-no-unused-exports.mjs +62 -0
- package/dist/templates/claude/hooks/closer-mode-guard.mjs.ejs +102 -0
- package/dist/templates/claude/hooks/debug-state-on-failure.mjs.ejs +98 -0
- package/dist/templates/claude/hooks/enforce-gate-before-pr.mjs +142 -0
- package/dist/templates/claude/hooks/enforce-read-only.mjs +28 -0
- package/dist/templates/claude/hooks/exitplanmode-banner.mjs.ejs +43 -0
- package/dist/templates/claude/hooks/guard-done-evidence.mjs.ejs +85 -0
- package/dist/templates/claude/hooks/guard-task-completion.mjs.ejs +56 -0
- package/dist/templates/claude/hooks/hooks.mjs.ejs +127 -0
- package/dist/templates/claude/hooks/lib.mjs.ejs +523 -0
- package/dist/templates/claude/hooks/post-brainstorm-stop.mjs +48 -0
- package/dist/templates/claude/hooks/post-commit-check.mjs.ejs +65 -0
- package/dist/templates/claude/hooks/post-commit-checklists/go/backend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/go/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/go/frontend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/java/backend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/java/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/java/frontend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/python/backend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/python/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/python/frontend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/rust/backend.ejs +5 -0
- package/dist/templates/claude/hooks/post-commit-checklists/rust/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/rust/frontend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/ts/backend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/ts/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/ts/frontend.ejs +5 -0
- package/dist/templates/claude/hooks/post-edit-dispatch.mjs.ejs +73 -0
- package/dist/templates/claude/hooks/post-subagent-release.mjs +80 -0
- package/dist/templates/claude/hooks/pre-compact.mjs.ejs +79 -0
- package/dist/templates/claude/hooks/pre-edit-plan-anchor.mjs.ejs +225 -0
- package/dist/templates/claude/hooks/pre-edit-ssot-guard.mjs +204 -0
- package/dist/templates/claude/hooks/pre-spawn-worktree-guard.mjs +129 -0
- package/dist/templates/claude/hooks/skill-forced-eval.mjs.ejs +281 -0
- package/dist/templates/claude/hooks/stop-dangerous.mjs +86 -0
- package/dist/templates/claude/hooks/stop-evidence-guard.mjs.ejs +245 -0
- package/dist/templates/claude/hooks/stop-finding-loss.mjs.ejs +168 -0
- package/dist/templates/claude/hooks/wiki-on-commit.mjs.ejs +38 -0
- package/dist/templates/claude/knowledge-map.json.ejs +26 -0
- package/dist/templates/claude/rules/05-agent-lifecycle.md +7 -0
- package/dist/templates/claude/rules/25-todo-folder-policy.md +5 -0
- package/dist/templates/claude/rules/40-context-economy.md +32 -0
- package/dist/templates/claude/rules/45-mcp-fallback.md +25 -0
- package/dist/templates/claude/rules/50-batch-execution.md +75 -0
- package/dist/templates/claude/rules/55-brainstorm-terminal-state.md +44 -0
- package/dist/templates/claude/rules/60-incidental-capture.md +43 -0
- package/dist/templates/claude/rules/75-impact-vault-reading.md +43 -0
- package/dist/templates/claude/rules/90-exec-protocol.md.ejs +40 -0
- package/dist/templates/claude/rules/95-closer-mode.md +45 -0
- package/dist/templates/claude/settings.json.ejs +165 -0
- package/dist/templates/claude/skills/architect-review/SKILL.md.ejs +82 -0
- package/dist/templates/claude/skills/brainstorming/SKILL.md.ejs +86 -0
- package/dist/templates/claude/skills/clean-code/SKILL.md.ejs +39 -0
- package/dist/templates/claude/skills/close-gold-gap/SKILL.md.ejs +58 -0
- package/dist/templates/claude/skills/codebase-audit/SKILL.md.ejs +88 -0
- package/dist/templates/claude/skills/configure/SKILL.md.ejs +72 -0
- package/dist/templates/claude/skills/epic-decompose/SKILL.md.ejs +86 -0
- package/dist/templates/claude/skills/gold-audit/SKILL.md.ejs +91 -0
- package/dist/templates/claude/skills/impact/SKILL.md.ejs +104 -0
- package/dist/templates/claude/skills/levelup/SKILL.md.ejs +146 -0
- package/dist/templates/claude/skills/tabletop/SKILL.md.ejs +118 -0
- package/dist/templates/claude/skills/tdd/SKILL.md.ejs +157 -0
- package/dist/templates/claude/skills/understand-code/SKILL.md.ejs +93 -0
- package/dist/templates/claude/skills/verification/SKILL.md.ejs +68 -0
- package/dist/templates/claude/skills/wave-drain/SKILL.md.ejs +491 -0
- package/dist/templates/codex/CODEX.md.ejs +140 -0
- package/dist/templates/codex/codex-adapter.mjs +132 -0
- package/dist/templates/codex/config.toml.ejs +189 -0
- package/dist/templates/compliance/compliance-mapping.md.ejs +124 -0
- package/dist/templates/compliance/compliance-menu.md.ejs +89 -0
- package/dist/templates/contract-testing/CONTRACTS_POLICY.md.ejs +30 -0
- package/dist/templates/contract-testing/api-snapshots/config-keys-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/config-response-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/enum-values-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/error-shape-baseline.json.ejs +6 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-baseline.json.ejs +12 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-content-types-baseline.json.ejs +3 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-paths-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-required-fields-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-response-status-baseline.json.ejs +3 -0
- package/dist/templates/contract-testing/api-snapshots/test-snapshot.json.ejs +4 -0
- package/dist/templates/contract-testing/env/.env.pact.ejs +4 -0
- package/dist/templates/contract-testing/graphql/GraphqlSchemaTest.java.ejs +29 -0
- package/dist/templates/contract-testing/graphql/graphql-inspector.test.ts.ejs +20 -0
- package/dist/templates/contract-testing/graphql/graphql_schema_test.go.ejs +27 -0
- package/dist/templates/contract-testing/graphql/graphql_schema_test.rs.ejs +27 -0
- package/dist/templates/contract-testing/graphql/test_graphql_schema.py.ejs +21 -0
- package/dist/templates/contract-testing/grpc/GrpcContractTest.java.ejs +23 -0
- package/dist/templates/contract-testing/grpc/buf-breaking.yml.ejs +6 -0
- package/dist/templates/contract-testing/grpc/buf.yaml.ejs +11 -0
- package/dist/templates/contract-testing/grpc/grpc-contract.test.ts.ejs +16 -0
- package/dist/templates/contract-testing/grpc/grpc_contract_test.go.ejs +22 -0
- package/dist/templates/contract-testing/grpc/grpc_contract_test.rs.ejs +22 -0
- package/dist/templates/contract-testing/grpc/test_grpc_contract.py.ejs +18 -0
- package/dist/templates/contract-testing/message-queue/SchemaRegistryCheckIT.java.ejs +44 -0
- package/dist/templates/contract-testing/message-queue/schema-registry-check.ts.ejs +42 -0
- package/dist/templates/contract-testing/message-queue/schema_registry_test.go.ejs +71 -0
- package/dist/templates/contract-testing/message-queue/schema_registry_test.rs.ejs +61 -0
- package/dist/templates/contract-testing/message-queue/test_schema_registry.py.ejs +31 -0
- package/dist/templates/contract-testing/pact-samples/assignment-response.json.ejs +7 -0
- package/dist/templates/contract-testing/pact-samples/availability-response.json.ejs +13 -0
- package/dist/templates/contract-testing/pact-samples/availability-rule-response.json.ejs +8 -0
- package/dist/templates/contract-testing/pact-samples/capacity-response.json.ejs +11 -0
- package/dist/templates/contract-testing/pact-samples/fully-booked-response.json.ejs +6 -0
- package/dist/templates/contract-testing/pact-samples/schedule-override-response.json.ejs +7 -0
- package/dist/templates/contract-testing/rest-owned/PactVerificationIT.java.ejs +31 -0
- package/dist/templates/contract-testing/rest-owned/pact-consumer.test.ts.ejs +36 -0
- package/dist/templates/contract-testing/rest-owned/pact-deps.gradle.ejs +15 -0
- package/dist/templates/contract-testing/rest-owned/pact_consumer_test.go.ejs +48 -0
- package/dist/templates/contract-testing/rest-owned/pact_consumer_test.rs.ejs +23 -0
- package/dist/templates/contract-testing/rest-owned/test_pact_consumer.py.ejs +35 -0
- package/dist/templates/contract-testing/rest-public/OpenApiDiffIT.java.ejs +44 -0
- package/dist/templates/contract-testing/rest-public/export-openapi-java.gradle.ejs +13 -0
- package/dist/templates/contract-testing/rest-public/export-openapi.mjs.ejs +21 -0
- package/dist/templates/contract-testing/rest-public/export_openapi.go.ejs +30 -0
- package/dist/templates/contract-testing/rest-public/export_openapi.py.ejs +27 -0
- package/dist/templates/contract-testing/rest-public/export_openapi.rs.ejs +32 -0
- package/dist/templates/contract-testing/rest-public/openapi-diff.ts.ejs +42 -0
- package/dist/templates/contract-testing/rest-public/openapi_diff_test.go.ejs +35 -0
- package/dist/templates/contract-testing/rest-public/openapi_diff_test.rs.ejs +36 -0
- package/dist/templates/contract-testing/rest-public/test_openapi_diff.py.ejs +32 -0
- package/dist/templates/coverage/.coveragerc.ejs +26 -0
- package/dist/templates/coverage/.tarpaulin.toml.ejs +30 -0
- package/dist/templates/coverage/Cargo.toml.profile.release.ejs +24 -0
- package/dist/templates/coverage/jacoco-maven-setup.md.ejs +72 -0
- package/dist/templates/coverage/jacoco.gradle.ejs +49 -0
- package/dist/templates/coverage/kover.gradle.ejs +35 -0
- package/dist/templates/coverage/vitest.browser.config.ts.ejs +47 -0
- package/dist/templates/coverage/vitest.config.ts.ejs +47 -0
- package/dist/templates/docs/CODING_STANDARDS.md.ejs +81 -0
- package/dist/templates/docs/FEATURE_MATRIX.md.ejs +84 -0
- package/dist/templates/docs/GAP.md.ejs +58 -0
- package/dist/templates/docs/ISO27001_ANNEX_A.md.ejs +144 -0
- package/dist/templates/docs/MASTER_TEST_PLAN.md.ejs +52 -0
- package/dist/templates/docs/POST_MERGE_REVIEW_TEMPLATE.md.ejs +63 -0
- package/dist/templates/docs/SECURE_CODING_CHECKLIST.md.ejs +61 -0
- package/dist/templates/docs/adr/ADR-000_template.md.ejs +28 -0
- package/dist/templates/docs/bugs/bug-analysis.md.ejs +47 -0
- package/dist/templates/docs/bugs/bug-report.md.ejs +51 -0
- package/dist/templates/docs/bugs/bug-verification.md.ejs +42 -0
- package/dist/templates/docs/runbooks/deployment.md.ejs +119 -0
- package/dist/templates/docs/runbooks/prod-checklist.md.ejs +90 -0
- package/dist/templates/docs/runbooks/rollback.md.ejs +124 -0
- package/dist/templates/docs/runbooks/troubleshooting.md.ejs +130 -0
- package/dist/templates/docs/skeletons/arc42-canvas.md.ejs +46 -0
- package/dist/templates/docs/skeletons/arc42-full.md.ejs +59 -0
- package/dist/templates/docs/skeletons/decision-registry.md.ejs +38 -0
- package/dist/templates/docs/skeletons/er-model.md.ejs +19 -0
- package/dist/templates/docs/skeletons/glossary.md.ejs +8 -0
- package/dist/templates/docs/skeletons/governance.md.ejs +13 -0
- package/dist/templates/docs/skeletons/slo.md.ejs +21 -0
- package/dist/templates/docs/skeletons/technical-debt.md.ejs +8 -0
- package/dist/templates/docs/skeletons/test-strategy.md.ejs +14 -0
- package/dist/templates/docs/skeletons/threat-model-4q.md.ejs +20 -0
- package/dist/templates/docs/skeletons/threat-model-stride.md.ejs +22 -0
- package/dist/templates/docs/specs/atomic-task-list.md.ejs +57 -0
- package/dist/templates/docs/steering/product.md.ejs +44 -0
- package/dist/templates/docs/steering/structure.md.ejs +49 -0
- package/dist/templates/docs/steering/tech.md.ejs +53 -0
- package/dist/templates/documentation/cli-catalog.md.ejs +21 -0
- package/dist/templates/e2e/E2E_CONSTITUTION.md.ejs +77 -0
- package/dist/templates/e2e/playwright-python/conftest.py.ejs +22 -0
- package/dist/templates/e2e/playwright-python/run_axe.py.ejs +99 -0
- package/dist/templates/e2e/playwright-python/test_a11y.py.ejs +38 -0
- package/dist/templates/e2e/playwright-python/test_smoke.py.ejs +28 -0
- package/dist/templates/e2e/playwright-ts/a11y.spec.ts.ejs +20 -0
- package/dist/templates/e2e/playwright-ts/render-smoke.spec.ts.ejs +90 -0
- package/dist/templates/e2e/playwright-ts/run-axe.ts.ejs +74 -0
- package/dist/templates/e2e/smoke-journeys/journeys.spec.ts.ejs +53 -0
- package/dist/templates/evidence-files.json.ejs +13 -0
- package/dist/templates/frontend/FE_DESIGN_PRINCIPLES.md.ejs +115 -0
- package/dist/templates/frontend/FRONTEND_CONSTITUTION.md.ejs +170 -0
- package/dist/templates/frontend/design-tokens.json.ejs +107 -0
- package/dist/templates/frontend/vrt-setup.md.ejs +83 -0
- package/dist/templates/githooks/commit-msg.ejs +60 -0
- package/dist/templates/githooks/pre-commit.ejs +95 -0
- package/dist/templates/githooks/pre-push.ejs +251 -0
- package/dist/templates/githooks/setup-hooks.sh.ejs +8 -0
- package/dist/templates/github/PULL_REQUEST_TEMPLATE.md +37 -0
- package/dist/templates/github/PULL_REQUEST_TEMPLATE.md.ejs +52 -0
- package/dist/templates/github/actions/build-cache/action.yml.ejs +84 -0
- package/dist/templates/github/actions/nas-ssh/action.yml.ejs +53 -0
- package/dist/templates/github/actions/setup-java-maven/action.yml.ejs +53 -0
- package/dist/templates/github/actions/setup-node-pnpm/action.yml.ejs +39 -0
- package/dist/templates/github/actions/sign-and-attest/action.yml.ejs +53 -0
- package/dist/templates/github/dependabot.yml.ejs +66 -0
- package/dist/templates/github/extended-ci-paths.txt.ejs +38 -0
- package/dist/templates/github/issue-templates/bug-report.yml +72 -0
- package/dist/templates/github/issue-templates/compliance-item.yml.ejs +75 -0
- package/dist/templates/github/issue-templates/config.yml +2 -0
- package/dist/templates/github/issue-templates/epic.yml +66 -0
- package/dist/templates/github/issue-templates/feature-request.yml +24 -0
- package/dist/templates/github/issue-templates/task-brief.yml.ejs +125 -0
- package/dist/templates/github/labels.yml.ejs +161 -0
- package/dist/templates/github/scripts/sticky-failure-issue.sh.ejs +61 -0
- package/dist/templates/github/workflows/01-pr-fast.yml.ejs +1089 -0
- package/dist/templates/github/workflows/02-pr-extended.yml.ejs +512 -0
- package/dist/templates/github/workflows/03-human-approval.yml.ejs +76 -0
- package/dist/templates/github/workflows/04-deploy-test.yml.ejs +425 -0
- package/dist/templates/github/workflows/05-release.yml.ejs +813 -0
- package/dist/templates/github/workflows/06-nightly-lite.yml.ejs +125 -0
- package/dist/templates/github/workflows/06-nightly.yml.ejs +25 -0
- package/dist/templates/github/workflows/07-weekly-lite.yml.ejs +221 -0
- package/dist/templates/github/workflows/07-weekly.yml.ejs +23 -0
- package/dist/templates/github/workflows/08-monthly.yml.ejs +23 -0
- package/dist/templates/github/workflows/09-heartbeat.yml.ejs +268 -0
- package/dist/templates/github/workflows/10-deploy-prod.yml.ejs +144 -0
- package/dist/templates/github/workflows/11-k6-on-demand.yml.ejs +43 -0
- package/dist/templates/github/workflows/12-mutation-scheduled.yml.ejs +100 -0
- package/dist/templates/github/workflows/13-archunit-extended.yml.ejs +33 -0
- package/dist/templates/github/workflows/14-license-scan.yml.ejs +45 -0
- package/dist/templates/github/workflows/15-codeql.yml.ejs +117 -0
- package/dist/templates/github/workflows/16-frontend-quality.yml.ejs +154 -0
- package/dist/templates/github/workflows/17-ossf-scorecard.yml.ejs +46 -0
- package/dist/templates/github/workflows/18-frontend-lane.yml.ejs +50 -0
- package/dist/templates/github/workflows/_ai-draft-check.yml.ejs +44 -0
- package/dist/templates/github/workflows/_contract-postman.yml.ejs +93 -0
- package/dist/templates/github/workflows/_cosign-copy/aws-ecs.ejs +90 -0
- package/dist/templates/github/workflows/_cosign-copy/azure-container-app.ejs +97 -0
- package/dist/templates/github/workflows/_cosign-copy/gcp-cloud-run.ejs +102 -0
- package/dist/templates/github/workflows/_cosign-copy/ghcr.ejs +76 -0
- package/dist/templates/github/workflows/_cosign-copy/nas-compose.ejs +69 -0
- package/dist/templates/github/workflows/_deploy/aws-ecs.ejs +78 -0
- package/dist/templates/github/workflows/_deploy/azure-container-app.ejs +59 -0
- package/dist/templates/github/workflows/_deploy/gcp-cloud-run.ejs +71 -0
- package/dist/templates/github/workflows/_deploy/ghcr.ejs +19 -0
- package/dist/templates/github/workflows/_deploy/nas-compose.ejs +45 -0
- package/dist/templates/github/workflows/_k6-runner.yml.ejs +107 -0
- package/dist/templates/github/workflows/_label-on-approve.yml.ejs +44 -0
- package/dist/templates/github/workflows/_label-sync.yml.ejs +58 -0
- package/dist/templates/github/workflows/_monthly.yml.ejs +343 -0
- package/dist/templates/github/workflows/_nightly.yml.ejs +826 -0
- package/dist/templates/github/workflows/_notify.yml.ejs +96 -0
- package/dist/templates/github/workflows/_partials/macos-keychain-bypass.ejs +6 -0
- package/dist/templates/github/workflows/_partials/macos-keychain-restore.ejs +6 -0
- package/dist/templates/github/workflows/_partials/scheduled-heavy-jobs.ejs +117 -0
- package/dist/templates/github/workflows/_partials/sigstore-preflight.ejs +8 -0
- package/dist/templates/github/workflows/_partials/trivy-fs-java.ejs +27 -0
- package/dist/templates/github/workflows/_post-merge-notify.yml.ejs +228 -0
- package/dist/templates/github/workflows/_pr-staleness.yml.ejs +85 -0
- package/dist/templates/github/workflows/_shared-security.yml.ejs +132 -0
- package/dist/templates/github/workflows/_sigstore-retry-sign.yml.ejs +102 -0
- package/dist/templates/github/workflows/_weekly.yml.ejs +313 -0
- package/dist/templates/github/workflows/drift-shadow.yml.ejs +51 -0
- package/dist/templates/github/workflows/five-lane/ci.yml.ejs +54 -0
- package/dist/templates/github/workflows/five-lane/nightly.yml.ejs +70 -0
- package/dist/templates/github/workflows/five-lane/release.yml.ejs +53 -0
- package/dist/templates/github/workflows/five-lane/weekly.yml.ejs +72 -0
- package/dist/templates/github/workflows/issue-state.yml.ejs +93 -0
- package/dist/templates/global-invariants/GLOBAL_INVARIANTS.md.ejs +34 -0
- package/dist/templates/governance/RACI.md.ejs +21 -0
- package/dist/templates/governance/ci-mental-model.md.ejs +268 -0
- package/dist/templates/governance/contract-integrity-policy.md.ejs +116 -0
- package/dist/templates/governance/enterprise-compliance-baseline.md.ejs +111 -0
- package/dist/templates/governance/evidence-retention.md.ejs +43 -0
- package/dist/templates/governance/gdpr-erasure-runbook.md.ejs +165 -0
- package/dist/templates/governance/qa-audit-phases.md.ejs +129 -0
- package/dist/templates/governance/risk-assessment-template.md.ejs +105 -0
- package/dist/templates/governance/risk-register.md.ejs +76 -0
- package/dist/templates/governance/solo-dev-exception.md.ejs +96 -0
- package/dist/templates/governance/validation-evidence.md.ejs +131 -0
- package/dist/templates/infra/azure/containerapp.tpl.yaml.ejs +74 -0
- package/dist/templates/infra/nas-compose/deploy.sh.ejs +114 -0
- package/dist/templates/integration-testing/AbstractIntegrationTest.java.ejs +36 -0
- package/dist/templates/integration-testing/NoH2ArchTest.java.ejs +24 -0
- package/dist/templates/integration-testing/conftest.py.ejs +20 -0
- package/dist/templates/integration-testing/db_fixture.rs.ejs +48 -0
- package/dist/templates/integration-testing/eslint-no-fake-db.json.ejs +19 -0
- package/dist/templates/integration-testing/eslint.config.no-fake-db.mjs.ejs +46 -0
- package/dist/templates/integration-testing/main_test.go.ejs +53 -0
- package/dist/templates/integration-testing/main_test_sqlite.go.ejs +37 -0
- package/dist/templates/integration-testing/test-setup.ts.ejs +26 -0
- package/dist/templates/integration-testing/testcontainers-deps.gradle.ejs +9 -0
- package/dist/templates/java/DeprecationInterceptor.java.ejs +50 -0
- package/dist/templates/java/archunit-hexagonal.ejs +69 -0
- package/dist/templates/java/modulith/ApplicationModulesTest.java.ejs +21 -0
- package/dist/templates/java/modulith/modulith-deps.gradle.ejs +13 -0
- package/dist/templates/java/modulith/modulith-maven-setup.md.ejs +21 -0
- package/dist/templates/java/pharma/AuditEvent.java.ejs +138 -0
- package/dist/templates/java/pharma/AuditMapper.java.ejs +60 -0
- package/dist/templates/java/pharma/archunit-pharma.ejs +128 -0
- package/dist/templates/kit/GLOBAL_KIT.md.ejs +11 -0
- package/dist/templates/kit/dim.md.ejs +33 -0
- package/dist/templates/llms-txt.config.json.ejs +22 -0
- package/dist/templates/local-wrapper/.env.example.ejs +15 -0
- package/dist/templates/local-wrapper/Makefile.ejs +44 -0
- package/dist/templates/local-wrapper/run.sh.ejs +5 -0
- package/dist/templates/middleware/410-gone-handler.ts.ejs +41 -0
- package/dist/templates/middleware/correlation-id.ts.ejs +32 -0
- package/dist/templates/middleware/deprecation.ts.ejs +45 -0
- package/dist/templates/middleware/error-handler.ts.ejs +73 -0
- package/dist/templates/middleware/payload-size-limit.ts.ejs +51 -0
- package/dist/templates/mutation/README.md.ejs +67 -0
- package/dist/templates/mutation/cargo-mutants.toml.ejs +9 -0
- package/dist/templates/mutation/mutmut-config.toml.ejs +7 -0
- package/dist/templates/mutation/parse-mutants.mjs.ejs +44 -0
- package/dist/templates/mutation/parse-mutmut.py.ejs +44 -0
- package/dist/templates/mutation/pitest-l2-setup.md.ejs +66 -0
- package/dist/templates/mutation/pitest-maven-setup.md.ejs +64 -0
- package/dist/templates/mutation/pitest.gradle.ejs +23 -0
- package/dist/templates/mutation/stryker.conf.json.ejs +17 -0
- package/dist/templates/observability/setup.md.ejs +495 -0
- package/dist/templates/operations/handbook.md.ejs +217 -0
- package/dist/templates/perf/bundle-budget.json.ejs +29 -0
- package/dist/templates/perf/k6/reports/csv-report.py.ejs +91 -0
- package/dist/templates/perf/k6/reports/html-report.py.ejs +114 -0
- package/dist/templates/perf/k6/reports/json-report.py.ejs +74 -0
- package/dist/templates/perf/k6/scenarios/breakpoint.js.ejs +26 -0
- package/dist/templates/perf/k6/scenarios/burst.js.ejs +43 -0
- package/dist/templates/perf/k6/scenarios/endurance.js.ejs +36 -0
- package/dist/templates/perf/k6/scenarios/load.js.ejs +26 -0
- package/dist/templates/perf/k6/scenarios/ramp-down.js.ejs +29 -0
- package/dist/templates/perf/k6/scenarios/ramp-up.js.ejs +32 -0
- package/dist/templates/perf/k6/scenarios/smoke.js.ejs +23 -0
- package/dist/templates/perf/k6/scenarios/soak.js.ejs +26 -0
- package/dist/templates/perf/k6/scenarios/spike.js.ejs +29 -0
- package/dist/templates/perf/k6/scenarios/steady-state.js.ejs +31 -0
- package/dist/templates/perf/k6/scenarios/stress.js.ejs +29 -0
- package/dist/templates/perf/k6/scenarios/volume.js.ejs +36 -0
- package/dist/templates/perf/k6/seed/test-data.sql.ejs +59 -0
- package/dist/templates/perf/lighthouserc.json.ejs +41 -0
- package/dist/templates/quality/iso9001/CAPA_LOG.md.ejs +36 -0
- package/dist/templates/quality/iso9001/DOCUMENT_CONTROL.md.ejs +36 -0
- package/dist/templates/quality/iso9001/REQUIREMENTS_TRACEABILITY.md.ejs +61 -0
- package/dist/templates/regulated/overlay.json.ejs +26 -0
- package/dist/templates/regulated/regulated-overlay.md.ejs +40 -0
- package/dist/templates/resilience/RESILIENCE.md.ejs +310 -0
- package/dist/templates/root/.gitignore.ejs +85 -0
- package/dist/templates/root/CODEOWNERS.ejs +18 -0
- package/dist/templates/root/CONTRIBUTING.md.ejs +62 -0
- package/dist/templates/root/SECURITY.md.ejs +19 -0
- package/dist/templates/root/TEST_TAXONOMY.md.ejs +100 -0
- package/dist/templates/root/commitlint.config.js.ejs +4 -0
- package/dist/templates/root/docs/METHOD/CANONICAL_PATHS.md.ejs +24 -0
- package/dist/templates/root/docs/METHOD/ENGINEERING_DEFAULTS.md.ejs +136 -0
- package/dist/templates/root/docs/METHOD/KNOWLEDGE_MAP.md.ejs +90 -0
- package/dist/templates/root/docs/METHOD/PATTERNS_CATALOG.md.ejs +51 -0
- package/dist/templates/root/docs/METHOD/REUSE_REGISTRY.md.ejs +26 -0
- package/dist/templates/root/docs/METHOD/REUSE_REGISTRY_SPEC.md.ejs +80 -0
- package/dist/templates/root/docs/METHOD/SSOT_CORE_SET.md.ejs +62 -0
- package/dist/templates/root/docs/METHOD/TRACK_ROUTER.md.ejs +39 -0
- package/dist/templates/root/docs/SYSTEM/CANON.md.ejs +359 -0
- package/dist/templates/root/docs/SYSTEM/FAIL_CLOSED.md.ejs +171 -0
- package/dist/templates/root/editorconfig.ejs +39 -0
- package/dist/templates/root/tsconfig.json.ejs +21 -0
- package/dist/templates/rust/clippy.toml.ejs +14 -0
- package/dist/templates/schemas/milestone.schema.json.ejs +164 -0
- package/dist/templates/schemas/rtm-verdict.schema.json.ejs +52 -0
- package/dist/templates/schemas/source-record.schema.json.ejs +91 -0
- package/dist/templates/schemas/tabletop-evidence.schema.json.ejs +53 -0
- package/dist/templates/schemas/use-case.schema.json.ejs +59 -0
- package/dist/templates/scripts/apply-branch-protection.mjs.ejs +70 -0
- package/dist/templates/scripts/audit-toolchain.mjs.ejs +112 -0
- package/dist/templates/scripts/bg-run.sh.ejs +59 -0
- package/dist/templates/scripts/capacity-probe.mjs.ejs +147 -0
- package/dist/templates/scripts/capture-debt-baseline.mjs.ejs +99 -0
- package/dist/templates/scripts/check-acceptance.mjs.ejs +298 -0
- package/dist/templates/scripts/check-action-pins.mjs.ejs +215 -0
- package/dist/templates/scripts/check-agent-return.mjs.ejs +177 -0
- package/dist/templates/scripts/check-all.mjs.ejs +1746 -0
- package/dist/templates/scripts/check-anti-fake-green.mjs.ejs +80 -0
- package/dist/templates/scripts/check-anti-proforma.mjs.ejs +547 -0
- package/dist/templates/scripts/check-api-e2e.mjs.ejs +106 -0
- package/dist/templates/scripts/check-arc42-slots.mjs.ejs +25 -0
- package/dist/templates/scripts/check-assertion-delta.mjs.ejs +287 -0
- package/dist/templates/scripts/check-audit-dry-pass.mjs.ejs +176 -0
- package/dist/templates/scripts/check-bundle-size.mjs.ejs +151 -0
- package/dist/templates/scripts/check-canonical-paths.mjs.ejs +39 -0
- package/dist/templates/scripts/check-ci-tiers.mjs.ejs +111 -0
- package/dist/templates/scripts/check-claude-md-lint.mjs.ejs +142 -0
- package/dist/templates/scripts/check-collab-mode-wired.mjs.ejs +60 -0
- package/dist/templates/scripts/check-commit-footer-rationale.mjs.ejs +170 -0
- package/dist/templates/scripts/check-constraint-scan.mjs.ejs +681 -0
- package/dist/templates/scripts/check-consumer-audit.mjs.ejs +414 -0
- package/dist/templates/scripts/check-continue-on-error.mjs.ejs +227 -0
- package/dist/templates/scripts/check-cross-model-review.mjs.ejs +458 -0
- package/dist/templates/scripts/check-decision-registry.mjs.ejs +101 -0
- package/dist/templates/scripts/check-doc-freshness.mjs.ejs +17 -0
- package/dist/templates/scripts/check-doc-links.mjs.ejs +98 -0
- package/dist/templates/scripts/check-doc-set.mjs.ejs +18 -0
- package/dist/templates/scripts/check-docs.mjs.ejs +71 -0
- package/dist/templates/scripts/check-domain-api-surface.mjs.ejs +80 -0
- package/dist/templates/scripts/check-drift.mjs.ejs +167 -0
- package/dist/templates/scripts/check-duplication.mjs.ejs +45 -0
- package/dist/templates/scripts/check-e2e-escalation.mjs.ejs +199 -0
- package/dist/templates/scripts/check-e2e-quarantine.mjs.ejs +68 -0
- package/dist/templates/scripts/check-emission-parity.mjs.ejs +91 -0
- package/dist/templates/scripts/check-exit-code-contract.mjs.ejs +138 -0
- package/dist/templates/scripts/check-fail-closed-audit.mjs.ejs +389 -0
- package/dist/templates/scripts/check-fe-boundaries.mjs.ejs +184 -0
- package/dist/templates/scripts/check-feature-matrix.mjs.ejs +835 -0
- package/dist/templates/scripts/check-frontend-lane.mjs.ejs +73 -0
- package/dist/templates/scripts/check-grace-window.mjs.ejs +102 -0
- package/dist/templates/scripts/check-handoff-doc.mjs.ejs +192 -0
- package/dist/templates/scripts/check-hook-routing.mjs.ejs +224 -0
- package/dist/templates/scripts/check-image-pins.mjs.ejs +90 -0
- package/dist/templates/scripts/check-inline-suppressions.mjs.ejs +153 -0
- package/dist/templates/scripts/check-iso9001.mjs.ejs +146 -0
- package/dist/templates/scripts/check-knowledge-map.mjs.ejs +49 -0
- package/dist/templates/scripts/check-local-ci-parity.mjs.ejs +382 -0
- package/dist/templates/scripts/check-m16-handoff.mjs.ejs +112 -0
- package/dist/templates/scripts/check-merge-method.mjs.ejs +92 -0
- package/dist/templates/scripts/check-milestones.mjs.ejs +678 -0
- package/dist/templates/scripts/check-min-test-execution.mjs.ejs +225 -0
- package/dist/templates/scripts/check-muted-test.mjs.ejs +270 -0
- package/dist/templates/scripts/check-no-stub-redirects.mjs.ejs +154 -0
- package/dist/templates/scripts/check-no-tracked-artifacts.mjs.ejs +134 -0
- package/dist/templates/scripts/check-oracle-discrimination.mjs.ejs +244 -0
- package/dist/templates/scripts/check-pii-scan.mjs.ejs +67 -0
- package/dist/templates/scripts/check-pipe-tee-hazard.mjs.ejs +85 -0
- package/dist/templates/scripts/check-pr-size-gate.mjs.ejs +85 -0
- package/dist/templates/scripts/check-refutation-verdicts.mjs.ejs +256 -0
- package/dist/templates/scripts/check-regulated-overlay.mjs.ejs +158 -0
- package/dist/templates/scripts/check-render-smoke.mjs.ejs +100 -0
- package/dist/templates/scripts/check-reuse-registry.mjs.ejs +44 -0
- package/dist/templates/scripts/check-review-completion.mjs.ejs +708 -0
- package/dist/templates/scripts/check-safety-adopt-ratchet.mjs.ejs +142 -0
- package/dist/templates/scripts/check-secret-presence.mjs.ejs +191 -0
- package/dist/templates/scripts/check-secret-scan.mjs.ejs +82 -0
- package/dist/templates/scripts/check-skip-critical-e2e.mjs.ejs +142 -0
- package/dist/templates/scripts/check-smoke-journeys.mjs.ejs +272 -0
- package/dist/templates/scripts/check-solo-reactivation.mjs.ejs +102 -0
- package/dist/templates/scripts/check-sources.mjs.ejs +245 -0
- package/dist/templates/scripts/check-ssot-core.mjs.ejs +45 -0
- package/dist/templates/scripts/check-stack-conformity.mjs.ejs +160 -0
- package/dist/templates/scripts/check-stride-traceability.mjs.ejs +101 -0
- package/dist/templates/scripts/check-suppression-expiry.mjs.ejs +79 -0
- package/dist/templates/scripts/check-suppression-rationale.mjs.ejs +76 -0
- package/dist/templates/scripts/check-suppressions.mjs.ejs +150 -0
- package/dist/templates/scripts/check-tabletop-evidence.mjs.ejs +499 -0
- package/dist/templates/scripts/check-tdd-evidence.mjs.ejs +381 -0
- package/dist/templates/scripts/check-test-naming.mjs.ejs +151 -0
- package/dist/templates/scripts/check-test-pyramid.mjs.ejs +170 -0
- package/dist/templates/scripts/check-test-scope-tier.mjs.ejs +208 -0
- package/dist/templates/scripts/check-tier-coverage.mjs.ejs +71 -0
- package/dist/templates/scripts/check-todo-max-age.mjs.ejs +205 -0
- package/dist/templates/scripts/check-touched-vs-manifest.mjs.ejs +179 -0
- package/dist/templates/scripts/check-unwired-guards.mjs.ejs +367 -0
- package/dist/templates/scripts/check-use-cases.mjs.ejs +345 -0
- package/dist/templates/scripts/check-validator-helptext.mjs.ejs +80 -0
- package/dist/templates/scripts/check-wiki-lint.mjs.ejs +162 -0
- package/dist/templates/scripts/check-workflow-docs-sync.mjs.ejs +91 -0
- package/dist/templates/scripts/check-workflow-job-naming.mjs.ejs +102 -0
- package/dist/templates/scripts/check-workflow-perms.mjs.ejs +54 -0
- package/dist/templates/scripts/check-workflow-runners.mjs.ejs +87 -0
- package/dist/templates/scripts/check-workflow-sha-pinning.mjs.ejs +89 -0
- package/dist/templates/scripts/check-workflow-test-integrity.mjs.ejs +235 -0
- package/dist/templates/scripts/checks/check-rust-no-unsafe.mjs.ejs +58 -0
- package/dist/templates/scripts/checks/check-rust-no-unwrap.mjs.ejs +61 -0
- package/dist/templates/scripts/ci-classify-changes.mjs.ejs +119 -0
- package/dist/templates/scripts/conformance.mjs.ejs +37 -0
- package/dist/templates/scripts/constraint-map.json.ejs +25 -0
- package/dist/templates/scripts/debt-lib.mjs.ejs +1015 -0
- package/dist/templates/scripts/debt-report.mjs.ejs +199 -0
- package/dist/templates/scripts/domain-api-surface.json.ejs +23 -0
- package/dist/templates/scripts/done-evidence.mjs.ejs +359 -0
- package/dist/templates/scripts/evidence-collect.mjs.ejs +264 -0
- package/dist/templates/scripts/evidence-prune.mjs.ejs +96 -0
- package/dist/templates/scripts/evidence-rotate.mjs.ejs +53 -0
- package/dist/templates/scripts/evidence-writer.sh.ejs +220 -0
- package/dist/templates/scripts/gate-registry.yml.ejs +286 -0
- package/dist/templates/scripts/gen-doc-index.mjs.ejs +19 -0
- package/dist/templates/scripts/gen-gap.mjs.ejs +153 -0
- package/dist/templates/scripts/gen-llms-txt.mjs.ejs +18 -0
- package/dist/templates/scripts/gen-wiki.mjs.ejs +196 -0
- package/dist/templates/scripts/gh-cleanup-expired-artifacts.mjs.ejs +134 -0
- package/dist/templates/scripts/gold-audit.mjs.ejs +19 -0
- package/dist/templates/scripts/i18n-literal-scanner.mjs.ejs +175 -0
- package/dist/templates/scripts/ingest-zap-report.mjs.ejs +107 -0
- package/dist/templates/scripts/inject-pact-samples.sh.ejs +96 -0
- package/dist/templates/scripts/issue-readiness.mjs.ejs +84 -0
- package/dist/templates/scripts/knowledge-map-update.mjs.ejs +32 -0
- package/dist/templates/scripts/lib/acceptance-criteria.mjs.ejs +213 -0
- package/dist/templates/scripts/lib/agent-return-validate.mjs.ejs +481 -0
- package/dist/templates/scripts/lib/coverage-gate.mjs.ejs +54 -0
- package/dist/templates/scripts/lib/e2e-reliability.mjs.ejs +207 -0
- package/dist/templates/scripts/lib/ephemeral-server.mjs.ejs +148 -0
- package/dist/templates/scripts/lib/evidence-binding.mjs.ejs +140 -0
- package/dist/templates/scripts/lib/exact-sha-policy.mjs.ejs +233 -0
- package/dist/templates/scripts/lib/gate-args.mjs.ejs +20 -0
- package/dist/templates/scripts/lib/gate-evidence.mjs.ejs +622 -0
- package/dist/templates/scripts/lib/gate-mutex.mjs.ejs +340 -0
- package/dist/templates/scripts/lib/glob-walk.mjs.ejs +148 -0
- package/dist/templates/scripts/lib/run-helpers.mjs.ejs +416 -0
- package/dist/templates/scripts/lib/seed-common.sh.ejs +105 -0
- package/dist/templates/scripts/lib/waiter-count.mjs.ejs +62 -0
- package/dist/templates/scripts/muted-tests-baseline.json.ejs +4 -0
- package/dist/templates/scripts/optional-emissions.json.ejs +117 -0
- package/dist/templates/scripts/oracle-discrimination-baseline.json.ejs +6 -0
- package/dist/templates/scripts/pid-watch.sh.ejs +78 -0
- package/dist/templates/scripts/pii-scan.mjs.ejs +125 -0
- package/dist/templates/scripts/pr-merge-watch.mjs.ejs +445 -0
- package/dist/templates/scripts/record-agent-return.mjs.ejs +279 -0
- package/dist/templates/scripts/record-journey-evidence.mjs.ejs +69 -0
- package/dist/templates/scripts/rework-log.mjs.ejs +172 -0
- package/dist/templates/scripts/run-postman-tests.sh.ejs +112 -0
- package/dist/templates/scripts/schemas/agent-return-external.schema.json +74 -0
- package/dist/templates/scripts/schemas/agent-return.schema.json.ejs +181 -0
- package/dist/templates/scripts/schemas/cross-model-dispatch.schema.json +95 -0
- package/dist/templates/scripts/seed-test-data.sh.ejs +99 -0
- package/dist/templates/scripts/self-validation.mjs.ejs +126 -0
- package/dist/templates/scripts/setup-repo.sh.ejs +78 -0
- package/dist/templates/scripts/spotbugs-baseline.json.ejs +4 -0
- package/dist/templates/scripts/test-gate-layering.mjs.ejs +92 -0
- package/dist/templates/scripts/validate-api-snapshots.mjs.ejs +86 -0
- package/dist/templates/scripts/validate-k6-scenarios.mjs.ejs +96 -0
- package/dist/templates/scripts/validate-openapi-field-types.mjs.ejs +124 -0
- package/dist/templates/scripts/validate-postman-collection.mjs.ejs +159 -0
- package/dist/templates/scripts/verify-fe-coverage.mjs.ejs +138 -0
- package/dist/templates/scripts/verify-i18n-parity.mjs.ejs +114 -0
- package/dist/templates/scripts/verify-module-coverage.mjs.ejs +207 -0
- package/dist/templates/scripts/verify-mutation-baseline.mjs.ejs +209 -0
- package/dist/templates/scripts/verify-spotbugs.mjs.ejs +216 -0
- package/dist/templates/scripts/verify-tokens.mjs.ejs +177 -0
- package/dist/templates/security/RISK_ASSESSMENT.md.ejs +35 -0
- package/dist/templates/security/STRIDE.md.ejs +24 -0
- package/dist/templates/security/gitleaks.toml.ejs +21 -0
- package/dist/templates/security/zap/baseline-auth.context.ejs +58 -0
- package/dist/templates/security/zap/rules.tsv.ejs +100 -0
- package/dist/templates/ship/TICK_PROMPT.md.ejs +55 -0
- package/dist/templates/ship/supervisor.sh.ejs +46 -0
- package/dist/templates/smoke-journeys/manifest.json.ejs +1 -0
- package/dist/templates/sonar-project.properties.ejs +25 -0
- package/dist/templates/standards/doc-profile.ejs +27 -0
- package/dist/templates/standards/gold-doc-set.yml.ejs +528 -0
- package/dist/templates/standards/gold-registry.java.yml.ejs +266 -0
- package/dist/templates/standards/gold-registry.typescript.yml.ejs +104 -0
- package/dist/templates/standards/gold-registry.yml.ejs +119 -0
- package/dist/templates/standards/thresholds.yml.ejs +86 -0
- package/dist/templates/static-analysis/.dependency-cruiser.cjs.ejs +78 -0
- package/dist/templates/static-analysis/.golangci.yml.ejs +70 -0
- package/dist/templates/static-analysis/.shellcheckrc.ejs +13 -0
- package/dist/templates/static-analysis/.yamllint.yml.ejs +41 -0
- package/dist/templates/static-analysis/checkstyle.xml.ejs +83 -0
- package/dist/templates/static-analysis/detekt.yml.ejs +26 -0
- package/dist/templates/static-analysis/eslint.config.mjs.ejs +54 -0
- package/dist/templates/static-analysis/eslint.config.static.mjs.ejs +38 -0
- package/dist/templates/static-analysis/eslintrc-static.json.ejs +30 -0
- package/dist/templates/static-analysis/jscpd.json.ejs +25 -0
- package/dist/templates/static-analysis/knip.json.ejs +26 -0
- package/dist/templates/static-analysis/pmd-ruleset.xml.ejs +92 -0
- package/dist/templates/static-analysis/prettierignore.ejs +59 -0
- package/dist/templates/static-analysis/prettierrc.json.ejs +10 -0
- package/dist/templates/static-analysis/requirements-dev.txt.ejs +11 -0
- package/dist/templates/static-analysis/ruff.toml.ejs +40 -0
- package/dist/templates/static-analysis/rustfmt.toml.ejs +3 -0
- package/dist/templates/static-analysis/spotbugs-exclude.xml.ejs +120 -0
- package/dist/templates/static-analysis/spotbugs.gradle.ejs +18 -0
- package/dist/templates/static-analysis/spotless.gradle.ejs +38 -0
- package/dist/templates/static-analysis/stylelintrc.json.ejs +16 -0
- package/dist/templates/suppressions/archunit-baseline.json.ejs +1 -0
- package/dist/templates/suppressions/consumer-audit-allowlist.json.ejs +1 -0
- package/dist/templates/suppressions/gitleaksignore.ejs +20 -0
- package/dist/templates/suppressions/pii-allowlist.json.ejs +1 -0
- package/dist/templates/suppressions/suppressions-schema.json.ejs +39 -0
- package/dist/templates/suppressions/trivyignore.ejs +17 -0
- package/dist/templates/testing/test-taxonomy.md.ejs +120 -0
- package/dist/test/example.behavioral.test.js +2 -0
- package/dist/types/memory.d.ts +19 -0
- package/dist/types/memory.js +1 -0
- package/dist/types/plan.d.ts +102 -0
- package/dist/types/plan.js +2 -0
- package/dist/types/plugin.d.ts +45 -0
- package/dist/types/plugin.js +1 -0
- package/dist/utils/canon-loader.js +2 -0
- package/dist/utils/channel.js +1 -0
- package/dist/utils/config.d.ts +79 -0
- package/dist/utils/config.js +5 -0
- package/dist/utils/confirm-downgrade.js +5 -0
- package/dist/utils/env.js +2 -0
- package/dist/utils/error-catalog.js +2 -0
- package/dist/utils/errors.js +2 -0
- package/dist/utils/evidence-log.js +3 -0
- package/dist/utils/file-lock.js +2 -0
- package/dist/utils/first-run.js +8 -0
- package/dist/utils/fs.js +3 -0
- package/dist/utils/github-issue-helper.js +4 -0
- package/dist/utils/gradle.js +21 -0
- package/dist/utils/json-output.js +2 -0
- package/dist/utils/logger-config.js +4 -0
- package/dist/utils/logger.js +3 -0
- package/dist/utils/maturity-check.js +2 -0
- package/dist/utils/pkg.js +3 -0
- package/dist/utils/platform.js +2 -0
- package/dist/utils/plugin-loader.js +2 -0
- package/dist/utils/plugin-worker.js +2 -0
- package/dist/utils/prettier-format.js +2 -0
- package/dist/utils/profiler.js +2 -0
- package/dist/utils/render.js +2 -0
- package/dist/utils/replay.js +3 -0
- package/dist/utils/run-cli.js +6 -0
- package/dist/utils/run-id.js +3 -0
- package/dist/utils/safe-read.js +2 -0
- package/dist/utils/task-id.js +2 -0
- package/dist/utils/today.js +2 -0
- package/dist/utils/tty.js +2 -0
- package/dist/utils/walk-dir.js +2 -0
- package/dist/verify/rules/drive-by-scope.js +1 -0
- package/dist/verify/rules/orphan-todos.js +1 -0
- package/dist/verify/rules/registry.js +1 -0
- package/dist/verify/rules/skip-patterns.js +1 -0
- package/dist/verify/rules/types.d.ts +15 -0
- package/dist/verify/rules/types.js +1 -0
- package/dist/verify/rules/ui-language.js +1 -0
- package/dist/verify/run.js +3 -0
- package/dist/wizard/archetype-defaults.js +1 -0
- package/dist/wizard/presets.js +1 -0
- package/dist/wizard/prompts.js +44 -0
- package/dist/wizard/types.d.ts +637 -0
- package/dist/wizard/types.js +1 -0
- package/dist/worktree/harvest.js +2 -0
- package/dist/worktree/links.js +2 -0
- package/dist/worktree/paths.js +2 -0
- package/dist/worktree/validate.js +3 -0
- package/package.json +124 -0
- package/scripts/check-arc42-slots.mjs +738 -0
- package/scripts/check-doc-freshness.mjs +236 -0
- package/scripts/check-doc-set.mjs +243 -0
- package/scripts/check-doc-style.mjs +228 -0
- package/scripts/gold-audit.mjs +319 -0
- package/scripts/lib/doc-gate-allowlist.mjs +123 -0
- package/scripts/lib/doc-set-resolve.mjs +274 -0
- package/scripts/lib/glob-walk.mjs +148 -0
- package/scripts/lib/gold-audit-lib.mjs +1260 -0
- package/scripts/lib/run-helpers.mjs +413 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Codex CLI hook adapter — bridges the Codex hook payload to Claude Code hooks.
|
|
3
|
+
// Usage: node .codex/codex-adapter.mjs [--event <HookEventName>] <hook-path>
|
|
4
|
+
//
|
|
5
|
+
// Codex and Claude Code deliver the SAME envelope on stdin
|
|
6
|
+
// (`{ hook_event_name, tool_name, tool_input, cwd, session_id, transcript_path, ... }`);
|
|
7
|
+
// only the tool vocabulary differs. This adapter rewrites the Codex tool vocabulary
|
|
8
|
+
// (`Bash`/`bash` -> `Bash`, `apply_patch` -> `Edit`/`Write` once per file) and pipes the
|
|
9
|
+
// rewritten payload on the hook's stdin, while ALSO exporting the legacy
|
|
10
|
+
// `CLAUDE_TOOL_INPUT_*` env vars. Both channels are populated on purpose: hooks that
|
|
11
|
+
// parse stdin JSON and hooks that read the env var both work, and `lib.mjs`'s
|
|
12
|
+
// resolveToolInput{Path,Command} prefers stdin with an env fallback (#1565).
|
|
13
|
+
import { execFileSync } from 'node:child_process'
|
|
14
|
+
import { readFileSync } from 'node:fs'
|
|
15
|
+
|
|
16
|
+
const argv = process.argv.slice(2)
|
|
17
|
+
let eventOverride = ''
|
|
18
|
+
if (argv[0] === '--event') {
|
|
19
|
+
eventOverride = argv[1] ?? ''
|
|
20
|
+
argv.splice(0, 2)
|
|
21
|
+
}
|
|
22
|
+
const hookPath = argv[0]
|
|
23
|
+
if (!hookPath) {
|
|
24
|
+
process.stderr.write(
|
|
25
|
+
'[codex-adapter] FATAL: no hook path provided as argument.\n' +
|
|
26
|
+
'Usage: node .codex/codex-adapter.mjs [--event <HookEventName>] <hook-path>\n' +
|
|
27
|
+
'Check .codex/config.toml for correct hook command wiring.\n',
|
|
28
|
+
)
|
|
29
|
+
process.exit(2)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let raw = ''
|
|
33
|
+
try {
|
|
34
|
+
raw = readFileSync(0, 'utf-8').trim()
|
|
35
|
+
// FAIL-OPEN-INTENT: stdin unreadable — no payload means nothing to check, so let the
|
|
36
|
+
// tool call through rather than hard-blocking every Codex action on an adapter I/O fault.
|
|
37
|
+
} catch (err) {
|
|
38
|
+
process.stderr.write(`[codex-adapter] failed to read stdin payload: ${String(err)}\n`)
|
|
39
|
+
process.exit(0)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (!raw) process.exit(0)
|
|
43
|
+
|
|
44
|
+
let payload
|
|
45
|
+
try {
|
|
46
|
+
payload = JSON.parse(raw)
|
|
47
|
+
// FAIL-OPEN-INTENT: payload is not JSON — same reasoning as above; an unparseable
|
|
48
|
+
// envelope carries no command/path to judge, so blocking would be arbitrary.
|
|
49
|
+
} catch (err) {
|
|
50
|
+
process.stderr.write(`[codex-adapter] failed to parse stdin as JSON: ${String(err)}\n`)
|
|
51
|
+
process.exit(0)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const toolName = payload?.tool_name ?? ''
|
|
55
|
+
const toolInput = payload?.tool_input ?? {}
|
|
56
|
+
const hookEventName = payload?.hook_event_name ?? eventOverride
|
|
57
|
+
const env = { ...process.env }
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Runs the target hook once with `payloadOverrides` merged onto the incoming envelope.
|
|
61
|
+
* Every field Codex sent is preserved (transcript_path, session_id, turn_id, model, ...) —
|
|
62
|
+
* hooks read those directly. Exits the adapter on the first non-zero hook exit.
|
|
63
|
+
*/
|
|
64
|
+
function runHook(payloadOverrides, envOverrides) {
|
|
65
|
+
const childPayload = { ...payload, ...payloadOverrides }
|
|
66
|
+
if (hookEventName) childPayload.hook_event_name = hookEventName
|
|
67
|
+
try {
|
|
68
|
+
execFileSync('node', [hookPath], {
|
|
69
|
+
env: { ...env, ...envOverrides },
|
|
70
|
+
input: JSON.stringify(childPayload),
|
|
71
|
+
// fd 0 must be a pipe to carry `input`; stderr/stdout stay inherited so a blocking
|
|
72
|
+
// hook's message reaches Codex unchanged.
|
|
73
|
+
stdio: ['pipe', 'inherit', 'inherit'],
|
|
74
|
+
})
|
|
75
|
+
} catch (err) {
|
|
76
|
+
if (err instanceof Error && 'status' in err) {
|
|
77
|
+
if (typeof err.status === 'number') process.exit(err.status)
|
|
78
|
+
// null status: hook was killed by signal or timed out — hard block
|
|
79
|
+
process.stderr.write(
|
|
80
|
+
`[codex-adapter] hook '${hookPath}' was killed by signal (status=null)\n`,
|
|
81
|
+
)
|
|
82
|
+
process.exit(2)
|
|
83
|
+
}
|
|
84
|
+
process.stderr.write(`[codex-adapter] unexpected error spawning hook: ${String(err)}\n`)
|
|
85
|
+
process.exit(2)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Extract file paths or command depending on tool
|
|
90
|
+
if (toolName === 'apply_patch') {
|
|
91
|
+
// tool_input.command is a unified diff; extract file paths from directive lines.
|
|
92
|
+
// "Move to:" captures the rename destination so SSOT/read-only guards check the target.
|
|
93
|
+
const patchBody = toolInput.command ?? ''
|
|
94
|
+
const files = []
|
|
95
|
+
for (const line of patchBody.split('\n')) {
|
|
96
|
+
const m = line.match(/^\*\*\* (Update File|Add File|Delete File|Move to): (.+)$/)
|
|
97
|
+
// A newly created file maps to Write; every other directive edits an existing path.
|
|
98
|
+
if (m) files.push({ path: m[2].trim(), tool: m[1] === 'Add File' ? 'Write' : 'Edit' })
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (files.length === 0) process.exit(0)
|
|
102
|
+
|
|
103
|
+
// Run the hook once per file — path-scoped hooks need one file_path each.
|
|
104
|
+
// Propagates the first non-zero exit code.
|
|
105
|
+
for (const file of files) {
|
|
106
|
+
runHook(
|
|
107
|
+
{ tool_name: file.tool, tool_input: { file_path: file.path } },
|
|
108
|
+
{ CLAUDE_TOOL_INPUT_PATH: file.path },
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
process.exit(0)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// codex-cli sends 'Bash' (capital B) for shell calls; 'bash' is kept for older
|
|
115
|
+
// builds. Both spellings must also be in the config.toml matcher, or the hook
|
|
116
|
+
// never reaches this adapter at all.
|
|
117
|
+
if (toolName === 'Bash' || toolName === 'bash') {
|
|
118
|
+
const command = toolInput.command ?? ''
|
|
119
|
+
if (!command) process.exit(0)
|
|
120
|
+
runHook({ tool_name: 'Bash', tool_input: { command } }, { CLAUDE_TOOL_INPUT_COMMAND: command })
|
|
121
|
+
process.exit(0)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Non-tool events (UserPromptSubmit, SessionStart, PreCompact, ...) carry no tool
|
|
125
|
+
// vocabulary to translate — forward the envelope verbatim, exactly once.
|
|
126
|
+
if (!toolName) {
|
|
127
|
+
runHook({}, {})
|
|
128
|
+
process.exit(0)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Unknown tool — no-op
|
|
132
|
+
process.exit(0)
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
<% const hasClaude = tools.includes('claude') -%>
|
|
2
|
+
<% const isTs = language === 'typescript' || language === 'multi' -%>
|
|
3
|
+
<% const isL2 = governanceLevel !== 'L1' -%>
|
|
4
|
+
<% const hasNoAnyHook = (locals.languageHooks || []).some(h => h.name === 'check-no-any.mjs') -%>
|
|
5
|
+
[features]
|
|
6
|
+
hooks = true
|
|
7
|
+
|
|
8
|
+
# TRUST: Codex runs a project hook only after a one-time approval, recorded as a
|
|
9
|
+
# trusted_hash under [hooks.state] in ~/.codex/config.toml and keyed by
|
|
10
|
+
# <config-path>:<event>:<group-index>:<hook-index>. An unapproved entry is skipped
|
|
11
|
+
# SILENTLY — no stderr, no exit code, the guard simply never runs. Editing this file
|
|
12
|
+
# invalidates the approval for the entries it changes. Automation must therefore
|
|
13
|
+
# pre-approve interactively once, or pass `codex exec --dangerously-bypass-hook-trust`.
|
|
14
|
+
|
|
15
|
+
# ── PreToolUse: bash commands ─────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
[[hooks.PreToolUse]]
|
|
18
|
+
matcher = "^(Bash|bash)$"
|
|
19
|
+
|
|
20
|
+
[[hooks.PreToolUse.hooks]]
|
|
21
|
+
type = "command"
|
|
22
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/stop-dangerous.mjs"
|
|
23
|
+
timeout = 5
|
|
24
|
+
<% if (hasClaude) { %>
|
|
25
|
+
[[hooks.PreToolUse.hooks]]
|
|
26
|
+
type = "command"
|
|
27
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/enforce-gate-before-pr.mjs"
|
|
28
|
+
timeout = 5
|
|
29
|
+
<% } %>
|
|
30
|
+
<% if (hasClaude && isL2) { %>
|
|
31
|
+
[[hooks.PreToolUse.hooks]]
|
|
32
|
+
type = "command"
|
|
33
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/closer-mode-guard.mjs"
|
|
34
|
+
timeout = 5
|
|
35
|
+
<% } %>
|
|
36
|
+
# ── PreToolUse: file edits (apply_patch) ─────────────────────────────────────
|
|
37
|
+
|
|
38
|
+
[[hooks.PreToolUse]]
|
|
39
|
+
matcher = "^apply_patch$"
|
|
40
|
+
|
|
41
|
+
[[hooks.PreToolUse.hooks]]
|
|
42
|
+
type = "command"
|
|
43
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/enforce-read-only.mjs"
|
|
44
|
+
timeout = 3
|
|
45
|
+
|
|
46
|
+
[[hooks.PreToolUse.hooks]]
|
|
47
|
+
type = "command"
|
|
48
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/pre-edit-ssot-guard.mjs"
|
|
49
|
+
timeout = 3
|
|
50
|
+
|
|
51
|
+
# ── PostToolUse: after file edits ─────────────────────────────────────────────
|
|
52
|
+
|
|
53
|
+
[[hooks.PostToolUse]]
|
|
54
|
+
matcher = "^apply_patch$"
|
|
55
|
+
|
|
56
|
+
[[hooks.PostToolUse.hooks]]
|
|
57
|
+
type = "command"
|
|
58
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/check-no-orphan-todo.mjs"
|
|
59
|
+
timeout = 5
|
|
60
|
+
|
|
61
|
+
[[hooks.PostToolUse.hooks]]
|
|
62
|
+
type = "command"
|
|
63
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/check-no-placeholders.mjs"
|
|
64
|
+
timeout = 5
|
|
65
|
+
|
|
66
|
+
<% if (locals.enableNoSkippedTests !== false) { %>
|
|
67
|
+
[[hooks.PostToolUse.hooks]]
|
|
68
|
+
type = "command"
|
|
69
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/check-no-skipped-tests.mjs"
|
|
70
|
+
timeout = 5
|
|
71
|
+
<% } %>
|
|
72
|
+
<% if (enableSecurityScanning) { %>
|
|
73
|
+
[[hooks.PostToolUse.hooks]]
|
|
74
|
+
type = "command"
|
|
75
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/check-no-pii.mjs"
|
|
76
|
+
timeout = 5
|
|
77
|
+
<% } %>
|
|
78
|
+
<% if (hasClaude && hasNoAnyHook) { %>
|
|
79
|
+
[[hooks.PostToolUse.hooks]]
|
|
80
|
+
type = "command"
|
|
81
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/check-no-any.mjs"
|
|
82
|
+
timeout = 5
|
|
83
|
+
<% } %>
|
|
84
|
+
<% if (hasClaude && isTs) { %>
|
|
85
|
+
[[hooks.PostToolUse.hooks]]
|
|
86
|
+
type = "command"
|
|
87
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/check-circular-deps.mjs"
|
|
88
|
+
timeout = 10
|
|
89
|
+
|
|
90
|
+
[[hooks.PostToolUse.hooks]]
|
|
91
|
+
type = "command"
|
|
92
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/check-no-unused-exports.mjs"
|
|
93
|
+
timeout = 60
|
|
94
|
+
<% } %>
|
|
95
|
+
<% if (hasClaude) { %>
|
|
96
|
+
# ── PostToolUse: after bash commands ─────────────────────────────────────────
|
|
97
|
+
|
|
98
|
+
[[hooks.PostToolUse]]
|
|
99
|
+
matcher = "^(Bash|bash)$"
|
|
100
|
+
|
|
101
|
+
[[hooks.PostToolUse.hooks]]
|
|
102
|
+
type = "command"
|
|
103
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/post-commit-check.mjs"
|
|
104
|
+
timeout = 3
|
|
105
|
+
|
|
106
|
+
# ── PreCompact ────────────────────────────────────────────────────────────────
|
|
107
|
+
|
|
108
|
+
[[hooks.PreCompact]]
|
|
109
|
+
|
|
110
|
+
[[hooks.PreCompact.hooks]]
|
|
111
|
+
type = "command"
|
|
112
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/pre-compact.mjs"
|
|
113
|
+
timeout = 3
|
|
114
|
+
|
|
115
|
+
# ── SubagentStop ──────────────────────────────────────────────────────────────
|
|
116
|
+
# #2403: cleanup companion to pre-spawn-worktree-guard.mjs. Unlike the guard (which
|
|
117
|
+
# keys off `tool_input.subagent_type`), this hook reads only top-level envelope
|
|
118
|
+
# fields (`agent`/`subagent_type`/`agent_type`, `cwd`) that Codex's non-tool
|
|
119
|
+
# passthrough already forwards verbatim — and degrades gracefully when they are
|
|
120
|
+
# absent. Always exits 0.
|
|
121
|
+
|
|
122
|
+
[[hooks.SubagentStop]]
|
|
123
|
+
|
|
124
|
+
[[hooks.SubagentStop.hooks]]
|
|
125
|
+
type = "command"
|
|
126
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/post-subagent-release.mjs"
|
|
127
|
+
timeout = 3
|
|
128
|
+
<% } %>
|
|
129
|
+
<% if (hasClaude && isL2) { %>
|
|
130
|
+
# ── UserPromptSubmit ──────────────────────────────────────────────────────────
|
|
131
|
+
|
|
132
|
+
[[hooks.UserPromptSubmit]]
|
|
133
|
+
|
|
134
|
+
[[hooks.UserPromptSubmit.hooks]]
|
|
135
|
+
type = "command"
|
|
136
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/post-brainstorm-stop.mjs"
|
|
137
|
+
timeout = 3
|
|
138
|
+
|
|
139
|
+
[[hooks.UserPromptSubmit.hooks]]
|
|
140
|
+
type = "command"
|
|
141
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/skill-forced-eval.mjs"
|
|
142
|
+
timeout = 3
|
|
143
|
+
|
|
144
|
+
[[hooks.UserPromptSubmit.hooks]]
|
|
145
|
+
type = "command"
|
|
146
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/guard-task-completion.mjs"
|
|
147
|
+
timeout = 3
|
|
148
|
+
<% if (locals.enableEvidenceHarness !== false) { %>
|
|
149
|
+
[[hooks.UserPromptSubmit.hooks]]
|
|
150
|
+
type = "command"
|
|
151
|
+
command = "node .codex/codex-adapter.mjs .claude/hooks/guard-done-evidence.mjs"
|
|
152
|
+
timeout = 3
|
|
153
|
+
<% } %>
|
|
154
|
+
<% } %>
|
|
155
|
+
# ── Not bridged ───────────────────────────────────────────────────────────────
|
|
156
|
+
#
|
|
157
|
+
# Every Arbiter hook that is wired for Claude Code but NOT bridged above, with the
|
|
158
|
+
# reason. The list covers the full Arbiter hook set; a hook this project does not
|
|
159
|
+
# emit simply does not exist here. Machine-read by the codex-adapter parity test —
|
|
160
|
+
# keep the `# unbridgeable: <file> — <reason>` shape.
|
|
161
|
+
#
|
|
162
|
+
# No Codex hook event exists:
|
|
163
|
+
# unbridgeable: stop-evidence-guard.mjs — Claude `Stop`; Codex accepts a Stop handler
|
|
164
|
+
# only as an allowlisted executor MCP tool, never as a config.toml command hook.
|
|
165
|
+
# unbridgeable: stop-finding-loss.mjs — Claude `Stop`; same reason as above.
|
|
166
|
+
# unbridgeable: debug-state-on-failure.mjs — Claude `PostToolUseFailure`; Codex has no
|
|
167
|
+
# failed-tool-call hook event.
|
|
168
|
+
# unbridgeable: exitplanmode-banner.mjs — Claude `PostToolUse:ExitPlanMode`; Codex has
|
|
169
|
+
# no plan-mode tool to hook.
|
|
170
|
+
# unbridgeable: pre-spawn-worktree-guard.mjs — Claude `PreToolUse:Task|Agent`; Codex
|
|
171
|
+
# `SubagentStart` carries no `tool_input`, so the write-intent signal the guard keys
|
|
172
|
+
# off has no equivalent in the Codex payload.
|
|
173
|
+
#
|
|
174
|
+
# A Codex hook event exists, but bridging it would be wrong:
|
|
175
|
+
# unbridgeable: post-edit-dispatch.mjs — rewrites the edited file (format + lint --fix);
|
|
176
|
+
# a hook that mutates the tree mid-turn races Codex's own apply_patch.
|
|
177
|
+
# unbridgeable: wiki-on-commit.mjs — regenerates docs into the working tree; same
|
|
178
|
+
# mid-turn mutation race as post-edit-dispatch.
|
|
179
|
+
# unbridgeable: pre-edit-plan-anchor.mjs — the Codex track anchors plans through
|
|
180
|
+
# `.agents/plan/PLAN.json`; bridging the Claude anchor would enforce against the
|
|
181
|
+
# wrong artifact and block every apply_patch.
|
|
182
|
+
#
|
|
183
|
+
# Not emitted by any generator (present only in arbiter's own .claude/settings.json),
|
|
184
|
+
# so the generated config cannot reference a file it does not emit:
|
|
185
|
+
# unbridgeable: check-no-direct-spawn.mjs — self-config only, no generator template.
|
|
186
|
+
# unbridgeable: pre-edit-load-memory.mjs — self-config only, no generator template.
|
|
187
|
+
# unbridgeable: post-edit-artifact-schema.mjs — self-config only (staged self-only in
|
|
188
|
+
# scripts/canon01-self-only.json until the target-side ID registry exists); its registered
|
|
189
|
+
# instances are arbiter's own governance SSOT paths, which a Codex-driven target does not have.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Compliance Gate Mapping — <%= projectName %>
|
|
2
|
+
|
|
3
|
+
<!-- arbiter-managed: compliance-mapping (#710) -->
|
|
4
|
+
|
|
5
|
+
> Maps every arbiter-generated quality gate to the compliance control it satisfies.
|
|
6
|
+
> Use this document to accelerate audit preparation and evidence collection.
|
|
7
|
+
>
|
|
8
|
+
<% const _iso = typeof enableIso27001Mapping !== 'undefined' && enableIso27001Mapping === true; const _nis2 = typeof enableNis2Mapping !== 'undefined' && enableNis2Mapping === true; const _gdpr = typeof enableGdprMapping !== 'undefined' && enableGdprMapping === true; %>
|
|
9
|
+
> Generated frameworks: <%= [_iso && 'ISO 27001:2022', _nis2 && 'NIS2 Art.21.2', _gdpr && 'GDPR'].filter(Boolean).join(' · ') || 'none' %>
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
<% if (_iso) { %>
|
|
13
|
+
|
|
14
|
+
## ISO 27001:2022 Annex A — Gate Coverage
|
|
15
|
+
|
|
16
|
+
Each row maps an arbiter-generated gate or artifact to the ISO 27001:2022 Annex A control it provides evidence for.
|
|
17
|
+
|
|
18
|
+
| Gate / Artifact | Script / File | Annex A Control | Control title | Coverage |
|
|
19
|
+
| --------------- | ------------- | --------------- | ------------- | -------- |
|
|
20
|
+
| Format check | `npx prettier --check` | A.8.28 | Secure coding | ✅ Partial |
|
|
21
|
+
| Lint / static analysis | `npx eslint` / language linter | A.8.28 | Secure coding | ✅ Partial |
|
|
22
|
+
| Unit + integration tests | `check-all.mjs L1` | A.8.29 | Security testing in development and acceptance | ✅ Covered |
|
|
23
|
+
| Coverage gate | `scripts/check-coverage.mjs` | A.8.29 | Security testing in development and acceptance | ✅ Covered |
|
|
24
|
+
| Dependency audit | `npm audit` / `cargo audit` / `pip-audit` | A.8.8 | Management of technical vulnerabilities | ✅ Covered |
|
|
25
|
+
| Secret scanning | `gitleaks` (nightly + pre-push hook) | A.8.12 | Data leakage prevention | ✅ Covered |
|
|
26
|
+
| PII scan | `scripts/pii-scan.mjs` | A.8.11 | Data masking | ✅ Covered |
|
|
27
|
+
| STRIDE threat model | `docs/SECURITY/STRIDE.md` | A.8.16 | Monitoring activities | ✅ Covered |
|
|
28
|
+
| OWASP suppression log | `docs/SECURITY/owasp-suppressions.xml` | A.8.20 | Networks security | ✅ Partial |
|
|
29
|
+
| Access control middleware | `src/middleware/auth*` | A.8.2 | Privileged access rights | ✅ Covered |
|
|
30
|
+
| CODEOWNERS | `.github/CODEOWNERS` | A.5.2 | Information security roles | ✅ Covered |
|
|
31
|
+
| AGENTS.md invariants | `AGENTS.md §Invariants` | A.5.36 | Compliance with policies | ✅ Covered |
|
|
32
|
+
| Risk register | `docs/GOVERNANCE/RISK_REGISTER.md` | A.8.24 | Use of cryptography | ❌ Partial (manual) |
|
|
33
|
+
| RACI matrix | `docs/GOVERNANCE/RACI.md` | A.5.2 | Roles and responsibilities | ✅ Covered |
|
|
34
|
+
| Evidence harness | `scripts/collect-evidence.mjs` | A.5.36 | Compliance with policies | ✅ Covered |
|
|
35
|
+
| Mutation testing | `stryker` / `cargo-mutants` | A.8.29 | Security testing | ✅ Covered |
|
|
36
|
+
| Contract testing | `pact` / `buf breaking` | A.8.26 | Application security requirements | ✅ Covered |
|
|
37
|
+
| Secure coding checklist | `docs/SECURE_CODING_CHECKLIST.md` | A.8.28 | Secure coding | ✅ Covered |
|
|
38
|
+
| Commit signing / verified commits | `.github/workflows/` | A.8.32 | Change management | ✅ Partial |
|
|
39
|
+
| Branch protection rules | GitHub branch ruleset | A.5.3 | Segregation of duties | ✅ Covered |
|
|
40
|
+
<% if (hasDatabase) { %>
|
|
41
|
+
| Database migration tests | Testcontainers / `check-all.mjs L2` | A.8.33 | Test information | ✅ Covered |
|
|
42
|
+
<% } %><% if (hasPublicApi) { %>
|
|
43
|
+
| API contract tests | Pact / OpenAPI diff | A.8.26 | Application security requirements | ✅ Covered |
|
|
44
|
+
| Rate limiting middleware | `src/middleware/rate-limit*` | A.8.20 | Networks security | ✅ Covered |
|
|
45
|
+
<% } %>
|
|
46
|
+
|
|
47
|
+
### ISO 27001 Audit Preparation Checklist
|
|
48
|
+
|
|
49
|
+
- [ ] Risk register reviewed and signed off (§6.1.2)
|
|
50
|
+
- [ ] Statement of Applicability (SoA) prepared listing all 93 Annex A controls
|
|
51
|
+
- [ ] Evidence collected from `scripts/collect-evidence.mjs` (if L3)
|
|
52
|
+
- [ ] Internal audit scheduled (§9.2)
|
|
53
|
+
- [ ] Management review documented (§9.3)
|
|
54
|
+
<% } %><% if (_nis2) { %>
|
|
55
|
+
|
|
56
|
+
## NIS2 Directive Art.21.2 — Gate Coverage
|
|
57
|
+
|
|
58
|
+
Maps arbiter gates to NIS2 Article 21.2 cybersecurity risk-management measures.
|
|
59
|
+
|
|
60
|
+
| Gate / Artifact | Script / File | NIS2 Art.21.2 Ref | Measure | Coverage |
|
|
61
|
+
| --------------- | ------------- | ----------------- | ------- | -------- |
|
|
62
|
+
| Access control middleware | `src/middleware/auth*` | Art.21.2(i) | Access control and asset management | ✅ Covered |
|
|
63
|
+
| MFA / session management | `src/middleware/session*` | Art.21.2(i) | Access control | ✅ Partial |
|
|
64
|
+
| Dependency audit | `npm audit` / `cargo audit` | Art.21.2(a) | Risk analysis and information system security | ✅ Covered |
|
|
65
|
+
| Secret scanning | `gitleaks` | Art.21.2(a) | Risk analysis | ✅ Covered |
|
|
66
|
+
| Incident runbook | `docs/OPERATIONS_HANDBOOK.md §Runbooks` | Art.21.2(b) | Incident handling | ✅ Covered |
|
|
67
|
+
| Evidence harness | `scripts/collect-evidence.mjs` | Art.21.2(j) | Policies on the use of cryptography and encryption | ✅ Partial |
|
|
68
|
+
| Supply chain audit | `npm audit` / `trivy fs` | Art.21.2(d) | Security in network and information systems acquisition | ✅ Covered |
|
|
69
|
+
| STRIDE threat model | `docs/SECURITY/STRIDE.md` | Art.21.2(a) | Risk analysis | ✅ Covered |
|
|
70
|
+
| Business continuity | `docs/OPERATIONS_HANDBOOK.md §Rollback` | Art.21.2(c) | Business continuity (backup, DR) | ✅ Partial |
|
|
71
|
+
| Secure coding | `docs/SECURE_CODING_CHECKLIST.md` | Art.21.2(e) | Security in human resources | ✅ Covered |
|
|
72
|
+
| Coverage gate | `scripts/check-coverage.mjs` | Art.21.2(a) | Risk analysis | ✅ Covered |
|
|
73
|
+
| Rate limiting | `src/middleware/rate-limit*` | Art.21.2(f) | Policies and procedures for network security | ✅ Covered |
|
|
74
|
+
| Nightly security scan | `.github/workflows/nightly.yml` | Art.21.2(a) | Risk analysis | ✅ Covered |
|
|
75
|
+
|
|
76
|
+
### NIS2 Audit Preparation Checklist
|
|
77
|
+
|
|
78
|
+
- [ ] Incident reporting procedure documented and tested (Art.23 — 72h notification SLA)
|
|
79
|
+
- [ ] Supply chain security contracts reviewed (Art.21.2(d))
|
|
80
|
+
- [ ] Business continuity tested (DR drill) (Art.21.2(c))
|
|
81
|
+
- [ ] Security training records maintained (Art.21.2(e))
|
|
82
|
+
<% } %><% if (_gdpr) { %>
|
|
83
|
+
|
|
84
|
+
## GDPR — Gate Coverage
|
|
85
|
+
|
|
86
|
+
Maps arbiter gates to GDPR articles they provide evidence for.
|
|
87
|
+
|
|
88
|
+
| Gate / Artifact | Script / File | GDPR Article | Principle / Requirement | Coverage |
|
|
89
|
+
| --------------- | ------------- | ------------ | ----------------------- | -------- |
|
|
90
|
+
| PII scan | `scripts/pii-scan.mjs` | Art.5(1)(c) | Data minimisation | ✅ Covered |
|
|
91
|
+
| PII scan | `scripts/pii-scan.mjs` | Art.5(1)(f) | Integrity and confidentiality | ✅ Covered |
|
|
92
|
+
| PII scan | `scripts/pii-scan.mjs` | Art.25 | Data protection by design | ✅ Covered |
|
|
93
|
+
| Secret scanning | `gitleaks` | Art.32 | Security of processing | ✅ Covered |
|
|
94
|
+
| Dependency audit | `npm audit` | Art.32(1)(b) | Ongoing confidentiality, integrity, availability | ✅ Covered |
|
|
95
|
+
| Access control middleware | `src/middleware/auth*` | Art.32(1)(a) | Pseudonymisation and encryption | ✅ Partial |
|
|
96
|
+
| Rate limiting | `src/middleware/rate-limit*` | Art.32(1)(b) | Ongoing availability and resilience | ✅ Covered |
|
|
97
|
+
| Session lifecycle tests | Test suite (dimension 21) | Art.5(1)(f) | Integrity and confidentiality | ✅ Covered |
|
|
98
|
+
| Evidence harness | `scripts/collect-evidence.mjs` | Art.30 | Records of processing activities | ✅ Partial |
|
|
99
|
+
| Audit trail dimension | Test taxonomy dim.18 | Art.30 | Records of processing activities | ✅ Covered |
|
|
100
|
+
| STRIDE threat model | `docs/SECURITY/STRIDE.md` | Art.35 | Data protection impact assessment (DPIA) | ✅ Partial |
|
|
101
|
+
| Incident runbook | `docs/OPERATIONS_HANDBOOK.md` | Art.33 | Notification of a personal data breach (72h) | ✅ Partial |
|
|
102
|
+
<% if (hasDatabase) { %>
|
|
103
|
+
| Database integration tests | Testcontainers | Art.32(1)(d) | Regular testing, assessing and evaluating | ✅ Covered |
|
|
104
|
+
<% } %>
|
|
105
|
+
|
|
106
|
+
### GDPR Audit Preparation Checklist
|
|
107
|
+
|
|
108
|
+
- [ ] Record of Processing Activities (RoPA) maintained (Art.30)
|
|
109
|
+
- [ ] Privacy notices reviewed (Art.13/14)
|
|
110
|
+
- [ ] Data subject request (DSR) procedure tested (Art.15–21)
|
|
111
|
+
- [ ] Data retention schedule documented (Art.5(1)(e))
|
|
112
|
+
- [ ] DPA agreements with processors in place (Art.28)
|
|
113
|
+
- [ ] DPIA conducted for high-risk processing (Art.35)
|
|
114
|
+
<% } %>
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## How to Use This Document
|
|
119
|
+
|
|
120
|
+
1. **Audit preparation**: present the relevant section to auditors as evidence that gates are wired to controls
|
|
121
|
+
2. **Gap analysis**: cells marked `❌ Gap` or `✅ Partial` require manual evidence collection
|
|
122
|
+
3. **Update cadence**: re-run `arbiter update` after adding new gates to refresh this file
|
|
123
|
+
|
|
124
|
+
_Generated by arbiter. Teams are responsible for collecting and retaining evidence artifacts._
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Compliance & Collaboration Menu — <%= projectName %>
|
|
2
|
+
|
|
3
|
+
<!-- arbiter-managed: compliance-menu (#1254) -->
|
|
4
|
+
|
|
5
|
+
> The (team × compliance) menu. arbiter declines three orthogonal axes onto your
|
|
6
|
+
> project: **who merges** (collaborationMode), **how strict the gates are**
|
|
7
|
+
> (governanceLevel), and **which compliance overlay** scaffolds domain controls
|
|
8
|
+
> (industryOverlay). This document presents every cell with its rationale so you
|
|
9
|
+
> can pick a coherent combination — then `arbiter doctor` flags incoherent ones.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Axis 1 — Team (collaborationMode)
|
|
14
|
+
|
|
15
|
+
Controls branching strategy, CI shape, and merge ceremony.
|
|
16
|
+
|
|
17
|
+
| Mode | Branching | Merge ceremony | Use when |
|
|
18
|
+
| -------------- | -------------------------- | -------------------------------------- | ----------------------------------------- |
|
|
19
|
+
| `trunk-solo` | `trunk-direct` | direct push or opt-in PR fast-forward | one author, minimal ceremony |
|
|
20
|
+
| `peer-review` | `github-flow` | mandatory PR, ff-only merge | small team, shared trust (recommended) |
|
|
21
|
+
| `gated-review` | `github-flow-with-develop` | required approvals, merge queue, attestation | regulated / enterprise, audit trail |
|
|
22
|
+
|
|
23
|
+
## Axis 2 — Compliance (industryOverlay)
|
|
24
|
+
|
|
25
|
+
Emits domain-specific compliance scaffolding + enforceable gates. Single-valued;
|
|
26
|
+
`none` = no overlay. Weight tiers drive the coherence check below.
|
|
27
|
+
|
|
28
|
+
| Overlay | Weight | What it emits |
|
|
29
|
+
| ---------- | ------ | ------------------------------------------------------------------- |
|
|
30
|
+
| `none` | — | nothing |
|
|
31
|
+
| `generic` | light | language-neutral audit-trail policy + gate rules |
|
|
32
|
+
| `sox` | medium | SOX audit-trail docs + gate rules |
|
|
33
|
+
| `gdpr` | medium | GDPR controls→gates traceability overlay |
|
|
34
|
+
| `iso9001` | medium | quality-process overlay: requirement→test RTM + doc-control + CAPA + gate |
|
|
35
|
+
| `iso27001` | heavy | ISO 27001:2022 Annex-A security controls→gate traceability |
|
|
36
|
+
| `pharma` | heavy | 21 CFR Part 11 audit-trail overlay (Java JPA/ArchUnit scaffolding) |
|
|
37
|
+
| `regulated`| heavy | high-assurance bundle: separation-of-duties + retention + suppression-expiry + signing/SBOM + mutation floor |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## The menu — (team × compliance) cells
|
|
42
|
+
|
|
43
|
+
Each cell pairs a team mode with a compliance overlay. The **rationale** column
|
|
44
|
+
explains the intended fit; pick the row that matches your delivery context.
|
|
45
|
+
|
|
46
|
+
| Team | Compliance | Rationale |
|
|
47
|
+
| -------------- | ---------- | -------------------------------------------------------------------------------- |
|
|
48
|
+
| `trunk-solo` | `none` | fastest path; ship-and-iterate solo project, no compliance obligation |
|
|
49
|
+
| `trunk-solo` | `iso9001` | solo product with a quality-management obligation; RTM + CAPA without team ceremony |
|
|
50
|
+
| `peer-review` | `generic` | small team that wants an audit-trail policy without a named regulation |
|
|
51
|
+
| `peer-review` | `gdpr` | small team handling personal data; GDPR controls backed by L2 gates |
|
|
52
|
+
| `peer-review` | `iso9001` | small team under a quality-management system (ISO 9001) |
|
|
53
|
+
| `gated-review` | `iso27001` | regulated team; security controls + approvals + attestation chain |
|
|
54
|
+
| `gated-review` | `pharma` | life-sciences team under 21 CFR Part 11; full audit trail + gated review |
|
|
55
|
+
|
|
56
|
+
> The menu is illustrative, not exhaustive — any (team × overlay) pair is valid;
|
|
57
|
+
> coherence is governed by the governanceLevel axis below, not by the team axis.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Coherence — (overlay × governanceLevel)
|
|
62
|
+
|
|
63
|
+
`arbiter doctor` runs this check and the wizard surfaces it after the overlay
|
|
64
|
+
choice. **Heavy** overlays expect **L3+** rigour (mutation, evidence harness,
|
|
65
|
+
human-approval gates); **medium** overlays expect **L2+** (debt + security
|
|
66
|
+
scans). A heavy overlay at L1 scaffolds controls the gate set never enforces —
|
|
67
|
+
flagged as a `WARN` (advisory, never blocking).
|
|
68
|
+
|
|
69
|
+
| Overlay weight | L1 | L2 | L3 | L4 |
|
|
70
|
+
| --------------------- | ------ | ------ | ---- | ---- |
|
|
71
|
+
| light (`generic`) | OK | OK | OK | OK |
|
|
72
|
+
| medium (`sox`, `gdpr`, `iso9001`) | WARN | OK | OK | OK |
|
|
73
|
+
| heavy (`iso27001`, `pharma`, `regulated`) | WARN | WARN | OK | OK |
|
|
74
|
+
|
|
75
|
+
**Recommended pairings:** `pharma`/`iso27001` → L3 or L4; `gdpr`/`sox`/`iso9001`
|
|
76
|
+
→ L2+; `generic` → any level.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## How to choose
|
|
81
|
+
|
|
82
|
+
1. Pick your **team** mode (who merges) — it sets branching + merge ceremony.
|
|
83
|
+
2. Pick your **governanceLevel** (how strict) — L1 lightweight … L4 audit-grade.
|
|
84
|
+
3. Pick your **compliance overlay** (which controls) — keep it coherent with the
|
|
85
|
+
level using the table above.
|
|
86
|
+
4. Run `arbiter doctor` to confirm the chosen cell is coherent.
|
|
87
|
+
|
|
88
|
+
Re-run `arbiter init` (or `arbiter configure`) to change any axis; overlays are
|
|
89
|
+
brownfield-safe — re-init never overwrites your customised compliance documents.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Contract Testing Policy
|
|
2
|
+
|
|
3
|
+
**Contract strategy:** `<%= contractType %>`
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Contract testing verifies that services honour the contracts they expose to consumers. This document defines the testing approach for this project.
|
|
8
|
+
|
|
9
|
+
## Gate
|
|
10
|
+
|
|
11
|
+
- **L2+:** Contract tests run in CI. Failures block merge.
|
|
12
|
+
- **L1:** Contract testing not enforced (no gate).
|
|
13
|
+
|
|
14
|
+
## Tools
|
|
15
|
+
|
|
16
|
+
<% if (contractType === 'rest-owned') { %>
|
|
17
|
+
**Pact** — consumer-driven contract testing. The consumer generates a pact file; the provider verifies it.
|
|
18
|
+
<% } else if (contractType === 'rest-public') { %>
|
|
19
|
+
**openapi-diff** — detects breaking changes in the OpenAPI spec between versions.
|
|
20
|
+
<% } else if (contractType === 'graphql') { %>
|
|
21
|
+
**graphql-inspector** — schema diffing to detect breaking changes in the GraphQL schema.
|
|
22
|
+
<% } else if (contractType === 'grpc') { %>
|
|
23
|
+
**buf breaking** — detects breaking changes in Protobuf definitions.
|
|
24
|
+
<% } else if (contractType === 'message-queue') { %>
|
|
25
|
+
**Confluent Schema Registry** — calls `testCompatibility()` to verify BACKWARD or FULL schema compatibility between producer and consumer. A reachability-only check does not satisfy INV-41.
|
|
26
|
+
<% } %>
|
|
27
|
+
|
|
28
|
+
## Running Locally
|
|
29
|
+
|
|
30
|
+
See `scripts/check-all.mjs` L2 gate for the exact command.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
["/health"]
|
package/dist/templates/contract-testing/api-snapshots/openapi-required-fields-baseline.json.ejs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
package <%= basePackage || 'com.example' %>.contracts;
|
|
2
|
+
|
|
3
|
+
import org.junit.jupiter.api.Test;
|
|
4
|
+
|
|
5
|
+
import java.io.File;
|
|
6
|
+
import java.io.IOException;
|
|
7
|
+
|
|
8
|
+
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
9
|
+
|
|
10
|
+
class GraphqlSchemaTest {
|
|
11
|
+
|
|
12
|
+
@Test
|
|
13
|
+
void schemaHasNoBreakingChanges() throws IOException, InterruptedException {
|
|
14
|
+
File reference = new File("contracts/schema-reference.graphql");
|
|
15
|
+
File current = new File("contracts/schema-current.graphql");
|
|
16
|
+
if (!reference.exists() || !current.exists()) {
|
|
17
|
+
System.out.println("[WARN] GraphQL schema files not found — skipping diff");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
ProcessBuilder pb = new ProcessBuilder(
|
|
21
|
+
"npx", "@graphql-inspector/cli", "diff",
|
|
22
|
+
"contracts/schema-reference.graphql",
|
|
23
|
+
"contracts/schema-current.graphql"
|
|
24
|
+
);
|
|
25
|
+
pb.inheritIO();
|
|
26
|
+
int exitCode = pb.start().waitFor();
|
|
27
|
+
assertEquals(0, exitCode, "GraphQL schema has breaking changes — see diff output above");
|
|
28
|
+
}
|
|
29
|
+
}
|