@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.
Files changed (260) hide show
  1. package/dist/commands/bootstrap-policy.d.ts +29 -0
  2. package/dist/commands/bootstrap-policy.d.ts.map +1 -0
  3. package/dist/commands/bootstrap-policy.js +334 -0
  4. package/dist/commands/bootstrap-policy.js.map +1 -0
  5. package/dist/commands/doctor.d.ts.map +1 -1
  6. package/dist/commands/doctor.js +82 -0
  7. package/dist/commands/doctor.js.map +1 -1
  8. package/dist/commands/governance.d.ts +3 -0
  9. package/dist/commands/governance.d.ts.map +1 -0
  10. package/dist/commands/governance.js +390 -0
  11. package/dist/commands/governance.js.map +1 -0
  12. package/dist/commands/quickstart.d.ts +21 -0
  13. package/dist/commands/quickstart.d.ts.map +1 -0
  14. package/dist/commands/quickstart.js +178 -0
  15. package/dist/commands/quickstart.js.map +1 -0
  16. package/dist/commands/remediate-export.d.ts +36 -0
  17. package/dist/commands/remediate-export.d.ts.map +1 -0
  18. package/dist/commands/remediate-export.js +1072 -0
  19. package/dist/commands/remediate-export.js.map +1 -0
  20. package/dist/commands/replay.d.ts.map +1 -1
  21. package/dist/commands/replay.js +14 -0
  22. package/dist/commands/replay.js.map +1 -1
  23. package/dist/commands/session.d.ts +7 -0
  24. package/dist/commands/session.d.ts.map +1 -1
  25. package/dist/commands/session.js +156 -0
  26. package/dist/commands/session.js.map +1 -1
  27. package/dist/commands/start-intent.d.ts.map +1 -1
  28. package/dist/commands/start-intent.js +61 -11
  29. package/dist/commands/start-intent.js.map +1 -1
  30. package/dist/commands/verify-guidance.d.ts +5 -0
  31. package/dist/commands/verify-guidance.d.ts.map +1 -0
  32. package/dist/commands/verify-guidance.js +49 -0
  33. package/dist/commands/verify-guidance.js.map +1 -0
  34. package/dist/commands/verify-output.d.ts +37 -0
  35. package/dist/commands/verify-output.d.ts.map +1 -0
  36. package/dist/commands/verify-output.js +572 -0
  37. package/dist/commands/verify-output.js.map +1 -0
  38. package/dist/commands/verify-render.d.ts +41 -0
  39. package/dist/commands/verify-render.d.ts.map +1 -0
  40. package/dist/commands/verify-render.js +457 -0
  41. package/dist/commands/verify-render.js.map +1 -0
  42. package/dist/commands/verify.d.ts.map +1 -1
  43. package/dist/commands/verify.js +384 -1091
  44. package/dist/commands/verify.js.map +1 -1
  45. package/dist/commands/workspace.d.ts.map +1 -1
  46. package/dist/commands/workspace.js +3 -14
  47. package/dist/commands/workspace.js.map +1 -1
  48. package/dist/context-engine/graph.d.ts.map +1 -1
  49. package/dist/context-engine/graph.js +69 -7
  50. package/dist/context-engine/graph.js.map +1 -1
  51. package/dist/context-engine/scanner.d.ts.map +1 -1
  52. package/dist/context-engine/scanner.js +9 -2
  53. package/dist/context-engine/scanner.js.map +1 -1
  54. package/dist/daemon/compatibility/execution.d.ts +42 -0
  55. package/dist/daemon/compatibility/execution.d.ts.map +1 -0
  56. package/dist/daemon/compatibility/execution.js +183 -0
  57. package/dist/daemon/compatibility/execution.js.map +1 -0
  58. package/dist/daemon/compatibility/mutation.d.ts +24 -0
  59. package/dist/daemon/compatibility/mutation.d.ts.map +1 -0
  60. package/dist/daemon/compatibility/mutation.js +724 -0
  61. package/dist/daemon/compatibility/mutation.js.map +1 -0
  62. package/dist/daemon/routes.d.ts +19 -0
  63. package/dist/daemon/routes.d.ts.map +1 -0
  64. package/dist/daemon/routes.js +123 -0
  65. package/dist/daemon/routes.js.map +1 -0
  66. package/dist/daemon/runtime/execution-bus.d.ts +217 -0
  67. package/dist/daemon/runtime/execution-bus.d.ts.map +1 -0
  68. package/dist/daemon/runtime/execution-bus.js +1420 -0
  69. package/dist/daemon/runtime/execution-bus.js.map +1 -0
  70. package/dist/daemon/runtime/workspace-runtime.d.ts +280 -0
  71. package/dist/daemon/runtime/workspace-runtime.d.ts.map +1 -0
  72. package/dist/daemon/runtime/workspace-runtime.js +1473 -0
  73. package/dist/daemon/runtime/workspace-runtime.js.map +1 -0
  74. package/dist/daemon/server.d.ts.map +1 -1
  75. package/dist/daemon/server.js +171 -874
  76. package/dist/daemon/server.js.map +1 -1
  77. package/dist/daemon/shaping.d.ts +11 -0
  78. package/dist/daemon/shaping.d.ts.map +1 -0
  79. package/dist/daemon/shaping.js +240 -0
  80. package/dist/daemon/shaping.js.map +1 -0
  81. package/dist/governance/canonical-invariants.d.ts +88 -0
  82. package/dist/governance/canonical-invariants.d.ts.map +1 -0
  83. package/dist/governance/canonical-invariants.js +197 -0
  84. package/dist/governance/canonical-invariants.js.map +1 -0
  85. package/dist/governance/canonical-ordering.d.ts +76 -0
  86. package/dist/governance/canonical-ordering.d.ts.map +1 -0
  87. package/dist/governance/canonical-ordering.js +189 -0
  88. package/dist/governance/canonical-ordering.js.map +1 -0
  89. package/dist/governance/canonical-pipeline.d.ts +9 -1
  90. package/dist/governance/canonical-pipeline.d.ts.map +1 -1
  91. package/dist/governance/canonical-pipeline.js +367 -24
  92. package/dist/governance/canonical-pipeline.js.map +1 -1
  93. package/dist/governance/diff-line-provenance.d.ts +59 -0
  94. package/dist/governance/diff-line-provenance.d.ts.map +1 -0
  95. package/dist/governance/diff-line-provenance.js +118 -0
  96. package/dist/governance/diff-line-provenance.js.map +1 -0
  97. package/dist/governance/pilot-readiness.d.ts +34 -0
  98. package/dist/governance/pilot-readiness.d.ts.map +1 -0
  99. package/dist/governance/pilot-readiness.js +226 -0
  100. package/dist/governance/pilot-readiness.js.map +1 -0
  101. package/dist/governance/policy-parity-validator.d.ts +62 -0
  102. package/dist/governance/policy-parity-validator.d.ts.map +1 -0
  103. package/dist/governance/policy-parity-validator.js +137 -0
  104. package/dist/governance/policy-parity-validator.js.map +1 -0
  105. package/dist/governance/remediation-boundary.d.ts +55 -0
  106. package/dist/governance/remediation-boundary.d.ts.map +1 -0
  107. package/dist/governance/remediation-boundary.js +120 -0
  108. package/dist/governance/remediation-boundary.js.map +1 -0
  109. package/dist/governance/structural-cache.d.ts +103 -0
  110. package/dist/governance/structural-cache.d.ts.map +1 -0
  111. package/dist/governance/structural-cache.js +235 -0
  112. package/dist/governance/structural-cache.js.map +1 -0
  113. package/dist/governance/structural-on-diff.d.ts +22 -2
  114. package/dist/governance/structural-on-diff.d.ts.map +1 -1
  115. package/dist/governance/structural-on-diff.js +36 -4
  116. package/dist/governance/structural-on-diff.js.map +1 -1
  117. package/dist/governance/structural-policy-merge.d.ts +8 -0
  118. package/dist/governance/structural-policy-merge.d.ts.map +1 -1
  119. package/dist/governance/structural-policy-merge.js +7 -0
  120. package/dist/governance/structural-policy-merge.js.map +1 -1
  121. package/dist/governance/verify-runtime-guard.d.ts +99 -0
  122. package/dist/governance/verify-runtime-guard.d.ts.map +1 -0
  123. package/dist/governance/verify-runtime-guard.js +129 -0
  124. package/dist/governance/verify-runtime-guard.js.map +1 -0
  125. package/dist/index.js +277 -77
  126. package/dist/index.js.map +1 -1
  127. package/dist/intent-engine/repo-classifier.d.ts +64 -0
  128. package/dist/intent-engine/repo-classifier.d.ts.map +1 -0
  129. package/dist/intent-engine/repo-classifier.js +178 -0
  130. package/dist/intent-engine/repo-classifier.js.map +1 -0
  131. package/dist/structural-rules/index.d.ts +4 -0
  132. package/dist/structural-rules/index.d.ts.map +1 -1
  133. package/dist/structural-rules/index.js +18 -1
  134. package/dist/structural-rules/index.js.map +1 -1
  135. package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +21 -0
  136. package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -1
  137. package/dist/structural-rules/python/PY003-broad-except-clause.js +212 -21
  138. package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -1
  139. package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts +11 -0
  140. package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts.map +1 -0
  141. package/dist/structural-rules/python/PY011-thread-lifecycle.js +97 -0
  142. package/dist/structural-rules/python/PY011-thread-lifecycle.js.map +1 -0
  143. package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts +11 -0
  144. package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts.map +1 -0
  145. package/dist/structural-rules/python/PY012-asyncio-run-misuse.js +83 -0
  146. package/dist/structural-rules/python/PY012-asyncio-run-misuse.js.map +1 -0
  147. package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts +11 -0
  148. package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts.map +1 -0
  149. package/dist/structural-rules/python/PY013-mutable-default-arg.js +73 -0
  150. package/dist/structural-rules/python/PY013-mutable-default-arg.js.map +1 -0
  151. package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts +11 -0
  152. package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts.map +1 -0
  153. package/dist/structural-rules/python/PY014-fixed-sleep-retry.js +115 -0
  154. package/dist/structural-rules/python/PY014-fixed-sleep-retry.js.map +1 -0
  155. package/dist/structural-rules/types.d.ts +12 -0
  156. package/dist/structural-rules/types.d.ts.map +1 -1
  157. package/dist/utils/active-engineering-context.d.ts +12 -0
  158. package/dist/utils/active-engineering-context.d.ts.map +1 -0
  159. package/dist/utils/active-engineering-context.js +67 -0
  160. package/dist/utils/active-engineering-context.js.map +1 -0
  161. package/dist/utils/artifact-io.d.ts +33 -0
  162. package/dist/utils/artifact-io.d.ts.map +1 -0
  163. package/dist/utils/artifact-io.js +183 -0
  164. package/dist/utils/artifact-io.js.map +1 -0
  165. package/dist/utils/change-contract.d.ts +6 -2
  166. package/dist/utils/change-contract.d.ts.map +1 -1
  167. package/dist/utils/change-contract.js +175 -0
  168. package/dist/utils/change-contract.js.map +1 -1
  169. package/dist/utils/context-pack.d.ts +12 -0
  170. package/dist/utils/context-pack.d.ts.map +1 -0
  171. package/dist/utils/context-pack.js +147 -0
  172. package/dist/utils/context-pack.js.map +1 -0
  173. package/dist/utils/control-plane.d.ts +18 -0
  174. package/dist/utils/control-plane.d.ts.map +1 -1
  175. package/dist/utils/control-plane.js +31 -4
  176. package/dist/utils/control-plane.js.map +1 -1
  177. package/dist/utils/drift-intelligence.d.ts +47 -0
  178. package/dist/utils/drift-intelligence.d.ts.map +1 -0
  179. package/dist/utils/drift-intelligence.js +2099 -0
  180. package/dist/utils/drift-intelligence.js.map +1 -0
  181. package/dist/utils/execution-actions.d.ts +22 -0
  182. package/dist/utils/execution-actions.d.ts.map +1 -0
  183. package/dist/utils/execution-actions.js +103 -0
  184. package/dist/utils/execution-actions.js.map +1 -0
  185. package/dist/utils/execution-bus.d.ts +1 -214
  186. package/dist/utils/execution-bus.d.ts.map +1 -1
  187. package/dist/utils/execution-bus.js +15 -1359
  188. package/dist/utils/execution-bus.js.map +1 -1
  189. package/dist/utils/git.d.ts +1 -0
  190. package/dist/utils/git.d.ts.map +1 -1
  191. package/dist/utils/git.js +13 -3
  192. package/dist/utils/git.js.map +1 -1
  193. package/dist/utils/governance-decisions.d.ts +75 -0
  194. package/dist/utils/governance-decisions.d.ts.map +1 -0
  195. package/dist/utils/governance-decisions.js +412 -0
  196. package/dist/utils/governance-decisions.js.map +1 -0
  197. package/dist/utils/governance-provenance.d.ts +1 -1
  198. package/dist/utils/governance-provenance.d.ts.map +1 -1
  199. package/dist/utils/governance-provenance.js +5 -7
  200. package/dist/utils/governance-provenance.js.map +1 -1
  201. package/dist/utils/governance.d.ts +108 -0
  202. package/dist/utils/governance.d.ts.map +1 -1
  203. package/dist/utils/governance.js +209 -7
  204. package/dist/utils/governance.js.map +1 -1
  205. package/dist/utils/intelligence-runtime-common.d.ts +30 -0
  206. package/dist/utils/intelligence-runtime-common.d.ts.map +1 -0
  207. package/dist/utils/intelligence-runtime-common.js +156 -0
  208. package/dist/utils/intelligence-runtime-common.js.map +1 -0
  209. package/dist/utils/intent-contract-diagnostics.d.ts +9 -0
  210. package/dist/utils/intent-contract-diagnostics.d.ts.map +1 -0
  211. package/dist/utils/intent-contract-diagnostics.js +322 -0
  212. package/dist/utils/intent-contract-diagnostics.js.map +1 -0
  213. package/dist/utils/intent-pack.d.ts +15 -0
  214. package/dist/utils/intent-pack.d.ts.map +1 -0
  215. package/dist/utils/intent-pack.js +196 -0
  216. package/dist/utils/intent-pack.js.map +1 -0
  217. package/dist/utils/plan-sync.d.ts +1 -0
  218. package/dist/utils/plan-sync.d.ts.map +1 -1
  219. package/dist/utils/plan-sync.js +23 -0
  220. package/dist/utils/plan-sync.js.map +1 -1
  221. package/dist/utils/policy-decision.d.ts +5 -0
  222. package/dist/utils/policy-decision.d.ts.map +1 -0
  223. package/dist/utils/policy-decision.js +17 -0
  224. package/dist/utils/policy-decision.js.map +1 -0
  225. package/dist/utils/replay-custody.d.ts +43 -0
  226. package/dist/utils/replay-custody.d.ts.map +1 -0
  227. package/dist/utils/replay-custody.js +168 -0
  228. package/dist/utils/replay-custody.js.map +1 -0
  229. package/dist/utils/replay-runtime.d.ts +13 -0
  230. package/dist/utils/replay-runtime.d.ts.map +1 -1
  231. package/dist/utils/replay-runtime.js +96 -9
  232. package/dist/utils/replay-runtime.js.map +1 -1
  233. package/dist/utils/repository-intelligence.d.ts +9 -0
  234. package/dist/utils/repository-intelligence.d.ts.map +1 -0
  235. package/dist/utils/repository-intelligence.js +372 -0
  236. package/dist/utils/repository-intelligence.js.map +1 -0
  237. package/dist/utils/runtime-events.d.ts.map +1 -1
  238. package/dist/utils/runtime-events.js +25 -6
  239. package/dist/utils/runtime-events.js.map +1 -1
  240. package/dist/utils/semantic-contract-intelligence.d.ts +20 -0
  241. package/dist/utils/semantic-contract-intelligence.d.ts.map +1 -0
  242. package/dist/utils/semantic-contract-intelligence.js +825 -0
  243. package/dist/utils/semantic-contract-intelligence.js.map +1 -0
  244. package/dist/utils/session-continuity.d.ts +56 -0
  245. package/dist/utils/session-continuity.d.ts.map +1 -0
  246. package/dist/utils/session-continuity.js +318 -0
  247. package/dist/utils/session-continuity.js.map +1 -0
  248. package/dist/utils/verification-evidence.d.ts.map +1 -1
  249. package/dist/utils/verification-evidence.js +4 -1
  250. package/dist/utils/verification-evidence.js.map +1 -1
  251. package/dist/utils/verify-runtime-stability.d.ts +142 -0
  252. package/dist/utils/verify-runtime-stability.d.ts.map +1 -0
  253. package/dist/utils/verify-runtime-stability.js +230 -0
  254. package/dist/utils/verify-runtime-stability.js.map +1 -0
  255. package/dist/utils/workspace-runtime.d.ts +1 -266
  256. package/dist/utils/workspace-runtime.d.ts.map +1 -1
  257. package/dist/utils/workspace-runtime.js +15 -1412
  258. package/dist/utils/workspace-runtime.js.map +1 -1
  259. package/package.json +11 -10
  260. 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;CAChC;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"}
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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"}