@dommaker/harness 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -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 +104 -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 +27 -219
- 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 +17 -30
- package/dist/cli/commands/knowledge.d.ts.map +1 -1
- package/dist/cli/commands/knowledge.js +183 -273
- 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 +9 -3
- package/dist/cli/commands/update-user-model.d.ts.map +1 -1
- package/dist/cli/commands/update-user-model.js +56 -61
- 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 +68 -117
- package/dist/core/constraints/checker.js.map +1 -1
- package/dist/core/constraints/checkers/capability-sync.d.ts +20 -8
- package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -1
- package/dist/core/constraints/checkers/capability-sync.js +66 -77
- 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 +49 -66
- 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/index.d.ts +2 -2
- package/dist/core/constraints/checkers/index.d.ts.map +1 -1
- package/dist/core/constraints/checkers/index.js +2 -1
- package/dist/core/constraints/checkers/index.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 +43 -4
- package/dist/core/constraints/checkers/types.d.ts.map +1 -1
- package/dist/core/constraints/checkers/types.js +33 -0
- package/dist/core/constraints/checkers/types.js.map +1 -1
- 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 +2 -1
- package/dist/gates/checker-gate.d.ts.map +1 -1
- package/dist/gates/checker-gate.js +11 -13
- 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 +8 -18
- package/dist/types/constraint.d.ts.map +1 -1
- package/dist/types/constraint.js +6 -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/types/trace.d.ts +9 -0
- package/dist/types/trace.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 +8 -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 +130 -101
- 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 +23 -8
- 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 +107 -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 +448 -378
- 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 +231 -0
- package/src/cli/commands/__tests__/registry.test.ts +75 -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 +97 -34
- 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 +127 -66
- 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 +34 -227
- package/src/cli/commands/failure.ts +33 -26
- package/src/cli/commands/init.ts +166 -220
- package/src/cli/commands/knowledge.ts +192 -289
- 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 +64 -61
- 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 +10 -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 +82 -133
- package/src/core/constraints/checkers/__tests__/capability-sync.test.ts +273 -0
- package/src/core/constraints/checkers/__tests__/check-outcome.test.ts +176 -0
- package/src/core/constraints/checkers/__tests__/context-doc-sync.test.ts +77 -0
- package/src/core/constraints/checkers/__tests__/docs-freshness.test.ts +126 -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 +153 -0
- package/src/core/constraints/checkers/capability-sync.ts +75 -96
- package/src/core/constraints/checkers/context-doc-sync.ts +15 -25
- package/src/core/constraints/checkers/docs-freshness.ts +54 -70
- package/src/core/constraints/checkers/governance-presence.ts +7 -25
- package/src/core/constraints/checkers/index.ts +9 -2
- package/src/core/constraints/checkers/no-test-simplification.ts +4 -3
- package/src/core/constraints/checkers/types.ts +60 -4
- 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 +7 -4
- 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__/checker-gate.test.ts +24 -0
- 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 +12 -15
- 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 +16 -27
- 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/types/trace.ts +10 -0
- 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":"session-manager.d.ts","sourceRoot":"","sources":["../../src/context/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/context/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,OAAO,CAAiB;gBAEpB,QAAQ,CAAC,EAAE,MAAM;IAK7B;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa;IAqBxC;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IA8BlD;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD;;;;OAIG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa;IAQzC;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAatD;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB;IAoBhD;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa;IAyCnD;;OAEG;IACH,UAAU,IAAI,cAAc;IAI5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,aAAa;CAGtB"}
|
|
@@ -43,6 +43,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
43
43
|
exports.SessionManager = void 0;
|
|
44
44
|
const fs = __importStar(require("fs"));
|
|
45
45
|
const path = __importStar(require("path"));
|
|
46
|
+
const jsonl_1 = require("../utils/jsonl");
|
|
46
47
|
const context_tracker_1 = require("../monitoring/context-tracker");
|
|
47
48
|
class SessionManager {
|
|
48
49
|
basePath;
|
|
@@ -89,21 +90,13 @@ class SessionManager {
|
|
|
89
90
|
// 从磁盘恢复
|
|
90
91
|
const eventsPath = path.join(this.getSessionDir(id), 'events.jsonl');
|
|
91
92
|
try {
|
|
92
|
-
|
|
93
|
+
// 坏行策略:skip(原逐行 catch 跳过语义不变,harness#82);
|
|
94
|
+
// 空文件判定保持原始非空行数口径(合法 + 坏行 = 0 才算空)
|
|
95
|
+
// 计数去向:并进空事件判定的原始行数口径(harness#100 记名豁免:会话恢复面只区分
|
|
96
|
+
// "有没有事件",单列坏行数不改变任何输出;会话事件写链在本地,损坏=半写入截断)
|
|
97
|
+
const { records: events, skippedLines } = (0, jsonl_1.readJsonl)(eventsPath, 'skip');
|
|
98
|
+
if (events.length + skippedLines === 0)
|
|
93
99
|
return undefined;
|
|
94
|
-
const content = fs.readFileSync(eventsPath, 'utf-8');
|
|
95
|
-
const lines = content.trim().split('\n').filter(Boolean);
|
|
96
|
-
if (lines.length === 0)
|
|
97
|
-
return undefined;
|
|
98
|
-
const events = [];
|
|
99
|
-
for (const line of lines) {
|
|
100
|
-
try {
|
|
101
|
-
events.push(JSON.parse(line));
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// 跳过损坏行
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
100
|
const stat = fs.statSync(eventsPath);
|
|
108
101
|
const handle = {
|
|
109
102
|
id,
|
|
@@ -187,21 +180,16 @@ class SessionManager {
|
|
|
187
180
|
// 从 events.jsonl 恢复事件
|
|
188
181
|
const eventsPath = path.join(sessionsDir, sessionId, 'events.jsonl');
|
|
189
182
|
if (fs.existsSync(eventsPath)) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
//
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
})
|
|
203
|
-
.filter((e) => e !== null);
|
|
204
|
-
handle.events = events;
|
|
183
|
+
// 坏行策略:skip(原逐行 null-filter 语义不变,harness#82);
|
|
184
|
+
// 只恢复 checkpoint 之前的原始行(head 截断在 parse 之前);
|
|
185
|
+
// !== null 沿用原过滤口径
|
|
186
|
+
// 计数去向:豁免(harness#100)——恢复路径没有用户可见输出面(失败即整体抛
|
|
187
|
+
// `Checkpoint ${id} 不存在`),坏行只会让恢复出的事件少于 checkpoint 声明数;
|
|
188
|
+
// 告知需要改 loadCheckpoint 的抛错形状,属行为变更不在本票
|
|
189
|
+
const { records } = (0, jsonl_1.readJsonl)(eventsPath, 'skip', {
|
|
190
|
+
head: checkpointData.eventCount,
|
|
191
|
+
});
|
|
192
|
+
handle.events = records.filter((e) => e !== null);
|
|
205
193
|
}
|
|
206
194
|
return handle;
|
|
207
195
|
}
|
|
@@ -238,9 +226,8 @@ class SessionManager {
|
|
|
238
226
|
*/
|
|
239
227
|
appendEvent(sessionId, event) {
|
|
240
228
|
try {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
fs.appendFileSync(eventsPath, line, 'utf-8');
|
|
229
|
+
// 写链收口:ensureDir + append(harness#82)
|
|
230
|
+
(0, jsonl_1.appendJsonl)(path.join(this.getSessionDir(sessionId), 'events.jsonl'), event);
|
|
244
231
|
}
|
|
245
232
|
catch {
|
|
246
233
|
// 持久化失败,静默处理
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/context/session-manager.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,mEAA+D;AAO/D,MAAa,cAAc;IACjB,QAAQ,CAAS;IACjB,QAAQ,GAA+B,IAAI,GAAG,EAAE,CAAC;IACjD,OAAO,CAAiB;IAEhC,YAAY,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,EAAU;QACtB,MAAM,MAAM,GAAkB;YAC5B,EAAE;YACF,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACvC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE9B,SAAS;QACT,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,EAAU;QACpB,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,QAAQ;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/context/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-prompt-renderer.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/agent-prompt-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"agent-prompt-renderer.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/agent-prompt-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIjF;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EACjD,OAAO,CAAC,EAAE,iCAAiC,GAC1C,MAAM,CAqBR"}
|
|
@@ -36,7 +36,7 @@ function renderConstraintsByTrigger(triggers, options) {
|
|
|
36
36
|
if (requested.length === 0)
|
|
37
37
|
return '';
|
|
38
38
|
const constraints = (0, effective_constraints_1.getEffectiveConstraints)(options?.projectRoot);
|
|
39
|
-
const applicable = constraints.filter(c => c.promptInjection && matchesTrigger(c, requested));
|
|
39
|
+
const applicable = constraints.filter(c => c.promptInjection && (0, exec_1.matchesTrigger)(c, requested));
|
|
40
40
|
if (applicable.length === 0)
|
|
41
41
|
return '';
|
|
42
42
|
const lines = ['\n## 行为约束(前置声明)\n'];
|
|
@@ -52,7 +52,4 @@ function renderConstraintsByTrigger(triggers, options) {
|
|
|
52
52
|
}
|
|
53
53
|
return lines.join('\n');
|
|
54
54
|
}
|
|
55
|
-
function matchesTrigger(constraint, requested) {
|
|
56
|
-
return (0, exec_1.normalizeTriggers)(constraint.trigger).some(t => requested.includes(t));
|
|
57
|
-
}
|
|
58
55
|
//# sourceMappingURL=agent-prompt-renderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-prompt-renderer.js","sourceRoot":"","sources":["../../../src/core/constraints/agent-prompt-renderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AA+BH,gEAwBC;AApDD,
|
|
1
|
+
{"version":3,"file":"agent-prompt-renderer.js","sourceRoot":"","sources":["../../../src/core/constraints/agent-prompt-renderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AA+BH,gEAwBC;AApDD,2CAAkD;AAClD,oEAAmE;AAUnE,wBAAwB;AACxB,MAAM,YAAY,GAA+D;IAC/E,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAClD,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE;IACjD,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;CACzC,CAAC;AAEF;;;;;;;;;GASG;AACH,SAAgB,0BAA0B,CACxC,QAAiD,EACjD,OAA2C;IAE3C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,WAAW,GAAG,IAAA,+CAAuB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,IAAA,qBAAc,EAAC,CAAC,EAAE,SAAS,CAAC,CACvD,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -5,16 +5,18 @@
|
|
|
5
5
|
* 各持一份正则,收敛到此处。H2 起能力清单计数(checkCapabilityCounts /
|
|
6
6
|
* updateCapabilityCounts)也从 sync-docs/capabilities-syncer 收敛到此,
|
|
7
7
|
* 使本模块成为 CAPABILITIES.md 解析 + 计数唯一入口。
|
|
8
|
+
*
|
|
9
|
+
* 计数所需的命令/门禁定义由调用方注入(harness#88:core 不值导入上层定义表)。
|
|
8
10
|
*/
|
|
9
11
|
export interface CapabilitiesParseOptions {
|
|
10
|
-
/**
|
|
12
|
+
/** 是否同时收集目录条目,默认 false */
|
|
11
13
|
includeDirs?: boolean;
|
|
12
|
-
/** 只取表格第二列的文件条目(checker 的历史严格语义),默认 false */
|
|
13
|
-
secondColumnOnly?: boolean;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* 从 CAPABILITIES.md 内容中提取表格列出的条目
|
|
17
17
|
*
|
|
18
|
+
* 解析口径(ADR-0009):表格所有单元格收集;「只看第二列」的历史读法废弃。
|
|
19
|
+
*
|
|
18
20
|
* @param content markdown 内容
|
|
19
21
|
* @returns 文件路径原样 + (可选)目录条目,按出现顺序去重
|
|
20
22
|
*/
|
|
@@ -37,18 +39,33 @@ export declare function isCapabilityListingFormat(content: string): boolean;
|
|
|
37
39
|
* 源码根直接下的文件聚到根(file=src/foo.ts → src/)。
|
|
38
40
|
*/
|
|
39
41
|
export declare function aggregateToSourceSubdir(root: string, file: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* 调用方注入的定义源(harness#88)
|
|
44
|
+
*
|
|
45
|
+
* core 只消费计数所需的最小形状,不 require 命令表:
|
|
46
|
+
* - commands:非门禁 CLI 命令定义(仅取长度)
|
|
47
|
+
* - gates:门禁定义(仅取长度与「是否带 cli 元数据」)
|
|
48
|
+
*
|
|
49
|
+
* ADR-0002「定义表是命令形状单一来源」不变,只是表的引用方从 core 移到 cli。
|
|
50
|
+
*/
|
|
51
|
+
export interface CapabilityDefinitionSource {
|
|
52
|
+
commands: readonly unknown[];
|
|
53
|
+
gates: readonly {
|
|
54
|
+
cli?: unknown;
|
|
55
|
+
}[];
|
|
56
|
+
}
|
|
40
57
|
/**
|
|
41
58
|
* 使用 FreshnessRunner 检查能力清单计数是否与代码一致(--check 模式)
|
|
42
59
|
*/
|
|
43
|
-
export declare function checkCapabilityCounts(projectPath: string): {
|
|
60
|
+
export declare function checkCapabilityCounts(projectPath: string, source: CapabilityDefinitionSource): {
|
|
44
61
|
match: boolean;
|
|
45
62
|
mismatches: string[];
|
|
46
63
|
};
|
|
47
64
|
/**
|
|
48
65
|
* 更新 CAPABILITIES.md 中的能力清单计数(write 模式)
|
|
49
66
|
*
|
|
50
|
-
*
|
|
51
|
-
* 规则与 check 方向共用
|
|
67
|
+
* 命令/门禁计数取自注入的定义源(ADR-0002 单一来源在调用方),regex 替换文档计数行;
|
|
68
|
+
* 规则与 check 方向共用 capabilityCountRules(ADR-0008)。
|
|
52
69
|
*/
|
|
53
|
-
export declare function updateCapabilityCounts(content: string,
|
|
70
|
+
export declare function updateCapabilityCounts(content: string, source: CapabilityDefinitionSource): string;
|
|
54
71
|
//# sourceMappingURL=capabilities-parser.d.ts.map
|
|
@@ -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":"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"}
|