@mmnto/cli 1.114.0 → 1.116.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 (101) hide show
  1. package/dist/commands/doctor-compliance.test.js +17 -0
  2. package/dist/commands/doctor-compliance.test.js.map +1 -1
  3. package/dist/commands/doctor-seat-identity.d.ts +87 -0
  4. package/dist/commands/doctor-seat-identity.d.ts.map +1 -0
  5. package/dist/commands/doctor-seat-identity.js +427 -0
  6. package/dist/commands/doctor-seat-identity.js.map +1 -0
  7. package/dist/commands/doctor-seat-identity.test.d.ts +13 -0
  8. package/dist/commands/doctor-seat-identity.test.d.ts.map +1 -0
  9. package/dist/commands/doctor-seat-identity.test.js +390 -0
  10. package/dist/commands/doctor-seat-identity.test.js.map +1 -0
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +3 -0
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/doctor.test.js +1 -0
  15. package/dist/commands/doctor.test.js.map +1 -1
  16. package/dist/commands/ecl-gc.d.ts.map +1 -1
  17. package/dist/commands/ecl-gc.js +18 -7
  18. package/dist/commands/ecl-gc.js.map +1 -1
  19. package/dist/commands/ecl-gc.test.js +63 -1
  20. package/dist/commands/ecl-gc.test.js.map +1 -1
  21. package/dist/commands/eject.d.ts +62 -3
  22. package/dist/commands/eject.d.ts.map +1 -1
  23. package/dist/commands/eject.js +382 -47
  24. package/dist/commands/eject.js.map +1 -1
  25. package/dist/commands/eject.test.js +557 -7
  26. package/dist/commands/eject.test.js.map +1 -1
  27. package/dist/commands/gemini-beforetool-contract.test.d.ts +2 -0
  28. package/dist/commands/gemini-beforetool-contract.test.d.ts.map +1 -0
  29. package/dist/commands/gemini-beforetool-contract.test.js +106 -0
  30. package/dist/commands/gemini-beforetool-contract.test.js.map +1 -0
  31. package/dist/commands/gemini-sessionstart-contract.test.d.ts +2 -0
  32. package/dist/commands/gemini-sessionstart-contract.test.d.ts.map +1 -0
  33. package/dist/commands/gemini-sessionstart-contract.test.js +199 -0
  34. package/dist/commands/gemini-sessionstart-contract.test.js.map +1 -0
  35. package/dist/commands/init-templates.d.ts +4 -4
  36. package/dist/commands/init-templates.d.ts.map +1 -1
  37. package/dist/commands/init-templates.js +279 -16
  38. package/dist/commands/init-templates.js.map +1 -1
  39. package/dist/commands/init.test.js +25 -7
  40. package/dist/commands/init.test.js.map +1 -1
  41. package/dist/commands/install-hooks-exit-contract.test.js +5 -0
  42. package/dist/commands/install-hooks-exit-contract.test.js.map +1 -1
  43. package/dist/commands/mail-degraded-e4.test.js +126 -0
  44. package/dist/commands/mail-degraded-e4.test.js.map +1 -1
  45. package/dist/commands/mail.d.ts +19 -1
  46. package/dist/commands/mail.d.ts.map +1 -1
  47. package/dist/commands/mail.js +195 -30
  48. package/dist/commands/mail.js.map +1 -1
  49. package/dist/commands/mail.test.js +291 -3
  50. package/dist/commands/mail.test.js.map +1 -1
  51. package/dist/commands/orient.d.ts.map +1 -1
  52. package/dist/commands/orient.js +82 -0
  53. package/dist/commands/orient.js.map +1 -1
  54. package/dist/commands/orient.test.js +144 -1
  55. package/dist/commands/orient.test.js.map +1 -1
  56. package/dist/commands/retrospect.d.ts.map +1 -1
  57. package/dist/commands/retrospect.js +7 -3
  58. package/dist/commands/retrospect.js.map +1 -1
  59. package/dist/commands/seat-cli-wiring.test.d.ts +20 -0
  60. package/dist/commands/seat-cli-wiring.test.d.ts.map +1 -0
  61. package/dist/commands/seat-cli-wiring.test.js +147 -0
  62. package/dist/commands/seat-cli-wiring.test.js.map +1 -0
  63. package/dist/commands/seat-poll-chain.test.d.ts +13 -0
  64. package/dist/commands/seat-poll-chain.test.d.ts.map +1 -0
  65. package/dist/commands/seat-poll-chain.test.js +103 -0
  66. package/dist/commands/seat-poll-chain.test.js.map +1 -0
  67. package/dist/commands/seat.d.ts +92 -0
  68. package/dist/commands/seat.d.ts.map +1 -0
  69. package/dist/commands/seat.js +649 -0
  70. package/dist/commands/seat.js.map +1 -0
  71. package/dist/commands/seat.test.d.ts +19 -0
  72. package/dist/commands/seat.test.d.ts.map +1 -0
  73. package/dist/commands/seat.test.js +532 -0
  74. package/dist/commands/seat.test.js.map +1 -0
  75. package/dist/commands/sessionstart-manifest-contract.test.d.ts +2 -0
  76. package/dist/commands/sessionstart-manifest-contract.test.d.ts.map +1 -0
  77. package/dist/commands/sessionstart-manifest-contract.test.js +186 -0
  78. package/dist/commands/sessionstart-manifest-contract.test.js.map +1 -0
  79. package/dist/commands/triage-pr.d.ts.map +1 -1
  80. package/dist/commands/triage-pr.js +2 -0
  81. package/dist/commands/triage-pr.js.map +1 -1
  82. package/dist/hooks/__tests__/auto-context.test.js +20 -0
  83. package/dist/hooks/__tests__/auto-context.test.js.map +1 -1
  84. package/dist/hooks/auto-context.d.ts +19 -0
  85. package/dist/hooks/auto-context.d.ts.map +1 -1
  86. package/dist/hooks/auto-context.js +22 -4
  87. package/dist/hooks/auto-context.js.map +1 -1
  88. package/dist/index.js +71 -0
  89. package/dist/index.js.map +1 -1
  90. package/dist/parsers/bot-review-parser.d.ts +8 -1
  91. package/dist/parsers/bot-review-parser.d.ts.map +1 -1
  92. package/dist/parsers/bot-review-parser.js +21 -1
  93. package/dist/parsers/bot-review-parser.js.map +1 -1
  94. package/dist/parsers/bot-review-parser.test.js +23 -0
  95. package/dist/parsers/bot-review-parser.test.js.map +1 -1
  96. package/dist/parsers/triage-severity-mapper.d.ts.map +1 -1
  97. package/dist/parsers/triage-severity-mapper.js +32 -1
  98. package/dist/parsers/triage-severity-mapper.js.map +1 -1
  99. package/dist/parsers/triage-severity-mapper.test.js +57 -0
  100. package/dist/parsers/triage-severity-mapper.test.js.map +1 -1
  101. package/package.json +2 -2
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Sense-tier contract for the seat-identity doctor row (mmnto-ai/totem#2511).
3
+ *
4
+ * Real temp trees, because every arm this row senses is literally a filesystem
5
+ * shape (a dir, a marker, a stamped basename). Fixture roots stay SHORT — the
6
+ * orchestration paths nest four levels deep before the dispatch basename, and
7
+ * MAX_PATH bites on win32.
8
+ *
9
+ * The two invariants asserted on EVERY arm: `gateExempt: true` and never
10
+ * `fail`. A sense that could gate is not a sense.
11
+ */
12
+ import * as fs from 'node:fs';
13
+ import * as os from 'node:os';
14
+ import * as path from 'node:path';
15
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
16
+ import { cleanTmpDir } from '../test-utils.js';
17
+ import { checkSeatIdentity, OUTBOX_SCAN_LIMIT, SEAT_IDENTITY_CHECK_NAME, SEAT_IDENTITY_HONEST_LIMIT, } from './doctor-seat-identity.js';
18
+ /** No env by default: arm (c) must stay silent unless a test names a seat. */
19
+ const NO_ENV = {};
20
+ /**
21
+ * Every pre-arm-(d) test pins a non-win32 platform so the suite is hermetic:
22
+ * without the pin, a win32 dev host would spawn REAL `reg query` probes and a
23
+ * machine with a user-scope TOTEM_SELF_AGENT would fail unrelated assertions —
24
+ * exactly the un-isolated-test-environment trap arm (d) itself senses for.
25
+ */
26
+ const LINUX = 'linux';
27
+ let root;
28
+ beforeEach(() => {
29
+ // `realpathSync` folds the win32 8.3 short name so path comparisons and the
30
+ // repo-root walk agree; the `ti-` prefix keeps the fixture path short.
31
+ root = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'ti-')));
32
+ // The repo-root walk anchors on `.totem`; without it the walk would climb out
33
+ // of the fixture and into the developer's home profile.
34
+ fs.mkdirSync(path.join(root, '.totem', 'orchestration'), { recursive: true });
35
+ });
36
+ afterEach(() => {
37
+ cleanTmpDir(root);
38
+ });
39
+ function seatDir(seat) {
40
+ const dir = path.join(root, '.totem', 'orchestration', seat);
41
+ fs.mkdirSync(dir, { recursive: true });
42
+ return dir;
43
+ }
44
+ /** Write a dispatch into `seat`'s outbox with an explicit frontmatter `from:`. */
45
+ function dispatch(seat, basename, from) {
46
+ const outbox = path.join(seatDir(seat), 'outbox');
47
+ fs.mkdirSync(outbox, { recursive: true });
48
+ const lines = [
49
+ '---',
50
+ 'schema: adr-098-v0.4',
51
+ ...(from === null ? [] : [`from: ${from}`]),
52
+ 'to: totem-claude',
53
+ 'timestamp: 2026-08-01T00:00:00.000Z',
54
+ 'subject: fixture',
55
+ '---',
56
+ '',
57
+ 'body',
58
+ '',
59
+ ];
60
+ fs.writeFileSync(path.join(outbox, basename), lines.join('\n'));
61
+ }
62
+ function marker(seat, payload) {
63
+ fs.writeFileSync(path.join(seatDir(seat), 'lifecycle.json'), typeof payload === 'string' ? payload : JSON.stringify(payload, null, 2));
64
+ }
65
+ function validMarker(state, since) {
66
+ return { schemaVersion: 1, state, since };
67
+ }
68
+ describe('checkSeatIdentity — verdict shape', () => {
69
+ it('is gateExempt, never fail, and always states the honest limit (clean tree)', async () => {
70
+ seatDir('totem-claude');
71
+ dispatch('totem-claude', '2026-08-01T1200Z-totem-codex-note.md', 'totem-claude');
72
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
73
+ expect(result.name).toBe(SEAT_IDENTITY_CHECK_NAME);
74
+ expect(result.status).toBe('pass');
75
+ expect(result.gateExempt).toBe(true);
76
+ expect(result.message).toContain('seats sensed: 1');
77
+ expect(result.message).toContain('no identity contradictions sensed');
78
+ expect(result.message).toContain(SEAT_IDENTITY_HONEST_LIMIT);
79
+ });
80
+ it('senses zero seats without failing when no seat has registered', async () => {
81
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
82
+ expect(result.status).toBe('pass');
83
+ expect(result.gateExempt).toBe(true);
84
+ expect(result.message).toContain('seats sensed: 0');
85
+ });
86
+ it('does not flag a dispatch that declares no from: (the dir IS the binding)', async () => {
87
+ dispatch('totem-claude', '2026-08-01T1200Z-totem-codex-note.md', null);
88
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
89
+ expect(result.status).toBe('pass');
90
+ expect(result.message).not.toContain('from-mismatch');
91
+ });
92
+ });
93
+ describe('checkSeatIdentity — (a) from ≠ owning dir', () => {
94
+ it('flags the mismatch and names the offending filename', async () => {
95
+ dispatch('totem-claude', '2026-08-01T1200Z-totem-codex-ok.md', 'totem-claude');
96
+ dispatch('totem-claude', '2026-08-02T0900Z-totem-codex-forged.md', 'totem-agy');
97
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
98
+ expect(result.status).toBe('warn');
99
+ expect(result.gateExempt).toBe(true);
100
+ expect(result.message).toContain('totem-claude [from-mismatch]');
101
+ expect(result.message).toContain('2026-08-02T0900Z-totem-codex-forged.md');
102
+ expect(result.message).toContain('declares from: totem-agy');
103
+ // The matching file is evidence of nothing and must not be listed.
104
+ expect(result.message).not.toContain('2026-08-01T1200Z-totem-codex-ok.md');
105
+ });
106
+ it('reads a quoted from: as the same seat (yamlScalar quotes when it must)', async () => {
107
+ dispatch('totem-claude', '2026-08-01T1200Z-totem-codex-quoted.md', '"totem-claude"');
108
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
109
+ expect(result.status).toBe('pass');
110
+ });
111
+ it('ignores a body line that mimics from: outside the frontmatter', async () => {
112
+ const outbox = path.join(seatDir('totem-claude'), 'outbox');
113
+ fs.mkdirSync(outbox, { recursive: true });
114
+ fs.writeFileSync(path.join(outbox, '2026-08-01T1200Z-totem-codex-body.md'), ['---', 'to: totem-codex', '---', '', 'from: totem-agy', ''].join('\n'));
115
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
116
+ expect(result.status).toBe('pass');
117
+ });
118
+ });
119
+ describe('checkSeatIdentity — (b) writing while excluded', () => {
120
+ it('flags a suspended seat whose outbox carries writes stamped after `since`', async () => {
121
+ dispatch('totem-agy', '2026-07-01T1000Z-totem-claude-before.md', 'totem-agy');
122
+ dispatch('totem-agy', '2026-08-05T1000Z-totem-claude-after.md', 'totem-agy');
123
+ marker('totem-agy', validMarker('suspended', '2026-08-01T00:00:00.000Z'));
124
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
125
+ expect(result.status).toBe('warn');
126
+ expect(result.gateExempt).toBe(true);
127
+ expect(result.message).toContain('totem-agy [writing-while-excluded]');
128
+ expect(result.message).toContain('suspended since 2026-08-01T00:00:00.000Z');
129
+ expect(result.message).toContain('2026-08-05T1000Z-totem-claude-after.md');
130
+ expect(result.message).not.toContain('2026-07-01T1000Z-totem-claude-before.md');
131
+ });
132
+ it('flags a retired seat the same way', async () => {
133
+ dispatch('totem-agy', '2026-08-05T1000Z-totem-claude-after.md', 'totem-agy');
134
+ marker('totem-agy', validMarker('retired', '2026-08-01T00:00:00.000Z'));
135
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
136
+ expect(result.message).toContain('totem-agy [writing-while-excluded]');
137
+ expect(result.status).toBe('warn');
138
+ });
139
+ it('leaves an ACTIVE seat alone however recent its writes', async () => {
140
+ dispatch('totem-agy', '2026-08-05T1000Z-totem-claude-after.md', 'totem-agy');
141
+ marker('totem-agy', validMarker('active', '2026-08-01T00:00:00.000Z'));
142
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
143
+ expect(result.status).toBe('pass');
144
+ });
145
+ it('never flags (b) on a CORRUPT marker, but relays the core warning naming it', async () => {
146
+ dispatch('totem-agy', '2026-08-05T1000Z-totem-claude-after.md', 'totem-agy');
147
+ marker('totem-agy', '{ not json');
148
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
149
+ expect(result.status).toBe('warn');
150
+ expect(result.gateExempt).toBe(true);
151
+ // The blind spot is disclosed...
152
+ expect(result.message).toContain('totem-agy [unreadable-marker]');
153
+ expect(result.message).toContain('lifecycle.json');
154
+ // ...and no finding is built on the unparsed marker.
155
+ expect(result.message).not.toContain('writing-while-excluded');
156
+ });
157
+ it('never flags (b) on a marker carrying session-state vocabulary (strict schema)', async () => {
158
+ dispatch('totem-agy', '2026-08-05T1000Z-totem-claude-after.md', 'totem-agy');
159
+ marker('totem-agy', validMarker('FAULTED', '2026-08-01T00:00:00.000Z'));
160
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
161
+ expect(result.message).toContain('totem-agy [unreadable-marker]');
162
+ expect(result.message).not.toContain('writing-while-excluded');
163
+ expect(result.status).toBe('warn');
164
+ });
165
+ });
166
+ describe('checkSeatIdentity — (c) TOTEM_SELF_AGENT vs lifecycle', () => {
167
+ it('flags an env var naming a suspended seat', async () => {
168
+ seatDir('totem-agy');
169
+ marker('totem-agy', validMarker('suspended', '2026-08-01T00:00:00.000Z'));
170
+ const result = await checkSeatIdentity(root, {
171
+ env: { TOTEM_SELF_AGENT: 'totem-agy' },
172
+ platform: LINUX,
173
+ });
174
+ expect(result.status).toBe('warn');
175
+ expect(result.gateExempt).toBe(true);
176
+ expect(result.message).toContain('totem-agy [env-names-excluded-seat]');
177
+ expect(result.message).toContain('names a suspended seat');
178
+ });
179
+ it('flags an env var naming no seat directory in this repo', async () => {
180
+ seatDir('totem-claude');
181
+ const result = await checkSeatIdentity(root, {
182
+ env: { TOTEM_SELF_AGENT: 'totem-ghost' },
183
+ platform: LINUX,
184
+ });
185
+ expect(result.status).toBe('warn');
186
+ expect(result.message).toContain('totem-ghost [env-names-unknown-seat]');
187
+ });
188
+ it('stays silent for an active seat and for an unset / blank env var', async () => {
189
+ seatDir('totem-claude');
190
+ const active = await checkSeatIdentity(root, {
191
+ env: { TOTEM_SELF_AGENT: 'totem-claude' },
192
+ platform: LINUX,
193
+ });
194
+ const unset = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
195
+ const blank = await checkSeatIdentity(root, {
196
+ env: { TOTEM_SELF_AGENT: ' ' },
197
+ platform: LINUX,
198
+ });
199
+ for (const result of [active, unset, blank]) {
200
+ expect(result.status).toBe('pass');
201
+ expect(result.message).not.toContain('env-names');
202
+ expect(result.gateExempt).toBe(true);
203
+ }
204
+ });
205
+ it('splits a comma-separated env value the way resolveSelfAgents does', async () => {
206
+ seatDir('totem-claude');
207
+ marker('totem-agy', validMarker('retired', '2026-08-01T00:00:00.000Z'));
208
+ const result = await checkSeatIdentity(root, {
209
+ env: { TOTEM_SELF_AGENT: 'totem-claude, totem-agy' },
210
+ platform: LINUX,
211
+ });
212
+ expect(result.message).toContain('totem-agy [env-names-excluded-seat]');
213
+ expect(result.message).toContain('names a retired seat');
214
+ });
215
+ it('does not flag (c) on a corrupt marker — the seat reads active by core contract', async () => {
216
+ marker('totem-agy', '{ not json');
217
+ const result = await checkSeatIdentity(root, {
218
+ env: { TOTEM_SELF_AGENT: 'totem-agy' },
219
+ platform: LINUX,
220
+ });
221
+ expect(result.message).toContain('unreadable-marker');
222
+ expect(result.message).not.toContain('env-names-excluded-seat');
223
+ });
224
+ });
225
+ describe('checkSeatIdentity — scan bound', () => {
226
+ it('discloses truncation instead of scanning silently partial', async () => {
227
+ for (let i = 0; i < 4; i++) {
228
+ dispatch('totem-claude', `2026-08-0${i + 1}T1200Z-totem-codex-n${i}.md`, 'totem-claude');
229
+ }
230
+ const bounded = await checkSeatIdentity(root, {
231
+ env: NO_ENV,
232
+ outboxScanLimit: 2,
233
+ platform: LINUX,
234
+ });
235
+ expect(bounded.message).toContain('scan bounded at 2/outbox');
236
+ expect(bounded.message).toContain('totem-claude: newest 2 of 4 outbox file(s) scanned');
237
+ expect(bounded.gateExempt).toBe(true);
238
+ // Exact contract (CR on #2627): a disclosed bound over a finding-free scan
239
+ // is a clean pass — the disclosure is a detail line, not a finding.
240
+ expect(bounded.status).toBe('pass');
241
+ });
242
+ it('says nothing about the bound when the whole outbox fits inside it', async () => {
243
+ dispatch('totem-claude', '2026-08-01T1200Z-totem-codex-n0.md', 'totem-claude');
244
+ const result = await checkSeatIdentity(root, { env: NO_ENV, platform: LINUX });
245
+ expect(result.message).not.toContain('scan bounded');
246
+ // Exact default, not a weak range check (CR on #2627).
247
+ expect(OUTBOX_SCAN_LIMIT).toBe(200);
248
+ });
249
+ it('keeps the NEWEST files when the bound bites (lexical tail = newest tail)', async () => {
250
+ dispatch('totem-claude', '2026-07-01T1200Z-totem-codex-old.md', 'totem-agy');
251
+ dispatch('totem-claude', '2026-08-09T1200Z-totem-codex-new.md', 'totem-agy');
252
+ const result = await checkSeatIdentity(root, {
253
+ env: NO_ENV,
254
+ outboxScanLimit: 1,
255
+ platform: LINUX,
256
+ });
257
+ expect(result.message).toContain('2026-08-09T1200Z-totem-codex-new.md');
258
+ expect(result.message).not.toContain('2026-07-01T1200Z-totem-codex-old.md');
259
+ });
260
+ });
261
+ describe('checkSeatIdentity — (d) registry scope-sense (win32, mmnto-ai/totem#2629)', () => {
262
+ /** Real `reg query` hit shape, CRLF line endings and all. */
263
+ const REG_HIT_STDOUT = [
264
+ 'HKEY_CURRENT_USER\\Environment',
265
+ ' TOTEM_SELF_AGENT REG_SZ totem-claude',
266
+ '',
267
+ ].join('\r\n');
268
+ /** The healthy state: `reg query` exits 1 when the value is absent. */
269
+ function regAbsent() {
270
+ const err = new Error('reg exited 1');
271
+ err.status = 1;
272
+ throw err;
273
+ }
274
+ it('never probes the registry off win32', async () => {
275
+ let calls = 0;
276
+ const result = await checkSeatIdentity(root, {
277
+ env: NO_ENV,
278
+ platform: LINUX,
279
+ regQuery: () => {
280
+ calls++;
281
+ return REG_HIT_STDOUT;
282
+ },
283
+ });
284
+ expect(calls).toBe(0);
285
+ expect(result.message).not.toContain('env-ambient-scope');
286
+ });
287
+ it('flags a user-scope TOTEM_SELF_AGENT with the value, scope, and issue named', async () => {
288
+ const result = await checkSeatIdentity(root, {
289
+ env: NO_ENV,
290
+ platform: 'win32',
291
+ regQuery: (hive) => (hive === 'HKCU\\Environment' ? REG_HIT_STDOUT : regAbsent()),
292
+ });
293
+ expect(result.status).toBe('warn');
294
+ expect(result.gateExempt).toBe(true);
295
+ expect(result.message).toContain('totem-claude [env-ambient-scope]');
296
+ expect(result.message).toContain('user scope');
297
+ expect(result.message).toContain('mmnto-ai/totem#2629');
298
+ });
299
+ it('a machine-scope hit names the machine scope', async () => {
300
+ const result = await checkSeatIdentity(root, {
301
+ env: NO_ENV,
302
+ platform: 'win32',
303
+ regQuery: (hive) => (hive.startsWith('HKLM') ? REG_HIT_STDOUT : regAbsent()),
304
+ });
305
+ expect(result.status).toBe('warn');
306
+ expect(result.message).toContain('[env-ambient-scope]');
307
+ expect(result.message).toContain('machine scope');
308
+ });
309
+ it('both hives absent (reg exit 1) is the healthy silent state', async () => {
310
+ const result = await checkSeatIdentity(root, {
311
+ env: NO_ENV,
312
+ platform: 'win32',
313
+ regQuery: regAbsent,
314
+ });
315
+ expect(result.status).toBe('pass');
316
+ expect(result.message).not.toContain('env-ambient-scope');
317
+ expect(result.message).not.toContain('registry-scope-unreadable');
318
+ });
319
+ it('a real probe failure is DISCLOSED as registry-scope-unreadable, never silent or fabricated', async () => {
320
+ const result = await checkSeatIdentity(root, {
321
+ env: NO_ENV,
322
+ platform: 'win32',
323
+ regQuery: () => {
324
+ throw new Error('spawn reg ENOENT');
325
+ },
326
+ });
327
+ expect(result.status).toBe('warn');
328
+ expect(result.gateExempt).toBe(true);
329
+ expect(result.message).toContain('[registry-scope-unreadable]');
330
+ expect(result.message).toContain('ENOENT');
331
+ expect(result.message).not.toContain('env-ambient-scope');
332
+ });
333
+ it('a BLANK-valued key (the post-remediation live shape: value cleared, key kept) is inert — no finding', async () => {
334
+ // Verbatim `reg query` output for a blank REG_SZ value after safeExec's
335
+ // whole-output trim: `reg` exits 0, the key exists, the value stamps
336
+ // nothing (resolveQbdAgentSource normalizes '' to undefined).
337
+ const blank = 'HKEY_CURRENT_USER\\Environment\r\n TOTEM_SELF_AGENT REG_SZ';
338
+ const result = await checkSeatIdentity(root, {
339
+ env: NO_ENV,
340
+ platform: 'win32',
341
+ regQuery: (hive) => (hive === 'HKCU\\Environment' ? blank : regAbsent()),
342
+ });
343
+ expect(result.status).toBe('pass');
344
+ expect(result.message).not.toContain('env-ambient-scope');
345
+ expect(result.message).not.toContain('registry-scope-unreadable');
346
+ });
347
+ it('a blank value with trailing padding (untrimmed stdout variant) is equally inert', async () => {
348
+ const blank = '\r\nHKEY_CURRENT_USER\\Environment\r\n TOTEM_SELF_AGENT REG_SZ \r\n\r\n';
349
+ const result = await checkSeatIdentity(root, {
350
+ env: NO_ENV,
351
+ platform: 'win32',
352
+ regQuery: (hive) => (hive === 'HKCU\\Environment' ? blank : regAbsent()),
353
+ });
354
+ expect(result.status).toBe('pass');
355
+ expect(result.message).not.toContain('env-ambient-scope');
356
+ });
357
+ it('a blank HKCU does NOT mask a real machine-scope hit — the loop probes both hives', async () => {
358
+ const blank = 'HKEY_CURRENT_USER\\Environment\r\n TOTEM_SELF_AGENT REG_SZ';
359
+ const result = await checkSeatIdentity(root, {
360
+ env: NO_ENV,
361
+ platform: 'win32',
362
+ regQuery: (hive) => (hive === 'HKCU\\Environment' ? blank : REG_HIT_STDOUT),
363
+ });
364
+ expect(result.status).toBe('warn');
365
+ expect(result.message).toContain('[env-ambient-scope]');
366
+ expect(result.message).toContain('machine scope');
367
+ });
368
+ it('a CR/LF-leading value is NOT the inert blank shape — it still stamps downstream, so it stays a finding', async () => {
369
+ // Programmatically-settable only (never via setx/GUI), but such a value
370
+ // survives resolveQbdAgentSource's trim-split and contaminates rows.
371
+ const crlfValue = 'HKEY_CURRENT_USER\\Environment\r\n TOTEM_SELF_AGENT REG_SZ \r\nrogue-seat';
372
+ const result = await checkSeatIdentity(root, {
373
+ env: NO_ENV,
374
+ platform: 'win32',
375
+ regQuery: (hive) => (hive === 'HKCU\\Environment' ? crlfValue : regAbsent()),
376
+ });
377
+ expect(result.status).toBe('warn');
378
+ expect(result.message).toContain('(value present, unparsed) [env-ambient-scope]');
379
+ });
380
+ it('a hit whose value line resists parsing is still a finding — presence IS the contradiction', async () => {
381
+ const result = await checkSeatIdentity(root, {
382
+ env: NO_ENV,
383
+ platform: 'win32',
384
+ regQuery: (hive) => (hive === 'HKCU\\Environment' ? 'unexpected output shape' : regAbsent()),
385
+ });
386
+ expect(result.status).toBe('warn');
387
+ expect(result.message).toContain('(value present, unparsed) [env-ambient-scope]');
388
+ });
389
+ });
390
+ //# sourceMappingURL=doctor-seat-identity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-seat-identity.test.js","sourceRoot":"","sources":["../../src/commands/doctor-seat-identity.test.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -1824,6 +1824,9 @@ export async function doctorCommand(options = {}) {
1824
1824
  await checkGrandfatheredRules(cwd),
1825
1825
  await checkFreezes(cwd),
1826
1826
  await checkEstate(options.estateSeamsForTest ?? {}),
1827
+ // Seat-identity sense (mmnto-ai/totem#2511) — lazily imported so the row's
1828
+ // module stays off the cold-start graph, the command-layer discipline.
1829
+ await (await import('./doctor-seat-identity.js')).checkSeatIdentity(cwd),
1827
1830
  ];
1828
1831
  for (const result of results) {
1829
1832
  console.error(formatResult(result));