@mmnto/cli 1.111.1 → 1.112.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.
@@ -0,0 +1,459 @@
1
+ /**
2
+ * Render + artifact tests for `totem doctor --estate` (mmnto-ai/totem#2580).
3
+ *
4
+ * Git is injected (canned porcelain), so these assert the SURFACE — which rows
5
+ * render, what the artifact contains, and that the two never share a stream —
6
+ * rather than the local git install. The husk fixture is a real temp tree
7
+ * because husk evidence is literally a filesystem shape.
8
+ */
9
+ import * as fs from 'node:fs';
10
+ import * as os from 'node:os';
11
+ import * as path from 'node:path';
12
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
13
+ import { cleanTmpDir } from '../test-utils.js';
14
+ import { doctorEstateCliCommand } from './doctor-estate.js';
15
+ const NOW = Date.parse('2026-08-05T12:00:00.000Z');
16
+ const COMMIT_10_DAYS_AGO = Math.floor((NOW - 10 * 86_400_000) / 1000);
17
+ /**
18
+ * Strip ANSI so assertions are colour-independent regardless of whether
19
+ * picocolors decides this environment supports colour. Constructed via
20
+ * `String.fromCharCode(27)` so no raw ESC control byte is authored into source.
21
+ */
22
+ const ANSI = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, 'g');
23
+ let root;
24
+ let lines;
25
+ let errSpy;
26
+ beforeEach(() => {
27
+ root = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'totem-estate-cli-')));
28
+ lines = [];
29
+ errSpy = vi.spyOn(console, 'error').mockImplementation((msg) => {
30
+ lines.push(String(msg).replace(ANSI, ''));
31
+ });
32
+ });
33
+ afterEach(() => {
34
+ errSpy.mockRestore();
35
+ cleanTmpDir(root);
36
+ });
37
+ function output() {
38
+ return lines.join('\n');
39
+ }
40
+ function fold(p) {
41
+ return process.platform === 'win32' ? path.resolve(p).toLowerCase() : path.resolve(p);
42
+ }
43
+ function mkdir(...segments) {
44
+ const dir = path.join(root, ...segments);
45
+ fs.mkdirSync(dir, { recursive: true });
46
+ return dir;
47
+ }
48
+ function registryOf(...paths) {
49
+ return Object.fromEntries(paths.map((p) => [
50
+ p,
51
+ { path: p, chunkCount: 1, lastSync: '2026-08-01T00:00:00.000Z', embedder: 'test' },
52
+ ]));
53
+ }
54
+ /**
55
+ * One repo whose worktree list carries a stale (merged) branch, an
56
+ * indeterminate (clean, unmerged) branch, and nothing else.
57
+ */
58
+ function fixtureEstate() {
59
+ const repo = mkdir('repo');
60
+ const stale = mkdir('repo-stale');
61
+ const open = mkdir('repo-open');
62
+ const husk = mkdir('zzz-husk');
63
+ fs.writeFileSync(path.join(husk, '.git'), `gitdir: ${path.join(root, 'gone', '.git', 'worktrees', 'zzz-husk').split(path.sep).join('/')}\n`, 'utf-8');
64
+ const listing = [
65
+ `worktree ${repo.split(path.sep).join('/')}`,
66
+ `HEAD ${'a'.repeat(40)}`,
67
+ 'branch refs/heads/main',
68
+ '',
69
+ `worktree ${stale.split(path.sep).join('/')}`,
70
+ `HEAD ${'b'.repeat(40)}`,
71
+ 'branch refs/heads/2401-done',
72
+ '',
73
+ `worktree ${open.split(path.sep).join('/')}`,
74
+ `HEAD ${'c'.repeat(40)}`,
75
+ 'branch refs/heads/2580-estate-sensor',
76
+ '',
77
+ ].join('\n');
78
+ const exec = (command, args = []) => {
79
+ // Production argv is `git --no-optional-locks -C <cwd> <verb…>`.
80
+ const cwd = fold(args[2] ?? '');
81
+ const verb = args.slice(3);
82
+ if (verb[0] === 'worktree') {
83
+ if (cwd !== fold(repo))
84
+ throw Object.assign(new Error('not a repo'), { status: 128 });
85
+ return listing;
86
+ }
87
+ // Every fixture path is its own git toplevel unless a test says otherwise.
88
+ if (verb[0] === 'rev-parse' && verb[1] === '--show-toplevel') {
89
+ return cwd.split(path.sep).join('/');
90
+ }
91
+ if (verb[0] === 'rev-parse')
92
+ return 'origin/main';
93
+ if (verb[0] === 'status')
94
+ return '';
95
+ if (verb[0] === 'log')
96
+ return String(COMMIT_10_DAYS_AGO);
97
+ if (verb[0] === 'merge-base') {
98
+ if (verb[2] === 'refs/heads/2401-done')
99
+ return '';
100
+ throw Object.assign(new Error(''), { status: 1 });
101
+ }
102
+ throw Object.assign(new Error(`unexpected verb ${verb.join(' ')}`), { status: 1 });
103
+ };
104
+ return { repo, exec };
105
+ }
106
+ describe('doctorEstateCliCommand — degenerate registry', () => {
107
+ it('renders a named SKIP line and never throws when nothing is registered', async () => {
108
+ await expect(doctorEstateCliCommand({ registryForTest: {}, nowForTest: NOW, cwdForTest: root })).resolves.toBeUndefined();
109
+ expect(output()).toContain('SKIP');
110
+ expect(output()).toContain('no registered repos');
111
+ expect(output()).toContain('totem sync');
112
+ });
113
+ it('emits a valid degenerate artifact under --json (empty registry-status, zeroed summary)', async () => {
114
+ const chunks = [];
115
+ const stdout = vi
116
+ .spyOn(process.stdout, 'write')
117
+ .mockImplementation((chunk) => {
118
+ chunks.push(String(chunk));
119
+ return true;
120
+ });
121
+ try {
122
+ await doctorEstateCliCommand({
123
+ json: true,
124
+ registryForTest: {},
125
+ nowForTest: NOW,
126
+ cwdForTest: root,
127
+ });
128
+ }
129
+ finally {
130
+ stdout.mockRestore();
131
+ }
132
+ const artifact = JSON.parse(chunks.join(''));
133
+ expect(artifact['estate-schema-version']).toBe(1);
134
+ expect(artifact['registry-status']).toBe('empty');
135
+ expect(artifact['derived-at']).toBe('2026-08-05T12:00:00.000Z');
136
+ expect(artifact['swept-roots']).toEqual([]);
137
+ expect(artifact['excluded-roots']).toEqual([]);
138
+ expect(artifact['summary']).toMatchObject({ repos: 0, worktrees: 0, 'husk-candidates': 0 });
139
+ expect(lines).toEqual([]);
140
+ });
141
+ // `--root` declares a worktree location independently of the registry: an
142
+ // empty registry must not swallow the sweep the operator explicitly asked
143
+ // for. No git call is expected — an empty registry probes nothing and a
144
+ // `.git`-less candidate needs no git.
145
+ it('still sweeps a --root when the registry is empty', async () => {
146
+ const declared = path.join(root, 'declared-root');
147
+ fs.mkdirSync(path.join(declared, 'left-behind', 'node_modules'), { recursive: true });
148
+ const chunks = [];
149
+ const stdout = vi
150
+ .spyOn(process.stdout, 'write')
151
+ .mockImplementation((chunk) => {
152
+ chunks.push(String(chunk));
153
+ return true;
154
+ });
155
+ try {
156
+ await doctorEstateCliCommand({
157
+ json: true,
158
+ registryForTest: {},
159
+ roots: [declared],
160
+ execForTest: () => {
161
+ throw new Error('no git call expected for an empty registry');
162
+ },
163
+ nowForTest: NOW,
164
+ cwdForTest: root,
165
+ });
166
+ }
167
+ finally {
168
+ stdout.mockRestore();
169
+ }
170
+ const artifact = JSON.parse(chunks.join(''));
171
+ expect(artifact['registry-status']).toBe('empty');
172
+ expect(artifact['swept-roots']).toEqual([{ path: declared, kind: 'container' }]);
173
+ const husks = artifact['husk-candidates'];
174
+ expect(husks).toHaveLength(1);
175
+ expect(husks[0].evidence).toBe('container-residue');
176
+ expect(path.basename(husks[0].path)).toBe('left-behind');
177
+ });
178
+ it('reports an unreadable registry as `unreadable`, warning on stderr only (T6)', async () => {
179
+ // The registry is read through `os.homedir()`, so the fixture is a temp
180
+ // HOME carrying a corrupt registry file — the one path that makes
181
+ // `readRegistry` warn and return {} rather than silently returning {} on a
182
+ // missing file.
183
+ const home = path.join(root, 'home');
184
+ fs.mkdirSync(path.join(home, '.totem'), { recursive: true });
185
+ fs.writeFileSync(path.join(home, '.totem', 'registry.json'), '{ not json', 'utf-8');
186
+ const originalHome = process.env['HOME'];
187
+ const originalUserProfile = process.env['USERPROFILE'];
188
+ const chunks = [];
189
+ const stdout = vi
190
+ .spyOn(process.stdout, 'write')
191
+ .mockImplementation((chunk) => {
192
+ chunks.push(String(chunk));
193
+ return true;
194
+ });
195
+ try {
196
+ process.env['HOME'] = home;
197
+ process.env['USERPROFILE'] = home;
198
+ await doctorEstateCliCommand({ json: true, nowForTest: NOW, cwdForTest: root });
199
+ }
200
+ finally {
201
+ stdout.mockRestore();
202
+ if (originalHome === undefined)
203
+ delete process.env['HOME'];
204
+ else
205
+ process.env['HOME'] = originalHome;
206
+ if (originalUserProfile === undefined)
207
+ delete process.env['USERPROFILE'];
208
+ else
209
+ process.env['USERPROFILE'] = originalUserProfile;
210
+ }
211
+ const artifact = JSON.parse(chunks.join(''));
212
+ expect(artifact['registry-status']).toBe('unreadable');
213
+ expect(artifact['summary']).toMatchObject({ repos: 0, worktrees: 0 });
214
+ // The warning rides stderr; stdout carries the artifact and nothing else.
215
+ expect(output()).toContain('Cannot read registry');
216
+ expect(chunks).toHaveLength(1);
217
+ expect(() => JSON.parse(chunks[0])).not.toThrow();
218
+ });
219
+ });
220
+ describe('doctorEstateCliCommand — human render', () => {
221
+ it('renders a stale row, an indeterminate row, and a husk row with their evidence', async () => {
222
+ const { repo, exec } = fixtureEstate();
223
+ await doctorEstateCliCommand({
224
+ registryForTest: registryOf(repo),
225
+ execForTest: exec,
226
+ nowForTest: NOW,
227
+ cwdForTest: root,
228
+ });
229
+ const text = output();
230
+ expect(text).toContain('stale');
231
+ expect(text).toContain('[2401-done]');
232
+ expect(text).toContain('is an ancestor of origin/main');
233
+ expect(text).toContain('indeterminate');
234
+ expect(text).toContain('[2580-estate-sensor]');
235
+ expect(text).toContain('squash-merged');
236
+ expect(text).toContain('husk');
237
+ expect(text).toContain('[dangling-gitdir-pointer]');
238
+ expect(text).toContain('zzz-husk');
239
+ // Summary + the two disclosure lines (criteria, and what indeterminate means).
240
+ expect(text).toContain('2 worktree(s): 0 active · 1 stale · 1 indeterminate');
241
+ expect(text).toContain('husk criteria');
242
+ expect(text).toContain('Report-only');
243
+ });
244
+ it('renders a MISSING row for a registry path that no longer exists', async () => {
245
+ const { repo, exec } = fixtureEstate();
246
+ const gone = path.join(root, 'vanished');
247
+ await doctorEstateCliCommand({
248
+ registryForTest: registryOf(repo, gone),
249
+ execForTest: exec,
250
+ nowForTest: NOW,
251
+ cwdForTest: root,
252
+ });
253
+ expect(output()).toContain('[MISSING]');
254
+ expect(output()).toContain('vanished');
255
+ });
256
+ it('sweeps a relative --root against the cwd', async () => {
257
+ const { repo, exec } = fixtureEstate();
258
+ mkdir('extra-sweep');
259
+ await doctorEstateCliCommand({
260
+ registryForTest: registryOf(repo),
261
+ execForTest: exec,
262
+ nowForTest: NOW,
263
+ cwdForTest: root,
264
+ roots: ['extra-sweep'],
265
+ });
266
+ expect(output()).toContain(path.join(root, 'extra-sweep'));
267
+ });
268
+ });
269
+ describe('doctorEstateCliCommand — evidence-model disclosure', () => {
270
+ /** A repo with a container root holding one untracked dir, plus a nested entry. */
271
+ function containerFixture() {
272
+ const repo = mkdir('repo');
273
+ mkdir('repo', '.claude', 'worktrees', 'agent-residue');
274
+ const inside = mkdir('repo', 'packages');
275
+ const listing = [
276
+ `worktree ${repo.split(path.sep).join('/')}`,
277
+ `HEAD ${'a'.repeat(40)}`,
278
+ 'branch refs/heads/main',
279
+ '',
280
+ ].join('\n');
281
+ const exec = (command, args = []) => {
282
+ const cwd = fold(args[2] ?? '');
283
+ const verb = args.slice(3);
284
+ if (verb[0] === 'rev-parse' && verb[1] === '--show-toplevel') {
285
+ // The nested entry resolves to its ANCESTOR repo.
286
+ return (cwd === fold(inside) ? repo : cwd).split(path.sep).join('/');
287
+ }
288
+ if (verb[0] === 'worktree') {
289
+ if (cwd !== fold(repo))
290
+ throw Object.assign(new Error('not a repo'), { status: 128 });
291
+ return listing;
292
+ }
293
+ if (verb[0] === 'rev-parse')
294
+ return 'origin/main';
295
+ return '';
296
+ };
297
+ return { repo, inside, exec };
298
+ }
299
+ it('renders the NOT GIT ROOT row, a container-residue husk, and kind-annotated roots', async () => {
300
+ const { repo, inside, exec } = containerFixture();
301
+ await doctorEstateCliCommand({
302
+ registryForTest: registryOf(repo, inside),
303
+ execForTest: exec,
304
+ nowForTest: NOW,
305
+ cwdForTest: root,
306
+ });
307
+ const text = output();
308
+ expect(text).toContain('[NOT GIT ROOT]');
309
+ expect(text).toContain(inside);
310
+ expect(text).toContain(repo);
311
+ expect(text).toContain('[container-residue]');
312
+ expect(text).toContain('agent-residue');
313
+ // A2: each swept root is annotated with the kind that set its evidence bar.
314
+ expect(text).toContain(`${path.join(repo, '.claude', 'worktrees')} (container)`);
315
+ expect(text).toContain(`${root} (standard)`);
316
+ });
317
+ it('labels each ledger row with its axis in the human render', async () => {
318
+ const { repo, exec } = containerFixture();
319
+ const broken = mkdir('broken-entry');
320
+ // This entry's toplevel probe fails, producing a registry-source row.
321
+ const wrapped = (command, args = []) => {
322
+ const verb = args.slice(3);
323
+ if (verb[0] === 'rev-parse' &&
324
+ verb[1] === '--show-toplevel' &&
325
+ fold(args[2] ?? '') === fold(broken)) {
326
+ throw Object.assign(new Error('not a git repository'), { status: 128 });
327
+ }
328
+ return exec(command, args);
329
+ };
330
+ await doctorEstateCliCommand({
331
+ registryForTest: registryOf(repo, broken),
332
+ execForTest: wrapped,
333
+ nowForTest: NOW,
334
+ cwdForTest: root,
335
+ });
336
+ const text = output();
337
+ expect(text).toContain(`[registry] ${broken}`);
338
+ expect(text).toContain('rev-parse --show-toplevel failed');
339
+ });
340
+ it('names all four evidence classes by root kind in the criteria line', async () => {
341
+ const { repo, exec } = containerFixture();
342
+ await doctorEstateCliCommand({
343
+ registryForTest: registryOf(repo),
344
+ execForTest: exec,
345
+ nowForTest: NOW,
346
+ cwdForTest: root,
347
+ });
348
+ const text = output();
349
+ expect(text).toContain('container roots');
350
+ expect(text).toContain('LOCATION as evidence');
351
+ expect(text).toContain('container-residue');
352
+ expect(text).toContain('SHAPE evidence');
353
+ expect(text).toContain('dangling `.git` pointer');
354
+ expect(text).toContain('node_modules');
355
+ expect(text).toContain('home repo worktree list');
356
+ expect(text).toContain('Report-only');
357
+ });
358
+ it('carries not-git-root, enclosing-repo, swept-root kinds and ledger sources in the artifact', async () => {
359
+ const { repo, inside, exec } = containerFixture();
360
+ const chunks = [];
361
+ const stdout = vi
362
+ .spyOn(process.stdout, 'write')
363
+ .mockImplementation((chunk) => {
364
+ chunks.push(String(chunk));
365
+ return true;
366
+ });
367
+ try {
368
+ await doctorEstateCliCommand({
369
+ json: true,
370
+ registryForTest: registryOf(repo, inside),
371
+ execForTest: exec,
372
+ nowForTest: NOW,
373
+ cwdForTest: root,
374
+ });
375
+ }
376
+ finally {
377
+ stdout.mockRestore();
378
+ }
379
+ const artifact = JSON.parse(chunks.join(''));
380
+ const repos = artifact['repos'];
381
+ const nested = repos.find((r) => r['path'] === inside);
382
+ expect(nested['not-git-root']).toBe(true);
383
+ expect(nested['enclosing-repo']).toBe(repo);
384
+ // Presence-only: a verified repo carries neither key.
385
+ expect('not-git-root' in repos.find((r) => r['path'] === repo)).toBe(false);
386
+ const roots = artifact['swept-roots'];
387
+ expect(roots.find((r) => r['path'] === path.join(repo, '.claude', 'worktrees'))['kind']).toBe('container');
388
+ expect(roots.find((r) => r['path'] === root)['kind']).toBe('standard');
389
+ const husks = artifact['husk-candidates'];
390
+ expect(husks.map((h) => h['evidence'])).toContain('container-residue');
391
+ for (const row of artifact['unscannable']) {
392
+ expect(['registry', 'worktree', 'sweep']).toContain(row['source']);
393
+ }
394
+ expect(artifact['summary']).toMatchObject({ 'repos-not-git-root': 1, 'repos-unscannable': 0 });
395
+ });
396
+ });
397
+ describe('doctorEstateCliCommand — the --json artifact owns stdout (invariant 8)', () => {
398
+ it('writes exactly one JSON document and renders no human line', async () => {
399
+ const { repo, exec } = fixtureEstate();
400
+ const chunks = [];
401
+ const stdout = vi
402
+ .spyOn(process.stdout, 'write')
403
+ .mockImplementation((chunk) => {
404
+ chunks.push(String(chunk));
405
+ return true;
406
+ });
407
+ try {
408
+ await doctorEstateCliCommand({
409
+ json: true,
410
+ registryForTest: registryOf(repo),
411
+ execForTest: exec,
412
+ nowForTest: NOW,
413
+ cwdForTest: root,
414
+ });
415
+ }
416
+ finally {
417
+ stdout.mockRestore();
418
+ }
419
+ expect(chunks).toHaveLength(1);
420
+ expect(chunks[0].endsWith('\n')).toBe(true);
421
+ expect(lines).toEqual([]);
422
+ const artifact = JSON.parse(chunks[0]);
423
+ expect(Object.keys(artifact)).toEqual([
424
+ 'estate-schema-version',
425
+ 'registry-status',
426
+ 'derived-at',
427
+ 'swept-roots',
428
+ 'excluded-roots',
429
+ 'repos',
430
+ 'worktrees',
431
+ 'husk-candidates',
432
+ 'unscannable',
433
+ 'summary',
434
+ ]);
435
+ expect(artifact['registry-status']).toBe('ok');
436
+ const worktrees = artifact['worktrees'];
437
+ const stale = worktrees.find((w) => w['branch'] === '2401-done');
438
+ const open = worktrees.find((w) => w['branch'] === '2580-estate-sensor');
439
+ expect(stale['class']).toBe('registered-stale');
440
+ expect(stale['ancestry-merged']).toBe(true);
441
+ expect(stale['age-days']).toBe(10);
442
+ expect(open['class']).toBe('registered-indeterminate');
443
+ expect(open['ancestry-merged']).toBe(false);
444
+ // Presence-only optionals: a clean worktree carries no `dirty` key at all.
445
+ expect('dirty' in open).toBe(false);
446
+ expect('locked' in open).toBe(false);
447
+ const husks = artifact['husk-candidates'];
448
+ expect(husks).toHaveLength(1);
449
+ expect(husks[0]['evidence']).toBe('dangling-gitdir-pointer');
450
+ expect(artifact['summary']).toMatchObject({
451
+ repos: 1,
452
+ worktrees: 2,
453
+ stale: 1,
454
+ indeterminate: 1,
455
+ 'husk-candidates': 1,
456
+ });
457
+ });
458
+ });
459
+ //# sourceMappingURL=doctor-estate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-estate.test.js","sourceRoot":"","sources":["../../src/commands/doctor-estate.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,18 @@
1
+ import type { EstateExecFn, TotemRegistry } from '@mmnto/totem';
1
2
  export type CheckStatus = 'pass' | 'warn' | 'fail' | 'skip';
