@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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,713 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
This project uses [changesets](https://github.com/changesets/changesets) and follows
|
|
6
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) conventions. Versions are aligned to
|
|
7
|
+
[Semantic Versioning](https://semver.org/) (pre-1.0: a breaking change bumps the minor).
|
|
8
|
+
|
|
9
|
+
## [0.5.0] — 2026-07-11
|
|
10
|
+
|
|
11
|
+
**Channel:** stable
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- ADR-103 (#1873, T1 governance): worktree-isolated parallel execution carve-out.
|
|
16
|
+
Rule 50 (batch execution) gains a conditional exemption — parallel agents may
|
|
17
|
+
edit/commit/branch only when each runs in a dedicated worktree opened via
|
|
18
|
+
`arbiter worktree open`, on a distinct branch, with plan-manifest-disjoint
|
|
19
|
+
file-sets; dependency changes, main-tree edits and tags stay prohibited. The
|
|
20
|
+
edit lands dual-side (self file + claude template + codex template) with a
|
|
21
|
+
byte-parity test. The ADR also fixes the engine/primitive boundary for the
|
|
22
|
+
wave technique (no new TS engine; deterministic leaf primitives only), the
|
|
23
|
+
anti-deadlock lock order (gate-lock ≺ worktree-lock ≺ wave-claim, gate-exec is
|
|
24
|
+
a leaf), and the owner-ratified hybrid convergence model (governed repos: one
|
|
25
|
+
wave-PR; non-governed repos: N-PR + merge-train in the skill's cross-repo
|
|
26
|
+
appendix). `ship --batch` is deprecated at warn stage in favour of `/drain`
|
|
27
|
+
(wave-drain skill); the batch seam stays sync and untouched.
|
|
28
|
+
- Wave primitives T2-T5 of #1873 (ADR-103 leaf set). T2: `isStale` is now
|
|
29
|
+
liveness-first — a live same-boot lock is never stolen on age alone (the
|
|
30
|
+
double-gate hole), a dead pid is stale immediately, and the age backstop
|
|
31
|
+
applies only to EPERM unknown-user pids. T3: new `arbiter gate-exec [--key K]
|
|
32
|
+
-- <cmd...>` per-repo gate mutex — key hashed from the git common dir so all
|
|
33
|
+
worktrees of a repo converge on one flock(1) lock under XDG_RUNTIME_DIR;
|
|
34
|
+
kernel-side blocking wait and release when the gate-exec supervisor is
|
|
35
|
+
SIGKILL/OOM-killed after process-group teardown; killing the Arbiter Node PID alone
|
|
36
|
+
leaves that supervisor holding; exit-code passthrough; fail-closed
|
|
37
|
+
E_GATE_MUTEX_UNSUPPORTED where flock is missing.
|
|
38
|
+
T4: new worktree link strategy `symlink-children` (now the node_modules
|
|
39
|
+
default) — per-child symlinks excluding `.vite`/`.cache`, so parallel
|
|
40
|
+
worktree builds stop corrupting one shared cache; `symlink`/`copy` configs
|
|
41
|
+
unchanged. T5: new `arbiter worktree prune [--stale <hours>] [--execute]`
|
|
42
|
+
zombie reaper — clean trees that are merged or inactive beyond the threshold;
|
|
43
|
+
dry-run by default; dirty trees never touched (INV-96); inactive-unmerged
|
|
44
|
+
candidates keep their branch.
|
|
45
|
+
- wave-drain skill v2 + /drain v2 (T6 of #1873, dual-side): the parallel wave
|
|
46
|
+
protocol proven 2026-07-09/10 lands in the existing skill/command — ADR-103
|
|
47
|
+
legality header (worktree + distinct branch + disjoint file-sets), gate mutex
|
|
48
|
+
via `arbiter gate-exec` (flock(1), supervisor-SIGKILL/OOM-safe, fail-closed serial
|
|
49
|
+
fallback), anti-stall split (deterministic gate-wait vs sweep-bounded
|
|
50
|
+
turn-stall), `conflicts-with:#N` serial lane, optional per-issue 3-hop plan
|
|
51
|
+
gate for `needs-plan`, cap `min(--max-parallel, nproc-2, wave)`, per-worktree
|
|
52
|
+
caches, REAL-diff fan-in order, end-of-wave zombie reaper. Convergence model
|
|
53
|
+
owner-ratified: governed repos ONE wave-PR; the cross-repo appendix documents
|
|
54
|
+
N-PR + merge-train for non-governed repos with explicit caveats. The
|
|
55
|
+
opus-4.8-harness-wave-orchestrator prompt is superseded; SKILL.md/drain.md
|
|
56
|
+
stay byte-equal to their templates (dogfood INV-45).
|
|
57
|
+
- Wave F2 of the flagship epic (#1836): promotes 4 ceremony rules from prose-reviewed
|
|
58
|
+
to wired gates (#1838). CANON-10 (hook↔doc parity between `.claude/settings.json`
|
|
59
|
+
and `.claude/CLAUDE.md`) is now enforced by `check-hook-doc-parity.mjs`. INV-111 is
|
|
60
|
+
extended beyond the generated CLI-reference region to hand-authored prose
|
|
61
|
+
(PRIVACY.md, docs/, website/, excluding decision/roadmap archives and the
|
|
62
|
+
changelog) via `check-phantom-command-scan.mjs`. `check-version-parity.mjs` closes
|
|
63
|
+
the version-drift class fixed once already in F1 (#1837) by permanently checking
|
|
64
|
+
package.json, the compiled CLI's `--version` output, and CHANGELOG.md's top entry
|
|
65
|
+
all agree. `check-doc-links.mjs` now also scans website/ (previously excluded
|
|
66
|
+
outright over VitePress route false-positives — it now resolves `/`-absolute
|
|
67
|
+
routes and extensionless relative sibling links the same way VitePress itself
|
|
68
|
+
does) and self-referential `github.com/.../blob|tree/...` URLs anywhere in the
|
|
69
|
+
corpus, which caught 2 live dead links in `website/.vitepress/config.ts` (ADR
|
|
70
|
+
Ledger / Decisions nav entries still pointed at the pre-#1770 `docs/ADR` and
|
|
71
|
+
`docs/SYSTEM/DECISIONS.md` paths) and a dead `/privacy` route on the homepage —
|
|
72
|
+
all fixed in this PR alongside the gate that now guards them.
|
|
73
|
+
- Wave F2 tranche 2 (#1838, epic #1836): CANON-14's dogfood allowlist becomes an
|
|
74
|
+
auto-diff registry, and derived website pages get a generator with an L1
|
|
75
|
+
freshness gate. `.dogfood-divergences.json` entries now pin the sha256 of the
|
|
76
|
+
exact approved template-vs-materialized diff (`diffHash`): new drift inside an
|
|
77
|
+
allowlisted file, a healed (stale) entry, or a dead entry (path no corpus
|
|
78
|
+
visits) all fail `check-self-dogfood.mjs` instead of being silently absorbed by
|
|
79
|
+
a whole-file skip — the class that let the guard-done-evidence vs
|
|
80
|
+
stop-evidence-guard divergence slip. At introduction the auto-diff caught 1
|
|
81
|
+
stale entry (`check-circular-deps.mjs`, template and copy had already
|
|
82
|
+
converged) and 3 dead entries (`review-code.md`, `gen-wiki.mjs`,
|
|
83
|
+
`check-wiki-lint.mjs` — never visited by any corpus), all removed. Re-pin after
|
|
84
|
+
a reviewed change with `--update-divergences`. New
|
|
85
|
+
`scripts/gen-derived-pages.mjs` emits the active-experiments table
|
|
86
|
+
(website/reference/experimental-policy.md, from src/experimental/registry.ts —
|
|
87
|
+
closing the TODO left by the F1 hand-fix of #1837) and the kit dimension count
|
|
88
|
+
(website/features/index.md, from src/kit/catalog.json — the 77-vs-78 class)
|
|
89
|
+
into marker-delimited regions, prettier-converged, with `--check` wired in L1.
|
|
90
|
+
- #1902: extends the CANON-14 dogfood auto-diff (above) beyond scripts to
|
|
91
|
+
`.github/workflows/*` and every `check-*.mjs`, closing the coverage gap the
|
|
92
|
+
first pass left open.
|
|
93
|
+
- Adds `.github/workflows/generator-matrix.yml`, a dedicated dispatchable +
|
|
94
|
+
weekly + pre-release entry point for arbiter's DEEP generator E2E cells (TS
|
|
95
|
+
packaged-artifact; Python/Go/Rust/Java fixture-functional), independent of
|
|
96
|
+
the broad nightly sweep that already runs them bundled (#1840 F4 tranche 2).
|
|
97
|
+
Kotlin is excluded — declassified to snapshot-only pre-publish (README
|
|
98
|
+
already didn't list it as supported; #1803 is the re-promotion path).
|
|
99
|
+
Toolchain-pin coherence (the #1854/#1856 incident class) is locked by a new
|
|
100
|
+
regression test sharing a `MIN_GO_FOR_PINNED_TOOL` registry with the
|
|
101
|
+
`_nightly.yml.ejs` guard.
|
|
102
|
+
- #1894: Trivy `fs` scanning replaces OWASP Dependency-Check for JVM dependency
|
|
103
|
+
scanning (faster, actively maintained, no NVD API-key friction), with INV-92
|
|
104
|
+
template parity so generated projects get the same swap.
|
|
105
|
+
- `#1839` (F3 friction cut): `--preset` is now a self-sufficient non-interactive fast
|
|
106
|
+
path for `arbiter init` — it no longer additionally requires `--yes`. `resolveConfig`
|
|
107
|
+
only checked `options.yes || recipe !== undefined` before deciding whether to run the
|
|
108
|
+
interactive wizard, so a bare `--preset industrial-grade` still blocked on stdin. This
|
|
109
|
+
restores the "No wizard prompts" behavior documented in ADR-066.
|
|
110
|
+
- `#1839`: `src/commands/init.ts` (~1734 LOC, 6 mixed responsibilities) split into
|
|
111
|
+
`src/commands/init/{resolve-config,build-arbiter-config,generate,github-setup,maturity-gates}.ts`,
|
|
112
|
+
and `src/commands/doctor.ts` split into 5 subcommand modules. Pure extraction —
|
|
113
|
+
both stay thin orchestrators + public barrels (every previously-exported symbol
|
|
114
|
+
is re-exported), no behavior change.
|
|
115
|
+
|
|
116
|
+
### Fixed
|
|
117
|
+
|
|
118
|
+
- #1908/#1909: `gitleaks detect` (both the CI `security-early-fail` job and
|
|
119
|
+
`scripts/check-all.mjs`'s L2 gate) ran with no `--log-opts`, so it scanned
|
|
120
|
+
**all refs** reachable in the checkout, not just the current branch/PR's own
|
|
121
|
+
ancestry — an unrelated, unmerged branch's commit could trip the Security gate
|
|
122
|
+
on every other PR. Durable fix: scope the scan to `--log-opts="HEAD"`, with the
|
|
123
|
+
nightly `gitleaks-history` job keeping `--all --full-history` as the deep
|
|
124
|
+
cross-branch safety net. Also trims ~300 stale fingerprint suppressions from
|
|
125
|
+
`suppressions/.gitleaksignore` that the scope fix makes unnecessary.
|
|
126
|
+
- #1905/#1906/#1910: two `D4-LITE post-merge gate` flakes from `check-self-dogfood`'s
|
|
127
|
+
repo-mutation tests racing on shared fixture state — serialized.
|
|
128
|
+
- #1885/#1886/#1887/#1888/#1907: scaffold-not-wired wiring pass + the "ponytail"
|
|
129
|
+
YAGNI-drafting companion audit — closes several `arbiter init`-generated
|
|
130
|
+
project gaps where a template shipped a check/script that the generated
|
|
131
|
+
`check-all.mjs`/CI never actually invoked (dead-on-arrival gates).
|
|
132
|
+
- #1889: `check-domain-api-surface.mjs` (INV-125) was generated but never wired
|
|
133
|
+
into `check-all.mjs` — another dead gate, now invoked.
|
|
134
|
+
- #1890: generated Java builds now wire checkstyle/pmd/spotbugs/spotless into
|
|
135
|
+
the build (previously templated but not invoked).
|
|
136
|
+
- #1897: codex-only hook parity + spring-modulith dependency wiring.
|
|
137
|
+
- #1898/#1899: java-tooling's `apply(from = ...)` is withheld when the target
|
|
138
|
+
Gradle config block is already inline, avoiding a duplicate-config error.
|
|
139
|
+
- #R-08/#1903: remapped `canonical-mapping.json`'s crosswalk + the phantom-path
|
|
140
|
+
gate (INV-86) after the docs Wave-2 migration left stale entries.
|
|
141
|
+
- #1042/#1840: Java's generated BDD example (`ExampleBddIT.java`) now actually
|
|
142
|
+
runs green instead of silently failing once wired up. The generator now also
|
|
143
|
+
emits `ExampleSteps.java`, the Cucumber glue for `example.feature`'s
|
|
144
|
+
Given/When/Then steps — without it every step resolved as UNDEFINED (Cucumber
|
|
145
|
+
is strict by default), the same class of gap Go/Rust/TS already closed by
|
|
146
|
+
shipping their step definitions alongside the suite/runner.
|
|
147
|
+
|
|
148
|
+
## [0.4.0] — 2026-07-07
|
|
149
|
+
|
|
150
|
+
**Channel:** stable
|
|
151
|
+
|
|
152
|
+
### Highlights
|
|
153
|
+
|
|
154
|
+
- **Wave-2 kit (#1817, A1–A11)** — governance features validated against a real
|
|
155
|
+
100k-LOC adopter project before being absorbed into arbiter:
|
|
156
|
+
- `arbiter init` generates a **five-lane CI shape** (pre-commit / PR-blocking /
|
|
157
|
+
nightly / weekly / release-seal) with tier budgets in comments, plus a sticky
|
|
158
|
+
failure issue for persistently-red nightly/weekly lanes. (A1, A6)
|
|
159
|
+
- **Journey-first Definition-of-Done**, extending INV-114 completion evidence
|
|
160
|
+
from unit coverage to user-journey coverage. (A2)
|
|
161
|
+
- **Zero-retry smoke + quarantine TTL** for E2E suites — a flaky test gets a
|
|
162
|
+
time-boxed quarantine, not an indefinite retry loop. (A3)
|
|
163
|
+
- An installable **E2E constitution** (~10 rules) that ships as project
|
|
164
|
+
governance, not just prose convention. (A4)
|
|
165
|
+
- **`doctor --prove-gates`**: negative-proof checks that a project's gates
|
|
166
|
+
actually catch what they claim to (deliberately break an invariant, assert
|
|
167
|
+
the gate goes red). (A5)
|
|
168
|
+
- Executable **handoff template** + model-pyramid guidance for right-sizing
|
|
169
|
+
which model tier runs a given step. (A7, A8)
|
|
170
|
+
- Cross-stack **kit** gates: Java (Flyway migration hygiene + taxonomy) and
|
|
171
|
+
frontend (design-token hygiene). (A9, A10)
|
|
172
|
+
- **Closer mode**: an installable rule + close-phase + guard hook so an agent
|
|
173
|
+
can drive a task to a verified, merged state autonomously. (A11)
|
|
174
|
+
- **B-prune (#1817, B1+B2)** — removed 2025-era model-tier machinery superseded
|
|
175
|
+
by A8's model-pyramid guidance and the wave-2 kit. `src/sizing/`,
|
|
176
|
+
`src/affinity/`, `src/cost/`, `src/decomposition/`, the multi-pass
|
|
177
|
+
`src/review/` dispatch subsystem, and the `arbiter work` / `findings promote`
|
|
178
|
+
commands are gone (**-11,423 LOC**). `arbiter review diff` remains the one
|
|
179
|
+
review entry point; `verticalsForTier` is now the tier→vertical SSOT.
|
|
180
|
+
- **Dependency hygiene**: dependabot alert backlog drained across fixtures,
|
|
181
|
+
examples, and transitive deps.
|
|
182
|
+
|
|
183
|
+
### Removed
|
|
184
|
+
|
|
185
|
+
- `arbiter work` (issue decomposition backend).
|
|
186
|
+
- `arbiter findings promote` / `arbiter findings list` (auto-drain of the
|
|
187
|
+
finding spool into filed issues) — the spool (`.arbiter/findings/*.jsonl`,
|
|
188
|
+
written by `arbiter note`) is unaffected; promotion is manual now.
|
|
189
|
+
- `arbiter review code` / `arbiter review plan` (multi-pass review dispatch)
|
|
190
|
+
and the cost-tracking runtime (`--skip-budget`, transcript-based cost
|
|
191
|
+
evidence).
|
|
192
|
+
|
|
193
|
+
## [0.3.0] — 2026-07-05
|
|
194
|
+
|
|
195
|
+
**Channel:** stable
|
|
196
|
+
|
|
197
|
+
### Highlights
|
|
198
|
+
|
|
199
|
+
- **First public-release prep (epic #1770, T11)** — the tag `v0.2.0` predates 418 commits
|
|
200
|
+
of internal hardening, so this release ships under a fresh version rather than
|
|
201
|
+
retagging stale history.
|
|
202
|
+
- **Public CLI surface reduced to 11 commands** — experimental/R&D commands hidden from
|
|
203
|
+
`--help` (still reachable, unlisted) and dead R&D commands removed outright.
|
|
204
|
+
- **Docs split**: public-facing docs separated from internal governance docs so the
|
|
205
|
+
published package/README reflects only what an external user needs.
|
|
206
|
+
- **Packaged-artifact E2E**: an outsider-simulation test exercises the packaged tarball
|
|
207
|
+
the way an external consumer would, catching packaging gaps the source tree hides.
|
|
208
|
+
- **Evidence/redaction hardening**: user paths and private-project attributions redacted
|
|
209
|
+
from evidence bundles and examples before anything ships externally.
|
|
210
|
+
- **CI resilience**: templates fall back to `ubuntu-latest` when runner-label variables
|
|
211
|
+
are absent, so generated CI does not silently break for external adopters without the
|
|
212
|
+
self-hosted runner configured.
|
|
213
|
+
- **Iron Laws** codified in project governance (PR-owned-until-merged; pre-existing
|
|
214
|
+
failures are fixed at the root cause, not dismissed).
|
|
215
|
+
|
|
216
|
+
### Changed
|
|
217
|
+
|
|
218
|
+
- `runnerProfile` config axis (`solo` | `fleet`) for the CI cadence model (ADR-101).
|
|
219
|
+
`fleet` (default) is byte-identical to previous output; `solo` moves heavy scheduled
|
|
220
|
+
jobs (fuzz, soak-e2e) to the weekly workflow for single-runner setups, with the weekly
|
|
221
|
+
gate hard-failing on fuzz/soak regressions. (#1693)
|
|
222
|
+
- `exceljs` runtime dependency replaced with a native zero-dependency xlsx writer,
|
|
223
|
+
removing transitive `uuid@8` (GHSA-w5hq-g745-h8pq) from the production closure.
|
|
224
|
+
`arbiter feature-matrix export --format xlsx` output contract unchanged. (#1670)
|
|
225
|
+
|
|
226
|
+
## [0.2.0] — 2026-06-21
|
|
227
|
+
|
|
228
|
+
**Channel:** stable
|
|
229
|
+
|
|
230
|
+
### Highlights
|
|
231
|
+
|
|
232
|
+
- **Gold-depth (epic #1469)** — the gold-audit gains deterministic `forbidden_pattern`,
|
|
233
|
+
`file_stat` and constrained-glob check types (dual-engine byte-parity), a fail-closed
|
|
234
|
+
`freshness()` banner + `gold-audit --check-fresh`, an ADR→check enforcement-linkage gate,
|
|
235
|
+
and a TTY-gated goldness **cockpit** (`gold-audit --cockpit` / `--ascii`).
|
|
236
|
+
- **Governance L4** — `GovernanceLevel` widened to L1/L2/L3/L4; the evidence harness moves to
|
|
237
|
+
L4-only. (Breaking; pre-1.0 so released as a minor.)
|
|
238
|
+
|
|
239
|
+
### Behavior
|
|
240
|
+
|
|
241
|
+
- Exit-code contract extended: `arbiter update` and `arbiter init` now exit `78` (POSIX
|
|
242
|
+
`EX_CONFIG`) when no arbiter config is found or a pre-flight config error occurs, instead
|
|
243
|
+
of exiting `1` or `0`. Fatal gh API errors (e.g. auth lost) now exit `2`; recoverable
|
|
244
|
+
gh errors (e.g. 404 label not found) continue to exit `1`. (#1074, ADR-002, INV-53)
|
|
245
|
+
- `--json` envelopes now include an `errorClass` field (`recoverable`|`fatal`|`config`)
|
|
246
|
+
alongside `status` when an error occurs, enabling CI wrappers to triage failures
|
|
247
|
+
without parsing error message strings. (#1074)
|
|
248
|
+
|
|
249
|
+
### Added
|
|
250
|
+
|
|
251
|
+
- `audit-toolchain.mjs` generator (Track A + Track B): emits a toolchain audit script
|
|
252
|
+
that checks CI workflow files, gate scripts, and build toolchain presence (#887, W11)
|
|
253
|
+
- TDD evidence bundle for W11 planning skeleton migration close-out
|
|
254
|
+
|
|
255
|
+
### Added & Changed
|
|
256
|
+
|
|
257
|
+
- feat(claude): emit 50-batch-execution.md rule for safe parallel agents (#722)
|
|
258
|
+
- feat(#710): ISO 27001 / NIS2 / GDPR compliance mapping generator
|
|
259
|
+
|
|
260
|
+
Adds opt-in `generateCompliance` generator that emits `docs/COMPLIANCE_MAPPING.md`
|
|
261
|
+
mapping every arbiter-generated quality gate to the compliance control it satisfies.
|
|
262
|
+
Supports three independent frameworks via `enableIso27001Mapping`, `enableNis2Mapping`,
|
|
263
|
+
and `enableGdprMapping` flags. Includes audit preparation checklists per framework.
|
|
264
|
+
|
|
265
|
+
- Generate context-economy rule, machine-readable knowledge-map, pre-task track detection hook, and track-aware post-commit checklist (#720, #724).
|
|
266
|
+
|
|
267
|
+
- `.claude/rules/40-context-economy.md` — minimum startup set + track routing table
|
|
268
|
+
- `.claude/knowledge-map.json` — machine-readable track routing (signal paths, required/optional docs per track)
|
|
269
|
+
- `.claude/hooks/pre-task-track-detect.mjs` — UserPromptSubmit hook that detects frontend/backend/docs track from changed files and prompt keywords
|
|
270
|
+
- `post-commit-check.mjs` extended with per-track checklist output after INV-22 conventional commit check
|
|
271
|
+
|
|
272
|
+
- docs(#533 #566 #599 #609 #665 #666 #667): add semver policy, file stability map, ROADMAP.md, POSITIONING.md, measurement guide, anti-overclaim doc, and FAQ
|
|
273
|
+
- feat(evidence): emit evidence-prune.mjs + retention policy doc; red-team SSOT vectors (#718 #723)
|
|
274
|
+
- Add telemetry-stance banner on first run (#548) and polished error messages (#547)
|
|
275
|
+
- Add experimental feature flag system (#601). Introduces `--experimental.<name>` CLI flag for opt-in experimental features. Unknown experiment names are rejected with a clear error. Flags stored in `ARBITER_EXPERIMENTAL` env var for downstream commands. Registry ships empty; experiments added as features are promoted to beta.
|
|
276
|
+
- Add CLI flag deprecation lifecycle (#606). Introduces three-stage deprecation: `warn` (flag passes through with stderr notice), `hide` (flag suppressed from --help with notice), `remove` (flag rejected with replacement hint). Lifecycle enforced by `check-deprecations.mjs` gate. Registry ships empty; flags added as they are deprecated.
|
|
277
|
+
- feat(#617 #611): adverse git state detection + atomic file writes
|
|
278
|
+
|
|
279
|
+
- Detects rebase, merge, cherry-pick, bisect, and detached HEAD before writing files
|
|
280
|
+
- `--force` flag overrides the check with a warning
|
|
281
|
+
- All file writes now use atomic tmp-then-rename pattern; ENOSPC surfaces a clear UserFacingError
|
|
282
|
+
|
|
283
|
+
- feat: M-19 — emit docs/COMMANDS.md CLI catalog at L2/L3 (#728)
|
|
284
|
+
|
|
285
|
+
Generates a uniform command reference from project config (build/test/lint/format
|
|
286
|
+
commands + gate commands) via `src/templates/documentation/cli-catalog.md.ejs`.
|
|
287
|
+
|
|
288
|
+
- feat(#730): generate check-no-skipped-tests.mjs hook for target projects. The new NI-11 enforcement hook blocks `.skip()`, `xit()`, `@Disabled`, `@pytest.mark.skip`, and `#[ignore]` patterns on PostToolUse Edit|Write. Wired in the Claude hooks dispatcher and Codex config adapter for all target projects.
|
|
289
|
+
- Phase C1 of #867: arbiter self-dogfoods the 8-tier CI structure. Generates `.github/workflows/0[1-9]-*.yml` from the templates introduced in #866. Adds `.arbiter/workflow-exemptions.json` mechanism (consumed by `scripts/check-arbiter-self-dogfood.mjs`) to allow listed files to be skipped during the dual-run window, paired 1:1 with sunset conditions in `docs/SYSTEM/CI-TIER-EXCEPTIONS.md`. Legacy 18-workflow set still active; PR-3 migrates orphan jobs and PR-4 deletes them.
|
|
290
|
+
- Phase C3+C4 of #867: remove the legacy `generateNightly` pipeline (superseded by the 8-tier model from #866). Deletes `src/generators/nightly.ts`, `src/templates/github/workflows/nightly.yml.ejs`, the `nightly` registry entry, and the M25 `generateNightly` cross-product tests. Also fixes `.github/workflows/security-scan.yml:24` — removes the `continue-on-error: true` on the gitleaks step so novel secret leaks block PR/merge instead of being silently advisory. Documents in `docs/SYSTEM/CI-TIER-EXCEPTIONS.md` that arbiter's 18 legacy workflows persist as arbiter's internal test suite while the 8 tier files are the public spec demo — original PR-3/PR-4 plan to fold all legacy into templates was the wrong architecture.
|
|
291
|
+
- feat(quality): CANON-22 evidence-based quality — un-blind gates + real DRY/duplication enforcement
|
|
292
|
+
|
|
293
|
+
**Un-blind (PART A).** Removed the blanket `ignoreIssues` mute from `knip.json` (a live CANON-09 violation — a gate that hid its own findings). Resolved the surfaced rot: deleted dead `src/context-pack/`, `src/commands/tooling-promote.ts`, the orphan `src/templates/css/.stylelintrc.json.ejs`, and the unused `src/kit/index.ts` barrel; wired the `integrations list` CLI command; gated the `pharma` generator behind `industryOverlay==='pharma'`; declared `src/adapters/index.ts` a knip `entry` (INV-88 surface). Fixed the vacuous `madge --circular src` (0 files scanned) → `--extensions ts,tsx,js,jsx` in arbiter CI, the generated `01-pr-fast.yml.ejs`, the qa-audit schema, and both `check-all` variants. The ~37 tested-but-uncalled exports knip masks are recorded as a tracked anti-bloat burn-down (`docs/audits/unwired-exports-2026-06-01.md`) where a hard `ts-prune` gate lands after burn-down — not muted, not faked.
|
|
294
|
+
|
|
295
|
+
**Real DRY / anti-bloat (PART B).** New `src/generators/duplication.ts` emits a governance-scaled `.jscpd.json` + the jscpd devDep to TypeScript targets (dual-sided with arbiter's own dogfooded `jscpd` gate). Added `duplicationPercentage` to the debt ratchet (Lehman entropy — a patch can't raise duplication). Added a root-cause-or-record-debt rule to `90-exec-protocol.md` and Anti-Bloat & Root-Cause vectors (symptom-vs-root-cause, dup-of-existing-helper, missed-extraction) to the red-team agent. Trimmed the `clean-code` skill to a gate-map.
|
|
296
|
+
|
|
297
|
+
**CANON-22 (PART C).** New `docs/SYSTEM/CANON.md` entry separating Tier-1 validated metrics (McCabe, CK/Basili, Khomh/Palomba, Juergens, Lehman, SEI/SQALE, Boehm) that may HARD-GATE from Tier-2 contested heuristics (SOLID, DRY-as-dogma, cognitive complexity) that may only advise. Graduated the duplication gate + ratchet to INV-109 with AGENTS.md↔catalog parity.
|
|
298
|
+
|
|
299
|
+
- feat(governance): product-truth FEATURE_MATRIX v1 — generated + gated RTM (INV-112, CANON-23)
|
|
300
|
+
|
|
301
|
+
Materializes the reconciliation audit as arbiter's committed Product-Truth bible:
|
|
302
|
+
|
|
303
|
+
**Track A (self-doc):** `docs/PRODUCT/FEATURE_MATRIX.md` — 50 rows, all 77 KIT dims covered,
|
|
304
|
+
conservatively seeded (Partial/Done max; no Verified from seed). Status ladder:
|
|
305
|
+
Missing → Partial → Done → Verified (fail-closed, machine-validated).
|
|
306
|
+
|
|
307
|
+
**Gate:** `scripts/check-feature-matrix.mjs` (INV-112, L1 fail-closed) validates:
|
|
308
|
+
|
|
309
|
+
- Status ladder (Verified ⟹ all 4 refs non-empty + files exist)
|
|
310
|
+
- KIT-dim coverage via `kit_dims` column join against `src/kit/catalog.json`
|
|
311
|
+
- Counter integrity (summary row counts match actual)
|
|
312
|
+
- L3+ DoD: Done/Verified rows must have test_ref file present
|
|
313
|
+
- L4: audit_trail-category rows require code_ref + test_ref
|
|
314
|
+
- Level injection via `--level L2|L3|L4` / `ARBITER_MATRIX_LEVEL` env for fixture testing
|
|
315
|
+
|
|
316
|
+
**Track B (governed projects):** `src/generators/feature-matrix.ts` + `src/templates/docs/FEATURE_MATRIX.md.ejs`
|
|
317
|
+
scaffold the matrix for target projects at L2+ (skipIfExists, user-owned after first write).
|
|
318
|
+
|
|
319
|
+
**Export:** `arbiter feature-matrix export --format csv|xlsx` — CSV via hand-rolled RFC-4180
|
|
320
|
+
(reuses `src/kit/csv.ts` pattern; zero new dep), xlsx via lazy-imported `exceljs`.
|
|
321
|
+
|
|
322
|
+
**INV-112:** `tier:governance`, `alwaysActive:true`, `minGovernanceLevel:'L2'`, `selfOnly:false`.
|
|
323
|
+
**CANON-23:** RTM-required-by-level; promoted to INV-112.
|
|
324
|
+
|
|
325
|
+
**Parity:** AGENTS.md + GLOBAL_INVARIANTS.md + CLI ref + doc index all updated.
|
|
326
|
+
Count tests updated: 109 → 110 invariants (5 assertions).
|
|
327
|
+
|
|
328
|
+
**GAP register:** 10 issues filed (#1149–#1158) for all Partial/Missing rows and rigor holes
|
|
329
|
+
(a11y, Kotlin, kit-gate fiction, anti-drift orphan, CANON-09 blind spot, 29 untested gates,
|
|
330
|
+
17 undocumented commands, generic L4 audit-trail, dead config, CANON parity).
|
|
331
|
+
|
|
332
|
+
- first-class FE governance — WCAG 2.2, W3C DTCG tokens, Vitest browser mode + VRT, Core Web Vitals gates, framework-aware (react/vue/svelte); arbiter is now genuinely full-stack.
|
|
333
|
+
|
|
334
|
+
Supersedes #1124 (initial frontend-governance generator — FE constitution + design principles).
|
|
335
|
+
|
|
336
|
+
## New generators
|
|
337
|
+
- **`frontend-governance`** (#1124): emits `FRONTEND_CONSTITUTION.md` + `FE_DESIGN_PRINCIPLES.md`.
|
|
338
|
+
- **`frontend-quality`** (#1127): emits all mechanical enforcement scripts (tokens, i18n, coverage, VRT, perf, bundle).
|
|
339
|
+
|
|
340
|
+
## Framework-awareness fix (#1127 S0)
|
|
341
|
+
|
|
342
|
+
Fixed framework-blindness bug: `.eslintrc-frontend-spa.cjs` now branches on `config.frontend.framework` — Vue gets `.vue` globs + `vuejs-accessibility`, Svelte gets `.svelte` + `eslint-plugin-svelte`, React gets `.tsx/.jsx` + `jsx-a11y`. Before this, all frontend-spa projects received React-shaped output.
|
|
343
|
+
|
|
344
|
+
Auto-detection: `init.ts` now derives `frontend.framework` from the detected `config.framework` for frontend-spa projects (vue→vue, react→react, next→react, svelte→svelte).
|
|
345
|
+
|
|
346
|
+
New `vue-frontend-spa` fixture proves non-React output (INV-32 matrix compliance).
|
|
347
|
+
|
|
348
|
+
## WCAG 2.2 upgrade (#1127 S1)
|
|
349
|
+
|
|
350
|
+
`run-axe.ts.ejs` upgraded from WCAG 2.1 AA to full WCAG 2.2 AA tag set (`wcag2a + wcag2aa + wcag21a + wcag21aa + wcag22aa`). Covers target-size (2.5.8), focus-appearance (2.4.11), accessible-auth (3.3.8).
|
|
351
|
+
|
|
352
|
+
`16-frontend-quality.yml.ejs` a11y step is now blocking (removed `|| true`; routes through Playwright harness).
|
|
353
|
+
|
|
354
|
+
## New enforcement artifacts (emitted by `frontend-quality` generator)
|
|
355
|
+
|
|
356
|
+
| Artifact | Purpose | Invariant |
|
|
357
|
+
| ---------------------------------- | ----------------------------------------- | --------- |
|
|
358
|
+
| `design-tokens.json` | W3C DTCG token seed | INV-105 |
|
|
359
|
+
| `scripts/verify-tokens.mjs` | raw hex/phantom token gate | INV-105 |
|
|
360
|
+
| `scripts/i18n-literal-scanner.mjs` | raw UI text literal gate | INV-106 |
|
|
361
|
+
| `scripts/verify-i18n-parity.mjs` | locale key-parity gate | INV-106 |
|
|
362
|
+
| `scripts/verify-fe-coverage.mjs` | per-layer coverage ratchet | — |
|
|
363
|
+
| `vitest.browser.config.ts` | Vitest browser mode (Playwright/Chromium) | — |
|
|
364
|
+
| `docs/GOVERNANCE/VRT_SETUP.md` | VRT baseline capture guide | — |
|
|
365
|
+
| `.lighthouserc.json` | CWV 2026 blocking budgets (LCP/CLS/INP) | — |
|
|
366
|
+
| `bundle-budget.json` | bundle size budget config | — |
|
|
367
|
+
| `scripts/check-bundle-size.mjs` | bundle size gate vs dist/ | — |
|
|
368
|
+
|
|
369
|
+
## New invariants
|
|
370
|
+
|
|
371
|
+
INV-102 API-layer isolation, INV-103 headless domain purity, INV-104 state-mgmt discipline, INV-105 token discipline, INV-106 i18n parity. All tier=operational, languages=[typescript], minGovernanceLevel=L2.
|
|
372
|
+
|
|
373
|
+
**Blast radius:** Projects with `frontend-spa` archetype or `lanes: ["frontend"]` receive new enforcement artifacts on next `arbiter update` (all `skipIfExists: true` — no overwrite).
|
|
374
|
+
|
|
375
|
+
- feat(governance): GLOBAL_INVARIANTS↔catalog coverage parity gate (INV-110)
|
|
376
|
+
|
|
377
|
+
GLOBAL_INVARIANTS.md drifted to 53/107 invariant coverage with no guarding gate.
|
|
378
|
+
Added the 13 missing always-active invariants (INV-27/28/29/33/72/95/97/98/99/100/101/107/108)
|
|
379
|
+
and `scripts/check-global-invariants-parity.mjs` (L1) — forward (every alwaysActive
|
|
380
|
+
invariant documented) + reverse (no phantom rows), mirroring the AGENTS.md↔catalog
|
|
381
|
+
parity gate (CANON-08). Promoted to INV-110 (selfOnly governance) with AGENTS.md rows.
|
|
382
|
+
The dual-ADR consolidation + CLI-ref gate from the same task are recorded for a
|
|
383
|
+
careful follow-up in docs/audits/dual-adr-cli-followup-2026-06-02.md (the ADR store
|
|
384
|
+
has 8 id collisions + orphaned decisions — too risky to rush).
|
|
385
|
+
|
|
386
|
+
- feat(governance): resilience patterns generator (#1176)
|
|
387
|
+
|
|
388
|
+
Adds `src/generators/resilience.ts` — a stack-aware advisory generator for
|
|
389
|
+
`backend-web-db` projects at L2+. Emits `docs/governance/RESILIENCE.md` with
|
|
390
|
+
copy-pasteable defaults for circuit breaker, retry/backoff, rate limiter, and
|
|
391
|
+
timeout budgets. TypeScript (cockatiel) and Java (Resilience4j) get concrete
|
|
392
|
+
config blocks; `multi` emits both; Go/Python/Kotlin degrade gracefully. L3/L4
|
|
393
|
+
governance level appends a hard-requirements enforcement addendum.
|
|
394
|
+
|
|
395
|
+
- CANON-04: template render test
|
|
396
|
+
- CANON-05: generator unit tests (happy path, idempotency, negatives, null-guard)
|
|
397
|
+
- CANON-11: brownfield skipIfExists test
|
|
398
|
+
- FEATURE_MATRIX: REQ-051 row, status Done
|
|
399
|
+
- No new INV — advisory pattern, not machine-enforceable in arbiter self-gate
|
|
400
|
+
|
|
401
|
+
- feat(frontend): emit #352 stylelint design-token config + wire the lint:css gate
|
|
402
|
+
|
|
403
|
+
`frontend-quality` now emits `.stylelintrc.json` (HARD design-token rules: `color-no-hex` → `var(--color-*)`, `length-zero-no-unit`, `custom-property-no-missing-var-function`) and injects the `stylelint` devDep, so the generated `lint:css` gate (which #1137 made gate-on-present) actually runs and resolves in CI for frontend-spa / frontend-lane targets. Core stylelint rules only — no `extends`/plugins — so it enforces design tokens without flooding a brownfield project with general-CSS findings.
|
|
404
|
+
|
|
405
|
+
Refactor (DRY, dogfoods CANON-22): extracted a shared `injectDevDependency` helper (`src/utils/pkg.ts`) used by both the jscpd (duplication) and stylelint generators, replacing the per-tool inline inject functions so a second near-identical copy doesn't accrue.
|
|
406
|
+
|
|
407
|
+
- feat(#1082): INV-101 ff-only merge enforcement — ADR-052, branch-protection two-call split, cosign verify L2+ (PR 2/3)
|
|
408
|
+
- fix(#1119): wire collaborationMode end-to-end — solo/small-team ceremony
|
|
409
|
+
|
|
410
|
+
**Problem (before this PR):**
|
|
411
|
+
|
|
412
|
+
- `task.md.ejs` hardcoded `gh pr merge --squash` + full PR ceremony for ALL modes
|
|
413
|
+
- `resolveDefaultMergeMode` / `resolveDefaultWorktreeMode` had zero callers
|
|
414
|
+
- `buildRenderContext` (claude.ts) never injected resolved `mergeMode`/`branchingStrategy`
|
|
415
|
+
- `configure --set collaborationMode=garbage` accepted any string (no enum validation)
|
|
416
|
+
- No `--solo` CLI flag; wizard asked deprecated `soloDevMode` boolean, not a 3-way prompt
|
|
417
|
+
- Five duplicated inline derivations of `collaborationMode` from `soloDevMode`
|
|
418
|
+
|
|
419
|
+
**Changes:**
|
|
420
|
+
|
|
421
|
+
- **Single derivation source:** `resolveCollaborationMode` + `resolveCollaborationAxes` added to
|
|
422
|
+
`collaboration-mode-defaults.ts`; replaces 5 inline copies. The dead resolvers
|
|
423
|
+
(`resolveDefaultMergeMode`, `resolveDefaultWorktreeMode`) are now called from here.
|
|
424
|
+
- **`task.md.ejs` mode-aware:**
|
|
425
|
+
- Phase 10 keyed on `mergeMode`: `direct` → no PR (commit+push to trunk);
|
|
426
|
+
`pr-ff` → `gh pr create` + `gh pr merge --merge` (ff). **`--squash` removed** (ADR-051).
|
|
427
|
+
- Phase 0 branch-guard: for `direct` mode, "HARD STOP on main" becomes a confirmation (trunk-solo
|
|
428
|
+
allows working directly on trunk).
|
|
429
|
+
- Review ceremony: `trunk-solo` → 1 self-review agent; `peer-review`/`gated-review` → tier counts.
|
|
430
|
+
- **`CLAUDE.md.ejs`:** adds Quick Reference row showing collaboration mode, merge method, branching.
|
|
431
|
+
- **`--solo` CLI flag** (`arbiter init --solo`): sets `collaborationMode='trunk-solo'`.
|
|
432
|
+
- **Wizard 3-way prompt:** replaces the deprecated `soloDevMode` confirm with a
|
|
433
|
+
`trunk-solo | peer-review | gated-review` list. `collaborationMode` persisted to config (not discarded).
|
|
434
|
+
- **`configure` enum validation:** `collaborationMode`, `solo.mergeMode`, and `branchingStrategy`
|
|
435
|
+
are now validated with `E_INVALID_ARCHETYPE` errors. `solo.mergeMode` and `branchingStrategy` added
|
|
436
|
+
to `ALLOWED_PATHS`.
|
|
437
|
+
- **`ArbiterConfigV2`** gains `solo?: { mergeMode: SoloMergeMode }` and `branchingStrategy?`.
|
|
438
|
+
Both are round-tripped through init/configure/update.
|
|
439
|
+
- **`diff.ts` PATH_TO_KEYS:** `collaborationMode` now triggers `claude` generator (task.md/CLAUDE.md
|
|
440
|
+
regeneration on `arbiter update`); `solo.mergeMode` and `branchingStrategy` added.
|
|
441
|
+
- **Design invariant (prevents idempotence bugs):** only `collaborationMode` + explicit user overrides
|
|
442
|
+
(`solo.mergeMode`, `branchingStrategy`) are persisted; all derived values (mergeMode, worktreeMode,
|
|
443
|
+
pipelineStyle) are recomputed at render time by `resolveCollaborationAxes`.
|
|
444
|
+
- **Dogfood:** arbiter's own `arbiter.json` gets `solo: { mergeMode: 'pr-ff' }` so its trunk-solo
|
|
445
|
+
self-config keeps the PR+ff workflow (branch protection requires PRs).
|
|
446
|
+
|
|
447
|
+
**Blast radius:**
|
|
448
|
+
|
|
449
|
+
- Template output changes for all projects on next `arbiter update` (squash→ff for PR modes; mode-gated
|
|
450
|
+
review ceremony). Existing `task.md` files use `skipIfExists` and are NOT automatically rewritten —
|
|
451
|
+
users can delete and re-init or run `arbiter update` after deleting the file.
|
|
452
|
+
- `features.soloDevMode` is still WRITTEN (back-compat) but the wizard no longer asks for it directly;
|
|
453
|
+
`collaborationMode` is now the authoritative field.
|
|
454
|
+
|
|
455
|
+
- feat(#729): industrial-grade meta-preset
|
|
456
|
+
|
|
457
|
+
Adds `--preset industrial-grade` to `arbiter init` (and the programmatic
|
|
458
|
+
`applyPreset` function). Applying the preset enables the full compliance +
|
|
459
|
+
governance stack in one opt-in:
|
|
460
|
+
|
|
461
|
+
- ISO 27001 / NIS2 / GDPR control-mapping (`enableIso27001Mapping/Nis2/Gdpr`)
|
|
462
|
+
- Risk register + P×I assessment (`enableRiskRegister`)
|
|
463
|
+
- Evidence harness (`enableEvidenceHarness`)
|
|
464
|
+
- Operations handbook (`enableOperationsHandbook`)
|
|
465
|
+
- MCP fallback determinism rule (`enableMcpFallback`)
|
|
466
|
+
- Auth scaffold with `tenantIsolation: true` (provider stays `'none'`)
|
|
467
|
+
- Observability scaffold with metrics + logs + alerts (provider stays `'none'`)
|
|
468
|
+
|
|
469
|
+
Providers are left as `'none'` so no files are generated until the user
|
|
470
|
+
explicitly picks one via `--auth-provider` / `--observability-provider`.
|
|
471
|
+
|
|
472
|
+
Also fixes the pre-existing schema gap: `ArbiterConfigV2` now includes
|
|
473
|
+
`observability?`, `auth?`, and `preset?` fields, enabling round-trip
|
|
474
|
+
persistence of provider + preset config through `arbiter.json`.
|
|
475
|
+
|
|
476
|
+
See `docs/PRODUCT/PRESETS.md` for usage examples.
|
|
477
|
+
|
|
478
|
+
- Add kit engineering phases B–D: Spring Modulith generator, brownfield wave-engine, 6-phase kit-install orchestrator, and tooling proposal lifecycle.
|
|
479
|
+
|
|
480
|
+
New exports: `buildWavePlan`, `runKitInstall`, `buildToolingProposal`, `advanceProposalStatus`. New CLI command: `arbiter kit install`.
|
|
481
|
+
|
|
482
|
+
- feat(#1002)!: widen GovernanceLevel L1/L2/L3 → L1/L2/L3/L4; move evidence harness to L4-only
|
|
483
|
+
|
|
484
|
+
**Breaking changes:**
|
|
485
|
+
|
|
486
|
+
- `GovernanceLevel` widened from `'L1' | 'L2' | 'L3'` to `'L1' | 'L2' | 'L3' | 'L4'`
|
|
487
|
+
- Evidence harness (`evidence-retention`, `evidence-backlog`) moved from L2+ to **L4-only**
|
|
488
|
+
- STRIDE risk assessment moved from L3 to **L4-only**
|
|
489
|
+
- TRACK_ROUTER generation moved from L3 to **L4-only**
|
|
490
|
+
- Config `$schemaVersion` bumped 2→3 (forward-only migration applied automatically on next read)
|
|
491
|
+
- `src/config/thresholds-l1-l2-l3.ts` renamed to `src/config/thresholds-by-level.ts` (CANON-20)
|
|
492
|
+
- L3 now activates E2E + mutation testing only (no evidence/compliance artifacts)
|
|
493
|
+
- SLSA `verifyOnSign` in release workflow now requires L4 (was L3)
|
|
494
|
+
|
|
495
|
+
**New level summary:**
|
|
496
|
+
|
|
497
|
+
| Level | Activates |
|
|
498
|
+
| ----- | ---------------------------------------------------------------- |
|
|
499
|
+
| L1 | lint + format + unit tests |
|
|
500
|
+
| L2 | + coverage + integration + debt gates + security scan |
|
|
501
|
+
| L3 | + E2E + mutation testing |
|
|
502
|
+
| L4 | + evidence harness + STRIDE risk + TRACK_ROUTER + SLSA-L3 attest |
|
|
503
|
+
|
|
504
|
+
**Migration guidance:**
|
|
505
|
+
|
|
506
|
+
- Existing L2 projects: unchanged except evidence harness no longer regenerates (was a misconfiguration)
|
|
507
|
+
- Existing L3 projects: unchanged for quality gates; evidence artifacts move to L4 — if you relied on evidence, run `arbiter upgrade-level --to L4`
|
|
508
|
+
- All projects: `$schemaVersion` migration is automatic on next `arbiter update` run
|
|
509
|
+
|
|
510
|
+
- feat(claude): MCP fallback rule + cross-language skip-test hook (#721 #730)
|
|
511
|
+
- F4+F11: `--github` opt-in default and project board namespacing.
|
|
512
|
+
|
|
513
|
+
- `--github` flag is now required for live GitHub API calls (`arbiter init`, `arbiter update`). Without it, no API calls are made regardless of stored config.
|
|
514
|
+
- `ARBITER_GITHUB=1` env var activates GitHub API calls in CI.
|
|
515
|
+
- Stored config key `useGitHub` renamed to `permitGitHub`; old key auto-migrated on first run.
|
|
516
|
+
- Project board titles now include project name: `<name> Board · <owner>/<repo> · <date>`.
|
|
517
|
+
- Idempotent board detection updated to match namespaced titles.
|
|
518
|
+
|
|
519
|
+
- feat(operations): operations handbook generator (#717) — opt-in `enableOperationsHandbook` flag emits `docs/OPERATIONS_HANDBOOK.md` with 4-signal observability, RC checklist, on-call protocol, and runbook templates; archetype-aware (backend-web-db/data-pipeline add DB signals, frontend-spa adds Core Web Vitals)
|
|
520
|
+
- feat(#725 #726): observability + auth provider abstraction generators
|
|
521
|
+
|
|
522
|
+
Adds two opt-in generators that emit provider-specific setup docs:
|
|
523
|
+
|
|
524
|
+
- `generateObservability`: emits `docs/OBSERVABILITY.md` when `observability.provider`
|
|
525
|
+
is set and not `'none'`. Supports 9 providers: stdout-minimal, signoz, openobserve,
|
|
526
|
+
victoria-vector-quickwit, prom-grafana-loki-jaeger, saas-sentry, saas-datadog,
|
|
527
|
+
saas-axiom, saas-betterstack.
|
|
528
|
+
- `generateAuth`: emits `docs/AUTH_SETUP.md` when `auth.provider` is set and not
|
|
529
|
+
`'none'`. Supports 10 providers: app-level-ts, authelia, authentik, ory-stack,
|
|
530
|
+
zitadel, keycloak, saas-clerk, saas-auth0, saas-supabase-auth, saas-cognito.
|
|
531
|
+
|
|
532
|
+
Both generators use `skipIfExists` so user customisations are never overwritten.
|
|
533
|
+
Registry entries, diff PATH_TO_KEYS, and type definitions included.
|
|
534
|
+
|
|
535
|
+
- feat(w1-bundle): r1.k7+k6 — config $schemaVersion + plugin API stability gate (#605 #603)
|
|
536
|
+
|
|
537
|
+
- `arbiter.json` gains an optional `$schemaVersion: <int>` field. Migration writes `$schemaVersion: 2` on every v2 output; load rejects `$schemaVersion > CURRENT_CONFIG_SCHEMA_VERSION` as a hard error so a future config never silently loads.
|
|
538
|
+
- New `docs/PLUGIN-API.md` enumerates `ArbiterPlugin` / `PluginContext` / `PluginFile` / `PluginResult` field-by-field with stability markers (stable / beta / experimental) plus the apiVersion bump policy.
|
|
539
|
+
- New L1 gate `scripts/check-plugin-api-stability.mjs` fails any PR that edits `src/types/plugin.ts` without bumping `apiVersion` in the same commit.
|
|
540
|
+
|
|
541
|
+
- feat(w1-bundle): r1.k9+l9 — state file schema version + checksum + repair (#607 #619)
|
|
542
|
+
|
|
543
|
+
- `.arbiter-generated.json` is now a versioned envelope `{ ".checksum", "$schemaVersion": 1, "config": {...} }` with a SHA-256 of the canonical inner payload.
|
|
544
|
+
- `loadSnapshot` throws `SnapshotChecksumError` on tamper instead of silently overwriting.
|
|
545
|
+
- v0 (pre-envelope) snapshots auto-migrate on first read — no user action required.
|
|
546
|
+
- `saveConfigAndSnapshot` rotates the previous snapshot to `.arbiter-generated.json.bak.<iso-ts>`, capped at the 10 most recent backups.
|
|
547
|
+
- New `arbiter doctor --repair-state` re-derives the snapshot from `arbiter.json` (never touches the source config).
|
|
548
|
+
- Storage migrations live under `src/state/migrations/`, paralleling `src/config/migrations/`.
|
|
549
|
+
|
|
550
|
+
- docs(#651): case study — arbiter governs arbiter (R1.O1)
|
|
551
|
+
|
|
552
|
+
New `docs/case-studies/arbiter-itself.md` documents the recursive use of
|
|
553
|
+
arbiter on its own repo: governance level (L2 + soloDevMode), invariants
|
|
554
|
+
that have actually fired during development, meta-config layout, public
|
|
555
|
+
evidence trail, and the recursion limits (no telemetry, no external review
|
|
556
|
+
service, no skip-gate).
|
|
557
|
+
|
|
558
|
+
- feat(#660): npm dist-tag channel strategy — latest / beta / canary (R1.Q1)
|
|
559
|
+
|
|
560
|
+
- `docs/CHANNELS.md` documents three channels (stable / beta / canary), install commands, tag shapes, and rollback procedure.
|
|
561
|
+
- `.github/workflows/npm-publish.yml` resolves the npm dist-tag from the tag shape.
|
|
562
|
+
- New `.github/workflows/canary-publish.yml` publishes `v0.0.0-canary.<short-sha>` on every push to `main`.
|
|
563
|
+
|
|
564
|
+
- docs(#663): channel switching policy + rollback path (R1.Q4)
|
|
565
|
+
|
|
566
|
+
Extends `docs/CHANNELS.md` with per-direction risk table (latest ↔ beta ↔ canary) and the rollback recipe leveraging the R1.K9/L9 building blocks (`.arbiter-generated.json.bak.<ts>` + `arbiter doctor --repair-state` + git history of `arbiter.json`). Documents which downgrades the framework will refuse and why.
|
|
567
|
+
|
|
568
|
+
- feat(w1-bundle): R1.S6+S7 — context-rot 3-layer recovery + N-pass plan reviewer gate (#694 #695)
|
|
569
|
+
|
|
570
|
+
- `arbiter task recover` prints 3-layer recovery context (BACKLOG.md, CHECKPOINT commits, recent git log)
|
|
571
|
+
- `pre-compact` hook injects BACKLOG.md content into preserved-state output
|
|
572
|
+
- `dispatchPlanReview` runs `TIER_PASS_COUNT[tier]` invocations per cycle with per-pass evidence under `.arbiter/evidence/plan-review/<sanitized-id>/run-<ts>/`
|
|
573
|
+
- `arbiter task advance --to implementation` blocks when `.arbiter/plan-review.enabled` is present and no PASS evidence (with matching plan SHA-256 digest) exists
|
|
574
|
+
- `--skip-plan-review` flag + audited env bypass with CI-mode refusal of env-only bypass
|
|
575
|
+
|
|
576
|
+
- feat(governance): risk register + P×I assessment template (#712) — opt-in `enableRiskRegister` flag emits `docs/GOVERNANCE/RISK_REGISTER.md` and `docs/GOVERNANCE/RISK_ASSESSMENT_TEMPLATE.md`; ISO 27001:2022 §6.1.2 aligned; archetype-aware pre-populated risks
|
|
577
|
+
- Add StackAdapter interface + registry + language adapters + INV-88 (#881). Introduces a formal `StackAdapter` extension point for language-specific generation behaviour. TypeScript ships as a full adapter; Java, Python, Go, and Rust ship as stubs. `check-adapter-coverage.mjs` enforces INV-88 at L1. `arbiter doctor health` reports adapter coverage per project.
|
|
578
|
+
- feat(testing): 25-dimension test taxonomy extension (#719) — opt-in `enableTaxonomy25d` flag generates compliance-grade taxonomy with audit trail, PII masking, rate limiting, session lifecycle, event delivery, graceful degradation, SLA assertion, and OWASP security surface dimensions
|
|
579
|
+
- docs(#1099): Wave 2 — docs/ADR/ as canonical ADR SSOT + RUNBOOKS casing collapse
|
|
580
|
+
|
|
581
|
+
Track A: git mv docs/RUNBOOKS/ → docs/runbooks/ (case collision), update docs-backfill-tags.mjs, regenerate INDEX.md.
|
|
582
|
+
|
|
583
|
+
Track B: promote docs/ADR/ to canonical ADR SSOT (freeze docs/SYSTEM/DECISIONS.md as legacy); migrate DECISIONS-only ADR-054..072 into per-file docs; assign ADR-073 (FE Governance Generator, was accidental ADR-055 duplicate) and ADR-074 (Risk register, was accidental ADR-050 duplicate); fix docs/ADR/041-044 mis-titled frontmatter (were ADR-001..004, now ADR-041..044); populate canonical_id in all 74 ADR files; rewrite src/graph/builders/adr.ts to parse per-file YAML frontmatter instead of DECISIONS.md section-headings; regenerate docs/ADR/README.md via new generator; add scripts/check-adr-index.mjs gate (INV-97) to enforce unique numbers, canonical_id match, and README coverage at L1.
|
|
584
|
+
|
|
585
|
+
### Fixed
|
|
586
|
+
|
|
587
|
+
- Batch A consolidation: promote FEATURE_MATRIX rows to Verified; hygiene.
|
|
588
|
+
|
|
589
|
+
- REQ-028 + REQ-041 promoted to Verified (honest evidence chain — no new code)
|
|
590
|
+
- REQ-026 Kotlin note updated: smoke-test-only exposed; follow-up #1177 filed
|
|
591
|
+
- TDD evidence for #1148/#1149 committed
|
|
592
|
+
- SELF-KIT-AUDIT baseline regenerated (N10 + N70 dim updates)
|
|
593
|
+
- Completed wave0/wave0.5/wave1 audit dirs removed from working tree (git history intact)
|
|
594
|
+
- MILESTONES.md + DONE.md SSOT links neutralized; DEC-014 recorded
|
|
595
|
+
|
|
596
|
+
- chore(#1131): add DISABLE_LABEL_SYNC opt-out + prune live duplicate labels (slice 3)
|
|
597
|
+
|
|
598
|
+
`_label-sync` now skips when the `DISABLE_LABEL_SYNC` repo variable is `'true'`, so a repo that manages its own label taxonomy (the framework source repo) does not get `.github/labels.yml` additively injected into its live label set. arbiter-self sets the variable.
|
|
599
|
+
|
|
600
|
+
Also documents the two-taxonomy model (canonical shipped set vs arbiter-self's legacy namespaced labels) in `docs/GOVERNANCE/LABELS.md`; live duplicate-label pruning and the optional shape convergence are tracked in #1134.
|
|
601
|
+
|
|
602
|
+
- chore(ci): prune no-consumer labels, define applied-but-undefined labels, fix trunk-solo nightly double-emit (#1131)
|
|
603
|
+
|
|
604
|
+
Slice 1 of the label + workflow hygiene wave:
|
|
605
|
+
|
|
606
|
+
- Generator: trunk-solo (incl. the `enableSoloDevMode` alias) at L3/L4 no longer emits both `06-nightly.yml` and `06-nightly-lite.yml`; it gets the lite nightly only (and not the full nightly/weekly/monthly suite), via `resolveCollaborationMode()` at both emit guards. Same root-cause fix also resolves the mode for the CI-gap guards (codeql/frontend-quality/OSSF), which previously read the raw (often undefined) `collaborationMode` and silently suppressed `15-codeql.yml` for default-resolved peer-review configs.
|
|
607
|
+
- Labels (dual-track `labels.yml.ejs` + `.github/labels.yml`): removed 10 no-consumer labels (`wave-0..3`, `quality-wave`, `approved`, `size: L`, `size: XL`, `ready-for-review`, `ai-generated`); added 5 applied-but-undefined labels (`in-progress` promoted to ALWAYS, `in-review`, `stale`, `no-stale`, `governance`).
|
|
608
|
+
- Docs: new `docs/GOVERNANCE/LABELS.md` catalogue — every surviving label cites its consumer — linked from the governance index.
|
|
609
|
+
|
|
610
|
+
- docs(#627): add 6 missing hook rows to .claude/CLAUDE.md hooks table (CANON-10)
|
|
611
|
+
- feat(#613): atomic writes + SIGTERM/SIGINT cleanup for in-flight temp files
|
|
612
|
+
- fix(#772): replace sequential saveConfig+saveSnapshot with saveConfigAndSnapshot — serializes once before any write, preventing inconsistent state on ENOSPC
|
|
613
|
+
- fix(#773): route writeTaskStatus through atomicWrite — tmp file now registered in inFlightTmpPaths for SIGTERM cleanup
|
|
614
|
+
- Fix batch #678-#684 #628: WriteResult action values, loadConfig error handling, UserFacingError CLI output, selfOnly invariant filter, alwaysActive semantics, shared readFileSafe helper, composite framework archetype detection
|
|
615
|
+
- fix(quality): CANON-22 red-team polish — gate-on-present lint:css, fail-closed duplication ratchet, ADR-076
|
|
616
|
+
|
|
617
|
+
Closes the non-blocking findings from #1136's red-team review:
|
|
618
|
+
|
|
619
|
+
- **Generated `check-all` `lint:css`** now runs only when a `.stylelintrc` config is present, so frontend targets don't FAIL CI on a stylelint config that no generator emits yet (emitting the #352 design-token config is a tracked follow-up). Matches the sibling `fsd-boundaries` gate-on-present pattern.
|
|
620
|
+
- **Debt-ratchet duplication collector is fail-closed:** jscpd writes no report at 0 clones, so report-absence alone can't mean "clean". The collector now records 0% only on a clean (exit 0) run with no report, parses the report when present, and **omits** the metric (ratchet skips, not a false 0%) when jscpd fails — so a crashed run can no longer silently mask duplication. Dual-sided (`scripts/debt-lib.mjs` + template).
|
|
621
|
+
- **Added ADR-076** recording the CANON-22 evidence-tiering + gate-un-blinding decision (`docs/SYSTEM/DECISIONS.md` is frozen; new ADRs live in `docs/ADR/`).
|
|
622
|
+
|
|
623
|
+
Two flagged items were intentionally not changed (rationale in the plan): the `src/adapters/index.ts` knip `entry` is already honestly recorded in the burn-down audit (demoting it nets more findings, not fewer), and `coverage.ts` emitting `vitest.config.ts` for `multi` is legitimate — that config is consumed by test execution, unlike the gate-only `.jscpd.json`.
|
|
624
|
+
|
|
625
|
+
- fix(governance): collapse dual ADR store + CLI-ref single-source gate (INV-111)
|
|
626
|
+
|
|
627
|
+
Three-part governance hardening completing the deferred items from PR #1143:
|
|
628
|
+
|
|
629
|
+
**1. ADR dual-store collapse (Items 1+2)**
|
|
630
|
+
|
|
631
|
+
- Extracted 11 orphaned formal ADRs (ADR-077..087) from `docs/SYSTEM/DECISIONS.md`
|
|
632
|
+
— decisions that existed only in the legacy log with colliding IDs:
|
|
633
|
+
- ADR-077: Agent Registry Introduction (was ADR-053 in DECISIONS)
|
|
634
|
+
- ADR-078: ISO 27001/NIS2/GDPR Compliance Gate Mapping (was ADR-052)
|
|
635
|
+
- ADR-079: Red-Team SSOT Alignment Checks (was ADR-051)
|
|
636
|
+
- ADR-080: Operations Handbook Generator (was ADR-049)
|
|
637
|
+
- ADR-081: 25-Dimension Test Taxonomy Extension (was ADR-048)
|
|
638
|
+
- ADR-082: MCP Fallback Determinism + Skip-Test Guard (was ADR-046)
|
|
639
|
+
- ADR-083: Matrix Downgrade-vs-Fix Verdict (was ADR-043)
|
|
640
|
+
- ADR-084: User-Toggle Catalog Preconditions (was ADR-044)
|
|
641
|
+
- ADR-085: Evidence Prune + Red-Team SSOT Alignment Vectors (was ADR-047)
|
|
642
|
+
- ADR-086: Four-Pillar SSOT Infrastructure (was mislabeled ADR-042 sub-entry)
|
|
643
|
+
- ADR-087: Rust INV-04 Checkers + Rebased Docs-Check (was second ADR-042)
|
|
644
|
+
- Reduced `docs/SYSTEM/DECISIONS.md` to a **generated digest** (87-row ADR index,
|
|
645
|
+
idempotent). Extended `scripts/gen-adr-readme.mjs` to emit both `docs/ADR/README.md`
|
|
646
|
+
and `docs/SYSTEM/DECISIONS.md` from the same per-file SSOT parse.
|
|
647
|
+
- Wired `gen-adr-readme.mjs --check` into the L1 gate so digest can't drift.
|
|
648
|
+
- `check-adr-index.mjs` (INV-107) confirms: 87 ADR files, all IDs consistent, no dups.
|
|
649
|
+
|
|
650
|
+
**2. CLI-ref single-source gate (Item 4, INV-111)**
|
|
651
|
+
|
|
652
|
+
- Added `scripts/gen-cli-ref.mjs`: regex-parse `.command()` tree from `src/cli.ts`
|
|
653
|
+
(no build step), emit a marker-delimited generated region into `website/reference/cli.md`.
|
|
654
|
+
Bidirectional `--check`: registered ↔ documented, no phantom, no missing.
|
|
655
|
+
- 28 top-level commands now documented; 4 previously phantom command references
|
|
656
|
+
(governance/use/state/version) confirmed not to exist (they were prose-only mentions).
|
|
657
|
+
- Wired as `cli ref parity (INV-111)` L1 gate.
|
|
658
|
+
- New invariant INV-111 registered in catalog, AGENTS.md, and GLOBAL_INVARIANTS.md.
|
|
659
|
+
|
|
660
|
+
**3. Item 3 (GLOBAL_INVARIANTS parity) — already done in #1143**
|
|
661
|
+
|
|
662
|
+
INV-110 + `scripts/check-global-invariants-parity.mjs` shipped in PR #1143 (commit
|
|
663
|
+
e73cdee0). Confirmed: 51 always-active invariants in parity, gate wired L1, passing.
|
|
664
|
+
Not rebuilt; stated explicitly to avoid silent scope drop.
|
|
665
|
+
|
|
666
|
+
Per-decision map (zero-loss proof): every heading in the old DECISIONS.md was assigned
|
|
667
|
+
(a) stale dup → drop (decision also in docs/ADR/) or (b) orphan → extracted to 077+
|
|
668
|
+
or (c) non-ADR commit-log entry → preserved in git history (not formal ADR).
|
|
669
|
+
Before: 76 ADR files. After: 87 ADR files. Zero decisions lost.
|
|
670
|
+
|
|
671
|
+
- refactor(#1131): consolidate setup-node + npm ci into the setup-node-pnpm composite (#1131 slice 2)
|
|
672
|
+
|
|
673
|
+
Eliminates the duplicated `actions/setup-node + npm ci` boilerplate across CI workflows by extending the (previously dead, 0-caller) `setup-node-pnpm` composite action to bundle setup-node + `npm ci` (opt-out via the `install` input) and pinning a single canonical setup-node SHA.
|
|
674
|
+
|
|
675
|
+
- **Composite (both tracks):** `setup-node-pnpm/action.yml(.ejs)` now runs `npm ci` (gated on `install`, `shell: bash`) and pins `actions/setup-node@…v6.4.0` (was a dead v4.3.0). Emit-wiring unchanged (already emitted by the CI-tier generator). The legacy `-pnpm` dir name is retained (renaming would orphan the dir in already-generated repos); the action's `name:` is corrected.
|
|
676
|
+
- **Rewired** every `setup-node + npm ci` pair to `uses: ./.github/actions/setup-node-pnpm` across 01-pr-fast, 02-pr-extended, 05-release, 06-nightly, 06-nightly-lite, 07-weekly, 08-monthly, 12-mutation-scheduled, 14-license-scan, 15-codeql, drift-shadow. Parity-gated workflows are regenerated from their templates; 05-release is hand-edited (both tracks). Node-only/bare jobs (PII scan, change-classify, action-pin audit) and the publish-package job (needs `registry-url`) keep their inline setup-node.
|
|
677
|
+
- **SHA consolidation:** 3 distinct setup-node pins → 1 (v6.4.0). This bumps the per-PR hot path (01/02) v4→v6.4.0 (node 22 compatible). The composite pin sits outside `sync-action-pins`/INV-76, so a new render test (`setup-node-pnpm-render.test.ts`) asserts the canonical SHA; a new `01-pr-fast-render.test.ts` covers the most-rewired workflow.
|
|
678
|
+
|
|
679
|
+
- Expand package `files` to include `README.md`, `LICENSE`, `NOTICE`, `CHANGELOG.md`, and `THIRD_PARTY_LICENSES.md`. Convert `exports["."]` to conditional form with `types` and `import` fields. Add `prepack` script and pack-size budget tooling.
|
|
680
|
+
- docs(wave1): Obsidian-friendly doc index + zero-risk deletes
|
|
681
|
+
|
|
682
|
+
- Enrich `docs/INDEX.md` generator: grouped by top-level directory,
|
|
683
|
+
real markdown links (Obsidian-clickable + graph-wired, GitHub/VitePress-portable),
|
|
684
|
+
`status` and `kind/*` tag per entry, `canonical_id` column retained.
|
|
685
|
+
- Export `collectDocs()` and `buildIndex()` from `scripts/gen-doc-index.mjs`
|
|
686
|
+
for testability; add first unit test suite (15 tests, RED→GREEN).
|
|
687
|
+
- Switch generator from `import.meta.url` root to `process.cwd()` (consistent
|
|
688
|
+
with other gate scripts; enables temp-dir CLI testing).
|
|
689
|
+
- Parse `tags: [...]` frontmatter arrays into `string[]` (was raw string).
|
|
690
|
+
- Delete three stale/wrong-stack docs: `docs/SYSTEM/CI-SMOKE.md` (stray
|
|
691
|
+
timestamp), `docs/security/STRIDE.md` (empty casing-dup of
|
|
692
|
+
`docs/SECURITY/STRIDE.md`), `docs/COMMANDS.md` (gradle/Java dogfood artifact).
|
|
693
|
+
- Add `*.bak.*` to `.gitignore` (anti-recurrence for timestamped generated backups).
|
|
694
|
+
|
|
695
|
+
- feat(worktree): harvest parent-state guardrails (#733) — prevent worktree harvest when parent branch has uncommitted changes or is ahead of remote
|
|
696
|
+
|
|
697
|
+
## [0.1.0] — 2026-05-15
|
|
698
|
+
|
|
699
|
+
**Channel:** stable
|
|
700
|
+
|
|
701
|
+
### Added
|
|
702
|
+
|
|
703
|
+
- Initial public release of arbiter AI-governance framework
|
|
704
|
+
- `arbiter init` CLI command to scaffold governance into target projects
|
|
705
|
+
- Cross-language compatibility matrix (TypeScript, Python, Rust, Java, Go)
|
|
706
|
+
- L1/L2/L3 gate tiers with `check-all.mjs` generation
|
|
707
|
+
- Claude Code hook generation (pre-edit, post-edit, UserPromptSubmit, PreCompact)
|
|
708
|
+
- Changeset-based changelog workflow (this file)
|
|
709
|
+
- `.changeset/` configuration for future version management
|
|
710
|
+
- CI `changeset-check` workflow enforcing changeset presence on user-facing PRs
|
|
711
|
+
- CI `release` workflow consuming changesets to bump version and tag
|
|
712
|
+
|
|
713
|
+
[0.1.0]: https://github.com/LucaDominici/arbiter/releases/tag/v0.1.0
|