codictator 0.0.0 → 0.1.3
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/LICENSE +9 -0
- package/README.md +5 -0
- package/dist/builtin-packs/core/fixtures/agent-assets-present/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/agent-assets-present/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-boundaries/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-boundaries/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-mapped/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-mapped/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-module-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-no-cycles/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-no-cycles/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-profile-declared/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-profile-declared/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-public-entry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/arch-public-entry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/branch-protection/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/branch-protection/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-registry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-registry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-rows-immutable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/bug-rows-immutable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-actions-pinned/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-actions-pinned/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-present/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-present/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-required-check/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ci-required-check/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/compiler-strict/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/compiler-strict/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/complexity/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/complexity/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-hard-band/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-hard-band/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-soft-band/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/context-soft-band/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/conventional-commit/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/conventional-commit/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/coverage-floor/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/coverage-floor/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/custom-pack-selftest/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/custom-pack-selftest/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dangerous-shell/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dangerous-shell/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dead-code/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dead-code/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-exact-pin/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-exact-pin/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-latest-stable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-latest-stable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-license/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-license/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-lockfile/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-lockfile/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-new-needs-reason/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-deprecated/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-deprecated/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-no-vulnerable/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-one-per-capability/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/dep-one-per-capability/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/diagnose-before-fix/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/diagnose-before-fix/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-breadth/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-breadth/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-density/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-density/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-links-valid/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-links-valid/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-corpus-counts/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-no-inline-changelog/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-one-level/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-one-level/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-placement/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-placement/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-router-leaf/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-router-leaf/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-single-owner/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-single-owner/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/doc-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/duplication/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/duplication/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/engine-version-match/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/engine-version-match/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-naming/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-naming/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/file-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/function-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/function-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/graph-before-scan/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/graph-before-scan/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/guardrail-manifest/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/guardrail-manifest/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-append-only/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-append-only/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry-complete/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/history-entry-complete/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/hooks-active/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/hooks-active/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/loop-breaker/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/loop-breaker/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/max-file-bytes/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/max-file-bytes/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/mcp-declared/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/mcp-declared/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-assertion-loss/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-assertion-loss/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-baseline-raise/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-baseline-raise/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-bypass/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-bypass/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-fixture-shrink/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-fixture-shrink/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-guard-removal/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-guard-removal/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-new-suppressions/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-new-suppressions/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secret-reads/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secret-reads/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secrets/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-secrets/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-skipped-tests/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-skipped-tests/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-speculative-abstraction/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-threshold-lowering/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/no-threshold-lowering/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/perf-budgets/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/perf-budgets/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/ratchet-touched-improves/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/read-dedupe/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/read-dedupe/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/red-before-green/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/red-before-green/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/regression-test-for-fix/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/regression-test-for-fix/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/remediation-step-size/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/remediation-step-size/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/repo-hygiene/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/repo-hygiene/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-gate/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-gate/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-round-cap/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/review-round-cap/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/session-tool-call-limit/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/session-tool-call-limit/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/spec-trace/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/spec-trace/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-command-intact/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-command-intact/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/test-kinds-by-scenario/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/waivers-valid/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/waivers-valid/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/workflow-gates/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/workflow-gates/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/write-confinement/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/write-confinement/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/writes-within-plan/passing/basic/case.json +10 -0
- package/dist/builtin-packs/core/fixtures/writes-within-plan/violating/basic/case.json +10 -0
- package/dist/builtin-packs/core/index.ts +8 -0
- package/dist/builtin-packs/core/pack.json +2057 -0
- package/dist/builtin-packs/dotnet/index.ts +47 -0
- package/dist/builtin-packs/python/extract.ts +245 -0
- package/dist/builtin-packs/python/fixtures/lint/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/lint/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/no-phantom-import/passing/basic/case.json +12 -0
- package/dist/builtin-packs/python/fixtures/no-phantom-import/violating/basic/case.json +11 -0
- package/dist/builtin-packs/python/fixtures/security-patterns/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/security-patterns/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/typecheck/passing/basic/case.json +10 -0
- package/dist/builtin-packs/python/fixtures/typecheck/violating/basic/case.json +10 -0
- package/dist/builtin-packs/python/index.ts +57 -0
- package/dist/builtin-packs/python/pack.json +116 -0
- package/dist/builtin-packs/typescript/extract-clauses.ts +153 -0
- package/dist/builtin-packs/typescript/extract-literals.ts +111 -0
- package/dist/builtin-packs/typescript/extract-words.ts +79 -0
- package/dist/builtin-packs/typescript/extract.ts +77 -0
- package/dist/builtin-packs/typescript/fixtures/lint/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/lint/passing/exported/case.json +8 -0
- package/dist/builtin-packs/typescript/fixtures/lint/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/passing/host-provided/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/no-phantom-import/violating/host-provided/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/security-patterns/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/security-patterns/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/typecheck/passing/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/fixtures/typecheck/violating/basic/case.json +10 -0
- package/dist/builtin-packs/typescript/index.ts +85 -0
- package/dist/builtin-packs/typescript/lex.ts +199 -0
- package/dist/builtin-packs/typescript/measures-exports.ts +173 -0
- package/dist/builtin-packs/typescript/measures-functions.ts +138 -0
- package/dist/builtin-packs/typescript/measures.ts +10 -0
- package/dist/builtin-packs/typescript/naming.ts +47 -0
- package/dist/builtin-packs/typescript/pack.json +169 -0
- package/dist/builtin-packs/typescript/patterns.ts +93 -0
- package/dist/builtin-packs/typescript/resolve.ts +224 -0
- package/dist/builtin-packs/typescript/strict.ts +177 -0
- package/dist/builtin-packs/typescript/titles.ts +184 -0
- package/dist/cli/baseline.d.ts +3 -0
- package/dist/cli/baseline.js +67 -0
- package/dist/cli/ci-bot-change.d.ts +3 -0
- package/dist/cli/ci-bot-change.js +54 -0
- package/dist/cli/ci-range.d.ts +18 -0
- package/dist/cli/ci-range.js +228 -0
- package/dist/cli/ci-summary.d.ts +3 -0
- package/dist/cli/ci-summary.js +45 -0
- package/dist/cli/ci.d.ts +4 -0
- package/dist/cli/ci.js +195 -0
- package/dist/cli/commands.d.ts +5 -0
- package/dist/cli/commands.js +39 -0
- package/dist/cli/deps.d.ts +3 -0
- package/dist/cli/deps.js +115 -0
- package/dist/cli/drift.d.ts +11 -0
- package/dist/cli/drift.js +91 -0
- package/dist/cli/evaluate.d.ts +20 -0
- package/dist/cli/evaluate.js +213 -0
- package/dist/cli/gate-scope.d.ts +11 -0
- package/dist/cli/gate-scope.js +93 -0
- package/dist/cli/git-hook.d.ts +3 -0
- package/dist/cli/git-hook.js +184 -0
- package/dist/cli/guardrail.d.ts +5 -0
- package/dist/cli/guardrail.js +190 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.js +198 -0
- package/dist/cli/init-plan.d.ts +23 -0
- package/dist/cli/init-plan.js +135 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.js +122 -0
- package/dist/cli/inspect-status.d.ts +8 -0
- package/dist/cli/inspect-status.js +164 -0
- package/dist/cli/inspect.d.ts +5 -0
- package/dist/cli/inspect.js +98 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +60 -0
- package/dist/cli/pack-adapters.d.ts +3 -0
- package/dist/cli/pack-adapters.js +81 -0
- package/dist/cli/packs.d.ts +6 -0
- package/dist/cli/packs.js +131 -0
- package/dist/cli/plan-launcher.d.ts +2 -0
- package/dist/cli/plan-launcher.js +272 -0
- package/dist/cli/plan.d.ts +25 -0
- package/dist/cli/plan.js +121 -0
- package/dist/cli/proofs-test.d.ts +3 -0
- package/dist/cli/proofs-test.js +77 -0
- package/dist/cli/proofs.d.ts +3 -0
- package/dist/cli/proofs.js +168 -0
- package/dist/cli/remediation.d.ts +3 -0
- package/dist/cli/remediation.js +107 -0
- package/dist/cli/report.d.ts +4 -0
- package/dist/cli/report.js +93 -0
- package/dist/cli/serve-eval.d.ts +2 -0
- package/dist/cli/serve-eval.js +165 -0
- package/dist/cli/serve-log.d.ts +2 -0
- package/dist/cli/serve-log.js +150 -0
- package/dist/cli/serve-methods.d.ts +2 -0
- package/dist/cli/serve-methods.js +181 -0
- package/dist/cli/serve-protocol.d.ts +35 -0
- package/dist/cli/serve-protocol.js +97 -0
- package/dist/cli/serve-run.d.ts +9 -0
- package/dist/cli/serve-run.js +135 -0
- package/dist/cli/serve-server.d.ts +5 -0
- package/dist/cli/serve-server.js +120 -0
- package/dist/cli/serve-shared.d.ts +34 -0
- package/dist/cli/serve-shared.js +20 -0
- package/dist/cli/serve-status.d.ts +2 -0
- package/dist/cli/serve-status.js +130 -0
- package/dist/cli/serve-transport.d.ts +2 -0
- package/dist/cli/serve-transport.js +114 -0
- package/dist/cli/shared.d.ts +35 -0
- package/dist/cli/shared.js +181 -0
- package/dist/cli/task-advance.d.ts +3 -0
- package/dist/cli/task-advance.js +144 -0
- package/dist/cli/task-phases.d.ts +3 -0
- package/dist/cli/task-phases.js +77 -0
- package/dist/cli/tasks.d.ts +12 -0
- package/dist/cli/tasks.js +176 -0
- package/dist/cli/transparency.d.ts +4 -0
- package/dist/cli/transparency.js +197 -0
- package/dist/cli/waivers.d.ts +3 -0
- package/dist/cli/waivers.js +195 -0
- package/dist/features/adapters/claude-code.d.ts +8 -0
- package/dist/features/adapters/claude-code.js +198 -0
- package/dist/features/adapters/claude-shaped.d.ts +4 -0
- package/dist/features/adapters/claude-shaped.js +174 -0
- package/dist/features/adapters/codex-cli.d.ts +8 -0
- package/dist/features/adapters/codex-cli.js +180 -0
- package/dist/features/adapters/contract.d.ts +104 -0
- package/dist/features/adapters/contract.js +17 -0
- package/dist/features/adapters/copilot-capabilities.d.ts +2 -0
- package/dist/features/adapters/copilot-capabilities.js +46 -0
- package/dist/features/adapters/copilot.d.ts +8 -0
- package/dist/features/adapters/copilot.js +200 -0
- package/dist/features/adapters/cursor.d.ts +8 -0
- package/dist/features/adapters/cursor.js +245 -0
- package/dist/features/adapters/custom-event.d.ts +3 -0
- package/dist/features/adapters/custom-event.js +180 -0
- package/dist/features/adapters/custom-load.d.ts +3 -0
- package/dist/features/adapters/custom-load.js +185 -0
- package/dist/features/adapters/custom-shape.d.ts +21 -0
- package/dist/features/adapters/custom-shape.js +87 -0
- package/dist/features/adapters/custom.d.ts +9 -0
- package/dist/features/adapters/custom.js +130 -0
- package/dist/features/adapters/effective-cache.d.ts +5 -0
- package/dist/features/adapters/effective-cache.js +45 -0
- package/dist/features/adapters/gemini-cli.d.ts +6 -0
- package/dist/features/adapters/gemini-cli.js +160 -0
- package/dist/features/adapters/gemini-tables.d.ts +7 -0
- package/dist/features/adapters/gemini-tables.js +104 -0
- package/dist/features/adapters/hook-dispatch.d.ts +7 -0
- package/dist/features/adapters/hook-dispatch.js +97 -0
- package/dist/features/adapters/hook-injection.d.ts +12 -0
- package/dist/features/adapters/hook-injection.js +75 -0
- package/dist/features/adapters/hook-load.d.ts +15 -0
- package/dist/features/adapters/hook-load.js +152 -0
- package/dist/features/adapters/hook-scope.d.ts +3 -0
- package/dist/features/adapters/hook-scope.js +54 -0
- package/dist/features/adapters/index.d.ts +22 -0
- package/dist/features/adapters/index.js +86 -0
- package/dist/features/adapters/muse-code.d.ts +8 -0
- package/dist/features/adapters/muse-code.js +223 -0
- package/dist/features/adapters/opencode-bridge.d.ts +1 -0
- package/dist/features/adapters/opencode-bridge.js +230 -0
- package/dist/features/adapters/opencode-capabilities.d.ts +2 -0
- package/dist/features/adapters/opencode-capabilities.js +47 -0
- package/dist/features/adapters/opencode-parse.d.ts +3 -0
- package/dist/features/adapters/opencode-parse.js +137 -0
- package/dist/features/adapters/opencode-tables.d.ts +5 -0
- package/dist/features/adapters/opencode-tables.js +63 -0
- package/dist/features/adapters/opencode.d.ts +10 -0
- package/dist/features/adapters/opencode.js +97 -0
- package/dist/features/adapters/runtime.d.ts +25 -0
- package/dist/features/adapters/runtime.js +148 -0
- package/dist/features/adapters/universal.d.ts +7 -0
- package/dist/features/adapters/universal.js +89 -0
- package/dist/features/arch/arch-profiles.d.ts +3 -0
- package/dist/features/arch/arch-profiles.js +5 -0
- package/dist/features/arch/checks.d.ts +25 -0
- package/dist/features/arch/checks.js +173 -0
- package/dist/features/arch/codictator-modules.d.ts +4 -0
- package/dist/features/arch/codictator-modules.js +180 -0
- package/dist/features/arch/cycle-walk.d.ts +1 -0
- package/dist/features/arch/cycle-walk.js +36 -0
- package/dist/features/arch/edge-checks.d.ts +13 -0
- package/dist/features/arch/edge-checks.js +186 -0
- package/dist/features/arch/graph.d.ts +32 -0
- package/dist/features/arch/graph.js +202 -0
- package/dist/features/arch/index.d.ts +29 -0
- package/dist/features/arch/index.js +16 -0
- package/dist/features/arch/layer-rules.d.ts +3 -0
- package/dist/features/arch/layer-rules.js +38 -0
- package/dist/features/arch/module-map-validation.d.ts +3 -0
- package/dist/features/arch/module-map-validation.js +30 -0
- package/dist/features/arch/module-mapping.d.ts +15 -0
- package/dist/features/arch/module-mapping.js +184 -0
- package/dist/features/arch/profiles.d.ts +4 -0
- package/dist/features/arch/profiles.js +8 -0
- package/dist/features/audit/append.d.ts +26 -0
- package/dist/features/audit/append.js +210 -0
- package/dist/features/audit/explain-table-tail.d.ts +2 -0
- package/dist/features/audit/explain-table-tail.js +29 -0
- package/dist/features/audit/explain-table.d.ts +8 -0
- package/dist/features/audit/explain-table.js +48 -0
- package/dist/features/audit/explain.d.ts +7 -0
- package/dist/features/audit/explain.js +87 -0
- package/dist/features/audit/index.d.ts +37 -0
- package/dist/features/audit/index.js +17 -0
- package/dist/features/audit/injection-event.d.ts +11 -0
- package/dist/features/audit/injection-event.js +17 -0
- package/dist/features/audit/read.d.ts +8 -0
- package/dist/features/audit/read.js +62 -0
- package/dist/features/audit/summarize.d.ts +1 -0
- package/dist/features/audit/summarize.js +41 -0
- package/dist/features/audit/surfaces.d.ts +47 -0
- package/dist/features/audit/surfaces.js +172 -0
- package/dist/features/audit/token-saver-evidence.d.ts +14 -0
- package/dist/features/audit/token-saver-evidence.js +85 -0
- package/dist/features/ci/changes.d.ts +28 -0
- package/dist/features/ci/changes.js +88 -0
- package/dist/features/ci/index.d.ts +22 -0
- package/dist/features/ci/index.js +75 -0
- package/dist/features/ci/protection-read.d.ts +3 -0
- package/dist/features/ci/protection-read.js +264 -0
- package/dist/features/ci/protection.d.ts +25 -0
- package/dist/features/ci/protection.js +101 -0
- package/dist/features/ci/workflow.d.ts +23 -0
- package/dist/features/ci/workflow.js +261 -0
- package/dist/features/config/human.d.ts +4 -0
- package/dist/features/config/human.js +31 -0
- package/dist/features/config/index.d.ts +37 -0
- package/dist/features/config/index.js +129 -0
- package/dist/features/config/pack-data.d.ts +18 -0
- package/dist/features/config/pack-data.js +116 -0
- package/dist/features/config/validate-sections.d.ts +6 -0
- package/dist/features/config/validate-sections.js +198 -0
- package/dist/features/config/validate-shared.d.ts +8 -0
- package/dist/features/config/validate-shared.js +69 -0
- package/dist/features/config/validate-tunables.d.ts +1 -0
- package/dist/features/config/validate-tunables.js +89 -0
- package/dist/features/config/validate.d.ts +2 -0
- package/dist/features/config/validate.js +57 -0
- package/dist/features/deps/bots.d.ts +5 -0
- package/dist/features/deps/bots.js +39 -0
- package/dist/features/deps/capabilities.d.ts +3 -0
- package/dist/features/deps/capabilities.js +91 -0
- package/dist/features/deps/check.d.ts +18 -0
- package/dist/features/deps/check.js +70 -0
- package/dist/features/deps/dependabot.d.ts +10 -0
- package/dist/features/deps/dependabot.js +154 -0
- package/dist/features/deps/eval.d.ts +41 -0
- package/dist/features/deps/eval.js +24 -0
- package/dist/features/deps/fields.d.ts +4 -0
- package/dist/features/deps/fields.js +18 -0
- package/dist/features/deps/index.d.ts +67 -0
- package/dist/features/deps/index.js +27 -0
- package/dist/features/deps/lockfile.d.ts +8 -0
- package/dist/features/deps/lockfile.js +87 -0
- package/dist/features/deps/npm.d.ts +22 -0
- package/dist/features/deps/npm.js +187 -0
- package/dist/features/deps/npmrc.d.ts +12 -0
- package/dist/features/deps/npmrc.js +50 -0
- package/dist/features/deps/nuget.d.ts +25 -0
- package/dist/features/deps/nuget.js +112 -0
- package/dist/features/deps/osv-ranges.d.ts +12 -0
- package/dist/features/deps/osv-ranges.js +83 -0
- package/dist/features/deps/osv.d.ts +16 -0
- package/dist/features/deps/osv.js +144 -0
- package/dist/features/deps/pypi-pyproject.d.ts +7 -0
- package/dist/features/deps/pypi-pyproject.js +118 -0
- package/dist/features/deps/pypi.d.ts +29 -0
- package/dist/features/deps/pypi.js +137 -0
- package/dist/features/deps/registry.d.ts +29 -0
- package/dist/features/deps/registry.js +158 -0
- package/dist/features/deps/renovate.d.ts +15 -0
- package/dist/features/deps/renovate.js +98 -0
- package/dist/features/deps/selection.d.ts +20 -0
- package/dist/features/deps/selection.js +150 -0
- package/dist/features/deps/snapshot-verdicts.d.ts +16 -0
- package/dist/features/deps/snapshot-verdicts.js +184 -0
- package/dist/features/deps/stable.d.ts +19 -0
- package/dist/features/deps/stable.js +131 -0
- package/dist/features/deps/step-size.d.ts +7 -0
- package/dist/features/deps/step-size.js +24 -0
- package/dist/features/deps/upgrade.d.ts +35 -0
- package/dist/features/deps/upgrade.js +124 -0
- package/dist/features/deps/verdicts.d.ts +21 -0
- package/dist/features/deps/verdicts.js +219 -0
- package/dist/features/engine/evaluate.d.ts +12 -0
- package/dist/features/engine/evaluate.js +170 -0
- package/dist/features/engine/index.d.ts +21 -0
- package/dist/features/engine/index.js +24 -0
- package/dist/features/engine/message.d.ts +3 -0
- package/dist/features/engine/message.js +69 -0
- package/dist/features/engine/ratchet.d.ts +1 -0
- package/dist/features/engine/ratchet.js +63 -0
- package/dist/features/engine/run-enforcer.d.ts +4 -0
- package/dist/features/engine/run-enforcer.js +82 -0
- package/dist/features/engine/waivers.d.ts +23 -0
- package/dist/features/engine/waivers.js +169 -0
- package/dist/features/generator/draft.d.ts +7 -0
- package/dist/features/generator/draft.js +148 -0
- package/dist/features/generator/index.d.ts +22 -0
- package/dist/features/generator/index.js +8 -0
- package/dist/features/generator/llm-draft.d.ts +3 -0
- package/dist/features/generator/llm-draft.js +93 -0
- package/dist/features/generator/prompt.d.ts +25 -0
- package/dist/features/generator/prompt.js +105 -0
- package/dist/features/generator/self-test.d.ts +12 -0
- package/dist/features/generator/self-test.js +65 -0
- package/dist/features/generator/templates.d.ts +26 -0
- package/dist/features/generator/templates.js +177 -0
- package/dist/features/integrity/drift.d.ts +19 -0
- package/dist/features/integrity/drift.js +168 -0
- package/dist/features/integrity/hooks.d.ts +19 -0
- package/dist/features/integrity/hooks.js +54 -0
- package/dist/features/integrity/index.d.ts +10 -0
- package/dist/features/integrity/index.js +14 -0
- package/dist/features/integrity/manifest.d.ts +15 -0
- package/dist/features/integrity/manifest.js +26 -0
- package/dist/features/integrity/self-protection.d.ts +12 -0
- package/dist/features/integrity/self-protection.js +144 -0
- package/dist/features/llm/attempt.d.ts +17 -0
- package/dist/features/llm/attempt.js +99 -0
- package/dist/features/llm/errors.d.ts +5 -0
- package/dist/features/llm/errors.js +18 -0
- package/dist/features/llm/index.d.ts +23 -0
- package/dist/features/llm/index.js +46 -0
- package/dist/features/llm/presets.d.ts +25 -0
- package/dist/features/llm/presets.js +159 -0
- package/dist/features/llm/wire.d.ts +17 -0
- package/dist/features/llm/wire.js +163 -0
- package/dist/features/packs/accept.d.ts +7 -0
- package/dist/features/packs/accept.js +73 -0
- package/dist/features/packs/enforcers/arch-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/arch-guards.js +193 -0
- package/dist/features/packs/enforcers/binding.d.ts +31 -0
- package/dist/features/packs/enforcers/binding.js +157 -0
- package/dist/features/packs/enforcers/ci-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/ci-guards.js +131 -0
- package/dist/features/packs/enforcers/code-health.d.ts +9 -0
- package/dist/features/packs/enforcers/code-health.js +180 -0
- package/dist/features/packs/enforcers/code.d.ts +5 -0
- package/dist/features/packs/enforcers/code.js +129 -0
- package/dist/features/packs/enforcers/command-forbid.d.ts +8 -0
- package/dist/features/packs/enforcers/command-forbid.js +61 -0
- package/dist/features/packs/enforcers/deps-guards.d.ts +15 -0
- package/dist/features/packs/enforcers/deps-guards.js +235 -0
- package/dist/features/packs/enforcers/deps-policy-guards.d.ts +9 -0
- package/dist/features/packs/enforcers/deps-policy-guards.js +135 -0
- package/dist/features/packs/enforcers/docs-guards-measures.d.ts +9 -0
- package/dist/features/packs/enforcers/docs-guards-measures.js +117 -0
- package/dist/features/packs/enforcers/docs-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/docs-guards.js +180 -0
- package/dist/features/packs/enforcers/engine-version-guards.d.ts +6 -0
- package/dist/features/packs/enforcers/engine-version-guards.js +42 -0
- package/dist/features/packs/enforcers/external-attribute.d.ts +18 -0
- package/dist/features/packs/enforcers/external-attribute.js +122 -0
- package/dist/features/packs/enforcers/external-bind.d.ts +4 -0
- package/dist/features/packs/enforcers/external-bind.js +206 -0
- package/dist/features/packs/enforcers/external-check.d.ts +7 -0
- package/dist/features/packs/enforcers/external-check.js +131 -0
- package/dist/features/packs/enforcers/external-output.d.ts +30 -0
- package/dist/features/packs/enforcers/external-output.js +144 -0
- package/dist/features/packs/enforcers/external-probe.d.ts +4 -0
- package/dist/features/packs/enforcers/external-probe.js +65 -0
- package/dist/features/packs/enforcers/external-runs.d.ts +33 -0
- package/dist/features/packs/enforcers/external-runs.js +162 -0
- package/dist/features/packs/enforcers/external-sarif.d.ts +3 -0
- package/dist/features/packs/enforcers/external-sarif.js +109 -0
- package/dist/features/packs/enforcers/external.d.ts +39 -0
- package/dist/features/packs/enforcers/external.js +11 -0
- package/dist/features/packs/enforcers/gate-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/gate-guards.js +117 -0
- package/dist/features/packs/enforcers/health-abstraction.d.ts +5 -0
- package/dist/features/packs/enforcers/health-abstraction.js +126 -0
- package/dist/features/packs/enforcers/health-duplication.d.ts +5 -0
- package/dist/features/packs/enforcers/health-duplication.js +197 -0
- package/dist/features/packs/enforcers/health-lex-imports.d.ts +5 -0
- package/dist/features/packs/enforcers/health-lex-imports.js +225 -0
- package/dist/features/packs/enforcers/health-lex-template.d.ts +10 -0
- package/dist/features/packs/enforcers/health-lex-template.js +67 -0
- package/dist/features/packs/enforcers/health-lex.d.ts +8 -0
- package/dist/features/packs/enforcers/health-lex.js +227 -0
- package/dist/features/packs/enforcers/health-markers.d.ts +3 -0
- package/dist/features/packs/enforcers/health-markers.js +31 -0
- package/dist/features/packs/enforcers/health-measures.d.ts +26 -0
- package/dist/features/packs/enforcers/health-measures.js +223 -0
- package/dist/features/packs/enforcers/health-refs.d.ts +5 -0
- package/dist/features/packs/enforcers/health-refs.js +76 -0
- package/dist/features/packs/enforcers/integrity-guards-repo.d.ts +6 -0
- package/dist/features/packs/enforcers/integrity-guards-repo.js +189 -0
- package/dist/features/packs/enforcers/integrity-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/integrity-guards.js +202 -0
- package/dist/features/packs/enforcers/jsonkey.d.ts +13 -0
- package/dist/features/packs/enforcers/jsonkey.js +95 -0
- package/dist/features/packs/enforcers/parametric.d.ts +7 -0
- package/dist/features/packs/enforcers/parametric.js +138 -0
- package/dist/features/packs/enforcers/pattern.d.ts +11 -0
- package/dist/features/packs/enforcers/pattern.js +88 -0
- package/dist/features/packs/enforcers/placement.d.ts +10 -0
- package/dist/features/packs/enforcers/placement.js +54 -0
- package/dist/features/packs/enforcers/py-checks.d.ts +7 -0
- package/dist/features/packs/enforcers/py-checks.js +131 -0
- package/dist/features/packs/enforcers/py-lex.d.ts +10 -0
- package/dist/features/packs/enforcers/py-lex.js +271 -0
- package/dist/features/packs/enforcers/py-phantom.d.ts +6 -0
- package/dist/features/packs/enforcers/py-phantom.js +163 -0
- package/dist/features/packs/enforcers/py-pins.d.ts +16 -0
- package/dist/features/packs/enforcers/py-pins.js +184 -0
- package/dist/features/packs/enforcers/py-security-patterns.d.ts +18 -0
- package/dist/features/packs/enforcers/py-security-patterns.js +70 -0
- package/dist/features/packs/enforcers/records-guards.d.ts +12 -0
- package/dist/features/packs/enforcers/records-guards.js +178 -0
- package/dist/features/packs/enforcers/remediation-guards.d.ts +6 -0
- package/dist/features/packs/enforcers/remediation-guards.js +42 -0
- package/dist/features/packs/enforcers/required.d.ts +10 -0
- package/dist/features/packs/enforcers/required.js +65 -0
- package/dist/features/packs/enforcers/secret-scan.d.ts +6 -0
- package/dist/features/packs/enforcers/secret-scan.js +173 -0
- package/dist/features/packs/enforcers/shell-analyse.d.ts +14 -0
- package/dist/features/packs/enforcers/shell-analyse.js +105 -0
- package/dist/features/packs/enforcers/sizes.d.ts +10 -0
- package/dist/features/packs/enforcers/sizes.js +82 -0
- package/dist/features/packs/enforcers/steering-guards.d.ts +11 -0
- package/dist/features/packs/enforcers/steering-guards.js +162 -0
- package/dist/features/packs/enforcers/testing-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/testing-guards.js +118 -0
- package/dist/features/packs/enforcers/ts-checks.d.ts +7 -0
- package/dist/features/packs/enforcers/ts-checks.js +147 -0
- package/dist/features/packs/enforcers/ts-phantom-host.d.ts +11 -0
- package/dist/features/packs/enforcers/ts-phantom-host.js +155 -0
- package/dist/features/packs/enforcers/ts-phantom.d.ts +6 -0
- package/dist/features/packs/enforcers/ts-phantom.js +117 -0
- package/dist/features/packs/enforcers/ts-security-patterns.d.ts +18 -0
- package/dist/features/packs/enforcers/ts-security-patterns.js +97 -0
- package/dist/features/packs/enforcers/workflow-guards.d.ts +10 -0
- package/dist/features/packs/enforcers/workflow-guards.js +117 -0
- package/dist/features/packs/enforcers/write-confine.d.ts +13 -0
- package/dist/features/packs/enforcers/write-confine.js +131 -0
- package/dist/features/packs/hashes.d.ts +6 -0
- package/dist/features/packs/hashes.js +84 -0
- package/dist/features/packs/index.d.ts +22 -0
- package/dist/features/packs/index.js +15 -0
- package/dist/features/packs/loader.d.ts +13 -0
- package/dist/features/packs/loader.js +205 -0
- package/dist/features/packs/manifest-decl.d.ts +13 -0
- package/dist/features/packs/manifest-decl.js +121 -0
- package/dist/features/packs/manifest.d.ts +7 -0
- package/dist/features/packs/manifest.js +95 -0
- package/dist/features/packs/params.d.ts +2 -0
- package/dist/features/packs/params.js +90 -0
- package/dist/features/packs/registry.d.ts +11 -0
- package/dist/features/packs/registry.js +136 -0
- package/dist/features/packs/selftest.d.ts +3 -0
- package/dist/features/packs/selftest.js +144 -0
- package/dist/features/records/bug-grammar.d.ts +17 -0
- package/dist/features/records/bug-grammar.js +128 -0
- package/dist/features/records/bug-registry.d.ts +9 -0
- package/dist/features/records/bug-registry.js +67 -0
- package/dist/features/records/bug-rows-immutable.d.ts +3 -0
- package/dist/features/records/bug-rows-immutable.js +52 -0
- package/dist/features/records/bugs.d.ts +2 -0
- package/dist/features/records/bugs.js +24 -0
- package/dist/features/records/docs-lines.d.ts +16 -0
- package/dist/features/records/docs-lines.js +36 -0
- package/dist/features/records/docs-prose.d.ts +14 -0
- package/dist/features/records/docs-prose.js +252 -0
- package/dist/features/records/docs-structure.d.ts +17 -0
- package/dist/features/records/docs-structure.js +223 -0
- package/dist/features/records/docs.d.ts +9 -0
- package/dist/features/records/docs.js +238 -0
- package/dist/features/records/history-checks.d.ts +6 -0
- package/dist/features/records/history-checks.js +94 -0
- package/dist/features/records/history-parse.d.ts +16 -0
- package/dist/features/records/history-parse.js +101 -0
- package/dist/features/records/history-scope.d.ts +5 -0
- package/dist/features/records/history-scope.js +86 -0
- package/dist/features/records/history.d.ts +3 -0
- package/dist/features/records/history.js +5 -0
- package/dist/features/records/index.d.ts +8 -0
- package/dist/features/records/index.js +11 -0
- package/dist/features/remediation/adoption.d.ts +32 -0
- package/dist/features/remediation/adoption.js +142 -0
- package/dist/features/remediation/index.d.ts +12 -0
- package/dist/features/remediation/index.js +21 -0
- package/dist/features/remediation/plan-chains.d.ts +3 -0
- package/dist/features/remediation/plan-chains.js +111 -0
- package/dist/features/remediation/plan-generate.d.ts +3 -0
- package/dist/features/remediation/plan-generate.js +129 -0
- package/dist/features/remediation/plan-kinds.d.ts +32 -0
- package/dist/features/remediation/plan-kinds.js +42 -0
- package/dist/features/remediation/plan-markers.d.ts +2 -0
- package/dist/features/remediation/plan-markers.js +155 -0
- package/dist/features/remediation/plan-merge.d.ts +6 -0
- package/dist/features/remediation/plan-merge.js +33 -0
- package/dist/features/remediation/plan.d.ts +4 -0
- package/dist/features/remediation/plan.js +7 -0
- package/dist/features/remediation/step-floor.d.ts +5 -0
- package/dist/features/remediation/step-floor.js +76 -0
- package/dist/features/remediation/step-gates.d.ts +18 -0
- package/dist/features/remediation/step-gates.js +77 -0
- package/dist/features/remediation/step-split.d.ts +12 -0
- package/dist/features/remediation/step-split.js +75 -0
- package/dist/features/remediation/steps.d.ts +3 -0
- package/dist/features/remediation/steps.js +6 -0
- package/dist/features/remediation/types.d.ts +37 -0
- package/dist/features/remediation/types.js +1 -0
- package/dist/features/security/index.d.ts +12 -0
- package/dist/features/security/index.js +142 -0
- package/dist/features/steering/agent-assets.d.ts +7 -0
- package/dist/features/steering/agent-assets.js +75 -0
- package/dist/features/steering/budgets.d.ts +20 -0
- package/dist/features/steering/budgets.js +86 -0
- package/dist/features/steering/checks.d.ts +7 -0
- package/dist/features/steering/checks.js +67 -0
- package/dist/features/steering/context-file.d.ts +11 -0
- package/dist/features/steering/context-file.js +107 -0
- package/dist/features/steering/graph-scan.d.ts +7 -0
- package/dist/features/steering/graph-scan.js +17 -0
- package/dist/features/steering/index.d.ts +30 -0
- package/dist/features/steering/index.js +45 -0
- package/dist/features/steering/injection.d.ts +23 -0
- package/dist/features/steering/injection.js +124 -0
- package/dist/features/steering/mcp.d.ts +2 -0
- package/dist/features/steering/mcp.js +18 -0
- package/dist/features/steering/precedence.d.ts +10 -0
- package/dist/features/steering/precedence.js +28 -0
- package/dist/features/steering/read-cache.d.ts +13 -0
- package/dist/features/steering/read-cache.js +51 -0
- package/dist/features/testing/base.d.ts +1 -0
- package/dist/features/testing/base.js +8 -0
- package/dist/features/testing/covers.d.ts +8 -0
- package/dist/features/testing/covers.js +50 -0
- package/dist/features/testing/evaluate.d.ts +19 -0
- package/dist/features/testing/evaluate.js +47 -0
- package/dist/features/testing/index.d.ts +10 -0
- package/dist/features/testing/index.js +13 -0
- package/dist/features/testing/integrity.d.ts +28 -0
- package/dist/features/testing/integrity.js +140 -0
- package/dist/features/testing/ledger.d.ts +11 -0
- package/dist/features/testing/ledger.js +51 -0
- package/dist/features/testing/proofs.d.ts +26 -0
- package/dist/features/testing/proofs.js +88 -0
- package/dist/features/testing/report.d.ts +6 -0
- package/dist/features/testing/report.js +16 -0
- package/dist/features/testing/scenarios.d.ts +34 -0
- package/dist/features/testing/scenarios.js +112 -0
- package/dist/features/testing/tap-parser.d.ts +9 -0
- package/dist/features/testing/tap-parser.js +96 -0
- package/dist/features/testing/trace.d.ts +23 -0
- package/dist/features/testing/trace.js +110 -0
- package/dist/features/workflow/index.d.ts +14 -0
- package/dist/features/workflow/index.js +19 -0
- package/dist/features/workflow/loop.d.ts +5 -0
- package/dist/features/workflow/loop.js +36 -0
- package/dist/features/workflow/phases.d.ts +10 -0
- package/dist/features/workflow/phases.js +184 -0
- package/dist/features/workflow/review.d.ts +25 -0
- package/dist/features/workflow/review.js +119 -0
- package/dist/features/workflow/tasks.d.ts +73 -0
- package/dist/features/workflow/tasks.js +80 -0
- package/dist/features/workflow/writes.d.ts +8 -0
- package/dist/features/workflow/writes.js +96 -0
- package/dist/kernel/clock.d.ts +4 -0
- package/dist/kernel/clock.js +5 -0
- package/dist/kernel/config-keys.d.ts +2 -0
- package/dist/kernel/config-keys.js +5 -0
- package/dist/kernel/config-toml-keys.d.ts +2 -0
- package/dist/kernel/config-toml-keys.js +237 -0
- package/dist/kernel/config-yaml-keys.d.ts +2 -0
- package/dist/kernel/config-yaml-keys.js +177 -0
- package/dist/kernel/contracts.d.ts +76 -0
- package/dist/kernel/contracts.js +9 -0
- package/dist/kernel/entry.d.ts +1 -0
- package/dist/kernel/entry.js +31 -0
- package/dist/kernel/env.d.ts +4 -0
- package/dist/kernel/env.js +5 -0
- package/dist/kernel/errors.d.ts +7 -0
- package/dist/kernel/errors.js +6 -0
- package/dist/kernel/fs-confine.d.ts +14 -0
- package/dist/kernel/fs-confine.js +129 -0
- package/dist/kernel/fs-errors.d.ts +8 -0
- package/dist/kernel/fs-errors.js +37 -0
- package/dist/kernel/fs.d.ts +28 -0
- package/dist/kernel/fs.js +245 -0
- package/dist/kernel/git.d.ts +16 -0
- package/dist/kernel/git.js +128 -0
- package/dist/kernel/glob.d.ts +1 -0
- package/dist/kernel/glob.js +178 -0
- package/dist/kernel/hash.d.ts +3 -0
- package/dist/kernel/hash.js +12 -0
- package/dist/kernel/host.d.ts +3 -0
- package/dist/kernel/host.js +48 -0
- package/dist/kernel/index.d.ts +115 -0
- package/dist/kernel/index.js +33 -0
- package/dist/kernel/json.d.ts +4 -0
- package/dist/kernel/json.js +68 -0
- package/dist/kernel/net-allow.d.ts +8 -0
- package/dist/kernel/net-allow.js +45 -0
- package/dist/kernel/net-fetch.d.ts +5 -0
- package/dist/kernel/net-fetch.js +135 -0
- package/dist/kernel/net.d.ts +10 -0
- package/dist/kernel/net.js +24 -0
- package/dist/kernel/path.d.ts +3 -0
- package/dist/kernel/path.js +40 -0
- package/dist/kernel/pattern.d.ts +2 -0
- package/dist/kernel/pattern.js +150 -0
- package/dist/kernel/proc.d.ts +6 -0
- package/dist/kernel/proc.js +207 -0
- package/dist/kernel/read-cache.d.ts +6 -0
- package/dist/kernel/read-cache.js +27 -0
- package/dist/kernel/redact.d.ts +1 -0
- package/dist/kernel/redact.js +206 -0
- package/dist/kernel/repo-root.d.ts +3 -0
- package/dist/kernel/repo-root.js +29 -0
- package/dist/kernel/result.d.ts +10 -0
- package/dist/kernel/result.js +6 -0
- package/dist/kernel/schema-helpers.d.ts +11 -0
- package/dist/kernel/schema-helpers.js +101 -0
- package/dist/kernel/schema.d.ts +2 -0
- package/dist/kernel/schema.js +203 -0
- package/dist/kernel/secret-paths.d.ts +3 -0
- package/dist/kernel/secret-paths.js +70 -0
- package/dist/kernel/shell-bypass.d.ts +4 -0
- package/dist/kernel/shell-bypass.js +151 -0
- package/dist/kernel/shell-cmd.d.ts +6 -0
- package/dist/kernel/shell-cmd.js +213 -0
- package/dist/kernel/shell-deny-cmd.d.ts +7 -0
- package/dist/kernel/shell-deny-cmd.js +35 -0
- package/dist/kernel/shell-deny-destroy.d.ts +7 -0
- package/dist/kernel/shell-deny-destroy.js +71 -0
- package/dist/kernel/shell-deny-escalate.d.ts +7 -0
- package/dist/kernel/shell-deny-escalate.js +96 -0
- package/dist/kernel/shell-deny-target.d.ts +4 -0
- package/dist/kernel/shell-deny-target.js +51 -0
- package/dist/kernel/shell-deny.d.ts +8 -0
- package/dist/kernel/shell-deny.js +171 -0
- package/dist/kernel/shell-scan.d.ts +3 -0
- package/dist/kernel/shell-scan.js +226 -0
- package/dist/kernel/shell-word.d.ts +15 -0
- package/dist/kernel/shell-word.js +216 -0
- package/dist/kernel/shell.d.ts +22 -0
- package/dist/kernel/shell.js +2 -0
- package/dist/kernel/stdin.d.ts +2 -0
- package/dist/kernel/stdin.js +59 -0
- package/dist/kernel/test-report.d.ts +7 -0
- package/dist/kernel/test-report.js +112 -0
- package/dist/kernel/version.d.ts +2 -0
- package/dist/kernel/version.js +46 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +19 -11
- package/schema/accepted.schema.json +20 -0
- package/schema/baseline.schema.json +17 -0
- package/schema/capability.schema.json +31 -0
- package/schema/cli/error.schema.json +15 -0
- package/schema/cli/explain.schema.json +19 -0
- package/schema/cli/report.schema.json +15 -0
- package/schema/cli/status.schema.json +51 -0
- package/schema/cli/verify.schema.json +15 -0
- package/schema/config.schema.json +43 -0
- package/schema/event-log.schema.json +52 -0
- package/schema/hook-decision.schema.json +13 -0
- package/schema/hook-event.schema.json +50 -0
- package/schema/manifest.schema.json +26 -0
- package/schema/pack-draft.schema.json +42 -0
- package/schema/pack.schema.json +70 -0
- package/schema/registry-snapshot.schema.json +41 -0
- package/schema/remediation-plan.schema.json +44 -0
- package/schema/review-findings.schema.json +25 -0
- package/schema/task-record.schema.json +49 -0
- package/schema/waivers.schema.json +29 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// SPEC §4.10.1: the SPEC trace. Every acceptance test carries a reference
|
|
2
|
+
// matching config.spec.refPattern; every reference resolves to a heading or
|
|
3
|
+
// an EC row; every code task lists references its declared tests cite. The
|
|
4
|
+
// spec index is caller-supplied data (the loader owns the SPEC files), so
|
|
5
|
+
// this module never reads the filesystem.
|
|
6
|
+
import { globMatch } from "../../kernel/index.js";
|
|
7
|
+
export const DEFAULT_REF_PATTERN = "\\[(§[\\d.]+(?: EC-\\d+)?)\\]";
|
|
8
|
+
function parseInner(raw) {
|
|
9
|
+
const match = /^§([\d.]+)(?: EC-(\d+))?$/.exec(raw);
|
|
10
|
+
if (match === null) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const section = match[1] ?? "";
|
|
14
|
+
const ecText = match[2];
|
|
15
|
+
return {
|
|
16
|
+
section,
|
|
17
|
+
ec: ecText === undefined ? undefined : Number.parseInt(ecText, 10),
|
|
18
|
+
raw,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// SPEC §4.10.1: config.spec.refPattern finds references in test titles.
|
|
22
|
+
export function parseSpecRefs(title, refPattern = DEFAULT_REF_PATTERN) {
|
|
23
|
+
const refs = [];
|
|
24
|
+
const pattern = new RegExp(refPattern, "g");
|
|
25
|
+
let match = pattern.exec(title);
|
|
26
|
+
while (match !== null) {
|
|
27
|
+
const parsed = parseInner(match[1] ?? "");
|
|
28
|
+
if (parsed !== undefined) {
|
|
29
|
+
refs.push(parsed);
|
|
30
|
+
}
|
|
31
|
+
match = pattern.exec(title);
|
|
32
|
+
}
|
|
33
|
+
return refs;
|
|
34
|
+
}
|
|
35
|
+
function nearestSections(wanted, known) {
|
|
36
|
+
const scored = [...known]
|
|
37
|
+
.map((section) => {
|
|
38
|
+
let shared = 0;
|
|
39
|
+
while (shared < wanted.length &&
|
|
40
|
+
shared < section.length &&
|
|
41
|
+
wanted[shared] === section[shared]) {
|
|
42
|
+
shared += 1;
|
|
43
|
+
}
|
|
44
|
+
return { section, shared };
|
|
45
|
+
})
|
|
46
|
+
.sort((a, b) => b.shared - a.shared || (a.section < b.section ? -1 : 1));
|
|
47
|
+
return scored
|
|
48
|
+
.slice(0, 3)
|
|
49
|
+
.map((entry) => `§${entry.section}`)
|
|
50
|
+
.join(", ");
|
|
51
|
+
}
|
|
52
|
+
function nearestEcs(wanted, known) {
|
|
53
|
+
return [...known]
|
|
54
|
+
.sort((a, b) => Math.abs(a - wanted) - Math.abs(b - wanted) || a - b)
|
|
55
|
+
.slice(0, 3)
|
|
56
|
+
.map((ec) => `EC-${ec}`)
|
|
57
|
+
.join(", ");
|
|
58
|
+
}
|
|
59
|
+
function traceFinding(path, message, remediation) {
|
|
60
|
+
return { ruleId: "core/spec-trace", path, message, remediation };
|
|
61
|
+
}
|
|
62
|
+
// SPEC §4.10.1 core/spec-trace: acceptance tests trace; references resolve;
|
|
63
|
+
// remediation lists the nearest existing ids.
|
|
64
|
+
export function checkSpecTrace(tests, spec, acceptanceGlobs = ["tests/acceptance/**"], refPattern = DEFAULT_REF_PATTERN) {
|
|
65
|
+
const findings = [];
|
|
66
|
+
for (const test of tests) {
|
|
67
|
+
if (!acceptanceGlobs.some((glob) => globMatch(glob, test.path))) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const refs = parseSpecRefs(test.title, refPattern);
|
|
71
|
+
if (refs.length === 0) {
|
|
72
|
+
findings.push(traceFinding(test.path, `acceptance test without a SPEC reference: ${test.title}`, `Give the test in ${test.path} a literal SPEC reference, e.g. [§4.10 EC-4].`));
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
for (const ref of refs) {
|
|
76
|
+
if (!spec.headings.has(ref.section)) {
|
|
77
|
+
findings.push(traceFinding(test.path, `SPEC reference to unknown section: ${ref.raw}`, `Point ${test.path} at an existing section. Nearest: ${nearestSections(ref.section, spec.headings)}.`));
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (ref.ec !== undefined) {
|
|
81
|
+
const rows = spec.ecRows.get(ref.section) ?? new Set();
|
|
82
|
+
if (!rows.has(ref.ec)) {
|
|
83
|
+
findings.push(traceFinding(test.path, `SPEC reference to unknown EC row: ${ref.raw}`, `Point ${test.path} at an existing EC row. Nearest: ${nearestEcs(ref.ec, rows)}.`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return findings;
|
|
89
|
+
}
|
|
90
|
+
// SPEC §4.10.1 planning gate: every code task lists spec references, each
|
|
91
|
+
// cited by at least one declared test; zero declared tests blocks.
|
|
92
|
+
export function checkPlanningGate(task) {
|
|
93
|
+
const findings = [];
|
|
94
|
+
if (task.type !== "code" && task.type !== "fix") {
|
|
95
|
+
return findings;
|
|
96
|
+
}
|
|
97
|
+
if (task.declaredTests.length === 0) {
|
|
98
|
+
findings.push(traceFinding("(task)", `code task declares zero tests`, "Declare at least one test for the code task before planning it."));
|
|
99
|
+
}
|
|
100
|
+
if (task.specRefs.length === 0) {
|
|
101
|
+
findings.push(traceFinding("(task)", `code task lists zero SPEC references`, "List at least one SPEC reference on the code task."));
|
|
102
|
+
}
|
|
103
|
+
for (const test of task.declaredTests) {
|
|
104
|
+
const cites = parseSpecRefs(test.title).some((ref) => task.specRefs.includes(ref.raw));
|
|
105
|
+
if (!cites) {
|
|
106
|
+
findings.push(traceFinding(test.path, `declared test cites none of the task references: ${test.title}`, `Cite one of ${task.specRefs.join(", ")} in ${test.path}.`));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return findings;
|
|
110
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CheckContext, Finding } from "../engine/index.ts";
|
|
2
|
+
import { type PhaseGateDetail } from "./phases.ts";
|
|
3
|
+
import { type ReviewCheckDetail, type ReviewFindingsFile } from "./review.ts";
|
|
4
|
+
import type { TaskRecord } from "./tasks.ts";
|
|
5
|
+
export { checkReviewCap, DEFAULT_MAX_REPEATS, escalationMessage, } from "./loop.ts";
|
|
6
|
+
export { isMandatoryPhase, MANDATORY_PHASES, validatePhaseOrder, } from "./phases.ts";
|
|
7
|
+
export type { ReviewFinding, ReviewSeverity } from "./review.ts";
|
|
8
|
+
export type { AgentRole, ChangeClass, ReviewRound, TaskEscalation, TaskGreenProof, TaskPhase, TaskProof, TaskRecord, TaskTestRef, TaskType, } from "./tasks.ts";
|
|
9
|
+
export { isTaskId, mergeTaskRecords, resolveActiveTask, roleForAsset, TASK_LOCK_PATH, taskIdFor, validateTaskRecord, } from "./tasks.ts";
|
|
10
|
+
export { checkWriteWithinPlan, classifyChange, type WriteCheckOptions, } from "./writes.ts";
|
|
11
|
+
export type { PhaseGateDetail, ReviewCheckDetail, ReviewFindingsFile };
|
|
12
|
+
export declare function checkPhaseGate(task: TaskRecord, phase: string, detail?: PhaseGateDetail): Promise<Array<Finding>>;
|
|
13
|
+
export declare function checkReview(ctx: CheckContext, findings: ReviewFindingsFile, detail?: ReviewCheckDetail): Promise<Array<Finding>>;
|
|
14
|
+
export declare function checkLoop(ctx: CheckContext, attempts: number, maxRepeats?: number): Promise<Array<Finding>>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { checkLoop as checkLoopImpl, DEFAULT_MAX_REPEATS } from "./loop.js";
|
|
2
|
+
import { checkPhaseGate as checkPhaseGateImpl, } from "./phases.js";
|
|
3
|
+
import { checkReview as checkReviewImpl, } from "./review.js";
|
|
4
|
+
export { checkReviewCap, DEFAULT_MAX_REPEATS, escalationMessage, } from "./loop.js";
|
|
5
|
+
export { isMandatoryPhase, MANDATORY_PHASES, validatePhaseOrder, } from "./phases.js";
|
|
6
|
+
export { isTaskId, mergeTaskRecords, resolveActiveTask, roleForAsset, TASK_LOCK_PATH, taskIdFor, validateTaskRecord, } from "./tasks.js";
|
|
7
|
+
export { checkWriteWithinPlan, classifyChange, } from "./writes.js";
|
|
8
|
+
// SPEC §4.12.2: phase gate evaluation for the task state machine.
|
|
9
|
+
export function checkPhaseGate(task, phase, detail) {
|
|
10
|
+
return checkPhaseGateImpl(task, phase, detail ?? {});
|
|
11
|
+
}
|
|
12
|
+
// SPEC §4.12.4: review gate verdicts.
|
|
13
|
+
export function checkReview(ctx, findings, detail) {
|
|
14
|
+
return checkReviewImpl(ctx, findings, detail ?? {});
|
|
15
|
+
}
|
|
16
|
+
// SPEC §4.12.5: loop breaker escalation.
|
|
17
|
+
export function checkLoop(ctx, attempts, maxRepeats) {
|
|
18
|
+
return checkLoopImpl(ctx, attempts, maxRepeats ?? DEFAULT_MAX_REPEATS);
|
|
19
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CheckContext, Finding } from "../engine/index.ts";
|
|
2
|
+
export declare const DEFAULT_MAX_REPEATS = 3;
|
|
3
|
+
export declare function escalationMessage(ruleId: string, attempts: number): string;
|
|
4
|
+
export declare function checkLoop(ctx: CheckContext, attempts: number, maxRepeats?: number): Promise<Array<Finding>>;
|
|
5
|
+
export declare function checkReviewCap(completedRounds: number, maxRounds?: number): Promise<Array<Finding>>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const DEFAULT_MAX_REPEATS = 3;
|
|
2
|
+
export function escalationMessage(ruleId, attempts) {
|
|
3
|
+
return (`escalation: ${ruleId} blocked ${String(attempts)} times with no intervening allow. ` +
|
|
4
|
+
"Stop and give the human a summary of the rule, the attempts and the conflict.");
|
|
5
|
+
}
|
|
6
|
+
// SPEC §4.12.7 EC-7: the fourth consecutive block escalates, and every
|
|
7
|
+
// tool call for the task stays blocked until a human runs task ack.
|
|
8
|
+
// SPEC §4.12.7 EC-8: the ack itself is human-only, so the shell guard
|
|
9
|
+
// blocks agents there; this check returns no finding for low counts.
|
|
10
|
+
export async function checkLoop(ctx, attempts, maxRepeats = DEFAULT_MAX_REPEATS) {
|
|
11
|
+
void ctx;
|
|
12
|
+
if (attempts <= maxRepeats) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
ruleId: "core/loop-breaker",
|
|
18
|
+
message: escalationMessage("core/loop-breaker", attempts),
|
|
19
|
+
remediation: "Run codictator task ack <id> --note ... to clear the escalation; task ack is human-only.",
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
// SPEC §4.12.4 cap: reaching the review-round cap escalates through the
|
|
24
|
+
// same path; the floor never moves, only the attempt stops.
|
|
25
|
+
export async function checkReviewCap(completedRounds, maxRounds = 3) {
|
|
26
|
+
if (completedRounds < maxRounds) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
return [
|
|
30
|
+
{
|
|
31
|
+
ruleId: "core/review-round-cap",
|
|
32
|
+
message: escalationMessage("core/review-round-cap", completedRounds),
|
|
33
|
+
remediation: "Run codictator task ack <id> --note ... to clear the escalation; task ack is human-only.",
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Finding } from "../engine/index.ts";
|
|
2
|
+
import type { TaskRecord } from "./tasks.ts";
|
|
3
|
+
export declare const MANDATORY_PHASES: ReadonlyArray<string>;
|
|
4
|
+
export declare function isMandatoryPhase(value: string): boolean;
|
|
5
|
+
export declare function validatePhaseOrder(order: ReadonlyArray<string>): boolean;
|
|
6
|
+
export interface PhaseGateDetail {
|
|
7
|
+
readonly openTasks?: ReadonlyArray<string>;
|
|
8
|
+
readonly phaseOrder?: ReadonlyArray<string>;
|
|
9
|
+
}
|
|
10
|
+
export declare function checkPhaseGate(task: TaskRecord, phase: string, detail?: PhaseGateDetail): Promise<Array<Finding>>;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// SPEC §4.12.2: the seven mandatory phases in order.
|
|
2
|
+
export const MANDATORY_PHASES = [
|
|
3
|
+
"discovery",
|
|
4
|
+
"planning",
|
|
5
|
+
"implementation",
|
|
6
|
+
"validation",
|
|
7
|
+
"review",
|
|
8
|
+
"record",
|
|
9
|
+
"integrate",
|
|
10
|
+
];
|
|
11
|
+
export function isMandatoryPhase(value) {
|
|
12
|
+
return MANDATORY_PHASES.includes(value);
|
|
13
|
+
}
|
|
14
|
+
function customPhasesOf(task) {
|
|
15
|
+
return task.customPhases ?? [];
|
|
16
|
+
}
|
|
17
|
+
function isKnownPhase(task, phase) {
|
|
18
|
+
return isMandatoryPhase(phase) || customPhasesOf(task).includes(phase);
|
|
19
|
+
}
|
|
20
|
+
// SPEC §4.12.2: the mandatory phases keep their relative order; removing
|
|
21
|
+
// or reordering one is CDX-E105, as is inserting a custom phase before
|
|
22
|
+
// discovery.
|
|
23
|
+
export function validatePhaseOrder(order) {
|
|
24
|
+
let cursor = -1;
|
|
25
|
+
for (const mandatory of MANDATORY_PHASES) {
|
|
26
|
+
const at = order.indexOf(mandatory);
|
|
27
|
+
if (at < 0 || at <= cursor) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
cursor = at;
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
function e105UnknownPhase(phase) {
|
|
35
|
+
return {
|
|
36
|
+
ruleId: "core/workflow-gates",
|
|
37
|
+
code: "CDX-E105",
|
|
38
|
+
message: `unknown phase "${phase}"; the seven mandatory phases keep their order`,
|
|
39
|
+
remediation: "Declare the phase in config.workflow.phases after discovery, then re-run the gate.",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function e105PhaseOrder() {
|
|
43
|
+
return {
|
|
44
|
+
ruleId: "core/workflow-gates",
|
|
45
|
+
code: "CDX-E105",
|
|
46
|
+
message: "mandatory workflow phases removed or reordered; custom phases insert after discovery only",
|
|
47
|
+
remediation: "Restore the seven mandatory phases in order with custom phases after discovery.",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function e606TwoTasks(open, task) {
|
|
51
|
+
const listed = open.length > 0 ? open.join(", ") : `${task.id} and a second opener`;
|
|
52
|
+
return {
|
|
53
|
+
ruleId: "core/workflow-gates",
|
|
54
|
+
code: "CDX-E606",
|
|
55
|
+
message: `more than one open task on branch "${task.branch}": ${listed}`,
|
|
56
|
+
remediation: "Run codictator task status, close or merge the extra task, then retry.",
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// SPEC §4.12.2 exit gates: the evidence each phase owes before the next
|
|
60
|
+
// phase opens. Implementation and integrate owe no exit evidence.
|
|
61
|
+
function missingDiscoveryEvidence(task) {
|
|
62
|
+
const missing = [];
|
|
63
|
+
if (task.spec.length === 0) {
|
|
64
|
+
missing.push("spec refs");
|
|
65
|
+
}
|
|
66
|
+
if (task.type === "fix" && (task.diagnosis ?? "").length === 0) {
|
|
67
|
+
missing.push("diagnosis");
|
|
68
|
+
}
|
|
69
|
+
return missing;
|
|
70
|
+
}
|
|
71
|
+
function missingPlanningEvidence(task) {
|
|
72
|
+
const missing = [];
|
|
73
|
+
if (task.files.allow.length === 0) {
|
|
74
|
+
missing.push("files.allow globs");
|
|
75
|
+
}
|
|
76
|
+
if (task.acceptanceCriteria.length === 0) {
|
|
77
|
+
missing.push("acceptance criteria");
|
|
78
|
+
}
|
|
79
|
+
if ((task.tests ?? []).length === 0) {
|
|
80
|
+
missing.push("declared tests");
|
|
81
|
+
}
|
|
82
|
+
if (task.redProof === undefined) {
|
|
83
|
+
missing.push("red proof");
|
|
84
|
+
}
|
|
85
|
+
return missing;
|
|
86
|
+
}
|
|
87
|
+
function missingRecordEvidence(task) {
|
|
88
|
+
const missing = [];
|
|
89
|
+
if (task.historyStaged !== true) {
|
|
90
|
+
missing.push("staged history entry");
|
|
91
|
+
}
|
|
92
|
+
if (task.type === "fix" && task.bugRowUpdated !== true) {
|
|
93
|
+
missing.push("bug row update");
|
|
94
|
+
}
|
|
95
|
+
return missing;
|
|
96
|
+
}
|
|
97
|
+
function missingExitEvidence(task, phase) {
|
|
98
|
+
switch (phase) {
|
|
99
|
+
case "discovery":
|
|
100
|
+
return missingDiscoveryEvidence(task);
|
|
101
|
+
case "planning":
|
|
102
|
+
return missingPlanningEvidence(task);
|
|
103
|
+
case "validation":
|
|
104
|
+
return task.greenProof === undefined ? ["green proof"] : [];
|
|
105
|
+
case "review":
|
|
106
|
+
return missingReviewEvidence(task);
|
|
107
|
+
case "record":
|
|
108
|
+
return missingRecordEvidence(task);
|
|
109
|
+
default:
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function missingReviewEvidence(task) {
|
|
114
|
+
const rounds = task.reviews ?? [];
|
|
115
|
+
if (rounds.length === 0) {
|
|
116
|
+
return ["completed review round"];
|
|
117
|
+
}
|
|
118
|
+
const last = rounds[rounds.length - 1];
|
|
119
|
+
if (last === undefined) {
|
|
120
|
+
return ["completed review round"];
|
|
121
|
+
}
|
|
122
|
+
const missing = [];
|
|
123
|
+
if (last.openBlockers > 0 || last.openMajors > 0) {
|
|
124
|
+
missing.push("zero open blocker/major findings");
|
|
125
|
+
}
|
|
126
|
+
const pending = (task.integrityExceptions ?? []).filter((id) => !last.acknowledgedExceptions.includes(id));
|
|
127
|
+
if (pending.length > 0) {
|
|
128
|
+
missing.push("acknowledged integrity exceptions");
|
|
129
|
+
}
|
|
130
|
+
return missing;
|
|
131
|
+
}
|
|
132
|
+
function e604MissingGate(task, missing) {
|
|
133
|
+
return {
|
|
134
|
+
ruleId: "core/workflow-gates",
|
|
135
|
+
code: "CDX-E604",
|
|
136
|
+
message: `phase gate evidence missing for ${task.phase}: ${missing.join(", ")}`,
|
|
137
|
+
remediation: `Run codictator task phase next to list the missing evidence for ${task.phase}.`,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// SPEC §4.12.2: advance only when the exit gate holds, else CDX-E604. A
|
|
141
|
+
// change that touches code files is reclassified as code and owes every
|
|
142
|
+
// gate; docs-only writes stay allowed but never waive code gates.
|
|
143
|
+
export async function checkPhaseGate(task, phase, detail = {}) {
|
|
144
|
+
if (!isKnownPhase(task, phase)) {
|
|
145
|
+
return [e105UnknownPhase(phase)];
|
|
146
|
+
}
|
|
147
|
+
if (detail.phaseOrder !== undefined &&
|
|
148
|
+
!validatePhaseOrder(detail.phaseOrder)) {
|
|
149
|
+
return [e105PhaseOrder()];
|
|
150
|
+
}
|
|
151
|
+
// SPEC §4.12.7 EC-10: re-entering planning while planning is already
|
|
152
|
+
// active means a second writer opened planning on this branch. The
|
|
153
|
+
// caller-provided open-task list decides whenever it is present.
|
|
154
|
+
const open = detail.openTasks;
|
|
155
|
+
if (open !== undefined && open.length >= 2) {
|
|
156
|
+
return [e606TwoTasks(open, task)];
|
|
157
|
+
}
|
|
158
|
+
if (open === undefined && task.phase === "planning" && phase === "planning") {
|
|
159
|
+
return [e606TwoTasks([], task)];
|
|
160
|
+
}
|
|
161
|
+
if (phase !== task.phase) {
|
|
162
|
+
const missing = missingExitEvidence(task, task.phase);
|
|
163
|
+
if (missing.length > 0) {
|
|
164
|
+
return [e604MissingGate(task, missing)];
|
|
165
|
+
}
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
// Same-phase evaluation: implementation, validation and record writes
|
|
169
|
+
// are judged by the L1 write gate, not here; review re-entry owes a
|
|
170
|
+
// completed round before it can pass.
|
|
171
|
+
if (task.phase === "review") {
|
|
172
|
+
const missing = missingReviewEvidence(task);
|
|
173
|
+
if (missing.length > 0) {
|
|
174
|
+
return [
|
|
175
|
+
{
|
|
176
|
+
ruleId: "core/review-gate",
|
|
177
|
+
message: `review gate unmet in phase review: ${missing.join(", ")}`,
|
|
178
|
+
remediation: "Run codictator review submit with a fresh reviewer session.",
|
|
179
|
+
},
|
|
180
|
+
];
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return [];
|
|
184
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CheckContext, Finding } from "../engine/index.ts";
|
|
2
|
+
export type ReviewSeverity = "blocker" | "major" | "minor" | "nit";
|
|
3
|
+
export interface ReviewFinding {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly severity: string;
|
|
6
|
+
readonly path: string;
|
|
7
|
+
readonly line?: number;
|
|
8
|
+
readonly message: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ReviewFindingsFile {
|
|
11
|
+
readonly version: 1;
|
|
12
|
+
readonly findings: ReadonlyArray<ReviewFinding>;
|
|
13
|
+
readonly tree?: string;
|
|
14
|
+
readonly reviewerSession?: string;
|
|
15
|
+
readonly identity?: "observed" | "declared";
|
|
16
|
+
readonly round?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ReviewCheckDetail {
|
|
19
|
+
readonly authorSessions?: ReadonlyArray<string>;
|
|
20
|
+
readonly reviewerSessions?: ReadonlyArray<string>;
|
|
21
|
+
readonly tree?: string;
|
|
22
|
+
readonly maxRounds?: number;
|
|
23
|
+
readonly completedRounds?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function checkReview(ctx: CheckContext, file: ReviewFindingsFile, detail?: ReviewCheckDetail): Promise<Array<Finding>>;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
const SEVERITIES = ["blocker", "major", "minor", "nit"];
|
|
2
|
+
function invalidFindingReason(finding) {
|
|
3
|
+
if (typeof finding.id !== "string" ||
|
|
4
|
+
typeof finding.severity !== "string" ||
|
|
5
|
+
typeof finding.path !== "string" ||
|
|
6
|
+
typeof finding.message !== "string" ||
|
|
7
|
+
finding.id.length === 0 ||
|
|
8
|
+
finding.message.length === 0) {
|
|
9
|
+
return "a finding misses id, severity, path or message";
|
|
10
|
+
}
|
|
11
|
+
if (!SEVERITIES.includes(finding.severity)) {
|
|
12
|
+
return `severity "${finding.severity}" is not blocker, major, minor or nit`;
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
function malformedReason(file) {
|
|
17
|
+
if (!Array.isArray(file.findings)) {
|
|
18
|
+
return "findings is not a list";
|
|
19
|
+
}
|
|
20
|
+
const seen = new Set();
|
|
21
|
+
for (const finding of file.findings) {
|
|
22
|
+
const reason = invalidFindingReason(finding);
|
|
23
|
+
if (reason !== undefined) {
|
|
24
|
+
return reason;
|
|
25
|
+
}
|
|
26
|
+
if (seen.has(finding.id)) {
|
|
27
|
+
return `duplicate finding id "${finding.id}"`;
|
|
28
|
+
}
|
|
29
|
+
seen.add(finding.id);
|
|
30
|
+
}
|
|
31
|
+
// SPEC §4.12.4 Bind/Submit: a submittable round binds the staged tree
|
|
32
|
+
// and the reviewer session. An empty findings list is a pass only once
|
|
33
|
+
// bound; without either the round cannot be recorded.
|
|
34
|
+
if (file.tree === undefined || file.reviewerSession === undefined) {
|
|
35
|
+
return "the round binds no staged tree or reviewer session";
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
// SPEC §4.12.4: review submit refuses a reviewer from the author sessions
|
|
40
|
+
// or from any earlier round (CDX-E605). Identity comes from the recorded
|
|
41
|
+
// tool event; without an adapter the round is marked declared.
|
|
42
|
+
function freshnessRefusal(file, detail) {
|
|
43
|
+
const reviewer = file.reviewerSession;
|
|
44
|
+
if (reviewer === undefined) {
|
|
45
|
+
return {
|
|
46
|
+
ruleId: "core/review-gate",
|
|
47
|
+
code: "CDX-E605",
|
|
48
|
+
message: "reviewer session unknown; reviewer freshness cannot be proven",
|
|
49
|
+
remediation: "Re-submit with --session from a fresh session that wrote no task file.",
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const authors = detail.authorSessions ?? [];
|
|
53
|
+
const earlier = detail.reviewerSessions ?? [];
|
|
54
|
+
if (authors.includes(reviewer) || earlier.includes(reviewer)) {
|
|
55
|
+
return {
|
|
56
|
+
ruleId: "core/review-gate",
|
|
57
|
+
code: "CDX-E605",
|
|
58
|
+
message: `reviewer session "${reviewer}" is not fresh`,
|
|
59
|
+
remediation: "Re-submit from a fresh session that wrote no task file and ran no earlier round.",
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
// SPEC §4.12.4 gate: last round tree equals staged, zero open
|
|
65
|
+
// blocker/major, exceptions acknowledged, rounds under the cap.
|
|
66
|
+
export async function checkReview(ctx, file, detail = {}) {
|
|
67
|
+
const findings = [];
|
|
68
|
+
const malformed = malformedReason(file);
|
|
69
|
+
if (malformed !== undefined) {
|
|
70
|
+
findings.push({
|
|
71
|
+
ruleId: "core/review-gate",
|
|
72
|
+
code: "CDX-E607",
|
|
73
|
+
message: `review findings file invalid: ${malformed}; the round is not recorded`,
|
|
74
|
+
remediation: "Submit findings as { id, severity, path, line?, message } bound to the staged tree and reviewer session.",
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const refusal = freshnessRefusal(file, detail);
|
|
78
|
+
if (refusal !== undefined) {
|
|
79
|
+
findings.push(refusal);
|
|
80
|
+
}
|
|
81
|
+
const openBlockers = Array.isArray(file.findings)
|
|
82
|
+
? file.findings.filter((entry) => entry.severity === "blocker" || entry.severity === "major")
|
|
83
|
+
: [];
|
|
84
|
+
if (openBlockers.length > 0 && malformed === undefined) {
|
|
85
|
+
const first = openBlockers[0];
|
|
86
|
+
const location = first?.path === undefined
|
|
87
|
+
? {}
|
|
88
|
+
: {
|
|
89
|
+
path: first.path,
|
|
90
|
+
...(first.line === undefined ? {} : { line: first.line }),
|
|
91
|
+
};
|
|
92
|
+
findings.push({
|
|
93
|
+
ruleId: "core/review-gate",
|
|
94
|
+
...location,
|
|
95
|
+
message: `${String(openBlockers.length)} open blocker/major findings; only a code change starts a new round`,
|
|
96
|
+
remediation: "Fix the blocker or major finding with a code change, then submit a new round.",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (detail.tree !== undefined &&
|
|
100
|
+
file.tree !== undefined &&
|
|
101
|
+
detail.tree !== file.tree) {
|
|
102
|
+
findings.push({
|
|
103
|
+
ruleId: "core/review-gate",
|
|
104
|
+
message: "stale review: the index tree changed after the round was submitted",
|
|
105
|
+
remediation: "Submit a new review round against the current staged tree.",
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const maxRounds = detail.maxRounds ?? 3;
|
|
109
|
+
const completed = detail.completedRounds ?? 0;
|
|
110
|
+
if (completed >= maxRounds) {
|
|
111
|
+
findings.push({
|
|
112
|
+
ruleId: "core/review-round-cap",
|
|
113
|
+
message: `review round cap reached (${String(completed)} of ${String(maxRounds)}); escalation recorded`,
|
|
114
|
+
remediation: "Stop and give a human the summary; run codictator task ack --note ... (human-only) to clear it.",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
void ctx;
|
|
118
|
+
return findings;
|
|
119
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export type TaskType = "feature" | "fix" | "refactor" | "docs" | "deps" | "chore";
|
|
2
|
+
export type ChangeClass = "code" | "docs" | "refactor" | "deps" | "chore" | "guardrail";
|
|
3
|
+
export type AgentRole = "planner" | "implementer" | "reviewer" | "qa";
|
|
4
|
+
export interface TaskPhase {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly enteredAt: string;
|
|
7
|
+
readonly evidence: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TaskTestRef {
|
|
10
|
+
readonly path: string;
|
|
11
|
+
readonly title: string;
|
|
12
|
+
readonly kind: string;
|
|
13
|
+
}
|
|
14
|
+
export interface TaskProof {
|
|
15
|
+
readonly commit: string;
|
|
16
|
+
readonly tree: string;
|
|
17
|
+
readonly failing: ReadonlyArray<string>;
|
|
18
|
+
readonly at: string;
|
|
19
|
+
}
|
|
20
|
+
export interface TaskGreenProof {
|
|
21
|
+
readonly at: string;
|
|
22
|
+
readonly tree: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ReviewRound {
|
|
25
|
+
readonly round: number;
|
|
26
|
+
readonly tree: string;
|
|
27
|
+
readonly reviewerSession: string;
|
|
28
|
+
readonly identity: "observed" | "declared";
|
|
29
|
+
readonly openBlockers: number;
|
|
30
|
+
readonly openMajors: number;
|
|
31
|
+
readonly acknowledgedExceptions: ReadonlyArray<string>;
|
|
32
|
+
readonly at: string;
|
|
33
|
+
}
|
|
34
|
+
export interface TaskEscalation {
|
|
35
|
+
readonly at: string;
|
|
36
|
+
readonly ruleId: string;
|
|
37
|
+
readonly attempts: number;
|
|
38
|
+
readonly ackedBy?: string;
|
|
39
|
+
readonly note?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface TaskRecord {
|
|
42
|
+
readonly version: 1;
|
|
43
|
+
readonly id: string;
|
|
44
|
+
readonly type: string;
|
|
45
|
+
readonly title: string;
|
|
46
|
+
readonly branch: string;
|
|
47
|
+
readonly phase: string;
|
|
48
|
+
readonly phases: ReadonlyArray<TaskPhase>;
|
|
49
|
+
readonly spec: ReadonlyArray<string>;
|
|
50
|
+
readonly acceptanceCriteria: ReadonlyArray<string>;
|
|
51
|
+
readonly files: {
|
|
52
|
+
readonly allow: ReadonlyArray<string>;
|
|
53
|
+
};
|
|
54
|
+
readonly customPhases?: ReadonlyArray<string>;
|
|
55
|
+
readonly tests?: ReadonlyArray<TaskTestRef>;
|
|
56
|
+
readonly diagnosis?: string;
|
|
57
|
+
readonly redProof?: TaskProof;
|
|
58
|
+
readonly greenProof?: TaskGreenProof;
|
|
59
|
+
readonly authorSessions?: ReadonlyArray<string>;
|
|
60
|
+
readonly roles?: Readonly<Record<string, AgentRole>>;
|
|
61
|
+
readonly reviews?: ReadonlyArray<ReviewRound>;
|
|
62
|
+
readonly integrityExceptions?: ReadonlyArray<string>;
|
|
63
|
+
readonly historyStaged?: boolean;
|
|
64
|
+
readonly bugRowUpdated?: boolean;
|
|
65
|
+
readonly escalations?: ReadonlyArray<TaskEscalation>;
|
|
66
|
+
}
|
|
67
|
+
export declare function isTaskId(value: string): boolean;
|
|
68
|
+
export declare function taskIdFor(sequence: number): string;
|
|
69
|
+
export declare function resolveActiveTask(tasks: ReadonlyArray<TaskRecord>, branch: string): TaskRecord | undefined;
|
|
70
|
+
export declare const TASK_LOCK_PATH = ".codictator/state/task.lock";
|
|
71
|
+
export declare function roleForAsset(asset: string): AgentRole | undefined;
|
|
72
|
+
export declare function mergeTaskRecords(base: TaskRecord, head: TaskRecord, phaseOrder: ReadonlyArray<string>, evidenceOk?: (phase: string) => boolean): TaskRecord;
|
|
73
|
+
export declare function validateTaskRecord(task: TaskRecord): Array<string>;
|