2
3
  export interface DiagnosticResult {
3
4
  name: string;
4
5
  status: CheckStatus;
5
6
  message: string;
6
7
  remediation?: string;
8
+ /**
9
+ * Sensor-class row: its ADVISORY statuses never gate, under any `--strict`
10
+ * tier (ruled scope, mmnto-ai/totem#2580). The exemption is a property of the
11
+ * row rather than of the tier, so a sensor cannot acquire teeth by someone
12
+ * widening the tier later — and it deliberately does NOT cover `fail`, which
13
+ * always gates (see `doctorGateFailed`).
14
+ */
15
+ gateExempt?: true;
7
16
  }
8
17
  /**
9
18
  * Gating tiers for `totem doctor --strict [tier]`:
@@ -30,6 +39,12 @@ export declare function resolveStrictTier(strict: boolean | string | undefined):
30
39
  * The gate predicate the CLI edge applies to `doctorCommand` results. Kept
31
40
  * pure and exported so the edge stays thin and the semantics stay unit-tested
32
41
  * (the exit-code decision itself lives at the CLI edge — see DoctorOptions).
42
+ *
43
+ * The exemption is scoped to ADVISORY statuses. A `fail` gates regardless of
44
+ * `gateExempt`: a fail-class diagnostic is a wiring failure, and no row may be
45
+ * allowed to hide one. Sensor rows never emit `fail` in the first place, so the
46
+ * narrowing costs them nothing and closes the hole where a mislabelled row
47
+ * could suppress a real gate.
33
48
  */
