@dommaker/harness 1.4.0 → 1.6.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 +23 -0
- package/README.md +0 -2
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +28 -0
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/definitions.d.ts.map +1 -1
- package/dist/cli/commands/definitions.js +1 -39
- package/dist/cli/commands/definitions.js.map +1 -1
- package/dist/cli/commands/knowledge.d.ts +0 -19
- package/dist/cli/commands/knowledge.d.ts.map +1 -1
- package/dist/cli/commands/knowledge.js +0 -105
- package/dist/cli/commands/knowledge.js.map +1 -1
- package/dist/cli/commands/passes-gate.d.ts +0 -2
- package/dist/cli/commands/passes-gate.d.ts.map +1 -1
- package/dist/cli/commands/passes-gate.js +0 -1
- package/dist/cli/commands/passes-gate.js.map +1 -1
- package/dist/cli/commands/performance.d.ts +0 -4
- package/dist/cli/commands/performance.d.ts.map +1 -1
- package/dist/cli/commands/performance.js +10 -20
- package/dist/cli/commands/performance.js.map +1 -1
- package/dist/cli/commands/report.d.ts +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +2 -55
- 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 +4 -8
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/context/index.d.ts +2 -5
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +2 -8
- package/dist/context/index.js.map +1 -1
- package/dist/context/token-budget.d.ts +0 -29
- package/dist/context/token-budget.d.ts.map +1 -1
- package/dist/context/token-budget.js +1 -65
- package/dist/context/token-budget.js.map +1 -1
- package/dist/context/types.d.ts +0 -1
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/types.js +0 -9
- package/dist/context/types.js.map +1 -1
- package/dist/core/constraints/checker.d.ts +14 -0
- package/dist/core/constraints/checker.d.ts.map +1 -1
- package/dist/core/constraints/checker.js +27 -5
- package/dist/core/constraints/checker.js.map +1 -1
- package/dist/core/constraints/checkers/capability-sync.d.ts +17 -6
- package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -1
- package/dist/core/constraints/checkers/capability-sync.js +48 -19
- package/dist/core/constraints/checkers/capability-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 +15 -6
- package/dist/core/constraints/checkers/docs-freshness.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/types.d.ts +41 -2
- 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/git-evidence.d.ts +6 -3
- package/dist/core/constraints/git-evidence.d.ts.map +1 -1
- package/dist/core/constraints/git-evidence.js +6 -3
- package/dist/core/constraints/git-evidence.js.map +1 -1
- package/dist/core/index.d.ts +1 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -9
- package/dist/core/index.js.map +1 -1
- package/dist/core/spec/validator.d.ts +2 -0
- package/dist/core/spec/validator.d.ts.map +1 -1
- package/dist/core/spec/validator.js +9 -11
- package/dist/core/spec/validator.js.map +1 -1
- package/dist/core/validators/index.d.ts +1 -1
- package/dist/core/validators/index.d.ts.map +1 -1
- package/dist/core/validators/passes-gate.d.ts +1 -15
- package/dist/core/validators/passes-gate.d.ts.map +1 -1
- package/dist/core/validators/passes-gate.js +0 -125
- package/dist/core/validators/passes-gate.js.map +1 -1
- package/dist/failure/index.d.ts +0 -1
- package/dist/failure/index.d.ts.map +1 -1
- package/dist/failure/index.js +1 -7
- package/dist/failure/index.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 +10 -7
- package/dist/gates/checker-gate.js.map +1 -1
- package/dist/gates/definitions.d.ts.map +1 -1
- package/dist/gates/definitions.js +0 -4
- package/dist/gates/definitions.js.map +1 -1
- package/dist/gates/performance.d.ts +7 -22
- package/dist/gates/performance.d.ts.map +1 -1
- package/dist/gates/performance.js +7 -89
- package/dist/gates/performance.js.map +1 -1
- package/dist/gates/types.d.ts +2 -8
- package/dist/gates/types.d.ts.map +1 -1
- package/dist/index.d.ts +6 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -22
- package/dist/index.js.map +1 -1
- package/dist/knowledge/index.d.ts +0 -1
- package/dist/knowledge/index.d.ts.map +1 -1
- package/dist/knowledge/index.js +1 -3
- package/dist/knowledge/index.js.map +1 -1
- package/dist/monitoring/trace-analyzer.d.ts +25 -10
- package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
- package/dist/monitoring/trace-analyzer.js +147 -116
- package/dist/monitoring/trace-analyzer.js.map +1 -1
- package/dist/types/constraint.d.ts +8 -0
- 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 +0 -19
- package/dist/types/passes-gate.d.ts.map +1 -1
- package/dist/types/trace.d.ts +9 -0
- package/dist/types/trace.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/CONTEXT.md +1 -0
- package/src/__tests__/passes-gate-check.test.ts +20 -4
- package/src/__tests__/passes-gate.test.ts +18 -119
- package/src/__tests__/performance-gate.test.ts +3 -11
- package/src/__tests__/public-exports.test.ts +46 -16
- package/src/__tests__/trace-analyzer.test.ts +52 -2
- package/src/cli/commands/CONTEXT.md +5 -4
- package/src/cli/commands/__tests__/bin-exit-mapping.test.ts +6 -0
- package/src/cli/commands/__tests__/check.test.ts +74 -0
- package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +70 -0
- package/src/cli/commands/__tests__/passes-gate.test.ts +7 -3
- package/src/cli/commands/__tests__/performance.test.ts +5 -16
- package/src/cli/commands/__tests__/project-path-convention.test.ts +85 -23
- package/src/cli/commands/__tests__/registry.test.ts +52 -3
- package/src/cli/commands/__tests__/report-extra.test.ts +0 -19
- package/src/cli/commands/__tests__/report-false-green.test.ts +46 -0
- package/src/cli/commands/__tests__/report.test.ts +0 -20
- package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +68 -0
- package/src/cli/commands/__tests__/status-extra.test.ts +63 -116
- package/src/cli/commands/__tests__/status.test.ts +66 -148
- package/src/cli/commands/check.ts +39 -1
- package/src/cli/commands/definitions.ts +1 -39
- package/src/cli/commands/knowledge.ts +0 -119
- package/src/cli/commands/passes-gate.ts +0 -3
- package/src/cli/commands/performance.ts +13 -27
- package/src/cli/commands/report.ts +3 -61
- package/src/cli/commands/status.ts +5 -10
- package/src/context/CONTEXT.md +2 -3
- package/src/context/__tests__/token-budget.test.ts +1 -81
- package/src/context/index.ts +2 -7
- package/src/context/token-budget.ts +0 -73
- package/src/context/types.ts +0 -9
- package/src/core/CONTEXT.md +6 -6
- package/src/core/constraints/__tests__/collect-constraints.test.ts +66 -0
- package/src/core/constraints/checker.ts +41 -6
- package/src/core/constraints/checkers/__tests__/capability-sync.test.ts +90 -31
- package/src/core/constraints/checkers/__tests__/check-outcome.test.ts +176 -0
- package/src/core/constraints/checkers/__tests__/docs-freshness.test.ts +18 -9
- package/src/core/constraints/checkers/__tests__/three-state-consistency.test.ts +12 -4
- package/src/core/constraints/checkers/capability-sync.ts +56 -18
- package/src/core/constraints/checkers/docs-freshness.ts +18 -5
- package/src/core/constraints/checkers/index.ts +9 -2
- package/src/core/constraints/checkers/types.ts +58 -2
- package/src/core/constraints/git-evidence.ts +6 -3
- package/src/core/index.ts +0 -11
- package/src/core/spec/__tests__/validator.test.ts +24 -0
- package/src/core/spec/validator.ts +9 -10
- package/src/core/validators/__tests__/passes-gate.test.ts +2 -9
- package/src/core/validators/index.ts +0 -1
- package/src/core/validators/passes-gate.ts +1 -149
- package/src/failure/CONTEXT.md +8 -6
- package/src/failure/index.ts +0 -10
- package/src/gates/CONTEXT.md +4 -3
- package/src/gates/__tests__/checker-gate.test.ts +24 -0
- package/src/gates/__tests__/performance.test.ts +6 -74
- package/src/gates/checker-gate.ts +11 -15
- package/src/gates/definitions.ts +0 -4
- package/src/gates/performance.ts +9 -111
- package/src/gates/types.ts +2 -8
- package/src/index.ts +1 -36
- package/src/knowledge/CONTEXT.md +1 -2
- package/src/knowledge/index.ts +0 -1
- package/src/monitoring/CONTEXT.md +2 -2
- package/src/monitoring/trace-analyzer.ts +160 -126
- package/src/types/constraint.ts +16 -2
- package/src/types/passes-gate.ts +0 -26
- package/src/types/trace.ts +10 -0
- package/src/utils/__tests__/jsonl-skip-disposition.test.ts +0 -1
- package/dist/cli/commands/analyze-sessions.d.ts +0 -20
- package/dist/cli/commands/analyze-sessions.d.ts.map +0 -1
- package/dist/cli/commands/analyze-sessions.js +0 -290
- package/dist/cli/commands/analyze-sessions.js.map +0 -1
- package/dist/cli/commands/update-user-model.d.ts +0 -25
- package/dist/cli/commands/update-user-model.d.ts.map +0 -1
- package/dist/cli/commands/update-user-model.js +0 -397
- package/dist/cli/commands/update-user-model.js.map +0 -1
- package/dist/cli/session-mining/corrections.d.ts +0 -17
- package/dist/cli/session-mining/corrections.d.ts.map +0 -1
- package/dist/cli/session-mining/corrections.js +0 -58
- package/dist/cli/session-mining/corrections.js.map +0 -1
- package/dist/cli/session-mining/index.d.ts +0 -13
- package/dist/cli/session-mining/index.d.ts.map +0 -1
- package/dist/cli/session-mining/index.js +0 -29
- package/dist/cli/session-mining/index.js.map +0 -1
- package/dist/cli/session-mining/text.d.ts +0 -31
- package/dist/cli/session-mining/text.d.ts.map +0 -1
- package/dist/cli/session-mining/text.js +0 -126
- package/dist/cli/session-mining/text.js.map +0 -1
- package/dist/cli/session-mining/transcript.d.ts +0 -34
- package/dist/cli/session-mining/transcript.d.ts.map +0 -1
- package/dist/cli/session-mining/transcript.js +0 -130
- package/dist/cli/session-mining/transcript.js.map +0 -1
- package/dist/context/compaction.d.ts +0 -57
- package/dist/context/compaction.d.ts.map +0 -1
- package/dist/context/compaction.js +0 -165
- package/dist/context/compaction.js.map +0 -1
- package/dist/core/session/clean-state.d.ts +0 -17
- package/dist/core/session/clean-state.d.ts.map +0 -1
- package/dist/core/session/clean-state.js +0 -192
- package/dist/core/session/clean-state.js.map +0 -1
- package/dist/core/session/index.d.ts +0 -6
- package/dist/core/session/index.d.ts.map +0 -1
- package/dist/core/session/index.js +0 -15
- package/dist/core/session/index.js.map +0 -1
- package/dist/core/session/startup.d.ts +0 -47
- package/dist/core/session/startup.d.ts.map +0 -1
- package/dist/core/session/startup.js +0 -263
- package/dist/core/session/startup.js.map +0 -1
- package/dist/failure/constraint-handler.d.ts +0 -83
- package/dist/failure/constraint-handler.d.ts.map +0 -1
- package/dist/failure/constraint-handler.js +0 -138
- package/dist/failure/constraint-handler.js.map +0 -1
- package/dist/knowledge/lifecycle-hooks.d.ts +0 -62
- package/dist/knowledge/lifecycle-hooks.d.ts.map +0 -1
- package/dist/knowledge/lifecycle-hooks.js +0 -143
- package/dist/knowledge/lifecycle-hooks.js.map +0 -1
- package/dist/types/session.d.ts +0 -113
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/session.js +0 -6
- package/dist/types/session.js.map +0 -1
- package/src/__tests__/clean-state-extra.test.ts +0 -301
- package/src/__tests__/clean-state.test.ts +0 -169
- package/src/__tests__/constraint-handler.test.ts +0 -132
- package/src/__tests__/passes-gate-extra.test.ts +0 -93
- package/src/__tests__/session-startup.test.ts +0 -334
- package/src/cli/commands/__tests__/analyze-sessions.test.ts +0 -184
- package/src/cli/commands/__tests__/update-user-model.test.ts +0 -234
- package/src/cli/commands/analyze-sessions.ts +0 -335
- package/src/cli/commands/update-user-model.ts +0 -461
- package/src/cli/session-mining/__tests__/transcript.test.ts +0 -118
- package/src/cli/session-mining/corrections.ts +0 -56
- package/src/cli/session-mining/index.ts +0 -13
- package/src/cli/session-mining/text.ts +0 -117
- package/src/cli/session-mining/transcript.ts +0 -125
- package/src/context/__tests__/compaction.test.ts +0 -169
- package/src/context/compaction.ts +0 -201
- package/src/core/session/__tests__/startup.test.ts +0 -281
- package/src/core/session/clean-state.ts +0 -178
- package/src/core/session/index.ts +0 -15
- package/src/core/session/startup.ts +0 -253
- package/src/failure/constraint-handler.ts +0 -171
- package/src/knowledge/__tests__/lifecycle-hooks.test.ts +0 -140
- package/src/knowledge/lifecycle-hooks.ts +0 -202
- package/src/types/session.ts +0 -132
|
@@ -14,7 +14,6 @@ export { ReferenceTracker } from './reference-tracker';
|
|
|
14
14
|
export { KnowledgeLinter } from './lint';
|
|
15
15
|
export { ColdStartImporter } from './import';
|
|
16
16
|
export { KnowledgeHealthScorer } from './doctor';
|
|
17
|
-
export { KnowledgeLifecycleHooks } from './lifecycle-hooks';
|
|
18
17
|
export { KnowledgeAudit } from './audit';
|
|
19
18
|
export type { AuditRuleName, AuditAction, AuditIssue, AuditReport, AuditOptions } from './audit';
|
|
20
19
|
export { migrateKnowledgeEntries } from './migration';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC"}
|
package/dist/knowledge/index.js
CHANGED
|
@@ -19,7 +19,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
19
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.extractCodeStructure = exports.migrateKnowledgeEntries = exports.KnowledgeAudit = exports.
|
|
22
|
+
exports.extractCodeStructure = exports.migrateKnowledgeEntries = exports.KnowledgeAudit = exports.KnowledgeHealthScorer = exports.ColdStartImporter = exports.KnowledgeLinter = exports.ReferenceTracker = exports.sanitizeExternalContent = exports.KnowledgeIngest = exports.KnowledgeLifecycle = exports.KnowledgeQuery = exports.FileKnowledgeStore = void 0;
|
|
23
23
|
__exportStar(require("./types"), exports);
|
|
24
24
|
var store_1 = require("./store");
|
|
25
25
|
Object.defineProperty(exports, "FileKnowledgeStore", { enumerable: true, get: function () { return store_1.FileKnowledgeStore; } });
|
|
@@ -38,8 +38,6 @@ var import_1 = require("./import");
|
|
|
38
38
|
Object.defineProperty(exports, "ColdStartImporter", { enumerable: true, get: function () { return import_1.ColdStartImporter; } });
|
|
39
39
|
var doctor_1 = require("./doctor");
|
|
40
40
|
Object.defineProperty(exports, "KnowledgeHealthScorer", { enumerable: true, get: function () { return doctor_1.KnowledgeHealthScorer; } });
|
|
41
|
-
var lifecycle_hooks_1 = require("./lifecycle-hooks");
|
|
42
|
-
Object.defineProperty(exports, "KnowledgeLifecycleHooks", { enumerable: true, get: function () { return lifecycle_hooks_1.KnowledgeLifecycleHooks; } });
|
|
43
41
|
var audit_1 = require("./audit");
|
|
44
42
|
Object.defineProperty(exports, "KnowledgeAudit", { enumerable: true, get: function () { return audit_1.KnowledgeAudit; } });
|
|
45
43
|
var migration_1 = require("./migration");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AAExB,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAC3B,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AACvB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA;AAE3B,mCAAoE;AAA3D,yGAAA,eAAe,OAAA;AAAE,iHAAA,uBAAuB,OAAA;AACjD,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,+BAAyC;AAAhC,uGAAA,eAAe,OAAA;AACxB,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAC1B,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AAExB,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAC3B,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AACvB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA;AAE3B,mCAAoE;AAA3D,yGAAA,eAAe,OAAA;AAAE,iHAAA,uBAAuB,OAAA;AACjD,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,+BAAyC;AAAhC,uGAAA,eAAe,OAAA;AACxB,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAC1B,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AAEvB,yCAAsD;AAA7C,oHAAA,uBAAuB,OAAA;AAChC,8DAAmE;AAA1D,sHAAA,oBAAoB,OAAA"}
|
|
@@ -7,9 +7,28 @@
|
|
|
7
7
|
* - 统计汇总(每小时自动执行)
|
|
8
8
|
* - 异常检测(每日检查)
|
|
9
9
|
* - 趋势分析(对比上一周期)
|
|
10
|
+
*
|
|
11
|
+
* 形状(ADR-0020):`summarize`/`detectAnomalies` 的判定本体是模块级纯函数
|
|
12
|
+
* (`summarizeTraces`/`detectTraceAnomalies`),`TraceAnalyzer` 类壳转发过去——
|
|
13
|
+
* 类壳是 studio 的运行时消费面,纯函数是已持有数据、不需要 collector 的消费端
|
|
14
|
+
* (`status`)的入口。两个纯函数不进包根导出(ADR-0003 零扩张)。
|
|
10
15
|
*/
|
|
11
16
|
import type { ExecutionTrace, TraceSummary, TraceAnomaly, TraceAnalyzerConfig } from '../types/trace';
|
|
12
17
|
import { TraceCollector } from './traces';
|
|
18
|
+
/**
|
|
19
|
+
* 生成统计汇总
|
|
20
|
+
*
|
|
21
|
+
* 纯计算,零 Token 成本。判定住在这里,`TraceAnalyzer.summarize()` 只是转发(ADR-0020)——
|
|
22
|
+
* 只要数据的消费端(`status`)直调本函数,不必为它构造带 mkdir 副作用的 collector。
|
|
23
|
+
*/
|
|
24
|
+
export declare function summarizeTraces(traces: ExecutionTrace[]): TraceSummary[];
|
|
25
|
+
/**
|
|
26
|
+
* 检测异常
|
|
27
|
+
*
|
|
28
|
+
* 基于阈值检测异常模式。阈值来自参数而非实例状态(ADR-0020):省略 `config` 时
|
|
29
|
+
* 与类壳同一默认口径(`{ ...DEFAULT_CONFIG, ...config }`)。
|
|
30
|
+
*/
|
|
31
|
+
export declare function detectTraceAnomalies(summaries: TraceSummary[], config?: Partial<TraceAnalyzerConfig>): TraceAnomaly[];
|
|
13
32
|
/**
|
|
14
33
|
* Trace 分析器
|
|
15
34
|
*
|
|
@@ -28,6 +47,9 @@ export declare class TraceAnalyzer {
|
|
|
28
47
|
* 生成统计汇总
|
|
29
48
|
*
|
|
30
49
|
* 纯计算,零 Token 成本
|
|
50
|
+
*
|
|
51
|
+
* ADR-0020:判定本体在模块级 `summarizeTraces()`,此处只是类壳转发
|
|
52
|
+
* (studio 经类消费的面逐字不动)。
|
|
31
53
|
*/
|
|
32
54
|
summarize(traces: ExecutionTrace[]): TraceSummary[];
|
|
33
55
|
/**
|
|
@@ -57,6 +79,9 @@ export declare class TraceAnalyzer {
|
|
|
57
79
|
* 检测异常
|
|
58
80
|
*
|
|
59
81
|
* 基于阈值检测异常模式
|
|
82
|
+
*
|
|
83
|
+
* ADR-0020:判定本体在模块级 `detectTraceAnomalies()`(阈值经参数传入),
|
|
84
|
+
* 此处只是类壳转发。
|
|
60
85
|
*/
|
|
61
86
|
detectAnomalies(summaries: TraceSummary[]): TraceAnomaly[];
|
|
62
87
|
/**
|
|
@@ -65,16 +90,6 @@ export declare class TraceAnalyzer {
|
|
|
65
90
|
* 计算各指标的环比变化
|
|
66
91
|
*/
|
|
67
92
|
compareWithPrevious(current: TraceSummary[], previous: TraceSummary[]): TraceSummary[];
|
|
68
|
-
/**
|
|
69
|
-
* 计算趋势
|
|
70
|
-
*
|
|
71
|
-
* 对比前半段和后半段的通过率
|
|
72
|
-
*/
|
|
73
|
-
private calculateTrend;
|
|
74
|
-
/**
|
|
75
|
-
* 计算通过率(skip 未评估,不计入分母)
|
|
76
|
-
*/
|
|
77
|
-
private calcPassRate;
|
|
78
93
|
/**
|
|
79
94
|
* 保存汇总结果
|
|
80
95
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-analyzer.d.ts","sourceRoot":"","sources":["../../src/monitoring/trace-analyzer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"trace-analyzer.d.ts","sourceRoot":"","sources":["../../src/monitoring/trace-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA6D1C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CA+CxE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,YAAY,EAAE,EACzB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,YAAY,EAAE,CAyChB;AAED;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAiB;gBAEtB,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAK5E;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE;IAInD;;;;;;OAMG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,YAAY,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IASvF;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAI5C;;;;OAIG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,EAAE;IAKvD;;;;;;;OAOG;IACH,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE;IAI1D;;;;OAIG;IACH,mBAAmB,CACjB,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,YAAY,EAAE,GACvB,YAAY,EAAE;IAmBjB;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI;IAI5C;;OAEG;IACH,WAAW,IAAI,YAAY,EAAE,GAAG,IAAI;IAIpC;;;;OAIG;IACH,gBAAgB,IAAI,YAAY,EAAE;IAgBlC;;;;OAIG;IACH,oBAAoB,IAAI,YAAY,EAAE;IAUtC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM;CA4C7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,aAAa,CAGnF"}
|
|
@@ -8,9 +8,16 @@
|
|
|
8
8
|
* - 统计汇总(每小时自动执行)
|
|
9
9
|
* - 异常检测(每日检查)
|
|
10
10
|
* - 趋势分析(对比上一周期)
|
|
11
|
+
*
|
|
12
|
+
* 形状(ADR-0020):`summarize`/`detectAnomalies` 的判定本体是模块级纯函数
|
|
13
|
+
* (`summarizeTraces`/`detectTraceAnomalies`),`TraceAnalyzer` 类壳转发过去——
|
|
14
|
+
* 类壳是 studio 的运行时消费面,纯函数是已持有数据、不需要 collector 的消费端
|
|
15
|
+
* (`status`)的入口。两个纯函数不进包根导出(ADR-0003 零扩张)。
|
|
11
16
|
*/
|
|
12
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
18
|
exports.TraceAnalyzer = void 0;
|
|
19
|
+
exports.summarizeTraces = summarizeTraces;
|
|
20
|
+
exports.detectTraceAnomalies = detectTraceAnomalies;
|
|
14
21
|
exports.createAnalyzer = createAnalyzer;
|
|
15
22
|
const traces_1 = require("./traces");
|
|
16
23
|
const analyzer_base_1 = require("./analyzer-base");
|
|
@@ -24,6 +31,138 @@ const DEFAULT_CONFIG = {
|
|
|
24
31
|
failRate: 0.5, // 失败率 > 50% 视为异常
|
|
25
32
|
},
|
|
26
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* 计算趋势(`summarizeTraces` 的模块内助手)
|
|
36
|
+
*
|
|
37
|
+
* 对比前半段和后半段的通过率
|
|
38
|
+
*/
|
|
39
|
+
function calculateTrend(traces) {
|
|
40
|
+
if (traces.length < analyzer_base_1.MIN_TREND_SAMPLES) {
|
|
41
|
+
return 'stable';
|
|
42
|
+
}
|
|
43
|
+
// 分成前后两半(按时间排序)
|
|
44
|
+
const [firstHalf, secondHalf] = (0, analyzer_base_1.splitByTime)(traces);
|
|
45
|
+
// 计算前半段和后半段的通过率
|
|
46
|
+
const firstPassRate = calcPassRate(firstHalf);
|
|
47
|
+
const secondPassRate = calcPassRate(secondHalf);
|
|
48
|
+
// 计算变化
|
|
49
|
+
const delta = secondPassRate - firstPassRate;
|
|
50
|
+
// 判断趋势(变化 > 5% 才算显著)
|
|
51
|
+
if (delta > 0.05) {
|
|
52
|
+
return 'rising';
|
|
53
|
+
}
|
|
54
|
+
else if (delta < -0.05) {
|
|
55
|
+
return 'falling';
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return 'stable';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 计算通过率(skip 未评估,不计入分母)
|
|
63
|
+
*/
|
|
64
|
+
function calcPassRate(traces) {
|
|
65
|
+
const evaluated = traces.filter(t => t.result !== 'skip');
|
|
66
|
+
if (evaluated.length === 0)
|
|
67
|
+
return 0;
|
|
68
|
+
const passCount = evaluated.filter(t => t.result === 'pass').length;
|
|
69
|
+
return passCount / evaluated.length;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 生成统计汇总
|
|
73
|
+
*
|
|
74
|
+
* 纯计算,零 Token 成本。判定住在这里,`TraceAnalyzer.summarize()` 只是转发(ADR-0020)——
|
|
75
|
+
* 只要数据的消费端(`status`)直调本函数,不必为它构造带 mkdir 副作用的 collector。
|
|
76
|
+
*/
|
|
77
|
+
function summarizeTraces(traces) {
|
|
78
|
+
// 按约束 ID 分组
|
|
79
|
+
const grouped = (0, analyzer_base_1.groupByKey)(traces, t => t.constraintId);
|
|
80
|
+
const summaries = [];
|
|
81
|
+
for (const [constraintId, group] of grouped) {
|
|
82
|
+
// 提取层级(从第一条 trace)
|
|
83
|
+
const level = group[0].level;
|
|
84
|
+
// 计算时间范围
|
|
85
|
+
const timeRange = (0, analyzer_base_1.timeRangeOf)(group.map(t => t.timestamp));
|
|
86
|
+
// 单次遍历计算核心统计(skip 单独计数,不计入 pass/fail 率分母,ADR-0001)
|
|
87
|
+
const totalChecks = group.length;
|
|
88
|
+
let passCount = 0, failCount = 0, ignoreCount = 0, skipCount = 0;
|
|
89
|
+
for (const t of group) {
|
|
90
|
+
if (t.result === 'pass')
|
|
91
|
+
passCount++;
|
|
92
|
+
else if (t.result === 'fail')
|
|
93
|
+
failCount++;
|
|
94
|
+
else if (t.result === 'skip')
|
|
95
|
+
skipCount++;
|
|
96
|
+
if (t.userAction === 'ignore')
|
|
97
|
+
ignoreCount++;
|
|
98
|
+
}
|
|
99
|
+
// 计算比率(分母 = 实际评估次数,skip 未评估不计入)
|
|
100
|
+
const evaluatedChecks = totalChecks - skipCount;
|
|
101
|
+
const passRate = evaluatedChecks > 0 ? passCount / evaluatedChecks : 0;
|
|
102
|
+
const failRate = evaluatedChecks > 0 ? failCount / evaluatedChecks : 0;
|
|
103
|
+
// 计算趋势
|
|
104
|
+
const recentTrend = calculateTrend(group);
|
|
105
|
+
summaries.push({
|
|
106
|
+
constraintId,
|
|
107
|
+
level,
|
|
108
|
+
timeRange,
|
|
109
|
+
totalChecks,
|
|
110
|
+
passCount,
|
|
111
|
+
failCount,
|
|
112
|
+
skipCount,
|
|
113
|
+
ignoreCount,
|
|
114
|
+
passRate,
|
|
115
|
+
failRate,
|
|
116
|
+
recentTrend,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return summaries;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 检测异常
|
|
123
|
+
*
|
|
124
|
+
* 基于阈值检测异常模式。阈值来自参数而非实例状态(ADR-0020):省略 `config` 时
|
|
125
|
+
* 与类壳同一默认口径(`{ ...DEFAULT_CONFIG, ...config }`)。
|
|
126
|
+
*/
|
|
127
|
+
function detectTraceAnomalies(summaries, config) {
|
|
128
|
+
const anomalies = [];
|
|
129
|
+
const thresholds = { ...DEFAULT_CONFIG, ...config }.thresholds;
|
|
130
|
+
for (const summary of summaries) {
|
|
131
|
+
// 检测失败率上升
|
|
132
|
+
if (summary.failRate > thresholds.failRate && summary.recentTrend === 'rising') {
|
|
133
|
+
anomalies.push({
|
|
134
|
+
type: 'rising_fail_rate',
|
|
135
|
+
constraintId: summary.constraintId,
|
|
136
|
+
level: summary.level,
|
|
137
|
+
message: `约束 ${summary.constraintId} 失败率 ${Math.round(summary.failRate * 100)}% 且趋势上升`,
|
|
138
|
+
data: {
|
|
139
|
+
currentRate: summary.failRate,
|
|
140
|
+
threshold: thresholds.failRate,
|
|
141
|
+
trend: 'rising',
|
|
142
|
+
},
|
|
143
|
+
detectedAt: Date.now(),
|
|
144
|
+
suggestedAction: 'diagnose',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// 检测低通过率
|
|
148
|
+
if (summary.passRate < 0.3) {
|
|
149
|
+
anomalies.push({
|
|
150
|
+
type: 'low_pass_rate',
|
|
151
|
+
constraintId: summary.constraintId,
|
|
152
|
+
level: summary.level,
|
|
153
|
+
message: `约束 ${summary.constraintId} 通过率 ${Math.round(summary.passRate * 100)}%,低于 30%`,
|
|
154
|
+
data: {
|
|
155
|
+
currentRate: summary.passRate,
|
|
156
|
+
threshold: 0.3,
|
|
157
|
+
trend: summary.recentTrend,
|
|
158
|
+
},
|
|
159
|
+
detectedAt: Date.now(),
|
|
160
|
+
suggestedAction: 'adjust_threshold',
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return anomalies;
|
|
165
|
+
}
|
|
27
166
|
/**
|
|
28
167
|
* Trace 分析器
|
|
29
168
|
*
|
|
@@ -45,50 +184,12 @@ class TraceAnalyzer {
|
|
|
45
184
|
* 生成统计汇总
|
|
46
185
|
*
|
|
47
186
|
* 纯计算,零 Token 成本
|
|
187
|
+
*
|
|
188
|
+
* ADR-0020:判定本体在模块级 `summarizeTraces()`,此处只是类壳转发
|
|
189
|
+
* (studio 经类消费的面逐字不动)。
|
|
48
190
|
*/
|
|
49
191
|
summarize(traces) {
|
|
50
|
-
|
|
51
|
-
const grouped = (0, analyzer_base_1.groupByKey)(traces, t => t.constraintId);
|
|
52
|
-
const summaries = [];
|
|
53
|
-
for (const [constraintId, group] of grouped) {
|
|
54
|
-
// 提取层级(从第一条 trace)
|
|
55
|
-
const level = group[0].level;
|
|
56
|
-
// 计算时间范围
|
|
57
|
-
const timeRange = (0, analyzer_base_1.timeRangeOf)(group.map(t => t.timestamp));
|
|
58
|
-
// 单次遍历计算核心统计(skip 单独计数,不计入 pass/fail 率分母,ADR-0001)
|
|
59
|
-
const totalChecks = group.length;
|
|
60
|
-
let passCount = 0, failCount = 0, ignoreCount = 0, skipCount = 0;
|
|
61
|
-
for (const t of group) {
|
|
62
|
-
if (t.result === 'pass')
|
|
63
|
-
passCount++;
|
|
64
|
-
else if (t.result === 'fail')
|
|
65
|
-
failCount++;
|
|
66
|
-
else if (t.result === 'skip')
|
|
67
|
-
skipCount++;
|
|
68
|
-
if (t.userAction === 'ignore')
|
|
69
|
-
ignoreCount++;
|
|
70
|
-
}
|
|
71
|
-
// 计算比率(分母 = 实际评估次数,skip 未评估不计入)
|
|
72
|
-
const evaluatedChecks = totalChecks - skipCount;
|
|
73
|
-
const passRate = evaluatedChecks > 0 ? passCount / evaluatedChecks : 0;
|
|
74
|
-
const failRate = evaluatedChecks > 0 ? failCount / evaluatedChecks : 0;
|
|
75
|
-
// 计算趋势
|
|
76
|
-
const recentTrend = this.calculateTrend(group);
|
|
77
|
-
summaries.push({
|
|
78
|
-
constraintId,
|
|
79
|
-
level,
|
|
80
|
-
timeRange,
|
|
81
|
-
totalChecks,
|
|
82
|
-
passCount,
|
|
83
|
-
failCount,
|
|
84
|
-
skipCount,
|
|
85
|
-
ignoreCount,
|
|
86
|
-
passRate,
|
|
87
|
-
failRate,
|
|
88
|
-
recentTrend,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
return summaries;
|
|
192
|
+
return summarizeTraces(traces);
|
|
92
193
|
}
|
|
93
194
|
/**
|
|
94
195
|
* 分析最近 N 小时的 traces,并带出坏行计数(harness#100 报告入口)
|
|
@@ -125,45 +226,12 @@ class TraceAnalyzer {
|
|
|
125
226
|
* 检测异常
|
|
126
227
|
*
|
|
127
228
|
* 基于阈值检测异常模式
|
|
229
|
+
*
|
|
230
|
+
* ADR-0020:判定本体在模块级 `detectTraceAnomalies()`(阈值经参数传入),
|
|
231
|
+
* 此处只是类壳转发。
|
|
128
232
|
*/
|
|
129
233
|
detectAnomalies(summaries) {
|
|
130
|
-
|
|
131
|
-
const thresholds = this.config.thresholds;
|
|
132
|
-
for (const summary of summaries) {
|
|
133
|
-
// 检测失败率上升
|
|
134
|
-
if (summary.failRate > thresholds.failRate && summary.recentTrend === 'rising') {
|
|
135
|
-
anomalies.push({
|
|
136
|
-
type: 'rising_fail_rate',
|
|
137
|
-
constraintId: summary.constraintId,
|
|
138
|
-
level: summary.level,
|
|
139
|
-
message: `约束 ${summary.constraintId} 失败率 ${Math.round(summary.failRate * 100)}% 且趋势上升`,
|
|
140
|
-
data: {
|
|
141
|
-
currentRate: summary.failRate,
|
|
142
|
-
threshold: thresholds.failRate,
|
|
143
|
-
trend: 'rising',
|
|
144
|
-
},
|
|
145
|
-
detectedAt: Date.now(),
|
|
146
|
-
suggestedAction: 'diagnose',
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
// 检测低通过率
|
|
150
|
-
if (summary.passRate < 0.3) {
|
|
151
|
-
anomalies.push({
|
|
152
|
-
type: 'low_pass_rate',
|
|
153
|
-
constraintId: summary.constraintId,
|
|
154
|
-
level: summary.level,
|
|
155
|
-
message: `约束 ${summary.constraintId} 通过率 ${Math.round(summary.passRate * 100)}%,低于 30%`,
|
|
156
|
-
data: {
|
|
157
|
-
currentRate: summary.passRate,
|
|
158
|
-
threshold: 0.3,
|
|
159
|
-
trend: summary.recentTrend,
|
|
160
|
-
},
|
|
161
|
-
detectedAt: Date.now(),
|
|
162
|
-
suggestedAction: 'adjust_threshold',
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return anomalies;
|
|
234
|
+
return detectTraceAnomalies(summaries, this.config);
|
|
167
235
|
}
|
|
168
236
|
/**
|
|
169
237
|
* 对比上一周期
|
|
@@ -183,43 +251,6 @@ class TraceAnalyzer {
|
|
|
183
251
|
return summary;
|
|
184
252
|
});
|
|
185
253
|
}
|
|
186
|
-
/**
|
|
187
|
-
* 计算趋势
|
|
188
|
-
*
|
|
189
|
-
* 对比前半段和后半段的通过率
|
|
190
|
-
*/
|
|
191
|
-
calculateTrend(traces) {
|
|
192
|
-
if (traces.length < analyzer_base_1.MIN_TREND_SAMPLES) {
|
|
193
|
-
return 'stable';
|
|
194
|
-
}
|
|
195
|
-
// 分成前后两半(按时间排序)
|
|
196
|
-
const [firstHalf, secondHalf] = (0, analyzer_base_1.splitByTime)(traces);
|
|
197
|
-
// 计算前半段和后半段的通过率
|
|
198
|
-
const firstPassRate = this.calcPassRate(firstHalf);
|
|
199
|
-
const secondPassRate = this.calcPassRate(secondHalf);
|
|
200
|
-
// 计算变化
|
|
201
|
-
const delta = secondPassRate - firstPassRate;
|
|
202
|
-
// 判断趋势(变化 > 5% 才算显著)
|
|
203
|
-
if (delta > 0.05) {
|
|
204
|
-
return 'rising';
|
|
205
|
-
}
|
|
206
|
-
else if (delta < -0.05) {
|
|
207
|
-
return 'falling';
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
return 'stable';
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* 计算通过率(skip 未评估,不计入分母)
|
|
215
|
-
*/
|
|
216
|
-
calcPassRate(traces) {
|
|
217
|
-
const evaluated = traces.filter(t => t.result !== 'skip');
|
|
218
|
-
if (evaluated.length === 0)
|
|
219
|
-
return 0;
|
|
220
|
-
const passCount = evaluated.filter(t => t.result === 'pass').length;
|
|
221
|
-
return passCount / evaluated.length;
|
|
222
|
-
}
|
|
223
254
|
/**
|
|
224
255
|
* 保存汇总结果
|
|
225
256
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-analyzer.js","sourceRoot":"","sources":["../../src/monitoring/trace-analyzer.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"trace-analyzer.js","sourceRoot":"","sources":["../../src/monitoring/trace-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,6 +86,14 @@ export interface ConstraintResult {
|
|
|
86
86
|
constraint?: Constraint;
|
|
87
87
|
/** 消息 */
|
|
88
88
|
message?: string;
|
|
89
|
+
/**
|
|
90
|
+
* 证据行(harness#119)
|
|
91
|
+
*
|
|
92
|
+
* checker 经 CheckDetail 返回的具体判定依据(如未登记的文件路径)。
|
|
93
|
+
* 违规时随 message 一并展示;满足但非空时为「提示」(不进 pass/fail 统计)。
|
|
94
|
+
* skip 恒为空——未评估不得留下证据行。
|
|
95
|
+
*/
|
|
96
|
+
evidence?: string[];
|
|
89
97
|
/** 建议操作 */
|
|
90
98
|
requiredAction?: string;
|
|
91
99
|
/** 检查时间 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraint.d.ts","sourceRoot":"","sources":["../../src/types/constraint.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAElE;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,EAAE,EAAE,YAAY,CAAC;IAEjB;;;;OAIG;IACH,IAAI,EAAE,cAAc,CAAC;IAErB,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IAEb,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW;IACX,KAAK,EAAE,eAAe,CAAC;IAEvB,yBAAyB;IACzB,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;IAEjD,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY;IACZ,EAAE,EAAE,YAAY,CAAC;IAEjB,WAAW;IACX,KAAK,EAAE,eAAe,CAAC;IAEvB,WAAW;IACX,SAAS,EAAE,OAAO,CAAC;IAEnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,WAAW;IACX,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,SAAS;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,WAAW;IACX,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,WAAW;IACX,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,aAAa;IACb,SAAS,EAAE,iBAAiB,CAAC;IAE7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAEpC,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,WAAW;IACX,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,WAAW;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAMhB,gBAAgB;IAChB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,4BAA4B;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,cAAc;IACd,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,eAAe;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,gBAAgB;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,yCAAyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,wDAAwD;IACxD,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,SAAgB,MAAM,EAAE,gBAAgB,CAAC;gBAE7B,MAAM,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"constraint.d.ts","sourceRoot":"","sources":["../../src/types/constraint.ts"],"names":[],"mappings":"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"}
|
package/dist/types/constraint.js
CHANGED
|
@@ -16,7 +16,12 @@ exports.ConstraintViolationError = void 0;
|
|
|
16
16
|
class ConstraintViolationError extends Error {
|
|
17
17
|
result;
|
|
18
18
|
constructor(result) {
|
|
19
|
-
|
|
19
|
+
// 铁律违规在 checkConstraints 处直接 throw,CLI 的结构化输出块走不到这里,
|
|
20
|
+
// error.message 是判定证据唯一的外溢面(harness#119)
|
|
21
|
+
const detail = result.evidence?.length
|
|
22
|
+
? `:\n${result.evidence.map((line) => ` - ${line}`).join('\n')}`
|
|
23
|
+
: '';
|
|
24
|
+
super(`${result.message || 'Constraint violation'}${detail}`);
|
|
20
25
|
this.name = 'ConstraintViolationError';
|
|
21
26
|
this.result = result;
|
|
22
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraint.js","sourceRoot":"","sources":["../../src/types/constraint.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;
|
|
1
|
+
{"version":3,"file":"constraint.js","sourceRoot":"","sources":["../../src/types/constraint.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA8LH;;GAEG;AACH,MAAa,wBAAyB,SAAQ,KAAK;IACjC,MAAM,CAAmB;IAEzC,YAAY,MAAwB;QAClC,qDAAqD;QACrD,yCAAyC;QACzC,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"}
|
|
@@ -20,10 +20,6 @@ export interface PassesGateConfig {
|
|
|
20
20
|
* 不赦免非零退出码(判定依据收在 core/validators/test-output.ts 的 judgeTestRun,ADR-0014)
|
|
21
21
|
*/
|
|
22
22
|
allowPartialPass?: boolean;
|
|
23
|
-
/** 最大重试次数 */
|
|
24
|
-
maxRetries?: number;
|
|
25
|
-
/** 重试延迟(毫秒) */
|
|
26
|
-
retryDelay?: number;
|
|
27
23
|
}
|
|
28
24
|
/**
|
|
29
25
|
* 测试结果
|
|
@@ -46,21 +42,6 @@ export interface TaskTestResult {
|
|
|
46
42
|
/** 证据路径 */
|
|
47
43
|
evidence?: string;
|
|
48
44
|
}
|
|
49
|
-
/**
|
|
50
|
-
* 测试门控结果
|
|
51
|
-
*/
|
|
52
|
-
export interface PassesGateResult {
|
|
53
|
-
/** 任务 ID */
|
|
54
|
-
taskId: string;
|
|
55
|
-
/** 是否允许设置 */
|
|
56
|
-
allowed: boolean;
|
|
57
|
-
/** 测试结果 */
|
|
58
|
-
testResult?: TaskTestResult;
|
|
59
|
-
/** 尝试次数 */
|
|
60
|
-
attempts: number;
|
|
61
|
-
/** 错误信息 */
|
|
62
|
-
error?: string;
|
|
63
|
-
}
|
|
64
45
|
/**
|
|
65
46
|
* 动态任务(用于 passes-gate)
|
|
66
47
|
*/
|
|
@@ -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;
|
|
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;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IAEX,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,WAAW;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,WAAW;IACX,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;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,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IAEX,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW;IACX,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,eAAe;IACf,OAAO,EAAE,OAAO,CAAC;IAEjB,oBAAoB;IACpB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAEnC,aAAa;IACb,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB"}
|
package/dist/types/trace.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export declare const DEFAULT_TRACE_FILE = ".harness/logs/traces.log";
|
|
|
17
17
|
* - 只记录核心字段(零 Token)
|
|
18
18
|
* - 不记录代码片段(需要时从 git diff 获取)
|
|
19
19
|
* - 不记录决策路径(需要时从 execution logs 获取)
|
|
20
|
+
* - 例外(harness#119):判定证据允许记录——路径级依据不是代码片段,
|
|
21
|
+
* 而没有它,一条恒红的约束在统计侧根本无法回答「红在哪」
|
|
20
22
|
*/
|
|
21
23
|
export interface ExecutionTrace {
|
|
22
24
|
/** 约束 ID */
|
|
@@ -35,6 +37,13 @@ export interface ExecutionTrace {
|
|
|
35
37
|
projectPath?: string;
|
|
36
38
|
/** 会话 ID(用于追踪同一会话的多次检查) */
|
|
37
39
|
sessionId?: string;
|
|
40
|
+
/**
|
|
41
|
+
* 判定证据行(harness#119)
|
|
42
|
+
*
|
|
43
|
+
* 只落 checker 给出的路径级依据(如未登记文件清单),由 checker 截断条数;
|
|
44
|
+
* 不落 pass 结果的空数组,避免无信息记录膨胀 JSONL。
|
|
45
|
+
*/
|
|
46
|
+
evidence?: string[];
|
|
38
47
|
/** 用户如何响应失败 */
|
|
39
48
|
userAction?: 'bypass' | 'fix' | 'ignore' | 'request_help';
|
|
40
49
|
/** 用户绕过理由(如果用户绕过) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/types/trace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAE7D
|
|
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,6 +42,7 @@
|
|
|
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) |
|
|
45
|
+
| 判定证据(evidence) | checker 随判定一并返回的路径级依据(`CheckDetail{pass, evidence}`,harness#119/ADR-0016);文案由 checker 措辞、消费端只打印,出口 = `ConstraintResult` / CLI 输出 / trace / 铁律异常文案。不是第四种统计态:**违规** = 与本次变更有因果(进 pass/fail 分母),**提示** = `pass:true` + evidence(仓库级漂移等无因果缺口,只露出不拦) |
|
|
45
46
|
| 测试产物解读(test-output) | 从测试运行器 stdout 读出「过了没 / 哪些失败 / 覆盖率」的判定;唯一实现 `core/validators/test-output.ts`(包内,不进导出面),passes-gate / acceptance 共消费(ADR-0012)。两门禁判定依据不一致待 #93 裁决,覆盖率取数归属待 #94 裁决 |
|
|
46
47
|
| 飞轮指标(flywheel) | 知识条目的引用与消费度量(refCoverage / avgRefs / consumptionHitRate);唯一实现 `knowledge/flywheel-metrics.ts`(包内,不进导出面),canonical 分子为过滤 synthetic 后的 genuine refs,audit D6 / knowledge stats / knowledge health 共消费(ADR-0013,#81) |
|
|
47
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) |
|