@neurcode-ai/cli 0.9.65 → 0.10.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/dist/commands/bootstrap-policy.d.ts +29 -0
- package/dist/commands/bootstrap-policy.d.ts.map +1 -0
- package/dist/commands/bootstrap-policy.js +334 -0
- package/dist/commands/bootstrap-policy.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +82 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/governance.d.ts +3 -0
- package/dist/commands/governance.d.ts.map +1 -0
- package/dist/commands/governance.js +390 -0
- package/dist/commands/governance.js.map +1 -0
- package/dist/commands/quickstart.d.ts +21 -0
- package/dist/commands/quickstart.d.ts.map +1 -0
- package/dist/commands/quickstart.js +178 -0
- package/dist/commands/quickstart.js.map +1 -0
- package/dist/commands/remediate-export.d.ts +36 -0
- package/dist/commands/remediate-export.d.ts.map +1 -0
- package/dist/commands/remediate-export.js +1072 -0
- package/dist/commands/remediate-export.js.map +1 -0
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +14 -0
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/session.d.ts +7 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +156 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/start-intent.d.ts.map +1 -1
- package/dist/commands/start-intent.js +61 -11
- package/dist/commands/start-intent.js.map +1 -1
- package/dist/commands/verify-guidance.d.ts +5 -0
- package/dist/commands/verify-guidance.d.ts.map +1 -0
- package/dist/commands/verify-guidance.js +49 -0
- package/dist/commands/verify-guidance.js.map +1 -0
- package/dist/commands/verify-output.d.ts +37 -0
- package/dist/commands/verify-output.d.ts.map +1 -0
- package/dist/commands/verify-output.js +572 -0
- package/dist/commands/verify-output.js.map +1 -0
- package/dist/commands/verify-render.d.ts +41 -0
- package/dist/commands/verify-render.d.ts.map +1 -0
- package/dist/commands/verify-render.js +457 -0
- package/dist/commands/verify-render.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +384 -1091
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +3 -14
- package/dist/commands/workspace.js.map +1 -1
- package/dist/context-engine/graph.d.ts.map +1 -1
- package/dist/context-engine/graph.js +69 -7
- package/dist/context-engine/graph.js.map +1 -1
- package/dist/context-engine/scanner.d.ts.map +1 -1
- package/dist/context-engine/scanner.js +9 -2
- package/dist/context-engine/scanner.js.map +1 -1
- package/dist/daemon/compatibility/execution.d.ts +42 -0
- package/dist/daemon/compatibility/execution.d.ts.map +1 -0
- package/dist/daemon/compatibility/execution.js +183 -0
- package/dist/daemon/compatibility/execution.js.map +1 -0
- package/dist/daemon/compatibility/mutation.d.ts +24 -0
- package/dist/daemon/compatibility/mutation.d.ts.map +1 -0
- package/dist/daemon/compatibility/mutation.js +724 -0
- package/dist/daemon/compatibility/mutation.js.map +1 -0
- package/dist/daemon/routes.d.ts +19 -0
- package/dist/daemon/routes.d.ts.map +1 -0
- package/dist/daemon/routes.js +123 -0
- package/dist/daemon/routes.js.map +1 -0
- package/dist/daemon/runtime/execution-bus.d.ts +217 -0
- package/dist/daemon/runtime/execution-bus.d.ts.map +1 -0
- package/dist/daemon/runtime/execution-bus.js +1420 -0
- package/dist/daemon/runtime/execution-bus.js.map +1 -0
- package/dist/daemon/runtime/workspace-runtime.d.ts +280 -0
- package/dist/daemon/runtime/workspace-runtime.d.ts.map +1 -0
- package/dist/daemon/runtime/workspace-runtime.js +1473 -0
- package/dist/daemon/runtime/workspace-runtime.js.map +1 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +171 -874
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shaping.d.ts +11 -0
- package/dist/daemon/shaping.d.ts.map +1 -0
- package/dist/daemon/shaping.js +240 -0
- package/dist/daemon/shaping.js.map +1 -0
- package/dist/governance/canonical-invariants.d.ts +88 -0
- package/dist/governance/canonical-invariants.d.ts.map +1 -0
- package/dist/governance/canonical-invariants.js +197 -0
- package/dist/governance/canonical-invariants.js.map +1 -0
- package/dist/governance/canonical-ordering.d.ts +76 -0
- package/dist/governance/canonical-ordering.d.ts.map +1 -0
- package/dist/governance/canonical-ordering.js +189 -0
- package/dist/governance/canonical-ordering.js.map +1 -0
- package/dist/governance/canonical-pipeline.d.ts +9 -1
- package/dist/governance/canonical-pipeline.d.ts.map +1 -1
- package/dist/governance/canonical-pipeline.js +367 -24
- package/dist/governance/canonical-pipeline.js.map +1 -1
- package/dist/governance/diff-line-provenance.d.ts +59 -0
- package/dist/governance/diff-line-provenance.d.ts.map +1 -0
- package/dist/governance/diff-line-provenance.js +118 -0
- package/dist/governance/diff-line-provenance.js.map +1 -0
- package/dist/governance/pilot-readiness.d.ts +34 -0
- package/dist/governance/pilot-readiness.d.ts.map +1 -0
- package/dist/governance/pilot-readiness.js +226 -0
- package/dist/governance/pilot-readiness.js.map +1 -0
- package/dist/governance/policy-parity-validator.d.ts +62 -0
- package/dist/governance/policy-parity-validator.d.ts.map +1 -0
- package/dist/governance/policy-parity-validator.js +137 -0
- package/dist/governance/policy-parity-validator.js.map +1 -0
- package/dist/governance/remediation-boundary.d.ts +55 -0
- package/dist/governance/remediation-boundary.d.ts.map +1 -0
- package/dist/governance/remediation-boundary.js +120 -0
- package/dist/governance/remediation-boundary.js.map +1 -0
- package/dist/governance/structural-cache.d.ts +103 -0
- package/dist/governance/structural-cache.d.ts.map +1 -0
- package/dist/governance/structural-cache.js +235 -0
- package/dist/governance/structural-cache.js.map +1 -0
- package/dist/governance/structural-on-diff.d.ts +22 -2
- package/dist/governance/structural-on-diff.d.ts.map +1 -1
- package/dist/governance/structural-on-diff.js +36 -4
- package/dist/governance/structural-on-diff.js.map +1 -1
- package/dist/governance/structural-policy-merge.d.ts +8 -0
- package/dist/governance/structural-policy-merge.d.ts.map +1 -1
- package/dist/governance/structural-policy-merge.js +7 -0
- package/dist/governance/structural-policy-merge.js.map +1 -1
- package/dist/governance/verify-runtime-guard.d.ts +99 -0
- package/dist/governance/verify-runtime-guard.d.ts.map +1 -0
- package/dist/governance/verify-runtime-guard.js +129 -0
- package/dist/governance/verify-runtime-guard.js.map +1 -0
- package/dist/index.js +277 -77
- package/dist/index.js.map +1 -1
- package/dist/intent-engine/repo-classifier.d.ts +64 -0
- package/dist/intent-engine/repo-classifier.d.ts.map +1 -0
- package/dist/intent-engine/repo-classifier.js +178 -0
- package/dist/intent-engine/repo-classifier.js.map +1 -0
- package/dist/structural-rules/index.d.ts +4 -0
- package/dist/structural-rules/index.d.ts.map +1 -1
- package/dist/structural-rules/index.js +18 -1
- package/dist/structural-rules/index.js.map +1 -1
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +21 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -1
- package/dist/structural-rules/python/PY003-broad-except-clause.js +212 -21
- package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -1
- package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts +11 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts.map +1 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.js +97 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.js.map +1 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts +11 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts.map +1 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.js +83 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.js.map +1 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts +11 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts.map +1 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.js +73 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.js.map +1 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts +11 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts.map +1 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.js +115 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.js.map +1 -0
- package/dist/structural-rules/types.d.ts +12 -0
- package/dist/structural-rules/types.d.ts.map +1 -1
- package/dist/utils/active-engineering-context.d.ts +12 -0
- package/dist/utils/active-engineering-context.d.ts.map +1 -0
- package/dist/utils/active-engineering-context.js +67 -0
- package/dist/utils/active-engineering-context.js.map +1 -0
- package/dist/utils/artifact-io.d.ts +33 -0
- package/dist/utils/artifact-io.d.ts.map +1 -0
- package/dist/utils/artifact-io.js +183 -0
- package/dist/utils/artifact-io.js.map +1 -0
- package/dist/utils/change-contract.d.ts +6 -2
- package/dist/utils/change-contract.d.ts.map +1 -1
- package/dist/utils/change-contract.js +175 -0
- package/dist/utils/change-contract.js.map +1 -1
- package/dist/utils/context-pack.d.ts +12 -0
- package/dist/utils/context-pack.d.ts.map +1 -0
- package/dist/utils/context-pack.js +147 -0
- package/dist/utils/context-pack.js.map +1 -0
- package/dist/utils/control-plane.d.ts +18 -0
- package/dist/utils/control-plane.d.ts.map +1 -1
- package/dist/utils/control-plane.js +31 -4
- package/dist/utils/control-plane.js.map +1 -1
- package/dist/utils/drift-intelligence.d.ts +47 -0
- package/dist/utils/drift-intelligence.d.ts.map +1 -0
- package/dist/utils/drift-intelligence.js +2099 -0
- package/dist/utils/drift-intelligence.js.map +1 -0
- package/dist/utils/execution-actions.d.ts +22 -0
- package/dist/utils/execution-actions.d.ts.map +1 -0
- package/dist/utils/execution-actions.js +103 -0
- package/dist/utils/execution-actions.js.map +1 -0
- package/dist/utils/execution-bus.d.ts +1 -214
- package/dist/utils/execution-bus.d.ts.map +1 -1
- package/dist/utils/execution-bus.js +15 -1359
- package/dist/utils/execution-bus.js.map +1 -1
- package/dist/utils/git.d.ts +1 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +13 -3
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/governance-decisions.d.ts +75 -0
- package/dist/utils/governance-decisions.d.ts.map +1 -0
- package/dist/utils/governance-decisions.js +412 -0
- package/dist/utils/governance-decisions.js.map +1 -0
- package/dist/utils/governance-provenance.d.ts +1 -1
- package/dist/utils/governance-provenance.d.ts.map +1 -1
- package/dist/utils/governance-provenance.js +5 -7
- package/dist/utils/governance-provenance.js.map +1 -1
- package/dist/utils/governance.d.ts +108 -0
- package/dist/utils/governance.d.ts.map +1 -1
- package/dist/utils/governance.js +209 -7
- package/dist/utils/governance.js.map +1 -1
- package/dist/utils/intelligence-runtime-common.d.ts +30 -0
- package/dist/utils/intelligence-runtime-common.d.ts.map +1 -0
- package/dist/utils/intelligence-runtime-common.js +156 -0
- package/dist/utils/intelligence-runtime-common.js.map +1 -0
- package/dist/utils/intent-contract-diagnostics.d.ts +9 -0
- package/dist/utils/intent-contract-diagnostics.d.ts.map +1 -0
- package/dist/utils/intent-contract-diagnostics.js +322 -0
- package/dist/utils/intent-contract-diagnostics.js.map +1 -0
- package/dist/utils/intent-pack.d.ts +15 -0
- package/dist/utils/intent-pack.d.ts.map +1 -0
- package/dist/utils/intent-pack.js +196 -0
- package/dist/utils/intent-pack.js.map +1 -0
- package/dist/utils/plan-sync.d.ts +1 -0
- package/dist/utils/plan-sync.d.ts.map +1 -1
- package/dist/utils/plan-sync.js +23 -0
- package/dist/utils/plan-sync.js.map +1 -1
- package/dist/utils/policy-decision.d.ts +5 -0
- package/dist/utils/policy-decision.d.ts.map +1 -0
- package/dist/utils/policy-decision.js +17 -0
- package/dist/utils/policy-decision.js.map +1 -0
- package/dist/utils/replay-custody.d.ts +43 -0
- package/dist/utils/replay-custody.d.ts.map +1 -0
- package/dist/utils/replay-custody.js +168 -0
- package/dist/utils/replay-custody.js.map +1 -0
- package/dist/utils/replay-runtime.d.ts +13 -0
- package/dist/utils/replay-runtime.d.ts.map +1 -1
- package/dist/utils/replay-runtime.js +96 -9
- package/dist/utils/replay-runtime.js.map +1 -1
- package/dist/utils/repository-intelligence.d.ts +9 -0
- package/dist/utils/repository-intelligence.d.ts.map +1 -0
- package/dist/utils/repository-intelligence.js +372 -0
- package/dist/utils/repository-intelligence.js.map +1 -0
- package/dist/utils/runtime-events.d.ts.map +1 -1
- package/dist/utils/runtime-events.js +25 -6
- package/dist/utils/runtime-events.js.map +1 -1
- package/dist/utils/semantic-contract-intelligence.d.ts +20 -0
- package/dist/utils/semantic-contract-intelligence.d.ts.map +1 -0
- package/dist/utils/semantic-contract-intelligence.js +825 -0
- package/dist/utils/semantic-contract-intelligence.js.map +1 -0
- package/dist/utils/session-continuity.d.ts +56 -0
- package/dist/utils/session-continuity.d.ts.map +1 -0
- package/dist/utils/session-continuity.js +318 -0
- package/dist/utils/session-continuity.js.map +1 -0
- package/dist/utils/verification-evidence.d.ts.map +1 -1
- package/dist/utils/verification-evidence.js +4 -1
- package/dist/utils/verification-evidence.js.map +1 -1
- package/dist/utils/verify-runtime-stability.d.ts +142 -0
- package/dist/utils/verify-runtime-stability.d.ts.map +1 -0
- package/dist/utils/verify-runtime-stability.js +230 -0
- package/dist/utils/verify-runtime-stability.js.map +1 -0
- package/dist/utils/workspace-runtime.d.ts +1 -266
- package/dist/utils/workspace-runtime.d.ts.map +1 -1
- package/dist/utils/workspace-runtime.js +15 -1412
- package/dist/utils/workspace-runtime.js.map +1 -1
- package/package.json +11 -10
- package/LICENSE +0 -201
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-cache.js","sourceRoot":"","sources":["../../src/governance/structural-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,33 @@
|
|
|
1
1
|
import { type StructuralViolation } from '../structural-rules';
|
|
2
|
+
import type { DiffFile } from '@neurcode-ai/diff-parser';
|
|
2
3
|
export interface StructuralOnDiffResult {
|
|
3
4
|
violations: StructuralViolation[];
|
|
4
5
|
rulesApplied: string[];
|
|
5
6
|
suppressedCount: number;
|
|
7
|
+
/** Phase 2: violations on modified lines (new violations) */
|
|
8
|
+
newViolationCount: number;
|
|
9
|
+
/** Phase 2: violations on unmodified historical lines (demoted to ADVISORY) */
|
|
10
|
+
legacyDebtCount: number;
|
|
11
|
+
/** Whether diff-scoped enforcement was active */
|
|
12
|
+
diffScopedEnforcement: boolean;
|
|
6
13
|
}
|
|
7
14
|
/**
|
|
8
|
-
* Run the default structural rule set on files touched by the diff.
|
|
15
|
+
* Run the default structural rule set on files touched by the diff.
|
|
16
|
+
*
|
|
17
|
+
* Phase 2 — Diff-Scoped Enforcement:
|
|
18
|
+
* When diffFiles carries hunk line ranges, violations are classified as:
|
|
19
|
+
* - introducedOnModifiedLine: true → BLOCKING eligible (new code)
|
|
20
|
+
* - introducedOnModifiedLine: false → ADVISORY only (legacy debt)
|
|
21
|
+
*
|
|
22
|
+
* Pass strictFullFile=true to restore the original whole-file behaviour
|
|
23
|
+
* (equivalent to the --strict-full-file CLI flag).
|
|
24
|
+
*
|
|
25
|
+
* No I/O beyond reading the file contents. The modified-line index is built
|
|
26
|
+
* entirely from the already-parsed diffFiles structure.
|
|
9
27
|
*/
|
|
10
28
|
export declare function runStructuralOnDiffFiles(projectRoot: string, diffFiles: Array<{
|
|
11
29
|
path: string;
|
|
12
|
-
}
|
|
30
|
+
} | DiffFile>, options?: {
|
|
31
|
+
strictFullFile?: boolean;
|
|
32
|
+
}): StructuralOnDiffResult;
|
|
13
33
|
//# sourceMappingURL=structural-on-diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural-on-diff.d.ts","sourceRoot":"","sources":["../../src/governance/structural-on-diff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"structural-on-diff.d.ts","sourceRoot":"","sources":["../../src/governance/structural-on-diff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAAC,EAC7C,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,OAAO,CAAC;CACrB,GACL,sBAAsB,CAkDxB"}
|
|
@@ -4,10 +4,28 @@ exports.runStructuralOnDiffFiles = runStructuralOnDiffFiles;
|
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const structural_rules_1 = require("../structural-rules");
|
|
7
|
+
const diff_line_provenance_1 = require("./diff-line-provenance");
|
|
7
8
|
/**
|
|
8
|
-
* Run the default structural rule set on files touched by the diff.
|
|
9
|
+
* Run the default structural rule set on files touched by the diff.
|
|
10
|
+
*
|
|
11
|
+
* Phase 2 — Diff-Scoped Enforcement:
|
|
12
|
+
* When diffFiles carries hunk line ranges, violations are classified as:
|
|
13
|
+
* - introducedOnModifiedLine: true → BLOCKING eligible (new code)
|
|
14
|
+
* - introducedOnModifiedLine: false → ADVISORY only (legacy debt)
|
|
15
|
+
*
|
|
16
|
+
* Pass strictFullFile=true to restore the original whole-file behaviour
|
|
17
|
+
* (equivalent to the --strict-full-file CLI flag).
|
|
18
|
+
*
|
|
19
|
+
* No I/O beyond reading the file contents. The modified-line index is built
|
|
20
|
+
* entirely from the already-parsed diffFiles structure.
|
|
9
21
|
*/
|
|
10
|
-
function runStructuralOnDiffFiles(projectRoot, diffFiles) {
|
|
22
|
+
function runStructuralOnDiffFiles(projectRoot, diffFiles, options = {}) {
|
|
23
|
+
const strictMode = options.strictFullFile ?? false;
|
|
24
|
+
// Build the modified-line index from hunk data (Phase 2).
|
|
25
|
+
// If the diff objects don't carry hunk info (legacy callers), the index
|
|
26
|
+
// will be empty and all violations will be treated as new (safe default).
|
|
27
|
+
const modifiedLineIndex = (0, diff_line_provenance_1.buildModifiedLineIndex)(diffFiles);
|
|
28
|
+
const hasDiffLineData = modifiedLineIndex.size > 0;
|
|
11
29
|
const engine = (0, structural_rules_1.createDefaultStructuralRuleEngine)();
|
|
12
30
|
const filesToAnalyze = [];
|
|
13
31
|
for (const df of diffFiles) {
|
|
@@ -23,13 +41,27 @@ function runStructuralOnDiffFiles(projectRoot, diffFiles) {
|
|
|
23
41
|
}
|
|
24
42
|
}
|
|
25
43
|
if (filesToAnalyze.length === 0) {
|
|
26
|
-
return {
|
|
44
|
+
return {
|
|
45
|
+
violations: [],
|
|
46
|
+
rulesApplied: [],
|
|
47
|
+
suppressedCount: 0,
|
|
48
|
+
newViolationCount: 0,
|
|
49
|
+
legacyDebtCount: 0,
|
|
50
|
+
diffScopedEnforcement: false,
|
|
51
|
+
};
|
|
27
52
|
}
|
|
28
53
|
const result = engine.analyze(filesToAnalyze);
|
|
54
|
+
// Apply diff-scoped provenance classification (Phase 2)
|
|
55
|
+
const { violations, legacyDebtCount, newViolationCount } = hasDiffLineData && !strictMode
|
|
56
|
+
? (0, diff_line_provenance_1.applyDiffScopedProvenance)(result.violations, modifiedLineIndex, false)
|
|
57
|
+
: { violations: result.violations, legacyDebtCount: 0, newViolationCount: result.violations.length };
|
|
29
58
|
return {
|
|
30
|
-
violations
|
|
59
|
+
violations,
|
|
31
60
|
rulesApplied: result.rulesApplied,
|
|
32
61
|
suppressedCount: result.suppressedCount,
|
|
62
|
+
newViolationCount,
|
|
63
|
+
legacyDebtCount,
|
|
64
|
+
diffScopedEnforcement: hasDiffLineData && !strictMode,
|
|
33
65
|
};
|
|
34
66
|
}
|
|
35
67
|
//# sourceMappingURL=structural-on-diff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural-on-diff.js","sourceRoot":"","sources":["../../src/governance/structural-on-diff.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"structural-on-diff.js","sourceRoot":"","sources":["../../src/governance/structural-on-diff.ts"],"names":[],"mappings":";;AAgCA,4DAwDC;AAxFD,2BAA8C;AAC9C,+BAA4B;AAC5B,0DAAkG;AAElG,iEAA2F;AAc3F;;;;;;;;;;;;;GAaG;AACH,SAAgB,wBAAwB,CACtC,WAAmB,EACnB,SAA6C,EAC7C,UAEI,EAAE;IAEN,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;IAEnD,0DAA0D;IAC1D,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,iBAAiB,GAAG,IAAA,6CAAsB,EAAC,SAAuB,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,IAAA,oDAAiC,GAAE,CAAC;IACnD,MAAM,cAAc,GAAoD,EAAE,CAAC;IAE3E,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC;YAAE,SAAS;QACnC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClD,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,UAAU,EAAE,EAAE;YACd,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,CAAC;YAClB,iBAAiB,EAAE,CAAC;YACpB,eAAe,EAAE,CAAC;YAClB,qBAAqB,EAAE,KAAK;SAC7B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE9C,wDAAwD;IACxD,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,GACtD,eAAe,IAAI,CAAC,UAAU;QAC5B,CAAC,CAAC,IAAA,gDAAyB,EAAC,MAAM,CAAC,UAAU,EAAE,iBAAiB,EAAE,KAAK,CAAC;QACxE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAEzG,OAAO;QACL,UAAU;QACV,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,iBAAiB;QACjB,eAAe;QACf,qBAAqB,EAAE,eAAe,IAAI,CAAC,UAAU;KACtD,CAAC;AACJ,CAAC"}
|
|
@@ -5,10 +5,18 @@ export type PolicyViolationRow = {
|
|
|
5
5
|
severity: string;
|
|
6
6
|
message?: string;
|
|
7
7
|
line?: number;
|
|
8
|
+
/** Phase 4: language of the original finding — required for remediation boundary checks. */
|
|
9
|
+
language?: string;
|
|
8
10
|
};
|
|
9
11
|
/**
|
|
10
12
|
* Append structural violations to policy-engine rows so verdicts and JSON violations stay aligned.
|
|
11
13
|
* Dedupes identical structural rule + file + line.
|
|
14
|
+
*
|
|
15
|
+
* @deprecated The canonical pipeline (`buildGovernanceVerificationEnvelope`) is the single
|
|
16
|
+
* aggregation point. Prefer passing `structuralViolations` directly rather than merging here.
|
|
17
|
+
* Structural rows merged here are stripped by `stripStructuralPolicyRows()` in the pipeline
|
|
18
|
+
* to prevent duplicate GovernanceFinding objects. This function is kept for backward compat
|
|
19
|
+
* with existing callers that rely on the combined `violations` array for non-canonical output.
|
|
12
20
|
*/
|
|
13
21
|
export declare function mergeStructuralIntoPolicyViolations(policyViolations: PolicyViolationRow[], structuralViolations: StructuralViolation[]): void;
|
|
14
22
|
//# sourceMappingURL=structural-policy-merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural-policy-merge.d.ts","sourceRoot":"","sources":["../../src/governance/structural-policy-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"structural-policy-merge.d.ts","sourceRoot":"","sources":["../../src/governance/structural-policy-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,mCAAmC,CACjD,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,oBAAoB,EAAE,mBAAmB,EAAE,GAC1C,IAAI,CAkBN"}
|
|
@@ -4,6 +4,12 @@ exports.mergeStructuralIntoPolicyViolations = mergeStructuralIntoPolicyViolation
|
|
|
4
4
|
/**
|
|
5
5
|
* Append structural violations to policy-engine rows so verdicts and JSON violations stay aligned.
|
|
6
6
|
* Dedupes identical structural rule + file + line.
|
|
7
|
+
*
|
|
8
|
+
* @deprecated The canonical pipeline (`buildGovernanceVerificationEnvelope`) is the single
|
|
9
|
+
* aggregation point. Prefer passing `structuralViolations` directly rather than merging here.
|
|
10
|
+
* Structural rows merged here are stripped by `stripStructuralPolicyRows()` in the pipeline
|
|
11
|
+
* to prevent duplicate GovernanceFinding objects. This function is kept for backward compat
|
|
12
|
+
* with existing callers that rely on the combined `violations` array for non-canonical output.
|
|
7
13
|
*/
|
|
8
14
|
function mergeStructuralIntoPolicyViolations(policyViolations, structuralViolations) {
|
|
9
15
|
const seen = new Set(policyViolations.map((v) => `${v.rule}|${v.file}|${v.line ?? 0}`));
|
|
@@ -19,6 +25,7 @@ function mergeStructuralIntoPolicyViolations(policyViolations, structuralViolati
|
|
|
19
25
|
severity: sv.severity === 'BLOCKING' ? 'block' : 'warn',
|
|
20
26
|
message: `[${sv.ruleId}] ${sv.ruleName}: ${sv.operationalRisk}`,
|
|
21
27
|
line: sv.line,
|
|
28
|
+
language: sv.language,
|
|
22
29
|
});
|
|
23
30
|
}
|
|
24
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural-policy-merge.js","sourceRoot":"","sources":["../../src/governance/structural-policy-merge.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"structural-policy-merge.js","sourceRoot":"","sources":["../../src/governance/structural-policy-merge.ts"],"names":[],"mappings":";;AAsBA,kFAqBC;AA/BD;;;;;;;;;GASG;AACH,SAAgB,mCAAmC,CACjD,gBAAsC,EACtC,oBAA2C;IAE3C,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAClE,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,oBAAoB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,gBAAgB,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,EAAE,CAAC,QAAQ;YACjB,IAAI;YACJ,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACvD,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,eAAe,EAAE;YAC/D,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Runtime Guard (Phase 5 — CI Stability Hardening)
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* 1. withVerifyTimeout() — wraps any verify sub-step with a wall-clock timeout.
|
|
6
|
+
* On timeout: returns a degraded result instead of hanging indefinitely.
|
|
7
|
+
* This ensures CI jobs always terminate, even when a rule engine or
|
|
8
|
+
* brain indexer stalls on an unexpectedly large file.
|
|
9
|
+
*
|
|
10
|
+
* 2. buildCIHealthSummary() — produces a structured CI health summary with:
|
|
11
|
+
* - cache warm/cold indicator
|
|
12
|
+
* - per-subsystem latency breakdown
|
|
13
|
+
* - degraded subsystem list
|
|
14
|
+
* Used for CI visibility when --ci flag is set.
|
|
15
|
+
*
|
|
16
|
+
* Key design invariant:
|
|
17
|
+
* withVerifyTimeout NEVER throws. It returns a typed DegradedResult.
|
|
18
|
+
* Callers must check result.degraded before using result.value.
|
|
19
|
+
*/
|
|
20
|
+
export interface DegradedResult<T> {
|
|
21
|
+
degraded: false;
|
|
22
|
+
value: T;
|
|
23
|
+
durationMs: number;
|
|
24
|
+
}
|
|
25
|
+
export interface TimeoutResult {
|
|
26
|
+
degraded: true;
|
|
27
|
+
reason: 'timeout';
|
|
28
|
+
timeoutMs: number;
|
|
29
|
+
durationMs: number;
|
|
30
|
+
}
|
|
31
|
+
export interface ErrorResult {
|
|
32
|
+
degraded: true;
|
|
33
|
+
reason: 'error';
|
|
34
|
+
error: string;
|
|
35
|
+
durationMs: number;
|
|
36
|
+
}
|
|
37
|
+
export type SubstepResult<T> = DegradedResult<T> | TimeoutResult | ErrorResult;
|
|
38
|
+
export interface CISubsystemTiming {
|
|
39
|
+
name: string;
|
|
40
|
+
durationMs: number;
|
|
41
|
+
status: 'ok' | 'degraded' | 'timeout' | 'error' | 'skipped';
|
|
42
|
+
}
|
|
43
|
+
export interface CIHealthSummary {
|
|
44
|
+
/** Was the structural cache warm (hits > 0) or cold? */
|
|
45
|
+
cacheStatus: 'warm' | 'cold' | 'disabled';
|
|
46
|
+
/** Total wall-clock time across all subsystems */
|
|
47
|
+
totalDurationMs: number;
|
|
48
|
+
/** Per-subsystem timing breakdown */
|
|
49
|
+
subsystems: CISubsystemTiming[];
|
|
50
|
+
/** Names of subsystems that ran in degraded mode */
|
|
51
|
+
degradedSubsystems: string[];
|
|
52
|
+
/** Whether all subsystems completed successfully */
|
|
53
|
+
allSubsystemsHealthy: boolean;
|
|
54
|
+
/** ISO timestamp */
|
|
55
|
+
generatedAt: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Run an async function with a wall-clock timeout.
|
|
59
|
+
*
|
|
60
|
+
* On success: returns { degraded: false, value: T, durationMs }
|
|
61
|
+
* On timeout: returns { degraded: true, reason: 'timeout', timeoutMs, durationMs }
|
|
62
|
+
* On error: returns { degraded: true, reason: 'error', error: string, durationMs }
|
|
63
|
+
*
|
|
64
|
+
* NEVER throws. All error/timeout paths are handled internally.
|
|
65
|
+
*
|
|
66
|
+
* @param fn The async function to execute
|
|
67
|
+
* @param timeoutMs Wall-clock timeout in milliseconds
|
|
68
|
+
*/
|
|
69
|
+
export declare function withVerifyTimeout<T>(fn: () => Promise<T>, timeoutMs: number): Promise<SubstepResult<T>>;
|
|
70
|
+
/**
|
|
71
|
+
* Synchronous version of withVerifyTimeout for use with non-async functions.
|
|
72
|
+
*
|
|
73
|
+
* Since true synchronous timeout is impossible in Node.js without worker threads,
|
|
74
|
+
* this wraps the synchronous function as a Promise and applies the async timeout.
|
|
75
|
+
* If the sync function blocks the event loop longer than timeoutMs, the timeout
|
|
76
|
+
* will fire only after it completes — this is a best-effort guard for functions
|
|
77
|
+
* that are expected to complete quickly but may unexpectedly stall.
|
|
78
|
+
*/
|
|
79
|
+
export declare function withVerifyTimeoutSync<T>(fn: () => T, timeoutMs: number): Promise<SubstepResult<T>>;
|
|
80
|
+
export interface CIHealthInput {
|
|
81
|
+
subsystems: CISubsystemTiming[];
|
|
82
|
+
cacheHits: number;
|
|
83
|
+
cacheEnabled: boolean;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Build a structured CI health summary from subsystem timing data.
|
|
87
|
+
*
|
|
88
|
+
* @param input Subsystem timings collected during verify execution
|
|
89
|
+
*/
|
|
90
|
+
export declare function buildCIHealthSummary(input: CIHealthInput): CIHealthSummary;
|
|
91
|
+
/** Default timeout for the structural rule engine per verify run (30s) */
|
|
92
|
+
export declare const STRUCTURAL_ENGINE_TIMEOUT_MS = 30000;
|
|
93
|
+
/** Default timeout for the brain context indexer (20s) */
|
|
94
|
+
export declare const BRAIN_INDEXER_TIMEOUT_MS = 20000;
|
|
95
|
+
/** Default timeout for intent engine operations (25s) */
|
|
96
|
+
export declare const INTENT_ENGINE_TIMEOUT_MS = 25000;
|
|
97
|
+
/** Maximum total verify wall-clock time before CI is considered hung (5min) */
|
|
98
|
+
export declare const VERIFY_TOTAL_TIMEOUT_MS = 300000;
|
|
99
|
+
//# sourceMappingURL=verify-runtime-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-runtime-guard.d.ts","sourceRoot":"","sources":["../../src/governance/verify-runtime-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,EAAE,KAAK,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC;IACT,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,WAAW,CAAC;AAE/E,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IAC1C,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,oDAAoD;IACpD,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oDAAoD;IACpD,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CA4C3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,EAAE,EAAE,MAAM,CAAC,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAE3B;AAID,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CAwB1E;AAID,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,0DAA0D;AAC1D,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,SAAU,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verify Runtime Guard (Phase 5 — CI Stability Hardening)
|
|
4
|
+
*
|
|
5
|
+
* Provides:
|
|
6
|
+
* 1. withVerifyTimeout() — wraps any verify sub-step with a wall-clock timeout.
|
|
7
|
+
* On timeout: returns a degraded result instead of hanging indefinitely.
|
|
8
|
+
* This ensures CI jobs always terminate, even when a rule engine or
|
|
9
|
+
* brain indexer stalls on an unexpectedly large file.
|
|
10
|
+
*
|
|
11
|
+
* 2. buildCIHealthSummary() — produces a structured CI health summary with:
|
|
12
|
+
* - cache warm/cold indicator
|
|
13
|
+
* - per-subsystem latency breakdown
|
|
14
|
+
* - degraded subsystem list
|
|
15
|
+
* Used for CI visibility when --ci flag is set.
|
|
16
|
+
*
|
|
17
|
+
* Key design invariant:
|
|
18
|
+
* withVerifyTimeout NEVER throws. It returns a typed DegradedResult.
|
|
19
|
+
* Callers must check result.degraded before using result.value.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.VERIFY_TOTAL_TIMEOUT_MS = exports.INTENT_ENGINE_TIMEOUT_MS = exports.BRAIN_INDEXER_TIMEOUT_MS = exports.STRUCTURAL_ENGINE_TIMEOUT_MS = void 0;
|
|
23
|
+
exports.withVerifyTimeout = withVerifyTimeout;
|
|
24
|
+
exports.withVerifyTimeoutSync = withVerifyTimeoutSync;
|
|
25
|
+
exports.buildCIHealthSummary = buildCIHealthSummary;
|
|
26
|
+
// ── withVerifyTimeout ─────────────────────────────────────────────────────────
|
|
27
|
+
/**
|
|
28
|
+
* Run an async function with a wall-clock timeout.
|
|
29
|
+
*
|
|
30
|
+
* On success: returns { degraded: false, value: T, durationMs }
|
|
31
|
+
* On timeout: returns { degraded: true, reason: 'timeout', timeoutMs, durationMs }
|
|
32
|
+
* On error: returns { degraded: true, reason: 'error', error: string, durationMs }
|
|
33
|
+
*
|
|
34
|
+
* NEVER throws. All error/timeout paths are handled internally.
|
|
35
|
+
*
|
|
36
|
+
* @param fn The async function to execute
|
|
37
|
+
* @param timeoutMs Wall-clock timeout in milliseconds
|
|
38
|
+
*/
|
|
39
|
+
async function withVerifyTimeout(fn, timeoutMs) {
|
|
40
|
+
const startMs = Date.now();
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
let settled = false;
|
|
43
|
+
const timer = setTimeout(() => {
|
|
44
|
+
if (!settled) {
|
|
45
|
+
settled = true;
|
|
46
|
+
resolve({
|
|
47
|
+
degraded: true,
|
|
48
|
+
reason: 'timeout',
|
|
49
|
+
timeoutMs,
|
|
50
|
+
durationMs: Date.now() - startMs,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}, timeoutMs);
|
|
54
|
+
fn().then((value) => {
|
|
55
|
+
if (!settled) {
|
|
56
|
+
settled = true;
|
|
57
|
+
clearTimeout(timer);
|
|
58
|
+
resolve({
|
|
59
|
+
degraded: false,
|
|
60
|
+
value,
|
|
61
|
+
durationMs: Date.now() - startMs,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}, (err) => {
|
|
65
|
+
if (!settled) {
|
|
66
|
+
settled = true;
|
|
67
|
+
clearTimeout(timer);
|
|
68
|
+
resolve({
|
|
69
|
+
degraded: true,
|
|
70
|
+
reason: 'error',
|
|
71
|
+
error: err instanceof Error ? err.message : String(err),
|
|
72
|
+
durationMs: Date.now() - startMs,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Synchronous version of withVerifyTimeout for use with non-async functions.
|
|
80
|
+
*
|
|
81
|
+
* Since true synchronous timeout is impossible in Node.js without worker threads,
|
|
82
|
+
* this wraps the synchronous function as a Promise and applies the async timeout.
|
|
83
|
+
* If the sync function blocks the event loop longer than timeoutMs, the timeout
|
|
84
|
+
* will fire only after it completes — this is a best-effort guard for functions
|
|
85
|
+
* that are expected to complete quickly but may unexpectedly stall.
|
|
86
|
+
*/
|
|
87
|
+
async function withVerifyTimeoutSync(fn, timeoutMs) {
|
|
88
|
+
return withVerifyTimeout(() => Promise.resolve(fn()), timeoutMs);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build a structured CI health summary from subsystem timing data.
|
|
92
|
+
*
|
|
93
|
+
* @param input Subsystem timings collected during verify execution
|
|
94
|
+
*/
|
|
95
|
+
function buildCIHealthSummary(input) {
|
|
96
|
+
const totalDurationMs = input.subsystems.reduce((s, sub) => s + sub.durationMs, 0);
|
|
97
|
+
const degradedSubsystems = input.subsystems
|
|
98
|
+
.filter(s => s.status === 'degraded' || s.status === 'timeout' || s.status === 'error')
|
|
99
|
+
.map(s => s.name);
|
|
100
|
+
const allSubsystemsHealthy = degradedSubsystems.length === 0;
|
|
101
|
+
let cacheStatus;
|
|
102
|
+
if (!input.cacheEnabled) {
|
|
103
|
+
cacheStatus = 'disabled';
|
|
104
|
+
}
|
|
105
|
+
else if (input.cacheHits > 0) {
|
|
106
|
+
cacheStatus = 'warm';
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
cacheStatus = 'cold';
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
cacheStatus,
|
|
113
|
+
totalDurationMs,
|
|
114
|
+
subsystems: input.subsystems,
|
|
115
|
+
degradedSubsystems,
|
|
116
|
+
allSubsystemsHealthy,
|
|
117
|
+
generatedAt: new Date().toISOString(),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// ── Default timeout constants ─────────────────────────────────────────────────
|
|
121
|
+
/** Default timeout for the structural rule engine per verify run (30s) */
|
|
122
|
+
exports.STRUCTURAL_ENGINE_TIMEOUT_MS = 30_000;
|
|
123
|
+
/** Default timeout for the brain context indexer (20s) */
|
|
124
|
+
exports.BRAIN_INDEXER_TIMEOUT_MS = 20_000;
|
|
125
|
+
/** Default timeout for intent engine operations (25s) */
|
|
126
|
+
exports.INTENT_ENGINE_TIMEOUT_MS = 25_000;
|
|
127
|
+
/** Maximum total verify wall-clock time before CI is considered hung (5min) */
|
|
128
|
+
exports.VERIFY_TOTAL_TIMEOUT_MS = 300_000;
|
|
129
|
+
//# sourceMappingURL=verify-runtime-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-runtime-guard.js","sourceRoot":"","sources":["../../src/governance/verify-runtime-guard.ts"],"names":[],"mappings":"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"}
|