@neurcode-ai/governance-runtime 0.1.1 → 0.1.3

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.
@@ -6,6 +6,21 @@ export interface DeterministicConstraintRule {
6
6
  displayName: string;
7
7
  pattern: RegExp;
8
8
  matchToken: string;
9
+ provenance?: DeterministicConstraintProvenance;
10
+ pathIncludePatterns?: string[];
11
+ pathExcludePatterns?: string[];
12
+ pathIncludes?: RegExp[];
13
+ pathExcludes?: RegExp[];
14
+ minMatchesPerFile?: number;
15
+ maxMatchesPerFile?: number;
16
+ evaluationMode?: 'added_lines' | 'full_file' | 'signature_delta';
17
+ evaluationScope?: 'file' | 'repo';
18
+ }
19
+ export interface DeterministicConstraintProvenance {
20
+ why: string;
21
+ evidence: string[];
22
+ contributingGraphPaths: string[];
23
+ trustBoundaries: string[];
9
24
  }
10
25
  export interface DeterministicConstraintCompilation {
11
26
  rules: DeterministicConstraintRule[];
@@ -1 +1 @@
1
- {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,6BAA6B,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,6BAA6B,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kCAAkC;IACjD,KAAK,EAAE,2BAA2B,EAAE,CAAC;IACrC,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,uCAAuC;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAoJD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,uCAAuC,GAC7C,kCAAkC,CAapC"}
1
+ {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,6BAA6B,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,6BAA6B,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,iCAAiC,CAAC;IAC/C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,iBAAiB,CAAC;IACjE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,iCAAiC;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kCAAkC;IACjD,KAAK,EAAE,2BAA2B,EAAE,CAAC;IACrC,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,uCAAuC;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAywBD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,uCAAuC,GAC7C,kCAAkC,CAapC"}
@@ -52,6 +52,27 @@ const CONSTRAINT_TEMPLATES = [
52
52
  pattern: /\b(TODO|FIXME)\b/i,
53
53
  matchToken: 'todo/fixme',
54
54
  },
55
+ {
56
+ id: 'no_network_calls',
57
+ displayName: 'No network calls',
58
+ triggerTokens: ['network call', 'network calls', 'http call', 'api call', 'external call'],
59
+ pattern: /\b(fetch\s*\(|axios\.[a-z]+\s*\(|axios\s*\(|XMLHttpRequest\b|http\.request\s*\(|https\.request\s*\(|got\s*\(|superagent\s*\()/i,
60
+ matchToken: 'network-call',
61
+ },
62
+ {
63
+ id: 'no_child_process',
64
+ displayName: 'No child_process execution',
65
+ triggerTokens: ['child_process', 'shell command', 'exec(', 'spawn('],
66
+ pattern: /\b(child_process|exec\s*\(|execFile\s*\(|spawn\s*\(|fork\s*\()/i,
67
+ matchToken: 'child_process',
68
+ },
69
+ {
70
+ id: 'no_innerhtml',
71
+ displayName: 'No innerHTML / dangerouslySetInnerHTML',
72
+ triggerTokens: ['innerhtml', 'dangerouslysetinnerhtml', 'dom injection'],
73
+ pattern: /\b(innerHTML|dangerouslySetInnerHTML)\b/i,
74
+ matchToken: 'innerHTML',
75
+ },
55
76
  ];
56
77
  function splitStatements(raw) {
57
78
  return raw
@@ -65,18 +86,410 @@ function normalizeStatement(statement) {
65
86
  .trim()
66
87
  .toLowerCase();
67
88
  }
89
+ function normalizePathScopeToken(rawValue) {
90
+ return rawValue
91
+ .trim()
92
+ .replace(/^[`'"]+|[`'"]+$/g, '')
93
+ .replace(/\\/g, '/')
94
+ .replace(/^\.\//, '')
95
+ .replace(/\/{2,}/g, '/');
96
+ }
97
+ function looksLikePathScope(token) {
98
+ if (!token)
99
+ return false;
100
+ if (/\s/.test(token))
101
+ return false;
102
+ if (token.includes('/'))
103
+ return true;
104
+ if (token.includes('*'))
105
+ return true;
106
+ return /\.[a-z0-9]{1,8}$/i.test(token);
107
+ }
108
+ function globLikeToRegex(pattern) {
109
+ const escaped = pattern
110
+ .split('*')
111
+ .map((segment) => segment.replace(/[.+^${}()|[\]\\]/g, '\\$&'))
112
+ .join('.*');
113
+ return new RegExp(`^${escaped}$`, 'i');
114
+ }
115
+ function compilePathPatterns(patterns) {
116
+ return patterns
117
+ .map((pattern) => {
118
+ try {
119
+ return globLikeToRegex(pattern);
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ })
125
+ .filter((item) => item instanceof RegExp);
126
+ }
127
+ function parsePathScopes(statement) {
128
+ const includePatterns = new Set();
129
+ const excludePatterns = new Set();
130
+ const includeRegex = /\b(?:in|within|under|inside)\s+[`'"]?([A-Za-z0-9_./*?-]+)[`'"]?/gi;
131
+ const excludeRegex = /\b(?:except|excluding|but\s+not\s+in|not\s+in)\s+[`'"]?([A-Za-z0-9_./*?-]+)[`'"]?/gi;
132
+ for (const match of statement.matchAll(includeRegex)) {
133
+ const candidate = normalizePathScopeToken(match[1] || '');
134
+ if (looksLikePathScope(candidate)) {
135
+ includePatterns.add(candidate);
136
+ }
137
+ }
138
+ for (const match of statement.matchAll(excludeRegex)) {
139
+ const candidate = normalizePathScopeToken(match[1] || '');
140
+ if (looksLikePathScope(candidate)) {
141
+ excludePatterns.add(candidate);
142
+ }
143
+ }
144
+ return {
145
+ includePatterns: [...includePatterns],
146
+ excludePatterns: [...excludePatterns],
147
+ };
148
+ }
149
+ function uniqueSorted(values) {
150
+ return [...new Set(values.filter(Boolean))].sort((left, right) => left.localeCompare(right));
151
+ }
152
+ function buildProvenance(input) {
153
+ const contributingGraphPaths = input.pathScopes.includePatterns.length > 0
154
+ ? uniqueSorted(input.pathScopes.includePatterns)
155
+ : ['<repo-scope>'];
156
+ return {
157
+ why: input.why,
158
+ evidence: uniqueSorted(input.evidence),
159
+ contributingGraphPaths,
160
+ trustBoundaries: uniqueSorted(input.trustBoundaries),
161
+ };
162
+ }
163
+ function applyPathScopes(rule, pathScopes) {
164
+ const includePatterns = [...pathScopes.includePatterns];
165
+ const excludePatterns = [...pathScopes.excludePatterns];
166
+ return {
167
+ ...rule,
168
+ ...(includePatterns.length > 0
169
+ ? {
170
+ pathIncludePatterns: includePatterns,
171
+ pathIncludes: compilePathPatterns(includePatterns),
172
+ }
173
+ : {}),
174
+ ...(excludePatterns.length > 0
175
+ ? {
176
+ pathExcludePatterns: excludePatterns,
177
+ pathExcludes: compilePathPatterns(excludePatterns),
178
+ }
179
+ : {}),
180
+ };
181
+ }
182
+ function escapeRegex(value) {
183
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
184
+ }
185
+ function parseInvocationLimitRule(statement, source, pathScopes) {
186
+ const normalized = normalizeStatement(statement);
187
+ const fnPatterns = [
188
+ {
189
+ regex: /\b([a-z_$][a-z0-9_$]*)\s+(?:function\s+)?(?:should\s+be\s+)?(?:invoked|called)\s+(?:only\s+)?(\d+)\s+times?\b/i,
190
+ fnIndex: 1,
191
+ countIndex: 2,
192
+ comparator: 'max',
193
+ },
194
+ {
195
+ regex: /\b([a-z_$][a-z0-9_$]*)\s+(?:function\s+)?(?:should\s+be\s+)?(?:invoked|called)\s+(?:at\s+most|no\s+more\s+than|maximum)\s+(\d+)\s+times?\b/i,
196
+ fnIndex: 1,
197
+ countIndex: 2,
198
+ comparator: 'max',
199
+ },
200
+ {
201
+ regex: /\b([a-z_$][a-z0-9_$]*)\s+(?:function\s+)?(?:should\s+be\s+)?(?:invoked|called)\s+(?:at\s+least|no\s+less\s+than|minimum)\s+(\d+)\s+times?\b/i,
202
+ fnIndex: 1,
203
+ countIndex: 2,
204
+ comparator: 'min',
205
+ },
206
+ {
207
+ regex: /\b([a-z_$][a-z0-9_$]*)\s+(?:function\s+)?(?:should\s+be\s+)?(?:invoked|called)\s+(?:exactly)\s+(\d+)\s+times?\b/i,
208
+ fnIndex: 1,
209
+ countIndex: 2,
210
+ comparator: 'exact',
211
+ },
212
+ {
213
+ regex: /\bonly\s+(\d+)\s+calls?\s+to\s+([a-z_$][a-z0-9_$]*)\b/i,
214
+ fnIndex: 2,
215
+ countIndex: 1,
216
+ comparator: 'max',
217
+ },
218
+ {
219
+ regex: /\bat\s+most\s+(\d+)\s+calls?\s+to\s+([a-z_$][a-z0-9_$]*)\b/i,
220
+ fnIndex: 2,
221
+ countIndex: 1,
222
+ comparator: 'max',
223
+ },
224
+ {
225
+ regex: /\bat\s+least\s+(\d+)\s+calls?\s+to\s+([a-z_$][a-z0-9_$]*)\b/i,
226
+ fnIndex: 2,
227
+ countIndex: 1,
228
+ comparator: 'min',
229
+ },
230
+ {
231
+ regex: /\bexactly\s+(\d+)\s+calls?\s+to\s+([a-z_$][a-z0-9_$]*)\b/i,
232
+ fnIndex: 2,
233
+ countIndex: 1,
234
+ comparator: 'exact',
235
+ },
236
+ ];
237
+ let fnName = null;
238
+ let rawLimit = null;
239
+ let comparator = 'max';
240
+ for (const pattern of fnPatterns) {
241
+ const match = normalized.match(pattern.regex);
242
+ if (!match) {
243
+ continue;
244
+ }
245
+ fnName = match[pattern.fnIndex] || null;
246
+ rawLimit = match[pattern.countIndex] || null;
247
+ comparator = pattern.comparator;
248
+ break;
249
+ }
250
+ if (!fnName || !rawLimit) {
251
+ return null;
252
+ }
253
+ const limit = Number(rawLimit);
254
+ if (!Number.isFinite(limit) || limit < 0) {
255
+ return null;
256
+ }
257
+ const repoScopeHint = /\b(across\s+(?:the\s+)?(?:repo|repository|codebase)|globally|in\s+the\s+entire\s+repo)\b/i.test(normalized);
258
+ const displaySuffix = comparator === 'exact'
259
+ ? `exactly ${limit}`
260
+ : comparator === 'min'
261
+ ? `at least ${limit}`
262
+ : `at most ${limit}`;
263
+ const minMatches = comparator === 'min' || comparator === 'exact' ? limit : undefined;
264
+ const maxMatches = comparator === 'max' || comparator === 'exact' ? limit : undefined;
265
+ return applyPathScopes({
266
+ id: `${source}:${comparator}_invocations_${fnName.toLowerCase()}${repoScopeHint ? '_repo' : ''}`,
267
+ source,
268
+ statement,
269
+ displayName: `${fnName}() invocation limit (${displaySuffix}${repoScopeHint ? ', repo-wide' : ''})`,
270
+ pattern: new RegExp(`(?<!function\\s)\\b${escapeRegex(fnName)}\\s*\\(`, 'i'),
271
+ matchToken: `${fnName}(`,
272
+ ...(typeof minMatches === 'number' ? { minMatchesPerFile: minMatches } : {}),
273
+ ...(typeof maxMatches === 'number' ? { maxMatchesPerFile: maxMatches } : {}),
274
+ evaluationMode: 'full_file',
275
+ evaluationScope: repoScopeHint ? 'repo' : 'file',
276
+ provenance: buildProvenance({
277
+ why: 'Statement imposes deterministic invocation cardinality limits.',
278
+ evidence: [fnName, rawLimit, comparator, repoScopeHint ? 'repo-scope' : 'file-scope'],
279
+ trustBoundaries: repoScopeHint ? ['cross-module'] : ['local-module'],
280
+ pathScopes,
281
+ }),
282
+ }, pathScopes);
283
+ }
284
+ const EXPORTED_SIGNATURE_PATTERN = /\bexport\s+(?:async\s+)?function\s+[A-Za-z_$][A-Za-z0-9_$]*\s*\(|\bexport\s+const\s+[A-Za-z_$][A-Za-z0-9_$]*\s*=\s*(?:async\s*)?\([^)]*\)\s*=>|\bexport\s+(?:interface|type)\s+[A-Za-z_$][A-Za-z0-9_$]*/i;
285
+ function parseSignatureDriftRule(statement, source, pathScopes) {
286
+ const normalized = normalizeStatement(statement);
287
+ const mentionsSignature = /\b(signature|contract|public api|api surface|exported api)\b/i.test(normalized);
288
+ const mentionsChange = /\b(change|changed|modify|modified|drift|mutation|alter)\b/i.test(normalized);
289
+ const prohibitive = PROHIBITIVE_PATTERN.test(normalized)
290
+ || /\bkeep\b/i.test(normalized)
291
+ || /\bpreserve\b/i.test(normalized);
292
+ if (!mentionsSignature || !mentionsChange || !prohibitive) {
293
+ return null;
294
+ }
295
+ return applyPathScopes({
296
+ id: `${source}:no_api_signature_drift`,
297
+ source,
298
+ statement,
299
+ displayName: 'No exported API signature drift',
300
+ pattern: EXPORTED_SIGNATURE_PATTERN,
301
+ matchToken: 'api-signature-drift',
302
+ evaluationMode: 'signature_delta',
303
+ evaluationScope: 'file',
304
+ provenance: buildProvenance({
305
+ why: 'Statement protects external API signature stability.',
306
+ evidence: ['signature', 'public api', 'change/modify'],
307
+ trustBoundaries: ['public-api', 'external-consumer'],
308
+ pathScopes,
309
+ }),
310
+ }, pathScopes);
311
+ }
312
+ function parseBackwardCompatibilityRule(statement, source, pathScopes) {
313
+ const normalized = normalizeStatement(statement);
314
+ const mentionsCompatibility = /\b(backward compatibility|backwards compatibility|breaking change|non-breaking|existing consumers?)\b/i.test(normalized);
315
+ if (!mentionsCompatibility) {
316
+ return null;
317
+ }
318
+ return applyPathScopes({
319
+ id: `${source}:backward_compatibility`,
320
+ source,
321
+ statement,
322
+ displayName: 'Backward compatibility guard (public contract drift)',
323
+ pattern: EXPORTED_SIGNATURE_PATTERN,
324
+ matchToken: 'backward-compatibility',
325
+ evaluationMode: 'signature_delta',
326
+ evaluationScope: 'file',
327
+ provenance: buildProvenance({
328
+ why: 'Statement requires non-breaking compatibility guarantees for existing consumers.',
329
+ evidence: ['backward compatibility', 'breaking change', 'existing consumers'],
330
+ trustBoundaries: ['public-api', 'external-consumer'],
331
+ pathScopes,
332
+ }),
333
+ }, pathScopes);
334
+ }
335
+ function parseAsyncOrderingRule(statement, source, pathScopes) {
336
+ const normalized = normalizeStatement(statement);
337
+ const mentionsOrdering = /\b(async ordering|message ordering|out of order|preserve order|ordered workflow|ordering guarantees?|fifo)\b/i.test(normalized);
338
+ const mentionsParallelRisk = /\b(parallel|promise\.all|allsettled|race|fan-?out|parallelize)\b/i.test(normalized);
339
+ if (!mentionsOrdering && !mentionsParallelRisk) {
340
+ return null;
341
+ }
342
+ return applyPathScopes({
343
+ id: `${source}:async_ordering`,
344
+ source,
345
+ statement,
346
+ displayName: 'Async ordering guard (parallelization risk)',
347
+ pattern: /\bPromise\.(?:all|allSettled|race|any)\s*\(|\bp-?map\s*\(|\bparallel(?:ize|Map)?\s*\(/i,
348
+ matchToken: 'async-ordering',
349
+ evaluationMode: 'added_lines',
350
+ evaluationScope: 'file',
351
+ provenance: buildProvenance({
352
+ why: 'Statement flags async ordering sensitivity and blocks risky parallel fan-out patterns.',
353
+ evidence: ['ordering', 'out of order', 'parallel execution'],
354
+ trustBoundaries: ['async-workflow', 'downstream-capacity'],
355
+ pathScopes,
356
+ }),
357
+ }, pathScopes);
358
+ }
359
+ function parseEventSchemaConsistencyRule(statement, source, pathScopes) {
360
+ const normalized = normalizeStatement(statement);
361
+ const mentionsEventSchema = /\b(event schema|event payload|event contract|subscriber|downstream event|schema evolution|required fields?)\b/i.test(normalized);
362
+ if (!mentionsEventSchema) {
363
+ return null;
364
+ }
365
+ return applyPathScopes({
366
+ id: `${source}:event_schema_consistency`,
367
+ source,
368
+ statement,
369
+ displayName: 'Event/schema consistency guard',
370
+ pattern: /\b(?:interface|type)\s+[A-Za-z_$][A-Za-z0-9_$]*(?:Event|Payload|Message|Envelope)\b|\bevent[A-Za-z0-9_$]*\s*:\s*|\bschemaVersion\b/i,
371
+ matchToken: 'event-schema-drift',
372
+ evaluationMode: 'signature_delta',
373
+ evaluationScope: 'file',
374
+ provenance: buildProvenance({
375
+ why: 'Statement requires event contract continuity for downstream consumers.',
376
+ evidence: ['event schema', 'subscriber', 'required fields'],
377
+ trustBoundaries: ['event-bus', 'external-subscriber'],
378
+ pathScopes,
379
+ }),
380
+ }, pathScopes);
381
+ }
382
+ function parseMultiTenantIsolationRule(statement, source, pathScopes) {
383
+ const normalized = normalizeStatement(statement);
384
+ const mentionsTenantIsolation = /\b(multi-tenant|tenant isolation|cross-tenant|tenant boundaries?|tenant_id|tenant guard)\b/i.test(normalized);
385
+ if (!mentionsTenantIsolation) {
386
+ return null;
387
+ }
388
+ return applyPathScopes({
389
+ id: `${source}:multi_tenant_isolation`,
390
+ source,
391
+ statement,
392
+ displayName: 'Multi-tenant isolation guard',
393
+ pattern: /\b(?:bypassTenant(?:Guard|Scope)?|ignoreTenant(?:Scope)?|crossTenant|allTenants|tenantScope\s*:\s*false|setTenantContext\s*\(\s*null\s*\)|withoutTenantScope)\b/i,
394
+ matchToken: 'tenant-isolation',
395
+ evaluationMode: 'full_file',
396
+ evaluationScope: 'file',
397
+ provenance: buildProvenance({
398
+ why: 'Statement enforces tenant boundary safety and isolation constraints.',
399
+ evidence: ['multi-tenant', 'tenant_id', 'cross-tenant'],
400
+ trustBoundaries: ['tenant-boundary', 'data-access-layer'],
401
+ pathScopes,
402
+ }),
403
+ }, pathScopes);
404
+ }
405
+ function parseCacheInvariantRule(statement, source, pathScopes) {
406
+ const normalized = normalizeStatement(statement);
407
+ const mentionsCache = /\b(cache invalidation|cache invariant|cache keys?|cache consistency|evict cache|clear(?:ing)? (?:shared )?cache|shared cache|invalidate .*cache)\b/i.test(normalized);
408
+ if (!mentionsCache) {
409
+ return null;
410
+ }
411
+ return applyPathScopes({
412
+ id: `${source}:cache_invariant`,
413
+ source,
414
+ statement,
415
+ displayName: 'Cache invariant guard (global invalidation risk)',
416
+ pattern: /\b(?:cache\.(?:clear|reset)\s*\(\s*\)|invalidateAll\s*\(|flushAll\s*\(|redis\.flush(?:all|db)\s*\(|\bFLUSH(?:ALL|DB)\b)\b/i,
417
+ matchToken: 'cache-invariant',
418
+ evaluationMode: 'added_lines',
419
+ evaluationScope: 'file',
420
+ provenance: buildProvenance({
421
+ why: 'Statement marks cache behavior as operationally sensitive and blocks global flush patterns.',
422
+ evidence: ['cache invalidation', 'cache key', 'clear cache'],
423
+ trustBoundaries: ['cache-layer', 'operational-safety'],
424
+ pathScopes,
425
+ }),
426
+ }, pathScopes);
427
+ }
428
+ function parseIdempotencyRule(statement, source, pathScopes) {
429
+ const normalized = normalizeStatement(statement);
430
+ const mentionsIdempotency = /\b(idempotency|idempotent|retryable write|retries|exactly once|at-least-once)\b/i.test(normalized);
431
+ if (!mentionsIdempotency) {
432
+ return null;
433
+ }
434
+ return applyPathScopes({
435
+ id: `${source}:idempotency`,
436
+ source,
437
+ statement,
438
+ displayName: 'Idempotency expectation guard',
439
+ pattern: /\b(?:idempotency[-_ ]key|x-idempotency-key|idempotencyKey|dedupe(?:Key|Id)?)\b/i,
440
+ matchToken: 'idempotency-key',
441
+ minMatchesPerFile: 1,
442
+ evaluationMode: 'full_file',
443
+ evaluationScope: 'repo',
444
+ provenance: buildProvenance({
445
+ why: 'Statement requires deterministic retry safety via idempotency markers.',
446
+ evidence: ['idempotency', 'retryable write', 'exactly once'],
447
+ trustBoundaries: ['api-edge', 'write-path'],
448
+ pathScopes,
449
+ }),
450
+ }, pathScopes);
451
+ }
452
+ function parseMigrationSafetyRule(statement, source, pathScopes) {
453
+ const normalized = normalizeStatement(statement);
454
+ const mentionsMigration = /\b(migration safety|schema migration|destructive migration|drop column|drop table|truncate table|backfill safety)\b/i.test(normalized);
455
+ if (!mentionsMigration) {
456
+ return null;
457
+ }
458
+ return applyPathScopes({
459
+ id: `${source}:migration_safety`,
460
+ source,
461
+ statement,
462
+ displayName: 'Migration safety guard (destructive operation risk)',
463
+ pattern: /\b(?:DROP\s+COLUMN|DROP\s+TABLE|TRUNCATE\s+TABLE|ALTER\s+TABLE\s+[A-Za-z0-9_`".]+\s+DROP\s+COLUMN|DELETE\s+FROM\s+[A-Za-z0-9_`".]+\s*;)\b/i,
464
+ matchToken: 'destructive-migration',
465
+ evaluationMode: 'added_lines',
466
+ evaluationScope: 'file',
467
+ provenance: buildProvenance({
468
+ why: 'Statement requires non-destructive migration behavior for production safety.',
469
+ evidence: ['migration safety', 'drop column', 'truncate table'],
470
+ trustBoundaries: ['data-store', 'migration-pipeline'],
471
+ pathScopes,
472
+ }),
473
+ }, pathScopes);
474
+ }
68
475
  function statementMatchesTemplate(normalizedStatement, template) {
69
476
  return template.triggerTokens.some((token) => normalizedStatement.includes(token));
70
477
  }
71
- function createRule(template, source, statement) {
72
- return {
478
+ function createRule(template, source, statement, pathScopes) {
479
+ return applyPathScopes({
73
480
  id: `${source}:${template.id}`,
74
481
  source,
75
482
  statement,
76
483
  displayName: template.displayName,
77
484
  pattern: template.pattern,
78
485
  matchToken: template.matchToken,
79
- };
486
+ provenance: buildProvenance({
487
+ why: 'Statement matched deterministic constraint template.',
488
+ evidence: template.triggerTokens,
489
+ trustBoundaries: ['code-hygiene'],
490
+ pathScopes,
491
+ }),
492
+ }, pathScopes);
80
493
  }
81
494
  function compileStatements(statements, source) {
82
495
  const rules = [];
@@ -86,6 +499,52 @@ function compileStatements(statements, source) {
86
499
  if (!normalized) {
87
500
  continue;
88
501
  }
502
+ const pathScopes = parsePathScopes(rawStatement);
503
+ const invocationLimitRule = parseInvocationLimitRule(rawStatement, source, pathScopes);
504
+ if (invocationLimitRule) {
505
+ rules.push(invocationLimitRule);
506
+ continue;
507
+ }
508
+ const signatureDriftRule = parseSignatureDriftRule(rawStatement, source, pathScopes);
509
+ if (signatureDriftRule) {
510
+ rules.push(signatureDriftRule);
511
+ continue;
512
+ }
513
+ const backwardCompatibilityRule = parseBackwardCompatibilityRule(rawStatement, source, pathScopes);
514
+ if (backwardCompatibilityRule) {
515
+ rules.push(backwardCompatibilityRule);
516
+ continue;
517
+ }
518
+ const asyncOrderingRule = parseAsyncOrderingRule(rawStatement, source, pathScopes);
519
+ if (asyncOrderingRule) {
520
+ rules.push(asyncOrderingRule);
521
+ continue;
522
+ }
523
+ const eventSchemaRule = parseEventSchemaConsistencyRule(rawStatement, source, pathScopes);
524
+ if (eventSchemaRule) {
525
+ rules.push(eventSchemaRule);
526
+ continue;
527
+ }
528
+ const multiTenantRule = parseMultiTenantIsolationRule(rawStatement, source, pathScopes);
529
+ if (multiTenantRule) {
530
+ rules.push(multiTenantRule);
531
+ continue;
532
+ }
533
+ const cacheInvariantRule = parseCacheInvariantRule(rawStatement, source, pathScopes);
534
+ if (cacheInvariantRule) {
535
+ rules.push(cacheInvariantRule);
536
+ continue;
537
+ }
538
+ const idempotencyRule = parseIdempotencyRule(rawStatement, source, pathScopes);
539
+ if (idempotencyRule) {
540
+ rules.push(idempotencyRule);
541
+ continue;
542
+ }
543
+ const migrationSafetyRule = parseMigrationSafetyRule(rawStatement, source, pathScopes);
544
+ if (migrationSafetyRule) {
545
+ rules.push(migrationSafetyRule);
546
+ continue;
547
+ }
89
548
  const requiresProhibitiveLanguage = source === 'intent';
90
549
  if (requiresProhibitiveLanguage && !PROHIBITIVE_PATTERN.test(normalized)) {
91
550
  continue;
@@ -96,7 +555,7 @@ function compileStatements(statements, source) {
96
555
  continue;
97
556
  }
98
557
  for (const match of matches) {
99
- rules.push(createRule(match, source, rawStatement));
558
+ rules.push(createRule(match, source, rawStatement, pathScopes));
100
559
  }
101
560
  }
102
561
  return {
@@ -108,7 +567,16 @@ function dedupeRules(rules) {
108
567
  const seen = new Set();
109
568
  const deduped = [];
110
569
  for (const rule of rules) {
111
- const key = `${rule.id}::${rule.statement.toLowerCase()}`;
570
+ const key = [
571
+ rule.id,
572
+ rule.statement.toLowerCase(),
573
+ rule.pathIncludePatterns?.join('|') || '',
574
+ rule.pathExcludePatterns?.join('|') || '',
575
+ typeof rule.minMatchesPerFile === 'number' ? String(rule.minMatchesPerFile) : '',
576
+ typeof rule.maxMatchesPerFile === 'number' ? String(rule.maxMatchesPerFile) : '',
577
+ rule.evaluationMode || '',
578
+ rule.evaluationScope || '',
579
+ ].join('::');
112
580
  if (seen.has(key)) {
113
581
  continue;
114
582
  }
@@ -1 +1 @@
1
- {"version":3,"file":"constraints.js","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constraints.js","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -37,6 +37,7 @@ export interface PlanVerificationInput {
37
37
  intentConstraints?: string;
38
38
  policyRules?: string[];
39
39
  extraConstraintRules?: DeterministicConstraintRule[];
40
+ fileContents?: Record<string, string>;
40
41
  }
41
42
  export interface PlanDiffSummary {
42
43
  added: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}