@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
@@ -37,6 +37,23 @@ describe('parseSearchLog', () => {
37
37
  expect(result.entries[0].agent_source).toBe('claude');
38
38
  expect(result.malformedCount).toBe(0);
39
39
  });
40
+ it('tolerates the #2629 provenance/conflict fields on a row — invariant 5, compliance-parser half', () => {
41
+ const sensorRow = JSON.stringify({
42
+ timestamp: iso(BASE),
43
+ agent_source: 'totem-claude',
44
+ agent_source_provenance: 'env',
45
+ attribution_conflict: {
46
+ env_seat: 'totem-gemini',
47
+ minting_seat: 'totem-claude',
48
+ pointer_session_id: '550e8400-e29b-41d4-a716-446655440000',
49
+ },
50
+ attribution_probe_error: 'probe failed',
51
+ });
52
+ const result = parseSearchLog(sensorRow);
53
+ expect(result.malformedCount).toBe(0);
54
+ expect(result.entries).toHaveLength(1);
55
+ expect(result.entries[0].agent_source).toBe('totem-claude');
56
+ });
40
57
  it('skips a corrupt JSONL line with a warn count, still parses the rest', () => {
41
58
  const good1 = JSON.stringify({ timestamp: iso(BASE), agent_source: 'claude' });
42
59
  const good2 = JSON.stringify({ timestamp: iso(BASE + H), agent_source: 'gemini' });
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-compliance.test.js","sourceRoot":"","sources":["../../src/commands/doctor-compliance.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-compliance.test.js","sourceRoot":"","sources":["../../src/commands/doctor-compliance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * `totem doctor` — the seat-identity-binding SENSE (mmnto-ai/totem#2511).
3
+ *
4
+ * Tenet 9/13: this row senses, it never enforces. It carries `gateExempt: true`
5
+ * and never emits `fail`, so no `--strict` tier can give it teeth — the
6
+ * exemption is a property of the row (`doctor.ts` DiagnosticResult), not of the
7
+ * tier a later change might widen.
8
+ *
9
+ * Four post-hoc contradiction arms are sensed:
10
+ *
11
+ * (a) `from-mismatch` — an outbox dispatch whose frontmatter `from:` names a
12
+ * DIFFERENT seat than the directory it sits in. The dir is the
13
+ * registration (the mmnto-ai/totem#2141 dirs-union invariant), so the two
14
+ * disagreeing is an identity contradiction on its face.
15
+ * (b) `writing-while-excluded` — a seat whose PARSED lifecycle marker says
16
+ * `suspended`/`retired` yet whose outbox carries filename-stamped writes
17
+ * newer than the marker's `since`: declared lifecycle contradicted by
18
+ * observed behaviour.
19
+ * (c) `env-names-excluded-seat` / `env-names-unknown-seat` — `TOTEM_SELF_AGENT`
20
+ * naming a non-active seat, or naming no seat directory in this repo.
21
+ * (d) `env-ambient-scope` (win32 only; mmnto-ai/totem#2629) —
22
+ * `TOTEM_SELF_AGENT` present at a PERSISTENT registry scope (user or
23
+ * machine). A per-SEAT identity at either scope is inherited by every
24
+ * seat's processes on the machine — the #2629 cross-seat fallthrough
25
+ * root cause. Doctor-time only, never the stamp hot path; the stamp-seam
26
+ * counterpart (provenance + fail-closed conflict) lives in core's
27
+ * `senseAgentAttribution`.
28
+ *
29
+ * A corrupt marker degrades to `active` by core's contract
30
+ * (`seat-lifecycle.ts` — fail open on visibility), so (b) is NEVER evaluated
31
+ * against it: this sense refuses to build a finding on an unparsed marker.
32
+ * The core warning (which names the marker file) is relayed instead, as its own
33
+ * `unreadable-marker` row — a scan hole disclosed rather than a clean line that
34
+ * hides it.
35
+ *
36
+ * THE HONEST LIMIT is stated in every verdict, pass included: a CONSISTENT fake
37
+ * defeats all three arms, and that is precisely why write-time binding was
38
+ * judged infeasible for v1 and this doctor tier is the chartered fallback.
39
+ *
40
+ * Core is dynamic-imported so `@mmnto/totem` stays off the CLI cold-start
41
+ * graph, matching every other doctor check.
42
+ */
43
+ import type { DiagnosticResult } from './doctor.js';
44
+ /** Row label, `padEnd(18)`-safe in the doctor render. */
45
+ export declare const SEAT_IDENTITY_CHECK_NAME = "Seat Identity";
46
+ /**
47
+ * Newest-N outbox files scanned per seat, by filename sort. Dispatch basenames
48
+ * are stamp-prefixed (`YYYY-MM-DDTHHMMZ-`), so the lexical tail IS the newest
49
+ * tail. A bound is required — cohort outboxes grow without limit and this row
50
+ * runs on every `totem doctor` — and whenever it bites, the verdict SAYS so
51
+ * (never a silently partial scan).
52
+ */
53
+ export declare const OUTBOX_SCAN_LIMIT = 200;
54
+ /**
55
+ * The verbatim limit clause. Exported so the test pins it against drift: the
56
+ * whole justification for shipping a doctor-tier sense instead of write-time
57
+ * binding rides on this sentence staying true and staying said.
58
+ */
59
+ export declare const SEAT_IDENTITY_HONEST_LIMIT = "honest limit: a CONSISTENT fake \u2014 writing from the wrong seat dir with a matching forged `from:`, the agy shape \u2014 is NOT detectable post-hoc, which is why full write-time binding was judged infeasible for v1 and this doctor tier is the chartered fallback; this check does not discharge the 2026-06-18 seat-identity precondition.";
60
+ /** The contradiction classes this row can report. */
61
+ export type SeatIdentityFindingClass = 'from-mismatch' | 'writing-while-excluded' | 'env-names-excluded-seat' | 'env-names-unknown-seat' | 'env-ambient-scope' | 'registry-scope-unreadable' | 'unreadable-marker' | 'outbox-unreadable';
62
+ export interface SeatIdentitySeams {
63
+ /**
64
+ * Test seam — production reads `process.env`. Injected so the env arm is
65
+ * exercisable without mutating real env state (the `resolveSelfAgents`
66
+ * convention).
67
+ */
68
+ env?: Record<string, string | undefined>;
69
+ /** Test seam — overrides {@link OUTBOX_SCAN_LIMIT} so truncation is testable. */
70
+ outboxScanLimit?: number;
71
+ /** Test seam — production reads `process.platform`. Arm (d) is win32-only. */
72
+ platform?: NodeJS.Platform;
73
+ /**
74
+ * Test seam — production spawns `reg query <hive> /v TOTEM_SELF_AGENT` via
75
+ * core's `safeExec`. Implementations keep the `reg` contract this arm reads
76
+ * through: return stdout on a hit; throw with `.status === 1` when the value
77
+ * is absent at that hive (the healthy state).
78
+ */
79
+ regQuery?: (hive: string) => string;
80
+ }
81
+ /**
82
+ * Sense seat-identity binding across every registered seat dir. Report-only:
83
+ * `gateExempt: true` on every arm, `fail` on none, and an unexpected throw
84
+ * lands as a warn row rather than taking `totem doctor` down (Tenet 13).
85
+ */
86
+ export declare function checkSeatIdentity(cwd: string, seams?: SeatIdentitySeams): Promise<DiagnosticResult>;
87
+ //# sourceMappingURL=doctor-seat-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-seat-identity.d.ts","sourceRoot":"","sources":["../../src/commands/doctor-seat-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,kBAAkB,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,uVACqS,CAAC;AAwC7U,qDAAqD;AACrD,MAAM,MAAM,wBAAwB,GAChC,eAAe,GACf,wBAAwB,GACxB,yBAAyB,GACzB,wBAAwB,GACxB,mBAAmB,GACnB,2BAA2B,GAC3B,mBAAmB,GACnB,mBAAmB,CAAC;AAqBxB,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AAqHD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,iBAAsB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAiP3B"}
@@ -0,0 +1,427 @@
1
+ /**
2
+ * `totem doctor` — the seat-identity-binding SENSE (mmnto-ai/totem#2511).
3
+ *
4
+ * Tenet 9/13: this row senses, it never enforces. It carries `gateExempt: true`
5
+ * and never emits `fail`, so no `--strict` tier can give it teeth — the
6
+ * exemption is a property of the row (`doctor.ts` DiagnosticResult), not of the
7
+ * tier a later change might widen.
8
+ *
9
+ * Four post-hoc contradiction arms are sensed:
10
+ *
11
+ * (a) `from-mismatch` — an outbox dispatch whose frontmatter `from:` names a
12
+ * DIFFERENT seat than the directory it sits in. The dir is the
13
+ * registration (the mmnto-ai/totem#2141 dirs-union invariant), so the two
14
+ * disagreeing is an identity contradiction on its face.
15
+ * (b) `writing-while-excluded` — a seat whose PARSED lifecycle marker says
16
+ * `suspended`/`retired` yet whose outbox carries filename-stamped writes
17
+ * newer than the marker's `since`: declared lifecycle contradicted by
18
+ * observed behaviour.
19
+ * (c) `env-names-excluded-seat` / `env-names-unknown-seat` — `TOTEM_SELF_AGENT`
20
+ * naming a non-active seat, or naming no seat directory in this repo.
21
+ * (d) `env-ambient-scope` (win32 only; mmnto-ai/totem#2629) —
22
+ * `TOTEM_SELF_AGENT` present at a PERSISTENT registry scope (user or
23
+ * machine). A per-SEAT identity at either scope is inherited by every
24
+ * seat's processes on the machine — the #2629 cross-seat fallthrough
25
+ * root cause. Doctor-time only, never the stamp hot path; the stamp-seam
26
+ * counterpart (provenance + fail-closed conflict) lives in core's
27
+ * `senseAgentAttribution`.
28
+ *
29
+ * A corrupt marker degrades to `active` by core's contract
30
+ * (`seat-lifecycle.ts` — fail open on visibility), so (b) is NEVER evaluated
31
+ * against it: this sense refuses to build a finding on an unparsed marker.
32
+ * The core warning (which names the marker file) is relayed instead, as its own
33
+ * `unreadable-marker` row — a scan hole disclosed rather than a clean line that
34
+ * hides it.
35
+ *
36
+ * THE HONEST LIMIT is stated in every verdict, pass included: a CONSISTENT fake
37
+ * defeats all three arms, and that is precisely why write-time binding was
38
+ * judged infeasible for v1 and this doctor tier is the chartered fallback.
39
+ *
40
+ * Core is dynamic-imported so `@mmnto/totem` stays off the CLI cold-start
41
+ * graph, matching every other doctor check.
42
+ */
43
+ import * as fs from 'node:fs';
44
+ import * as path from 'node:path';
45
+ /** Row label, `padEnd(18)`-safe in the doctor render. */
46
+ export const SEAT_IDENTITY_CHECK_NAME = 'Seat Identity';
47
+ /**
48
+ * Newest-N outbox files scanned per seat, by filename sort. Dispatch basenames
49
+ * are stamp-prefixed (`YYYY-MM-DDTHHMMZ-`), so the lexical tail IS the newest
50
+ * tail. A bound is required — cohort outboxes grow without limit and this row
51
+ * runs on every `totem doctor` — and whenever it bites, the verdict SAYS so
52
+ * (never a silently partial scan).
53
+ */
54
+ export const OUTBOX_SCAN_LIMIT = 200;
55
+ /**
56
+ * The verbatim limit clause. Exported so the test pins it against drift: the
57
+ * whole justification for shipping a doctor-tier sense instead of write-time
58
+ * binding rides on this sentence staying true and staying said.
59
+ */
60
+ export const SEAT_IDENTITY_HONEST_LIMIT = 'honest limit: a CONSISTENT fake — writing from the wrong seat dir with a matching forged `from:`, the agy shape — is NOT detectable post-hoc, which is why full write-time binding was judged infeasible for v1 and this doctor tier is the chartered fallback; this check does not discharge the 2026-06-18 seat-identity precondition.';
61
+ /**
62
+ * Bytes read from the head of each dispatch. Sized to the mail reader's own
63
+ * frontmatter search window (`mail.ts` MAX_HEADER_SEARCH_BYTES, 16 KiB, sized
64
+ * ~4x the largest observed live header) so this sensor sees exactly the header
65
+ * the mail reader sees — one wire, one reading.
66
+ */
67
+ const HEAD_READ_BYTES = 16_384;
68
+ /** Example filenames carried per finding before the remainder is summarized. */
69
+ const MAX_EVIDENCE_FILES = 3;
70
+ /** Rendered cap for a token that came off the wire (a `from:` value, an env id). */
71
+ const MAX_TOKEN_CHARS = 120;
72
+ /** Errnos that PROVE an outbox is absent rather than unreadable. */
73
+ const OUTBOX_ABSENT_ERRNOS = new Set(['ENOENT', 'ENOTDIR']);
74
+ const TOTEM_DIR = '.totem';
75
+ const ORCHESTRATION_DIR = 'orchestration';
76
+ const OUTBOX_DIR = 'outbox';
77
+ /** The frontmatter opener every ADR-098 dispatch starts with. */
78
+ const FRONTMATTER_OPENER = '---';
79
+ /**
80
+ * Closing frontmatter delimiter — a `---` line after the opener (LF/CRLF/EOF),
81
+ * tolerating trailing whitespace. Copied in shape from `mail.ts` deliberately:
82
+ * a file the mail reader rejects as unparseable is not a dispatch whose `from:`
83
+ * binds anything, so both readers must agree on where the header ends.
84
+ */
85
+ const CLOSING_DELIMITER = /\r?\n---[ \t]*(?:\r?\n|$)/;
86
+ /** `from:` inside the delimited header only — a body line can never fabricate one. */
87
+ const FROM_FIELD = /^from:\s*(.+)$/im;
88
+ /** The stamped-dispatch basename prefix: `YYYY-MM-DDTHHMMZ-`. */
89
+ const STAMPED_BASENAME = /^(\d{4})-(\d{2})-(\d{2})T(\d{2})(\d{2})Z-/;
90
+ /**
91
+ * The two persistent Windows env scopes arm (d) probes (mmnto-ai/totem#2629).
92
+ * Launch-shell env is NOT in the registry, so a hit at either hive is ambient
93
+ * by definition — no value comparison needed to make it a finding.
94
+ */
95
+ const REGISTRY_SCOPES = [
96
+ { scope: 'user', hive: 'HKCU\\Environment' },
97
+ {
98
+ scope: 'machine',
99
+ hive: 'HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment',
100
+ },
101
+ ];
102
+ /** One-line, ANSI-stripped, length-capped rendering of an off-the-wire token. */
103
+ function capToken(value) {
104
+ return value.length > MAX_TOKEN_CHARS ? `${value.slice(0, MAX_TOKEN_CHARS)}…` : value;
105
+ }
106
+ /** Message text for an unknown throwable (checkEstate's shape). */
107
+ function messageOf(err) {
108
+ return err instanceof Error ? err.message : String(err);
109
+ }
110
+ /** Errno of a throwable, when it carries one. */
111
+ function errnoOf(err) {
112
+ return err !== null && typeof err === 'object' && 'code' in err
113
+ ? err.code
114
+ : undefined;
115
+ }
116
+ /**
117
+ * Strip a single pair of matching surrounding quotes. `composeDispatch` leaves
118
+ * a valid kebab agent-id unquoted (`yamlScalar` quotes only when the raw value
119
+ * would mis-parse), but hand-authored dispatches quote freely, and an
120
+ * unquote-blind compare would read every quoted `from:` as a mismatch.
121
+ */
122
+ function unquoteScalar(value) {
123
+ const trimmed = value.trim();
124
+ if (trimmed.length >= 2) {
125
+ const first = trimmed[0];
126
+ const last = trimmed[trimmed.length - 1];
127
+ if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
128
+ return trimmed.slice(1, -1).trim();
129
+ }
130
+ }
131
+ return trimmed;
132
+ }
133
+ /**
134
+ * The `from:` value declared in a dispatch's frontmatter, or `null` when the
135
+ * file is not header-shaped or declares none. A missing `from:` is NOT a
136
+ * finding: the mail reader falls back to the outbox dir name, which is the
137
+ * binding this row is checking — absence agrees with the dir by construction.
138
+ */
139
+ function frontmatterFrom(content) {
140
+ if (!content.startsWith(FRONTMATTER_OPENER))
141
+ return null;
142
+ const window = content.slice(FRONTMATTER_OPENER.length);
143
+ const close = CLOSING_DELIMITER.exec(window);
144
+ if (close === null)
145
+ return null;
146
+ const match = FROM_FIELD.exec(window.slice(0, close.index));
147
+ return match === null ? null : unquoteScalar(match[1]);
148
+ }
149
+ /**
150
+ * The UTC instant encoded in a stamped basename, or `null` when the name
151
+ * carries no stamp. Minute granularity is the wire's own resolution
152
+ * (`compactStamp`), so a write in the SAME minute as a transition compares as
153
+ * not-newer — the conservative direction for a sensor that must not invent
154
+ * contradictions.
155
+ */
156
+ function stampedInstantMs(basename) {
157
+ const m = STAMPED_BASENAME.exec(basename);
158
+ if (m === null)
159
+ return null;
160
+ const ms = Date.parse(`${m[1]}-${m[2]}-${m[3]}T${m[4]}:${m[5]}:00.000Z`);
161
+ return Number.isNaN(ms) ? null : ms;
162
+ }
163
+ function listOutbox(outboxDir, limit) {
164
+ let entries;
165
+ // totem-context: intentional degradation — the catch IS the answer: ENOENT/ENOTDIR PROVE a seat has never written (the steady state of a fresh seat dir, silent by contract), and every other errno is a scan hole this row DISCLOSES as an outbox-unreadable finding rather than reporting a clean seat it never looked inside.
166
+ try {
167
+ entries = fs.readdirSync(outboxDir, { withFileTypes: true });
168
+ // totem-context: intentional degradation — see directive above the try; dual placement so the rule fires on either the catch-keyword line or the catch-body line.
169
+ }
170
+ catch (err) {
171
+ const code = errnoOf(err);
172
+ if (code !== undefined && OUTBOX_ABSENT_ERRNOS.has(code)) {
173
+ return { files: [], total: 0 };
174
+ }
175
+ return { files: [], total: 0, readFailure: messageOf(err) };
176
+ }
177
+ const all = entries
178
+ .filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
179
+ .map((entry) => entry.name)
180
+ .sort();
181
+ return { files: all.length > limit ? all.slice(all.length - limit) : all, total: all.length };
182
+ }
183
+ /** Read at most `HEAD_READ_BYTES` from the head of a file. */
184
+ function readHead(filePath) {
185
+ const fd = fs.openSync(filePath, 'r');
186
+ try {
187
+ const buf = Buffer.alloc(HEAD_READ_BYTES);
188
+ const bytesRead = fs.readSync(fd, buf, 0, HEAD_READ_BYTES, 0);
189
+ return buf.toString('utf-8', 0, bytesRead);
190
+ }
191
+ finally {
192
+ fs.closeSync(fd);
193
+ }
194
+ }
195
+ /** `N file(s): a, b, c (+M more)` — every count stated, nothing silently dropped. */
196
+ function evidenceList(items) {
197
+ const shown = items.slice(0, MAX_EVIDENCE_FILES);
198
+ const more = items.length - shown.length;
199
+ const listed = more > 0 ? `${shown.join(', ')} (+${more} more)` : shown.join(', ');
200
+ return `${items.length} file(s): ${listed}`;
201
+ }
202
+ /**
203
+ * Sense seat-identity binding across every registered seat dir. Report-only:
204
+ * `gateExempt: true` on every arm, `fail` on none, and an unexpected throw
205
+ * lands as a warn row rather than taking `totem doctor` down (Tenet 13).
206
+ */
207
+ export async function checkSeatIdentity(cwd, seams = {}) {
208
+ const name = SEAT_IDENTITY_CHECK_NAME;
209
+ const limit = seams.outboxScanLimit ?? OUTBOX_SCAN_LIMIT;
210
+ const env = seams.env ?? process.env;
211
+ // Sanitize-at-interpolation: `from:` values, env values, and errno text are
212
+ // all off-process bytes, and this row's message reaches the terminal
213
+ // unsanitized downstream. `sanitizeForTerminal` is core-owned and must not be
214
+ // imported statically here, so it is captured after the dynamic import; until
215
+ // then the fallback still FLATTENS (the line-forging vector) and only lacks
216
+ // the ANSI strip — a pre-import failure carries loader text, not wire bytes.
217
+ let sanitize = (text) => text;
218
+ const render = (text) => sanitize(text)
219
+ .replace(/[\t\n\r]+/g, ' ')
220
+ .replace(/ {2,}/g, ' ')
221
+ .trim();
222
+ // totem-context: a scan failure is reported as a warn row — the seat-identity sensor must never take `totem doctor` down with it (report-only, Tenet 13; the checkEstate precedent).
223
+ try {
224
+ const { deriveSeatStatuses, resolveTotemRepoRootSync, safeExec, sanitizeForTerminal } = await import('@mmnto/totem');
225
+ sanitize = sanitizeForTerminal;
226
+ // The shared walk-start-is-not-the-root contract (`pollMail` / `eclGc` /
227
+ // `eclCompact`, mmnto-ai/totem#2312): a doctor run from a subdirectory must
228
+ // still resolve the real orchestration tree, or this row renders a
229
+ // false-clean "seats sensed: 0".
230
+ const repoRoot = resolveTotemRepoRootSync(undefined, cwd);
231
+ const statuses = deriveSeatStatuses(repoRoot);
232
+ const bySeat = new Map(statuses.map((status) => [status.seat, status]));
233
+ const findings = [];
234
+ const truncations = [];
235
+ for (const status of statuses) {
236
+ // A degraded marker read is a HOLE in this sense, not a clean seat: core
237
+ // fails open to `active`, so arm (b) cannot be evaluated here at all. Say
238
+ // so, with core's own warning (it names the marker file — the one-step
239
+ // recovery target).
240
+ if (status.warning !== undefined) {
241
+ findings.push({
242
+ seat: status.seat,
243
+ cls: 'unreadable-marker',
244
+ evidence: render(status.warning),
245
+ });
246
+ }
247
+ const outboxDir = path.join(repoRoot, TOTEM_DIR, ORCHESTRATION_DIR, status.seat, OUTBOX_DIR);
248
+ const listing = listOutbox(outboxDir, limit);
249
+ if (listing.readFailure !== undefined) {
250
+ findings.push({
251
+ seat: status.seat,
252
+ cls: 'outbox-unreadable',
253
+ evidence: render(listing.readFailure),
254
+ });
255
+ continue;
256
+ }
257
+ if (listing.total > listing.files.length) {
258
+ truncations.push(`${status.seat}: newest ${listing.files.length} of ${listing.total} outbox file(s) scanned`);
259
+ }
260
+ // Arm (b) arms ONLY on a successfully PARSED exclusion marker. A corrupt
261
+ // marker reads as `default-active` and is deliberately skipped here: this
262
+ // sense never builds a finding on an unparsed marker.
263
+ const excluded = status.source === 'marker' && (status.state === 'suspended' || status.state === 'retired');
264
+ const sinceMs = excluded && status.since !== undefined ? Date.parse(status.since) : Number.NaN;
265
+ const mismatched = [];
266
+ const postSince = [];
267
+ const unreadable = [];
268
+ for (const file of listing.files) {
269
+ if (!Number.isNaN(sinceMs)) {
270
+ const stamped = stampedInstantMs(file);
271
+ if (stamped !== null && stamped > sinceMs) {
272
+ postSince.push(render(file));
273
+ }
274
+ }
275
+ let head;
276
+ // totem-context: intentional degradation — a per-file read failure (mid-rename race, EACCES) is collected into an outbox-unreadable finding for this seat and the scan continues; dropping the file silently would let an unreadable dispatch read as a checked one.
277
+ try {
278
+ head = readHead(path.join(outboxDir, file));
279
+ // totem-context: intentional degradation — see directive above the try; dual placement so the rule fires on either the catch-keyword line or the catch-body line.
280
+ }
281
+ catch (err) {
282
+ unreadable.push(`${render(file)} (${render(messageOf(err))})`);
283
+ continue;
284
+ }
285
+ const declared = frontmatterFrom(head);
286
+ if (declared !== null && declared !== status.seat) {
287
+ mismatched.push(`${render(file)} declares from: ${capToken(render(declared))}`);
288
+ }
289
+ }
290
+ if (mismatched.length > 0) {
291
+ findings.push({
292
+ seat: status.seat,
293
+ cls: 'from-mismatch',
294
+ evidence: evidenceList(mismatched),
295
+ });
296
+ }
297
+ if (postSince.length > 0) {
298
+ findings.push({
299
+ seat: status.seat,
300
+ cls: 'writing-while-excluded',
301
+ evidence: `${status.state} since ${render(status.since ?? 'unknown')} — ${evidenceList(postSince)} stamped after it`,
302
+ });
303
+ }
304
+ if (unreadable.length > 0) {
305
+ findings.push({
306
+ seat: status.seat,
307
+ cls: 'outbox-unreadable',
308
+ evidence: evidenceList(unreadable),
309
+ });
310
+ }
311
+ }
312
+ // Arm (c). Same comma-split as `resolveSelfAgents`' env layer, and the same
313
+ // parsed-marker-only rule as arm (b): a corrupt marker reads active and
314
+ // earns no env finding.
315
+ const envRaw = env['TOTEM_SELF_AGENT'];
316
+ if (typeof envRaw === 'string' && envRaw.trim().length > 0) {
317
+ for (const named of envRaw
318
+ .split(',')
319
+ .map((entry) => entry.trim())
320
+ .filter((entry) => entry.length > 0)) {
321
+ const status = bySeat.get(named);
322
+ if (status === undefined) {
323
+ findings.push({
324
+ seat: capToken(render(named)),
325
+ cls: 'env-names-unknown-seat',
326
+ evidence: `TOTEM_SELF_AGENT names a seat with no directory under ${TOTEM_DIR}/${ORCHESTRATION_DIR}/ in this repo`,
327
+ });
328
+ }
329
+ else if (status.source === 'marker' && status.state !== 'active') {
330
+ findings.push({
331
+ seat: status.seat,
332
+ cls: 'env-names-excluded-seat',
333
+ evidence: `TOTEM_SELF_AGENT names a ${status.state} seat (since ${render(status.since ?? 'unknown')})`,
334
+ });
335
+ }
336
+ }
337
+ }
338
+ // Arm (d) — the win32 registry scope-sense (mmnto-ai/totem#2629).
339
+ // Doctor-time only: two `reg query` spawns per explicit doctor run, never
340
+ // the stamp hot path. A NON-BLANK value at either persistent scope is the
341
+ // finding — user/machine scope turns a per-seat identity into a
342
+ // per-machine stamp inherited by every seat's processes. A key whose value
343
+ // is BLANK is the post-remediation live shape (`reg` still exits 0 when a
344
+ // clear left the key behind); a blank stamps nothing downstream
345
+ // (resolveQbdAgentSource normalizes '' to undefined), so it is inert — no
346
+ // contradiction, no finding.
347
+ const platform = seams.platform ?? process.platform;
348
+ if (platform === 'win32') {
349
+ const regQuery = seams.regQuery ??
350
+ ((hive) => safeExec('reg', ['query', hive, '/v', 'TOTEM_SELF_AGENT']));
351
+ for (const { scope, hive } of REGISTRY_SCOPES) {
352
+ let output;
353
+ // totem-context: intentional degradation — `reg query` exits 1 when the value is absent at that hive (the healthy state, silent by contract); any OTHER failure is a scan hole this row DISCLOSES as a registry-scope-unreadable finding rather than a clean line it never verified.
354
+ try {
355
+ output = regQuery(hive);
356
+ // totem-context: intentional degradation — see directive above the try; dual placement so the rule fires on either the catch-keyword line or the catch-body line.
357
+ }
358
+ catch (err) {
359
+ const status = err.status;
360
+ if (status !== 1) {
361
+ findings.push({
362
+ seat: `${scope}-scope`,
363
+ cls: 'registry-scope-unreadable',
364
+ evidence: render(`${hive} probe failed: ${messageOf(err)}`),
365
+ });
366
+ }
367
+ continue;
368
+ }
369
+ // Rest-of-line capture, deliberately possibly-empty: the blank-value
370
+ // shape must parse (and be skipped as inert) rather than degrade to
371
+ // "unparsed". An exit-0 output whose shape resists this parse entirely
372
+ // stays a finding — present but unprovably inert: disclose, not guess.
373
+ const valueMatch = /TOTEM_SELF_AGENT\s+REG_\w+[ \t]*(.*)/i.exec(output);
374
+ if (valueMatch !== null && valueMatch[1].trim().length === 0) {
375
+ // Inert ONLY when nothing follows the match either: a value whose
376
+ // data begins past a line break (programmatically-set CR/LF-leading
377
+ // values) captures '' here yet still stamps downstream — that shape
378
+ // must stay a finding, not vanish into the blank-skip (fold re-arm
379
+ // leg catch on this PR).
380
+ const rest = output.slice(valueMatch.index + valueMatch[0].length);
381
+ if (rest.trim().length === 0)
382
+ continue;
383
+ }
384
+ const value = valueMatch === null || valueMatch[1].trim().length === 0
385
+ ? '(value present, unparsed)'
386
+ : valueMatch[1];
387
+ findings.push({
388
+ seat: capToken(render(value)),
389
+ cls: 'env-ambient-scope',
390
+ evidence: `TOTEM_SELF_AGENT is set at ${scope} scope (${hive}) — a per-seat identity must be launch-shell-scoped, never user/machine scope (mmnto-ai/totem#2629)`,
391
+ });
392
+ }
393
+ }
394
+ const parts = [`seats sensed: ${statuses.length}`];
395
+ parts.push(findings.length === 0
396
+ ? 'no identity contradictions sensed'
397
+ : `${findings.length} finding(s): ${findings
398
+ .map((f) => `${f.seat} [${f.cls}] ${f.evidence}`)
399
+ .join(' | ')}`);
400
+ if (truncations.length > 0) {
401
+ parts.push(`scan bounded at ${limit}/outbox — ${truncations.join('; ')}`);
402
+ }
403
+ parts.push(SEAT_IDENTITY_HONEST_LIMIT);
404
+ return {
405
+ name,
406
+ status: findings.length === 0 ? 'pass' : 'warn',
407
+ message: parts.join(' · '),
408
+ ...(findings.length > 0
409
+ ? {
410
+ remediation: 'Inspect the named files and `totem seat list` — this row senses only and never gates.',
411
+ }
412
+ : {}),
413
+ gateExempt: true,
414
+ };
415
+ // totem-context: intentional degradation — see directive above the try; dual placement so the rule fires on either the catch-keyword line or the catch-body line.
416
+ }
417
+ catch (err) {
418
+ return {
419
+ name,
420
+ status: 'warn',
421
+ message: `Seat-identity scan failed: ${render(messageOf(err))} · ${SEAT_IDENTITY_HONEST_LIMIT}`,
422
+ remediation: 'Check .totem/orchestration/ readability, then re-run `totem doctor`.',
423
+ gateExempt: true,
424
+ };
425
+ }
426
+ }
427
+ //# sourceMappingURL=doctor-seat-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-seat-identity.js","sourceRoot":"","sources":["../../src/commands/doctor-seat-identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
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
+ export {};
13
+ //# sourceMappingURL=doctor-seat-identity.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-seat-identity.test.d.ts","sourceRoot":"","sources":["../../src/commands/doctor-seat-identity.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}