@dommaker/harness 1.3.0 → 1.4.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 +8 -0
- package/README.md +0 -2
- package/bin/harness.js +86 -32
- package/dist/cli/command-contract.d.ts +83 -0
- package/dist/cli/command-contract.d.ts.map +1 -0
- package/dist/cli/command-contract.js +66 -0
- package/dist/cli/command-contract.js.map +1 -0
- package/dist/cli/commands/acceptance.d.ts +3 -2
- package/dist/cli/commands/acceptance.d.ts.map +1 -1
- package/dist/cli/commands/acceptance.js +28 -24
- package/dist/cli/commands/acceptance.js.map +1 -1
- package/dist/cli/commands/analyze-sessions.d.ts +2 -1
- package/dist/cli/commands/analyze-sessions.d.ts.map +1 -1
- package/dist/cli/commands/analyze-sessions.js +25 -24
- package/dist/cli/commands/analyze-sessions.js.map +1 -1
- package/dist/cli/commands/check.d.ts +14 -2
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +76 -61
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/command.d.ts +5 -1
- package/dist/cli/commands/command.d.ts.map +1 -1
- package/dist/cli/commands/command.js +26 -17
- package/dist/cli/commands/command.js.map +1 -1
- package/dist/cli/commands/constraints-report.d.ts +2 -1
- package/dist/cli/commands/constraints-report.d.ts.map +1 -1
- package/dist/cli/commands/constraints-report.js +37 -33
- package/dist/cli/commands/constraints-report.js.map +1 -1
- package/dist/cli/commands/constraints-retire.d.ts +6 -5
- package/dist/cli/commands/constraints-retire.d.ts.map +1 -1
- package/dist/cli/commands/constraints-retire.js +50 -52
- package/dist/cli/commands/constraints-retire.js.map +1 -1
- package/dist/cli/commands/constraints.d.ts +2 -1
- package/dist/cli/commands/constraints.d.ts.map +1 -1
- package/dist/cli/commands/constraints.js +10 -27
- package/dist/cli/commands/constraints.js.map +1 -1
- package/dist/cli/commands/contract.d.ts +3 -2
- package/dist/cli/commands/contract.d.ts.map +1 -1
- package/dist/cli/commands/contract.js +45 -42
- package/dist/cli/commands/contract.js.map +1 -1
- package/dist/cli/commands/definitions.d.ts +11 -11
- package/dist/cli/commands/definitions.d.ts.map +1 -1
- package/dist/cli/commands/definitions.js +29 -214
- package/dist/cli/commands/definitions.js.map +1 -1
- package/dist/cli/commands/failure.d.ts +5 -4
- package/dist/cli/commands/failure.d.ts.map +1 -1
- package/dist/cli/commands/failure.js +31 -25
- package/dist/cli/commands/failure.js.map +1 -1
- package/dist/cli/commands/init.d.ts +7 -5
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +147 -211
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/knowledge.d.ts +21 -15
- package/dist/cli/commands/knowledge.d.ts.map +1 -1
- package/dist/cli/commands/knowledge.js +214 -199
- package/dist/cli/commands/knowledge.js.map +1 -1
- package/dist/cli/commands/passes-gate.d.ts +8 -2
- package/dist/cli/commands/passes-gate.d.ts.map +1 -1
- package/dist/cli/commands/passes-gate.js +44 -66
- package/dist/cli/commands/passes-gate.js.map +1 -1
- package/dist/cli/commands/performance.d.ts +2 -1
- package/dist/cli/commands/performance.d.ts.map +1 -1
- package/dist/cli/commands/performance.js +20 -18
- package/dist/cli/commands/performance.js.map +1 -1
- package/dist/cli/commands/posteval-plan.d.ts +5 -1
- package/dist/cli/commands/posteval-plan.d.ts.map +1 -1
- package/dist/cli/commands/posteval-plan.js +26 -15
- package/dist/cli/commands/posteval-plan.js.map +1 -1
- package/dist/cli/commands/release.d.ts +6 -1
- package/dist/cli/commands/release.d.ts.map +1 -1
- package/dist/cli/commands/release.js +69 -59
- package/dist/cli/commands/release.js.map +1 -1
- package/dist/cli/commands/report.d.ts +2 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +9 -5
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/review.d.ts +3 -2
- package/dist/cli/commands/review.d.ts.map +1 -1
- package/dist/cli/commands/review.js +33 -29
- package/dist/cli/commands/review.js.map +1 -1
- package/dist/cli/commands/sdd.d.ts +2 -1
- package/dist/cli/commands/sdd.d.ts.map +1 -1
- package/dist/cli/commands/sdd.js +7 -5
- package/dist/cli/commands/sdd.js.map +1 -1
- package/dist/cli/commands/security.d.ts +3 -2
- package/dist/cli/commands/security.d.ts.map +1 -1
- package/dist/cli/commands/security.js +29 -26
- package/dist/cli/commands/security.js.map +1 -1
- package/dist/cli/commands/spec-baseline-check.d.ts +2 -1
- package/dist/cli/commands/spec-baseline-check.d.ts.map +1 -1
- package/dist/cli/commands/spec-baseline-check.js +15 -11
- package/dist/cli/commands/spec-baseline-check.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +7 -2
- package/dist/cli/commands/spec.d.ts.map +1 -1
- package/dist/cli/commands/spec.js +61 -51
- package/dist/cli/commands/spec.js.map +1 -1
- package/dist/cli/commands/status.d.ts +2 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +57 -53
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/sync-docs/agents-syncer.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/agents-syncer.js +5 -2
- package/dist/cli/commands/sync-docs/agents-syncer.js.map +1 -1
- package/dist/cli/commands/sync-docs/context-syncer.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/context-syncer.js +3 -2
- package/dist/cli/commands/sync-docs/context-syncer.js.map +1 -1
- package/dist/cli/commands/sync-docs/index.d.ts +2 -1
- package/dist/cli/commands/sync-docs/index.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/index.js +68 -88
- package/dist/cli/commands/sync-docs/index.js.map +1 -1
- package/dist/cli/commands/sync-docs/project-reader.d.ts +6 -1
- package/dist/cli/commands/sync-docs/project-reader.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/project-reader.js +14 -16
- package/dist/cli/commands/sync-docs/project-reader.js.map +1 -1
- package/dist/cli/commands/update-user-model.d.ts +2 -1
- package/dist/cli/commands/update-user-model.d.ts.map +1 -1
- package/dist/cli/commands/update-user-model.js +31 -45
- package/dist/cli/commands/update-user-model.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +4 -3
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +28 -26
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/session-mining/transcript.d.ts +7 -1
- package/dist/cli/session-mining/transcript.d.ts.map +1 -1
- package/dist/cli/session-mining/transcript.js +21 -14
- package/dist/cli/session-mining/transcript.js.map +1 -1
- package/dist/context/session-manager.d.ts.map +1 -1
- package/dist/context/session-manager.js +19 -32
- package/dist/context/session-manager.js.map +1 -1
- package/dist/core/constraints/agent-prompt-renderer.d.ts.map +1 -1
- package/dist/core/constraints/agent-prompt-renderer.js +1 -4
- package/dist/core/constraints/agent-prompt-renderer.js.map +1 -1
- package/dist/core/constraints/capabilities-parser.d.ts +24 -7
- package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
- package/dist/core/constraints/capabilities-parser.js +32 -28
- package/dist/core/constraints/capabilities-parser.js.map +1 -1
- package/dist/core/constraints/capabilities-reconcile.d.ts +67 -0
- package/dist/core/constraints/capabilities-reconcile.d.ts.map +1 -0
- package/dist/core/constraints/capabilities-reconcile.js +105 -0
- package/dist/core/constraints/capabilities-reconcile.js.map +1 -0
- package/dist/core/constraints/checker.d.ts +21 -43
- package/dist/core/constraints/checker.d.ts.map +1 -1
- package/dist/core/constraints/checker.js +64 -115
- package/dist/core/constraints/checker.js.map +1 -1
- package/dist/core/constraints/checkers/capability-sync.d.ts +4 -3
- package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -1
- package/dist/core/constraints/checkers/capability-sync.js +29 -69
- package/dist/core/constraints/checkers/capability-sync.js.map +1 -1
- package/dist/core/constraints/checkers/context-doc-sync.d.ts +4 -2
- package/dist/core/constraints/checkers/context-doc-sync.d.ts.map +1 -1
- package/dist/core/constraints/checkers/context-doc-sync.js +13 -22
- package/dist/core/constraints/checkers/context-doc-sync.js.map +1 -1
- package/dist/core/constraints/checkers/docs-freshness.d.ts.map +1 -1
- package/dist/core/constraints/checkers/docs-freshness.js +37 -63
- package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
- package/dist/core/constraints/checkers/governance-presence.d.ts +2 -2
- package/dist/core/constraints/checkers/governance-presence.d.ts.map +1 -1
- package/dist/core/constraints/checkers/governance-presence.js +7 -28
- package/dist/core/constraints/checkers/governance-presence.js.map +1 -1
- package/dist/core/constraints/checkers/no-test-simplification.d.ts.map +1 -1
- package/dist/core/constraints/checkers/no-test-simplification.js +4 -3
- package/dist/core/constraints/checkers/no-test-simplification.js.map +1 -1
- package/dist/core/constraints/checkers/types.d.ts +2 -2
- package/dist/core/constraints/context-builder.d.ts +15 -14
- package/dist/core/constraints/context-builder.d.ts.map +1 -1
- package/dist/core/constraints/context-builder.js +32 -96
- package/dist/core/constraints/context-builder.js.map +1 -1
- package/dist/core/constraints/doc-freshness/runner.d.ts.map +1 -1
- package/dist/core/constraints/doc-freshness/runner.js +2 -1
- package/dist/core/constraints/doc-freshness/runner.js.map +1 -1
- package/dist/core/constraints/git-evidence.d.ts +60 -0
- package/dist/core/constraints/git-evidence.d.ts.map +1 -0
- package/dist/core/constraints/git-evidence.js +88 -0
- package/dist/core/constraints/git-evidence.js.map +1 -0
- package/dist/core/constraints/injection-drift.d.ts +3 -20
- package/dist/core/constraints/injection-drift.d.ts.map +1 -1
- package/dist/core/constraints/injection-drift.js +10 -57
- package/dist/core/constraints/injection-drift.js.map +1 -1
- package/dist/core/constraints/injection-writer.d.ts +113 -0
- package/dist/core/constraints/injection-writer.d.ts.map +1 -0
- package/dist/core/constraints/injection-writer.js +228 -0
- package/dist/core/constraints/injection-writer.js.map +1 -0
- package/dist/core/constraints/usage-report.d.ts +22 -1
- package/dist/core/constraints/usage-report.d.ts.map +1 -1
- package/dist/core/constraints/usage-report.js +27 -20
- package/dist/core/constraints/usage-report.js.map +1 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/project-config-loader.d.ts +32 -1
- package/dist/core/project-config-loader.d.ts.map +1 -1
- package/dist/core/project-config-loader.js +39 -9
- package/dist/core/project-config-loader.js.map +1 -1
- package/dist/core/validators/passes-gate.d.ts +15 -64
- package/dist/core/validators/passes-gate.d.ts.map +1 -1
- package/dist/core/validators/passes-gate.js +84 -222
- package/dist/core/validators/passes-gate.js.map +1 -1
- package/dist/core/validators/test-output.d.ts +58 -0
- package/dist/core/validators/test-output.d.ts.map +1 -0
- package/dist/core/validators/test-output.js +109 -0
- package/dist/core/validators/test-output.js.map +1 -0
- package/dist/failure/recorder.d.ts +6 -0
- package/dist/failure/recorder.d.ts.map +1 -1
- package/dist/failure/recorder.js +12 -8
- package/dist/failure/recorder.js.map +1 -1
- package/dist/gates/acceptance.d.ts +1 -48
- package/dist/gates/acceptance.d.ts.map +1 -1
- package/dist/gates/acceptance.js +6 -38
- package/dist/gates/acceptance.js.map +1 -1
- package/dist/gates/checker-gate.d.ts.map +1 -1
- package/dist/gates/checker-gate.js +6 -11
- package/dist/gates/checker-gate.js.map +1 -1
- package/dist/gates/command.d.ts.map +1 -1
- package/dist/gates/command.js +10 -22
- package/dist/gates/command.js.map +1 -1
- package/dist/gates/contract.d.ts.map +1 -1
- package/dist/gates/contract.js +22 -61
- package/dist/gates/contract.js.map +1 -1
- package/dist/gates/performance.d.ts.map +1 -1
- package/dist/gates/performance.js +13 -31
- package/dist/gates/performance.js.map +1 -1
- package/dist/gates/review.d.ts.map +1 -1
- package/dist/gates/review.js +21 -53
- package/dist/gates/review.js.map +1 -1
- package/dist/gates/security.d.ts.map +1 -1
- package/dist/gates/security.js +14 -32
- package/dist/gates/security.js.map +1 -1
- package/dist/gates/types.d.ts +28 -5
- package/dist/gates/types.d.ts.map +1 -1
- package/dist/gates/types.js +38 -1
- package/dist/gates/types.js.map +1 -1
- package/dist/hooks/bootstrap.d.ts +2 -0
- package/dist/hooks/bootstrap.d.ts.map +1 -1
- package/dist/hooks/bootstrap.js +5 -2
- package/dist/hooks/bootstrap.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge/audit.d.ts +7 -2
- package/dist/knowledge/audit.d.ts.map +1 -1
- package/dist/knowledge/audit.js +59 -79
- package/dist/knowledge/audit.js.map +1 -1
- package/dist/knowledge/flywheel-metrics.d.ts +39 -0
- package/dist/knowledge/flywheel-metrics.d.ts.map +1 -0
- package/dist/knowledge/flywheel-metrics.js +47 -0
- package/dist/knowledge/flywheel-metrics.js.map +1 -0
- package/dist/knowledge/import.d.ts.map +1 -1
- package/dist/knowledge/import.js +4 -14
- package/dist/knowledge/import.js.map +1 -1
- package/dist/knowledge/index-generator.d.ts.map +1 -1
- package/dist/knowledge/index-generator.js +17 -14
- package/dist/knowledge/index-generator.js.map +1 -1
- package/dist/knowledge/ingest.d.ts.map +1 -1
- package/dist/knowledge/ingest.js +9 -4
- package/dist/knowledge/ingest.js.map +1 -1
- package/dist/knowledge/migration.d.ts.map +1 -1
- package/dist/knowledge/migration.js +11 -8
- package/dist/knowledge/migration.js.map +1 -1
- package/dist/knowledge/reference-tracker.d.ts.map +1 -1
- package/dist/knowledge/reference-tracker.js +12 -9
- package/dist/knowledge/reference-tracker.js.map +1 -1
- package/dist/knowledge/store.d.ts +15 -0
- package/dist/knowledge/store.d.ts.map +1 -1
- package/dist/knowledge/store.js +59 -10
- package/dist/knowledge/store.js.map +1 -1
- package/dist/monitoring/context-tracker.d.ts.map +1 -1
- package/dist/monitoring/context-tracker.js +11 -20
- package/dist/monitoring/context-tracker.js.map +1 -1
- package/dist/monitoring/index.d.ts +1 -1
- package/dist/monitoring/index.d.ts.map +1 -1
- package/dist/monitoring/index.js +1 -2
- package/dist/monitoring/index.js.map +1 -1
- package/dist/monitoring/trace-analyzer.d.ts +15 -0
- package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
- package/dist/monitoring/trace-analyzer.js +19 -2
- package/dist/monitoring/trace-analyzer.js.map +1 -1
- package/dist/monitoring/traces.d.ts +21 -2
- package/dist/monitoring/traces.d.ts.map +1 -1
- package/dist/monitoring/traces.js +38 -29
- package/dist/monitoring/traces.js.map +1 -1
- package/dist/release/index.d.ts +2 -2
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js +1 -5
- package/dist/release/index.js.map +1 -1
- package/dist/sdd/index-generator.js +10 -11
- package/dist/sdd/index-generator.js.map +1 -1
- package/dist/test-setup/project-fixture.d.ts +48 -0
- package/dist/test-setup/project-fixture.d.ts.map +1 -0
- package/dist/test-setup/project-fixture.js +106 -0
- package/dist/test-setup/project-fixture.js.map +1 -0
- package/dist/types/constraint.d.ts +0 -18
- package/dist/types/constraint.d.ts.map +1 -1
- package/dist/types/constraint.js.map +1 -1
- package/dist/types/passes-gate.d.ts +10 -25
- package/dist/types/passes-gate.d.ts.map +1 -1
- package/dist/types/project-config.d.ts +1 -1
- package/dist/types/session.d.ts +6 -5
- package/dist/types/session.d.ts.map +1 -1
- package/dist/utils/exec.d.ts +10 -0
- package/dist/utils/exec.d.ts.map +1 -1
- package/dist/utils/exec.js +12 -0
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/file-walk.d.ts +9 -1
- package/dist/utils/file-walk.d.ts.map +1 -1
- package/dist/utils/file-walk.js +10 -1
- package/dist/utils/file-walk.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +73 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +141 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/jsonl.d.ts +92 -0
- package/dist/utils/jsonl.d.ts.map +1 -0
- package/dist/utils/jsonl.js +166 -0
- package/dist/utils/jsonl.js.map +1 -0
- package/dist/utils/package-version.d.ts +16 -0
- package/dist/utils/package-version.d.ts.map +1 -0
- package/dist/utils/package-version.js +63 -0
- package/dist/utils/package-version.js.map +1 -0
- package/package.json +1 -1
- package/src/CONTEXT.md +7 -2
- package/src/__tests__/acceptance-gate.test.ts +3 -1
- package/src/__tests__/checker-extra.test.ts +7 -1218
- package/src/__tests__/context-files-resolution.test.ts +116 -0
- package/src/__tests__/effective-constraints.test.ts +10 -13
- package/src/__tests__/exec.test.ts +35 -1
- package/src/__tests__/layering.test.ts +152 -0
- package/src/__tests__/passes-gate-extra.test.ts +0 -145
- package/src/__tests__/passes-gate.test.ts +142 -106
- package/src/__tests__/skip-semantics.test.ts +5 -9
- package/src/cli/__tests__/command-contract.test.ts +170 -0
- package/src/cli/command-contract.ts +108 -0
- package/src/cli/commands/CONTEXT.md +22 -7
- package/src/cli/commands/__tests__/acceptance.test.ts +40 -33
- package/src/cli/commands/__tests__/analyze-sessions.test.ts +35 -29
- package/src/cli/commands/__tests__/bin-exit-mapping.test.ts +101 -0
- package/src/cli/commands/__tests__/check-drift.test.ts +27 -34
- package/src/cli/commands/__tests__/check-skip-output.test.ts +21 -24
- package/src/cli/commands/__tests__/check.test.ts +378 -382
- package/src/cli/commands/__tests__/command.test.ts +85 -70
- package/src/cli/commands/__tests__/constraints-report.test.ts +100 -71
- package/src/cli/commands/__tests__/constraints-retire.test.ts +152 -95
- package/src/cli/commands/__tests__/contract.test.ts +27 -34
- package/src/cli/commands/__tests__/failure.test.ts +31 -34
- package/src/cli/commands/__tests__/init-injection.test.ts +58 -28
- package/src/cli/commands/__tests__/init.test.ts +77 -48
- package/src/cli/commands/__tests__/knowledge-flywheel-consistency.test.ts +108 -0
- package/src/cli/commands/__tests__/knowledge.test.ts +69 -43
- package/src/cli/commands/__tests__/passes-gate.test.ts +43 -45
- package/src/cli/commands/__tests__/performance.test.ts +22 -23
- package/src/cli/commands/__tests__/posteval-plan.test.ts +39 -38
- package/src/cli/commands/__tests__/project-path-anchoring.test.ts +157 -0
- package/src/cli/commands/__tests__/project-path-convention.test.ts +169 -0
- package/src/cli/commands/__tests__/registry.test.ts +69 -35
- package/src/cli/commands/__tests__/release.test.ts +209 -80
- package/src/cli/commands/__tests__/report-extra.test.ts +16 -16
- package/src/cli/commands/__tests__/report.test.ts +25 -25
- package/src/cli/commands/__tests__/review.test.ts +33 -31
- package/src/cli/commands/__tests__/security.test.ts +23 -27
- package/src/cli/commands/__tests__/spec-baseline-check.test.ts +20 -20
- package/src/cli/commands/__tests__/spec.test.ts +41 -29
- package/src/cli/commands/__tests__/status-extra.test.ts +18 -18
- package/src/cli/commands/__tests__/status-skipped-lines.test.ts +72 -0
- package/src/cli/commands/__tests__/status.test.ts +34 -34
- package/src/cli/commands/__tests__/sync-docs-agents.test.ts +77 -78
- package/src/cli/commands/__tests__/sync-docs.test.ts +72 -74
- package/src/cli/commands/__tests__/update-user-model.test.ts +62 -33
- package/src/cli/commands/__tests__/validate.test.ts +27 -29
- package/src/cli/commands/acceptance.ts +35 -24
- package/src/cli/commands/analyze-sessions.ts +25 -24
- package/src/cli/commands/check.ts +88 -65
- package/src/cli/commands/command.ts +30 -17
- package/src/cli/commands/constraints-report.ts +37 -34
- package/src/cli/commands/constraints-retire.ts +58 -55
- package/src/cli/commands/constraints.ts +10 -27
- package/src/cli/commands/contract.ts +51 -42
- package/src/cli/commands/definitions.ts +36 -222
- package/src/cli/commands/failure.ts +33 -26
- package/src/cli/commands/init.ts +166 -220
- package/src/cli/commands/knowledge.ts +225 -203
- package/src/cli/commands/passes-gate.ts +58 -68
- package/src/cli/commands/performance.ts +23 -18
- package/src/cli/commands/posteval-plan.ts +29 -15
- package/src/cli/commands/release.ts +70 -59
- package/src/cli/commands/report.ts +9 -5
- package/src/cli/commands/review.ts +39 -29
- package/src/cli/commands/sdd.ts +7 -5
- package/src/cli/commands/security.ts +35 -26
- package/src/cli/commands/spec-baseline-check.ts +16 -11
- package/src/cli/commands/spec.ts +66 -53
- package/src/cli/commands/status.ts +59 -53
- package/src/cli/commands/sync-docs/agents-syncer.ts +5 -2
- package/src/cli/commands/sync-docs/context-syncer.ts +3 -2
- package/src/cli/commands/sync-docs/index.ts +73 -100
- package/src/cli/commands/sync-docs/project-reader.ts +17 -18
- package/src/cli/commands/update-user-model.ts +33 -45
- package/src/cli/commands/validate.ts +31 -25
- package/src/cli/session-mining/__tests__/transcript.test.ts +118 -0
- package/src/cli/session-mining/transcript.ts +26 -8
- package/src/context/session-manager.ts +19 -33
- package/src/core/CONTEXT.md +9 -6
- package/src/core/constraints/__tests__/capabilities-reconcile.test.ts +200 -0
- package/src/core/constraints/__tests__/capability-counts.test.ts +94 -0
- package/src/core/constraints/__tests__/git-evidence.test.ts +208 -0
- package/src/core/constraints/__tests__/injection-drift.test.ts +3 -10
- package/src/core/constraints/__tests__/injection-writer.test.ts +231 -0
- package/src/core/constraints/__tests__/trace-injection.test.ts +71 -0
- package/src/core/constraints/__tests__/usage-report.test.ts +112 -0
- package/src/core/constraints/agent-prompt-renderer.ts +2 -6
- package/src/core/constraints/capabilities-parser.ts +53 -35
- package/src/core/constraints/capabilities-reconcile.ts +166 -0
- package/src/core/constraints/checker.ts +75 -130
- package/src/core/constraints/checkers/__tests__/capability-sync.test.ts +214 -0
- package/src/core/constraints/checkers/__tests__/context-doc-sync.test.ts +77 -0
- package/src/core/constraints/checkers/__tests__/docs-freshness.test.ts +117 -0
- package/src/{__tests__ → core/constraints/checkers/__tests__}/governance-presence.test.ts +83 -9
- package/src/core/constraints/checkers/__tests__/iron-flags.test.ts +50 -0
- package/src/core/constraints/checkers/__tests__/no-bypass-checkpoint.test.ts +76 -0
- package/src/{__tests__ → core/constraints/checkers/__tests__}/no-hardcoded-credentials.test.ts +4 -3
- package/src/core/constraints/checkers/__tests__/no-test-simplification.test.ts +58 -0
- package/src/core/constraints/checkers/__tests__/three-state-consistency.test.ts +145 -0
- package/src/core/constraints/checkers/capability-sync.ts +29 -88
- package/src/core/constraints/checkers/context-doc-sync.ts +15 -25
- package/src/core/constraints/checkers/docs-freshness.ts +40 -69
- package/src/core/constraints/checkers/governance-presence.ts +7 -25
- package/src/core/constraints/checkers/no-test-simplification.ts +4 -3
- package/src/core/constraints/checkers/types.ts +2 -2
- package/src/core/constraints/context-builder.ts +39 -91
- package/src/core/constraints/doc-freshness/runner.ts +2 -1
- package/src/core/constraints/git-evidence.ts +120 -0
- package/src/core/constraints/injection-drift.ts +13 -60
- package/src/core/constraints/injection-writer.ts +212 -0
- package/src/core/constraints/usage-report.ts +36 -17
- package/src/core/index.ts +4 -2
- package/src/core/project-config-loader.ts +49 -9
- package/src/core/validators/__tests__/passes-gate.test.ts +2 -56
- package/src/core/validators/__tests__/test-output.test.ts +372 -0
- package/src/core/validators/passes-gate.ts +86 -248
- package/src/core/validators/test-output.ts +128 -0
- package/src/failure/__tests__/recorder.test.ts +168 -0
- package/src/failure/recorder.ts +12 -10
- package/src/gates/CONTEXT.md +6 -3
- package/src/gates/__tests__/acceptance-types-single-source.test.ts +68 -0
- package/src/gates/__tests__/acceptance.test.ts +4 -86
- package/src/gates/__tests__/effective-gates.test.ts +3 -8
- package/src/gates/__tests__/test-verdict-consistency.test.ts +140 -0
- package/src/gates/acceptance.ts +19 -84
- package/src/gates/checker-gate.ts +8 -7
- package/src/gates/command.ts +10 -16
- package/src/gates/contract.ts +22 -61
- package/src/gates/performance.ts +10 -22
- package/src/gates/review.ts +21 -41
- package/src/gates/security.ts +10 -22
- package/src/gates/types.ts +70 -5
- package/src/hooks/CONTEXT.md +1 -1
- package/src/hooks/bootstrap.ts +5 -2
- package/src/index.ts +0 -4
- package/src/knowledge/CONTEXT.md +8 -3
- package/src/knowledge/__tests__/audit-labels.test.ts +44 -0
- package/src/knowledge/__tests__/flywheel-metrics.test.ts +135 -0
- package/src/knowledge/__tests__/import.test.ts +44 -0
- package/src/knowledge/__tests__/index-generator.test.ts +53 -0
- package/src/knowledge/__tests__/ingest.test.ts +85 -0
- package/src/knowledge/__tests__/migration.test.ts +47 -0
- package/src/knowledge/__tests__/reference-tracker.test.ts +16 -0
- package/src/knowledge/__tests__/store.test.ts +194 -0
- package/src/knowledge/audit.ts +67 -71
- package/src/knowledge/flywheel-metrics.ts +71 -0
- package/src/knowledge/import.ts +4 -18
- package/src/knowledge/index-generator.ts +19 -14
- package/src/knowledge/ingest.ts +9 -4
- package/src/knowledge/migration.ts +11 -8
- package/src/knowledge/reference-tracker.ts +12 -8
- package/src/knowledge/store.ts +64 -11
- package/src/monitoring/CONTEXT.md +8 -3
- package/src/monitoring/__tests__/skipped-lines-report.test.ts +178 -0
- package/src/monitoring/__tests__/traces.test.ts +57 -0
- package/src/monitoring/context-tracker.ts +11 -23
- package/src/monitoring/index.ts +1 -1
- package/src/monitoring/trace-analyzer.ts +21 -2
- package/src/monitoring/traces.ts +39 -36
- package/src/release/CONTEXT.md +1 -0
- package/src/release/__tests__/barrel.test.ts +60 -0
- package/src/release/index.ts +2 -13
- package/src/sdd/__tests__/index-generator.test.ts +71 -0
- package/src/sdd/index-generator.ts +9 -9
- package/src/test-setup/__tests__/project-fixture.test.ts +178 -0
- package/src/test-setup/project-fixture.ts +87 -0
- package/src/tools/CONTEXT.md +6 -0
- package/src/tools/__tests__/registry.test.ts +221 -0
- package/src/types/__tests__/types.test.ts +4 -5
- package/src/types/constraint.ts +0 -25
- package/src/types/passes-gate.ts +10 -30
- package/src/types/project-config.ts +1 -1
- package/src/types/session.ts +5 -5
- package/src/utils/__tests__/frontmatter.test.ts +206 -0
- package/src/utils/__tests__/jsonl-skip-disposition.test.ts +175 -0
- package/src/utils/__tests__/jsonl.test.ts +187 -0
- package/src/utils/__tests__/package-version.test.ts +97 -0
- package/src/utils/exec.ts +15 -0
- package/src/utils/file-walk.ts +11 -2
- package/src/utils/frontmatter.ts +121 -0
- package/src/utils/jsonl.ts +167 -0
- package/src/utils/package-version.ts +27 -0
- package/dist/cli/commands/doc-freshness-check.d.ts +0 -53
- package/dist/cli/commands/doc-freshness-check.d.ts.map +0 -1
- package/dist/cli/commands/doc-freshness-check.js +0 -352
- package/dist/cli/commands/doc-freshness-check.js.map +0 -1
- package/dist/types/index.d.ts +0 -14
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -39
- package/dist/types/index.js.map +0 -1
- package/src/__tests__/long-running.test.ts +0 -17
- package/src/__tests__/passes-gate-extension.test.ts +0 -151
- package/src/cli/commands/__tests__/doc-freshness-check.test.ts +0 -168
- package/src/cli/commands/doc-freshness-check.ts +0 -386
- package/src/spec/CONTEXT.md +0 -11
- package/src/types/index.ts +0 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities-parser.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capabilities-parser.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,MAAM,WAAW,wBAAwB;IACvC,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,MAAM,EAAE,CAoB1G;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,MAAM,EAAE,CAMlH;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKlE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1E;AAID;;;;;;;;GAQG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS;QAAE,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CACrC;AA+CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,0BAA0B,GACjC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAa1C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,0BAA0B,GACjC,MAAM,CASR"}
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* 各持一份正则,收敛到此处。H2 起能力清单计数(checkCapabilityCounts /
|
|
7
7
|
* updateCapabilityCounts)也从 sync-docs/capabilities-syncer 收敛到此,
|
|
8
8
|
* 使本模块成为 CAPABILITIES.md 解析 + 计数唯一入口。
|
|
9
|
+
*
|
|
10
|
+
* 计数所需的命令/门禁定义由调用方注入(harness#88:core 不值导入上层定义表)。
|
|
9
11
|
*/
|
|
10
12
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
13
|
if (k2 === undefined) k2 = k;
|
|
@@ -49,17 +51,9 @@ exports.checkCapabilityCounts = checkCapabilityCounts;
|
|
|
49
51
|
exports.updateCapabilityCounts = updateCapabilityCounts;
|
|
50
52
|
const fs = __importStar(require("fs"));
|
|
51
53
|
const definitions_1 = require("./definitions");
|
|
52
|
-
const definitions_2 = require("../../cli/commands/definitions");
|
|
53
|
-
const definitions_3 = require("../../gates/definitions");
|
|
54
54
|
const runner_1 = require("./doc-freshness/runner");
|
|
55
|
-
/** CLI 命令数 = 非门禁命令定义 + 门禁命令定义(ADR-0002:定义表是命令形状单一来源) */
|
|
56
|
-
function cliCommandCount() {
|
|
57
|
-
return definitions_2.COMMAND_DEFINITIONS.length + definitions_3.GATE_DEFINITIONS.filter(g => g.cli).length;
|
|
58
|
-
}
|
|
59
55
|
/** 匹配表格单元格中的源码文件条目(如 `src/foo.ts`、`foo.tsx`) */
|
|
60
56
|
const FILE_CELL_REGEX = /\|\s*([^|]+?\.(?:ts|tsx|js|jsx))\s*\|/g;
|
|
61
|
-
/** 仅匹配表格第二列的文件条目(checker 的历史语义:第一列为模块名,第二列为文件) */
|
|
62
|
-
const FILE_SECOND_COLUMN_REGEX = /^\|[^|]+\|\s*([^|]+?\.(?:ts|tsx|js|jsx))\s*\|/gm;
|
|
63
57
|
/**
|
|
64
58
|
* 匹配表格单元格中的目录条目(如 `agents/`)。
|
|
65
59
|
*
|
|
@@ -71,16 +65,17 @@ const DIR_CELL_REGEX = /\|\s*([\w][\w@./-]*\/)\s*\|/g;
|
|
|
71
65
|
/**
|
|
72
66
|
* 从 CAPABILITIES.md 内容中提取表格列出的条目
|
|
73
67
|
*
|
|
68
|
+
* 解析口径(ADR-0009):表格所有单元格收集;「只看第二列」的历史读法废弃。
|
|
69
|
+
*
|
|
74
70
|
* @param content markdown 内容
|
|
75
71
|
* @returns 文件路径原样 + (可选)目录条目,按出现顺序去重
|
|
76
72
|
*/
|
|
77
73
|
function parseCapabilitiesEntries(content, options = {}) {
|
|
78
|
-
const { includeDirs = false
|
|
74
|
+
const { includeDirs = false } = options;
|
|
79
75
|
const entries = [];
|
|
80
|
-
const fileRegex = secondColumnOnly ? FILE_SECOND_COLUMN_REGEX : FILE_CELL_REGEX;
|
|
81
76
|
let match;
|
|
82
|
-
|
|
83
|
-
while ((match =
|
|
77
|
+
FILE_CELL_REGEX.lastIndex = 0;
|
|
78
|
+
while ((match = FILE_CELL_REGEX.exec(content)) !== null) {
|
|
84
79
|
const raw = match[1].trim();
|
|
85
80
|
if (!entries.includes(raw))
|
|
86
81
|
entries.push(raw);
|
|
@@ -134,30 +129,39 @@ function aggregateToSourceSubdir(root, file) {
|
|
|
134
129
|
return prefix;
|
|
135
130
|
return prefix + rest.slice(0, idx) + '/';
|
|
136
131
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
132
|
+
/**
|
|
133
|
+
* 能力清单统计规则(CLI Commands 计数 = 非门禁命令数 + 带 cli 元数据的门禁数)
|
|
134
|
+
*/
|
|
135
|
+
function capabilityCountRules(source) {
|
|
136
|
+
return [
|
|
137
|
+
{
|
|
138
|
+
label: 'CLI Commands',
|
|
139
|
+
pattern: 'CLI Commands\\s*\\((\\d+)\\)',
|
|
140
|
+
actual: source.commands.length + source.gates.filter(g => g.cli).length,
|
|
141
|
+
},
|
|
142
|
+
{ label: 'Quality Gates', pattern: 'Quality Gates?\\s*\\((\\d+)\\)', actual: source.gates.length },
|
|
143
|
+
{ label: 'Iron Laws', pattern: 'Iron Laws?\\s*\\((\\d+)\\)', actual: Object.keys(definitions_1.IRON_LAWS).length },
|
|
144
|
+
{ label: 'Guidelines', pattern: 'Guidelines?\\s*\\((\\d+)\\)', actual: Object.keys(definitions_1.GUIDELINES).length },
|
|
145
|
+
];
|
|
146
|
+
}
|
|
143
147
|
/**
|
|
144
148
|
* 构建 CAPABILITIES.md 能力清单格式的检查配置
|
|
145
149
|
*/
|
|
146
|
-
function buildCapabilityChecks() {
|
|
147
|
-
return
|
|
150
|
+
function buildCapabilityChecks(source) {
|
|
151
|
+
return capabilityCountRules(source).map(rule => ({
|
|
148
152
|
type: 'doc_regex_count',
|
|
149
153
|
doc: 'CAPABILITIES.md',
|
|
150
154
|
label: rule.label,
|
|
151
155
|
pattern: rule.pattern,
|
|
152
|
-
actual: { kind: 'const_count', value: rule.actual
|
|
156
|
+
actual: { kind: 'const_count', value: rule.actual },
|
|
153
157
|
}));
|
|
154
158
|
}
|
|
155
159
|
/**
|
|
156
160
|
* 使用 FreshnessRunner 检查能力清单计数是否与代码一致(--check 模式)
|
|
157
161
|
*/
|
|
158
|
-
function checkCapabilityCounts(projectPath) {
|
|
162
|
+
function checkCapabilityCounts(projectPath, source) {
|
|
159
163
|
const runner = new runner_1.FreshnessRunner();
|
|
160
|
-
const checks = buildCapabilityChecks();
|
|
164
|
+
const checks = buildCapabilityChecks(source);
|
|
161
165
|
const results = runner.runAll({ checks }, projectPath);
|
|
162
166
|
const mismatches = [];
|
|
163
167
|
for (const r of results) {
|
|
@@ -170,14 +174,14 @@ function checkCapabilityCounts(projectPath) {
|
|
|
170
174
|
/**
|
|
171
175
|
* 更新 CAPABILITIES.md 中的能力清单计数(write 模式)
|
|
172
176
|
*
|
|
173
|
-
*
|
|
174
|
-
* 规则与 check 方向共用
|
|
177
|
+
* 命令/门禁计数取自注入的定义源(ADR-0002 单一来源在调用方),regex 替换文档计数行;
|
|
178
|
+
* 规则与 check 方向共用 capabilityCountRules(ADR-0008)。
|
|
175
179
|
*/
|
|
176
|
-
function updateCapabilityCounts(content,
|
|
177
|
-
for (const rule of
|
|
180
|
+
function updateCapabilityCounts(content, source) {
|
|
181
|
+
for (const rule of capabilityCountRules(source)) {
|
|
178
182
|
const regex = new RegExp(rule.pattern);
|
|
179
183
|
if (regex.test(content)) {
|
|
180
|
-
content = content.replace(regex, `${rule.label} (${rule.actual
|
|
184
|
+
content = content.replace(regex, `${rule.label} (${rule.actual})`);
|
|
181
185
|
}
|
|
182
186
|
}
|
|
183
187
|
return content;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities-parser.js","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-parser.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"capabilities-parser.js","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CAPABILITIES.md 声明与代码实况的对照判定(ADR-0009)
|
|
3
|
+
*
|
|
4
|
+
* 纯判定 module:吃「文档内容 + 实际文件清单(+ 增量清单)」,一次产出全部判定结果;
|
|
5
|
+
* 不做任何 fs/git IO(存在性可选注入)。此前同一套覆盖/幽灵规则在
|
|
6
|
+
* capability_sync / docs_freshness / sync-docs 三处独立实现,靠「同规则」注释人工同步,
|
|
7
|
+
* 同一 bug(basename 碰撞、后缀误配)在多处各修一遍——此处为唯一真相源。
|
|
8
|
+
*
|
|
9
|
+
* 方向:
|
|
10
|
+
* 代码→文档 uncoveredChanges / uncoveredFiles / uncoveredDirs(漏登记)
|
|
11
|
+
* 文档→代码 deadEntries(幽灵:文档登记的路径既不在代码实况中、文件系统中也不存在)
|
|
12
|
+
*
|
|
13
|
+
* 解析口径(ADR-0009):表格所有单元格收集,文件条目与目录条目都参与覆盖;
|
|
14
|
+
* 「只看第二列」的历史读法废弃。幽灵判定同样覆盖文件与目录条目(口径从严)。
|
|
15
|
+
* mode=module / file 的差异不在判定层,而是调用方取哪份输出形状:
|
|
16
|
+
* module 读 uncoveredDirs(目录聚合),file 读 uncoveredFiles(逐文件)。
|
|
17
|
+
*/
|
|
18
|
+
export interface ReconcileInput {
|
|
19
|
+
/** CAPABILITIES.md 内容 */
|
|
20
|
+
content: string;
|
|
21
|
+
/** 代码实况全集:项目相对路径的源文件清单(由调用方收集,见 collectSourceFiles) */
|
|
22
|
+
populationFiles: string[];
|
|
23
|
+
/** 增量变更文件(项目相对路径);无 git 概念的消费方传空/不传 */
|
|
24
|
+
changedFiles?: string[];
|
|
25
|
+
/** 存在性 oracle(项目相对路径 → 是否存在);缺省退化为「代码实况兜底」 */
|
|
26
|
+
fileExists?: (relPath: string) => boolean;
|
|
27
|
+
/** 源码根(如 'src'、'apps/api/src'):未覆盖聚合与条目多根相对路径解析用 */
|
|
28
|
+
sourceRoots?: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface CapabilityVerdict {
|
|
31
|
+
/** 文档中的文件条目(原样路径,可能为全路径或裸文件名) */
|
|
32
|
+
fileEntries: string[];
|
|
33
|
+
/** 文档中的目录条目(以 / 结尾) */
|
|
34
|
+
dirEntries: string[];
|
|
35
|
+
/** 参与覆盖判定的条目集 = 文件条目 + 目录条目 */
|
|
36
|
+
coverageEntries: string[];
|
|
37
|
+
/** 文档含 markdown 表格(区分「散文文档」与「有表格零条目」) */
|
|
38
|
+
hasTable: boolean;
|
|
39
|
+
/** 能力清单格式(计数行文档):无文件表可核对,调用方据此短路 */
|
|
40
|
+
listingFormat: boolean;
|
|
41
|
+
/** 增量文件中未被覆盖的(capability_sync Step1) */
|
|
42
|
+
uncoveredChanges: string[];
|
|
43
|
+
/** 代码实况中未被文档登记的 */
|
|
44
|
+
uncoveredFiles: string[];
|
|
45
|
+
/** 未覆盖文件按源码根下第一级子目录聚合(module 模式的 added 形状) */
|
|
46
|
+
uncoveredDirs: string[];
|
|
47
|
+
/** 幽灵条目(文件 + 目录):文档登记但代码实况与文件系统均不存在 */
|
|
48
|
+
deadEntries: string[];
|
|
49
|
+
}
|
|
50
|
+
export declare function reconcileCapabilities(input: ReconcileInput): CapabilityVerdict;
|
|
51
|
+
/**
|
|
52
|
+
* 变更清单中的「有意义的代码变更」:仅 .ts/.tsx/.js 且非测试文件
|
|
53
|
+
* (capability_sync Step1 的历史过滤规则,收口于此)
|
|
54
|
+
*/
|
|
55
|
+
export declare function significantCodeChanges(diffNames: string[]): string[];
|
|
56
|
+
/**
|
|
57
|
+
* 收集源码根下的实际文件清单(项目相对路径)
|
|
58
|
+
*
|
|
59
|
+
* 对 utils/file-walk 的统一封装,替代各调用方自拼 join/relative。
|
|
60
|
+
* 扩展名口径保持各调用方现状(checker 不含 .tsx;sync-docs 的模块扫描需
|
|
61
|
+
* ModuleInfo 元数据,继续走 scanSourceModules)——统一扩展名口径属行为变更,
|
|
62
|
+
* 不在本次纯重构范围(ADR-0009 记录在案)。
|
|
63
|
+
*/
|
|
64
|
+
export declare function collectSourceFiles(projectPath: string, roots: string[], options?: {
|
|
65
|
+
includeTsx?: boolean;
|
|
66
|
+
}): string[];
|
|
67
|
+
//# sourceMappingURL=capabilities-reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities-reconcile.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uBAAuB;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,uCAAuC;IACvC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AA2BD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,iBAAiB,CA2C9E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAIpE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,MAAM,EAAE,CAUV"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CAPABILITIES.md 声明与代码实况的对照判定(ADR-0009)
|
|
4
|
+
*
|
|
5
|
+
* 纯判定 module:吃「文档内容 + 实际文件清单(+ 增量清单)」,一次产出全部判定结果;
|
|
6
|
+
* 不做任何 fs/git IO(存在性可选注入)。此前同一套覆盖/幽灵规则在
|
|
7
|
+
* capability_sync / docs_freshness / sync-docs 三处独立实现,靠「同规则」注释人工同步,
|
|
8
|
+
* 同一 bug(basename 碰撞、后缀误配)在多处各修一遍——此处为唯一真相源。
|
|
9
|
+
*
|
|
10
|
+
* 方向:
|
|
11
|
+
* 代码→文档 uncoveredChanges / uncoveredFiles / uncoveredDirs(漏登记)
|
|
12
|
+
* 文档→代码 deadEntries(幽灵:文档登记的路径既不在代码实况中、文件系统中也不存在)
|
|
13
|
+
*
|
|
14
|
+
* 解析口径(ADR-0009):表格所有单元格收集,文件条目与目录条目都参与覆盖;
|
|
15
|
+
* 「只看第二列」的历史读法废弃。幽灵判定同样覆盖文件与目录条目(口径从严)。
|
|
16
|
+
* mode=module / file 的差异不在判定层,而是调用方取哪份输出形状:
|
|
17
|
+
* module 读 uncoveredDirs(目录聚合),file 读 uncoveredFiles(逐文件)。
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.reconcileCapabilities = reconcileCapabilities;
|
|
21
|
+
exports.significantCodeChanges = significantCodeChanges;
|
|
22
|
+
exports.collectSourceFiles = collectSourceFiles;
|
|
23
|
+
const path_1 = require("path");
|
|
24
|
+
const capabilities_parser_1 = require("./capabilities-parser");
|
|
25
|
+
const file_walk_1 = require("../../utils/file-walk");
|
|
26
|
+
/** markdown 表格分隔行(|------|------|):区分「无表格的散文文档」与「有表格但零条目」 */
|
|
27
|
+
const TABLE_SEPARATOR_REGEX = /^\s*\|[\s:|-]+\|\s*$/m;
|
|
28
|
+
/**
|
|
29
|
+
* 变更文件是否被条目覆盖(ADR-0009 唯一覆盖规则)
|
|
30
|
+
*
|
|
31
|
+
* 目录条目(以 / 结尾)前缀匹配;文件条目精确匹配或路径边界后缀匹配
|
|
32
|
+
* (兼容 basename 条目,但拒绝 xfoo.ts 命中 foo.ts、docs/src/foo.tsx 命中 src/foo.ts
|
|
33
|
+
* 这类 endsWith/includes 模糊匹配造成的碰撞)
|
|
34
|
+
*/
|
|
35
|
+
function isCoveredBy(entries, file) {
|
|
36
|
+
return entries.some((listed) => listed.endsWith('/')
|
|
37
|
+
? file.startsWith(listed)
|
|
38
|
+
: file === listed || file.endsWith('/' + listed));
|
|
39
|
+
}
|
|
40
|
+
/** 条目多根相对路径的存在性:项目根直查 + 各源码根前缀(docs_freshness/sync-docs 历史同语义) */
|
|
41
|
+
function entryExistsOnDisk(entry, fileExists, sourceRoots) {
|
|
42
|
+
if (fileExists(entry))
|
|
43
|
+
return true;
|
|
44
|
+
return sourceRoots.some((root) => fileExists(`${root}/${entry}`));
|
|
45
|
+
}
|
|
46
|
+
function reconcileCapabilities(input) {
|
|
47
|
+
const { content, populationFiles, changedFiles = [], fileExists = () => false, sourceRoots = [], } = input;
|
|
48
|
+
const allEntries = (0, capabilities_parser_1.parseCapabilitiesEntries)(content, { includeDirs: true });
|
|
49
|
+
const fileEntries = allEntries.filter((e) => !e.endsWith('/'));
|
|
50
|
+
const dirEntries = allEntries.filter((e) => e.endsWith('/'));
|
|
51
|
+
const coverageEntries = [...fileEntries, ...dirEntries];
|
|
52
|
+
const uncoveredFiles = populationFiles.filter((f) => !isCoveredBy(coverageEntries, f));
|
|
53
|
+
const uncoveredDirs = [...new Set(uncoveredFiles.map((file) => {
|
|
54
|
+
// 与 sync-docs 历史聚合同语义:归属第一个能前缀匹配的来源根,兜底首根
|
|
55
|
+
const root = sourceRoots.find((d) => file.startsWith(d + '/')) || sourceRoots[0] || '';
|
|
56
|
+
return (0, capabilities_parser_1.aggregateToSourceSubdir)(root, file);
|
|
57
|
+
}))];
|
|
58
|
+
// 条目在代码实况中仍有对应文件即算活(裸文件名条目无法做存在性判定的兜底)
|
|
59
|
+
const aliveByPopulation = (entry) => populationFiles.some((f) => isCoveredBy([entry], f));
|
|
60
|
+
const deadEntries = allEntries.filter((entry) => {
|
|
61
|
+
if (entryExistsOnDisk(entry, fileExists, sourceRoots))
|
|
62
|
+
return false;
|
|
63
|
+
return !aliveByPopulation(entry);
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
fileEntries,
|
|
67
|
+
dirEntries,
|
|
68
|
+
coverageEntries,
|
|
69
|
+
hasTable: TABLE_SEPARATOR_REGEX.test(content),
|
|
70
|
+
listingFormat: (0, capabilities_parser_1.isCapabilityListingFormat)(content),
|
|
71
|
+
uncoveredChanges: changedFiles.filter((f) => !isCoveredBy(coverageEntries, f)),
|
|
72
|
+
uncoveredFiles,
|
|
73
|
+
uncoveredDirs,
|
|
74
|
+
deadEntries,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 变更清单中的「有意义的代码变更」:仅 .ts/.tsx/.js 且非测试文件
|
|
79
|
+
* (capability_sync Step1 的历史过滤规则,收口于此)
|
|
80
|
+
*/
|
|
81
|
+
function significantCodeChanges(diffNames) {
|
|
82
|
+
return diffNames
|
|
83
|
+
.filter((f) => f.endsWith('.ts') || f.endsWith('.tsx') || f.endsWith('.js'))
|
|
84
|
+
.filter((f) => !f.includes('__tests__') && !f.includes('.test.') && !f.includes('.spec.'));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 收集源码根下的实际文件清单(项目相对路径)
|
|
88
|
+
*
|
|
89
|
+
* 对 utils/file-walk 的统一封装,替代各调用方自拼 join/relative。
|
|
90
|
+
* 扩展名口径保持各调用方现状(checker 不含 .tsx;sync-docs 的模块扫描需
|
|
91
|
+
* ModuleInfo 元数据,继续走 scanSourceModules)——统一扩展名口径属行为变更,
|
|
92
|
+
* 不在本次纯重构范围(ADR-0009 记录在案)。
|
|
93
|
+
*/
|
|
94
|
+
function collectSourceFiles(projectPath, roots, options = {}) {
|
|
95
|
+
const files = [];
|
|
96
|
+
for (const root of roots) {
|
|
97
|
+
const found = (0, file_walk_1.findTsSourceFiles)((0, path_1.join)(projectPath, root), {
|
|
98
|
+
skipIndex: true,
|
|
99
|
+
includeTsx: options.includeTsx,
|
|
100
|
+
});
|
|
101
|
+
files.push(...found.map((f) => (0, path_1.relative)(projectPath, f)));
|
|
102
|
+
}
|
|
103
|
+
return files;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=capabilities-reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities-reconcile.js","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-reconcile.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;AAwEH,sDA2CC;AAMD,wDAIC;AAUD,gDAcC;AAnJD,+BAAsC;AACtC,+DAI+B;AAC/B,qDAA0D;AAE1D,6DAA6D;AAC7D,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAoCtD;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,OAAiB,EAAE,IAAY;IAClD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACzB,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,iBAAiB,CACxB,KAAa,EACb,UAAoC,EACpC,WAAqB;IAErB,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAgB,qBAAqB,CAAC,KAAqB;IACzD,MAAM,EACJ,OAAO,EACP,eAAe,EACf,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,EACxB,WAAW,GAAG,EAAE,GACjB,GAAG,KAAK,CAAC;IAEV,MAAM,UAAU,GAAG,IAAA,8CAAwB,EAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,0CAA0C;YAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvF,OAAO,IAAA,6CAAuB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CACH,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAW,EAAE,CACnD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9C,IAAI,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QACpE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,UAAU;QACV,eAAe;QACf,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7C,aAAa,EAAE,IAAA,+CAAyB,EAAC,OAAO,CAAC;QACjD,gBAAgB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QAC9E,cAAc;QACd,aAAa;QACb,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,SAAmB;IACxD,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC3E,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,WAAmB,EACnB,KAAe,EACf,UAAoC,EAAE;IAEtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAA,6BAAiB,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE;YACvD,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,eAAQ,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
import { Constraint, ConstraintContext, ConstraintResult, ConstraintCheckResult } from '../../types/constraint';
|
|
10
10
|
import type { ExecutionTrace } from '../../types/trace';
|
|
11
11
|
import type { MergedConstraintsConfig } from '../../types/project-config';
|
|
12
|
+
import { type GitEvidence } from './git-evidence';
|
|
12
13
|
/**
|
|
13
|
-
* trace
|
|
14
|
-
* 不反向依赖 core,方向单向、无环,checker 可直接值引用 getTraceCollector)
|
|
14
|
+
* trace 记录器最小接口(工单 15 decycle 收尾,harness#88)
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* core 不上行依赖 monitoring:记录器经**构造参数**注入,未注入 = no-op
|
|
17
|
+
* (默认无副作用)。真实收集器由组合根接线——CLI check/report 与 bootstrap
|
|
18
|
+
* 各自 `new ConstraintChecker(getTraceCollector())`。
|
|
18
19
|
*/
|
|
19
20
|
export interface TraceRecorder {
|
|
20
21
|
record(trace: ExecutionTrace): void;
|
|
@@ -26,38 +27,13 @@ export declare class ConstraintChecker {
|
|
|
26
27
|
private static instance;
|
|
27
28
|
/** 检查结果缓存(S7:src 扫描等重复 I/O,TTL=1s 防跨测试污染) */
|
|
28
29
|
private cache;
|
|
30
|
+
/** trace 记录器(构造注入;缺省 no-op) */
|
|
31
|
+
private readonly traceRecorder;
|
|
32
|
+
constructor(traceRecorder?: TraceRecorder);
|
|
29
33
|
/**
|
|
30
|
-
*
|
|
31
|
-
* git diff 等命令只执行一次;run 外直接调用私有检查方法时不 memo(恒新鲜)。
|
|
32
|
-
*/
|
|
33
|
-
private runCache;
|
|
34
|
-
/** trace 记录器(注入式;null = 未显式注入,首次记录时惰性接线全局收集器) */
|
|
35
|
-
private traceRecorder;
|
|
36
|
-
private constructor();
|
|
37
|
-
/**
|
|
38
|
-
* 取 trace 记录器:未显式注入时惰性接线全局收集器(幂等,ADR-0003 副作用收敛)
|
|
39
|
-
*/
|
|
40
|
-
private getRecorder;
|
|
41
|
-
/**
|
|
42
|
-
* run 内 memoize;无活动 run 时直接执行(工单 18)
|
|
43
|
-
*/
|
|
44
|
-
private memoRun;
|
|
45
|
-
/**
|
|
46
|
-
* staged 全量 diff(同一次 run 内只执行一次 git 命令,工单 18)
|
|
47
|
-
*/
|
|
48
|
-
private getStagedDiff;
|
|
49
|
-
/**
|
|
50
|
-
* staged 变更文件名列表(同一次 run 内只执行一次 git 命令,工单 18)
|
|
51
|
-
*/
|
|
52
|
-
private getStagedDiffNames;
|
|
53
|
-
/**
|
|
54
|
-
* 获取单例实例
|
|
34
|
+
* 获取单例实例(未接线记录器的默认实例:不写 trace)
|
|
55
35
|
*/
|
|
56
36
|
static getInstance(): ConstraintChecker;
|
|
57
|
-
/**
|
|
58
|
-
* 注入 trace 记录器(测试/定制场景;不调用则首次记录时惰性接线全局收集器)
|
|
59
|
-
*/
|
|
60
|
-
setTraceRecorder(recorder: TraceRecorder): void;
|
|
61
37
|
/**
|
|
62
38
|
* 获取当前的约束集合(内置 + 自定义)
|
|
63
39
|
*
|
|
@@ -73,19 +49,14 @@ export declare class ConstraintChecker {
|
|
|
73
49
|
};
|
|
74
50
|
/**
|
|
75
51
|
* 检查单个约束
|
|
52
|
+
*
|
|
53
|
+
* @param evidence 可选,本 run 的 git 证据实例(#87);不传 = 本次调用独占一份真 git 证据
|
|
76
54
|
*/
|
|
77
|
-
check(constraint: Constraint, context: ConstraintContext): Promise<ConstraintResult>;
|
|
55
|
+
check(constraint: Constraint, context: ConstraintContext, evidence?: GitEvidence): Promise<ConstraintResult>;
|
|
78
56
|
/**
|
|
79
57
|
* 根据约束层级获取严重性
|
|
80
58
|
*/
|
|
81
59
|
private getSeverity;
|
|
82
|
-
/**
|
|
83
|
-
* 判断约束是否匹配当前触发条件
|
|
84
|
-
*
|
|
85
|
-
* context.operation 为主触发条件,context.extraTriggers 为次级推断
|
|
86
|
-
* (ADR-0001:pre-commit 代码变更附加 code_implementation),任一命中即匹配。
|
|
87
|
-
*/
|
|
88
|
-
private matchesTrigger;
|
|
89
60
|
/**
|
|
90
61
|
* 记录约束检查的 trace
|
|
91
62
|
*/
|
|
@@ -95,6 +66,9 @@ export declare class ConstraintChecker {
|
|
|
95
66
|
*
|
|
96
67
|
* 注册表闭环(ADR-0001):kind='check' 未注册 checker 直接抛错,
|
|
97
68
|
* 不再有"未注册默认通过"路径;kind='prompt' 在 check() 入口已短路。
|
|
69
|
+
*
|
|
70
|
+
* git 证据(stagedDiff/stagedDiffNames)单一来源 = GitEvidence adapter(#87):
|
|
71
|
+
* 一次 run 内调用方传同一实例即至多取证一次,run 外调用独占一份。
|
|
98
72
|
*/
|
|
99
73
|
private checkPrecondition;
|
|
100
74
|
/**
|
|
@@ -116,16 +90,20 @@ export declare class ConstraintChecker {
|
|
|
116
90
|
*
|
|
117
91
|
* @param context 约束上下文
|
|
118
92
|
* @param customConfig 可选,per-request 自定义配置(避免多请求间的单例状态污染)
|
|
93
|
+
* @param evidence 可选,本 run 的 git 证据 adapter(#87)。调用方(CLI check)与
|
|
94
|
+
* buildConstraintContext 传同一实例 → 一次 run 内 git 取证单一来源;
|
|
95
|
+
* 不传则本 run 自建一份,run 级 memo 照样生效(memo 在实例层,非隐式全局)。
|
|
119
96
|
*/
|
|
120
|
-
checkConstraints(context: ConstraintContext, customConfig?: MergedConstraintsConfig | null): Promise<ConstraintCheckResult>;
|
|
97
|
+
checkConstraints(context: ConstraintContext, customConfig?: MergedConstraintsConfig | null, evidence?: GitEvidence): Promise<ConstraintCheckResult>;
|
|
121
98
|
/**
|
|
122
99
|
* 执行前检查(仅检查 Iron Laws)
|
|
123
100
|
*
|
|
124
101
|
* @param context 约束上下文
|
|
125
102
|
* @param customConfig 可选,per-request 自定义配置(避免多请求间的单例状态污染)
|
|
103
|
+
* @param evidence 可选,本次检查共用的 git 证据 adapter(#87,同 checkConstraints)
|
|
126
104
|
* @throws ConstraintViolationError 如果有铁律违规
|
|
127
105
|
*/
|
|
128
|
-
beforeExecution(context: ConstraintContext, customConfig?: MergedConstraintsConfig | null): Promise<void>;
|
|
106
|
+
beforeExecution(context: ConstraintContext, customConfig?: MergedConstraintsConfig | null, evidence?: GitEvidence): Promise<void>;
|
|
129
107
|
}
|
|
130
108
|
/**
|
|
131
109
|
* 快捷函数:检查约束
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/checker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/checker.ts"],"names":[],"mappings":"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"}
|