@mmnto/cli 1.111.0 → 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.
Files changed (44) hide show
  1. package/dist/commands/doctor-estate.d.ts +38 -0
  2. package/dist/commands/doctor-estate.d.ts.map +1 -0
  3. package/dist/commands/doctor-estate.js +234 -0
  4. package/dist/commands/doctor-estate.js.map +1 -0
  5. package/dist/commands/doctor-estate.test.d.ts +10 -0
  6. package/dist/commands/doctor-estate.test.d.ts.map +1 -0
  7. package/dist/commands/doctor-estate.test.js +459 -0
  8. package/dist/commands/doctor-estate.test.js.map +1 -0
  9. package/dist/commands/doctor-parity.d.ts +1 -1
  10. package/dist/commands/doctor-parity.d.ts.map +1 -1
  11. package/dist/commands/doctor-parity.js +9 -3
  12. package/dist/commands/doctor-parity.js.map +1 -1
  13. package/dist/commands/doctor-parity.test.js +21 -2
  14. package/dist/commands/doctor-parity.test.js.map +1 -1
  15. package/dist/commands/doctor.d.ts +41 -0
  16. package/dist/commands/doctor.d.ts.map +1 -1
  17. package/dist/commands/doctor.js +103 -1
  18. package/dist/commands/doctor.js.map +1 -1
  19. package/dist/commands/doctor.test.js +216 -11
  20. package/dist/commands/doctor.test.js.map +1 -1
  21. package/dist/commands/eject.d.ts.map +1 -1
  22. package/dist/commands/eject.js +18 -5
  23. package/dist/commands/eject.js.map +1 -1
  24. package/dist/commands/eject.test.js +48 -0
  25. package/dist/commands/eject.test.js.map +1 -1
  26. package/dist/commands/init-templates.d.ts +3 -1
  27. package/dist/commands/init-templates.d.ts.map +1 -1
  28. package/dist/commands/init-templates.js +26 -4
  29. package/dist/commands/init-templates.js.map +1 -1
  30. package/dist/commands/init.d.ts +1 -1
  31. package/dist/commands/init.d.ts.map +1 -1
  32. package/dist/commands/init.js +16 -10
  33. package/dist/commands/init.js.map +1 -1
  34. package/dist/commands/init.test.js +75 -5
  35. package/dist/commands/init.test.js.map +1 -1
  36. package/dist/commands/install-hooks-exit-contract.test.js +134 -6
  37. package/dist/commands/install-hooks-exit-contract.test.js.map +1 -1
  38. package/dist/commands/install-hooks.d.ts +20 -0
  39. package/dist/commands/install-hooks.d.ts.map +1 -1
  40. package/dist/commands/install-hooks.js +38 -5
  41. package/dist/commands/install-hooks.js.map +1 -1
  42. package/dist/index.js +21 -3
  43. package/dist/index.js.map +1 -1
  44. package/package.json +2 -2
@@ -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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"}
@@ -13,7 +13,7 @@
13
13
  * `.git/hooks/*` (package-manager + tier parameterized) via
14
14
  * `detectGeneratedArtifactContract` — catches stale-version drift (#1854).
15
15
  * · **session-start-orientation**: STATIC whole-file equality of the
16
- * `.claude/hooks/SessionStart.cjs` + `.gemini/hooks/SessionStart.js` templates,
16
+ * `.claude/hooks/SessionStart.cjs` + `.gemini/hooks/SessionStart.cjs` templates,
17
17
  * also via `detectGeneratedArtifactContract` (no parameterization).
18
18
  * - **manual-attestation** (mmnto-ai/totem#2080): the no-mechanical-sensor class —
19
19
  * `detectManualAttestationContract` surfaces the doctrine-currency row / vendor-SDK
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-parity.d.ts","sourceRoot":"","sources":["../../src/commands/doctor-parity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-parity.d.ts","sourceRoot":"","sources":["../../src/commands/doctor-parity.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@
13
13
  * `.git/hooks/*` (package-manager + tier parameterized) via
14
14
  * `detectGeneratedArtifactContract` — catches stale-version drift (#1854).
15
15
  * · **session-start-orientation**: STATIC whole-file equality of the
16
- * `.claude/hooks/SessionStart.cjs` + `.gemini/hooks/SessionStart.js` templates,
16
+ * `.claude/hooks/SessionStart.cjs` + `.gemini/hooks/SessionStart.cjs` templates,
17
17
  * also via `detectGeneratedArtifactContract` (no parameterization).
18
18
  * - **manual-attestation** (mmnto-ai/totem#2080): the no-mechanical-sensor class —
19
19
  * `detectManualAttestationContract` surfaces the doctrine-currency row / vendor-SDK
@@ -242,11 +242,17 @@ function gitHookArtifactsFor(hooksDir, tier, fallbackCmd, builders) {
242
242
  /**
243
243
  * Resolve the two whole-file SessionStart hook artifacts the `session-start-orientation`
244
244
  * contract checks: `.claude/hooks/SessionStart.cjs` (canonical `CLAUDE_SESSION_START`)
245
- * and `.gemini/hooks/SessionStart.js` (canonical `GEMINI_SESSION_START`). Whole-file
245
+ * and `.gemini/hooks/SessionStart.cjs` (canonical `GEMINI_SESSION_START`). Whole-file
246
246
  * static canonical, no end marker, no regeneration. A vendor file absent here is
247
247
  * honest-absent `skip` (cohort permits absence) via the detector's presence semantics;
248
248
  * a present file whose marker opens it but whose body drifted is `warn` (the orientation
249
249
  * slice generalized `isOwnedGeneratedFile` to treat a marker-at-start JS file as owned).
250
+ *
251
+ * The gemini path is `.cjs` (mmnto-ai/totem#2488) — the extension is load-bearing in a
252
+ * `"type": "module"` consumer. A consumer that has not yet run the `.js`→`.cjs`
253
+ * migration therefore has NOTHING at the checked path and reads as honest-absent
254
+ * `skip`, never as drift; `totem hook install` migrates it (and removes the legacy
255
+ * `.js`), after which the row goes back to pass/warn.
250
256
  */
251
257
  function sessionStartArtifactsFor(gitRoot, templates) {
252
258
  return [
@@ -257,7 +263,7 @@ function sessionStartArtifactsFor(gitRoot, templates) {
257
263
  lineName: 'Parity: session-start-orientation (claude)',
258
264
  },
259
265
  {
260
- consumerPath: path.join(gitRoot, '.gemini', 'hooks', 'SessionStart.js'),
266
+ consumerPath: path.join(gitRoot, '.gemini', 'hooks', 'SessionStart.cjs'),
261
267
  canonicalContent: templates.gemini,
262
268
  ownershipMarker: templates.marker,
263
269
  lineName: 'Parity: session-start-orientation (gemini)',