34
49
  export declare function doctorGateFailed(results: readonly DiagnosticResult[], tier: StrictTier): boolean;
35
50
  export declare function checkConfig(cwd: string): DiagnosticResult;
@@ -252,6 +267,13 @@ export interface DoctorOptions {
252
267
  * row 5); mmnto-ai/totem#2385 (warn tier — the all-wiring oracle).
253
268
  */
254
269
  strict?: boolean | string;
270
+ /**
271
+ * Test seam for the ambient `Estate` row. Production callers omit it and the
272
+ * row reads the real user-level registry; tests pass an empty registry so the
273
+ * suite never shells git at whatever repos this machine happens to have
274
+ * synced (same hermeticity reason as the mocked `fetch` for the Ollama probe).
275
+ */
276
+ estateSeamsForTest?: Parameters<typeof checkEstate>[0];
255
277
  }
256
278
  export declare function runSelfHealing(cwd: string): Promise<void>;
257
279
  /**
@@ -264,5 +286,24 @@ export declare function runSelfHealing(cwd: string): Promise<void>;
264
286
  * verify-manifest, not doctor).
265
287
  */
266
288
  export declare function checkFreezes(cwd: string, totemDir?: string): Promise<DiagnosticResult>;
289
+ /**
290
+ * Ambient worktree-estate row (mmnto-ai/totem#2580, open question 1 ruled (a)).
291
+ * Quiet when the estate is clean, a named SKIP when nothing is registered, and
292
+ * a `warn` — never a `fail` — when husks or stale worktrees exist: this is a
293
+ * sensor, and the detail lives behind `totem doctor --estate`.
294
+ *
295
+ * `@mmnto/totem` is dynamic-imported INSIDE the check, per the ruling's
296
+ * constraint: a static core-barrel import here would pull core onto the CLI
297
+ * cold-start path for every command.
298
+ *
299
+ * Every return carries `gateExempt: true`: this row is sensor-class and must
300
+ * not gate under any `--strict` tier (mmnto-ai/totem#2580 ruled scope —
301
+ * removal verbs and gating are later slices).
302
+ */
303
+ export declare function checkEstate(seams?: {
304
+ registry?: TotemRegistry;
305
+ safeExec?: EstateExecFn;
306
+ now?: number;
307
+ }): Promise<DiagnosticResult>;
267
308
  export declare function doctorCommand(options?: DoctorOptions): Promise<DiagnosticResult[]>;
268
309
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}