@mmnto/cli 1.90.0 → 1.91.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.
@@ -31,6 +31,7 @@
31
31
  * one seat (A2.3), and self-verifies via an immediate re-poll (A2.4). Unlike the
32
32
  * prune's age window, compaction couples to the outbox lifecycle, not to time.
33
33
  */
34
+ import { type TotemConfig } from '@mmnto/totem';
34
35
  export interface EclGcOptions {
35
36
  /** Actually delete (default: dry-run — list would-prune, delete nothing). */
36
37
  apply?: boolean;
@@ -41,7 +42,12 @@ export interface EclGcOptions {
41
42
  * NOT used by the signoff step — that path self-resolves.
42
43
  */
43
44
  agentId?: string;
44
- /** Repo root override (default: `process.cwd()`). Test injection point. */
45
+ /**
46
+ * Walk-START directory (default: `process.cwd()`), not the definitive root:
47
+ * the effective repo root is derived by walking up to the nearest
48
+ * `.totem`/`.git` marker (mmnto-ai/totem#2312); a marker-less start is used
49
+ * as-is. Test injection point.
50
+ */
45
51
  repoRoot?: string;
46
52
  /** Env override (default: `process.env`). Test injection point. */
47
53
  env?: Record<string, string | undefined>;
@@ -148,7 +154,12 @@ export interface EclCompactOptions {
148
154
  * single-writer compaction target; NOT used by the signoff step (self-resolves).
149
155
  */
150
156
  agentId?: string;
151
- /** Repo root override (default: `process.cwd()`). Test injection point. */
157
+ /**
158
+ * Walk-START directory (default: `process.cwd()`), not the definitive root:
159
+ * the effective repo root is derived by walking up to the nearest
160
+ * `.totem`/`.git` marker (mmnto-ai/totem#2312); a marker-less start is used
161
+ * as-is. Test injection point.
162
+ */
152
163
  repoRoot?: string;
153
164
  /** Env override (default: `process.env`). Test injection point. */
154
165
  env?: Record<string, string | undefined>;
@@ -159,14 +170,25 @@ export interface EclCompactOptions {
159
170
  maxScan?: number;
160
171
  /**
161
172
  * Declared expected cohort repo roster for the A2.2 completeness gate — the
162
- * yardstick the workspace glob is checked against (default: `cohortRepos()`,
163
- * the strategy#611 interim constant pending config-ification, mmnto-ai/totem#2310).
164
- * An EMPTY roster is the "undeclared" case: compaction HARD-ABORTS (fail-loud,
165
- * exit 3), never "assume complete" and never a silent no-op — completeness is
166
- * unprovable without a declared expectation (strategy#828 no-roster corollary).
167
- * Tests inject explicitly.
173
+ * yardstick the workspace glob is checked against. Highest-precedence source
174
+ * (mmnto-ai/totem#2310): an explicit value here (programmatic callers / tests)
175
+ * WINS over `config.ecl.cohortRepos`. When BOTH are absent the roster is
176
+ * undeclared: compaction HARD-ABORTS (fail-loud, exit 3), never "assume
177
+ * complete" and never a silent no-op — completeness is unprovable without a
178
+ * declared expectation (strategy#828 no-roster corollary). Tests inject
179
+ * explicitly; the CLI action injects `config` (below) instead.
168
180
  */
169
181
  expectedRepos?: string[];
182
+ /**
183
+ * Loaded consumer config, the roster's second-precedence source
184
+ * (mmnto-ai/totem#2310): when `expectedRepos` is absent the gate reads
185
+ * `config.ecl.cohortRepos`. Injected by the CLI action (which loads config at
186
+ * the process boundary) so `eclCompact` stays a pure, synchronously-testable
187
+ * function — most tests inject `expectedRepos` directly and never touch this.
188
+ * A declared-but-EMPTY `cohortRepos` never reaches here: it is a Zod `.min(1)`
189
+ * violation caught loud at config load (a config bug ≠ an undeclared roster).
190
+ */
191
+ config?: TotemConfig;
170
192
  /**
171
193
  * Operator escape (`--force-incomplete`): proceed with compaction even when
172
194
  * the workspace glob is a strict subset of the declared roster (a cohort repo
@@ -227,6 +249,29 @@ export interface EclCompactResult {
227
249
  verifyComplete: boolean;
228
250
  warnings: string[];
229
251
  }
252
+ /**
253
+ * Resolve the A2.2 completeness roster by precedence (mmnto-ai/totem#2310):
254
+ * explicit `expectedRepos` (programmatic callers / tests) → `config.ecl.cohortRepos`
255
+ * (consumer-declared) → `undefined` (the honest UNDECLARED state, which the gate
256
+ * maps to a hard-abort). Pure so the precedence is unit-testable in isolation.
257
+ * A declared-but-EMPTY array never reaches here: it is a Zod `.min(1)` violation
258
+ * caught loud at config load (`loadEclConfig`), so a config bug is never aliased
259
+ * into an undeclared roster.
260
+ */
261
+ export declare function resolveExpectedRoster(explicit: string[] | undefined, config: TotemConfig | undefined): string[] | undefined;
262
+ /**
263
+ * Load the consumer's Totem config for the compaction roster read
264
+ * (mmnto-ai/totem#2310). A MISSING config file is the honest "undeclared" state —
265
+ * returns `undefined`, and the gate hard-aborts (exit 3) downstream. A
266
+ * PRESENT-but-INVALID config (e.g. `ecl.cohortRepos: []` → Zod `.min(1)`, or any
267
+ * other schema/parse error) throws LOUD: it is a config BUG and must NOT be
268
+ * caught into honest-absent, which would mask the bug as a normal undeclared
269
+ * roster (Tenet 4). Mirrors `orient`'s config read (`resolveProjectNumber`) but
270
+ * DELIBERATELY narrows the swallow to `CONFIG_MISSING` only — orient's catch-all
271
+ * would degrade an invalid config into "no board", the exact aliasing this gate
272
+ * must avoid.
273
+ */
274
+ export declare function loadEclConfig(cwd: string): Promise<TotemConfig | undefined>;
230
275
  /**
231
276
  * Programmatic entry point for cursor-coupled processed-mark compaction. For a
232
277
  * single resolved seat, deletes `processed/` marks whose inbound dispatch is
@@ -1 +1 @@
1
- {"version":3,"file":"ecl-gc.d.ts","sourceRoot":"","sources":["../../src/commands/ecl-gc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecl-gc.d.ts","sourceRoot":"","sources":["../../src/commands/ecl-gc.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@
33
33
  */
34
34
  import * as fs from 'node:fs';
35
35
  import * as path from 'node:path';
36
- import { cohortRepos, getErrorMessage, isPathSafeAgentId, TotemError } from '@mmnto/totem';
36
+ import { getErrorMessage, isPathSafeAgentId, resolveTotemRepoRootSync, TotemConfigError, TotemError, } from '@mmnto/totem';
37
37
  import { pollMail, resolveSelfSender } from './mail.js';
38
38
  // ─── Constants ──────────────────────────────────────────
39
39
  const TAG = 'EclGc';
@@ -139,7 +139,11 @@ export function planPrune(entries, cutoff) {
139
139
  */
140
140
  export function eclGc(opts = {}) {
141
141
  const env = opts.env ?? process.env;
142
- const repoRoot = path.resolve(opts.repoRoot ?? process.cwd());
142
+ // Walk-start, not definitive root (contract in `resolveTotemRepoRootSync` —
143
+ // same seam as `pollMail`, mmnto-ai/totem#2312): from a subdir the bare
144
+ // `path.resolve(cwd)` made `<repoRoot>/.totem/orchestration/<agent>/outbox`
145
+ // garbage and self-resolution would throw.
146
+ const repoRoot = resolveTotemRepoRootSync(opts.repoRoot, process.cwd());
143
147
  const now = (opts.now ?? (() => new Date()))();
144
148
  // Retain-days validation (usage error) — evaluated before any scan.
145
149
  const retainDays = opts.retainDays ?? DEFAULT_RETAIN_DAYS;
@@ -281,6 +285,44 @@ function readMarkDir(dir, warnings) {
281
285
  return [];
282
286
  }
283
287
  }
288
+ /**
289
+ * Resolve the A2.2 completeness roster by precedence (mmnto-ai/totem#2310):
290
+ * explicit `expectedRepos` (programmatic callers / tests) → `config.ecl.cohortRepos`
291
+ * (consumer-declared) → `undefined` (the honest UNDECLARED state, which the gate
292
+ * maps to a hard-abort). Pure so the precedence is unit-testable in isolation.
293
+ * A declared-but-EMPTY array never reaches here: it is a Zod `.min(1)` violation
294
+ * caught loud at config load (`loadEclConfig`), so a config bug is never aliased
295
+ * into an undeclared roster.
296
+ */
297
+ export function resolveExpectedRoster(explicit, config) {
298
+ return explicit ?? config?.ecl?.cohortRepos;
299
+ }
300
+ /**
301
+ * Load the consumer's Totem config for the compaction roster read
302
+ * (mmnto-ai/totem#2310). A MISSING config file is the honest "undeclared" state —
303
+ * returns `undefined`, and the gate hard-aborts (exit 3) downstream. A
304
+ * PRESENT-but-INVALID config (e.g. `ecl.cohortRepos: []` → Zod `.min(1)`, or any
305
+ * other schema/parse error) throws LOUD: it is a config BUG and must NOT be
306
+ * caught into honest-absent, which would mask the bug as a normal undeclared
307
+ * roster (Tenet 4). Mirrors `orient`'s config read (`resolveProjectNumber`) but
308
+ * DELIBERATELY narrows the swallow to `CONFIG_MISSING` only — orient's catch-all
309
+ * would degrade an invalid config into "no board", the exact aliasing this gate
310
+ * must avoid.
311
+ */
312
+ export async function loadEclConfig(cwd) {
313
+ const { loadConfig, resolveConfigPath } = await import('../utils.js');
314
+ let configPath;
315
+ try {
316
+ configPath = resolveConfigPath(cwd);
317
+ // totem-context: a MISSING config file is honest-absent (undeclared roster → gate-red), NOT a failure; any OTHER error — and the present-but-invalid config surfaced by loadConfig below — propagates LOUD so a config bug never aliases into the undeclared arm.
318
+ }
319
+ catch (err) {
320
+ if (err instanceof TotemConfigError && err.code === 'CONFIG_MISSING')
321
+ return undefined;
322
+ throw err;
323
+ }
324
+ return loadConfig(configPath);
325
+ }
284
326
  /**
285
327
  * Programmatic entry point for cursor-coupled processed-mark compaction. For a
286
328
  * single resolved seat, deletes `processed/` marks whose inbound dispatch is
@@ -295,9 +337,14 @@ function readMarkDir(dir, warnings) {
295
337
  */
296
338
  export function eclCompact(opts = {}) {
297
339
  const env = opts.env ?? process.env;
298
- const repoRoot = path.resolve(opts.repoRoot ?? process.cwd());
340
+ // Walk-start, not definitive root (contract in `resolveTotemRepoRootSync` —
341
+ // same seam as `pollMail`, mmnto-ai/totem#2312) so the derived `workspace =
342
+ // parent-of-root` and the A2.2 completeness gate see the real cohort tree,
343
+ // not a subdir's `dirname`. Explicit `--workspace` / `TOTEM_WORKSPACE`
344
+ // overrides are untouched.
345
+ const repoRoot = resolveTotemRepoRootSync(opts.repoRoot, process.cwd());
299
346
  const workspace = path.resolve(opts.workspace ?? env['TOTEM_WORKSPACE'] ?? path.dirname(repoRoot));
300
- const expectedRepos = [...(opts.expectedRepos ?? cohortRepos())].sort();
347
+ const expectedRepos = [...(resolveExpectedRoster(opts.expectedRepos, opts.config) ?? [])].sort();
301
348
  // Single-writer target (A2.3): resolve EXACTLY one seat. Ambiguous/zero self
302
349
  // is a usage error (parity with `eclGc`), thrown before any scan or delete.
303
350
  let agent;
@@ -323,14 +370,17 @@ export function eclCompact(opts = {}) {
323
370
  const broadcastSet = new Set(broadcastMarks);
324
371
  const allMarks = new Set([...directMarks, ...broadcastMarks]);
325
372
  // Safety corollary (codified contract strategy#828 / eb9ff5b — A2.2): an
326
- // UNDECLARED (empty) roster gives the completeness gate nothing to assert
327
- // against, so completeness cannot be proven. This is a HARD ABORT (fail-loud,
328
- // non-zero exit — the caller maps `gateComplete=false` to exit 3), NOT a silent
329
- // no-op that would let `processed/` accumulate unsignalled (Tenet 4). A genuine
330
- // single-repo consumer opts into completeness-1 by DECLARING a 1-repo roster;
331
- // the interim `cohortRepos()` default is non-empty for our cohort, so this
332
- // guards the config-declared undeclared-consumer case (mmnto-ai/totem#2310).
333
- // `rosterDeclared=false` is retained only to frame the operator message.
373
+ // UNDECLARED roster gives the completeness gate nothing to assert against, so
374
+ // completeness cannot be proven. This is a HARD ABORT (fail-loud, non-zero
375
+ // exit — the caller maps `gateComplete=false` to exit 3), NOT a silent no-op
376
+ // that would let `processed/` accumulate unsignalled (Tenet 4). The roster is
377
+ // resolved from consumer config (`ecl.cohortRepos`, mmnto-ai/totem#2310):
378
+ // omitting the key is the undeclared state that lands here (empty array after
379
+ // the `?? []` fallback). A declared-but-EMPTY `cohortRepos: []` never reaches
380
+ // this branch — it is a loud Zod `.min(1)` failure at config load, never
381
+ // aliased into undeclared. A genuine single-repo consumer opts into
382
+ // completeness-1 by DECLARING a 1-repo roster. `rosterDeclared=false` is
383
+ // retained only to frame the operator message.
334
384
  if (expectedRepos.length === 0) {
335
385
  return {
336
386
  agent,
@@ -362,8 +412,8 @@ export function eclCompact(opts = {}) {
362
412
  // roster entry the gate accepts but the scan would skip leaves its outbox
363
413
  // unscanned, re-opening the leak (CodeRabbit). `--force-incomplete` waives a
364
414
  // genuinely ABSENT repo, but never an unscannable-name declaration (that is a
365
- // config error, not a known gap). Unreachable with the clean #611 roster
366
- // today; hardens the config-declared future (mmnto-ai/totem#2310).
415
+ // config error, not a known gap). Unreachable with our own clean config-
416
+ // declared roster today; hardens the arbitrary-consumer case (mmnto-ai/totem#2310).
367
417
  const forced = opts.forceIncomplete === true;
368
418
  const missingRepos = expectedRepos.filter((repo) => !repo.startsWith('.') && repo !== 'node_modules' && !isDir(path.join(workspace, repo)));
369
419
  const unscannableRepos = expectedRepos.filter((repo) => repo.startsWith('.') || repo === 'node_modules');
@@ -1 +1 @@
1
- {"version":3,"file":"ecl-gc.js","sourceRoot":"","sources":["../../src/commands/ecl-gc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecl-gc.js","sourceRoot":"","sources":["../../src/commands/ecl-gc.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,21 @@ import * as fs from 'node:fs';
12
12
  import * as os from 'node:os';
13
13
  import * as path from 'node:path';
14
14
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
15
+ import { TotemConfigError, TotemConfigSchema } from '@mmnto/totem';
15
16
  import { cleanTmpDir } from '../test-utils.js';
16
- import { classifyEntry, cutoffKey, eclCompact, eclGc, planPrune, resolveEclGcExitCode, toStampKey, } from './ecl-gc.js';
17
+ import { classifyEntry, cutoffKey, eclCompact, eclGc, loadEclConfig, planPrune, resolveEclGcExitCode, resolveExpectedRoster, toStampKey, } from './ecl-gc.js';
18
+ /** Build a real (schema-validated) `TotemConfig` for roster-resolution tests —
19
+ * optionally with an `ecl.cohortRepos` roster. No casts: exercises the actual
20
+ * schema so the fixture can never drift from the shipped shape.
21
+ * `emptyEclBlock` yields the DISTINCT block-present-key-omitted state
22
+ * (`ecl: {}`) — schema-valid, still undeclared (greptile on PR #2315: the
23
+ * no-ecl-key and empty-ecl-block states must each be exercised as named). */
24
+ function cfg(cohortRepos, opts) {
25
+ return TotemConfigSchema.parse({
26
+ targets: [{ glob: '**/*.md', type: 'spec', strategy: 'markdown-heading' }],
27
+ ...(cohortRepos ? { ecl: { cohortRepos } } : opts?.emptyEclBlock === true ? { ecl: {} } : {}),
28
+ });
29
+ }
17
30
  // `vi.spyOn` cannot rebind a frozen ESM module-namespace export (node:fs), so
18
31
  // the partial-delete-failure row drives a module mock instead: a hoisted
19
32
  // fail-set makes the mocked `unlinkSync` throw for named files and pass through
@@ -35,6 +48,22 @@ vi.mock('node:fs', async (importOriginal) => {
35
48
  },
36
49
  };
37
50
  });
51
+ // `loadEclConfig` (the config-read seam) is the only path touching `../utils.js`;
52
+ // override just its two functions (spread-actual passthrough keeps every other
53
+ // utils export real, so the fs-driven prune/compact tests are unaffected). Lets
54
+ // the missing-vs-invalid distinction be tested without a real config on disk.
55
+ const utilsMock = vi.hoisted(() => ({
56
+ resolveConfigPath: vi.fn(),
57
+ loadConfig: vi.fn(),
58
+ }));
59
+ vi.mock('../utils.js', async (importOriginal) => {
60
+ const actual = await importOriginal();
61
+ return {
62
+ ...actual,
63
+ resolveConfigPath: utilsMock.resolveConfigPath,
64
+ loadConfig: utilsMock.loadConfig,
65
+ };
66
+ });
38
67
  // ─── Fixtures ───────────────────────────────────────────
39
68
  // Fixed clock so cutoffs are deterministic (Tenet 15). 14-day default window
40
69
  // puts the cutoff at 2026-06-21T12:00:00Z → key `20260621120000`.
@@ -72,9 +101,18 @@ const BOUNDARY_KEEP = '2026-06-21T120000Z-totem-gemini.md'; // === cutoff → ke
72
101
  const BOUNDARY_PRUNE = '2026-06-21T115959Z-totem-gemini.md'; // 1s older → pruned
73
102
  beforeEach(() => {
74
103
  tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-eclgc-'));
104
+ // Since mmnto-ai/totem#2312 `eclGc`/`eclCompact` derive the repo root by
105
+ // walking UP to the nearest `.totem`/`.git` marker. Plant markers at the two
106
+ // fixture roots (`tmpRoot` for the prune, `<tmpRoot>/totem` for the compact)
107
+ // so the walk anchors there instead of climbing to a host-level ancestor
108
+ // marker (e.g. `~/.totem`) — the same fixture requirement `selfRepoRoot` gained.
109
+ mkDir(path.join(tmpRoot, '.totem'));
110
+ mkDir(path.join(tmpRoot, 'totem', '.totem'));
75
111
  });
76
112
  afterEach(() => {
77
113
  fsMockState.failFor.clear();
114
+ utilsMock.resolveConfigPath.mockReset();
115
+ utilsMock.loadConfig.mockReset();
78
116
  vi.restoreAllMocks();
79
117
  cleanTmpDir(tmpRoot);
80
118
  });
@@ -558,6 +596,124 @@ describe('compaction — cursor-coupled GC (A2.1–A2.4)', () => {
558
596
  expect(r.collected).toEqual([]);
559
597
  expect(markExists(CS, DIRECT_SWEPT)).toBe(true);
560
598
  });
599
+ it('C16 — config.ecl.cohortRepos drives the roster when expectedRepos is absent (mmnto-ai/totem#2310)', () => {
600
+ ensureRepos(CROSTER);
601
+ writeInbound('totem-strategy', 'strategy-claude', DIRECT_LIVE, CS);
602
+ writeMark(CS, DIRECT_LIVE);
603
+ writeMark(CS, DIRECT_SWEPT);
604
+ // No `expectedRepos` → the injected config roster reaches the A2.2 gate.
605
+ const r = eclCompact({
606
+ repoRoot: compactRoot(),
607
+ workspace: tmpRoot,
608
+ env: { TOTEM_SELF_AGENT: CS },
609
+ config: cfg(CROSTER),
610
+ apply: true,
611
+ });
612
+ expect(r.expectedRepos).toEqual([...CROSTER].sort());
613
+ expect(r.gateComplete).toBe(true);
614
+ expect(r.collected).toEqual([DIRECT_SWEPT]);
615
+ expect(markExists(CS, DIRECT_SWEPT)).toBe(false);
616
+ expect(markExists(CS, DIRECT_LIVE)).toBe(true);
617
+ });
618
+ it('C17 — explicit expectedRepos WINS over config.ecl.cohortRepos (precedence)', () => {
619
+ ensureRepos(CROSTER); // only the explicit roster's repos are present
620
+ writeMark(CS, DIRECT_SWEPT);
621
+ // Config declares an EXTRA repo that is absent from the workspace — if config
622
+ // won, the gate would go RED (missing repo). Explicit CROSTER (all present)
623
+ // must win → gate green.
624
+ const r = eclCompact({
625
+ repoRoot: compactRoot(),
626
+ workspace: tmpRoot,
627
+ env: { TOTEM_SELF_AGENT: CS },
628
+ expectedRepos: CROSTER,
629
+ config: cfg([...CROSTER, 'totem-absent']),
630
+ apply: true,
631
+ });
632
+ expect(r.expectedRepos).toEqual([...CROSTER].sort());
633
+ // NON-VACUITY: had the config roster been used, `totem-absent` would gate-red.
634
+ expect(r.gateComplete).toBe(true);
635
+ expect(r.collected).toEqual([DIRECT_SWEPT]);
636
+ });
637
+ it('C18 — no expectedRepos AND no config ⇒ undeclared hard-abort (exit-3 arm)', () => {
638
+ ensureRepos(CROSTER);
639
+ writeMark(CS, DIRECT_SWEPT);
640
+ // Neither source declared → the `?? []` fallback lands in the undeclared
641
+ // gate-red arm (parity with C12's explicit `expectedRepos: []`).
642
+ const r = eclCompact({
643
+ repoRoot: compactRoot(),
644
+ workspace: tmpRoot,
645
+ env: { TOTEM_SELF_AGENT: CS },
646
+ apply: true,
647
+ });
648
+ expect(r.expectedRepos).toEqual([]);
649
+ expect(r.rosterDeclared).toBe(false);
650
+ expect(r.gateComplete).toBe(false);
651
+ expect(r.gateReasons.some((x) => /no cohort roster declared/.test(x))).toBe(true);
652
+ expect(resolveEclGcExitCode({ failed: [] }, r)).toBe(3);
653
+ expect(markExists(CS, DIRECT_SWEPT)).toBe(true);
654
+ });
655
+ it('C19 — an ecl block without cohortRepos is undeclared (config present, key omitted)', () => {
656
+ ensureRepos(CROSTER);
657
+ writeMark(CS, DIRECT_SWEPT);
658
+ // The NAMED state: a schema-valid `ecl: {}` block with `cohortRepos`
659
+ // omitted → still undeclared → hard-abort. (The no-`ecl`-key-at-all state
660
+ // is a resolveExpectedRoster unit row; C18 covers no config object.)
661
+ const r = eclCompact({
662
+ repoRoot: compactRoot(),
663
+ workspace: tmpRoot,
664
+ env: { TOTEM_SELF_AGENT: CS },
665
+ config: cfg(undefined, { emptyEclBlock: true }),
666
+ apply: true,
667
+ });
668
+ expect(r.gateComplete).toBe(false);
669
+ expect(r.gateReasons.some((x) => /no cohort roster declared/.test(x))).toBe(true);
670
+ expect(markExists(CS, DIRECT_SWEPT)).toBe(true);
671
+ });
672
+ });
673
+ // ─── Roster resolution precedence (mmnto-ai/totem#2310) ──
674
+ describe('resolveExpectedRoster — explicit > config > undefined', () => {
675
+ it('explicit expectedRepos wins over config', () => {
676
+ expect(resolveExpectedRoster(['a', 'b'], cfg(['c', 'd']))).toEqual(['a', 'b']);
677
+ });
678
+ it('config.ecl.cohortRepos is used when explicit is absent', () => {
679
+ expect(resolveExpectedRoster(undefined, cfg(['c', 'd']))).toEqual(['c', 'd']);
680
+ });
681
+ it('undefined when a config has no ecl block', () => {
682
+ expect(resolveExpectedRoster(undefined, cfg())).toBeUndefined();
683
+ });
684
+ it('undefined when the ecl block is present but cohortRepos is omitted', () => {
685
+ expect(resolveExpectedRoster(undefined, cfg(undefined, { emptyEclBlock: true }))).toBeUndefined();
686
+ });
687
+ it('undefined when neither source is present', () => {
688
+ expect(resolveExpectedRoster(undefined, undefined)).toBeUndefined();
689
+ });
690
+ it('explicit wins even over an undefined-roster config', () => {
691
+ expect(resolveExpectedRoster(['a'], cfg())).toEqual(['a']);
692
+ });
693
+ });
694
+ // ─── Config-read seam: loadEclConfig (mmnto-ai/totem#2310) ──
695
+ describe('loadEclConfig — missing ⇒ undeclared, invalid ⇒ loud', () => {
696
+ it('returns undefined when NO config file exists (honest undeclared → gate-red)', async () => {
697
+ utilsMock.resolveConfigPath.mockImplementation(() => {
698
+ throw new TotemConfigError('No Totem configuration found.', 'run totem init', 'CONFIG_MISSING');
699
+ });
700
+ await expect(loadEclConfig('/nowhere')).resolves.toBeUndefined();
701
+ expect(utilsMock.loadConfig).not.toHaveBeenCalled();
702
+ });
703
+ it('RETHROWS a present-but-invalid config LOUD (never degraded to undeclared)', async () => {
704
+ // The empty-roster / any Zod failure path: loadConfig throws CONFIG_INVALID.
705
+ utilsMock.resolveConfigPath.mockReturnValue('/repo/totem.config.ts');
706
+ utilsMock.loadConfig.mockRejectedValue(new TotemConfigError('Invalid configuration:\n ecl.cohortRepos: Array must contain at least 1 element(s)', 'fix the fields listed above', 'CONFIG_INVALID'));
707
+ // NON-VACUITY: a catch-and-degrade (orient's pattern) would resolve undefined
708
+ // here, aliasing a config bug into the undeclared arm — this asserts it does NOT.
709
+ await expect(loadEclConfig('/repo')).rejects.toThrow(/Invalid configuration/);
710
+ });
711
+ it('returns the loaded config when present and valid', async () => {
712
+ const loaded = cfg(CROSTER);
713
+ utilsMock.resolveConfigPath.mockReturnValue('/repo/totem.config.ts');
714
+ utilsMock.loadConfig.mockResolvedValue(loaded);
715
+ await expect(loadEclConfig('/repo')).resolves.toBe(loaded);
716
+ });
561
717
  });
562
718
  // ─── Combined exit-code precedence (codex panel) ────────
563
719
  describe('resolveEclGcExitCode — combined prune+compact precedence', () => {