@mmnto/totem 1.119.0 → 1.121.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/compile-smoke-gate.d.ts +23 -0
- package/dist/compile-smoke-gate.d.ts.map +1 -1
- package/dist/compile-smoke-gate.js +139 -8
- package/dist/compile-smoke-gate.js.map +1 -1
- package/dist/compile-smoke-gate.test.js +431 -0
- package/dist/compile-smoke-gate.test.js.map +1 -1
- package/dist/config-schema.d.ts +52 -4
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +73 -4
- package/dist/config-schema.js.map +1 -1
- package/dist/config-schema.test.js +93 -1
- package/dist/config-schema.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestration-resolver.d.ts.map +1 -1
- package/dist/orchestration-resolver.js +9 -2
- package/dist/orchestration-resolver.js.map +1 -1
- package/dist/orchestration-resolver.test.js +8 -0
- package/dist/orchestration-resolver.test.js.map +1 -1
- package/dist/recurrence-stats.d.ts +10 -10
- package/dist/spine/authored-rule.d.ts +18 -18
- package/dist/spine/authoring-ledger.d.ts +14 -14
- package/dist/spine/cert-corpus-seed.d.ts +6 -6
- package/dist/spine/ledgers.d.ts +62 -62
- package/dist/spine/windtunnel-lock.d.ts +16 -16
- package/package.json +1 -1
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { stringify as yamlStringify } from 'yaml';
|
|
2
3
|
import { matchAstGrepPattern } from './ast-grep-query.js';
|
|
3
4
|
import { runSmokeGate } from './compile-smoke-gate.js';
|
|
5
|
+
import { applyRulesToAdditionsBounded } from './regex-safety/apply-rules-bounded.js';
|
|
6
|
+
import { RegexEvaluator } from './regex-safety/evaluator.js';
|
|
7
|
+
import { applyAstRulesToAdditions, applyRulesToAdditions } from './rule-engine.js';
|
|
8
|
+
import { design8ExemplarRecord } from './spine/record-exemplars.fixture.js';
|
|
9
|
+
import { compileRuleRecord } from './spine/record-lower.js';
|
|
10
|
+
import { parseRuleRecord } from './spine/rule-record.js';
|
|
4
11
|
// ─── Helpers ────────────────────────────────────────
|
|
5
12
|
function makeRegexRule(overrides = {}) {
|
|
6
13
|
return {
|
|
@@ -56,6 +63,23 @@ function makeCompoundRule(overrides = {}) {
|
|
|
56
63
|
...overrides,
|
|
57
64
|
};
|
|
58
65
|
}
|
|
66
|
+
// ─── Prop 310 § Design 8 fixtures ────────────────────
|
|
67
|
+
/** § Design 8's exemplar target: the git verbs whose output must be locale-pinned. */
|
|
68
|
+
const GIT_TARGET = '\\bgit\\s+(log|diff|status)\\b';
|
|
69
|
+
/**
|
|
70
|
+
* The exemplar's snippets, named ONCE.
|
|
71
|
+
*
|
|
72
|
+
* Each is inert fixture TEXT handed to `runSmokeGate` as rule INPUT — neither
|
|
73
|
+
* this suite nor the dispatcher drive below runs a git command. The shipped
|
|
74
|
+
* git-hygiene lessons that fire on the bare forms are ADVISORY here (regex
|
|
75
|
+
* engine, no `ruleClass` ⇒ not hard-tier ⇒ excluded from the lint exit code), so
|
|
76
|
+
* they are left to report rather than overridden; hoisting keeps them to one
|
|
77
|
+
* finding per distinct literal.
|
|
78
|
+
*/
|
|
79
|
+
const BARE_LOG = 'git log --oneline';
|
|
80
|
+
const PINNED_DIFF = 'LC_ALL=C git diff HEAD';
|
|
81
|
+
/** The § Design 8 good example: the same target with the companion on the SAME line. */
|
|
82
|
+
const PINNED_LOG = `LC_ALL=C ${BARE_LOG}`;
|
|
59
83
|
// ─── runSmokeGate: regex rules ───────────────────────
|
|
60
84
|
describe('runSmokeGate — regex engine', () => {
|
|
61
85
|
it('matches when the badExample contains the pattern', () => {
|
|
@@ -263,6 +287,293 @@ describe('runSmokeGate over-matching check', () => {
|
|
|
263
287
|
expect(result.matchCount).toBe(0);
|
|
264
288
|
});
|
|
265
289
|
});
|
|
290
|
+
// ─── Prop 310 § Design 8 — `requires:` pass two ──────
|
|
291
|
+
describe('runSmokeGate — Prop 310 § Design 8 requires (mmnto-ai/totem#2678)', () => {
|
|
292
|
+
/** § Design 8's own exemplar, as a hand-built compiled rule. */
|
|
293
|
+
function makeRequiresRegexRule(requires, overrides = {}) {
|
|
294
|
+
return makeRegexRule({
|
|
295
|
+
lessonHeading: 'git output-consuming commands must pin LC_ALL=C',
|
|
296
|
+
pattern: GIT_TARGET,
|
|
297
|
+
message: 'git output-consuming commands must pin LC_ALL=C on the same line.',
|
|
298
|
+
requires,
|
|
299
|
+
examples: [{ bad: BARE_LOG, good: PINNED_LOG }],
|
|
300
|
+
...overrides,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
describe('regex engine, scope: line', () => {
|
|
304
|
+
const rule = makeRequiresRegexRule({ pattern: 'LC_ALL=C', scope: 'line' });
|
|
305
|
+
it('FIRES on the bad example — target present, requirement absent', () => {
|
|
306
|
+
const result = runSmokeGate(rule, BARE_LOG);
|
|
307
|
+
expect(result.matched).toBe(true);
|
|
308
|
+
expect(result.matchCount).toBe(1);
|
|
309
|
+
});
|
|
310
|
+
it('stays SILENT on the good example — the defect #2678 fixed', () => {
|
|
311
|
+
// Pre-fix the gate ran pass ONE only, so the good example (which keeps the
|
|
312
|
+
// target and adds the companion) read as over-matching and no
|
|
313
|
+
// `requires:`-bearing record could pass `totem rule test`.
|
|
314
|
+
const result = runSmokeGate(rule, PINNED_LOG);
|
|
315
|
+
expect(result.matched).toBe(false);
|
|
316
|
+
expect(result.matchCount).toBe(0);
|
|
317
|
+
// Silence for the RIGHT reason: "the snippet simply contains nothing the
|
|
318
|
+
// rule fires on", which callers read as good-silent, not as a gate refusal.
|
|
319
|
+
expect(result.reason).toBeUndefined();
|
|
320
|
+
});
|
|
321
|
+
it('counts only the unsatisfied loci in a mixed snippet', () => {
|
|
322
|
+
const result = runSmokeGate(rule, `${BARE_LOG}\n${PINNED_DIFF}`);
|
|
323
|
+
expect(result.matched).toBe(true);
|
|
324
|
+
expect(result.matchCount).toBe(1);
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
describe('regex engine, scope: file', () => {
|
|
328
|
+
const fileScoped = makeRequiresRegexRule({ pattern: 'LC_ALL=C', scope: 'file' });
|
|
329
|
+
/** Target on one line, companion on ANOTHER — satisfied at file scope only. */
|
|
330
|
+
const SPLIT_SNIPPET = `export LC_ALL=C\n${BARE_LOG}`;
|
|
331
|
+
it('stays SILENT when the companion sits on a different line', () => {
|
|
332
|
+
const result = runSmokeGate(fileScoped, SPLIT_SNIPPET);
|
|
333
|
+
expect(result.matched).toBe(false);
|
|
334
|
+
expect(result.matchCount).toBe(0);
|
|
335
|
+
expect(result.reason).toBeUndefined();
|
|
336
|
+
});
|
|
337
|
+
it('FIRES when the companion is nowhere in the snippet', () => {
|
|
338
|
+
const result = runSmokeGate(fileScoped, BARE_LOG);
|
|
339
|
+
expect(result.matched).toBe(true);
|
|
340
|
+
expect(result.matchCount).toBe(1);
|
|
341
|
+
});
|
|
342
|
+
it('still FIRES on the same snippet at scope: line — the scope distinction is real', () => {
|
|
343
|
+
const lineScoped = makeRequiresRegexRule({ pattern: 'LC_ALL=C', scope: 'line' });
|
|
344
|
+
const result = runSmokeGate(lineScoped, SPLIT_SNIPPET);
|
|
345
|
+
expect(result.matched).toBe(true);
|
|
346
|
+
expect(result.matchCount).toBe(1);
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
describe('ast-grep flat pattern, scope: file', () => {
|
|
350
|
+
const rule = makeAstGrepStringRule({
|
|
351
|
+
requires: { pattern: '// debug-ok', scope: 'file' },
|
|
352
|
+
examples: [{ bad: 'debugger;\n', good: '// debug-ok\ndebugger;\n' }],
|
|
353
|
+
});
|
|
354
|
+
it('FIRES on the bad example', () => {
|
|
355
|
+
const result = runSmokeGate(rule, 'debugger;\n');
|
|
356
|
+
expect(result.matched).toBe(true);
|
|
357
|
+
expect(result.matchCount).toBe(1);
|
|
358
|
+
});
|
|
359
|
+
it('stays SILENT on the good example', () => {
|
|
360
|
+
const result = runSmokeGate(rule, '// debug-ok\ndebugger;\n');
|
|
361
|
+
expect(result.matched).toBe(false);
|
|
362
|
+
expect(result.matchCount).toBe(0);
|
|
363
|
+
expect(result.reason).toBeUndefined();
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
describe('ast-grep compound (astGrepYamlRule), scope: file', () => {
|
|
367
|
+
const BAD = 'try {\n work();\n} catch (err) {\n}\n';
|
|
368
|
+
const GOOD = '// catch is intentionally empty — see the ticket\n' + BAD;
|
|
369
|
+
const rule = makeCompoundRule({
|
|
370
|
+
requires: { pattern: 'intentionally empty', scope: 'file' },
|
|
371
|
+
// `examples` is non-optional for a `requires:` rule: without it the rule is
|
|
372
|
+
// TORN (a § Design 12 home with no discriminator) and the gate's
|
|
373
|
+
// `assertNoTornRecordRules` precondition refuses it, as the runtime does.
|
|
374
|
+
examples: [{ bad: BAD, good: GOOD }],
|
|
375
|
+
});
|
|
376
|
+
it('FIRES on the bad example', () => {
|
|
377
|
+
const result = runSmokeGate(rule, BAD);
|
|
378
|
+
expect(result.matched).toBe(true);
|
|
379
|
+
expect(result.matchCount).toBe(1);
|
|
380
|
+
});
|
|
381
|
+
it('stays SILENT on the good example', () => {
|
|
382
|
+
const result = runSmokeGate(rule, GOOD);
|
|
383
|
+
expect(result.matched).toBe(false);
|
|
384
|
+
expect(result.matchCount).toBe(0);
|
|
385
|
+
expect(result.reason).toBeUndefined();
|
|
386
|
+
});
|
|
387
|
+
});
|
|
388
|
+
// ── `lastReason` fall-through under the requires filter (bot round 1) ──
|
|
389
|
+
//
|
|
390
|
+
// CodeRabbit asked whether one extension can THROW while another returns
|
|
391
|
+
// matches that the requirement then SUPPRESSES, and noted the PR's evidence
|
|
392
|
+
// did not establish such an input. It does exist, and this is it: the pattern
|
|
393
|
+
// below is MULTI-ROOT under the TypeScript grammar (which has no JSX) and
|
|
394
|
+
// single-root under TSX, so `.ts` throws "Multiple AST nodes are detected"
|
|
395
|
+
// while `.tsx` parses it and matches the JSX snippet.
|
|
396
|
+
//
|
|
397
|
+
// Two constraints shape the construction, and are worth stating so the next
|
|
398
|
+
// reader does not re-derive them:
|
|
399
|
+
// - `requires.scope` must be `file` here — `assertNoAstGrepLineScope`
|
|
400
|
+
// refuses `line` on an ast-grep rule, so a per-locus companion is not
|
|
401
|
+
// expressible;
|
|
402
|
+
// - at `file` scope suppression is a property of the SNIPPET, not of the
|
|
403
|
+
// match, so the companion silences every extension's matches at once. A
|
|
404
|
+
// variant where ext A is suppressed and ext B is not is therefore NOT
|
|
405
|
+
// constructible for ast-grep at all.
|
|
406
|
+
describe('lastReason fall-through under the requires filter (mmnto-ai/totem#2681)', () => {
|
|
407
|
+
const JSX_PATTERN = '<div>{console.log($$$)}</div>';
|
|
408
|
+
const JSX_SNIPPET = 'const el = <div>{console.log("hi")}</div>;\n';
|
|
409
|
+
const COMPANION = '// debug-ok\n';
|
|
410
|
+
/** `.ts` first, `.tsx` second — the throwing grammar is tried first. */
|
|
411
|
+
function jsxRule(overrides = {}) {
|
|
412
|
+
return makeAstGrepStringRule({
|
|
413
|
+
astGrepPattern: JSX_PATTERN,
|
|
414
|
+
fileGlobs: ['**/*.ts', '**/*.tsx'],
|
|
415
|
+
requires: { pattern: '// debug-ok', scope: 'file' },
|
|
416
|
+
examples: [{ bad: JSX_SNIPPET, good: COMPANION + JSX_SNIPPET }],
|
|
417
|
+
...overrides,
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
it('keeps a throwing extension reason when a LATER extension matches but is fully suppressed', () => {
|
|
421
|
+
const result = runSmokeGate(jsxRule(), COMPANION + JSX_SNIPPET);
|
|
422
|
+
expect(result.matched).toBe(false);
|
|
423
|
+
expect(result.matchCount).toBe(0);
|
|
424
|
+
// PINNED as current behaviour, not asserted as ideal: `.tsx` did evaluate,
|
|
425
|
+
// and the requirement WAS satisfied, yet the reason reported is `.ts`'s
|
|
426
|
+
// engine throw. The gate keeps `lastReason` because a pattern that cannot
|
|
427
|
+
// compile under a DECLARED extension is a real defect worth surfacing —
|
|
428
|
+
// the requires filter neither masks it nor replaces it. Callers read the
|
|
429
|
+
// good-example leg off `matched` alone, so this reason only ever appears
|
|
430
|
+
// in the `bad did not fire (...)` line, where it is the useful fact.
|
|
431
|
+
expect(result.reason).toMatch(/ast-grep runtime error/);
|
|
432
|
+
expect(result.reason).toMatch(/Multiple AST nodes/);
|
|
433
|
+
});
|
|
434
|
+
it('FIRES on the same rule and snippet with the companion removed', () => {
|
|
435
|
+
// The falsifier for the test above: without this, that one could pass
|
|
436
|
+
// because EVERY extension threw and nothing was ever suppressed. Here the
|
|
437
|
+
// `.tsx` leg demonstrably matches, so the fall-through above really is the
|
|
438
|
+
// requires filter emptying a non-empty match set.
|
|
439
|
+
const result = runSmokeGate(jsxRule(), JSX_SNIPPET);
|
|
440
|
+
expect(result.matched).toBe(true);
|
|
441
|
+
expect(result.matchCount).toBe(1);
|
|
442
|
+
expect(result.reason).toBeUndefined();
|
|
443
|
+
});
|
|
444
|
+
it('keeps the reason when EVERY extension throws and `requires` is present', () => {
|
|
445
|
+
// The degenerate arm: a bare `catch` clause is multi-root under every
|
|
446
|
+
// grammar in the set, so no extension ever produces a match to filter.
|
|
447
|
+
const rule = jsxRule({ astGrepPattern: 'catch ($E) { $$$ }' });
|
|
448
|
+
const result = runSmokeGate(rule, COMPANION + 'try { work() } catch (err) {}\n');
|
|
449
|
+
expect(result.matched).toBe(false);
|
|
450
|
+
expect(result.matchCount).toBe(0);
|
|
451
|
+
expect(result.reason).toMatch(/ast-grep runtime error/);
|
|
452
|
+
});
|
|
453
|
+
});
|
|
454
|
+
describe('the evaluator’s PRECONDITIONS are enforced, never propagated', () => {
|
|
455
|
+
// Each of these is refused by a runtime dispatcher before any
|
|
456
|
+
// `requiresSuppressesMatch` runs. A gate that skipped them would ACCEPT a
|
|
457
|
+
// rule the runtime rejects — the exact divergence this module rules out.
|
|
458
|
+
// All are unreachable from a compiled record (the lowering gates them) and
|
|
459
|
+
// reachable from a hand-built `CompiledRule` or a hand-edited manifest.
|
|
460
|
+
it('assertRequiresPatternsSafe refuses an UNCOMPILABLE pattern (regex engine)', () => {
|
|
461
|
+
// `validateRegex` COMPILES before it runs safe-regex2, so an uncompilable
|
|
462
|
+
// pattern is a precondition failure — reported as `invalid syntax` — and
|
|
463
|
+
// never reaches `requiresContextPresent`'s own throw.
|
|
464
|
+
const rule = makeRequiresRegexRule({ pattern: '(', scope: 'line' });
|
|
465
|
+
const result = runSmokeGate(rule, BARE_LOG);
|
|
466
|
+
expect(result.matched).toBe(false);
|
|
467
|
+
expect(result.matchCount).toBe(0);
|
|
468
|
+
expect(result.reason).toMatch(/requires\.pattern/);
|
|
469
|
+
expect(result.reason).toMatch(/invalid syntax/);
|
|
470
|
+
});
|
|
471
|
+
it('assertRequiresPatternsSafe refuses it on the ast-grep engine too — one handler, both engines', () => {
|
|
472
|
+
const rule = makeAstGrepStringRule({
|
|
473
|
+
requires: { pattern: '(', scope: 'file' },
|
|
474
|
+
examples: [{ bad: 'debugger;\n', good: 'const x = 1;\n' }],
|
|
475
|
+
});
|
|
476
|
+
const result = runSmokeGate(rule, 'debugger;\n');
|
|
477
|
+
expect(result.matched).toBe(false);
|
|
478
|
+
expect(result.matchCount).toBe(0);
|
|
479
|
+
expect(result.reason).toMatch(/requires\.pattern/);
|
|
480
|
+
expect(result.reason).toMatch(/invalid syntax/);
|
|
481
|
+
// NOT mislabelled as an engine throw: the requirement is not ast-grep's.
|
|
482
|
+
expect(result.reason).not.toMatch(/ast-grep runtime error/);
|
|
483
|
+
});
|
|
484
|
+
it('assertRequiresPatternsSafe refuses an UNSAFE-but-compilable pattern instead of backtracking on it', () => {
|
|
485
|
+
// `(a+)+$` compiles fine and is a catastrophic backtracker. Measured before
|
|
486
|
+
// the precondition landed: 86 SECONDS inside `runSmokeGate` on this input,
|
|
487
|
+
// reachable straight from `totem rule test` (`loadRulesOrExit` runs no
|
|
488
|
+
// safe-regex2 pass of its own). This is the safe-regex2 arm of the same
|
|
489
|
+
// check, so the reason names ReDoS rather than a syntax defect.
|
|
490
|
+
const rule = makeRegexRule({
|
|
491
|
+
requires: { pattern: '(a+)+$', scope: 'line' },
|
|
492
|
+
examples: [{ bad: 'console.log(1)', good: 'logger.info(1)' }],
|
|
493
|
+
});
|
|
494
|
+
const snippet = 'console.log(1) ' + 'a'.repeat(34) + '!';
|
|
495
|
+
const startedAt = Date.now();
|
|
496
|
+
const result = runSmokeGate(rule, snippet);
|
|
497
|
+
const elapsedMs = Date.now() - startedAt;
|
|
498
|
+
expect(result.matched).toBe(false);
|
|
499
|
+
expect(result.matchCount).toBe(0);
|
|
500
|
+
expect(result.reason).toMatch(/requires\.pattern/);
|
|
501
|
+
expect(result.reason).toMatch(/ReDoS/);
|
|
502
|
+
// A gate that evaluated this pattern would still be running.
|
|
503
|
+
expect(elapsedMs).toBeLessThan(2000);
|
|
504
|
+
});
|
|
505
|
+
it('assertNoAstGrepLineScope refuses ast-grep + requires.scope: line, as the ast dispatcher does', () => {
|
|
506
|
+
// An ast-grep match is a SPAN; reading it as its start line makes the
|
|
507
|
+
// verdict depend on how the author wrapped their source. The lowering
|
|
508
|
+
// rejects the combination and `assertNoAstGrepLineScope` backstops it at
|
|
509
|
+
// the ast dispatcher — pre-cure this rule PASSED the gate.
|
|
510
|
+
const rule = makeAstGrepStringRule({
|
|
511
|
+
requires: { pattern: '// debug-ok', scope: 'line' },
|
|
512
|
+
examples: [{ bad: 'debugger;\n', good: 'debugger; // debug-ok\n' }],
|
|
513
|
+
});
|
|
514
|
+
const result = runSmokeGate(rule, 'debugger;\n');
|
|
515
|
+
expect(result.matched).toBe(false);
|
|
516
|
+
expect(result.matchCount).toBe(0);
|
|
517
|
+
expect(result.reason).toMatch(/requires\.scope: line/);
|
|
518
|
+
});
|
|
519
|
+
it('assertNoTornRecordRules refuses a TORN rule — `requires` present, `examples` absent', () => {
|
|
520
|
+
// `isRecordPathRule` keys on `examples`, so this rule would read as LEGACY
|
|
521
|
+
// and have its requirement silently unevaluated. § Design 12 bans the
|
|
522
|
+
// silence, not just the unsafe direction.
|
|
523
|
+
const torn = makeRegexRule({ requires: { pattern: 'LC_ALL=C', scope: 'line' } });
|
|
524
|
+
expect(torn.examples).toBeUndefined();
|
|
525
|
+
const result = runSmokeGate(torn, 'console.log(1)');
|
|
526
|
+
expect(result.matched).toBe(false);
|
|
527
|
+
expect(result.matchCount).toBe(0);
|
|
528
|
+
expect(result.reason).toMatch(/examples/);
|
|
529
|
+
});
|
|
530
|
+
it('assertNoTornRecordRules refuses a torn rule carrying NO `requires` — `excludeGlobs` alone', () => {
|
|
531
|
+
// Tornness is not a property of `requires`: the assert fires on ANY of the
|
|
532
|
+
// seven `RECORD_COMPILED_HOME_KEYS` without `examples`, because such a rule
|
|
533
|
+
// is UNCLASSIFIABLE, not because an evaluator needs protecting. With the
|
|
534
|
+
// torn check scoped to `requires` this rule reported `{matched: true}` from
|
|
535
|
+
// the gate while `applyRulesToAdditions` threw on it.
|
|
536
|
+
const torn = makeRegexRule({ fileGlobs: ['**/*.ts'], excludeGlobs: ['**/*.spec.ts'] });
|
|
537
|
+
expect(torn.requires).toBeUndefined();
|
|
538
|
+
expect(torn.examples).toBeUndefined();
|
|
539
|
+
const result = runSmokeGate(torn, 'console.log(1)');
|
|
540
|
+
expect(result.matched).toBe(false);
|
|
541
|
+
expect(result.matchCount).toBe(0);
|
|
542
|
+
expect(result.reason).toMatch(/examples/);
|
|
543
|
+
});
|
|
544
|
+
});
|
|
545
|
+
it('leaves a LEGACY rule untouched — the companion text is not magic', () => {
|
|
546
|
+
// No `requires` block ⇒ pass two never runs, so a snippet carrying the
|
|
547
|
+
// would-be companion still fires exactly as it did before #2678.
|
|
548
|
+
const legacy = makeRegexRule({ pattern: GIT_TARGET });
|
|
549
|
+
expect(legacy.requires).toBeUndefined();
|
|
550
|
+
const result = runSmokeGate(legacy, PINNED_LOG);
|
|
551
|
+
expect(result.matched).toBe(true);
|
|
552
|
+
expect(result.matchCount).toBe(1);
|
|
553
|
+
});
|
|
554
|
+
it('passes § Design 8’s exemplar END-TO-END through the real lowering', () => {
|
|
555
|
+
// The whole point of the ticket: parse → lower → gate, with no hand-built
|
|
556
|
+
// rule anywhere, so the gate is proved against the shape the record path
|
|
557
|
+
// actually emits.
|
|
558
|
+
const parsed = parseRuleRecord(yamlStringify(design8ExemplarRecord()), '.totem/rules/lc-all-c.rule.yaml');
|
|
559
|
+
const outcome = compileRuleRecord(parsed, {
|
|
560
|
+
ruleId: '0123456789abcdef',
|
|
561
|
+
now: '2026-08-24T00:00:00.000Z',
|
|
562
|
+
});
|
|
563
|
+
if (outcome.kind !== 'compiled') {
|
|
564
|
+
throw new Error(`expected the § Design 8 exemplar to lower, got: ${outcome.reason}`);
|
|
565
|
+
}
|
|
566
|
+
const compiled = outcome.rule;
|
|
567
|
+
expect(compiled.requires).toEqual({ pattern: 'LC_ALL=C', scope: 'line' });
|
|
568
|
+
const pair = compiled.examples?.[0];
|
|
569
|
+
expect(pair).toBeDefined();
|
|
570
|
+
const bad = runSmokeGate(compiled, pair.bad);
|
|
571
|
+
const good = runSmokeGate(compiled, pair.good);
|
|
572
|
+
expect(bad.matched).toBe(true);
|
|
573
|
+
expect(good.matched).toBe(false);
|
|
574
|
+
expect(good.reason).toBeUndefined();
|
|
575
|
+
});
|
|
576
|
+
});
|
|
266
577
|
// ─── runtime-parity invariant ────────────────────────
|
|
267
578
|
describe('runSmokeGate runtime parity invariant', () => {
|
|
268
579
|
it('uses the same engine entry points as the runtime — gate-pass implies runtime-match', () => {
|
|
@@ -279,5 +590,125 @@ describe('runSmokeGate runtime parity invariant', () => {
|
|
|
279
590
|
const matches = matchAstGrepPattern(snippet, '.ts', 'debugger', snippet.split('\n').map((_, i) => i + 1));
|
|
280
591
|
expect(matches.length).toBeGreaterThanOrEqual(1);
|
|
281
592
|
});
|
|
593
|
+
// ── § Design 8 parity, driven through the REAL dispatchers ──
|
|
594
|
+
//
|
|
595
|
+
// The parity claim for `requires:` (mmnto-ai/totem#2678) is that the gate's
|
|
596
|
+
// verdict equals `totem lint`'s. Recomputing the predicate in the test body
|
|
597
|
+
// with `requiresSuppressesMatch` could not establish that: it re-implemented
|
|
598
|
+
// `runRegexGate` and agreed with the gate whether or not the gate agreed with
|
|
599
|
+
// the dispatcher — it passed green while the gate was accepting rules the
|
|
600
|
+
// dispatchers refuse. So these drive all THREE shipped dispatchers themselves
|
|
601
|
+
// and compare COUNTS: `applyRulesToAdditions` (the sync regex one),
|
|
602
|
+
// `applyRulesToAdditionsBounded` (the regex one `totem lint` actually runs —
|
|
603
|
+
// `run-compiled-rules.ts:668` — and a structurally different § Design 8 path,
|
|
604
|
+
// eagerly awaiting whole-file text at `scope: file` rather than resolving it
|
|
605
|
+
// lazily), and `applyAstRulesToAdditions`.
|
|
606
|
+
//
|
|
607
|
+
// All three take an injected reader, so no snippet is ever written to disk:
|
|
608
|
+
// the `scope: file` resolver sees exactly the bytes the gate saw.
|
|
609
|
+
/** One `DiffAddition` per snippet line, as a diff of a wholly-new file produces. */
|
|
610
|
+
function additionsFor(snippet, file) {
|
|
611
|
+
const lines = snippet.split('\n');
|
|
612
|
+
return lines.map((line, i) => ({
|
|
613
|
+
file,
|
|
614
|
+
line,
|
|
615
|
+
lineNumber: i + 1,
|
|
616
|
+
precedingLine: i === 0 ? null : lines[i - 1],
|
|
617
|
+
}));
|
|
618
|
+
}
|
|
619
|
+
function engineCtx() {
|
|
620
|
+
return { logger: { warn: () => { } }, state: { hasWarnedShieldContext: false } };
|
|
621
|
+
}
|
|
622
|
+
const SH_FILE = 'tools/lint.sh';
|
|
623
|
+
const MIXED = `${BARE_LOG}\n${PINNED_DIFF}`;
|
|
624
|
+
// `expected` is PINNED, not derived from either side: an agreement of two
|
|
625
|
+
// zeroes would otherwise satisfy the equality without exercising anything.
|
|
626
|
+
// The two scopes disagree on MIXED — at `line` the bare locus still fires,
|
|
627
|
+
// at `file` the companion anywhere in the snippet silences both — so this
|
|
628
|
+
// also pins that the scope distinction survives each dispatcher.
|
|
629
|
+
const REGEX_CASES = [
|
|
630
|
+
{ name: 'bad — target only', snippet: BARE_LOG, line: 1, file: 1 },
|
|
631
|
+
{ name: 'good — companion on the SAME line', snippet: PINNED_LOG, line: 0, file: 0 },
|
|
632
|
+
{ name: 'mixed — one bare locus, one companioned', snippet: MIXED, line: 1, file: 0 },
|
|
633
|
+
];
|
|
634
|
+
/** The § Design 8 exemplar as a record-path rule scoped to the shell fixture. */
|
|
635
|
+
function parityRegexRule(scope) {
|
|
636
|
+
return makeRegexRule({
|
|
637
|
+
lessonHeading: 'git output-consuming commands must pin LC_ALL=C',
|
|
638
|
+
pattern: GIT_TARGET,
|
|
639
|
+
requires: { pattern: 'LC_ALL=C', scope },
|
|
640
|
+
fileGlobs: ['**/*.sh'],
|
|
641
|
+
examples: [{ bad: BARE_LOG, good: PINNED_LOG }],
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
it('gate matchCount equals the SYNC REGEX dispatcher’s violation count, at both scopes', () => {
|
|
645
|
+
for (const scope of ['line', 'file']) {
|
|
646
|
+
const rule = parityRegexRule(scope);
|
|
647
|
+
for (const c of REGEX_CASES) {
|
|
648
|
+
const where = `${scope} / ${c.name}`;
|
|
649
|
+
const expected = c[scope];
|
|
650
|
+
const gate = runSmokeGate(rule, c.snippet);
|
|
651
|
+
const violations = applyRulesToAdditions(engineCtx(), [rule], additionsFor(c.snippet, SH_FILE), undefined, process.cwd(),
|
|
652
|
+
// The § Design 8 `scope: file` resolver, fed the snippet instead of a
|
|
653
|
+
// disk read — the same seam `totem lint --staged` uses for the index.
|
|
654
|
+
() => c.snippet);
|
|
655
|
+
expect(gate.matchCount, where).toBe(expected);
|
|
656
|
+
expect(violations.length, where).toBe(expected);
|
|
657
|
+
expect(gate.matched, where).toBe(violations.length > 0);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
it('gate matchCount equals the BOUNDED regex dispatcher’s violation count, at both scopes', async () => {
|
|
662
|
+
// The leg that matters most: `applyRulesToAdditionsBounded` is the dispatcher
|
|
663
|
+
// `totem lint` runs regex rules through (`rule-engine.ts:576-578`,
|
|
664
|
+
// `run-compiled-rules.ts:668`), and it reaches § Design 8 by a structurally
|
|
665
|
+
// different route — an EAGER `await getFileText(file)` at `scope: file`,
|
|
666
|
+
// where the sync dispatcher and the gate both resolve the text lazily. Parity
|
|
667
|
+
// measured only on the sync path would leave the shipping path unmeasured.
|
|
668
|
+
const evaluator = new RegexEvaluator();
|
|
669
|
+
try {
|
|
670
|
+
for (const scope of ['line', 'file']) {
|
|
671
|
+
const rule = parityRegexRule(scope);
|
|
672
|
+
for (const c of REGEX_CASES) {
|
|
673
|
+
const where = `bounded / ${scope} / ${c.name}`;
|
|
674
|
+
const expected = c[scope];
|
|
675
|
+
const gate = runSmokeGate(rule, c.snippet);
|
|
676
|
+
const { violations } = await applyRulesToAdditionsBounded(engineCtx(), [rule], additionsFor(c.snippet, SH_FILE), {
|
|
677
|
+
evaluator,
|
|
678
|
+
timeoutMode: 'strict',
|
|
679
|
+
repoRoot: process.cwd(),
|
|
680
|
+
// Same seam as the other two legs — staged mode's
|
|
681
|
+
// `git show :<file>` reader threads in here.
|
|
682
|
+
readStrategy: () => Promise.resolve(c.snippet),
|
|
683
|
+
});
|
|
684
|
+
expect(gate.matchCount, where).toBe(expected);
|
|
685
|
+
expect(violations.length, where).toBe(expected);
|
|
686
|
+
expect(gate.matched, where).toBe(violations.length > 0);
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
finally {
|
|
691
|
+
await evaluator.dispose();
|
|
692
|
+
}
|
|
693
|
+
});
|
|
694
|
+
it('gate matchCount equals the AST-GREP dispatcher’s violation count', async () => {
|
|
695
|
+
const TS_FILE = 'src/fixture.ts';
|
|
696
|
+
const rule = makeAstGrepStringRule({
|
|
697
|
+
requires: { pattern: '// debug-ok', scope: 'file' },
|
|
698
|
+
fileGlobs: ['**/*.ts'],
|
|
699
|
+
examples: [{ bad: 'debugger;\n', good: '// debug-ok\ndebugger;\n' }],
|
|
700
|
+
});
|
|
701
|
+
const cases = [
|
|
702
|
+
{ snippet: 'debugger;\n', expected: 1 },
|
|
703
|
+
{ snippet: '// debug-ok\ndebugger;\n', expected: 0 },
|
|
704
|
+
];
|
|
705
|
+
for (const { snippet, expected } of cases) {
|
|
706
|
+
const gate = runSmokeGate(rule, snippet);
|
|
707
|
+
const violations = await applyAstRulesToAdditions(engineCtx(), [rule], additionsFor(snippet, TS_FILE), process.cwd(), undefined, undefined, () => Promise.resolve(snippet));
|
|
708
|
+
expect(gate.matchCount, snippet).toBe(expected);
|
|
709
|
+
expect(violations.length, snippet).toBe(expected);
|
|
710
|
+
expect(gate.matched, snippet).toBe(violations.length > 0);
|
|
711
|
+
}
|
|
712
|
+
});
|
|
282
713
|
});
|
|
283
714
|
//# sourceMappingURL=compile-smoke-gate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-smoke-gate.test.js","sourceRoot":"","sources":["../src/compile-smoke-gate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,uDAAuD;AAEvD,SAAS,aAAa,CAAC,YAAmC,EAAE;IAC1D,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,gBAAgB;QAC/B,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE,wBAAwB;QACjC,MAAM,EAAE,OAAO;QACf,UAAU,EAAE,sBAAsB;QAClC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAmC,EAAE;IAClE,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,aAAa;QAC5B,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,mCAAmC;QAC5C,MAAM,EAAE,UAAU;QAClB,cAAc,EAAE,UAAU;QAC1B,UAAU,EAAE,sBAAsB;QAClC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,YAAmC,EAAE;IAC7D,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,aAAa;QAC5B,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,6BAA6B;QACtC,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE;YACf,IAAI,EAAE;gBACJ,IAAI,EAAE,cAAc;gBACpB,GAAG,EAAE;oBACH,GAAG,EAAE;wBACH,IAAI,EAAE,iBAAiB;wBACvB,GAAG,EAAE;4BACH,GAAG,EAAE;gCACH,EAAE,IAAI,EAAE,sBAAsB,EAAE;gCAChC,EAAE,IAAI,EAAE,sBAAsB,EAAE;gCAChC,EAAE,IAAI,EAAE,cAAc,EAAE;gCACxB,EAAE,IAAI,EAAE,kBAAkB,EAAE;gCAC5B,EAAE,IAAI,EAAE,iBAAiB,EAAE;6BAC5B;4BACD,MAAM,EAAE,KAAK;yBACd;qBACF;iBACF;aACF;SACF;QACD,UAAU,EAAE,sBAAsB;QAClC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,wDAAwD;AAExD,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AAExD,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,mEAAmE;QACnE,6DAA6D;QAC7D,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAChF,qDAAqD;QACrD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;QACtE,iEAAiE;QACjE,yDAAyD;QACzD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,iBAAiB;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AAExD,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAClE,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,wCAAwC,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,qDAAqD,CAAC,CAAC;QACzF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,IAAI,GAAG,gBAAgB,CAAC;YAC5B,eAAe,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;SAC1D,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AAExD,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,IAAI,GAAG,qBAAqB,CAAC;YACjC,cAAc,EAAE,kBAAkB;SACnC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,gDAAgD,CAAC;QACpE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,IAAI,GAAG,qBAAqB,CAAC;YACjC,SAAS,EAAE,CAAC,SAAS,CAAC;YACtB,cAAc,EAAE,UAAU;SAC3B,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,aAAa,CAAC;QAChC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,oEAAoE;IACpE,uEAAuE;IACvE,mEAAmE;IACnE,mDAAmD;IACnD,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,IAAI,GAAG,qBAAqB,CAAC;YACjC,SAAS,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;YAClC,cAAc,EAAE,kBAAkB;SACnC,CAAC,CAAC;QACH,uEAAuE;QACvE,gEAAgE;QAChE,MAAM,UAAU,GAAG,8CAA8C,CAAC;QAClE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,wEAAwE;IACxE,sEAAsE;IACtE,wEAAwE;IACxE,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,IAAI,GAAG,qBAAqB,CAAC;YACjC,SAAS,EAAE,SAAS,EAAE,WAAW;YACjC,cAAc,EAAE,cAAc;SAC/B,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,uBAAuB,CAAC;QAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,wDAAwD;IAExD,uEAAuE;IACvE,uEAAuE;IACvE,wEAAwE;IACxE,uEAAuE;IACvE,8CAA8C;IAC9C,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,oEAAoE;QACpE,+DAA+D;QAC/D,oEAAoE;QACpE,mEAAmE;QACnE,mEAAmE;QACnE,gEAAgE;QAChE,2EAA2E;QAC3E,MAAM,IAAI,GAAG,qBAAqB,CAAC;YACjC,SAAS,EAAE,CAAC,kCAAkC,CAAC;YAC/C,cAAc,EAAE,YAAY;SAC7B,CAAC,CAAC;QACH,kEAAkE;QAClE,kEAAkE;QAClE,iEAAiE;QACjE,+DAA+D;QAC/D,sCAAsC;QACtC,MAAM,WAAW,GAAG,8CAA8C,CAAC;QACnE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,+DAA+D;QAC/D,+DAA+D;QAC/D,qDAAqD;QACrD,MAAM,IAAI,GAAG,qBAAqB,CAAC;YACjC,SAAS,EAAE,CAAC,iBAAiB,CAAC;YAC9B,cAAc,EAAE,kBAAkB;SACnC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,sBAAsB,CAAC;QACzC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AAExD,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;QACjG,kEAAkE;QAClE,oEAAoE;QACpE,2DAA2D;QAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,wDAAwD,CAAC;QAC5E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,gCAAgC,CAAC;QACrD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,2BAA2B,CAAC;QAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,gBAAgB,CAAC;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,mEAAmE;QACnE,uEAAuE;QACvE,mEAAmE;QACnE,2CAA2C;QAC3C,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AAExD,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,uEAAuE;QACvE,oEAAoE;QACpE,mEAAmE;QACnE,8DAA8D;QAC9D,6DAA6D;QAC7D,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,2BAA2B,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,8DAA8D;QAC9D,MAAM,OAAO,GAAG,mBAAmB,CACjC,OAAO,EACP,KAAK,EACL,UAAU,EACV,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CACzC,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"compile-smoke-gate.test.js","sourceRoot":"","sources":["../src/compile-smoke-gate.test.ts"],"names":[],"mappings":"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"}
|
package/dist/config-schema.d.ts
CHANGED
|
@@ -1222,6 +1222,31 @@ export declare const ReviewConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
1222
1222
|
* other on a stale floor.
|
|
1223
1223
|
*/
|
|
1224
1224
|
export declare const DEFAULT_SEARCH_RELEVANCE_FLOOR = 0.25;
|
|
1225
|
+
/**
|
|
1226
|
+
* Whether `value` carries a character that cannot be rendered SAFELY into the
|
|
1227
|
+
* managed git hooks (mmnto-ai/totem#2692 C4): a single quote (breaks the `sh`
|
|
1228
|
+
* single-quoted word AND the single-quoted `node -e '…'` spec-evidence reader),
|
|
1229
|
+
* a double quote or backslash (breaks the JS string literal inside that reader),
|
|
1230
|
+
* a dollar sign or a backtick (the only characters still active inside the
|
|
1231
|
+
* double-quoted `sh` words the hook guards use), or a control character /
|
|
1232
|
+
* newline (breaks both, and can forge hook lines).
|
|
1233
|
+
*
|
|
1234
|
+
* The CLI installer carries the same clause as a render-path backstop; this
|
|
1235
|
+
* refine is the primary gate, so a validated config never reaches it. Written as
|
|
1236
|
+
* a code-point walk rather than a regex so the predicate carries no escape
|
|
1237
|
+
* sequence of its own to mis-author.
|
|
1238
|
+
*/
|
|
1239
|
+
export declare function hasUnrenderableHookChar(value: string): boolean;
|
|
1240
|
+
/**
|
|
1241
|
+
* Normalise a configured `totemDir` to the ONE spelling every consumer joins and
|
|
1242
|
+
* every managed hook renders (mmnto-ai/totem#2692 amendment A7): backslashes →
|
|
1243
|
+
* `/`, a leading `./` dropped, trailing slashes stripped. `.totem/` and `.totem`
|
|
1244
|
+
* name the same directory, but rendered into the hooks' `grep -q '<dir>/…'`
|
|
1245
|
+
* diff filters the slash produced `dir//…`, which never matched — silently.
|
|
1246
|
+
* `'.'` is left alone (the global profile's own spelling for "this directory");
|
|
1247
|
+
* an empty result is refused by the schema.
|
|
1248
|
+
*/
|
|
1249
|
+
export declare function normalizeTotemDir(value: string): string;
|
|
1225
1250
|
export declare const TotemConfigSchema: z.ZodObject<{
|
|
1226
1251
|
/** Glob patterns and chunking strategies for each ingest target */
|
|
1227
1252
|
targets: z.ZodArray<z.ZodObject<{
|
|
@@ -1731,8 +1756,26 @@ export declare const TotemConfigSchema: z.ZodObject<{
|
|
|
1731
1756
|
} | undefined;
|
|
1732
1757
|
numCtx?: number | undefined;
|
|
1733
1758
|
}, unknown>>;
|
|
1734
|
-
/**
|
|
1735
|
-
|
|
1759
|
+
/**
|
|
1760
|
+
* Optional: override the .totem/ directory path.
|
|
1761
|
+
*
|
|
1762
|
+
* The value is RENDERED INTO the managed git hooks at install
|
|
1763
|
+
* (mmnto-ai/totem#2692) — the strict pre-commit spec-evidence reader, the
|
|
1764
|
+
* pre-push gate guards, and the post-merge / post-checkout diff filters all
|
|
1765
|
+
* name it — so re-run `totem hook install --force` after changing it, or the
|
|
1766
|
+
* installed hooks keep reading the previous directory.
|
|
1767
|
+
*
|
|
1768
|
+
* The value is normalised first — a backslash becomes `/`, a leading `./` is
|
|
1769
|
+
* dropped, trailing slashes are stripped (see {@link normalizeTotemDir}) — and
|
|
1770
|
+
* an empty result is refused. Because it is rendered into shell and into a JS
|
|
1771
|
+
* string literal inside the hook, and because git C-quotes non-ASCII bytes in
|
|
1772
|
+
* the paths the hooks' diff filters read, a value carrying a quote, a dollar
|
|
1773
|
+
* sign, a backtick, a non-ASCII character, a newline or a control character
|
|
1774
|
+
* is refused here as well as by the installer. The installer additionally
|
|
1775
|
+
* refuses `.`, a `..` segment and a leading `-`, shapes whose hook diff
|
|
1776
|
+
* filters could never match.
|
|
1777
|
+
*/
|
|
1778
|
+
totemDir: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodDefault<z.ZodString>, string, string | undefined>, string, string | undefined>, string, string | undefined>, string, string | undefined>;
|
|
1736
1779
|
/** Optional: override the .lancedb/ directory path */
|
|
1737
1780
|
lanceDir: z.ZodEffects<z.ZodDefault<z.ZodString>, string, string | undefined>;
|
|
1738
1781
|
/**
|
|
@@ -1898,8 +1941,13 @@ export declare const TotemConfigSchema: z.ZodObject<{
|
|
|
1898
1941
|
}>]>>;
|
|
1899
1942
|
/** Optional: enforcement hook tier configuration */
|
|
1900
1943
|
hooks: z.ZodOptional<z.ZodObject<{
|
|
1901
|
-
/** Enforcement tier: 'strict' adds spec-
|
|
1902
|
-
*
|
|
1944
|
+
/** Enforcement tier: 'strict' adds the spec-evidence check before commit — a
|
|
1945
|
+
* `totem spec` run artifact under `<totemDir>/artifacts/runs/` (`.totem/artifacts/runs/`
|
|
1946
|
+
* unless `totemDir` overrides it; top-level
|
|
1947
|
+
* `admission.runMetadata.caller === 'spec'`, mmnto-ai/totem#2690) — and shield
|
|
1948
|
+
* gates. Agents are auto-detected and enforced at strict level regardless of
|
|
1949
|
+
* this setting. The tier is rendered into the hook at install, so re-run
|
|
1950
|
+
* `totem hook install --force` after changing it (mmnto-ai/totem#2692). */
|
|
1903
1951
|
tier: z.ZodDefault<z.ZodEnum<["strict", "standard"]>>;
|
|
1904
1952
|
}, "strip", z.ZodTypeAny, {
|
|
1905
1953
|
tier: "strict" | "standard";
|