@dommaker/harness 1.9.0 → 1.11.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 +17 -0
- package/README.md +9 -12
- package/dist/cli/commands/check.d.ts +3 -3
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +41 -78
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/constraints-report.d.ts +2 -10
- package/dist/cli/commands/constraints-report.d.ts.map +1 -1
- package/dist/cli/commands/constraints-report.js +4 -57
- package/dist/cli/commands/constraints-report.js.map +1 -1
- package/dist/cli/commands/constraints-retire.d.ts +9 -23
- package/dist/cli/commands/constraints-retire.d.ts.map +1 -1
- package/dist/cli/commands/constraints-retire.js +39 -121
- package/dist/cli/commands/constraints-retire.js.map +1 -1
- package/dist/cli/commands/constraints.d.ts +3 -8
- package/dist/cli/commands/constraints.d.ts.map +1 -1
- package/dist/cli/commands/constraints.js +8 -23
- package/dist/cli/commands/constraints.js.map +1 -1
- package/dist/cli/commands/definitions.d.ts.map +1 -1
- package/dist/cli/commands/definitions.js +7 -12
- package/dist/cli/commands/definitions.js.map +1 -1
- package/dist/cli/commands/init.d.ts +0 -32
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +7 -149
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +14 -17
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/scaffold-templates.d.ts +1 -3
- package/dist/cli/commands/scaffold-templates.d.ts.map +1 -1
- package/dist/cli/commands/scaffold-templates.js +2 -53
- package/dist/cli/commands/scaffold-templates.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts +0 -2
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +0 -10
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/commands/status.js +10 -10
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/sync-docs/agents-syncer.d.ts +0 -2
- package/dist/cli/commands/sync-docs/agents-syncer.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/agents-syncer.js +4 -23
- package/dist/cli/commands/sync-docs/agents-syncer.js.map +1 -1
- package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
- package/dist/core/constraints/capabilities-parser.js +16 -4
- package/dist/core/constraints/capabilities-parser.js.map +1 -1
- package/dist/core/constraints/checker.d.ts +15 -24
- package/dist/core/constraints/checker.d.ts.map +1 -1
- package/dist/core/constraints/checker.js +33 -72
- package/dist/core/constraints/checker.js.map +1 -1
- package/dist/core/constraints/checkers/docs-freshness.js +1 -1
- package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
- package/dist/core/constraints/checkers/governance-presence.d.ts +2 -1
- package/dist/core/constraints/checkers/governance-presence.d.ts.map +1 -1
- package/dist/core/constraints/checkers/governance-presence.js +4 -3
- package/dist/core/constraints/checkers/governance-presence.js.map +1 -1
- package/dist/core/constraints/checkers/index.d.ts +1 -1
- package/dist/core/constraints/checkers/index.d.ts.map +1 -1
- package/dist/core/constraints/checkers/index.js +4 -8
- package/dist/core/constraints/checkers/index.js.map +1 -1
- package/dist/core/constraints/checkers/iron-flags.d.ts +3 -4
- package/dist/core/constraints/checkers/iron-flags.d.ts.map +1 -1
- package/dist/core/constraints/checkers/iron-flags.js +4 -5
- package/dist/core/constraints/checkers/iron-flags.js.map +1 -1
- package/dist/core/constraints/checkers/no-test-simplification.js +1 -1
- package/dist/core/constraints/checkers/no-test-simplification.js.map +1 -1
- package/dist/core/constraints/checkers/types.d.ts +1 -1
- package/dist/core/constraints/checkers/types.js +1 -1
- package/dist/core/constraints/definitions/guidelines.d.ts +4 -4
- package/dist/core/constraints/definitions/guidelines.d.ts.map +1 -1
- package/dist/core/constraints/definitions/guidelines.js +9 -25
- package/dist/core/constraints/definitions/guidelines.js.map +1 -1
- package/dist/core/constraints/definitions/iron-laws.d.ts +4 -4
- package/dist/core/constraints/definitions/iron-laws.d.ts.map +1 -1
- package/dist/core/constraints/definitions/iron-laws.js +10 -81
- package/dist/core/constraints/definitions/iron-laws.js.map +1 -1
- package/dist/core/constraints/definitions.d.ts +7 -9
- package/dist/core/constraints/definitions.d.ts.map +1 -1
- package/dist/core/constraints/definitions.js +13 -16
- package/dist/core/constraints/definitions.js.map +1 -1
- package/dist/core/constraints/index.d.ts +2 -5
- package/dist/core/constraints/index.d.ts.map +1 -1
- package/dist/core/constraints/index.js +3 -13
- package/dist/core/constraints/index.js.map +1 -1
- package/dist/core/constraints/injection-writer.d.ts +10 -38
- package/dist/core/constraints/injection-writer.d.ts.map +1 -1
- package/dist/core/constraints/injection-writer.js +17 -54
- package/dist/core/constraints/injection-writer.js.map +1 -1
- package/dist/core/constraints/run-env.d.ts +1 -10
- package/dist/core/constraints/run-env.d.ts.map +1 -1
- package/dist/core/constraints/run-env.js +1 -22
- package/dist/core/constraints/run-env.js.map +1 -1
- package/dist/core/constraints/usage-report.d.ts +6 -8
- package/dist/core/constraints/usage-report.d.ts.map +1 -1
- package/dist/core/constraints/usage-report.js +6 -11
- package/dist/core/constraints/usage-report.js.map +1 -1
- package/dist/core/effective-constraints.d.ts +12 -22
- package/dist/core/effective-constraints.d.ts.map +1 -1
- package/dist/core/effective-constraints.js +13 -30
- package/dist/core/effective-constraints.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 +3 -9
- package/dist/core/index.js.map +1 -1
- package/dist/core/project-config-loader.d.ts +4 -42
- package/dist/core/project-config-loader.d.ts.map +1 -1
- package/dist/core/project-config-loader.js +16 -125
- package/dist/core/project-config-loader.js.map +1 -1
- package/dist/core/validators/passes-gate.d.ts +2 -2
- package/dist/core/validators/passes-gate.js +6 -6
- package/dist/core/validators/passes-gate.js.map +1 -1
- package/dist/index.d.ts +9 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -18
- package/dist/index.js.map +1 -1
- package/dist/knowledge/lint.d.ts +17 -0
- package/dist/knowledge/lint.d.ts.map +1 -1
- package/dist/knowledge/lint.js +52 -0
- package/dist/knowledge/lint.js.map +1 -1
- package/dist/knowledge/store.d.ts +7 -0
- package/dist/knowledge/store.d.ts.map +1 -1
- package/dist/knowledge/store.js +48 -13
- package/dist/knowledge/store.js.map +1 -1
- package/dist/knowledge/types.d.ts +5 -1
- package/dist/knowledge/types.d.ts.map +1 -1
- package/dist/knowledge/types.js +5 -1
- package/dist/knowledge/types.js.map +1 -1
- package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
- package/dist/monitoring/trace-analyzer.js +11 -12
- package/dist/monitoring/trace-analyzer.js.map +1 -1
- package/dist/monitoring/traces.d.ts +4 -4
- package/dist/monitoring/traces.d.ts.map +1 -1
- package/dist/monitoring/traces.js +8 -8
- package/dist/monitoring/traces.js.map +1 -1
- package/dist/presets/standard.d.ts +8 -10
- package/dist/presets/standard.d.ts.map +1 -1
- package/dist/presets/standard.js +10 -16
- package/dist/presets/standard.js.map +1 -1
- package/dist/types/constraint.d.ts +24 -35
- package/dist/types/constraint.d.ts.map +1 -1
- package/dist/types/constraint.js +8 -7
- package/dist/types/constraint.js.map +1 -1
- package/dist/types/passes-gate.d.ts +5 -5
- package/dist/types/passes-gate.d.ts.map +1 -1
- package/dist/types/project-config.d.ts +8 -66
- package/dist/types/project-config.d.ts.map +1 -1
- package/dist/types/project-config.js +3 -2
- package/dist/types/project-config.js.map +1 -1
- package/dist/types/trace.d.ts +8 -10
- package/dist/types/trace.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/CONTEXT.md +2 -2
- package/src/__tests__/checker-extra.test.ts +37 -61
- package/src/__tests__/checker.test.ts +10 -115
- package/src/__tests__/effective-constraints.test.ts +18 -83
- package/src/__tests__/iron-laws.test.ts +71 -90
- package/src/__tests__/passes-gate-check.test.ts +2 -2
- package/src/__tests__/project-config-loader-extra.test.ts +22 -123
- package/src/__tests__/project-config-loader.test.ts +5 -33
- package/src/__tests__/public-exports.test.ts +8 -7
- package/src/__tests__/public-type-surface.test.ts +7 -5
- package/src/__tests__/public-value-surface.test.ts +1 -7
- package/src/__tests__/skip-semantics.test.ts +21 -37
- package/src/__tests__/trace-analyzer-extra.test.ts +14 -14
- package/src/__tests__/trace-analyzer.test.ts +21 -21
- package/src/__tests__/trace-collector.test.ts +22 -22
- package/src/__tests__/traces.test.ts +27 -28
- package/src/__tests__/usage-report-public-export.test.ts +21 -0
- package/src/cli/commands/CONTEXT.md +12 -12
- package/src/cli/commands/__tests__/check-read-count.test.ts +4 -15
- package/src/cli/commands/__tests__/check-skip-output.test.ts +14 -14
- package/src/cli/commands/__tests__/check.test.ts +14 -31
- package/src/cli/commands/__tests__/constraints-report-json-flag.test.ts +101 -0
- package/src/cli/commands/__tests__/constraints-report.test.ts +12 -80
- package/src/cli/commands/__tests__/constraints-retire.test.ts +42 -231
- package/src/cli/commands/__tests__/init-governance-io.test.ts +12 -58
- package/src/cli/commands/__tests__/init-ondisk.test.ts +13 -21
- package/src/cli/commands/__tests__/init.test.ts +1 -16
- package/src/cli/commands/__tests__/numeric-flag-assembly.test.ts +1 -1
- package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +1 -1
- package/src/cli/commands/__tests__/project-path-anchoring.test.ts +2 -2
- package/src/cli/commands/__tests__/registry.test.ts +1 -1
- package/src/cli/commands/__tests__/report-extra.test.ts +4 -4
- package/src/cli/commands/__tests__/report.test.ts +1 -1
- package/src/cli/commands/__tests__/scaffold.test.ts +4 -14
- package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +3 -3
- package/src/cli/commands/__tests__/status-extra.test.ts +14 -14
- package/src/cli/commands/__tests__/status.test.ts +12 -12
- package/src/cli/commands/__tests__/sync-docs-agents.test.ts +1 -1
- package/src/cli/commands/check.ts +43 -82
- package/src/cli/commands/constraints-report.ts +4 -59
- package/src/cli/commands/constraints-retire.ts +49 -154
- package/src/cli/commands/constraints.ts +11 -26
- package/src/cli/commands/definitions.ts +7 -12
- package/src/cli/commands/init.ts +8 -179
- package/src/cli/commands/report.ts +19 -23
- package/src/cli/commands/scaffold-templates.ts +1 -53
- package/src/cli/commands/scaffold.ts +0 -11
- package/src/cli/commands/status.ts +10 -10
- package/src/cli/commands/sync-docs/agents-syncer.ts +4 -25
- package/src/core/CONTEXT.md +9 -9
- package/src/core/constraints/__tests__/capability-counts.test.ts +5 -5
- package/src/core/constraints/__tests__/collect-constraints.test.ts +13 -8
- package/src/core/constraints/__tests__/git-evidence.test.ts +4 -7
- package/src/core/constraints/__tests__/injection-writer.test.ts +8 -61
- package/src/core/constraints/__tests__/run-env.test.ts +5 -34
- package/src/core/constraints/__tests__/trace-injection.test.ts +1 -1
- package/src/core/constraints/capabilities-parser.ts +17 -5
- package/src/core/constraints/checker.ts +39 -88
- package/src/core/constraints/checkers/__tests__/check-outcome.test.ts +5 -8
- package/src/core/constraints/checkers/__tests__/governance-presence.test.ts +1 -53
- package/src/core/constraints/checkers/__tests__/iron-flags.test.ts +5 -25
- package/src/core/constraints/checkers/docs-freshness.ts +1 -1
- package/src/core/constraints/checkers/governance-presence.ts +4 -3
- package/src/core/constraints/checkers/index.ts +4 -10
- package/src/core/constraints/checkers/iron-flags.ts +3 -12
- package/src/core/constraints/checkers/no-test-simplification.ts +1 -1
- package/src/core/constraints/checkers/types.ts +1 -1
- package/src/core/constraints/definitions/guidelines.ts +8 -25
- package/src/core/constraints/definitions/iron-laws.ts +9 -82
- package/src/core/constraints/definitions.ts +14 -15
- package/src/core/constraints/index.ts +4 -19
- package/src/core/constraints/injection-writer.ts +16 -61
- package/src/core/constraints/run-env.ts +1 -33
- package/src/core/constraints/usage-report.ts +9 -16
- package/src/core/effective-constraints.ts +14 -45
- package/src/core/index.ts +3 -10
- package/src/core/project-config-loader.ts +20 -145
- package/src/core/validators/passes-gate.ts +6 -6
- package/src/failure/CONTEXT.md +1 -1
- package/src/hooks/__tests__/bootstrap.test.ts +3 -5
- package/src/index.ts +28 -18
- package/src/knowledge/CONTEXT.md +4 -3
- package/src/knowledge/__tests__/lint.test.ts +84 -0
- package/src/knowledge/__tests__/store.test.ts +70 -0
- package/src/knowledge/lint.ts +60 -1
- package/src/knowledge/store.ts +48 -11
- package/src/knowledge/types.ts +7 -1
- package/src/monitoring/CONTEXT.md +1 -1
- package/src/monitoring/__tests__/trace-file-anchoring.test.ts +1 -1
- package/src/monitoring/__tests__/traces.test.ts +22 -22
- package/src/monitoring/trace-analyzer.ts +12 -13
- package/src/monitoring/traces.ts +8 -8
- package/src/presets/__tests__/standard.test.ts +12 -16
- package/src/presets/standard.ts +14 -23
- package/src/types/__tests__/types.test.ts +3 -3
- package/src/types/constraint.ts +26 -40
- package/src/types/passes-gate.ts +5 -5
- package/src/types/project-config.ts +8 -77
- package/src/types/trace.ts +8 -11
- package/dist/cli/commands/posteval-plan.d.ts +0 -15
- package/dist/cli/commands/posteval-plan.d.ts.map +0 -1
- package/dist/cli/commands/posteval-plan.js +0 -86
- package/dist/cli/commands/posteval-plan.js.map +0 -1
- package/dist/core/constraints/agent-prompt-renderer.d.ts +0 -32
- package/dist/core/constraints/agent-prompt-renderer.d.ts.map +0 -1
- package/dist/core/constraints/agent-prompt-renderer.js +0 -55
- package/dist/core/constraints/agent-prompt-renderer.js.map +0 -1
- package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts +0 -6
- package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts.map +0 -1
- package/dist/core/constraints/checkers/no-bypass-checkpoint.js +0 -40
- package/dist/core/constraints/checkers/no-bypass-checkpoint.js.map +0 -1
- package/dist/core/constraints/definitions/prompts.d.ts +0 -12
- package/dist/core/constraints/definitions/prompts.d.ts.map +0 -1
- package/dist/core/constraints/definitions/prompts.js +0 -400
- package/dist/core/constraints/definitions/prompts.js.map +0 -1
- package/dist/core/constraints/injection-drift.d.ts +0 -61
- package/dist/core/constraints/injection-drift.d.ts.map +0 -1
- package/dist/core/constraints/injection-drift.js +0 -131
- package/dist/core/constraints/injection-drift.js.map +0 -1
- package/dist/core/constraints/injection-renderer.d.ts +0 -23
- package/dist/core/constraints/injection-renderer.d.ts.map +0 -1
- package/dist/core/constraints/injection-renderer.js +0 -44
- package/dist/core/constraints/injection-renderer.js.map +0 -1
- package/src/cli/commands/__tests__/check-drift.test.ts +0 -158
- package/src/cli/commands/__tests__/init-injection.test.ts +0 -466
- package/src/cli/commands/__tests__/posteval-plan.test.ts +0 -204
- package/src/cli/commands/posteval-plan.ts +0 -98
- package/src/core/constraints/__tests__/agent-prompt-renderer.test.ts +0 -129
- package/src/core/constraints/__tests__/injection-drift.test.ts +0 -247
- package/src/core/constraints/agent-prompt-renderer.ts +0 -67
- package/src/core/constraints/checkers/__tests__/no-bypass-checkpoint.test.ts +0 -76
- package/src/core/constraints/checkers/no-bypass-checkpoint.ts +0 -40
- package/src/core/constraints/definitions/prompts.ts +0 -414
- package/src/core/constraints/injection-drift.ts +0 -142
- package/src/core/constraints/injection-renderer.ts +0 -44
package/dist/types/constraint.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* 约束类型定义
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* - check:必须带真实 checker,参与运行时检查与 trace 统计
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* - prompt
|
|
5
|
+
* severity 显式模型(ADR-0029,取代 ADR-0001 的三层命名与 kind 二元模型):
|
|
6
|
+
* - 全部约束 kind='check':必须带真实 checker,参与运行时检查与 trace 统计
|
|
7
|
+
* - severity 直接写死在定义上:error = 违规即阻断;warning = 违规告警不阻断;
|
|
8
|
+
* info = 仅记录
|
|
9
|
+
* - 纯文本提示层(kind='prompt' / promptInjection / 注入段渲染)已整体关停,
|
|
10
|
+
* 文本规则由消费方手写治理段承接
|
|
10
11
|
*/
|
|
11
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
13
|
exports.ConstraintViolationError = void 0;
|
|
@@ -16,8 +17,8 @@ exports.ConstraintViolationError = void 0;
|
|
|
16
17
|
class ConstraintViolationError extends Error {
|
|
17
18
|
result;
|
|
18
19
|
constructor(result) {
|
|
19
|
-
//
|
|
20
|
-
// error.message 是判定证据唯一的外溢面(harness#119)
|
|
20
|
+
// severity='error' 的违规在 checkConstraints 处直接 throw,CLI 的结构化输出块
|
|
21
|
+
// 走不到这里,error.message 是判定证据唯一的外溢面(harness#119)
|
|
21
22
|
const detail = result.evidence?.length
|
|
22
23
|
? `:\n${result.evidence.map((line) => ` - ${line}`).join('\n')}`
|
|
23
24
|
: '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraint.js","sourceRoot":"","sources":["../../src/types/constraint.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"constraint.js","sourceRoot":"","sources":["../../src/types/constraint.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AA+KH;;GAEG;AACH,MAAa,wBAAyB,SAAQ,KAAK;IACjC,MAAM,CAAmB;IAEzC,YAAY,MAAwB;QAClC,+DAA+D;QAC/D,+CAA+C;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM;YACpC,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACjE,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,sBAAsB,GAAG,MAAM,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAbD,4DAaC"}
|
|
@@ -69,14 +69,14 @@ export interface TestResult {
|
|
|
69
69
|
* PassesGate 验证违规
|
|
70
70
|
*/
|
|
71
71
|
export interface PassesGateViolation {
|
|
72
|
-
/**
|
|
72
|
+
/** 约束 ID */
|
|
73
73
|
id: string;
|
|
74
|
-
/**
|
|
74
|
+
/** 约束规则 */
|
|
75
75
|
rule: string;
|
|
76
76
|
/** 中文消息 */
|
|
77
77
|
message: string;
|
|
78
|
-
/**
|
|
79
|
-
|
|
78
|
+
/** 约束严重性(PassesGate 违规恒为阻断级) */
|
|
79
|
+
severity: 'error';
|
|
80
80
|
}
|
|
81
81
|
/**
|
|
82
82
|
* PassesGate check() 结果
|
|
@@ -84,7 +84,7 @@ export interface PassesGateViolation {
|
|
|
84
84
|
export interface PassesGateCheckResult {
|
|
85
85
|
/** 是否允许标记完成 */
|
|
86
86
|
allowed: boolean;
|
|
87
|
-
/**
|
|
87
|
+
/** 阻断级违规列表 */
|
|
88
88
|
violations?: PassesGateViolation[];
|
|
89
89
|
/** 原始测试结果 */
|
|
90
90
|
testResult?: TestResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passes-gate.d.ts","sourceRoot":"","sources":["../../src/types/passes-gate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,aAAa;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAEhB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU;IACV,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,MAAM,EAAE,OAAO,CAAC;IAEhB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,eAAe;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,
|
|
1
|
+
{"version":3,"file":"passes-gate.d.ts","sourceRoot":"","sources":["../../src/types/passes-gate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,aAAa;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAEhB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU;IACV,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,MAAM,EAAE,OAAO,CAAC;IAEhB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,eAAe;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IAEX,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAEhB,gCAAgC;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,eAAe;IACf,OAAO,EAAE,OAAO,CAAC;IAEjB,cAAc;IACd,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAEnC,aAAa;IACb,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB"}
|
|
@@ -1,51 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 项目级约束配置
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 允许项目启用/禁用 harness 内置约束(ADR-0029:项目自定义纯文本约束
|
|
5
|
+
* 已随文本注入层关停一并退役,文本规则由项目手写治理段承接)
|
|
5
6
|
*/
|
|
6
|
-
import type { Constraint
|
|
7
|
-
/**
|
|
8
|
-
* 自定义约束定义
|
|
9
|
-
*/
|
|
10
|
-
export interface CustomConstraintDefinition {
|
|
11
|
-
/** 约束 ID */
|
|
12
|
-
id: string;
|
|
13
|
-
/** 约束层级(可选,缺省 guideline) */
|
|
14
|
-
level?: ConstraintLevel;
|
|
15
|
-
/** 约束规则(可选) */
|
|
16
|
-
rule?: string;
|
|
17
|
-
/** 约束消息(可选) */
|
|
18
|
-
message?: string;
|
|
19
|
-
/** 触发条件(可选) */
|
|
20
|
-
trigger?: string | string[];
|
|
21
|
-
/** 描述(可选) */
|
|
22
|
-
description?: string;
|
|
23
|
-
/**
|
|
24
|
-
* Prompt 注入文本(可选)
|
|
25
|
-
*
|
|
26
|
-
* 自定义约束统一 kind='prompt'(无 checker),该字段是进入 CLAUDE.md
|
|
27
|
-
* 注入段(renderConstraintsSection)的唯一通道——缺省不出现在注入段,
|
|
28
|
-
* 与内置无 promptInjection 的 check 条目行为一致。
|
|
29
|
-
*/
|
|
30
|
-
promptInjection?: string;
|
|
31
|
-
/** 是否启用(可选,默认 true) */
|
|
32
|
-
enabled?: boolean;
|
|
33
|
-
/**
|
|
34
|
-
* 退役元数据(studio#82 D6 统一落点)
|
|
35
|
-
*
|
|
36
|
-
* 存在即视为已退役:不进生效集、不注入 CLAUDE.md。恢复 = 删除该段。
|
|
37
|
-
* 落点在 custom-constraints.yml 条目内(一处真相,不拆 config.yml 第二处)。
|
|
38
|
-
*/
|
|
39
|
-
retired?: {
|
|
40
|
-
at?: string;
|
|
41
|
-
reason?: string;
|
|
42
|
-
stats?: {
|
|
43
|
-
total: number;
|
|
44
|
-
fail: number;
|
|
45
|
-
failRate: number;
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
|
-
}
|
|
7
|
+
import type { Constraint } from './constraint';
|
|
49
8
|
/**
|
|
50
9
|
* 文档同步配置
|
|
51
10
|
*/
|
|
@@ -220,23 +179,12 @@ export interface ProjectConfig {
|
|
|
220
179
|
preset?: 'strict' | 'standard' | 'relaxed';
|
|
221
180
|
/** CI 接线平台(harness#143,缺省 github) */
|
|
222
181
|
ci?: CiConfig;
|
|
223
|
-
/**
|
|
224
|
-
* 项目适用场景标签(ADR-0001,如 'agent-skill'、'llm-app')
|
|
225
|
-
*
|
|
226
|
-
* 带 appliesTo 标签的 prompt 仅当 scenes 与其交集非空时进入生效集;
|
|
227
|
-
* 无 appliesTo 的条目不受影响。缺省为空 = 场景专属 prompt 默认不注入。
|
|
228
|
-
*/
|
|
229
|
-
scenes?: string[];
|
|
230
182
|
/** 治理配置 */
|
|
231
183
|
governance?: GovernanceConfig;
|
|
232
184
|
/** 内置约束启用/禁用配置 */
|
|
233
185
|
constraints?: Record<string, {
|
|
234
186
|
enabled?: boolean;
|
|
235
187
|
}>;
|
|
236
|
-
/** 自定义约束文件路径 */
|
|
237
|
-
custom_constraints_file?: string;
|
|
238
|
-
/** 自定义约束(直接定义) */
|
|
239
|
-
custom_constraints?: Record<string, CustomConstraintDefinition>;
|
|
240
188
|
/** Spec 验证配置 */
|
|
241
189
|
spec?: {
|
|
242
190
|
/** 是否启用 Spec 验证 */
|
|
@@ -250,21 +198,15 @@ export interface ProjectConfig {
|
|
|
250
198
|
};
|
|
251
199
|
}
|
|
252
200
|
/**
|
|
253
|
-
* 完整的约束配置(合并内置 +
|
|
201
|
+
* 完整的约束配置(合并内置 + preset 裁剪 + config.yml 禁用)
|
|
254
202
|
*/
|
|
255
203
|
export interface MergedConstraintsConfig {
|
|
256
|
-
/**
|
|
257
|
-
|
|
258
|
-
/** Guidelines(合并后) */
|
|
259
|
-
guidelines: Record<string, Constraint>;
|
|
260
|
-
/** Prompts(合并后,ADR-0001 新增;可选以兼容旧调用方,缺省回落内置 PROMPTS) */
|
|
261
|
-
prompts?: Record<string, Constraint>;
|
|
204
|
+
/** 生效的约束(合并后,单桶;severity 在条目上) */
|
|
205
|
+
constraints: Record<string, Constraint>;
|
|
262
206
|
/** 禁用的约束 ID */
|
|
263
207
|
disabled: string[];
|
|
264
|
-
/** 自定义约束 ID */
|
|
265
|
-
custom: string[];
|
|
266
208
|
/**
|
|
267
|
-
* config.yml `constraints.<id>`
|
|
209
|
+
* config.yml `constraints.<id>` 中非内置的未知 id
|
|
268
210
|
*
|
|
269
211
|
* 例如禁用了已被本版移除的约束 id 的残留配置。生效集计算静默忽略,
|
|
270
212
|
* 在此列出供诊断(lintEffectiveConfig / report)使用。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/types/project-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/types/project-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* 项目级约束配置
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* 允许项目启用/禁用 harness 内置约束(ADR-0029:项目自定义纯文本约束
|
|
6
|
+
* 已随文本注入层关停一并退役,文本规则由项目手写治理段承接)
|
|
6
7
|
*/
|
|
7
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
9
|
//# sourceMappingURL=project-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/types/project-config.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/types/project-config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
package/dist/types/trace.d.ts
CHANGED
|
@@ -24,16 +24,14 @@ export declare const DEFAULT_TRACE_FILE = ".harness/logs/traces.log";
|
|
|
24
24
|
export interface ExecutionTrace {
|
|
25
25
|
/** 约束 ID */
|
|
26
26
|
constraintId: string;
|
|
27
|
-
/**
|
|
28
|
-
|
|
27
|
+
/** 约束严重性(ADR-0029:显式 severity 取代三层 level 命名) */
|
|
28
|
+
severity: 'error' | 'warning' | 'info';
|
|
29
29
|
/** 检查时间(Unix timestamp) */
|
|
30
30
|
timestamp: number;
|
|
31
31
|
/** 检查结果(skip = 约定未采用/证据未接线,未评估;不计 pass/fail 分母) */
|
|
32
32
|
result: 'pass' | 'fail' | 'skip';
|
|
33
33
|
/** 操作类型(触发条件) */
|
|
34
34
|
operation?: string;
|
|
35
|
-
/** 严重性(从约束定义继承) */
|
|
36
|
-
severity?: 'error' | 'warning' | 'info';
|
|
37
35
|
/** 项目路径(用于区分多项目) */
|
|
38
36
|
projectPath?: string;
|
|
39
37
|
/** 会话 ID(用于追踪同一会话的多次检查) */
|
|
@@ -58,8 +56,8 @@ export interface ExecutionTrace {
|
|
|
58
56
|
export interface TraceSummary {
|
|
59
57
|
/** 约束 ID */
|
|
60
58
|
constraintId: string;
|
|
61
|
-
/**
|
|
62
|
-
|
|
59
|
+
/** 约束严重性 */
|
|
60
|
+
severity: 'error' | 'warning' | 'info';
|
|
63
61
|
/** 统计时间范围 */
|
|
64
62
|
timeRange: {
|
|
65
63
|
start: number;
|
|
@@ -95,8 +93,8 @@ export interface TraceAnomaly {
|
|
|
95
93
|
type: 'rising_fail_rate' | 'low_pass_rate';
|
|
96
94
|
/** 约束 ID */
|
|
97
95
|
constraintId: string;
|
|
98
|
-
/**
|
|
99
|
-
|
|
96
|
+
/** 约束严重性 */
|
|
97
|
+
severity: 'error' | 'warning' | 'info';
|
|
100
98
|
/** 异常描述 */
|
|
101
99
|
message: string;
|
|
102
100
|
/** 相关数据 */
|
|
@@ -116,8 +114,8 @@ export interface TraceAnomaly {
|
|
|
116
114
|
export interface TraceFilter {
|
|
117
115
|
/** 约束 ID(可选,不指定则查全部) */
|
|
118
116
|
constraintId?: string;
|
|
119
|
-
/**
|
|
120
|
-
|
|
117
|
+
/** 约束严重性(可选) */
|
|
118
|
+
severity?: 'error' | 'warning' | 'info';
|
|
121
119
|
/** 结果类型(可选) */
|
|
122
120
|
result?: 'pass' | 'fail' | 'skip';
|
|
123
121
|
/** 时间范围(可选) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/types/trace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAK7B,YAAY;IACZ,YAAY,EAAE,MAAM,CAAC;IAErB,
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/types/trace.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/CONTEXT.md
CHANGED
|
@@ -42,11 +42,11 @@
|
|
|
42
42
|
| 回滚 | 分工:版本化回退(单段——yml 数据文件 git 版本化,删段恢复)+ 提案回滚(多段 inverse,挂 studio#82 D6) |
|
|
43
43
|
| 文件驱动 CLI | yml 状态真值 + 一次性进程、无常驻生命周期;故不引 dispose 链(止步档 1) |
|
|
44
44
|
| 对照(reconcile) | CAPABILITIES.md 声明与源码实况的双向一致性判定(代码→文档查漏登,文档→代码查幽灵);唯一实现 `core/constraints/capabilities-reconcile.ts`,capability_sync / docs_freshness / sync-docs 共消费(ADR-0009)。一次 check run 内只算一次,经 `RunEnv.capabilities()` 供给两 checker(ADR-0023 决策 4) |
|
|
45
|
-
| 判定证据(evidence) | checker 随判定一并返回的路径级依据(`CheckDetail{pass, evidence}`,harness#119/ADR-0016);文案由 checker 措辞、消费端只打印,出口 = `ConstraintResult` / CLI 输出 / trace /
|
|
45
|
+
| 判定证据(evidence) | checker 随判定一并返回的路径级依据(`CheckDetail{pass, evidence}`,harness#119/ADR-0016);文案由 checker 措辞、消费端只打印,出口 = `ConstraintResult` / CLI 输出 / trace / error 级异常文案。不是第四种统计态:**违规** = 与本次变更有因果(进 pass/fail 分母),**提示** = `pass:true` + evidence(仓库级漂移等无因果缺口,只露出不拦) |
|
|
46
46
|
| 测试产物解读(test-output) | 从测试运行器 stdout 读出「过了没 / 哪些失败 / 覆盖率」的判定;唯一实现 `core/validators/test-output.ts`(包内,不进导出面),passes-gate / acceptance 共消费(ADR-0012)。两门禁判定依据不一致待 #93 裁决,覆盖率取数归属待 #94 裁决 |
|
|
47
47
|
| 飞轮指标(flywheel) | 知识条目的引用与消费度量(refCoverage / avgRefs / consumptionHitRate);唯一实现 `knowledge/flywheel-metrics.ts`(包内,不进导出面),canonical 分子为过滤 synthetic 后的 genuine refs,audit D6 / knowledge stats / knowledge health 共消费(ADR-0013,#81) |
|
|
48
48
|
| 测试夹具(project fixture) | 临时项目根 + 落盘声明;唯一实现 `test-setup/project-fixture.ts`(测试层,不进导出面)——`config` 槽是 `.harness/config.yml` 落点唯一正本(字符串原样落盘,畸形/脏配置用例依赖此口径),`traces` 槽/`writeProjectTraces` 是 trace 落盘唯一正本(路径锚定 `DEFAULT_TRACE_FILE`、序列化走 `appendJsonl` 生产写链,harness#108),其余文件走 `files` 相对路径;非缺省根必须经 `parentDir` **显式** opt-out(cwd 锚定用例语义),回收经 `mkdtemp-cleanup` 劫持(harness#90) |
|
|
49
|
-
| 运行级观察面(run env) | 一次 `harness check` 运行内对项目上行数据的只读视图,口径 = **同一文件至多读一次、跑完即弃、不做进程级全局**;唯一实现 `core/constraints/run-env.ts`,承载 `rawConfig()` / `
|
|
49
|
+
| 运行级观察面(run env) | 一次 `harness check` 运行内对项目上行数据的只读视图,口径 = **同一文件至多读一次、跑完即弃、不做进程级全局**;唯一实现 `core/constraints/run-env.ts`,承载 `rawConfig()` / `capabilities(population)` / `traceTail(limit)` / `sourceRoots()` 四个观察口(ADR-0029:`customConstraints(file)` 口随 custom 约束面退役移除)(配置与能力表的读取原进程级缓存已按 ADR-0023 决策 2 撤销),与 git 证据(#87/ADR-0021)同形:入口构造、沿调用链显式传递。与 `CheckEnv` 的分工是构造顺序决定的——`CheckEnv` 含 `context`,而 `context` 是经本观察面读文件算出的产物,故观察面只承载「不需要 context 就能造」的部分,`CheckEnv` 以 `extends RunEnv` 从它派生(ADR-0023);`RunEnv` / `RunTarget`(= `RunEnv \| 项目根路径`)经 `./core` 以类型面导出,供消费方共享同一份读取。**只读是硬契约**:运行期状态文件的写口不走本面,走 StateIO(#148) |
|
|
50
50
|
| 状态文件 IO(StateIO) | harness 自身运行期状态文件(`.harness/.state.json`)读写的可注入接缝:`read()`/`write()` 两方法、默认真实 fs 实现 `fileStateIO(projectPath)`、命令可选参数注入(照 `CommandIO` 模式,但不扩 `CommandIO`);唯一实现 `src/cli/state-io.ts`(cli 层,不进包根导出面),收编 check 智能提示与 status 两个写者,写语义统一为**读-改-写**(此前 `status` 不读就整文件重写、把 `check` 写的 `shownHints` 抹掉致提示去重失效,ADR-0026 已修)。决策 = **ADR-0026**,实现票 #148;与运行级观察面(只读、项目上行数据)分工:本面管 harness 自身状态、含写 |
|
|
51
51
|
|
|
52
52
|
## 注意事项
|
|
@@ -54,9 +54,9 @@ describe('ConstraintChecker - 补充覆盖', () => {
|
|
|
54
54
|
|
|
55
55
|
const result = checker.findApplicableConstraints(context);
|
|
56
56
|
|
|
57
|
-
expect(result.
|
|
57
|
+
expect(result.errors.length).toBeGreaterThan(0);
|
|
58
58
|
expect(
|
|
59
|
-
result.
|
|
59
|
+
result.errors.some(c => c.id === 'no_completion_without_verification')
|
|
60
60
|
).toBe(true);
|
|
61
61
|
});
|
|
62
62
|
|
|
@@ -68,9 +68,9 @@ describe('ConstraintChecker - 补充覆盖', () => {
|
|
|
68
68
|
const result = checker.findApplicableConstraints(context);
|
|
69
69
|
|
|
70
70
|
// file_creation 可能没有任何约束匹配
|
|
71
|
-
//
|
|
72
|
-
expect(Array.isArray(result.
|
|
73
|
-
expect(Array.isArray(result.
|
|
71
|
+
// 这个测试的目的是验证按 trigger 过滤逻辑
|
|
72
|
+
expect(Array.isArray(result.errors)).toBe(true);
|
|
73
|
+
expect(Array.isArray(result.warnings)).toBe(true);
|
|
74
74
|
});
|
|
75
75
|
});
|
|
76
76
|
|
|
@@ -99,25 +99,25 @@ describe('ConstraintChecker - 补充覆盖', () => {
|
|
|
99
99
|
await expect(checkBeforeExecution(context)).rejects.toThrow();
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
-
it('customConfig
|
|
102
|
+
it('customConfig 应替换内置集(空配置不检查内置 error 级约束)', async () => {
|
|
103
103
|
const context: ConstraintContext = {
|
|
104
104
|
operation: 'code_implementation',
|
|
105
105
|
hasTest: false,
|
|
106
106
|
hasVerificationEvidence: false,
|
|
107
107
|
};
|
|
108
108
|
|
|
109
|
-
//
|
|
109
|
+
// 内置 error 级约束下违规抛错
|
|
110
110
|
await expect(checkBeforeExecution(context)).rejects.toThrow();
|
|
111
111
|
|
|
112
112
|
// 空 customConfig 替换内置集 → 不抛
|
|
113
113
|
await expect(
|
|
114
|
-
checkBeforeExecution(context, {
|
|
114
|
+
checkBeforeExecution(context, { constraints: {}, disabled: [] })
|
|
115
115
|
).resolves.not.toThrow();
|
|
116
116
|
});
|
|
117
117
|
});
|
|
118
118
|
|
|
119
119
|
describe('checkConstraints 完整流程', () => {
|
|
120
|
-
it('
|
|
120
|
+
it('应该返回完整的检查结果', async () => {
|
|
121
121
|
const context: ConstraintContext = {
|
|
122
122
|
operation: 'commit',
|
|
123
123
|
projectPath: tempDir,
|
|
@@ -127,8 +127,8 @@ describe('ConstraintChecker - 补充覆盖', () => {
|
|
|
127
127
|
|
|
128
128
|
const result = await checkConstraints(context);
|
|
129
129
|
|
|
130
|
-
expect(result.
|
|
131
|
-
expect(result.
|
|
130
|
+
expect(result.errors).toBeDefined();
|
|
131
|
+
expect(result.warnings).toBeDefined();
|
|
132
132
|
expect(typeof result.passed).toBe('boolean');
|
|
133
133
|
expect(typeof result.warningCount).toBe('number');
|
|
134
134
|
});
|
|
@@ -137,80 +137,57 @@ describe('ConstraintChecker - 补充覆盖', () => {
|
|
|
137
137
|
describe('自定义约束配置', () => {
|
|
138
138
|
it('per-request customConfig 应该生效', () => {
|
|
139
139
|
const constraints = checker.getConstraints({
|
|
140
|
-
|
|
141
|
-
guidelines: {},
|
|
140
|
+
constraints: {},
|
|
142
141
|
disabled: [],
|
|
143
|
-
custom: [],
|
|
144
142
|
});
|
|
145
143
|
|
|
146
|
-
expect(constraints
|
|
147
|
-
expect(constraints.guidelines).toEqual({});
|
|
144
|
+
expect(constraints).toEqual({});
|
|
148
145
|
});
|
|
149
146
|
|
|
150
|
-
it('checkConstraint 带 customConfig
|
|
151
|
-
const context: ConstraintContext = {
|
|
147
|
+
it('checkConstraint 带 customConfig 应命中配置内约束', async () => {
|
|
148
|
+
const context: ConstraintContext = {
|
|
149
|
+
operation: 'code_implementation',
|
|
150
|
+
hasVerificationEvidence: true,
|
|
151
|
+
};
|
|
152
152
|
const customConfig = {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
id: '
|
|
156
|
-
kind: '
|
|
157
|
-
|
|
153
|
+
constraints: {
|
|
154
|
+
no_completion_without_verification: {
|
|
155
|
+
id: 'no_completion_without_verification',
|
|
156
|
+
kind: 'check' as const,
|
|
157
|
+
severity: 'error' as const,
|
|
158
158
|
rule: 'TEST',
|
|
159
159
|
message: 'test',
|
|
160
|
-
trigger: '
|
|
160
|
+
trigger: 'code_implementation',
|
|
161
161
|
enforcement: 'test',
|
|
162
162
|
},
|
|
163
163
|
},
|
|
164
|
-
guidelines: {},
|
|
165
164
|
disabled: [] as string[],
|
|
166
|
-
custom: [] as string[],
|
|
167
165
|
};
|
|
168
166
|
|
|
169
|
-
// 不带 customConfig
|
|
167
|
+
// 不带 customConfig:未生效的 id 不可见
|
|
170
168
|
const missing = await checkConstraint('test_only', context);
|
|
171
169
|
expect(missing.satisfied).toBe(false);
|
|
172
170
|
expect(missing.message).toContain('未知的约束');
|
|
173
171
|
|
|
174
|
-
// 带 customConfig
|
|
175
|
-
const hit = await checkConstraint('
|
|
176
|
-
expect(hit.id).toBe('
|
|
172
|
+
// 带 customConfig:命中配置内约束
|
|
173
|
+
const hit = await checkConstraint('no_completion_without_verification', context, customConfig);
|
|
174
|
+
expect(hit.id).toBe('no_completion_without_verification');
|
|
177
175
|
expect(hit.satisfied).toBe(true);
|
|
178
176
|
});
|
|
179
177
|
});
|
|
180
178
|
|
|
181
|
-
describe('
|
|
182
|
-
it('
|
|
183
|
-
const context: ConstraintContext = {
|
|
184
|
-
operation: 'code_implementation',
|
|
185
|
-
hasTest: true,
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
const result = await checker.check(
|
|
189
|
-
{
|
|
190
|
-
id: 'test_severity_iron',
|
|
191
|
-
kind: 'prompt',
|
|
192
|
-
level: 'iron_law',
|
|
193
|
-
rule: 'TEST',
|
|
194
|
-
message: 'test',
|
|
195
|
-
trigger: 'code_implementation',
|
|
196
|
-
enforcement: 'test',
|
|
197
|
-
},
|
|
198
|
-
context
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
expect(result).toBeDefined();
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
it('guideline 应该返回 warning', async () => {
|
|
179
|
+
describe('severity 透传', () => {
|
|
180
|
+
it('check 结果带约束定义的 severity', async () => {
|
|
205
181
|
const context: ConstraintContext = {
|
|
206
182
|
operation: 'code_implementation',
|
|
183
|
+
hasVerificationEvidence: true,
|
|
207
184
|
};
|
|
208
185
|
|
|
209
186
|
const result = await checker.check(
|
|
210
187
|
{
|
|
211
|
-
id: '
|
|
212
|
-
kind: '
|
|
213
|
-
|
|
188
|
+
id: 'no_completion_without_verification',
|
|
189
|
+
kind: 'check',
|
|
190
|
+
severity: 'error',
|
|
214
191
|
rule: 'TEST',
|
|
215
192
|
message: 'test',
|
|
216
193
|
trigger: 'code_implementation',
|
|
@@ -219,9 +196,8 @@ describe('ConstraintChecker - 补充覆盖', () => {
|
|
|
219
196
|
context
|
|
220
197
|
);
|
|
221
198
|
|
|
222
|
-
expect(result).
|
|
199
|
+
expect(result.severity).toBe('error');
|
|
223
200
|
});
|
|
224
|
-
|
|
225
201
|
});
|
|
226
202
|
|
|
227
203
|
describe('checkConstraint 快捷函数', () => {
|
|
@@ -251,8 +227,8 @@ describe('ConstraintChecker - 补充覆盖', () => {
|
|
|
251
227
|
});
|
|
252
228
|
});
|
|
253
229
|
|
|
254
|
-
describe('checkConstraints
|
|
255
|
-
it('
|
|
230
|
+
describe('checkConstraints error 级违规', () => {
|
|
231
|
+
it('error 级违规应该抛出 ConstraintViolationError', async () => {
|
|
256
232
|
const context: ConstraintContext = {
|
|
257
233
|
operation: 'code_implementation',
|
|
258
234
|
hasTest: false,
|