@getarbiter/cli 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +713 -0
- package/LICENSE +202 -0
- package/NOTICE +31 -0
- package/PRIVACY.md +111 -0
- package/README.md +237 -0
- package/THIRD_PARTY_LICENSES.md +472 -0
- package/dist/.src-manifest.json +1 -0
- package/dist/capabilities/host-probe.js +3 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +87 -0
- package/dist/commands/adopt-policy.js +3 -0
- package/dist/commands/configure-interactive.js +3 -0
- package/dist/commands/configure.js +5 -0
- package/dist/commands/cross-model-review.js +3 -0
- package/dist/commands/diff.js +20 -0
- package/dist/commands/doc-set.js +3 -0
- package/dist/commands/doctor/clean.js +2 -0
- package/dist/commands/doctor/fail-open-census.js +12 -0
- package/dist/commands/doctor/health.js +11 -0
- package/dist/commands/doctor/prove-gates.js +13 -0
- package/dist/commands/doctor/recover-lock.js +12 -0
- package/dist/commands/doctor/repair-state.js +6 -0
- package/dist/commands/doctor/tool-pin-extract.js +4 -0
- package/dist/commands/doctor/tool-pins.js +9 -0
- package/dist/commands/doctor-interactive.js +2 -0
- package/dist/commands/doctor.js +2 -0
- package/dist/commands/explain.js +19 -0
- package/dist/commands/gate-exec.js +4 -0
- package/dist/commands/gold-audit.js +14 -0
- package/dist/commands/graph.js +5 -0
- package/dist/commands/init/build-arbiter-config.js +1 -0
- package/dist/commands/init/generate.js +42 -0
- package/dist/commands/init/github-setup.js +5 -0
- package/dist/commands/init/maturity-gates.js +10 -0
- package/dist/commands/init/resolve-config.js +3 -0
- package/dist/commands/init/toolchain.js +10 -0
- package/dist/commands/init/types.js +1 -0
- package/dist/commands/init.js +17 -0
- package/dist/commands/method-interactive.js +4 -0
- package/dist/commands/method.js +11 -0
- package/dist/commands/obsidian.js +2 -0
- package/dist/commands/plugin.js +8 -0
- package/dist/commands/pr-merged.js +2 -0
- package/dist/commands/retire-policy.js +3 -0
- package/dist/commands/review-diff.js +3 -0
- package/dist/commands/settings.js +7 -0
- package/dist/commands/ship-config.js +2 -0
- package/dist/commands/ship-profile.js +2 -0
- package/dist/commands/ship-review.js +1 -0
- package/dist/commands/ship-tier.js +2 -0
- package/dist/commands/ship-train.js +2 -0
- package/dist/commands/task-mark.js +2 -0
- package/dist/commands/task-note.js +3 -0
- package/dist/commands/task-record-red.js +2 -0
- package/dist/commands/task-record-tech-debt.js +4 -0
- package/dist/commands/task-ship.js +3 -0
- package/dist/commands/task-state.js +6 -0
- package/dist/commands/task.js +59 -0
- package/dist/commands/update.js +60 -0
- package/dist/commands/upgrade-level-interactive.js +2 -0
- package/dist/commands/upgrade-level.js +7 -0
- package/dist/commands/verify-plan.js +8 -0
- package/dist/commands/verify-tdd.js +2 -0
- package/dist/commands/verify.js +7 -0
- package/dist/commands/wizard/coherence.js +1 -0
- package/dist/commands/worktree-prune.js +4 -0
- package/dist/commands/worktree.js +39 -0
- package/dist/compatibility/cross-language-matrix.json +540 -0
- package/dist/compatibility/index.d.ts +4 -0
- package/dist/compatibility/index.js +2 -0
- package/dist/compatibility/matcher.js +1 -0
- package/dist/compatibility/matrix.json +27 -0
- package/dist/compatibility/parsers.d.ts +38 -0
- package/dist/compatibility/parsers.js +1 -0
- package/dist/compatibility/probe.d.ts +41 -0
- package/dist/compatibility/probe.js +4 -0
- package/dist/compatibility/report.js +2 -0
- package/dist/compatibility/schema.d.ts +80 -0
- package/dist/compatibility/schema.js +1 -0
- package/dist/compatibility/skills-matrix.json +98 -0
- package/dist/compatibility/skills-validator.d.ts +30 -0
- package/dist/compatibility/skills-validator.js +4 -0
- package/dist/compatibility/tooling-proposals.json +5 -0
- package/dist/config/arbiter-ignore.js +3 -0
- package/dist/config/collaboration-mode-defaults.js +1 -0
- package/dist/config/diff.js +1 -0
- package/dist/config/env-overrides.js +3 -0
- package/dist/config/env-registry.js +2 -0
- package/dist/config/levels.js +1 -0
- package/dist/config/migrations/index.js +2 -0
- package/dist/config/migrations/v0-to-v1.js +2 -0
- package/dist/config/migrations/v1-to-v2.js +2 -0
- package/dist/config/migrations/v2-to-v3.js +2 -0
- package/dist/config/migrations/v3-to-v4.js +2 -0
- package/dist/config/override-resolver.js +2 -0
- package/dist/config/resolve-project-config.js +2 -0
- package/dist/config/resolve-project-name.js +2 -0
- package/dist/config/schema.d.ts +480 -0
- package/dist/config/schema.js +1 -0
- package/dist/config/test-pyramid-profiles.js +1 -0
- package/dist/config/thresholds.js +2 -0
- package/dist/conformance/dimensions.js +3 -0
- package/dist/conformance/engine.js +7 -0
- package/dist/conformance/gate-proofs.js +4 -0
- package/dist/conformance/shared.js +2 -0
- package/dist/detectors/axis.js +1 -0
- package/dist/detectors/build.js +2 -0
- package/dist/detectors/existing.js +2 -0
- package/dist/detectors/external-model.js +2 -0
- package/dist/detectors/framework.js +2 -0
- package/dist/detectors/git.js +11 -0
- package/dist/detectors/github.js +2 -0
- package/dist/detectors/lanes.js +5 -0
- package/dist/detectors/language-hooks.js +117 -0
- package/dist/detectors/language.js +2 -0
- package/dist/detectors/package-manager.js +2 -0
- package/dist/detectors/package.js +2 -0
- package/dist/detectors/scaffold-wiring.js +2 -0
- package/dist/detectors/workflow-collision.js +4 -0
- package/dist/evidence/gate-binding.js +4 -0
- package/dist/evidence/git-checks.js +3 -0
- package/dist/evidence/load.js +2 -0
- package/dist/evidence/provenance.js +2 -0
- package/dist/evidence/summary.js +2 -0
- package/dist/evidence/tdd-reexecute.js +2 -0
- package/dist/evidence/tdd.js +4 -0
- package/dist/experimental/index.js +2 -0
- package/dist/experimental/parse-argv.js +2 -0
- package/dist/experimental/registry.js +2 -0
- package/dist/generators/agents-claude.js +2 -0
- package/dist/generators/agents-md.js +2 -0
- package/dist/generators/anti-drift-validators.js +3 -0
- package/dist/generators/anti-proforma.js +2 -0
- package/dist/generators/api-e2e.js +2 -0
- package/dist/generators/api-middleware.js +2 -0
- package/dist/generators/archunit.js +2 -0
- package/dist/generators/audit-toolchain.js +2 -0
- package/dist/generators/auth.js +2 -0
- package/dist/generators/behavioral-tests.js +2 -0
- package/dist/generators/boundaries.js +2 -0
- package/dist/generators/check-all.js +2 -0
- package/dist/generators/check-stack-conformity.js +2 -0
- package/dist/generators/ci-five-lane.js +2 -0
- package/dist/generators/ci-tier.js +2 -0
- package/dist/generators/claude.js +3 -0
- package/dist/generators/codex-hooks.js +2 -0
- package/dist/generators/codex-known-limitations.js +2 -0
- package/dist/generators/codex.js +15 -0
- package/dist/generators/commit-footer.js +2 -0
- package/dist/generators/compliance-menu.js +2 -0
- package/dist/generators/compliance.js +2 -0
- package/dist/generators/conformance.js +2 -0
- package/dist/generators/contract-testing.js +2 -0
- package/dist/generators/coverage.js +2 -0
- package/dist/generators/debt-gates.js +24 -0
- package/dist/generators/debt-ratchet.js +2 -0
- package/dist/generators/derived-class.js +2 -0
- package/dist/generators/doc-set.js +4 -0
- package/dist/generators/docs.js +2 -0
- package/dist/generators/duplication.js +2 -0
- package/dist/generators/e2e-constitution.js +2 -0
- package/dist/generators/env-template.js +2 -0
- package/dist/generators/evidence-retention.js +2 -0
- package/dist/generators/feature-matrix.js +2 -0
- package/dist/generators/frontend-governance.js +2 -0
- package/dist/generators/frontend-quality.js +2 -0
- package/dist/generators/gap.js +2 -0
- package/dist/generators/gdpr.js +2 -0
- package/dist/generators/githooks.js +2 -0
- package/dist/generators/github-setup.js +2 -0
- package/dist/generators/github.js +2 -0
- package/dist/generators/gitignore.js +2 -0
- package/dist/generators/global-invariants.js +3 -0
- package/dist/generators/go-boundaries.js +2 -0
- package/dist/generators/gold-kit.js +2 -0
- package/dist/generators/infra.js +2 -0
- package/dist/generators/integration-testing.js +7 -0
- package/dist/generators/iso27001.js +2 -0
- package/dist/generators/iso9001.js +2 -0
- package/dist/generators/labels.js +2 -0
- package/dist/generators/local-wrapper.js +2 -0
- package/dist/generators/modulith.js +2 -0
- package/dist/generators/mutation.js +2 -0
- package/dist/generators/observability.js +2 -0
- package/dist/generators/operations.js +2 -0
- package/dist/generators/perf-k6.js +2 -0
- package/dist/generators/pharma.js +2 -0
- package/dist/generators/playwright-python.js +2 -0
- package/dist/generators/playwright-ts.js +2 -0
- package/dist/generators/pr-tooling.js +2 -0
- package/dist/generators/python-boundaries.js +2 -0
- package/dist/generators/quality.js +2 -0
- package/dist/generators/registry.js +2 -0
- package/dist/generators/regulated.js +2 -0
- package/dist/generators/resilience.js +2 -0
- package/dist/generators/risk-register.js +2 -0
- package/dist/generators/root.js +2 -0
- package/dist/generators/rust-boundaries.js +2 -0
- package/dist/generators/safety-class.js +2 -0
- package/dist/generators/security.js +2 -0
- package/dist/generators/seed.js +2 -0
- package/dist/generators/self-validation.js +2 -0
- package/dist/generators/ship-driver.js +2 -0
- package/dist/generators/skill-names.json +17 -0
- package/dist/generators/skills.js +2 -0
- package/dist/generators/smoke-journeys.js +2 -0
- package/dist/generators/solo-exception.js +2 -0
- package/dist/generators/ssot.js +2 -0
- package/dist/generators/stride-enforcement.js +2 -0
- package/dist/generators/suppressions.js +2 -0
- package/dist/generators/test-pyramid-manifest.js +3 -0
- package/dist/generators/test-taxonomy.js +2 -0
- package/dist/generators/wiki.js +2 -0
- package/dist/github/branch-protection.js +2 -0
- package/dist/github/classify-gh-error.js +2 -0
- package/dist/github/labels.js +2 -0
- package/dist/github/project-board.js +2 -0
- package/dist/graph/builders/adr.js +4 -0
- package/dist/graph/builders/ast.js +3 -0
- package/dist/graph/builders/canon.js +2 -0
- package/dist/graph/builders/evidence.js +2 -0
- package/dist/graph/builders/inv.js +1 -0
- package/dist/graph/builders/req.js +3 -0
- package/dist/graph/builders/test-nodes.js +3 -0
- package/dist/graph/builders/utils.js +2 -0
- package/dist/graph/load.js +2 -0
- package/dist/graph/model.js +2 -0
- package/dist/graph/query.js +3 -0
- package/dist/graph/store.js +1 -0
- package/dist/i18n/en.json +293 -0
- package/dist/i18n/index.js +4 -0
- package/dist/i18n/types.js +2 -0
- package/dist/integrations/companions.js +2 -0
- package/dist/integrations/external-review.js +10 -0
- package/dist/integrations/plugin-schema.js +2 -0
- package/dist/integrations/skill-detector.js +7 -0
- package/dist/integrations/skills-matrix.js +2 -0
- package/dist/integrations/types.d.ts +23 -0
- package/dist/integrations/types.js +2 -0
- package/dist/internal/cli-deprecation-registry.js +2 -0
- package/dist/internal/deprecate.js +3 -0
- package/dist/internal/experimental-warn.js +3 -0
- package/dist/invariants/catalog.d.ts +2 -0
- package/dist/invariants/catalog.js +1 -0
- package/dist/invariants/filter.d.ts +28 -0
- package/dist/invariants/filter.js +1 -0
- package/dist/invariants/index.d.ts +4 -0
- package/dist/invariants/index.js +2 -0
- package/dist/invariants/tiers.js +1 -0
- package/dist/invariants/types.d.ts +1 -0
- package/dist/invariants/types.js +1 -0
- package/dist/kit/applicability.js +3 -0
- package/dist/kit/audit-report.js +3 -0
- package/dist/kit/brownfield-detect.js +4 -0
- package/dist/kit/canonical-mapping.json +1 -0
- package/dist/kit/catalog.js +2 -0
- package/dist/kit/catalog.json +1 -0
- package/dist/kit/derived.json +1 -0
- package/dist/kit/emit-issues.js +8 -0
- package/dist/kit/measure.js +5 -0
- package/dist/kit/redaction.js +3 -0
- package/dist/kit/schema.js +2 -0
- package/dist/kit/taxonomy.js +2 -0
- package/dist/kit/thresholds.d.ts +12 -0
- package/dist/kit/thresholds.js +2 -0
- package/dist/kit/wave-engine.js +1 -0
- package/dist/recipes/loader.js +6 -0
- package/dist/recipes/schema.js +2 -0
- package/dist/risk/classifier.js +2 -0
- package/dist/risk/sha-check.js +2 -0
- package/dist/state/backups.js +2 -0
- package/dist/state/envelope.js +2 -0
- package/dist/state/generated-manifest.js +3 -0
- package/dist/state/manifest-key.js +2 -0
- package/dist/state/migrations/index.js +1 -0
- package/dist/state/migrations/v0-to-v1.js +2 -0
- package/dist/state/retired-renders.js +2 -0
- package/dist/templates/.nvmrc.ejs +1 -0
- package/dist/templates/HANDOFF.template.md +45 -0
- package/dist/templates/__tests__/contract/error-shape.contract.test.ts.ejs +47 -0
- package/dist/templates/agents-md/AGENTS.md.ejs +517 -0
- package/dist/templates/api-e2e/README.md.ejs +33 -0
- package/dist/templates/api-e2e/go-httptest.go.ejs +43 -0
- package/dist/templates/api-e2e/java-restassured.java.ejs +28 -0
- package/dist/templates/api-e2e/kotlin-restassured.kt.ejs +30 -0
- package/dist/templates/api-e2e/manifest.json.ejs +8 -0
- package/dist/templates/api-e2e/postman.collection.json.ejs +30 -0
- package/dist/templates/api-e2e/python-httpx.py.ejs +17 -0
- package/dist/templates/api-e2e/run.sh.ejs +61 -0
- package/dist/templates/api-e2e/ts-supertest.test.ts.ejs +18 -0
- package/dist/templates/archunit/AntiCyclicTest.java.ejs +29 -0
- package/dist/templates/archunit/AntiProformaExempt.java.ejs +35 -0
- package/dist/templates/archunit/AntiProformaTest.java.ejs +104 -0
- package/dist/templates/archunit/ArchitectureTest.java.ejs +87 -0
- package/dist/templates/archunit/DependencyFlowTest.java.ejs +55 -0
- package/dist/templates/archunit/DomainPurityTest.java.ejs +47 -0
- package/dist/templates/archunit/NamingConventionsTest.java.ejs +54 -0
- package/dist/templates/archunit/NoH2ArchTest.java.ejs +30 -0
- package/dist/templates/archunit/NoMockMvcTest.java.ejs +71 -0
- package/dist/templates/archunit/PortsIndependenceTest.java.ejs +55 -0
- package/dist/templates/archunit/RestAssuredArchTest.java.ejs +32 -0
- package/dist/templates/archunit/RestAssuredBaseIT.java.ejs +66 -0
- package/dist/templates/archunit/TestCoverageArchTest.java.ejs +29 -0
- package/dist/templates/archunit/arch-test-deps-maven.md.ejs +42 -0
- package/dist/templates/archunit/arch-test-deps.gradle.ejs +14 -0
- package/dist/templates/audit/gdpr/check-gdpr-controls.mjs.ejs +102 -0
- package/dist/templates/audit/gdpr/controls-to-gates.md.ejs +42 -0
- package/dist/templates/audit/gdpr/data-flow-map.md.ejs +30 -0
- package/dist/templates/audit/gdpr/dpia.md.ejs +45 -0
- package/dist/templates/audit/generic/audit-gate-rules.md.ejs +24 -0
- package/dist/templates/audit/generic/audit-trail-policy.md.ejs +38 -0
- package/dist/templates/audit/iso27001/iso27001-controls-gate-map.md.ejs +60 -0
- package/dist/templates/auth/setup.md.ejs +661 -0
- package/dist/templates/behavioral-tests/ExampleBehavioralTest.java.ejs +67 -0
- package/dist/templates/behavioral-tests/TESTING_POLICY.md.ejs +116 -0
- package/dist/templates/behavioral-tests/bdd/ExampleBddIT.java.ejs +19 -0
- package/dist/templates/behavioral-tests/bdd/ExampleSteps.java.ejs +61 -0
- package/dist/templates/behavioral-tests/bdd/example.feature.ejs +14 -0
- package/dist/templates/behavioral-tests/bdd/example.steps.ts.ejs +37 -0
- package/dist/templates/behavioral-tests/bdd/example_bdd_test.rs.ejs +64 -0
- package/dist/templates/behavioral-tests/bdd/example_test.go.ejs +80 -0
- package/dist/templates/behavioral-tests/bdd/test_example_bdd.py.ejs +47 -0
- package/dist/templates/behavioral-tests/eslint-playwright.json.ejs +10 -0
- package/dist/templates/behavioral-tests/eslint.config.playwright.mjs.ejs +29 -0
- package/dist/templates/behavioral-tests/example.behavioral.test.ts.ejs +47 -0
- package/dist/templates/behavioral-tests/example_behavioral_test.go.ejs +51 -0
- package/dist/templates/behavioral-tests/example_behavioral_test.rs.ejs +47 -0
- package/dist/templates/behavioral-tests/test_example_behavioral.py.ejs +40 -0
- package/dist/templates/boundaries/.eslintrc-boundaries.cjs.ejs +81 -0
- package/dist/templates/boundaries/.eslintrc-frontend-spa.cjs.ejs +79 -0
- package/dist/templates/boundaries/.importlinter.ejs +48 -0
- package/dist/templates/boundaries/check-boundaries-go.mjs.ejs +94 -0
- package/dist/templates/boundaries/check-boundaries-python.mjs.ejs +118 -0
- package/dist/templates/boundaries/check-boundaries-rust.mjs.ejs +111 -0
- package/dist/templates/boundaries/check-boundaries.mjs.ejs +34 -0
- package/dist/templates/boundaries/clippy.toml.ejs +50 -0
- package/dist/templates/boundaries/deny.toml.ejs +56 -0
- package/dist/templates/boundaries/eslint.config.boundaries.mjs.ejs +112 -0
- package/dist/templates/boundaries/eslint.config.frontend-spa.mjs.ejs +93 -0
- package/dist/templates/boundaries/golangci-boundaries.yml.ejs +70 -0
- package/dist/templates/boundaries/ruff-boundaries.toml.ejs +32 -0
- package/dist/templates/claude/CLAUDE.md.ejs +78 -0
- package/dist/templates/claude/agents/agent-write-classes.json +30 -0
- package/dist/templates/claude/agents/bridge-reviewer.md.ejs +68 -0
- package/dist/templates/claude/agents/codebase-scanner.md.ejs +69 -0
- package/dist/templates/claude/agents/context-checker.md.ejs +73 -0
- package/dist/templates/claude/agents/red-team.md.ejs +134 -0
- package/dist/templates/claude/commands/close-gold-gap.md.ejs +43 -0
- package/dist/templates/claude/commands/drain.md.ejs +81 -0
- package/dist/templates/claude/commands/gold-audit.md.ejs +43 -0
- package/dist/templates/claude/commands/impact.md.ejs +39 -0
- package/dist/templates/claude/commands/levelup.md.ejs +61 -0
- package/dist/templates/claude/commands/ship.md.ejs +902 -0
- package/dist/templates/claude/commands/tabletop.md.ejs +46 -0
- package/dist/templates/claude/commands/task.md.ejs +87 -0
- package/dist/templates/claude/commands/wt-close.md.ejs +58 -0
- package/dist/templates/claude/commands/wt-list.md.ejs +48 -0
- package/dist/templates/claude/commands/wt-open.md.ejs +61 -0
- package/dist/templates/claude/commands/wt-prune.md.ejs +38 -0
- package/dist/templates/claude/hooks/check-circular-deps.mjs.ejs +56 -0
- package/dist/templates/claude/hooks/check-no-orphan-todo.mjs.ejs +45 -0
- package/dist/templates/claude/hooks/check-no-pii.mjs.ejs +121 -0
- package/dist/templates/claude/hooks/check-no-placeholders.mjs.ejs +71 -0
- package/dist/templates/claude/hooks/check-no-skipped-tests.mjs +80 -0
- package/dist/templates/claude/hooks/check-no-unused-exports.mjs +62 -0
- package/dist/templates/claude/hooks/closer-mode-guard.mjs.ejs +102 -0
- package/dist/templates/claude/hooks/debug-state-on-failure.mjs.ejs +98 -0
- package/dist/templates/claude/hooks/enforce-gate-before-pr.mjs +142 -0
- package/dist/templates/claude/hooks/enforce-read-only.mjs +28 -0
- package/dist/templates/claude/hooks/exitplanmode-banner.mjs.ejs +43 -0
- package/dist/templates/claude/hooks/guard-done-evidence.mjs.ejs +85 -0
- package/dist/templates/claude/hooks/guard-task-completion.mjs.ejs +56 -0
- package/dist/templates/claude/hooks/hooks.mjs.ejs +127 -0
- package/dist/templates/claude/hooks/lib.mjs.ejs +523 -0
- package/dist/templates/claude/hooks/post-brainstorm-stop.mjs +48 -0
- package/dist/templates/claude/hooks/post-commit-check.mjs.ejs +65 -0
- package/dist/templates/claude/hooks/post-commit-checklists/go/backend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/go/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/go/frontend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/java/backend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/java/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/java/frontend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/python/backend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/python/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/python/frontend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/rust/backend.ejs +5 -0
- package/dist/templates/claude/hooks/post-commit-checklists/rust/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/rust/frontend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/ts/backend.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/ts/docs.ejs +4 -0
- package/dist/templates/claude/hooks/post-commit-checklists/ts/frontend.ejs +5 -0
- package/dist/templates/claude/hooks/post-edit-dispatch.mjs.ejs +73 -0
- package/dist/templates/claude/hooks/post-subagent-release.mjs +80 -0
- package/dist/templates/claude/hooks/pre-compact.mjs.ejs +79 -0
- package/dist/templates/claude/hooks/pre-edit-plan-anchor.mjs.ejs +225 -0
- package/dist/templates/claude/hooks/pre-edit-ssot-guard.mjs +204 -0
- package/dist/templates/claude/hooks/pre-spawn-worktree-guard.mjs +129 -0
- package/dist/templates/claude/hooks/skill-forced-eval.mjs.ejs +281 -0
- package/dist/templates/claude/hooks/stop-dangerous.mjs +86 -0
- package/dist/templates/claude/hooks/stop-evidence-guard.mjs.ejs +245 -0
- package/dist/templates/claude/hooks/stop-finding-loss.mjs.ejs +168 -0
- package/dist/templates/claude/hooks/wiki-on-commit.mjs.ejs +38 -0
- package/dist/templates/claude/knowledge-map.json.ejs +26 -0
- package/dist/templates/claude/rules/05-agent-lifecycle.md +7 -0
- package/dist/templates/claude/rules/25-todo-folder-policy.md +5 -0
- package/dist/templates/claude/rules/40-context-economy.md +32 -0
- package/dist/templates/claude/rules/45-mcp-fallback.md +25 -0
- package/dist/templates/claude/rules/50-batch-execution.md +75 -0
- package/dist/templates/claude/rules/55-brainstorm-terminal-state.md +44 -0
- package/dist/templates/claude/rules/60-incidental-capture.md +43 -0
- package/dist/templates/claude/rules/75-impact-vault-reading.md +43 -0
- package/dist/templates/claude/rules/90-exec-protocol.md.ejs +40 -0
- package/dist/templates/claude/rules/95-closer-mode.md +45 -0
- package/dist/templates/claude/settings.json.ejs +165 -0
- package/dist/templates/claude/skills/architect-review/SKILL.md.ejs +82 -0
- package/dist/templates/claude/skills/brainstorming/SKILL.md.ejs +86 -0
- package/dist/templates/claude/skills/clean-code/SKILL.md.ejs +39 -0
- package/dist/templates/claude/skills/close-gold-gap/SKILL.md.ejs +58 -0
- package/dist/templates/claude/skills/codebase-audit/SKILL.md.ejs +88 -0
- package/dist/templates/claude/skills/configure/SKILL.md.ejs +72 -0
- package/dist/templates/claude/skills/epic-decompose/SKILL.md.ejs +86 -0
- package/dist/templates/claude/skills/gold-audit/SKILL.md.ejs +91 -0
- package/dist/templates/claude/skills/impact/SKILL.md.ejs +104 -0
- package/dist/templates/claude/skills/levelup/SKILL.md.ejs +146 -0
- package/dist/templates/claude/skills/tabletop/SKILL.md.ejs +118 -0
- package/dist/templates/claude/skills/tdd/SKILL.md.ejs +157 -0
- package/dist/templates/claude/skills/understand-code/SKILL.md.ejs +93 -0
- package/dist/templates/claude/skills/verification/SKILL.md.ejs +68 -0
- package/dist/templates/claude/skills/wave-drain/SKILL.md.ejs +491 -0
- package/dist/templates/codex/CODEX.md.ejs +140 -0
- package/dist/templates/codex/codex-adapter.mjs +132 -0
- package/dist/templates/codex/config.toml.ejs +189 -0
- package/dist/templates/compliance/compliance-mapping.md.ejs +124 -0
- package/dist/templates/compliance/compliance-menu.md.ejs +89 -0
- package/dist/templates/contract-testing/CONTRACTS_POLICY.md.ejs +30 -0
- package/dist/templates/contract-testing/api-snapshots/config-keys-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/config-response-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/enum-values-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/error-shape-baseline.json.ejs +6 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-baseline.json.ejs +12 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-content-types-baseline.json.ejs +3 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-paths-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-required-fields-baseline.json.ejs +1 -0
- package/dist/templates/contract-testing/api-snapshots/openapi-response-status-baseline.json.ejs +3 -0
- package/dist/templates/contract-testing/api-snapshots/test-snapshot.json.ejs +4 -0
- package/dist/templates/contract-testing/env/.env.pact.ejs +4 -0
- package/dist/templates/contract-testing/graphql/GraphqlSchemaTest.java.ejs +29 -0
- package/dist/templates/contract-testing/graphql/graphql-inspector.test.ts.ejs +20 -0
- package/dist/templates/contract-testing/graphql/graphql_schema_test.go.ejs +27 -0
- package/dist/templates/contract-testing/graphql/graphql_schema_test.rs.ejs +27 -0
- package/dist/templates/contract-testing/graphql/test_graphql_schema.py.ejs +21 -0
- package/dist/templates/contract-testing/grpc/GrpcContractTest.java.ejs +23 -0
- package/dist/templates/contract-testing/grpc/buf-breaking.yml.ejs +6 -0
- package/dist/templates/contract-testing/grpc/buf.yaml.ejs +11 -0
- package/dist/templates/contract-testing/grpc/grpc-contract.test.ts.ejs +16 -0
- package/dist/templates/contract-testing/grpc/grpc_contract_test.go.ejs +22 -0
- package/dist/templates/contract-testing/grpc/grpc_contract_test.rs.ejs +22 -0
- package/dist/templates/contract-testing/grpc/test_grpc_contract.py.ejs +18 -0
- package/dist/templates/contract-testing/message-queue/SchemaRegistryCheckIT.java.ejs +44 -0
- package/dist/templates/contract-testing/message-queue/schema-registry-check.ts.ejs +42 -0
- package/dist/templates/contract-testing/message-queue/schema_registry_test.go.ejs +71 -0
- package/dist/templates/contract-testing/message-queue/schema_registry_test.rs.ejs +61 -0
- package/dist/templates/contract-testing/message-queue/test_schema_registry.py.ejs +31 -0
- package/dist/templates/contract-testing/pact-samples/assignment-response.json.ejs +7 -0
- package/dist/templates/contract-testing/pact-samples/availability-response.json.ejs +13 -0
- package/dist/templates/contract-testing/pact-samples/availability-rule-response.json.ejs +8 -0
- package/dist/templates/contract-testing/pact-samples/capacity-response.json.ejs +11 -0
- package/dist/templates/contract-testing/pact-samples/fully-booked-response.json.ejs +6 -0
- package/dist/templates/contract-testing/pact-samples/schedule-override-response.json.ejs +7 -0
- package/dist/templates/contract-testing/rest-owned/PactVerificationIT.java.ejs +31 -0
- package/dist/templates/contract-testing/rest-owned/pact-consumer.test.ts.ejs +36 -0
- package/dist/templates/contract-testing/rest-owned/pact-deps.gradle.ejs +15 -0
- package/dist/templates/contract-testing/rest-owned/pact_consumer_test.go.ejs +48 -0
- package/dist/templates/contract-testing/rest-owned/pact_consumer_test.rs.ejs +23 -0
- package/dist/templates/contract-testing/rest-owned/test_pact_consumer.py.ejs +35 -0
- package/dist/templates/contract-testing/rest-public/OpenApiDiffIT.java.ejs +44 -0
- package/dist/templates/contract-testing/rest-public/export-openapi-java.gradle.ejs +13 -0
- package/dist/templates/contract-testing/rest-public/export-openapi.mjs.ejs +21 -0
- package/dist/templates/contract-testing/rest-public/export_openapi.go.ejs +30 -0
- package/dist/templates/contract-testing/rest-public/export_openapi.py.ejs +27 -0
- package/dist/templates/contract-testing/rest-public/export_openapi.rs.ejs +32 -0
- package/dist/templates/contract-testing/rest-public/openapi-diff.ts.ejs +42 -0
- package/dist/templates/contract-testing/rest-public/openapi_diff_test.go.ejs +35 -0
- package/dist/templates/contract-testing/rest-public/openapi_diff_test.rs.ejs +36 -0
- package/dist/templates/contract-testing/rest-public/test_openapi_diff.py.ejs +32 -0
- package/dist/templates/coverage/.coveragerc.ejs +26 -0
- package/dist/templates/coverage/.tarpaulin.toml.ejs +30 -0
- package/dist/templates/coverage/Cargo.toml.profile.release.ejs +24 -0
- package/dist/templates/coverage/jacoco-maven-setup.md.ejs +72 -0
- package/dist/templates/coverage/jacoco.gradle.ejs +49 -0
- package/dist/templates/coverage/kover.gradle.ejs +35 -0
- package/dist/templates/coverage/vitest.browser.config.ts.ejs +47 -0
- package/dist/templates/coverage/vitest.config.ts.ejs +47 -0
- package/dist/templates/docs/CODING_STANDARDS.md.ejs +81 -0
- package/dist/templates/docs/FEATURE_MATRIX.md.ejs +84 -0
- package/dist/templates/docs/GAP.md.ejs +58 -0
- package/dist/templates/docs/ISO27001_ANNEX_A.md.ejs +144 -0
- package/dist/templates/docs/MASTER_TEST_PLAN.md.ejs +52 -0
- package/dist/templates/docs/POST_MERGE_REVIEW_TEMPLATE.md.ejs +63 -0
- package/dist/templates/docs/SECURE_CODING_CHECKLIST.md.ejs +61 -0
- package/dist/templates/docs/adr/ADR-000_template.md.ejs +28 -0
- package/dist/templates/docs/bugs/bug-analysis.md.ejs +47 -0
- package/dist/templates/docs/bugs/bug-report.md.ejs +51 -0
- package/dist/templates/docs/bugs/bug-verification.md.ejs +42 -0
- package/dist/templates/docs/runbooks/deployment.md.ejs +119 -0
- package/dist/templates/docs/runbooks/prod-checklist.md.ejs +90 -0
- package/dist/templates/docs/runbooks/rollback.md.ejs +124 -0
- package/dist/templates/docs/runbooks/troubleshooting.md.ejs +130 -0
- package/dist/templates/docs/skeletons/arc42-canvas.md.ejs +46 -0
- package/dist/templates/docs/skeletons/arc42-full.md.ejs +59 -0
- package/dist/templates/docs/skeletons/decision-registry.md.ejs +38 -0
- package/dist/templates/docs/skeletons/er-model.md.ejs +19 -0
- package/dist/templates/docs/skeletons/glossary.md.ejs +8 -0
- package/dist/templates/docs/skeletons/governance.md.ejs +13 -0
- package/dist/templates/docs/skeletons/slo.md.ejs +21 -0
- package/dist/templates/docs/skeletons/technical-debt.md.ejs +8 -0
- package/dist/templates/docs/skeletons/test-strategy.md.ejs +14 -0
- package/dist/templates/docs/skeletons/threat-model-4q.md.ejs +20 -0
- package/dist/templates/docs/skeletons/threat-model-stride.md.ejs +22 -0
- package/dist/templates/docs/specs/atomic-task-list.md.ejs +57 -0
- package/dist/templates/docs/steering/product.md.ejs +44 -0
- package/dist/templates/docs/steering/structure.md.ejs +49 -0
- package/dist/templates/docs/steering/tech.md.ejs +53 -0
- package/dist/templates/documentation/cli-catalog.md.ejs +21 -0
- package/dist/templates/e2e/E2E_CONSTITUTION.md.ejs +77 -0
- package/dist/templates/e2e/playwright-python/conftest.py.ejs +22 -0
- package/dist/templates/e2e/playwright-python/run_axe.py.ejs +99 -0
- package/dist/templates/e2e/playwright-python/test_a11y.py.ejs +38 -0
- package/dist/templates/e2e/playwright-python/test_smoke.py.ejs +28 -0
- package/dist/templates/e2e/playwright-ts/a11y.spec.ts.ejs +20 -0
- package/dist/templates/e2e/playwright-ts/render-smoke.spec.ts.ejs +90 -0
- package/dist/templates/e2e/playwright-ts/run-axe.ts.ejs +74 -0
- package/dist/templates/e2e/smoke-journeys/journeys.spec.ts.ejs +53 -0
- package/dist/templates/evidence-files.json.ejs +13 -0
- package/dist/templates/frontend/FE_DESIGN_PRINCIPLES.md.ejs +115 -0
- package/dist/templates/frontend/FRONTEND_CONSTITUTION.md.ejs +170 -0
- package/dist/templates/frontend/design-tokens.json.ejs +107 -0
- package/dist/templates/frontend/vrt-setup.md.ejs +83 -0
- package/dist/templates/githooks/commit-msg.ejs +60 -0
- package/dist/templates/githooks/pre-commit.ejs +95 -0
- package/dist/templates/githooks/pre-push.ejs +251 -0
- package/dist/templates/githooks/setup-hooks.sh.ejs +8 -0
- package/dist/templates/github/PULL_REQUEST_TEMPLATE.md +37 -0
- package/dist/templates/github/PULL_REQUEST_TEMPLATE.md.ejs +52 -0
- package/dist/templates/github/actions/build-cache/action.yml.ejs +84 -0
- package/dist/templates/github/actions/nas-ssh/action.yml.ejs +53 -0
- package/dist/templates/github/actions/setup-java-maven/action.yml.ejs +53 -0
- package/dist/templates/github/actions/setup-node-pnpm/action.yml.ejs +39 -0
- package/dist/templates/github/actions/sign-and-attest/action.yml.ejs +53 -0
- package/dist/templates/github/dependabot.yml.ejs +66 -0
- package/dist/templates/github/extended-ci-paths.txt.ejs +38 -0
- package/dist/templates/github/issue-templates/bug-report.yml +72 -0
- package/dist/templates/github/issue-templates/compliance-item.yml.ejs +75 -0
- package/dist/templates/github/issue-templates/config.yml +2 -0
- package/dist/templates/github/issue-templates/epic.yml +66 -0
- package/dist/templates/github/issue-templates/feature-request.yml +24 -0
- package/dist/templates/github/issue-templates/task-brief.yml.ejs +125 -0
- package/dist/templates/github/labels.yml.ejs +161 -0
- package/dist/templates/github/scripts/sticky-failure-issue.sh.ejs +61 -0
- package/dist/templates/github/workflows/01-pr-fast.yml.ejs +1089 -0
- package/dist/templates/github/workflows/02-pr-extended.yml.ejs +512 -0
- package/dist/templates/github/workflows/03-human-approval.yml.ejs +76 -0
- package/dist/templates/github/workflows/04-deploy-test.yml.ejs +425 -0
- package/dist/templates/github/workflows/05-release.yml.ejs +813 -0
- package/dist/templates/github/workflows/06-nightly-lite.yml.ejs +125 -0
- package/dist/templates/github/workflows/06-nightly.yml.ejs +25 -0
- package/dist/templates/github/workflows/07-weekly-lite.yml.ejs +221 -0
- package/dist/templates/github/workflows/07-weekly.yml.ejs +23 -0
- package/dist/templates/github/workflows/08-monthly.yml.ejs +23 -0
- package/dist/templates/github/workflows/09-heartbeat.yml.ejs +268 -0
- package/dist/templates/github/workflows/10-deploy-prod.yml.ejs +144 -0
- package/dist/templates/github/workflows/11-k6-on-demand.yml.ejs +43 -0
- package/dist/templates/github/workflows/12-mutation-scheduled.yml.ejs +100 -0
- package/dist/templates/github/workflows/13-archunit-extended.yml.ejs +33 -0
- package/dist/templates/github/workflows/14-license-scan.yml.ejs +45 -0
- package/dist/templates/github/workflows/15-codeql.yml.ejs +117 -0
- package/dist/templates/github/workflows/16-frontend-quality.yml.ejs +154 -0
- package/dist/templates/github/workflows/17-ossf-scorecard.yml.ejs +46 -0
- package/dist/templates/github/workflows/18-frontend-lane.yml.ejs +50 -0
- package/dist/templates/github/workflows/_ai-draft-check.yml.ejs +44 -0
- package/dist/templates/github/workflows/_contract-postman.yml.ejs +93 -0
- package/dist/templates/github/workflows/_cosign-copy/aws-ecs.ejs +90 -0
- package/dist/templates/github/workflows/_cosign-copy/azure-container-app.ejs +97 -0
- package/dist/templates/github/workflows/_cosign-copy/gcp-cloud-run.ejs +102 -0
- package/dist/templates/github/workflows/_cosign-copy/ghcr.ejs +76 -0
- package/dist/templates/github/workflows/_cosign-copy/nas-compose.ejs +69 -0
- package/dist/templates/github/workflows/_deploy/aws-ecs.ejs +78 -0
- package/dist/templates/github/workflows/_deploy/azure-container-app.ejs +59 -0
- package/dist/templates/github/workflows/_deploy/gcp-cloud-run.ejs +71 -0
- package/dist/templates/github/workflows/_deploy/ghcr.ejs +19 -0
- package/dist/templates/github/workflows/_deploy/nas-compose.ejs +45 -0
- package/dist/templates/github/workflows/_k6-runner.yml.ejs +107 -0
- package/dist/templates/github/workflows/_label-on-approve.yml.ejs +44 -0
- package/dist/templates/github/workflows/_label-sync.yml.ejs +58 -0
- package/dist/templates/github/workflows/_monthly.yml.ejs +343 -0
- package/dist/templates/github/workflows/_nightly.yml.ejs +826 -0
- package/dist/templates/github/workflows/_notify.yml.ejs +96 -0
- package/dist/templates/github/workflows/_partials/macos-keychain-bypass.ejs +6 -0
- package/dist/templates/github/workflows/_partials/macos-keychain-restore.ejs +6 -0
- package/dist/templates/github/workflows/_partials/scheduled-heavy-jobs.ejs +117 -0
- package/dist/templates/github/workflows/_partials/sigstore-preflight.ejs +8 -0
- package/dist/templates/github/workflows/_partials/trivy-fs-java.ejs +27 -0
- package/dist/templates/github/workflows/_post-merge-notify.yml.ejs +228 -0
- package/dist/templates/github/workflows/_pr-staleness.yml.ejs +85 -0
- package/dist/templates/github/workflows/_shared-security.yml.ejs +132 -0
- package/dist/templates/github/workflows/_sigstore-retry-sign.yml.ejs +102 -0
- package/dist/templates/github/workflows/_weekly.yml.ejs +313 -0
- package/dist/templates/github/workflows/drift-shadow.yml.ejs +51 -0
- package/dist/templates/github/workflows/five-lane/ci.yml.ejs +54 -0
- package/dist/templates/github/workflows/five-lane/nightly.yml.ejs +70 -0
- package/dist/templates/github/workflows/five-lane/release.yml.ejs +53 -0
- package/dist/templates/github/workflows/five-lane/weekly.yml.ejs +72 -0
- package/dist/templates/github/workflows/issue-state.yml.ejs +93 -0
- package/dist/templates/global-invariants/GLOBAL_INVARIANTS.md.ejs +34 -0
- package/dist/templates/governance/RACI.md.ejs +21 -0
- package/dist/templates/governance/ci-mental-model.md.ejs +268 -0
- package/dist/templates/governance/contract-integrity-policy.md.ejs +116 -0
- package/dist/templates/governance/enterprise-compliance-baseline.md.ejs +111 -0
- package/dist/templates/governance/evidence-retention.md.ejs +43 -0
- package/dist/templates/governance/gdpr-erasure-runbook.md.ejs +165 -0
- package/dist/templates/governance/qa-audit-phases.md.ejs +129 -0
- package/dist/templates/governance/risk-assessment-template.md.ejs +105 -0
- package/dist/templates/governance/risk-register.md.ejs +76 -0
- package/dist/templates/governance/solo-dev-exception.md.ejs +96 -0
- package/dist/templates/governance/validation-evidence.md.ejs +131 -0
- package/dist/templates/infra/azure/containerapp.tpl.yaml.ejs +74 -0
- package/dist/templates/infra/nas-compose/deploy.sh.ejs +114 -0
- package/dist/templates/integration-testing/AbstractIntegrationTest.java.ejs +36 -0
- package/dist/templates/integration-testing/NoH2ArchTest.java.ejs +24 -0
- package/dist/templates/integration-testing/conftest.py.ejs +20 -0
- package/dist/templates/integration-testing/db_fixture.rs.ejs +48 -0
- package/dist/templates/integration-testing/eslint-no-fake-db.json.ejs +19 -0
- package/dist/templates/integration-testing/eslint.config.no-fake-db.mjs.ejs +46 -0
- package/dist/templates/integration-testing/main_test.go.ejs +53 -0
- package/dist/templates/integration-testing/main_test_sqlite.go.ejs +37 -0
- package/dist/templates/integration-testing/test-setup.ts.ejs +26 -0
- package/dist/templates/integration-testing/testcontainers-deps.gradle.ejs +9 -0
- package/dist/templates/java/DeprecationInterceptor.java.ejs +50 -0
- package/dist/templates/java/archunit-hexagonal.ejs +69 -0
- package/dist/templates/java/modulith/ApplicationModulesTest.java.ejs +21 -0
- package/dist/templates/java/modulith/modulith-deps.gradle.ejs +13 -0
- package/dist/templates/java/modulith/modulith-maven-setup.md.ejs +21 -0
- package/dist/templates/java/pharma/AuditEvent.java.ejs +138 -0
- package/dist/templates/java/pharma/AuditMapper.java.ejs +60 -0
- package/dist/templates/java/pharma/archunit-pharma.ejs +128 -0
- package/dist/templates/kit/GLOBAL_KIT.md.ejs +11 -0
- package/dist/templates/kit/dim.md.ejs +33 -0
- package/dist/templates/llms-txt.config.json.ejs +22 -0
- package/dist/templates/local-wrapper/.env.example.ejs +15 -0
- package/dist/templates/local-wrapper/Makefile.ejs +44 -0
- package/dist/templates/local-wrapper/run.sh.ejs +5 -0
- package/dist/templates/middleware/410-gone-handler.ts.ejs +41 -0
- package/dist/templates/middleware/correlation-id.ts.ejs +32 -0
- package/dist/templates/middleware/deprecation.ts.ejs +45 -0
- package/dist/templates/middleware/error-handler.ts.ejs +73 -0
- package/dist/templates/middleware/payload-size-limit.ts.ejs +51 -0
- package/dist/templates/mutation/README.md.ejs +67 -0
- package/dist/templates/mutation/cargo-mutants.toml.ejs +9 -0
- package/dist/templates/mutation/mutmut-config.toml.ejs +7 -0
- package/dist/templates/mutation/parse-mutants.mjs.ejs +44 -0
- package/dist/templates/mutation/parse-mutmut.py.ejs +44 -0
- package/dist/templates/mutation/pitest-l2-setup.md.ejs +66 -0
- package/dist/templates/mutation/pitest-maven-setup.md.ejs +64 -0
- package/dist/templates/mutation/pitest.gradle.ejs +23 -0
- package/dist/templates/mutation/stryker.conf.json.ejs +17 -0
- package/dist/templates/observability/setup.md.ejs +495 -0
- package/dist/templates/operations/handbook.md.ejs +217 -0
- package/dist/templates/perf/bundle-budget.json.ejs +29 -0
- package/dist/templates/perf/k6/reports/csv-report.py.ejs +91 -0
- package/dist/templates/perf/k6/reports/html-report.py.ejs +114 -0
- package/dist/templates/perf/k6/reports/json-report.py.ejs +74 -0
- package/dist/templates/perf/k6/scenarios/breakpoint.js.ejs +26 -0
- package/dist/templates/perf/k6/scenarios/burst.js.ejs +43 -0
- package/dist/templates/perf/k6/scenarios/endurance.js.ejs +36 -0
- package/dist/templates/perf/k6/scenarios/load.js.ejs +26 -0
- package/dist/templates/perf/k6/scenarios/ramp-down.js.ejs +29 -0
- package/dist/templates/perf/k6/scenarios/ramp-up.js.ejs +32 -0
- package/dist/templates/perf/k6/scenarios/smoke.js.ejs +23 -0
- package/dist/templates/perf/k6/scenarios/soak.js.ejs +26 -0
- package/dist/templates/perf/k6/scenarios/spike.js.ejs +29 -0
- package/dist/templates/perf/k6/scenarios/steady-state.js.ejs +31 -0
- package/dist/templates/perf/k6/scenarios/stress.js.ejs +29 -0
- package/dist/templates/perf/k6/scenarios/volume.js.ejs +36 -0
- package/dist/templates/perf/k6/seed/test-data.sql.ejs +59 -0
- package/dist/templates/perf/lighthouserc.json.ejs +41 -0
- package/dist/templates/quality/iso9001/CAPA_LOG.md.ejs +36 -0
- package/dist/templates/quality/iso9001/DOCUMENT_CONTROL.md.ejs +36 -0
- package/dist/templates/quality/iso9001/REQUIREMENTS_TRACEABILITY.md.ejs +61 -0
- package/dist/templates/regulated/overlay.json.ejs +26 -0
- package/dist/templates/regulated/regulated-overlay.md.ejs +40 -0
- package/dist/templates/resilience/RESILIENCE.md.ejs +310 -0
- package/dist/templates/root/.gitignore.ejs +85 -0
- package/dist/templates/root/CODEOWNERS.ejs +18 -0
- package/dist/templates/root/CONTRIBUTING.md.ejs +62 -0
- package/dist/templates/root/SECURITY.md.ejs +19 -0
- package/dist/templates/root/TEST_TAXONOMY.md.ejs +100 -0
- package/dist/templates/root/commitlint.config.js.ejs +4 -0
- package/dist/templates/root/docs/METHOD/CANONICAL_PATHS.md.ejs +24 -0
- package/dist/templates/root/docs/METHOD/ENGINEERING_DEFAULTS.md.ejs +136 -0
- package/dist/templates/root/docs/METHOD/KNOWLEDGE_MAP.md.ejs +90 -0
- package/dist/templates/root/docs/METHOD/PATTERNS_CATALOG.md.ejs +51 -0
- package/dist/templates/root/docs/METHOD/REUSE_REGISTRY.md.ejs +26 -0
- package/dist/templates/root/docs/METHOD/REUSE_REGISTRY_SPEC.md.ejs +80 -0
- package/dist/templates/root/docs/METHOD/SSOT_CORE_SET.md.ejs +62 -0
- package/dist/templates/root/docs/METHOD/TRACK_ROUTER.md.ejs +39 -0
- package/dist/templates/root/docs/SYSTEM/CANON.md.ejs +359 -0
- package/dist/templates/root/docs/SYSTEM/FAIL_CLOSED.md.ejs +171 -0
- package/dist/templates/root/editorconfig.ejs +39 -0
- package/dist/templates/root/tsconfig.json.ejs +21 -0
- package/dist/templates/rust/clippy.toml.ejs +14 -0
- package/dist/templates/schemas/milestone.schema.json.ejs +164 -0
- package/dist/templates/schemas/rtm-verdict.schema.json.ejs +52 -0
- package/dist/templates/schemas/source-record.schema.json.ejs +91 -0
- package/dist/templates/schemas/tabletop-evidence.schema.json.ejs +53 -0
- package/dist/templates/schemas/use-case.schema.json.ejs +59 -0
- package/dist/templates/scripts/apply-branch-protection.mjs.ejs +70 -0
- package/dist/templates/scripts/audit-toolchain.mjs.ejs +112 -0
- package/dist/templates/scripts/bg-run.sh.ejs +59 -0
- package/dist/templates/scripts/capacity-probe.mjs.ejs +147 -0
- package/dist/templates/scripts/capture-debt-baseline.mjs.ejs +99 -0
- package/dist/templates/scripts/check-acceptance.mjs.ejs +298 -0
- package/dist/templates/scripts/check-action-pins.mjs.ejs +215 -0
- package/dist/templates/scripts/check-agent-return.mjs.ejs +177 -0
- package/dist/templates/scripts/check-all.mjs.ejs +1746 -0
- package/dist/templates/scripts/check-anti-fake-green.mjs.ejs +80 -0
- package/dist/templates/scripts/check-anti-proforma.mjs.ejs +547 -0
- package/dist/templates/scripts/check-api-e2e.mjs.ejs +106 -0
- package/dist/templates/scripts/check-arc42-slots.mjs.ejs +25 -0
- package/dist/templates/scripts/check-assertion-delta.mjs.ejs +287 -0
- package/dist/templates/scripts/check-audit-dry-pass.mjs.ejs +176 -0
- package/dist/templates/scripts/check-bundle-size.mjs.ejs +151 -0
- package/dist/templates/scripts/check-canonical-paths.mjs.ejs +39 -0
- package/dist/templates/scripts/check-ci-tiers.mjs.ejs +111 -0
- package/dist/templates/scripts/check-claude-md-lint.mjs.ejs +142 -0
- package/dist/templates/scripts/check-collab-mode-wired.mjs.ejs +60 -0
- package/dist/templates/scripts/check-commit-footer-rationale.mjs.ejs +170 -0
- package/dist/templates/scripts/check-constraint-scan.mjs.ejs +681 -0
- package/dist/templates/scripts/check-consumer-audit.mjs.ejs +414 -0
- package/dist/templates/scripts/check-continue-on-error.mjs.ejs +227 -0
- package/dist/templates/scripts/check-cross-model-review.mjs.ejs +458 -0
- package/dist/templates/scripts/check-decision-registry.mjs.ejs +101 -0
- package/dist/templates/scripts/check-doc-freshness.mjs.ejs +17 -0
- package/dist/templates/scripts/check-doc-links.mjs.ejs +98 -0
- package/dist/templates/scripts/check-doc-set.mjs.ejs +18 -0
- package/dist/templates/scripts/check-docs.mjs.ejs +71 -0
- package/dist/templates/scripts/check-domain-api-surface.mjs.ejs +80 -0
- package/dist/templates/scripts/check-drift.mjs.ejs +167 -0
- package/dist/templates/scripts/check-duplication.mjs.ejs +45 -0
- package/dist/templates/scripts/check-e2e-escalation.mjs.ejs +199 -0
- package/dist/templates/scripts/check-e2e-quarantine.mjs.ejs +68 -0
- package/dist/templates/scripts/check-emission-parity.mjs.ejs +91 -0
- package/dist/templates/scripts/check-exit-code-contract.mjs.ejs +138 -0
- package/dist/templates/scripts/check-fail-closed-audit.mjs.ejs +389 -0
- package/dist/templates/scripts/check-fe-boundaries.mjs.ejs +184 -0
- package/dist/templates/scripts/check-feature-matrix.mjs.ejs +835 -0
- package/dist/templates/scripts/check-frontend-lane.mjs.ejs +73 -0
- package/dist/templates/scripts/check-grace-window.mjs.ejs +102 -0
- package/dist/templates/scripts/check-handoff-doc.mjs.ejs +192 -0
- package/dist/templates/scripts/check-hook-routing.mjs.ejs +224 -0
- package/dist/templates/scripts/check-image-pins.mjs.ejs +90 -0
- package/dist/templates/scripts/check-inline-suppressions.mjs.ejs +153 -0
- package/dist/templates/scripts/check-iso9001.mjs.ejs +146 -0
- package/dist/templates/scripts/check-knowledge-map.mjs.ejs +49 -0
- package/dist/templates/scripts/check-local-ci-parity.mjs.ejs +382 -0
- package/dist/templates/scripts/check-m16-handoff.mjs.ejs +112 -0
- package/dist/templates/scripts/check-merge-method.mjs.ejs +92 -0
- package/dist/templates/scripts/check-milestones.mjs.ejs +678 -0
- package/dist/templates/scripts/check-min-test-execution.mjs.ejs +225 -0
- package/dist/templates/scripts/check-muted-test.mjs.ejs +270 -0
- package/dist/templates/scripts/check-no-stub-redirects.mjs.ejs +154 -0
- package/dist/templates/scripts/check-no-tracked-artifacts.mjs.ejs +134 -0
- package/dist/templates/scripts/check-oracle-discrimination.mjs.ejs +244 -0
- package/dist/templates/scripts/check-pii-scan.mjs.ejs +67 -0
- package/dist/templates/scripts/check-pipe-tee-hazard.mjs.ejs +85 -0
- package/dist/templates/scripts/check-pr-size-gate.mjs.ejs +85 -0
- package/dist/templates/scripts/check-refutation-verdicts.mjs.ejs +256 -0
- package/dist/templates/scripts/check-regulated-overlay.mjs.ejs +158 -0
- package/dist/templates/scripts/check-render-smoke.mjs.ejs +100 -0
- package/dist/templates/scripts/check-reuse-registry.mjs.ejs +44 -0
- package/dist/templates/scripts/check-review-completion.mjs.ejs +708 -0
- package/dist/templates/scripts/check-safety-adopt-ratchet.mjs.ejs +142 -0
- package/dist/templates/scripts/check-secret-presence.mjs.ejs +191 -0
- package/dist/templates/scripts/check-secret-scan.mjs.ejs +82 -0
- package/dist/templates/scripts/check-skip-critical-e2e.mjs.ejs +142 -0
- package/dist/templates/scripts/check-smoke-journeys.mjs.ejs +272 -0
- package/dist/templates/scripts/check-solo-reactivation.mjs.ejs +102 -0
- package/dist/templates/scripts/check-sources.mjs.ejs +245 -0
- package/dist/templates/scripts/check-ssot-core.mjs.ejs +45 -0
- package/dist/templates/scripts/check-stack-conformity.mjs.ejs +160 -0
- package/dist/templates/scripts/check-stride-traceability.mjs.ejs +101 -0
- package/dist/templates/scripts/check-suppression-expiry.mjs.ejs +79 -0
- package/dist/templates/scripts/check-suppression-rationale.mjs.ejs +76 -0
- package/dist/templates/scripts/check-suppressions.mjs.ejs +150 -0
- package/dist/templates/scripts/check-tabletop-evidence.mjs.ejs +499 -0
- package/dist/templates/scripts/check-tdd-evidence.mjs.ejs +381 -0
- package/dist/templates/scripts/check-test-naming.mjs.ejs +151 -0
- package/dist/templates/scripts/check-test-pyramid.mjs.ejs +170 -0
- package/dist/templates/scripts/check-test-scope-tier.mjs.ejs +208 -0
- package/dist/templates/scripts/check-tier-coverage.mjs.ejs +71 -0
- package/dist/templates/scripts/check-todo-max-age.mjs.ejs +205 -0
- package/dist/templates/scripts/check-touched-vs-manifest.mjs.ejs +179 -0
- package/dist/templates/scripts/check-unwired-guards.mjs.ejs +367 -0
- package/dist/templates/scripts/check-use-cases.mjs.ejs +345 -0
- package/dist/templates/scripts/check-validator-helptext.mjs.ejs +80 -0
- package/dist/templates/scripts/check-wiki-lint.mjs.ejs +162 -0
- package/dist/templates/scripts/check-workflow-docs-sync.mjs.ejs +91 -0
- package/dist/templates/scripts/check-workflow-job-naming.mjs.ejs +102 -0
- package/dist/templates/scripts/check-workflow-perms.mjs.ejs +54 -0
- package/dist/templates/scripts/check-workflow-runners.mjs.ejs +87 -0
- package/dist/templates/scripts/check-workflow-sha-pinning.mjs.ejs +89 -0
- package/dist/templates/scripts/check-workflow-test-integrity.mjs.ejs +235 -0
- package/dist/templates/scripts/checks/check-rust-no-unsafe.mjs.ejs +58 -0
- package/dist/templates/scripts/checks/check-rust-no-unwrap.mjs.ejs +61 -0
- package/dist/templates/scripts/ci-classify-changes.mjs.ejs +119 -0
- package/dist/templates/scripts/conformance.mjs.ejs +37 -0
- package/dist/templates/scripts/constraint-map.json.ejs +25 -0
- package/dist/templates/scripts/debt-lib.mjs.ejs +1015 -0
- package/dist/templates/scripts/debt-report.mjs.ejs +199 -0
- package/dist/templates/scripts/domain-api-surface.json.ejs +23 -0
- package/dist/templates/scripts/done-evidence.mjs.ejs +359 -0
- package/dist/templates/scripts/evidence-collect.mjs.ejs +264 -0
- package/dist/templates/scripts/evidence-prune.mjs.ejs +96 -0
- package/dist/templates/scripts/evidence-rotate.mjs.ejs +53 -0
- package/dist/templates/scripts/evidence-writer.sh.ejs +220 -0
- package/dist/templates/scripts/gate-registry.yml.ejs +286 -0
- package/dist/templates/scripts/gen-doc-index.mjs.ejs +19 -0
- package/dist/templates/scripts/gen-gap.mjs.ejs +153 -0
- package/dist/templates/scripts/gen-llms-txt.mjs.ejs +18 -0
- package/dist/templates/scripts/gen-wiki.mjs.ejs +196 -0
- package/dist/templates/scripts/gh-cleanup-expired-artifacts.mjs.ejs +134 -0
- package/dist/templates/scripts/gold-audit.mjs.ejs +19 -0
- package/dist/templates/scripts/i18n-literal-scanner.mjs.ejs +175 -0
- package/dist/templates/scripts/ingest-zap-report.mjs.ejs +107 -0
- package/dist/templates/scripts/inject-pact-samples.sh.ejs +96 -0
- package/dist/templates/scripts/issue-readiness.mjs.ejs +84 -0
- package/dist/templates/scripts/knowledge-map-update.mjs.ejs +32 -0
- package/dist/templates/scripts/lib/acceptance-criteria.mjs.ejs +213 -0
- package/dist/templates/scripts/lib/agent-return-validate.mjs.ejs +481 -0
- package/dist/templates/scripts/lib/coverage-gate.mjs.ejs +54 -0
- package/dist/templates/scripts/lib/e2e-reliability.mjs.ejs +207 -0
- package/dist/templates/scripts/lib/ephemeral-server.mjs.ejs +148 -0
- package/dist/templates/scripts/lib/evidence-binding.mjs.ejs +140 -0
- package/dist/templates/scripts/lib/exact-sha-policy.mjs.ejs +233 -0
- package/dist/templates/scripts/lib/gate-args.mjs.ejs +20 -0
- package/dist/templates/scripts/lib/gate-evidence.mjs.ejs +622 -0
- package/dist/templates/scripts/lib/gate-mutex.mjs.ejs +340 -0
- package/dist/templates/scripts/lib/glob-walk.mjs.ejs +148 -0
- package/dist/templates/scripts/lib/run-helpers.mjs.ejs +416 -0
- package/dist/templates/scripts/lib/seed-common.sh.ejs +105 -0
- package/dist/templates/scripts/lib/waiter-count.mjs.ejs +62 -0
- package/dist/templates/scripts/muted-tests-baseline.json.ejs +4 -0
- package/dist/templates/scripts/optional-emissions.json.ejs +117 -0
- package/dist/templates/scripts/oracle-discrimination-baseline.json.ejs +6 -0
- package/dist/templates/scripts/pid-watch.sh.ejs +78 -0
- package/dist/templates/scripts/pii-scan.mjs.ejs +125 -0
- package/dist/templates/scripts/pr-merge-watch.mjs.ejs +445 -0
- package/dist/templates/scripts/record-agent-return.mjs.ejs +279 -0
- package/dist/templates/scripts/record-journey-evidence.mjs.ejs +69 -0
- package/dist/templates/scripts/rework-log.mjs.ejs +172 -0
- package/dist/templates/scripts/run-postman-tests.sh.ejs +112 -0
- package/dist/templates/scripts/schemas/agent-return-external.schema.json +74 -0
- package/dist/templates/scripts/schemas/agent-return.schema.json.ejs +181 -0
- package/dist/templates/scripts/schemas/cross-model-dispatch.schema.json +95 -0
- package/dist/templates/scripts/seed-test-data.sh.ejs +99 -0
- package/dist/templates/scripts/self-validation.mjs.ejs +126 -0
- package/dist/templates/scripts/setup-repo.sh.ejs +78 -0
- package/dist/templates/scripts/spotbugs-baseline.json.ejs +4 -0
- package/dist/templates/scripts/test-gate-layering.mjs.ejs +92 -0
- package/dist/templates/scripts/validate-api-snapshots.mjs.ejs +86 -0
- package/dist/templates/scripts/validate-k6-scenarios.mjs.ejs +96 -0
- package/dist/templates/scripts/validate-openapi-field-types.mjs.ejs +124 -0
- package/dist/templates/scripts/validate-postman-collection.mjs.ejs +159 -0
- package/dist/templates/scripts/verify-fe-coverage.mjs.ejs +138 -0
- package/dist/templates/scripts/verify-i18n-parity.mjs.ejs +114 -0
- package/dist/templates/scripts/verify-module-coverage.mjs.ejs +207 -0
- package/dist/templates/scripts/verify-mutation-baseline.mjs.ejs +209 -0
- package/dist/templates/scripts/verify-spotbugs.mjs.ejs +216 -0
- package/dist/templates/scripts/verify-tokens.mjs.ejs +177 -0
- package/dist/templates/security/RISK_ASSESSMENT.md.ejs +35 -0
- package/dist/templates/security/STRIDE.md.ejs +24 -0
- package/dist/templates/security/gitleaks.toml.ejs +21 -0
- package/dist/templates/security/zap/baseline-auth.context.ejs +58 -0
- package/dist/templates/security/zap/rules.tsv.ejs +100 -0
- package/dist/templates/ship/TICK_PROMPT.md.ejs +55 -0
- package/dist/templates/ship/supervisor.sh.ejs +46 -0
- package/dist/templates/smoke-journeys/manifest.json.ejs +1 -0
- package/dist/templates/sonar-project.properties.ejs +25 -0
- package/dist/templates/standards/doc-profile.ejs +27 -0
- package/dist/templates/standards/gold-doc-set.yml.ejs +528 -0
- package/dist/templates/standards/gold-registry.java.yml.ejs +266 -0
- package/dist/templates/standards/gold-registry.typescript.yml.ejs +104 -0
- package/dist/templates/standards/gold-registry.yml.ejs +119 -0
- package/dist/templates/standards/thresholds.yml.ejs +86 -0
- package/dist/templates/static-analysis/.dependency-cruiser.cjs.ejs +78 -0
- package/dist/templates/static-analysis/.golangci.yml.ejs +70 -0
- package/dist/templates/static-analysis/.shellcheckrc.ejs +13 -0
- package/dist/templates/static-analysis/.yamllint.yml.ejs +41 -0
- package/dist/templates/static-analysis/checkstyle.xml.ejs +83 -0
- package/dist/templates/static-analysis/detekt.yml.ejs +26 -0
- package/dist/templates/static-analysis/eslint.config.mjs.ejs +54 -0
- package/dist/templates/static-analysis/eslint.config.static.mjs.ejs +38 -0
- package/dist/templates/static-analysis/eslintrc-static.json.ejs +30 -0
- package/dist/templates/static-analysis/jscpd.json.ejs +25 -0
- package/dist/templates/static-analysis/knip.json.ejs +26 -0
- package/dist/templates/static-analysis/pmd-ruleset.xml.ejs +92 -0
- package/dist/templates/static-analysis/prettierignore.ejs +59 -0
- package/dist/templates/static-analysis/prettierrc.json.ejs +10 -0
- package/dist/templates/static-analysis/requirements-dev.txt.ejs +11 -0
- package/dist/templates/static-analysis/ruff.toml.ejs +40 -0
- package/dist/templates/static-analysis/rustfmt.toml.ejs +3 -0
- package/dist/templates/static-analysis/spotbugs-exclude.xml.ejs +120 -0
- package/dist/templates/static-analysis/spotbugs.gradle.ejs +18 -0
- package/dist/templates/static-analysis/spotless.gradle.ejs +38 -0
- package/dist/templates/static-analysis/stylelintrc.json.ejs +16 -0
- package/dist/templates/suppressions/archunit-baseline.json.ejs +1 -0
- package/dist/templates/suppressions/consumer-audit-allowlist.json.ejs +1 -0
- package/dist/templates/suppressions/gitleaksignore.ejs +20 -0
- package/dist/templates/suppressions/pii-allowlist.json.ejs +1 -0
- package/dist/templates/suppressions/suppressions-schema.json.ejs +39 -0
- package/dist/templates/suppressions/trivyignore.ejs +17 -0
- package/dist/templates/testing/test-taxonomy.md.ejs +120 -0
- package/dist/test/example.behavioral.test.js +2 -0
- package/dist/types/memory.d.ts +19 -0
- package/dist/types/memory.js +1 -0
- package/dist/types/plan.d.ts +102 -0
- package/dist/types/plan.js +2 -0
- package/dist/types/plugin.d.ts +45 -0
- package/dist/types/plugin.js +1 -0
- package/dist/utils/canon-loader.js +2 -0
- package/dist/utils/channel.js +1 -0
- package/dist/utils/config.d.ts +79 -0
- package/dist/utils/config.js +5 -0
- package/dist/utils/confirm-downgrade.js +5 -0
- package/dist/utils/env.js +2 -0
- package/dist/utils/error-catalog.js +2 -0
- package/dist/utils/errors.js +2 -0
- package/dist/utils/evidence-log.js +3 -0
- package/dist/utils/file-lock.js +2 -0
- package/dist/utils/first-run.js +8 -0
- package/dist/utils/fs.js +3 -0
- package/dist/utils/github-issue-helper.js +4 -0
- package/dist/utils/gradle.js +21 -0
- package/dist/utils/json-output.js +2 -0
- package/dist/utils/logger-config.js +4 -0
- package/dist/utils/logger.js +3 -0
- package/dist/utils/maturity-check.js +2 -0
- package/dist/utils/pkg.js +3 -0
- package/dist/utils/platform.js +2 -0
- package/dist/utils/plugin-loader.js +2 -0
- package/dist/utils/plugin-worker.js +2 -0
- package/dist/utils/prettier-format.js +2 -0
- package/dist/utils/profiler.js +2 -0
- package/dist/utils/render.js +2 -0
- package/dist/utils/replay.js +3 -0
- package/dist/utils/run-cli.js +6 -0
- package/dist/utils/run-id.js +3 -0
- package/dist/utils/safe-read.js +2 -0
- package/dist/utils/task-id.js +2 -0
- package/dist/utils/today.js +2 -0
- package/dist/utils/tty.js +2 -0
- package/dist/utils/walk-dir.js +2 -0
- package/dist/verify/rules/drive-by-scope.js +1 -0
- package/dist/verify/rules/orphan-todos.js +1 -0
- package/dist/verify/rules/registry.js +1 -0
- package/dist/verify/rules/skip-patterns.js +1 -0
- package/dist/verify/rules/types.d.ts +15 -0
- package/dist/verify/rules/types.js +1 -0
- package/dist/verify/rules/ui-language.js +1 -0
- package/dist/verify/run.js +3 -0
- package/dist/wizard/archetype-defaults.js +1 -0
- package/dist/wizard/presets.js +1 -0
- package/dist/wizard/prompts.js +44 -0
- package/dist/wizard/types.d.ts +637 -0
- package/dist/wizard/types.js +1 -0
- package/dist/worktree/harvest.js +2 -0
- package/dist/worktree/links.js +2 -0
- package/dist/worktree/paths.js +2 -0
- package/dist/worktree/validate.js +3 -0
- package/package.json +124 -0
- package/scripts/check-arc42-slots.mjs +738 -0
- package/scripts/check-doc-freshness.mjs +236 -0
- package/scripts/check-doc-set.mjs +243 -0
- package/scripts/check-doc-style.mjs +228 -0
- package/scripts/gold-audit.mjs +319 -0
- package/scripts/lib/doc-gate-allowlist.mjs +123 -0
- package/scripts/lib/doc-set-resolve.mjs +274 -0
- package/scripts/lib/glob-walk.mjs +148 -0
- package/scripts/lib/gold-audit-lib.mjs +1260 -0
- package/scripts/lib/run-helpers.mjs +413 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
_Full arc42 — enterprise column. Includes a C4 Context/Container section (the `>2 deployable
|
|
4
|
+
units` trigger promoted this from the Canvas). Keep each section short; link out to detail docs
|
|
5
|
+
rather than inlining them._
|
|
6
|
+
|
|
7
|
+
## Introduction and Goals
|
|
8
|
+
|
|
9
|
+
<!-- What this system is for and who it serves, then the top quality goals it is optimised for and
|
|
10
|
+
the stakeholders who care. This is arc42 section 1: a reader who knows nothing should be able
|
|
11
|
+
to stop here and still know why the system exists. -->
|
|
12
|
+
|
|
13
|
+
## Context
|
|
14
|
+
|
|
15
|
+
<!-- System scope and boundary: who/what it talks to, in and out of scope. -->
|
|
16
|
+
|
|
17
|
+
## Constraints
|
|
18
|
+
|
|
19
|
+
<!-- Technical, organizational, and regulatory constraints. -->
|
|
20
|
+
|
|
21
|
+
## C4 — Context & Container
|
|
22
|
+
|
|
23
|
+
<!-- C4 Level 1 (Context) and Level 2 (Container) diagrams or their textual equivalent. -->
|
|
24
|
+
|
|
25
|
+
## Solution strategy
|
|
26
|
+
|
|
27
|
+
<!-- The top-level technology and pattern decisions, and why. -->
|
|
28
|
+
|
|
29
|
+
## Building blocks
|
|
30
|
+
|
|
31
|
+
<!-- Level 1 (and, where useful, level 2) decomposition — components, responsibilities, interfaces. -->
|
|
32
|
+
|
|
33
|
+
## Runtime
|
|
34
|
+
|
|
35
|
+
<!-- The important runtime scenarios: primary request flow, async/background paths, failure/retry. -->
|
|
36
|
+
|
|
37
|
+
## Deployment
|
|
38
|
+
|
|
39
|
+
<!-- Infrastructure, environments, and the path from commit to production. -->
|
|
40
|
+
|
|
41
|
+
## Cross-cutting concepts
|
|
42
|
+
|
|
43
|
+
<!-- Concerns that cut across building blocks: auth, logging, error handling, i18n, etc. -->
|
|
44
|
+
|
|
45
|
+
## Decisions
|
|
46
|
+
|
|
47
|
+
<!-- Link to docs/ADR — this section indexes, it does not restate. -->
|
|
48
|
+
|
|
49
|
+
## Quality
|
|
50
|
+
|
|
51
|
+
<!-- Quality tree / scenarios: which attributes matter, how they're measured and met. -->
|
|
52
|
+
|
|
53
|
+
## Risks & technical debt
|
|
54
|
+
|
|
55
|
+
<!-- Known architectural risks and debt; link docs/technical-debt.md for the full register. -->
|
|
56
|
+
|
|
57
|
+
## Glossary
|
|
58
|
+
|
|
59
|
+
<!-- Domain terms specific to this architecture; link docs/GLOSSARY.md for the full list. -->
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Decision Registry — <%= projectName %>
|
|
2
|
+
|
|
3
|
+
Registro delle **decisioni di progetto bloccate** (modello a 3 strati: Leggi → D-NN → ADR).
|
|
4
|
+
Ogni D-NN dichiara il proprio enforcement; una decisione senza enforcement né esenzione
|
|
5
|
+
`documentale` fa fallire `scripts/check-decision-registry.mjs` (decisione orfana).
|
|
6
|
+
|
|
7
|
+
## Leggi
|
|
8
|
+
|
|
9
|
+
*Sezione opzionale — le leggi immutabili del progetto (es. "una legge non cambia mai senza
|
|
10
|
+
un D-NN"). Eliminarla se non usata.*
|
|
11
|
+
|
|
12
|
+
- (nessuna legge registrata)
|
|
13
|
+
|
|
14
|
+
## Decisioni
|
|
15
|
+
|
|
16
|
+
| D-NN | decisione | razionale | decisore | data |
|
|
17
|
+
| --- | --- | --- | --- | --- |
|
|
18
|
+
| D-01 | (esempio — prima decisione bloccata) | (perché è bloccata) | (decisore) | <%= today %> |
|
|
19
|
+
Enforcement: documentale
|
|
20
|
+
|
|
21
|
+
> **Formato (leggibile dal gate):** ogni riga della tabella è una decisione `D-NN`. La riga
|
|
22
|
+
> subito sotto la riga della tabella (senza riga vuota in mezzo) dichiara l'enforcement:
|
|
23
|
+
> `Enforcement: <gate|test>` oppure `Enforcement: documentale` (esenzione esplicita —
|
|
24
|
+
> il gate passa con una nota). Una D-NN senza riga Enforcement è una **decisione orfana**
|
|
25
|
+
> e il gate fallisce nominandola. Rimuovere la riga di esempio quando la prima decisione reale
|
|
26
|
+
> viene registrata.
|
|
27
|
+
|
|
28
|
+
## Promozione a invariante (PROJ-NN)
|
|
29
|
+
|
|
30
|
+
Una D-NN che matura in regola permanente si promuove a **PROJ-NN** — un invariante dichiarato
|
|
31
|
+
dal progetto via `governance.projectInvariants[]` in `arbiter.json` (ADR-112). La regola vive
|
|
32
|
+
in **UN solo registro**: una volta promossa a PROJ-NN, la riga D-NN viene rimossa da qui.
|
|
33
|
+
|
|
34
|
+
## Changelog
|
|
35
|
+
|
|
36
|
+
### v0.1.0 — <%= today %>
|
|
37
|
+
|
|
38
|
+
- Registro decisioni iniziale (scaffold `arbiter`).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
## Entities
|
|
4
|
+
|
|
5
|
+
<!-- One entry per entity: name + one-line purpose. -->
|
|
6
|
+
|
|
7
|
+
## Relations
|
|
8
|
+
|
|
9
|
+
<!-- Entity-to-entity relations (cardinality, ownership direction). A diagram is welcome here. -->
|
|
10
|
+
|
|
11
|
+
## Classification / PII columns
|
|
12
|
+
|
|
13
|
+
| Entity | Field | Classification | PII? |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| <!-- entity --> | <!-- field --> | public / internal / confidential / restricted | yes / no |
|
|
16
|
+
|
|
17
|
+
## Retention
|
|
18
|
+
|
|
19
|
+
<!-- Retention period per entity (or link docs/data/retention.md if that's the SSOT). -->
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
_Domain + project terminology. Add a term as soon as it causes a cross-author misunderstanding —
|
|
4
|
+
don't wait to backfill the whole vocabulary at once._
|
|
5
|
+
|
|
6
|
+
| Term | Definition | Owner |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| <!-- term --> | <!-- one unambiguous sentence --> | <!-- who to ask --> |
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
## Decision rights
|
|
4
|
+
|
|
5
|
+
<!-- Who can decide what (architecture, dependency adds, process changes) — RACI or a short list. -->
|
|
6
|
+
|
|
7
|
+
## Gate ladder
|
|
8
|
+
|
|
9
|
+
<!-- The enforcement bands in use (advisory → soft → hard) and what promotes a gate between them. -->
|
|
10
|
+
|
|
11
|
+
## Escalation
|
|
12
|
+
|
|
13
|
+
<!-- What happens when a gate is bypassed or a decision is contested — the actual escalation path. -->
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
## Objectives
|
|
4
|
+
|
|
5
|
+
<!-- The 2-4 outcomes users actually care about (availability, latency, correctness, freshness). -->
|
|
6
|
+
|
|
7
|
+
## SLIs
|
|
8
|
+
|
|
9
|
+
<!-- The concrete, measurable indicators for each objective (e.g. p99 latency, error rate). -->
|
|
10
|
+
|
|
11
|
+
## Targets
|
|
12
|
+
|
|
13
|
+
<!-- The numeric target + measurement window per SLI (e.g. 99.9% over 30d). -->
|
|
14
|
+
|
|
15
|
+
## Error budget
|
|
16
|
+
|
|
17
|
+
<!-- Budget = 1 - target, the policy for spending it, and what happens at exhaustion. -->
|
|
18
|
+
|
|
19
|
+
## Alerting hooks
|
|
20
|
+
|
|
21
|
+
<!-- Which SLI breaches page on-call vs file a ticket; link the runbook/incident doc. -->
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
_Register table — known shortcuts, their cost, and the payback plan. Add an entry the moment a
|
|
4
|
+
shortcut is taken; a debt register written after the fact is a wishlist, not a register._
|
|
5
|
+
|
|
6
|
+
| Item | Class | Interest | Plan |
|
|
7
|
+
|---|---|---|---|
|
|
8
|
+
| <!-- what was shortcut --> | <!-- architectural / test / dependency / docs --> | <!-- cost of NOT paying it back, and how it compounds --> | <!-- issue/ADR link + trigger to pay it back --> |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
## Pyramid
|
|
4
|
+
|
|
5
|
+
<!-- The test levels this project uses (unit/integration/e2e/contract) and roughly what share of
|
|
6
|
+
coverage each owns. Link the real ratio source (e.g. test-pyramid.json) if one exists. -->
|
|
7
|
+
|
|
8
|
+
## Coverage policy
|
|
9
|
+
|
|
10
|
+
<!-- What must be covered before merge (new code, critical paths) and what is intentionally not. -->
|
|
11
|
+
|
|
12
|
+
## Gate mapping
|
|
13
|
+
|
|
14
|
+
<!-- Which test level runs at which gate (pre-push / PR / nightly / release) and why. -->
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
_Four-question threat model (Shostack) — right-sized for solo/small. Move to `threat-model-stride`
|
|
4
|
+
once the `public`/`customer-data` trigger fires._
|
|
5
|
+
|
|
6
|
+
## What are we building?
|
|
7
|
+
|
|
8
|
+
<!-- One diagram or short description of the system/feature and its trust boundaries. -->
|
|
9
|
+
|
|
10
|
+
## What can go wrong?
|
|
11
|
+
|
|
12
|
+
<!-- Brainstormed list of threats — do not filter yet, completeness first. -->
|
|
13
|
+
|
|
14
|
+
## What are we going to do about it?
|
|
15
|
+
|
|
16
|
+
<!-- For each threat above: mitigate, accept, transfer, or eliminate — and how. -->
|
|
17
|
+
|
|
18
|
+
## Did we do a good job?
|
|
19
|
+
|
|
20
|
+
<!-- How this model will be re-validated (review cadence, trigger for re-run). -->
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# <%= title %>
|
|
2
|
+
|
|
3
|
+
_STRIDE threat model — enterprise column. One row per component per applicable STRIDE category;
|
|
4
|
+
delete categories that genuinely don't apply to a component rather than leaving them blank._
|
|
5
|
+
|
|
6
|
+
## Components in scope
|
|
7
|
+
|
|
8
|
+
<!-- List the components/trust boundaries this model covers. -->
|
|
9
|
+
|
|
10
|
+
## STRIDE table
|
|
11
|
+
|
|
12
|
+
| Component | Spoofing | Tampering | Repudiation | Info disclosure | DoS | Elevation of privilege |
|
|
13
|
+
|---|---|---|---|---|---|---|
|
|
14
|
+
| <!-- component --> | <!-- threat/mitigation --> | | | | | |
|
|
15
|
+
|
|
16
|
+
## Mitigations tracker
|
|
17
|
+
|
|
18
|
+
<!-- Link each mitigation above to an issue/ADR/config so it is auditable, not just documented. -->
|
|
19
|
+
|
|
20
|
+
## Re-validation
|
|
21
|
+
|
|
22
|
+
<!-- Cadence and triggers (new component, new trust boundary, incident) for re-running this model. -->
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Atomic Task List — <%= projectName %>
|
|
2
|
+
|
|
3
|
+
_Generated by arbiter. A template for decomposing a feature into **atomic tasks**:
|
|
4
|
+
the smallest units that can each be shipped, tested, and reviewed on their own._
|
|
5
|
+
|
|
6
|
+
## What "Atomic" Means
|
|
7
|
+
|
|
8
|
+
A task is atomic when **all** of these hold:
|
|
9
|
+
|
|
10
|
+
- **Independently shippable** — it can merge to the main branch without waiting on
|
|
11
|
+
a sibling task.
|
|
12
|
+
- **Single responsibility** — one behavioural change, one reason to exist.
|
|
13
|
+
- **Testable in isolation** — it has its own failing test before any code (TDD red).
|
|
14
|
+
- **Bounded** — small enough to plan, implement, and review in one sitting.
|
|
15
|
+
- **Acceptance-defined** — "done" is written down before work starts.
|
|
16
|
+
|
|
17
|
+
If a task cannot satisfy these, split it further or record the dependency.
|
|
18
|
+
|
|
19
|
+
## Decomposition Procedure
|
|
20
|
+
|
|
21
|
+
1. State the feature outcome in one sentence.
|
|
22
|
+
2. List the observable behaviours it requires.
|
|
23
|
+
3. Turn each behaviour into one atomic task below.
|
|
24
|
+
4. Mark dependencies explicitly — an atomic task may be *blocked by* another, but
|
|
25
|
+
must not *silently assume* another's code.
|
|
26
|
+
5. Sequence so that every task lands green.
|
|
27
|
+
|
|
28
|
+
## Task Template
|
|
29
|
+
|
|
30
|
+
Copy this block per task.
|
|
31
|
+
|
|
32
|
+
### TASK-NN — <short imperative title>
|
|
33
|
+
|
|
34
|
+
- **Outcome:** what is observably true after this task merges.
|
|
35
|
+
- **Depends on:** TASK-MM | none
|
|
36
|
+
- **TDD red:** the failing test that proves the gap (path + assertion).
|
|
37
|
+
- **Acceptance criteria:**
|
|
38
|
+
- [ ] _criterion 1 (observable, testable)_
|
|
39
|
+
- [ ] _criterion 2_
|
|
40
|
+
- **Out of scope:** what this task deliberately does NOT do.
|
|
41
|
+
- **Gate:** `node scripts/check-all.mjs L2` green.
|
|
42
|
+
|
|
43
|
+
## Task List
|
|
44
|
+
|
|
45
|
+
| ID | Title | Depends on | Status |
|
|
46
|
+
| ------- | ----- | ---------- | ------ |
|
|
47
|
+
| TASK-01 | _…_ | none | todo |
|
|
48
|
+
| TASK-02 | _…_ | TASK-01 | todo |
|
|
49
|
+
|
|
50
|
+
## Anti-Patterns
|
|
51
|
+
|
|
52
|
+
| Anti-pattern | Why it fails |
|
|
53
|
+
| ------------ | ------------ |
|
|
54
|
+
| "Big bang" task touching many layers | Un-reviewable, un-revertable |
|
|
55
|
+
| Task with no failing test first | No proof the change was needed |
|
|
56
|
+
| Acceptance criteria written after coding | Confirmation bias, scope drift |
|
|
57
|
+
| Hidden dependency between "independent" tasks | Breaks the main branch on partial merge |
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Product Steering — <%= projectName %>
|
|
2
|
+
|
|
3
|
+
_Generated by arbiter. The "why" an agent needs so its technical choices serve the
|
|
4
|
+
product, not just the compiler. Fill these in; they decay fast — review on each
|
|
5
|
+
milestone._
|
|
6
|
+
|
|
7
|
+
## One-Line Description
|
|
8
|
+
|
|
9
|
+
<%= description %>
|
|
10
|
+
|
|
11
|
+
## Problem
|
|
12
|
+
|
|
13
|
+
What pain does <%= projectName %> remove? Who feels it today, and how do they cope
|
|
14
|
+
without this product?
|
|
15
|
+
|
|
16
|
+
_Replace with your problem statement._
|
|
17
|
+
|
|
18
|
+
## Users
|
|
19
|
+
|
|
20
|
+
| User type | Goal | Success looks like |
|
|
21
|
+
| --------- | ---- | ------------------ |
|
|
22
|
+
| _primary_ | _…_ | _…_ |
|
|
23
|
+
| _secondary_ | _…_ | _…_ |
|
|
24
|
+
|
|
25
|
+
## Value & Differentiators
|
|
26
|
+
|
|
27
|
+
Why this over the alternatives (including "do nothing")? List the 2–3 things that
|
|
28
|
+
must stay true for the product to be worth using.
|
|
29
|
+
|
|
30
|
+
- _…_
|
|
31
|
+
- _…_
|
|
32
|
+
|
|
33
|
+
## In Scope / Out of Scope
|
|
34
|
+
|
|
35
|
+
| In scope (now) | Out of scope (explicitly) |
|
|
36
|
+
| -------------- | ------------------------- |
|
|
37
|
+
| _…_ | _…_ |
|
|
38
|
+
|
|
39
|
+
## Non-Negotiables
|
|
40
|
+
|
|
41
|
+
Product-level constraints an agent must never trade away for convenience
|
|
42
|
+
(e.g. data privacy, latency budget, accessibility, regulatory commitments).
|
|
43
|
+
|
|
44
|
+
- _…_
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Structure Steering — <%= projectName %>
|
|
2
|
+
|
|
3
|
+
_Generated by arbiter. A steering doc is durable project context an AI agent reads
|
|
4
|
+
**before** touching code, so its choices match how this codebase is actually laid
|
|
5
|
+
out. Keep it short, current, and specific._
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
This document anchors **where things live and where they must not**. When an agent
|
|
10
|
+
proposes a change, it should locate the change against this map first.
|
|
11
|
+
|
|
12
|
+
## Directory Map
|
|
13
|
+
|
|
14
|
+
Replace the placeholders below with your real top-level layout:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
.
|
|
18
|
+
├── src/ # production code
|
|
19
|
+
├── __tests__/ # tests (mirror src/ structure)
|
|
20
|
+
├── docs/ # this directory — steering, specs, runbooks, ADRs
|
|
21
|
+
└── scripts/ # build / gate / automation
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Module Boundaries
|
|
25
|
+
|
|
26
|
+
Record the boundaries that the architecture gate enforces (ArchUnit / eslint
|
|
27
|
+
boundaries / import-linter, depending on stack). An agent must not cross these.
|
|
28
|
+
|
|
29
|
+
| Layer / Module | May depend on | Must NOT depend on |
|
|
30
|
+
| -------------- | ------------- | ------------------ |
|
|
31
|
+
| _domain_ | _nothing_ | _infra, web_ |
|
|
32
|
+
| _application_ | _domain_ | _web_ |
|
|
33
|
+
| _infra / web_ | _application_ | _other infra_ |
|
|
34
|
+
|
|
35
|
+
## Naming & Placement Conventions
|
|
36
|
+
|
|
37
|
+
- Tests live beside or mirror the unit under test.
|
|
38
|
+
- New files: run the refactor-first survey before adding one (does it already exist?).
|
|
39
|
+
- Generated files carry an arbiter marker — never hand-edit a generated artifact.
|
|
40
|
+
|
|
41
|
+
## Where to Look First
|
|
42
|
+
|
|
43
|
+
| If you are changing… | Start in… |
|
|
44
|
+
| -------------------- | --------- |
|
|
45
|
+
| business logic | `src/` (domain/application) |
|
|
46
|
+
| a gate or check | `scripts/` |
|
|
47
|
+
| project context | `docs/steering/` (this file) |
|
|
48
|
+
| a feature spec | `docs/specs/` |
|
|
49
|
+
| a bug | `docs/bugs/` + `.evidence/` |
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Tech Steering — <%= projectName %>
|
|
2
|
+
|
|
3
|
+
_Generated by arbiter. The technology baseline an agent must respect: language,
|
|
4
|
+
toolchain, and the commands that prove a change is sound._
|
|
5
|
+
|
|
6
|
+
## Stack
|
|
7
|
+
|
|
8
|
+
| Aspect | Value |
|
|
9
|
+
| ----------------- | ----- |
|
|
10
|
+
| Language | <%= language %> |
|
|
11
|
+
| Archetype | <%= archetype %> |
|
|
12
|
+
| Build tool | <%= buildTool %> |
|
|
13
|
+
| Governance level | <%= governanceLevel %> |
|
|
14
|
+
|
|
15
|
+
> Do not introduce a second language, framework, or build tool without an ADR
|
|
16
|
+
> under `docs/adr/`. The architecture gate and CI are wired to the stack above.
|
|
17
|
+
|
|
18
|
+
## Authoritative Commands
|
|
19
|
+
|
|
20
|
+
These are the only commands that count as evidence. An agent claiming "it works"
|
|
21
|
+
must show output from these, not a description.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Build
|
|
25
|
+
<%= buildCommand %>
|
|
26
|
+
|
|
27
|
+
# Test
|
|
28
|
+
<%= testCommand %>
|
|
29
|
+
|
|
30
|
+
# Lint
|
|
31
|
+
<%= lintCommand %>
|
|
32
|
+
|
|
33
|
+
# Format (check)
|
|
34
|
+
<%= formatCommand %>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Gate
|
|
38
|
+
|
|
39
|
+
The gate is the single source of truth for "green":
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
node scripts/check-all.mjs L1 # fast: lint + format + unit
|
|
43
|
+
node scripts/check-all.mjs L2 # full: L1 + coverage + integration
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
A change is not done until the gate passes. No `--no-verify`, no editing a gate
|
|
47
|
+
to make it pass.
|
|
48
|
+
|
|
49
|
+
## Constraints an Agent Must Honor
|
|
50
|
+
|
|
51
|
+
- Match existing patterns — read neighbouring code before writing.
|
|
52
|
+
- No new dependency without justification recorded in an ADR or the PR body.
|
|
53
|
+
- No suppression (lint-disable, ignore) without an inline reason and a task ID.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Commands Catalog
|
|
2
|
+
|
|
3
|
+
_Generated by arbiter for **<%= projectName %>**. Update `arbiter.json` to reflect changes._
|
|
4
|
+
|
|
5
|
+
## Development Commands
|
|
6
|
+
|
|
7
|
+
| Purpose | Command |
|
|
8
|
+
| ------- | ---------------------- |
|
|
9
|
+
| Build | `<%= buildCommand %>` |
|
|
10
|
+
| Test | `<%= testCommand %>` |
|
|
11
|
+
| Lint | `<%= lintCommand %>` |
|
|
12
|
+
| Format | `<%= formatCommand %>` |
|
|
13
|
+
|
|
14
|
+
## Gate Commands
|
|
15
|
+
|
|
16
|
+
| Purpose | Command |
|
|
17
|
+
| -------------- | ------------------------------- |
|
|
18
|
+
| L1 gate (fast) | `node scripts/check-all.mjs L1` |
|
|
19
|
+
| L2 gate (full) | `node scripts/check-all.mjs L2` |
|
|
20
|
+
|
|
21
|
+
> Run L1 before every commit, L2 before every push.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# E2E Constitution — <%= projectName %>
|
|
2
|
+
<!-- arbiter-managed: e2e-constitution (#1817, A4) -->
|
|
3
|
+
|
|
4
|
+
**Status:** RATIFIED
|
|
5
|
+
**Scope:** every Playwright (or equivalent) spec under `tests/e2e/` or `e2e/`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Why this exists
|
|
10
|
+
|
|
11
|
+
Every rule below was paid for in a real incident: a flaky-looking test that was
|
|
12
|
+
actually a real regression, a "green" suite that shipped a dead button, a smoke
|
|
13
|
+
run that passed against a dev server no user ever touches. Determinism is not a
|
|
14
|
+
style preference — it is what makes a passing suite mean something.
|
|
15
|
+
|
|
16
|
+
This file is **yours to edit**. Arbiter installs it once and never overwrites
|
|
17
|
+
your changes on re-run (see `docs/GOVERNANCE/FRONTEND_CONSTITUTION.md` for the
|
|
18
|
+
same customizable-install contract, if present in this repo).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## The 10 rules
|
|
23
|
+
|
|
24
|
+
1. **Selectors: testid-contract only.** No CSS class, XPath, or visible-text
|
|
25
|
+
selectors. A test that breaks because a label changed is not testing
|
|
26
|
+
behavior — it is testing copy.
|
|
27
|
+
|
|
28
|
+
2. **Fake clock, installed before the first navigation.** Every spec that
|
|
29
|
+
touches a date/time-dependent flow installs a fake clock *before* the first
|
|
30
|
+
`page.goto()`. Real wall-clock time in a spec is a race waiting to happen.
|
|
31
|
+
|
|
32
|
+
3. **Future-only dates.** Never hardcode a past date into a form or fixture
|
|
33
|
+
validated by the app under test. Use a dynamic (`now + N`) or fixed
|
|
34
|
+
far-future date. A past date silently rotting into "invalid" is a recurring
|
|
35
|
+
failure class, not a one-off.
|
|
36
|
+
|
|
37
|
+
4. **Dedicated seed per spec.** Each spec provisions and owns its data. No
|
|
38
|
+
spec reads or mutates a fixture shared with another spec — shared mutable
|
|
39
|
+
state is how "flaky" tests are born.
|
|
40
|
+
|
|
41
|
+
5. **Deterministic external providers.** Any third-party or network dependency
|
|
42
|
+
(payment, weather, geocoding, email, …) is stubbed with a fixed payload in
|
|
43
|
+
CI. No live external call ever gates a merge.
|
|
44
|
+
|
|
45
|
+
6. **No `sleep` / no `waitForTimeout`.** Wait on an explicit condition — a
|
|
46
|
+
network response, a DOM state, a testid becoming visible. A fixed sleep is
|
|
47
|
+
either too short (flaky) or too long (slow), never both right.
|
|
48
|
+
|
|
49
|
+
7. **Zero-retry `@smoke` tier (INV-130, #1817 A3).** The `@smoke` tier runs
|
|
50
|
+
with **zero** retries — `retryLadder({ tier: "smoke" })` force-truncates the
|
|
51
|
+
ladder to a single attempt, non-bypassably. Retries hide races; `@smoke`
|
|
52
|
+
exists specifically to catch them. Non-smoke tiers may still retry.
|
|
53
|
+
|
|
54
|
+
8. **Quarantine annotates, never suppresses (INV-130, #1817 A3).** A known-
|
|
55
|
+
flaky test may be quarantined — owner, linked issue, and a TTL — but it
|
|
56
|
+
still runs and still reports. An entry that is incomplete or past its TTL
|
|
57
|
+
fails closed (`scripts/check-e2e-quarantine.mjs`).
|
|
58
|
+
Quarantine is a spotlight, not a mute button.
|
|
59
|
+
|
|
60
|
+
9. **No skip without an issue and a TTL.** A bare `test.skip(...)` is a gate
|
|
61
|
+
violation. Every skip carries a linked issue and an expiry — an
|
|
62
|
+
unaccountable skip rots into a permanent blind spot no one remembers.
|
|
63
|
+
|
|
64
|
+
10. **Smoke runs against the built artifact.** The `@smoke` tier exercises the
|
|
65
|
+
actual production build, not a dev server. A dev-server-only green suite
|
|
66
|
+
can ship a build that is broken in ways the dev server never shows.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Enforcement pointers
|
|
71
|
+
|
|
72
|
+
- Rules 7–8 are mechanically enforced: `scripts/check-e2e-quarantine.mjs`
|
|
73
|
+
(Track-B, generated) and `DISC-e2e-quarantine`
|
|
74
|
+
(`src/conformance/dimensions.ts`, Track-A).
|
|
75
|
+
- Rules 1–6, 9–10 are process discipline — reviewed at PR time, not (yet)
|
|
76
|
+
mechanically gated. A future gate absorbing one of these into a script
|
|
77
|
+
should link back here, not duplicate the rationale.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# pytest-playwright conftest — #366 (CANON-02/03).
|
|
2
|
+
#
|
|
3
|
+
# E2E_BASE_URL overrides the default for CI / non-localhost targets.
|
|
4
|
+
# Pair with scripts/lib/ephemeral-server.mjs (#358): the runner brings up
|
|
5
|
+
# the server, then invokes `pytest tests/e2e`, which picks up these fixtures.
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
from playwright.sync_api import Page
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.fixture(scope="session")
|
|
14
|
+
def base_url() -> str:
|
|
15
|
+
return os.environ.get("E2E_BASE_URL", "http://localhost:8000")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@pytest.fixture
|
|
19
|
+
def page(page: Page) -> Page:
|
|
20
|
+
# Re-export the pytest-playwright `page` fixture so tests can request it
|
|
21
|
+
# without importing it from the plugin namespace directly.
|
|
22
|
+
return page
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# a11y axe-playwright-python wrapper — INV-61 (#1149, CANON-02).
|
|
2
|
+
#
|
|
3
|
+
# Threshold policy (mirrors run-axe.ts, deliberate — not negotiable without
|
|
4
|
+
# an INV revision):
|
|
5
|
+
# - HARD-raise on impact == 'critical'
|
|
6
|
+
# - HARD-raise on unclassified impact (None) — never silently pass
|
|
7
|
+
# - LOG without raise on serious / moderate / minor — captured as evidence
|
|
8
|
+
#
|
|
9
|
+
# Downstream projects may ratchet stricter (e.g. raise on 'serious') by
|
|
10
|
+
# extending or replacing this helper. They may NOT loosen it without recording
|
|
11
|
+
# a project-level exception that cites INV-61.
|
|
12
|
+
#
|
|
13
|
+
# Tag set: full WCAG 2.2 AA — wcag2a + wcag2aa + wcag21a + wcag21aa + wcag22aa.
|
|
14
|
+
# Covers: target-size (2.5.8), focus-appearance (2.4.11), accessible-auth (3.3.8).
|
|
15
|
+
# WCAG 2.2 AA is the 2026 baseline — do NOT drop to wcag2a+wcag2aa only.
|
|
16
|
+
#
|
|
17
|
+
# Minimum version: axe-playwright-python>=0.1.7 (bundles axe-core >=4.5.0, which
|
|
18
|
+
# introduced the wcag22aa tag). Older versions silently ignore wcag22aa and yield
|
|
19
|
+
# false-negative passes — pin the version in requirements.txt / pyproject.toml.
|
|
20
|
+
#
|
|
21
|
+
# Must use sync_playwright.Axe — pytest-playwright's `page` fixture is
|
|
22
|
+
# synchronous. Swapping to async_playwright.Axe without await produces a
|
|
23
|
+
# coroutine object instead of AxeResults and raises AttributeError.
|
|
24
|
+
|
|
25
|
+
import warnings
|
|
26
|
+
from typing import TYPE_CHECKING
|
|
27
|
+
|
|
28
|
+
from axe_playwright_python.sync_playwright import Axe
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from playwright.sync_api import Page
|
|
32
|
+
|
|
33
|
+
# Instantiate once — re-reading axe.min.js per-call is wasteful.
|
|
34
|
+
_AXE = Axe()
|
|
35
|
+
|
|
36
|
+
_A11Y_OPTIONS = {
|
|
37
|
+
"resultTypes": ["violations"],
|
|
38
|
+
"runOnly": {
|
|
39
|
+
"type": "tag",
|
|
40
|
+
"values": ["wcag2a", "wcag2aa", "wcag21a", "wcag21aa", "wcag22aa"],
|
|
41
|
+
},
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
_HARD_FAIL_IMPACTS = {"critical"}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def run_axe(page: "Page", label: str) -> None:
|
|
48
|
+
"""Run axe-core against the current page and enforce INV-61.
|
|
49
|
+
|
|
50
|
+
Raises on critical violations or unclassified (None) impact.
|
|
51
|
+
Logs serious / moderate / minor violations without raising.
|
|
52
|
+
"""
|
|
53
|
+
results = _AXE.run(page, options=_A11Y_OPTIONS)
|
|
54
|
+
response = results.response
|
|
55
|
+
if "violations" not in response:
|
|
56
|
+
raise AssertionError(
|
|
57
|
+
f"[a11y][{label}] axe response missing 'violations' key — "
|
|
58
|
+
"check axe-playwright-python version (>=0.1.7 required). "
|
|
59
|
+
f"Keys present: {list(response.keys())}"
|
|
60
|
+
)
|
|
61
|
+
violations = response["violations"]
|
|
62
|
+
|
|
63
|
+
hard_failures = []
|
|
64
|
+
unclassified = []
|
|
65
|
+
soft = []
|
|
66
|
+
|
|
67
|
+
for v in violations:
|
|
68
|
+
impact = v.get("impact")
|
|
69
|
+
if impact is None:
|
|
70
|
+
unclassified.append(v)
|
|
71
|
+
elif impact in _HARD_FAIL_IMPACTS:
|
|
72
|
+
hard_failures.append(v)
|
|
73
|
+
else:
|
|
74
|
+
soft.append(v)
|
|
75
|
+
|
|
76
|
+
for v in soft:
|
|
77
|
+
impact_label = v.get("impact", "?")
|
|
78
|
+
warnings.warn(
|
|
79
|
+
f"[a11y][{label}] {impact_label}: {v.get('id')} — {v.get('help')}",
|
|
80
|
+
stacklevel=2,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Merge both failure categories into one raise so all violations surface
|
|
84
|
+
# in a single error report (not just the first category encountered).
|
|
85
|
+
if hard_failures or unclassified:
|
|
86
|
+
parts = []
|
|
87
|
+
if hard_failures:
|
|
88
|
+
parts.append(
|
|
89
|
+
"critical: "
|
|
90
|
+
+ ", ".join(
|
|
91
|
+
f"{v.get('id')} ({len(v.get('nodes', []))} node(s))"
|
|
92
|
+
for v in hard_failures
|
|
93
|
+
)
|
|
94
|
+
)
|
|
95
|
+
if unclassified:
|
|
96
|
+
parts.append(
|
|
97
|
+
"unclassified: " + ", ".join(v.get("id", "?") for v in unclassified)
|
|
98
|
+
)
|
|
99
|
+
raise AssertionError(f"[a11y][{label}] INV-61: {'; '.join(parts)}")
|