@dommaker/harness 0.16.9 → 0.17.1
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 +39 -0
- package/README.md +33 -32
- package/bin/harness.js +33 -20
- package/dist/cli/commands/check.d.ts +3 -2
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +69 -36
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/constraints-report.d.ts +42 -0
- package/dist/cli/commands/constraints-report.d.ts.map +1 -0
- package/dist/cli/commands/constraints-report.js +233 -0
- package/dist/cli/commands/constraints-report.js.map +1 -0
- package/dist/cli/commands/constraints-retire.d.ts +71 -0
- package/dist/cli/commands/constraints-retire.d.ts.map +1 -0
- package/dist/cli/commands/constraints-retire.js +384 -0
- package/dist/cli/commands/constraints-retire.js.map +1 -0
- package/dist/cli/commands/constraints.d.ts +1 -1
- package/dist/cli/commands/constraints.d.ts.map +1 -1
- package/dist/cli/commands/constraints.js +4 -4
- package/dist/cli/commands/constraints.js.map +1 -1
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +10 -4
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +81 -59
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/report.js +4 -4
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +3 -4
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts +5 -1
- package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/capabilities-syncer.js +2 -10
- package/dist/cli/commands/sync-docs/capabilities-syncer.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +1 -5
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/core/constraints/capabilities-parser.d.ts +7 -0
- package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
- package/dist/core/constraints/capabilities-parser.js +13 -0
- package/dist/core/constraints/capabilities-parser.js.map +1 -1
- package/dist/core/constraints/checker.d.ts +13 -5
- package/dist/core/constraints/checker.d.ts.map +1 -1
- package/dist/core/constraints/checker.js +62 -25
- package/dist/core/constraints/checker.js.map +1 -1
- package/dist/core/constraints/checkers/capability-sync.d.ts +9 -2
- package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -1
- package/dist/core/constraints/checkers/capability-sync.js +55 -22
- package/dist/core/constraints/checkers/capability-sync.js.map +1 -1
- package/dist/core/constraints/checkers/context-doc-sync.d.ts +3 -0
- package/dist/core/constraints/checkers/context-doc-sync.d.ts.map +1 -1
- package/dist/core/constraints/checkers/context-doc-sync.js +8 -2
- package/dist/core/constraints/checkers/context-doc-sync.js.map +1 -1
- package/dist/core/constraints/checkers/docs-freshness.d.ts +1 -0
- package/dist/core/constraints/checkers/docs-freshness.d.ts.map +1 -1
- package/dist/core/constraints/checkers/docs-freshness.js +39 -0
- package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
- package/dist/core/constraints/checkers/index.d.ts +8 -4
- package/dist/core/constraints/checkers/index.d.ts.map +1 -1
- package/dist/core/constraints/checkers/index.js +29 -46
- package/dist/core/constraints/checkers/index.js.map +1 -1
- package/dist/core/constraints/checkers/iron-flags.d.ts +6 -7
- package/dist/core/constraints/checkers/iron-flags.d.ts.map +1 -1
- package/dist/core/constraints/checkers/iron-flags.js +10 -17
- package/dist/core/constraints/checkers/iron-flags.js.map +1 -1
- package/dist/core/constraints/checkers/no-hardcoded-credentials.d.ts +13 -0
- package/dist/core/constraints/checkers/no-hardcoded-credentials.d.ts.map +1 -0
- package/dist/core/constraints/checkers/no-hardcoded-credentials.js +91 -0
- package/dist/core/constraints/checkers/no-hardcoded-credentials.js.map +1 -0
- package/dist/core/constraints/checkers/types.d.ts +15 -4
- package/dist/core/constraints/checkers/types.d.ts.map +1 -1
- package/dist/core/constraints/checkers/types.js +16 -4
- package/dist/core/constraints/checkers/types.js.map +1 -1
- package/dist/core/constraints/context-builder.d.ts +6 -3
- package/dist/core/constraints/context-builder.d.ts.map +1 -1
- package/dist/core/constraints/context-builder.js +29 -20
- package/dist/core/constraints/context-builder.js.map +1 -1
- package/dist/core/constraints/definitions/guidelines.d.ts +6 -2
- package/dist/core/constraints/definitions/guidelines.d.ts.map +1 -1
- package/dist/core/constraints/definitions/guidelines.js +29 -572
- package/dist/core/constraints/definitions/guidelines.js.map +1 -1
- package/dist/core/constraints/definitions/iron-laws.d.ts +6 -2
- package/dist/core/constraints/definitions/iron-laws.d.ts.map +1 -1
- package/dist/core/constraints/definitions/iron-laws.js +48 -231
- package/dist/core/constraints/definitions/iron-laws.js.map +1 -1
- package/dist/core/constraints/definitions/prompts.d.ts +12 -0
- package/dist/core/constraints/definitions/prompts.d.ts.map +1 -0
- package/dist/core/constraints/definitions/prompts.js +405 -0
- package/dist/core/constraints/definitions/prompts.js.map +1 -0
- package/dist/core/constraints/definitions.d.ts +15 -9
- package/dist/core/constraints/definitions.d.ts.map +1 -1
- package/dist/core/constraints/definitions.js +18 -12
- package/dist/core/constraints/definitions.js.map +1 -1
- package/dist/core/constraints/index.d.ts +3 -2
- package/dist/core/constraints/index.d.ts.map +1 -1
- package/dist/core/constraints/index.js +8 -2
- package/dist/core/constraints/index.js.map +1 -1
- package/dist/core/constraints/injection-drift.d.ts +48 -0
- package/dist/core/constraints/injection-drift.d.ts.map +1 -0
- package/dist/core/constraints/injection-drift.js +140 -0
- package/dist/core/constraints/injection-drift.js.map +1 -0
- package/dist/core/constraints/injection-renderer.d.ts +23 -0
- package/dist/core/constraints/injection-renderer.d.ts.map +1 -0
- package/dist/core/constraints/injection-renderer.js +44 -0
- package/dist/core/constraints/injection-renderer.js.map +1 -0
- package/dist/core/constraints/interceptor.d.ts.map +1 -1
- package/dist/core/constraints/interceptor.js +3 -2
- package/dist/core/constraints/interceptor.js.map +1 -1
- package/dist/core/constraints/usage-report.d.ts +95 -0
- package/dist/core/constraints/usage-report.d.ts.map +1 -0
- package/dist/core/constraints/usage-report.js +206 -0
- package/dist/core/constraints/usage-report.js.map +1 -0
- package/dist/core/effective-constraints.d.ts +47 -0
- package/dist/core/effective-constraints.d.ts.map +1 -0
- package/dist/core/effective-constraints.js +60 -0
- package/dist/core/effective-constraints.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/project-config-loader.d.ts +17 -2
- package/dist/core/project-config-loader.d.ts.map +1 -1
- package/dist/core/project-config-loader.js +55 -8
- package/dist/core/project-config-loader.js.map +1 -1
- package/dist/dashboard/data.d.ts +1 -9
- package/dist/dashboard/data.d.ts.map +1 -1
- package/dist/dashboard/data.js +7 -15
- package/dist/dashboard/data.js.map +1 -1
- package/dist/dashboard/types.d.ts +13 -1
- package/dist/dashboard/types.d.ts.map +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -13
- package/dist/index.js.map +1 -1
- package/dist/monitoring/index.d.ts +0 -2
- package/dist/monitoring/index.d.ts.map +1 -1
- package/dist/monitoring/index.js +0 -2
- package/dist/monitoring/index.js.map +1 -1
- package/dist/monitoring/knowledge-evolver.d.ts +1 -1
- package/dist/monitoring/knowledge-evolver.js +1 -1
- package/dist/monitoring/trace-analyzer.d.ts +1 -1
- package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
- package/dist/monitoring/trace-analyzer.js +16 -10
- package/dist/monitoring/trace-analyzer.js.map +1 -1
- package/dist/monitoring/traces.d.ts +2 -1
- package/dist/monitoring/traces.d.ts.map +1 -1
- package/dist/monitoring/traces.js +5 -3
- package/dist/monitoring/traces.js.map +1 -1
- package/dist/presets/standard.d.ts +3 -1
- package/dist/presets/standard.d.ts.map +1 -1
- package/dist/presets/standard.js +18 -8
- package/dist/presets/standard.js.map +1 -1
- package/dist/types/constraint.d.ts +51 -11
- package/dist/types/constraint.d.ts.map +1 -1
- package/dist/types/constraint.js +8 -4
- package/dist/types/constraint.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/monitoring-types.d.ts +2 -63
- package/dist/types/monitoring-types.d.ts.map +1 -1
- package/dist/types/monitoring-types.js +2 -2
- package/dist/types/project-config.d.ts +26 -1
- package/dist/types/project-config.d.ts.map +1 -1
- package/dist/types/trace.d.ts +16 -7
- package/dist/types/trace.d.ts.map +1 -1
- package/dist/types/trace.js +8 -0
- package/dist/types/trace.js.map +1 -1
- package/package.json +1 -1
- package/src/CONTEXT.md +2 -2
- package/src/__tests__/checker-extra.test.ts +228 -333
- package/src/__tests__/checker.test.ts +87 -724
- package/src/__tests__/constraint-doctor.test.ts +5 -5
- package/src/__tests__/doctor-extra.test.ts +164 -0
- package/src/__tests__/effective-constraints.test.ts +147 -0
- package/src/__tests__/extend-exceptions.test.ts +3 -3
- package/src/__tests__/iron-laws.test.ts +115 -91
- package/src/__tests__/no-hardcoded-credentials.test.ts +90 -0
- package/src/__tests__/presets.test.ts +7 -7
- package/src/__tests__/project-config-loader-extra.test.ts +41 -4
- package/src/__tests__/skip-semantics.test.ts +322 -0
- package/src/cli/commands/CONTEXT.md +5 -3
- package/src/cli/commands/__tests__/check-drift.test.ts +127 -0
- package/src/cli/commands/__tests__/check-skip-output.test.ts +128 -0
- package/src/cli/commands/__tests__/check.test.ts +14 -25
- package/src/cli/commands/__tests__/constraints-report.test.ts +327 -0
- package/src/cli/commands/__tests__/constraints-retire.test.ts +283 -0
- package/src/cli/commands/__tests__/init-injection.test.ts +234 -0
- package/src/cli/commands/__tests__/status-extra.test.ts +11 -11
- package/src/cli/commands/__tests__/status.test.ts +1 -1
- package/src/cli/commands/check.ts +72 -38
- package/src/cli/commands/constraints-report.ts +234 -0
- package/src/cli/commands/constraints-retire.ts +443 -0
- package/src/cli/commands/constraints.ts +5 -5
- package/src/cli/commands/index.ts +2 -1
- package/src/cli/commands/init.ts +94 -66
- package/src/cli/commands/report.ts +6 -6
- package/src/cli/commands/status.ts +3 -4
- package/src/cli/commands/sync-docs/capabilities-syncer.ts +5 -7
- package/src/cli/commands/validate.ts +1 -5
- package/src/core/CONTEXT.md +7 -4
- package/src/core/constraints/__tests__/injection-drift.test.ts +164 -0
- package/src/core/constraints/__tests__/interceptor.test.ts +4 -0
- package/src/core/constraints/capabilities-parser.ts +13 -0
- package/src/core/constraints/checker.ts +73 -28
- package/src/core/constraints/checkers/capability-sync.ts +72 -29
- package/src/core/constraints/checkers/context-doc-sync.ts +9 -2
- package/src/core/constraints/checkers/docs-freshness.ts +43 -0
- package/src/core/constraints/checkers/index.ts +38 -71
- package/src/core/constraints/checkers/iron-flags.ts +13 -49
- package/src/core/constraints/checkers/no-hardcoded-credentials.ts +93 -0
- package/src/core/constraints/checkers/types.ts +27 -5
- package/src/core/constraints/context-builder.ts +28 -19
- package/src/core/constraints/definitions/guidelines.ts +29 -597
- package/src/core/constraints/definitions/iron-laws.ts +48 -239
- package/src/core/constraints/definitions/prompts.ts +419 -0
- package/src/core/constraints/definitions.ts +18 -11
- package/src/core/constraints/index.ts +10 -1
- package/src/core/constraints/injection-drift.ts +139 -0
- package/src/core/constraints/injection-renderer.ts +44 -0
- package/src/core/constraints/interceptor.ts +3 -2
- package/src/core/constraints/usage-report.ts +254 -0
- package/src/core/effective-constraints.ts +85 -0
- package/src/core/index.ts +4 -1
- package/src/core/project-config-loader.ts +59 -9
- package/src/dashboard/__tests__/data.test.ts +5 -12
- package/src/dashboard/data.ts +9 -19
- package/src/dashboard/types.ts +18 -1
- package/src/index.ts +0 -12
- package/src/knowledge/CONTEXT.md +2 -2
- package/src/monitoring/CONTEXT.md +3 -4
- package/src/monitoring/index.ts +0 -2
- package/src/monitoring/knowledge-evolver.ts +1 -1
- package/src/monitoring/trace-analyzer.ts +15 -10
- package/src/monitoring/traces.ts +10 -6
- package/src/presets/__tests__/standard.test.ts +11 -9
- package/src/presets/standard.ts +24 -15
- package/src/types/constraint.ts +59 -14
- package/src/types/index.ts +1 -3
- package/src/types/monitoring-types.ts +2 -84
- package/src/types/project-config.ts +30 -1
- package/src/types/trace.ts +18 -7
- package/src/verification/CONTEXT.md +1 -1
- package/dist/cli/commands/flow.d.ts +0 -22
- package/dist/cli/commands/flow.d.ts.map +0 -1
- package/dist/cli/commands/flow.js +0 -275
- package/dist/cli/commands/flow.js.map +0 -1
- package/dist/constraints/lifecycle-runner.d.ts +0 -52
- package/dist/constraints/lifecycle-runner.d.ts.map +0 -1
- package/dist/constraints/lifecycle-runner.js +0 -151
- package/dist/constraints/lifecycle-runner.js.map +0 -1
- package/dist/constraints/registry.d.ts +0 -27
- package/dist/constraints/registry.d.ts.map +0 -1
- package/dist/constraints/registry.js +0 -128
- package/dist/constraints/registry.js.map +0 -1
- package/dist/constraints/types.d.ts +0 -53
- package/dist/constraints/types.d.ts.map +0 -1
- package/dist/constraints/types.js +0 -8
- package/dist/constraints/types.js.map +0 -1
- package/dist/core/constraints/checkers/always-pass.d.ts +0 -17
- package/dist/core/constraints/checkers/always-pass.d.ts.map +0 -1
- package/dist/core/constraints/checkers/always-pass.js +0 -23
- package/dist/core/constraints/checkers/always-pass.js.map +0 -1
- package/dist/core/constraints/checkers/guideline-flags.d.ts +0 -9
- package/dist/core/constraints/checkers/guideline-flags.d.ts.map +0 -1
- package/dist/core/constraints/checkers/guideline-flags.js +0 -13
- package/dist/core/constraints/checkers/guideline-flags.js.map +0 -1
- package/dist/core/constraints/checkers/no-any-type.d.ts +0 -6
- package/dist/core/constraints/checkers/no-any-type.d.ts.map +0 -1
- package/dist/core/constraints/checkers/no-any-type.js +0 -42
- package/dist/core/constraints/checkers/no-any-type.js.map +0 -1
- package/dist/core/constraints/checkers/no-excuse-patterns.d.ts +0 -6
- package/dist/core/constraints/checkers/no-excuse-patterns.d.ts.map +0 -1
- package/dist/core/constraints/checkers/no-excuse-patterns.js +0 -25
- package/dist/core/constraints/checkers/no-excuse-patterns.js.map +0 -1
- package/dist/core/constraints/checkers/no-fuzzy-completion-claim.d.ts +0 -6
- package/dist/core/constraints/checkers/no-fuzzy-completion-claim.d.ts.map +0 -1
- package/dist/core/constraints/checkers/no-fuzzy-completion-claim.js +0 -34
- package/dist/core/constraints/checkers/no-fuzzy-completion-claim.js.map +0 -1
- package/dist/core/constraints/checkers/no-performative-agreement.d.ts +0 -8
- package/dist/core/constraints/checkers/no-performative-agreement.d.ts.map +0 -1
- package/dist/core/constraints/checkers/no-performative-agreement.js +0 -23
- package/dist/core/constraints/checkers/no-performative-agreement.js.map +0 -1
- package/dist/core/constraints/checkers/no-simplification-without-approval.d.ts +0 -6
- package/dist/core/constraints/checkers/no-simplification-without-approval.d.ts.map +0 -1
- package/dist/core/constraints/checkers/no-simplification-without-approval.js +0 -30
- package/dist/core/constraints/checkers/no-simplification-without-approval.js.map +0 -1
- package/dist/core/constraints/checkers/test-coverage.d.ts +0 -6
- package/dist/core/constraints/checkers/test-coverage.d.ts.map +0 -1
- package/dist/core/constraints/checkers/test-coverage.js +0 -33
- package/dist/core/constraints/checkers/test-coverage.js.map +0 -1
- package/dist/core/constraints/checkers/yagni.d.ts +0 -8
- package/dist/core/constraints/checkers/yagni.d.ts.map +0 -1
- package/dist/core/constraints/checkers/yagni.js +0 -96
- package/dist/core/constraints/checkers/yagni.js.map +0 -1
- package/dist/core/constraints/definitions/tips.d.ts +0 -7
- package/dist/core/constraints/definitions/tips.d.ts.map +0 -1
- package/dist/core/constraints/definitions/tips.js +0 -62
- package/dist/core/constraints/definitions/tips.js.map +0 -1
- package/dist/evolution/auto-evolve.d.ts +0 -35
- package/dist/evolution/auto-evolve.d.ts.map +0 -1
- package/dist/evolution/auto-evolve.js +0 -64
- package/dist/evolution/auto-evolve.js.map +0 -1
- package/dist/evolution/index.d.ts +0 -2
- package/dist/evolution/index.d.ts.map +0 -1
- package/dist/evolution/index.js +0 -18
- package/dist/evolution/index.js.map +0 -1
- package/dist/monitoring/constraint-evolver.d.ts +0 -120
- package/dist/monitoring/constraint-evolver.d.ts.map +0 -1
- package/dist/monitoring/constraint-evolver.js +0 -410
- package/dist/monitoring/constraint-evolver.js.map +0 -1
- package/src/__tests__/constraint-evolver.test.ts +0 -405
- package/src/__tests__/doctor-evolver.test.ts +0 -381
- package/src/cli/commands/__tests__/flow.test.ts +0 -343
- package/src/cli/commands/flow.ts +0 -277
- package/src/constraints/__tests__/lifecycle-runner.test.ts +0 -246
- package/src/constraints/__tests__/registry.test.ts +0 -196
- package/src/constraints/lifecycle-runner.ts +0 -184
- package/src/constraints/registry.ts +0 -134
- package/src/constraints/types.ts +0 -59
- package/src/core/constraints/checkers/always-pass.ts +0 -22
- package/src/core/constraints/checkers/guideline-flags.ts +0 -30
- package/src/core/constraints/checkers/no-any-type.ts +0 -42
- package/src/core/constraints/checkers/no-excuse-patterns.ts +0 -24
- package/src/core/constraints/checkers/no-fuzzy-completion-claim.ts +0 -33
- package/src/core/constraints/checkers/no-performative-agreement.ts +0 -22
- package/src/core/constraints/checkers/no-simplification-without-approval.ts +0 -29
- package/src/core/constraints/checkers/test-coverage.ts +0 -35
- package/src/core/constraints/checkers/yagni.ts +0 -65
- package/src/core/constraints/definitions/tips.ts +0 -63
- package/src/evolution/CONTEXT.md +0 -22
- package/src/evolution/__tests__/auto-evolve.test.ts +0 -319
- package/src/evolution/auto-evolve.ts +0 -98
- package/src/evolution/index.ts +0 -1
- package/src/monitoring/constraint-evolver.ts +0 -501
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* docs_freshness:CAPABILITIES.md 文件表 + 能力清单格式 + CLAUDE.md + CHANGELOG(工单 21)
|
|
4
4
|
*
|
|
5
|
+
* 0. 存在性探测(ADR-0001):项目无任何 freshness 配置/目标时 skip,不计 pass/fail
|
|
5
6
|
* 1. 文件表格式:CAPABILITIES.md 中列出的文件必须仍存在(防过期引用)
|
|
6
7
|
* 2. 能力清单格式:FreshnessRunner 配置驱动检查
|
|
7
8
|
* 3. 无配置时注入内置默认配置(等价旧硬编码行为)
|
|
@@ -68,10 +69,48 @@ function checkCapabilitiesFreshness(projectPath) {
|
|
|
68
69
|
return true;
|
|
69
70
|
}
|
|
70
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* ADR-0001 存在性探测:项目是否存在任何 freshness 配置/检查目标。
|
|
74
|
+
*
|
|
75
|
+
* 判定信号(任一命中即视为采用了文档新鲜度约定):
|
|
76
|
+
* - 配置了 governance.doc_freshness.checks
|
|
77
|
+
* - 配置了 governance.context_files(enabled + 非空 required_dirs)
|
|
78
|
+
* - 项目根存在 CAPABILITIES.md
|
|
79
|
+
* - 项目根存在 CHANGELOG.md / CHANGELOG
|
|
80
|
+
*
|
|
81
|
+
* 全部缺失 → 项目未采用该约定,调用方应 skip 而非评估内置默认配置。
|
|
82
|
+
*/
|
|
83
|
+
function hasFreshnessTargets(projectPath) {
|
|
84
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(projectPath, 'CAPABILITIES.md')))
|
|
85
|
+
return true;
|
|
86
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(projectPath, 'CHANGELOG.md')) || (0, fs_1.existsSync)((0, path_1.join)(projectPath, 'CHANGELOG'))) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const raw = (0, project_config_loader_1.loadRawProjectConfig)(projectPath);
|
|
91
|
+
const governance = raw?.governance;
|
|
92
|
+
const freshnessConfig = governance?.doc_freshness;
|
|
93
|
+
if (freshnessConfig?.checks && freshnessConfig.checks.length > 0)
|
|
94
|
+
return true;
|
|
95
|
+
const contextFiles = governance?.context_files;
|
|
96
|
+
if (contextFiles?.enabled &&
|
|
97
|
+
Array.isArray(contextFiles.required_dirs) &&
|
|
98
|
+
contextFiles.required_dirs.length > 0) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// 配置不可读视为无配置
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
71
107
|
exports.docsFreshness = {
|
|
72
108
|
id: 'docs_freshness',
|
|
73
109
|
async evaluate(env) {
|
|
74
110
|
const projectPath = env.projectPath;
|
|
111
|
+
// ADR-0001 存在性探测:项目无任何 freshness 配置/目标 → skip(不计 pass/fail)
|
|
112
|
+
if (!hasFreshnessTargets(projectPath))
|
|
113
|
+
return 'skip';
|
|
75
114
|
// Step 1: 文件表格式 — 检查列出的文件是否还存在
|
|
76
115
|
if (!checkCapabilitiesFreshness(projectPath))
|
|
77
116
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-freshness.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/docs-freshness.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"docs-freshness.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/docs-freshness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 约束检查器注册表(工单 21)
|
|
3
3
|
*
|
|
4
|
-
* checker.ts 编排层通过 getConstraintCheck(id)
|
|
5
|
-
*
|
|
4
|
+
* checker.ts 编排层通过 getConstraintCheck(id) 查找实现。
|
|
5
|
+
*
|
|
6
|
+
* 注册表闭环(ADR-0001):模块加载时校验全部 kind='check' 的内置约束
|
|
7
|
+
* 都有已注册 checker,且注册表中没有无对应 check 定义的孤儿实现;
|
|
8
|
+
* 任一不满足即抛错(加载期失败,不许静默 pass)。
|
|
6
9
|
*/
|
|
7
10
|
import type { ConstraintCheck } from './types';
|
|
8
11
|
/**
|
|
9
|
-
* 按约束 ID 查找检查实现;未注册返回 undefined
|
|
12
|
+
* 按约束 ID 查找检查实现;未注册返回 undefined
|
|
13
|
+
* (编排层对 kind='check' 未注册的情况抛错,kind='prompt' 不查表)
|
|
10
14
|
*/
|
|
11
15
|
export declare function getConstraintCheck(id: string): ConstraintCheck | undefined;
|
|
12
16
|
/**
|
|
13
17
|
* 已注册的检查实现数量(诊断/测试用)
|
|
14
18
|
*/
|
|
15
19
|
export declare function registeredCheckCount(): number;
|
|
16
|
-
export type { ConstraintCheck, CheckEnv } from './types';
|
|
20
|
+
export type { ConstraintCheck, CheckEnv, CheckOutcome } from './types';
|
|
17
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAuD/C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -2,73 +2,56 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* 约束检查器注册表(工单 21)
|
|
4
4
|
*
|
|
5
|
-
* checker.ts 编排层通过 getConstraintCheck(id)
|
|
6
|
-
*
|
|
5
|
+
* checker.ts 编排层通过 getConstraintCheck(id) 查找实现。
|
|
6
|
+
*
|
|
7
|
+
* 注册表闭环(ADR-0001):模块加载时校验全部 kind='check' 的内置约束
|
|
8
|
+
* 都有已注册 checker,且注册表中没有无对应 check 定义的孤儿实现;
|
|
9
|
+
* 任一不满足即抛错(加载期失败,不许静默 pass)。
|
|
7
10
|
*/
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
12
|
exports.getConstraintCheck = getConstraintCheck;
|
|
10
13
|
exports.registeredCheckCount = registeredCheckCount;
|
|
14
|
+
const definitions_1 = require("../definitions");
|
|
11
15
|
const iron_flags_1 = require("./iron-flags");
|
|
12
|
-
const guideline_flags_1 = require("./guideline-flags");
|
|
13
|
-
const always_pass_1 = require("./always-pass");
|
|
14
16
|
const no_bypass_checkpoint_1 = require("./no-bypass-checkpoint");
|
|
15
17
|
const no_test_simplification_1 = require("./no-test-simplification");
|
|
16
|
-
const no_fuzzy_completion_claim_1 = require("./no-fuzzy-completion-claim");
|
|
17
|
-
const no_performative_agreement_1 = require("./no-performative-agreement");
|
|
18
|
-
const no_excuse_patterns_1 = require("./no-excuse-patterns");
|
|
19
|
-
const no_any_type_1 = require("./no-any-type");
|
|
20
18
|
const capability_sync_1 = require("./capability-sync");
|
|
21
|
-
const no_simplification_without_approval_1 = require("./no-simplification-without-approval");
|
|
22
|
-
const test_coverage_1 = require("./test-coverage");
|
|
23
19
|
const context_doc_sync_1 = require("./context-doc-sync");
|
|
24
20
|
const docs_freshness_1 = require("./docs-freshness");
|
|
25
|
-
const
|
|
21
|
+
const no_hardcoded_credentials_1 = require("./no-hardcoded-credentials");
|
|
26
22
|
const CHECKS = [
|
|
27
23
|
// Iron Laws
|
|
28
|
-
no_bypass_checkpoint_1.noBypassCheckpoint,
|
|
29
|
-
iron_flags_1.noSelfApproval,
|
|
30
24
|
iron_flags_1.noCompletionWithoutVerification,
|
|
31
|
-
no_test_simplification_1.noTestSimplification,
|
|
32
25
|
iron_flags_1.incrementalProgress,
|
|
33
|
-
iron_flags_1.verifyExternalCapability,
|
|
34
|
-
iron_flags_1.noImplementationWithoutRequirementReview,
|
|
35
26
|
iron_flags_1.noImplementationWithoutRequirement,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
iron_flags_1.noClaimWithoutEvidence,
|
|
39
|
-
iron_flags_1.noDeleteWithoutContext,
|
|
40
|
-
no_performative_agreement_1.noPerformativeAgreement,
|
|
41
|
-
iron_flags_1.twoStageReviewRequired,
|
|
27
|
+
no_test_simplification_1.noTestSimplification,
|
|
28
|
+
docs_freshness_1.docsFreshness,
|
|
42
29
|
// Guidelines
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
no_any_type_1.noAnyType,
|
|
46
|
-
guideline_flags_1.simplestSolutionFirst,
|
|
47
|
-
guideline_flags_1.noCreationWithoutReuseCheck,
|
|
30
|
+
no_hardcoded_credentials_1.noHardcodedCredentials,
|
|
31
|
+
no_bypass_checkpoint_1.noBypassCheckpoint,
|
|
48
32
|
capability_sync_1.capabilitySync,
|
|
49
|
-
no_simplification_without_approval_1.noSimplificationWithoutApproval,
|
|
50
|
-
guideline_flags_1.noSkillWithoutTest,
|
|
51
|
-
test_coverage_1.testCoverageRequired,
|
|
52
33
|
context_doc_sync_1.contextDocSync,
|
|
53
|
-
docs_freshness_1.docsFreshness,
|
|
54
|
-
no_excuse_patterns_1.noExcusePatterns,
|
|
55
|
-
yagni_1.yagniCheck,
|
|
56
|
-
// 行为类(promptInjection 驱动)恒通过
|
|
57
|
-
always_pass_1.surgicalChangesOnly,
|
|
58
|
-
always_pass_1.noModelForDeterministic,
|
|
59
|
-
always_pass_1.noConflictBlending,
|
|
60
|
-
always_pass_1.readBeforeWrite,
|
|
61
|
-
always_pass_1.followConventions,
|
|
62
|
-
always_pass_1.firstPrinciplesFirst,
|
|
63
|
-
always_pass_1.fixTheProblemNotTheGate,
|
|
64
|
-
always_pass_1.diagnosisToFixGate,
|
|
65
|
-
// Tips
|
|
66
|
-
always_pass_1.readmeRequired,
|
|
67
|
-
always_pass_1.docRequiredForPublicApi,
|
|
68
34
|
];
|
|
69
35
|
const registry = new Map(CHECKS.map(c => [c.id, c]));
|
|
36
|
+
// ========================================
|
|
37
|
+
// 注册表闭环校验(加载期)
|
|
38
|
+
// ========================================
|
|
39
|
+
const checkConstraints = (0, definitions_1.getAllConstraints)().filter(c => c.kind === 'check');
|
|
40
|
+
for (const c of checkConstraints) {
|
|
41
|
+
if (!registry.has(c.id)) {
|
|
42
|
+
throw new Error(`[harness] 约束注册表闭环校验失败:kind='check' 的约束 "${c.id}" 未注册 checker。` +
|
|
43
|
+
`请在 checkers/ 中实现并注册,或将该约束降级为 kind='prompt'。`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
for (const id of registry.keys()) {
|
|
47
|
+
if (!checkConstraints.some(c => c.id === id)) {
|
|
48
|
+
throw new Error(`[harness] 约束注册表闭环校验失败:checker "${id}" 没有对应的 kind='check' 约束定义。` +
|
|
49
|
+
`请在 definitions/ 中补齐定义,或从注册表移除。`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
70
52
|
/**
|
|
71
|
-
* 按约束 ID 查找检查实现;未注册返回 undefined
|
|
53
|
+
* 按约束 ID 查找检查实现;未注册返回 undefined
|
|
54
|
+
* (编排层对 kind='check' 未注册的情况抛错,kind='prompt' 不查表)
|
|
72
55
|
*/
|
|
73
56
|
function getConstraintCheck(id) {
|
|
74
57
|
return registry.get(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AA6DH,gDAEC;AAKD,oDAEC;AAnED,gDAAmD;AAEnD,6CAIsB;AACtB,iEAA4D;AAC5D,qEAAgE;AAChE,uDAAmD;AACnD,yDAAoD;AACpD,qDAAiD;AACjD,yEAAoE;AAEpE,MAAM,MAAM,GAAsB;IAChC,YAAY;IACZ,4CAA+B;IAC/B,gCAAmB;IACnB,+CAAkC;IAClC,6CAAoB;IACpB,8BAAa;IACb,aAAa;IACb,iDAAsB;IACtB,yCAAkB;IAClB,gCAAc;IACd,iCAAc;CACf,CAAC;AAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAA0B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,2CAA2C;AAC3C,eAAe;AACf,2CAA2C;AAE3C,MAAM,gBAAgB,GAAG,IAAA,+BAAiB,GAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AAE7E,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,2CAA2C,CAAC,CAAC,EAAE,gBAAgB;YAC/D,6CAA6C,CAC9C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,kCAAkC,EAAE,4BAA4B;YAChE,gCAAgC,CACjC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,EAAU;IAC3C,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 铁律层轻量检查(工单 21):纯上下文证据标志判定,无 I/O
|
|
3
|
+
*
|
|
4
|
+
* ADR-0001 后仅存活的三个 flag:hasVerificationEvidence / hasSingleTask / hasRequirement
|
|
5
|
+
*
|
|
6
|
+
* 三态语义(ADR-0001 防爆措施):
|
|
7
|
+
* - undefined = flag 未接线 → skip(不评估,CLI pre-commit 等路径不误报违规)
|
|
8
|
+
* - 显式 false → fail;true → pass
|
|
3
9
|
*/
|
|
4
|
-
export declare const noSelfApproval: import("./types").ConstraintCheck;
|
|
5
10
|
export declare const noCompletionWithoutVerification: import("./types").ConstraintCheck;
|
|
6
11
|
export declare const incrementalProgress: import("./types").ConstraintCheck;
|
|
7
|
-
export declare const verifyExternalCapability: import("./types").ConstraintCheck;
|
|
8
|
-
export declare const noImplementationWithoutRequirementReview: import("./types").ConstraintCheck;
|
|
9
12
|
export declare const noImplementationWithoutRequirement: import("./types").ConstraintCheck;
|
|
10
|
-
export declare const preferWorktree: import("./types").ConstraintCheck;
|
|
11
|
-
export declare const noClaimWithoutEvidence: import("./types").ConstraintCheck;
|
|
12
|
-
export declare const noDeleteWithoutContext: import("./types").ConstraintCheck;
|
|
13
|
-
export declare const twoStageReviewRequired: import("./types").ConstraintCheck;
|
|
14
13
|
//# sourceMappingURL=iron-flags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iron-flags.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/iron-flags.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"iron-flags.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/iron-flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,+BAA+B,mCAG3C,CAAC;AAEF,eAAO,MAAM,mBAAmB,mCAG/B,CAAC;AAEF,eAAO,MAAM,kCAAkC,mCAG9C,CAAC"}
|
|
@@ -1,24 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* 铁律层轻量检查(工单 21):纯上下文证据标志判定,无 I/O
|
|
4
|
+
*
|
|
5
|
+
* ADR-0001 后仅存活的三个 flag:hasVerificationEvidence / hasSingleTask / hasRequirement
|
|
6
|
+
*
|
|
7
|
+
* 三态语义(ADR-0001 防爆措施):
|
|
8
|
+
* - undefined = flag 未接线 → skip(不评估,CLI pre-commit 等路径不误报违规)
|
|
9
|
+
* - 显式 false → fail;true → pass
|
|
4
10
|
*/
|
|
5
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
12
|
+
exports.noImplementationWithoutRequirement = exports.incrementalProgress = exports.noCompletionWithoutVerification = void 0;
|
|
7
13
|
const types_1 = require("./types");
|
|
8
|
-
exports.
|
|
9
|
-
exports.
|
|
10
|
-
exports.
|
|
11
|
-
// undefined = 未验证 → Iron Law 必须显式确认
|
|
12
|
-
ctx => ctx.hasSingleTask === true);
|
|
13
|
-
exports.verifyExternalCapability = (0, types_1.contextFlag)('verify_external_capability', ctx => ctx.hasExternalCapabilityVerification === true);
|
|
14
|
-
exports.noImplementationWithoutRequirementReview = (0, types_1.contextFlag)('no_implementation_without_requirement_review', ctx => ctx.hasRequirementReview === true);
|
|
15
|
-
exports.noImplementationWithoutRequirement = (0, types_1.contextFlag)('no_implementation_without_requirement', ctx => ctx.hasRequirement === true);
|
|
16
|
-
exports.preferWorktree = (0, types_1.contextFlag)('prefer_worktree', ctx => ctx.hasWorktree === true);
|
|
17
|
-
exports.noClaimWithoutEvidence = (0, types_1.contextFlag)('no_claim_without_evidence', ctx => ctx.hasVerificationEvidence === true ||
|
|
18
|
-
(ctx.taskDescription || '').includes('test') ||
|
|
19
|
-
ctx.hasTest === true);
|
|
20
|
-
exports.noDeleteWithoutContext = (0, types_1.contextFlag)('no_delete_without_context', ctx => ctx.hasRequirementReview === true ||
|
|
21
|
-
ctx.hasRequirement === true ||
|
|
22
|
-
ctx.isExistingDesign === true);
|
|
23
|
-
exports.twoStageReviewRequired = (0, types_1.contextFlag)('two_stage_review_required', ctx => ctx.hasTwoStageReview === true);
|
|
14
|
+
exports.noCompletionWithoutVerification = (0, types_1.contextEvidenceFlag)('no_completion_without_verification', ctx => ctx.hasVerificationEvidence);
|
|
15
|
+
exports.incrementalProgress = (0, types_1.contextEvidenceFlag)('incremental_progress', ctx => ctx.hasSingleTask);
|
|
16
|
+
exports.noImplementationWithoutRequirement = (0, types_1.contextEvidenceFlag)('no_implementation_without_requirement', ctx => ctx.hasRequirement);
|
|
24
17
|
//# sourceMappingURL=iron-flags.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iron-flags.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/iron-flags.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"iron-flags.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/iron-flags.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,mCAA8C;AAEjC,QAAA,+BAA+B,GAAG,IAAA,2BAAmB,EAChE,oCAAoC,EACpC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,uBAAuB,CACnC,CAAC;AAEW,QAAA,mBAAmB,GAAG,IAAA,2BAAmB,EACpD,sBAAsB,EACtB,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CACzB,CAAC;AAEW,QAAA,kCAAkC,GAAG,IAAA,2BAAmB,EACnE,uCAAuC,EACvC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAC1B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* no_hardcoded_credentials:硬编码凭证扫描(ADR-0001:shell 扫描逻辑接入真 checker)
|
|
3
|
+
*
|
|
4
|
+
* 扫描 staged diff 的新增行(无 staged diff 时退化为变更文件内容),
|
|
5
|
+
* 命中常见私钥/密码/token 模式即 fail。
|
|
6
|
+
*
|
|
7
|
+
* 模板文件(.example/.sample/.template)与占位符值(your_xxx、process.env 引用等)豁免。
|
|
8
|
+
*/
|
|
9
|
+
import type { ConstraintCheck } from './types';
|
|
10
|
+
/** 判定一段文本是否包含硬编码凭证 */
|
|
11
|
+
export declare function containsHardcodedCredential(text: string): boolean;
|
|
12
|
+
export declare const noHardcodedCredentials: ConstraintCheck;
|
|
13
|
+
//# sourceMappingURL=no-hardcoded-credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-hardcoded-credentials.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/no-hardcoded-credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAgC/C,sBAAsB;AACtB,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUjE;AAED,eAAO,MAAM,sBAAsB,EAAE,eAoCpC,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* no_hardcoded_credentials:硬编码凭证扫描(ADR-0001:shell 扫描逻辑接入真 checker)
|
|
4
|
+
*
|
|
5
|
+
* 扫描 staged diff 的新增行(无 staged diff 时退化为变更文件内容),
|
|
6
|
+
* 命中常见私钥/密码/token 模式即 fail。
|
|
7
|
+
*
|
|
8
|
+
* 模板文件(.example/.sample/.template)与占位符值(your_xxx、process.env 引用等)豁免。
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.noHardcodedCredentials = void 0;
|
|
12
|
+
exports.containsHardcodedCredential = containsHardcodedCredential;
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
/** 私钥/令牌指纹模式(命中即违规,无例外) */
|
|
16
|
+
const FINGERPRINT_PATTERNS = [
|
|
17
|
+
// PEM 私钥头
|
|
18
|
+
/-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY(?: BLOCK)?-----/,
|
|
19
|
+
// AWS Access Key ID
|
|
20
|
+
/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/,
|
|
21
|
+
// GitHub token
|
|
22
|
+
/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}\b/,
|
|
23
|
+
/\bgithub_pat_[A-Za-z0-9_]{20,}\b/,
|
|
24
|
+
// Slack token
|
|
25
|
+
/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/,
|
|
26
|
+
// Google API key
|
|
27
|
+
/\bAIza[0-9A-Za-z_-]{35}\b/,
|
|
28
|
+
];
|
|
29
|
+
/** 通用赋值模式:password/secret/token/api key = "字面量"(不要求前词边界,覆盖 dbPassword 等 camelCase) */
|
|
30
|
+
const ASSIGNMENT_PATTERN = /(?:password|passwd|secret|api[_-]?key|access[_-]?token|auth[_-]?token)\b\s*[:=]\s*['"][^'"\n]{8,}['"]/i;
|
|
31
|
+
/** 占位符/环境变量引用等明显非真实值 */
|
|
32
|
+
const PLACEHOLDER_PATTERN = /process\.env|your[_-]|<[^>]+>|\$\{|xxx+|placeholder|example|changeme|dummy|fake|test/i;
|
|
33
|
+
/** 允许占位符的模板文件后缀 */
|
|
34
|
+
const TEMPLATE_SUFFIXES = ['.example', '.sample', '.template', '.dist'];
|
|
35
|
+
function isTemplateFile(file) {
|
|
36
|
+
return TEMPLATE_SUFFIXES.some(s => file.endsWith(s));
|
|
37
|
+
}
|
|
38
|
+
/** 判定一段文本是否包含硬编码凭证 */
|
|
39
|
+
function containsHardcodedCredential(text) {
|
|
40
|
+
for (const line of text.split('\n')) {
|
|
41
|
+
// 占位符/环境变量引用行整体豁免(your_xxx、process.env、示例值等)
|
|
42
|
+
if (PLACEHOLDER_PATTERN.test(line))
|
|
43
|
+
continue;
|
|
44
|
+
for (const pattern of FINGERPRINT_PATTERNS) {
|
|
45
|
+
if (pattern.test(line))
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
if (ASSIGNMENT_PATTERN.test(line))
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
exports.noHardcodedCredentials = {
|
|
54
|
+
id: 'no_hardcoded_credentials',
|
|
55
|
+
evaluate: async (env) => {
|
|
56
|
+
const files = (env.context.changedFiles || []).filter(f => !isTemplateFile(f));
|
|
57
|
+
// 1) staged diff 新增行
|
|
58
|
+
let scanned = false;
|
|
59
|
+
try {
|
|
60
|
+
const diff = await env.stagedDiff();
|
|
61
|
+
const added = diff
|
|
62
|
+
.split('\n')
|
|
63
|
+
.filter(l => l.startsWith('+') && !l.startsWith('+++'))
|
|
64
|
+
.map(l => l.slice(1))
|
|
65
|
+
.join('\n');
|
|
66
|
+
if (added.trim().length > 0) {
|
|
67
|
+
scanned = true;
|
|
68
|
+
if (containsHardcodedCredential(added))
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// diff 不可用 → 退化为文件内容扫描
|
|
74
|
+
}
|
|
75
|
+
// 2) 变更文件内容(diff 为空或不可用时)
|
|
76
|
+
if (!scanned) {
|
|
77
|
+
for (const file of files) {
|
|
78
|
+
try {
|
|
79
|
+
const content = (0, fs_1.readFileSync)((0, path_1.join)(env.projectPath, file), 'utf-8');
|
|
80
|
+
if (containsHardcodedCredential(content))
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// 文件不可读(已删除/二进制)→ 跳过
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=no-hardcoded-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-hardcoded-credentials.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/no-hardcoded-credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,21 +23,32 @@ export interface CheckEnv {
|
|
|
23
23
|
/** 源码根相对路径文件列表(run 内 cached) */
|
|
24
24
|
srcScan(root: string): string[];
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* 检查结果三态(ADR-0001 存在性探测 / flag 未接线):
|
|
28
|
+
* - true = 满足(pass)
|
|
29
|
+
* - false = 违反(fail)
|
|
30
|
+
* - 'skip' = 未评估(项目未采用对应约定,或证据 flag 未接线),不计 pass/fail
|
|
31
|
+
*/
|
|
32
|
+
export type CheckOutcome = boolean | 'skip';
|
|
26
33
|
/**
|
|
27
34
|
* 单条约束检查实现
|
|
28
35
|
*/
|
|
29
36
|
export interface ConstraintCheck {
|
|
30
37
|
/** 约束 ID(与 definitions 一致) */
|
|
31
38
|
id: string;
|
|
32
|
-
/** 检查主体:true =
|
|
33
|
-
evaluate(env: CheckEnv): Promise<
|
|
39
|
+
/** 检查主体:true = 满足;false = 违反;'skip' = 未评估 */
|
|
40
|
+
evaluate(env: CheckEnv): Promise<CheckOutcome> | CheckOutcome;
|
|
34
41
|
}
|
|
35
42
|
/**
|
|
36
43
|
* 构造纯上下文标志检查(无 I/O 的轻量约束)
|
|
37
44
|
*/
|
|
38
45
|
export declare function contextFlag(id: string, predicate: (context: ConstraintContext) => boolean): ConstraintCheck;
|
|
39
46
|
/**
|
|
40
|
-
*
|
|
47
|
+
* 构造证据标志检查(ADR-0001:flag 未接线 = skip 而非 fail)
|
|
48
|
+
*
|
|
49
|
+
* - flag === undefined:调用方未接线该证据 → 'skip'(不评估,不误报违规)
|
|
50
|
+
* - flag === false:显式无证据 → fail
|
|
51
|
+
* - flag === true:有证据 → pass
|
|
41
52
|
*/
|
|
42
|
-
export declare function
|
|
53
|
+
export declare function contextEvidenceFlag(id: string, pick: (context: ConstraintContext) => boolean | undefined): ConstraintCheck;
|
|
43
54
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,qCAAqC;IACrC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,gCAAgC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,qCAAqC;IACrC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,gCAAgC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;CAC/D;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,GACjD,eAAe,CAEjB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,GAAG,SAAS,GACxD,eAAe,CASjB"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.contextFlag = contextFlag;
|
|
10
|
-
exports.
|
|
10
|
+
exports.contextEvidenceFlag = contextEvidenceFlag;
|
|
11
11
|
/**
|
|
12
12
|
* 构造纯上下文标志检查(无 I/O 的轻量约束)
|
|
13
13
|
*/
|
|
@@ -15,9 +15,21 @@ function contextFlag(id, predicate) {
|
|
|
15
15
|
return { id, evaluate: (env) => predicate(env.context) };
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* 构造证据标志检查(ADR-0001:flag 未接线 = skip 而非 fail)
|
|
19
|
+
*
|
|
20
|
+
* - flag === undefined:调用方未接线该证据 → 'skip'(不评估,不误报违规)
|
|
21
|
+
* - flag === false:显式无证据 → fail
|
|
22
|
+
* - flag === true:有证据 → pass
|
|
19
23
|
*/
|
|
20
|
-
function
|
|
21
|
-
return {
|
|
24
|
+
function contextEvidenceFlag(id, pick) {
|
|
25
|
+
return {
|
|
26
|
+
id,
|
|
27
|
+
evaluate: (env) => {
|
|
28
|
+
const value = pick(env.context);
|
|
29
|
+
if (value === undefined)
|
|
30
|
+
return 'skip';
|
|
31
|
+
return value;
|
|
32
|
+
},
|
|
33
|
+
};
|
|
22
34
|
}
|
|
23
35
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA4CH,kCAKC;AASD,kDAYC;AA7BD;;GAEG;AACH,SAAgB,WAAW,CACzB,EAAU,EACV,SAAkD;IAElD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,mBAAmB,CACjC,EAAU,EACV,IAAyD;IAEzD,OAAO;QACL,EAAE;QACF,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -22,14 +22,17 @@ export declare function listHeadDirs(projectPath: string): Set<string> | null;
|
|
|
22
22
|
export declare function isNewDirectory(headDirs: Set<string> | null, filePath: string): boolean;
|
|
23
23
|
/**
|
|
24
24
|
* 检测触发条件
|
|
25
|
+
*
|
|
26
|
+
* ADR-0001:变更包含代码文件时,在主推断之外附加 code_implementation
|
|
27
|
+
* (返回数组 [主推断, 'code_implementation'];主推断逻辑保持不变)。
|
|
25
28
|
*/
|
|
26
29
|
export declare function detectTrigger(changedFiles: string[], options: {
|
|
27
30
|
trigger?: ConstraintTrigger;
|
|
28
31
|
projectPath?: string;
|
|
29
|
-
}): ConstraintTrigger;
|
|
32
|
+
}): ConstraintTrigger | ConstraintTrigger[];
|
|
30
33
|
/**
|
|
31
34
|
* 检测是否有失败的测试记录
|
|
32
|
-
* 扫描
|
|
35
|
+
* 扫描 trace 文件(DEFAULT_TRACE_FILE)中最近的记录
|
|
33
36
|
*/
|
|
34
37
|
export declare function detectFailingTest(projectPath: string): Promise<boolean>;
|
|
35
38
|
/**
|
|
@@ -39,7 +42,7 @@ export declare function detectFailingTest(projectPath: string): Promise<boolean>
|
|
|
39
42
|
export declare function detectRootCauseInvestigation(projectPath: string): boolean;
|
|
40
43
|
/**
|
|
41
44
|
* 检测是否有验证证据
|
|
42
|
-
* 检查
|
|
45
|
+
* 检查 trace 文件(DEFAULT_TRACE_FILE)中最近的成功验证记录
|
|
43
46
|
*/
|
|
44
47
|
export declare function detectVerificationEvidence(projectPath: string): Promise<boolean>;
|
|
45
48
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEnF;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAU9F;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAepE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtF;AASD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D,iBAAiB,GAAG,iBAAiB,EAAE,CA2BzC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB7E;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAgBzE;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBtF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAqB9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAU3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAY7D;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmB7B"}
|