@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":"PY014-fixed-sleep-retry.d.ts","sourceRoot":"","sources":["../../../src/structural-rules/python/PY014-fixed-sleep-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA8C7E,qBAAa,oBAAqB,YAAW,cAAc;IACzD,EAAE,SAAW;IACb,IAAI,SAAmD;IACvD,SAAS,SAAW;IACpB,QAAQ,EAAG,UAAU,CAAU;IAC/B,SAAS,EAAE,YAAY,EAAE,CAAc;IACvC,WAAW,SAE8B;IAEzC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,mBAAmB,EAAE;CAuEnE"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PY014FixedSleepRetry = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* PY014 — Fixed-Sleep Retry Without Exponential Backoff
|
|
6
|
+
*
|
|
7
|
+
* Retry loops that use a constant time.sleep() delay cause thundering herd
|
|
8
|
+
* against downstream services when many workers fail simultaneously.
|
|
9
|
+
*
|
|
10
|
+
* Detection: for/while loop + except clause + time.sleep(constant literal)
|
|
11
|
+
* with no exponential calculation visible nearby.
|
|
12
|
+
*
|
|
13
|
+
* BLOCKING: fixed retry sleep = synchronized retry storms on partial outage.
|
|
14
|
+
*/
|
|
15
|
+
const LOOP_START_RE = /^(\s*)(?:for\s+\w+|while\s+)/;
|
|
16
|
+
const EXCEPT_RE = /^\s*except\b/;
|
|
17
|
+
const FIXED_SLEEP_RE = /\btime\.sleep\s*\(\s*(\d+(?:\.\d+)?)\s*\)/;
|
|
18
|
+
const EXPONENTIAL_MARKERS = [
|
|
19
|
+
/\*\*\s*\d/,
|
|
20
|
+
/\*=\s*2/,
|
|
21
|
+
/\bmin\s*\(/,
|
|
22
|
+
/\brandom\.uniform/,
|
|
23
|
+
/\bjitter\b/,
|
|
24
|
+
/\bbackoff\b/,
|
|
25
|
+
/\bexponential\b/,
|
|
26
|
+
/sleep\s*\*\s*\d/,
|
|
27
|
+
/\battempt\s*\*/,
|
|
28
|
+
/\* attempt/,
|
|
29
|
+
];
|
|
30
|
+
function hasExponentialNearby(lines, center, radius = 12) {
|
|
31
|
+
const start = Math.max(0, center - radius);
|
|
32
|
+
const end = Math.min(lines.length - 1, center + radius);
|
|
33
|
+
for (let i = start; i <= end; i++) {
|
|
34
|
+
for (const re of EXPONENTIAL_MARKERS) {
|
|
35
|
+
if (re.test(lines[i]))
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
function getIndent(line) {
|
|
42
|
+
return line.length - line.trimStart().length;
|
|
43
|
+
}
|
|
44
|
+
class PY014FixedSleepRetry {
|
|
45
|
+
id = 'PY014';
|
|
46
|
+
name = 'Fixed-sleep retry without exponential backoff';
|
|
47
|
+
policyRef = 'PY014';
|
|
48
|
+
severity = 'BLOCKING';
|
|
49
|
+
languages = ['python'];
|
|
50
|
+
description = 'time.sleep() with a constant value inside a retry loop creates thundering herd. ' +
|
|
51
|
+
'Use exponential backoff with jitter.';
|
|
52
|
+
check(filePath, sourceText) {
|
|
53
|
+
try {
|
|
54
|
+
const violations = [];
|
|
55
|
+
const lines = sourceText.replace(/\r\n/g, '\n').replace(/\r/g, '\n').split('\n');
|
|
56
|
+
const loopScopes = [];
|
|
57
|
+
for (let i = 0; i < lines.length; i++) {
|
|
58
|
+
const line = lines[i];
|
|
59
|
+
const trimmed = line.trimStart();
|
|
60
|
+
// Track loop starts
|
|
61
|
+
const loopMatch = LOOP_START_RE.exec(line);
|
|
62
|
+
if (loopMatch) {
|
|
63
|
+
loopScopes.push({ startLine: i, indent: loopMatch[1].length, hasExcept: false });
|
|
64
|
+
}
|
|
65
|
+
// Pop exited scopes
|
|
66
|
+
if (loopScopes.length > 0 && trimmed.length > 0 && !trimmed.startsWith('#')) {
|
|
67
|
+
const currentIndent = getIndent(line);
|
|
68
|
+
while (loopScopes.length > 0 &&
|
|
69
|
+
currentIndent < loopScopes[loopScopes.length - 1].indent &&
|
|
70
|
+
i > loopScopes[loopScopes.length - 1].startLine) {
|
|
71
|
+
loopScopes.pop();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Mark loop scope as containing an except
|
|
75
|
+
if (EXCEPT_RE.test(line) && loopScopes.length > 0) {
|
|
76
|
+
loopScopes[loopScopes.length - 1].hasExcept = true;
|
|
77
|
+
}
|
|
78
|
+
// Detect fixed sleep inside retry loop
|
|
79
|
+
const sleepMatch = FIXED_SLEEP_RE.exec(line);
|
|
80
|
+
if (sleepMatch && loopScopes.length > 0) {
|
|
81
|
+
const scope = loopScopes[loopScopes.length - 1];
|
|
82
|
+
if (scope.hasExcept && !hasExponentialNearby(lines, i)) {
|
|
83
|
+
const sleepVal = sleepMatch[1];
|
|
84
|
+
violations.push({
|
|
85
|
+
ruleId: this.id,
|
|
86
|
+
ruleName: this.name,
|
|
87
|
+
policyRef: this.policyRef,
|
|
88
|
+
severity: this.severity,
|
|
89
|
+
filePath,
|
|
90
|
+
line: i + 1,
|
|
91
|
+
column: line.indexOf('time.sleep') + 1,
|
|
92
|
+
evidence: line.trim(),
|
|
93
|
+
operationalRisk: `Fixed retry sleep time.sleep(${sleepVal}) inside retry loop (loop at line ${scope.startLine + 1}). ` +
|
|
94
|
+
'Under partial outage, all workers retry simultaneously after the same delay, ' +
|
|
95
|
+
'creating a thundering herd that overwhelms the recovering service.',
|
|
96
|
+
remediation: `Replace with exponential backoff:\n` +
|
|
97
|
+
` import random\n` +
|
|
98
|
+
` sleep_time = min(${sleepVal} * (2 ** attempt) + random.uniform(0, 1), max_sleep)\n` +
|
|
99
|
+
` time.sleep(sleep_time)`,
|
|
100
|
+
determinism: 'deterministic-structural',
|
|
101
|
+
confidence: 0.82,
|
|
102
|
+
language: 'python',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return violations;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.PY014FixedSleepRetry = PY014FixedSleepRetry;
|
|
115
|
+
//# sourceMappingURL=PY014-fixed-sleep-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PY014-fixed-sleep-retry.js","sourceRoot":"","sources":["../../../src/structural-rules/python/PY014-fixed-sleep-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,18 @@ export interface StructuralViolation {
|
|
|
19
19
|
determinism: DeterminismLevel;
|
|
20
20
|
confidence: number;
|
|
21
21
|
language: RuleLanguage;
|
|
22
|
+
/**
|
|
23
|
+
* Phase 2 — Diff-scoped enforcement.
|
|
24
|
+
* true → violation is on a line modified in the current diff (BLOCKING eligible)
|
|
25
|
+
* false → violation is on an untouched historical line (demoted to ADVISORY + legacyDebt)
|
|
26
|
+
* undefined → diff-scope not applied (e.g. --strict-full-file mode)
|
|
27
|
+
*/
|
|
28
|
+
introducedOnModifiedLine?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* true when the violation is demoted from BLOCKING to ADVISORY because it
|
|
31
|
+
* exists on an unmodified line. Tagged for reviewer visibility and telemetry.
|
|
32
|
+
*/
|
|
33
|
+
legacyDebt?: boolean;
|
|
22
34
|
}
|
|
23
35
|
export interface StructuralRuleResult {
|
|
24
36
|
violations: StructuralViolation[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/structural-rules/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,wBAAwB,GACxB,oBAAoB,GACpB,uBAAuB,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAY,MAAM,CAAC;IACzB,QAAQ,EAAU,MAAM,CAAC;IACzB,SAAS,EAAS,MAAM,CAAC;IACzB,QAAQ,EAAU,YAAY,CAAC;IAC/B,QAAQ,EAAU,MAAM,CAAC;IACzB,IAAI,EAAc,MAAM,CAAC;IACzB,MAAM,EAAY,MAAM,CAAC;IACzB,QAAQ,EAAU,MAAM,CAAC;IACzB,eAAe,EAAG,MAAM,CAAC;IACzB,WAAW,EAAO,MAAM,CAAC;IACzB,WAAW,EAAO,gBAAgB,CAAC;IACnC,UAAU,EAAQ,MAAM,CAAC;IACzB,QAAQ,EAAU,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/structural-rules/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,wBAAwB,GACxB,oBAAoB,GACpB,uBAAuB,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAY,MAAM,CAAC;IACzB,QAAQ,EAAU,MAAM,CAAC;IACzB,SAAS,EAAS,MAAM,CAAC;IACzB,QAAQ,EAAU,YAAY,CAAC;IAC/B,QAAQ,EAAU,MAAM,CAAC;IACzB,IAAI,EAAc,MAAM,CAAC;IACzB,MAAM,EAAY,MAAM,CAAC;IACzB,QAAQ,EAAU,MAAM,CAAC;IACzB,eAAe,EAAG,MAAM,CAAC;IACzB,WAAW,EAAO,MAAM,CAAC;IACzB,WAAW,EAAO,gBAAgB,CAAC;IACnC,UAAU,EAAQ,MAAM,CAAC;IACzB,QAAQ,EAAU,YAAY,CAAC;IAC/B;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAY,mBAAmB,EAAE,CAAC;IAC5C,aAAa,EAAS,MAAM,CAAC;IAC7B,UAAU,EAAY,MAAM,CAAC;IAC7B,YAAY,EAAU,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAU,MAAM,EAAE,CAAC;IAC/B,eAAe,EAAO,MAAM,CAAC;IAC7B,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,mBAAmB,EAAG,kBAAkB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAS,MAAM,CAAC;IAClB,IAAI,EAAO,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAG,YAAY,CAAC;IACxB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAC;CACpE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ContextPack, EngineeringInvariantMemory, IntentPack, RepositoryIntelligenceGraph, SessionContinuityRuntime } from '@neurcode-ai/contracts';
|
|
2
|
+
export interface ActiveEngineeringContext {
|
|
3
|
+
source: 'intent-runtime';
|
|
4
|
+
intentPack: IntentPack;
|
|
5
|
+
contextPack: ContextPack;
|
|
6
|
+
repositoryGraph: RepositoryIntelligenceGraph;
|
|
7
|
+
invariantMemory: EngineeringInvariantMemory | null;
|
|
8
|
+
sessionRuntime: SessionContinuityRuntime;
|
|
9
|
+
warnings: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function loadActiveEngineeringContext(projectRoot: string): ActiveEngineeringContext | null;
|
|
12
|
+
//# sourceMappingURL=active-engineering-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-engineering-context.d.ts","sourceRoot":"","sources":["../../src/utils/active-engineering-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,0BAA0B,EAC1B,UAAU,EACV,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAYhC,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,2BAA2B,CAAC;IAC7C,eAAe,EAAE,0BAA0B,GAAG,IAAI,CAAC;IACnD,cAAc,EAAE,wBAAwB,CAAC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAmEjG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadActiveEngineeringContext = loadActiveEngineeringContext;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const intelligence_runtime_common_1 = require("./intelligence-runtime-common");
|
|
6
|
+
const intent_contract_diagnostics_1 = require("./intent-contract-diagnostics");
|
|
7
|
+
function loadActiveEngineeringContext(projectRoot) {
|
|
8
|
+
const basePath = (0, path_1.join)(projectRoot, '.neurcode');
|
|
9
|
+
const intentPack = (0, intelligence_runtime_common_1.readJsonFile)((0, path_1.join)(basePath, intelligence_runtime_common_1.ACTIVE_INTENT_PACK_FILENAME));
|
|
10
|
+
const contextPack = (0, intelligence_runtime_common_1.readJsonFile)((0, path_1.join)(basePath, intelligence_runtime_common_1.ACTIVE_CONTEXT_PACK_FILENAME));
|
|
11
|
+
const repositoryGraph = (0, intelligence_runtime_common_1.readJsonFile)((0, path_1.join)(basePath, intelligence_runtime_common_1.ACTIVE_REPOSITORY_GRAPH_FILENAME));
|
|
12
|
+
const invariantMemory = (0, intelligence_runtime_common_1.readJsonFile)((0, path_1.join)(basePath, intelligence_runtime_common_1.ACTIVE_INVARIANT_MEMORY_FILENAME));
|
|
13
|
+
const sessionRuntime = (0, intelligence_runtime_common_1.readJsonFile)((0, path_1.join)(basePath, intelligence_runtime_common_1.ACTIVE_SESSION_RUNTIME_FILENAME));
|
|
14
|
+
if (!intentPack || !contextPack || !repositoryGraph || !sessionRuntime) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const warnings = [];
|
|
18
|
+
if (contextPack.intentPackId !== intentPack.intentPackId) {
|
|
19
|
+
warnings.push('Context pack does not match the active intent pack.');
|
|
20
|
+
}
|
|
21
|
+
if (contextPack.repositoryGraphId !== repositoryGraph.graphId) {
|
|
22
|
+
warnings.push('Context pack does not match the active repository intelligence graph.');
|
|
23
|
+
}
|
|
24
|
+
if (sessionRuntime.intentPackId !== intentPack.intentPackId) {
|
|
25
|
+
warnings.push('Session runtime does not match the active intent pack.');
|
|
26
|
+
}
|
|
27
|
+
if (sessionRuntime.contextPackId !== contextPack.contextPackId) {
|
|
28
|
+
warnings.push('Session runtime does not match the active context pack.');
|
|
29
|
+
}
|
|
30
|
+
if (sessionRuntime.repositoryGraphId !== repositoryGraph.graphId) {
|
|
31
|
+
warnings.push('Session runtime does not match the active repository intelligence graph.');
|
|
32
|
+
}
|
|
33
|
+
if (!invariantMemory) {
|
|
34
|
+
warnings.push('Active engineering context is missing invariant memory; semantic contract lineage will be degraded.');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
if (invariantMemory.intentPackId !== intentPack.intentPackId) {
|
|
38
|
+
warnings.push('Invariant memory does not match the active intent pack.');
|
|
39
|
+
}
|
|
40
|
+
if (invariantMemory.repositoryGraphId !== repositoryGraph.graphId) {
|
|
41
|
+
warnings.push('Invariant memory does not match the active repository intelligence graph.');
|
|
42
|
+
}
|
|
43
|
+
if (sessionRuntime.invariantMemoryId && invariantMemory.invariantMemoryId !== sessionRuntime.invariantMemoryId) {
|
|
44
|
+
warnings.push('Session runtime does not match the active invariant memory.');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const currentBranch = (0, intelligence_runtime_common_1.getGitBranchName)(projectRoot);
|
|
48
|
+
if (currentBranch && sessionRuntime.branchName && currentBranch !== sessionRuntime.branchName) {
|
|
49
|
+
warnings.push(`Active engineering context was created on branch ${sessionRuntime.branchName}, current branch is ${currentBranch}.`);
|
|
50
|
+
}
|
|
51
|
+
warnings.push(...(0, intent_contract_diagnostics_1.evaluateIntentContractDiagnostics)({
|
|
52
|
+
projectRoot,
|
|
53
|
+
intentPack,
|
|
54
|
+
contextPack,
|
|
55
|
+
repositoryGraph,
|
|
56
|
+
}));
|
|
57
|
+
return {
|
|
58
|
+
source: 'intent-runtime',
|
|
59
|
+
intentPack,
|
|
60
|
+
contextPack,
|
|
61
|
+
repositoryGraph,
|
|
62
|
+
invariantMemory,
|
|
63
|
+
sessionRuntime,
|
|
64
|
+
warnings,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=active-engineering-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-engineering-context.js","sourceRoot":"","sources":["../../src/utils/active-engineering-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface AtomicWriteResult {
|
|
2
|
+
path: string;
|
|
3
|
+
bytes: number;
|
|
4
|
+
sha256: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AtomicWriteOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Best-effort fsync of the temp file before rename and containing directory
|
|
9
|
+
* after rename. Disable only for non-custody caches where speed matters more
|
|
10
|
+
* than crash durability.
|
|
11
|
+
*/
|
|
12
|
+
fsync?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface AppendWriteOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Best-effort fsync after append. Keep enabled for custody-critical ledgers;
|
|
17
|
+
* disable only for high-volume diagnostic streams where the primary artifact
|
|
18
|
+
* remains the source of truth.
|
|
19
|
+
*/
|
|
20
|
+
fsync?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface FileLockOptions {
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
staleMs?: number;
|
|
25
|
+
retryMs?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function stableJson(value: unknown): string;
|
|
28
|
+
export declare function atomicWriteUtf8FileSync(filePath: string, content: string, options?: AtomicWriteOptions): AtomicWriteResult;
|
|
29
|
+
export declare function atomicWriteJsonFileSync(filePath: string, value: unknown, options?: AtomicWriteOptions): AtomicWriteResult;
|
|
30
|
+
export declare function appendUtf8FileSync(filePath: string, content: string, options?: AppendWriteOptions): AtomicWriteResult;
|
|
31
|
+
export declare function appendJsonLineSync(filePath: string, value: unknown, options?: AppendWriteOptions): AtomicWriteResult;
|
|
32
|
+
export declare function withFileLockSync<T>(lockPath: string, fn: () => T, options?: FileLockOptions): T;
|
|
33
|
+
//# sourceMappingURL=artifact-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-io.d.ts","sourceRoot":"","sources":["../../src/utils/artifact-io.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEjD;AAMD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA+BnB;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAEnB;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAqBnB;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAEnB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,CAAC,EACX,OAAO,GAAE,eAAoB,GAC5B,CAAC,CA+DH"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stableJson = stableJson;
|
|
4
|
+
exports.atomicWriteUtf8FileSync = atomicWriteUtf8FileSync;
|
|
5
|
+
exports.atomicWriteJsonFileSync = atomicWriteJsonFileSync;
|
|
6
|
+
exports.appendUtf8FileSync = appendUtf8FileSync;
|
|
7
|
+
exports.appendJsonLineSync = appendJsonLineSync;
|
|
8
|
+
exports.withFileLockSync = withFileLockSync;
|
|
9
|
+
const crypto_1 = require("crypto");
|
|
10
|
+
const fs_1 = require("fs");
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
function ensureParentDirectory(filePath) {
|
|
13
|
+
const dir = (0, path_1.dirname)(filePath);
|
|
14
|
+
if (!(0, fs_1.existsSync)(dir)) {
|
|
15
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
return dir;
|
|
18
|
+
}
|
|
19
|
+
function bestEffortFsyncFile(fd, enabled) {
|
|
20
|
+
if (!enabled)
|
|
21
|
+
return;
|
|
22
|
+
try {
|
|
23
|
+
(0, fs_1.fsyncSync)(fd);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Some CI filesystems do not support fsync. The atomic rename still
|
|
27
|
+
// prevents partial JSON from becoming the final artifact.
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function bestEffortFsyncDirectory(dir, enabled) {
|
|
31
|
+
if (!enabled)
|
|
32
|
+
return;
|
|
33
|
+
let fd = null;
|
|
34
|
+
try {
|
|
35
|
+
fd = (0, fs_1.openSync)(dir, 'r');
|
|
36
|
+
(0, fs_1.fsyncSync)(fd);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Directory fsync is not available on all platforms/filesystems.
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
if (fd !== null) {
|
|
43
|
+
try {
|
|
44
|
+
(0, fs_1.closeSync)(fd);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Nothing useful to do during best-effort durability cleanup.
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function stableJson(value) {
|
|
53
|
+
return `${JSON.stringify(value, null, 2)}\n`;
|
|
54
|
+
}
|
|
55
|
+
function sleepSync(ms) {
|
|
56
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
57
|
+
}
|
|
58
|
+
function atomicWriteUtf8FileSync(filePath, content, options = {}) {
|
|
59
|
+
const dir = ensureParentDirectory(filePath);
|
|
60
|
+
const fsyncEnabled = options.fsync !== false;
|
|
61
|
+
const tmpPath = (0, path_1.join)(dir, `.${(0, path_1.basename)(filePath)}.${process.pid}.${Date.now()}.${(0, crypto_1.randomUUID)()}.tmp`);
|
|
62
|
+
const bytes = Buffer.byteLength(content, 'utf-8');
|
|
63
|
+
const sha256 = (0, crypto_1.createHash)('sha256').update(content, 'utf-8').digest('hex');
|
|
64
|
+
let fd = null;
|
|
65
|
+
try {
|
|
66
|
+
fd = (0, fs_1.openSync)(tmpPath, 'wx');
|
|
67
|
+
(0, fs_1.writeFileSync)(fd, content, 'utf-8');
|
|
68
|
+
bestEffortFsyncFile(fd, fsyncEnabled);
|
|
69
|
+
(0, fs_1.closeSync)(fd);
|
|
70
|
+
fd = null;
|
|
71
|
+
(0, fs_1.renameSync)(tmpPath, filePath);
|
|
72
|
+
bestEffortFsyncDirectory(dir, fsyncEnabled);
|
|
73
|
+
return { path: filePath, bytes, sha256 };
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (fd !== null) {
|
|
77
|
+
try {
|
|
78
|
+
(0, fs_1.closeSync)(fd);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Ignore close failures while preserving the original write error.
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
(0, fs_1.rmSync)(tmpPath, { force: true });
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function atomicWriteJsonFileSync(filePath, value, options = {}) {
|
|
89
|
+
return atomicWriteUtf8FileSync(filePath, stableJson(value), options);
|
|
90
|
+
}
|
|
91
|
+
function appendUtf8FileSync(filePath, content, options = {}) {
|
|
92
|
+
ensureParentDirectory(filePath);
|
|
93
|
+
const fsyncEnabled = options.fsync !== false;
|
|
94
|
+
const bytes = Buffer.byteLength(content, 'utf-8');
|
|
95
|
+
const sha256 = (0, crypto_1.createHash)('sha256').update(content, 'utf-8').digest('hex');
|
|
96
|
+
let fd = null;
|
|
97
|
+
try {
|
|
98
|
+
fd = (0, fs_1.openSync)(filePath, 'a');
|
|
99
|
+
(0, fs_1.writeFileSync)(fd, content, 'utf-8');
|
|
100
|
+
bestEffortFsyncFile(fd, fsyncEnabled);
|
|
101
|
+
return { path: filePath, bytes, sha256 };
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
if (fd !== null) {
|
|
105
|
+
try {
|
|
106
|
+
(0, fs_1.closeSync)(fd);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Nothing useful to do during best-effort append cleanup.
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function appendJsonLineSync(filePath, value, options = {}) {
|
|
115
|
+
return appendUtf8FileSync(filePath, `${JSON.stringify(value)}\n`, options);
|
|
116
|
+
}
|
|
117
|
+
function withFileLockSync(lockPath, fn, options = {}) {
|
|
118
|
+
ensureParentDirectory(lockPath);
|
|
119
|
+
const timeoutMs = Math.max(0, Math.floor(options.timeoutMs ?? 2000));
|
|
120
|
+
const staleMs = Math.max(timeoutMs + 1, Math.floor(options.staleMs ?? 30000));
|
|
121
|
+
const retryMs = Math.max(5, Math.floor(options.retryMs ?? 25));
|
|
122
|
+
const startedAt = Date.now();
|
|
123
|
+
while (true) {
|
|
124
|
+
let fd = null;
|
|
125
|
+
try {
|
|
126
|
+
fd = (0, fs_1.openSync)(lockPath, 'wx');
|
|
127
|
+
(0, fs_1.writeFileSync)(fd, `${JSON.stringify({
|
|
128
|
+
pid: process.pid,
|
|
129
|
+
acquiredAt: new Date().toISOString(),
|
|
130
|
+
})}\n`, 'utf-8');
|
|
131
|
+
bestEffortFsyncFile(fd, false);
|
|
132
|
+
try {
|
|
133
|
+
return fn();
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
try {
|
|
137
|
+
(0, fs_1.rmSync)(lockPath, { force: true });
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
try {
|
|
141
|
+
(0, fs_1.closeSync)(fd);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Preserve the work result; lock cleanup is best-effort after rm.
|
|
145
|
+
}
|
|
146
|
+
fd = null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (fd !== null) {
|
|
152
|
+
try {
|
|
153
|
+
(0, fs_1.closeSync)(fd);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Preserve the original lock/acquisition error.
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const errorCode = typeof error === 'object' && error && 'code' in error
|
|
160
|
+
? String(error.code)
|
|
161
|
+
: '';
|
|
162
|
+
if (errorCode !== 'EEXIST') {
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
const ageMs = Date.now() - (0, fs_1.statSync)(lockPath).mtimeMs;
|
|
167
|
+
if (ageMs > staleMs) {
|
|
168
|
+
(0, fs_1.rmSync)(lockPath, { force: true });
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// The contender may have released the lock between open/stat attempts.
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (Date.now() - startedAt >= timeoutMs) {
|
|
177
|
+
throw new Error(`Timed out acquiring file lock: ${lockPath}`);
|
|
178
|
+
}
|
|
179
|
+
sleepSync(retryMs);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=artifact-io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-io.js","sourceRoot":"","sources":["../../src/utils/artifact-io.ts"],"names":[],"mappings":"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"}
|
|
@@ -80,7 +80,7 @@ export interface ReadChangeContractResult {
|
|
|
80
80
|
error?: string;
|
|
81
81
|
}
|
|
82
82
|
export interface ChangeContractViolation {
|
|
83
|
-
code: 'CHANGE_CONTRACT_PLAN_MISMATCH' | 'CHANGE_CONTRACT_UNEXPECTED_FILE' | 'CHANGE_CONTRACT_MISSING_EXPECTED_FILE' | 'CHANGE_CONTRACT_BLOCKED_FILE_TOUCHED' | 'CHANGE_CONTRACT_ACTION_MISMATCH' | 'CHANGE_CONTRACT_MISSING_EXPECTED_SYMBOL' | 'CHANGE_CONTRACT_BLOCKED_SYMBOL_TOUCHED' | 'CHANGE_CONTRACT_SYMBOL_ACTION_MISMATCH' | 'CHANGE_CONTRACT_POLICY_LOCK_MISMATCH' | 'CHANGE_CONTRACT_COMPILED_POLICY_MISMATCH';
|
|
83
|
+
code: 'CHANGE_CONTRACT_PLAN_MISMATCH' | 'CHANGE_CONTRACT_UNEXPECTED_FILE' | 'CHANGE_CONTRACT_SERVICE_BOUNDARY_BREACH' | 'CHANGE_CONTRACT_INFRA_BOUNDARY_BREACH' | 'CHANGE_CONTRACT_DEPENDENCY_BOUNDARY_BREACH' | 'CHANGE_CONTRACT_SENSITIVE_BOUNDARY_BREACH' | 'CHANGE_CONTRACT_MISSING_EXPECTED_FILE' | 'CHANGE_CONTRACT_BLOCKED_FILE_TOUCHED' | 'CHANGE_CONTRACT_ACTION_MISMATCH' | 'CHANGE_CONTRACT_MISSING_EXPECTED_SYMBOL' | 'CHANGE_CONTRACT_BLOCKED_SYMBOL_TOUCHED' | 'CHANGE_CONTRACT_SYMBOL_ACTION_MISMATCH' | 'CHANGE_CONTRACT_POLICY_LOCK_MISMATCH' | 'CHANGE_CONTRACT_COMPILED_POLICY_MISMATCH';
|
|
84
84
|
message: string;
|
|
85
85
|
file?: string;
|
|
86
86
|
symbol?: string;
|
|
@@ -98,6 +98,10 @@ export interface ChangeContractEvaluation {
|
|
|
98
98
|
missingExpectedFiles: number;
|
|
99
99
|
blockedFilesTouched: number;
|
|
100
100
|
actionMismatches: number;
|
|
101
|
+
serviceBoundaryBreaches: number;
|
|
102
|
+
infraBoundaryBreaches: number;
|
|
103
|
+
dependencyBoundaryBreaches: number;
|
|
104
|
+
sensitiveBoundaryBreaches: number;
|
|
101
105
|
expectedSymbols: number;
|
|
102
106
|
changedSymbols: number;
|
|
103
107
|
missingExpectedSymbols: number;
|
|
@@ -151,7 +155,7 @@ export declare function evaluateChangeContract(contract: ChangeContract, input:
|
|
|
151
155
|
compiledPolicyFingerprint?: string | null;
|
|
152
156
|
}): ChangeContractEvaluation;
|
|
153
157
|
export interface ChangeContractViolationGroup {
|
|
154
|
-
key: 'out_of_scope_changes' | 'missing_expected_files' | 'blocked_files_touched' | 'file_action_mismatches' | 'missing_expected_symbols' | 'blocked_symbols_touched' | 'symbol_action_mismatches' | 'contract_metadata_mismatches' | 'other';
|
|
158
|
+
key: 'out_of_scope_changes' | 'architectural_boundary_breaches' | 'dependency_boundary_breaches' | 'missing_expected_files' | 'blocked_files_touched' | 'file_action_mismatches' | 'missing_expected_symbols' | 'blocked_symbols_touched' | 'symbol_action_mismatches' | 'contract_metadata_mismatches' | 'other';
|
|
155
159
|
title: string;
|
|
156
160
|
impact: string;
|
|
157
161
|
items: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-contract.d.ts","sourceRoot":"","sources":["../../src/utils/change-contract.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"change-contract.d.ts","sourceRoot":"","sources":["../../src/utils/change-contract.ts"],"names":[],"mappings":"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"}
|