@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
@@ -158,7 +158,7 @@ export const GEMINI_SESSION_START = `// [totem] auto-generated — Gemini CLI Se
158
158
  // totem-strategy, totem-substrate, arhgap11, and totem-status, and
159
159
  // matches the Claude-side SessionStart hook scaffolded by this same init
160
160
  // pass (mmnto-ai/totem#1884).
161
- const { execSync } = require('child_process');
161
+ const { spawnSync } = require('child_process');
162
162
 
163
163
  // totem-status refresh-gh — GH-federation snapshot refresh (mmnto-ai/totem-status#127
164
164
  // C3 residual; tracking mmnto-ai/totem#2556). Spawn-and-forget, detached+unref, and
@@ -251,27 +251,180 @@ try {
251
251
  process.stderr.write('[SessionStart] totem-status refresh-gh unavailable (non-fatal): ' + (err instanceof Error ? err.message : String(err)) + '\\n');
252
252
  }
253
253
 
254
+ // ─── A.3.a: mint session ID + log session_start event ──────────
255
+ // New with mmnto-ai/totem#2468: this template never took over the A.3.a duty
256
+ // its Claude sibling carries, so Gemini-seat sessions had no session UUID and
257
+ // no session_start denominator row — the selection-manifest join key and the
258
+ // recorded-absence contract both need them. Same shape as the Claude template.
259
+ // Fire-and-forget: a ledger failure must NOT block the briefing.
260
+ let mintedSessionId = null;
254
261
  try {
255
- execSync('totem describe', {
256
- timeout: 30000,
257
- stdio: ['ignore', 'inherit', 'inherit'],
262
+ const nodePath = require('path');
263
+ const { mkdirSync, writeFileSync, appendFileSync } = require('fs');
264
+ const { randomUUID } = require('crypto');
265
+ const ledgerDir = nodePath.join(process.cwd(), '.totem', 'ledger');
266
+ mkdirSync(ledgerDir, { recursive: true });
267
+ mintedSessionId = randomUUID();
268
+ writeFileSync(nodePath.join(ledgerDir, '.session-id'), mintedSessionId, 'utf-8');
269
+ const selfAgentEntry = (process.env.TOTEM_SELF_AGENT || '')
270
+ .split(',')
271
+ .map((s) => s.trim())
272
+ .find((s) => s.length > 0);
273
+ const event = {
274
+ timestamp: new Date().toISOString(),
275
+ type: 'session_start',
276
+ activity_name: 'SessionStart',
277
+ source: 'bot',
278
+ ...(selfAgentEntry ? { agent_source: selfAgentEntry } : {}),
279
+ justification: '',
280
+ session_id: mintedSessionId,
281
+ };
282
+ appendFileSync(nodePath.join(ledgerDir, 'events.ndjson'), JSON.stringify(event) + '\\n', 'utf-8');
283
+ } catch (err) {
284
+ process.stderr.write(
285
+ '[SessionStart] session-start telemetry unavailable (non-fatal): ' +
286
+ (err instanceof Error ? err.message : String(err)) +
287
+ '\\n',
288
+ );
289
+ }
290
+
291
+ // Interactive Gemini ingests SessionStart CONTEXT only from the
292
+ // hookSpecificOutput.additionalContext envelope — plain exit-0 stdout wraps as
293
+ // systemMessage, which the interactive startup consumer never injects, so the
294
+ // briefing was absent from model context in the primary dev flow even once
295
+ // registered (mmnto-ai/totem#2613; leg-verified against @google/gemini-cli
296
+ // 0.54.4). systemMessage rides alongside the envelope for the human surfaces:
297
+ // interactive startup and /clear render it as a UI info item and -p echoes it
298
+ // to stderr — so the briefing is VISIBLE to the human on those surfaces and
299
+ // injected as context for the model (one payload, both audiences).
300
+ // The Totem CLI writes its banner and diagnostics to STDERR, so capture takes
301
+ // BOTH streams — the same seam the Claude-side template documents; a
302
+ // stdout-only capture silently drops the describe leg (mmnto-ai/totem#2613
303
+ // falsification round). A leg failure carries any partial stdout plus the
304
+ // fail-soft note; exit is ALWAYS 0 (never blocks boot).
305
+ // Per-leg 20s budgets cut the measured worst-case process exit from 60s to
306
+ // 40s against Gemini's 60s DEFAULT_HOOK_TIMEOUT (which tree-kills at expiry;
307
+ // no descendant inherits this hook's own streams).
308
+ let briefing = '';
309
+ try {
310
+ const describeRun = spawnSync('totem describe', {
311
+ shell: true,
312
+ timeout: 20000,
313
+ encoding: 'utf-8',
314
+ stdio: ['ignore', 'pipe', 'pipe'],
258
315
  });
316
+ // spawnSync sets .error (it does NOT throw) on spawn-level failure/timeout.
317
+ briefing += describeRun.stdout || '';
318
+ if (describeRun.error || describeRun.status !== 0) {
319
+ const reason = describeRun.error
320
+ ? (describeRun.error.message || String(describeRun.error))
321
+ : ((describeRun.stderr || '').trim() || 'totem describe exited ' + describeRun.status);
322
+ briefing += '[Totem] Briefing unavailable: ' + reason + '\\n';
323
+ } else {
324
+ briefing += describeRun.stderr || '';
325
+ }
259
326
  } catch (err) {
260
- process.stdout.write('[Totem] Briefing unavailable: ' + (err instanceof Error ? err.message : String(err)) + '\\n');
327
+ // Belt for a genuinely throwing spawnSync: same fail-soft note.
328
+ briefing += '[Totem] Briefing unavailable: ' + (err instanceof Error ? err.message : String(err)) + '\\n';
261
329
  }
262
330
 
331
+ // Selection-manifest block boundary (mmnto-ai/totem#2468): everything in
332
+ // \`briefing\` up to here is the describe leg — including its fail-soft note,
333
+ // which IS injected payload when it fires.
334
+ const describeBriefingEnd = briefing.length;
335
+
263
336
  // totem orient --session — live derived in-flight state, ADDITIVE to describe
264
337
  // (mmnto-ai/totem#2044 PR-3). Own try/catch; orient --session is itself boot-safe.
265
338
  try {
266
- execSync('totem orient --session', {
267
- timeout: 30000,
268
- stdio: ['ignore', 'inherit', 'inherit'],
339
+ const orientRun = spawnSync('totem orient --session', {
340
+ shell: true,
341
+ timeout: 20000,
342
+ encoding: 'utf-8',
343
+ stdio: ['ignore', 'pipe', 'pipe'],
269
344
  });
345
+ briefing += orientRun.stdout || '';
346
+ if (orientRun.error || orientRun.status !== 0) {
347
+ const orientReason = orientRun.error
348
+ ? (orientRun.error.message || String(orientRun.error))
349
+ : ((orientRun.stderr || '').trim() || 'totem orient exited ' + orientRun.status);
350
+ // Boot-safe: orient is additive to describe; a failure never blocks session
351
+ // start. The note rides the briefing (both keys) so the model and the human
352
+ // both see the orient gap — a stderr-only note is invisible to the model
353
+ // (CR round on this PR); the parent-stderr breadcrumb stays for hook
354
+ // diagnostics.
355
+ briefing += '[Totem] Orient briefing unavailable: ' + orientReason + '\\n';
356
+ process.stderr.write('[SessionStart] orient briefing unavailable (non-fatal): ' + orientReason + '\\n');
357
+ } else {
358
+ briefing += orientRun.stderr || '';
359
+ }
270
360
  } catch (err) {
271
- // Boot-safe: orient is additive to describe; a failure never blocks session start —
272
- // surface a NON-fatal breadcrumb (matches the Claude-side hook) rather than swallow.
273
- process.stderr.write('[SessionStart] orient briefing unavailable (non-fatal): ' + (err instanceof Error ? err.message : String(err)) + '\\n');
361
+ const orientMsg = err instanceof Error ? err.message : String(err);
362
+ briefing += '[Totem] Orient briefing unavailable: ' + orientMsg + '\\n';
363
+ process.stderr.write('[SessionStart] orient briefing unavailable (non-fatal): ' + orientMsg + '\\n');
274
364
  }
365
+
366
+ // ─── selection manifest (mmnto-ai/totem#2468 M1) ────────────────
367
+ // Inline append mirroring the A.3.a write above — this rendered hook runs
368
+ // standalone in consumer repos with no access to @mmnto/totem's writer. The
369
+ // row shape is BOUND to SelectionManifestRowSchema (strict): change both in
370
+ // the same PR; the template contract test parses this row with the real
371
+ // schema. A zero-byte block never becomes a candidate (nothing was injected).
372
+ try {
373
+ const nodePath = require('path');
374
+ const { appendFileSync } = require('fs');
375
+ const { createHash } = require('crypto');
376
+ const measure = (id, content, reason) => {
377
+ const bytes = Buffer.byteLength(content, 'utf-8');
378
+ return {
379
+ id,
380
+ disposition: 'selected',
381
+ reason,
382
+ bytes,
383
+ approxTokens: Math.ceil(bytes / 4),
384
+ fingerprint: createHash('sha256').update(content, 'utf-8').digest('hex').slice(0, 16),
385
+ };
386
+ };
387
+ const selfAgent = (process.env.TOTEM_SELF_AGENT || '')
388
+ .split(',')
389
+ .map((s) => s.trim())
390
+ .find((s) => s.length > 0);
391
+ const row = {
392
+ schemaVersion: 1,
393
+ timestamp: new Date().toISOString(),
394
+ emitter: 'session-start',
395
+ ...(mintedSessionId ? { session_id: mintedSessionId } : {}),
396
+ ...(selfAgent ? { agent_source: selfAgent } : {}),
397
+ // mmnto-ai/totem#2629: provenance disclosed on every row (ruled item 1).
398
+ // Self-minted row — the minting seat IS this process's env read, so the
399
+ // core conflict probe is structurally inapplicable; only the two-value
400
+ // provenance enum rides. Mirrors senseAgentAttribution's biconditional.
401
+ agent_source_provenance: selfAgent ? 'env' : 'absent',
402
+ context: { template: 'gemini-managed' },
403
+ universe: 'managed-template blocks: describe + orient --session',
404
+ costBasis: { bytes: 'utf8-length', approxTokens: 'ceil(bytes/4) approximation' },
405
+ candidates: [
406
+ measure('describe', briefing.slice(0, describeBriefingEnd), 'always-injected briefing'),
407
+ measure('orient:session-block', briefing.slice(describeBriefingEnd), 'always-injected briefing'),
408
+ ].filter((c) => c.bytes > 0),
409
+ warnings: [],
410
+ };
411
+ appendFileSync(
412
+ nodePath.join(process.cwd(), '.totem', 'ledger', 'selection-manifests.ndjson'),
413
+ JSON.stringify(row) + '\\n',
414
+ 'utf-8',
415
+ );
416
+ } catch (err) {
417
+ process.stderr.write(
418
+ '[SessionStart] selection manifest unavailable (non-fatal): ' +
419
+ (err instanceof Error ? err.message : String(err)) +
420
+ '\\n',
421
+ );
422
+ }
423
+
424
+ process.stdout.write(JSON.stringify({
425
+ systemMessage: briefing,
426
+ hookSpecificOutput: { hookEventName: 'SessionStart', additionalContext: briefing },
427
+ }) + '\\n');
275
428
  ${TOTEM_FILE_END}
276
429
  `;
277
430
  export const GEMINI_BEFORE_TOOL = `// [totem] auto-generated — Gemini CLI BeforeTool hook
@@ -443,7 +596,7 @@ function checkXrepoQualifyRefs(toolName, toolInput) {
443
596
  );
444
597
  }
445
598
 
446
- module.exports = function beforeTool(toolName, toolInput) {
599
+ function beforeTool(toolName, toolInput) {
447
600
  checkOutboxSubjectQuoting(toolName, toolInput);
448
601
  checkAutoCloseKeywords(toolName, toolInput);
449
602
  checkXrepoQualifyRefs(toolName, toolInput);
@@ -457,7 +610,50 @@ module.exports = function beforeTool(toolName, toolInput) {
457
610
  } catch (err) {
458
611
  throw new Error('[Totem Error] Shield check failed. Fix violations before pushing.\\n' + err.message);
459
612
  }
460
- };
613
+ }
614
+ module.exports = beforeTool;
615
+
616
+ // Entry point — Gemini runs this file as a COMMAND hook (\`node BeforeTool.cjs\`)
617
+ // with the hook-input JSON on stdin; without this block the file defines a
618
+ // function and exits 0 = allow, leaving every guard above inert
619
+ // (mmnto-ai/totem#2611). Exit contract (leg-verified against
620
+ // @google/gemini-cli 0.54.4): exit 0 allow · exit 1 ALLOW with warning (an
621
+ // uncaught throw exits 1 — throwing can never deny) · exit >= 2 deny ·
622
+ // structured stdout {"decision":"deny","reason"} deny. A violation emits the
623
+ // structured deny AND exits 2 so either channel suffices. Gemini reads stderr
624
+ // only when stdout is EMPTY, so the stderr copy on the deny path never enters
625
+ // the hook pipeline — it serves hand-run invocations; on the exit-1 paths the
626
+ // stderr breadcrumb IS the payload that surfaces as the warning. Input the
627
+ // guard cannot evaluate (unparseable JSON, missing tool_name) is
628
+ // allow-with-warning (exit 1): denying every call on a vendor shape change
629
+ // would brick the seat, and exiting 0 would hide the outage.
630
+ if (require.main === module) {
631
+ let raw = '';
632
+ process.stdin.setEncoding('utf-8');
633
+ process.stdin.on('data', function (chunk) { raw += chunk; });
634
+ process.stdin.on('end', function () {
635
+ let input;
636
+ try {
637
+ input = JSON.parse(raw);
638
+ } catch (err) {
639
+ process.stderr.write('[totem BeforeTool] hook input is not parseable JSON — guard did not evaluate this call: ' + (err instanceof Error ? err.message : String(err)) + '\\n');
640
+ process.exit(1);
641
+ }
642
+ if (typeof input !== 'object' || input === null || typeof input.tool_name !== 'string') {
643
+ process.stderr.write('[totem BeforeTool] hook input carries no tool_name — guard did not evaluate this call\\n');
644
+ process.exit(1);
645
+ }
646
+ try {
647
+ beforeTool(input.tool_name, input.tool_input);
648
+ } catch (err) {
649
+ const reason = err instanceof Error ? err.message : String(err);
650
+ process.stdout.write(JSON.stringify({ decision: 'deny', reason: reason }) + '\\n');
651
+ process.stderr.write(reason + '\\n');
652
+ process.exit(2);
653
+ }
654
+ process.exit(0);
655
+ });
656
+ }
461
657
  ${TOTEM_FILE_END}
462
658
  `;
463
659
  export const GEMINI_SKILL = `<!-- [totem] auto-generated — Totem Architect skill -->
@@ -758,10 +954,14 @@ const { randomUUID } = require('crypto');
758
954
  const { join } = require('path');
759
955
 
760
956
  // ─── A.3.a: mint session ID + log session_start event ──────────
957
+ // Hoisted so the selection-manifest row below (mmnto-ai/totem#2468) can carry
958
+ // the same session UUID as its join key.
959
+ let mintedSessionId = null;
761
960
  try {
762
961
  const ledgerDir = join(process.cwd(), '.totem', 'ledger');
763
962
  mkdirSync(ledgerDir, { recursive: true });
764
963
  const sessionId = randomUUID();
964
+ mintedSessionId = sessionId;
765
965
  writeFileSync(join(ledgerDir, '.session-id'), sessionId, 'utf-8');
766
966
  // Amended ADR-078 (2026-07-15): agent_source is the env-carried seat-id
767
967
  // (TOTEM_SELF_AGENT, first non-empty comma entry), never a vendor class
@@ -891,6 +1091,9 @@ try {
891
1091
  }
892
1092
 
893
1093
  // ─── totem describe briefing (existing behavior) ────────────────
1094
+ // Captured (mmnto-ai/totem#2468): the injected block is the selection-manifest
1095
+ // candidate below — the not-installed notice is a notice, not a briefing.
1096
+ let describeText = '';
894
1097
  try {
895
1098
  const cliPath = join(process.cwd(), 'node_modules', '@mmnto', 'cli', 'dist', 'index.js');
896
1099
  if (existsSync(cliPath)) {
@@ -903,7 +1106,8 @@ try {
903
1106
  }
904
1107
  // Totem CLI writes diagnostic output to stderr; route to stdout so the
905
1108
  // session-start context lands in Claude's prompt rather than user-visible noise.
906
- process.stdout.write((result.stdout || '') + (result.stderr || ''));
1109
+ describeText = (result.stdout || '') + (result.stderr || '');
1110
+ process.stdout.write(describeText);
907
1111
  } else {
908
1112
  process.stdout.write(
909
1113
  '[Totem] @mmnto/cli not installed. Run \`pnpm install\` (or your package manager equivalent) to enable session-start orientation.\\n',
@@ -923,6 +1127,7 @@ try {
923
1127
  // never replace. Its OWN try/catch so an orient failure never disturbs the describe
924
1128
  // briefing or the boot; \`orient --session\` is itself boot-safe (emits nothing when
925
1129
  // nothing is high-signal, never exits non-zero, degrades to honest "could not derive").
1130
+ let orientText = '';
926
1131
  try {
927
1132
  const orientCliPath = join(process.cwd(), 'node_modules', '@mmnto', 'cli', 'dist', 'index.js');
928
1133
  if (existsSync(orientCliPath)) {
@@ -935,7 +1140,8 @@ try {
935
1140
  if (orientResult.error) {
936
1141
  throw orientResult.error;
937
1142
  }
938
- process.stdout.write((orientResult.stdout || '') + (orientResult.stderr || ''));
1143
+ orientText = (orientResult.stdout || '') + (orientResult.stderr || '');
1144
+ process.stdout.write(orientText);
939
1145
  }
940
1146
  } catch (err) {
941
1147
  // Boot-safe: orient is additive to describe (already emitted), so a failure never
@@ -947,6 +1153,62 @@ try {
947
1153
  '\\n',
948
1154
  );
949
1155
  }
1156
+
1157
+ // ─── selection manifest (mmnto-ai/totem#2468 M1) ────────────────
1158
+ // Inline append mirroring the session_start write above — this rendered hook
1159
+ // runs standalone in consumer repos with no access to @mmnto/totem's writer.
1160
+ // The row shape is BOUND to SelectionManifestRowSchema (strict): change both
1161
+ // in the same PR; the template contract test parses this row with the real
1162
+ // schema. A zero-byte block never becomes a candidate (nothing was injected).
1163
+ try {
1164
+ const { createHash } = require('crypto');
1165
+ const measure = (id, content, reason) => {
1166
+ const bytes = Buffer.byteLength(content, 'utf-8');
1167
+ return {
1168
+ id,
1169
+ disposition: 'selected',
1170
+ reason,
1171
+ bytes,
1172
+ approxTokens: Math.ceil(bytes / 4),
1173
+ fingerprint: createHash('sha256').update(content, 'utf-8').digest('hex').slice(0, 16),
1174
+ };
1175
+ };
1176
+ const selfAgent = (process.env.TOTEM_SELF_AGENT || '')
1177
+ .split(',')
1178
+ .map((s) => s.trim())
1179
+ .find((s) => s.length > 0);
1180
+ const row = {
1181
+ schemaVersion: 1,
1182
+ timestamp: new Date().toISOString(),
1183
+ emitter: 'session-start',
1184
+ ...(mintedSessionId ? { session_id: mintedSessionId } : {}),
1185
+ ...(selfAgent ? { agent_source: selfAgent } : {}),
1186
+ // mmnto-ai/totem#2629: provenance disclosed on every row (ruled item 1).
1187
+ // Self-minted row — the minting seat IS this process's env read, so the
1188
+ // core conflict probe is structurally inapplicable; only the two-value
1189
+ // provenance enum rides. Mirrors senseAgentAttribution's biconditional.
1190
+ agent_source_provenance: selfAgent ? 'env' : 'absent',
1191
+ context: { template: 'claude-managed' },
1192
+ universe: 'managed-template blocks: describe + orient --session',
1193
+ costBasis: { bytes: 'utf8-length', approxTokens: 'ceil(bytes/4) approximation' },
1194
+ candidates: [
1195
+ measure('describe', describeText, 'always-injected briefing'),
1196
+ measure('orient:session-block', orientText, 'always-injected briefing'),
1197
+ ].filter((c) => c.bytes > 0),
1198
+ warnings: [],
1199
+ };
1200
+ appendFileSync(
1201
+ join(process.cwd(), '.totem', 'ledger', 'selection-manifests.ndjson'),
1202
+ JSON.stringify(row) + '\\n',
1203
+ 'utf-8',
1204
+ );
1205
+ } catch (err) {
1206
+ process.stderr.write(
1207
+ '[SessionStart] selection manifest unavailable (non-fatal): ' +
1208
+ (err instanceof Error ? err.message : String(err)) +
1209
+ '\\n',
1210
+ );
1211
+ }
950
1212
  ${TOTEM_FILE_END}
951
1213
  `;
952
1214
  export const CLAUDE_SESSION_START_ENTRY = {
@@ -1543,6 +1805,7 @@ Auto-reply on the PR acknowledging the deferral:
1543
1805
 
1544
1806
  - **CodeRabbit items:** Reply inline to each thread with "Tracked in #NNN" or "Deferred — not blocking for this PR."
1545
1807
  - **GCA items:** DO NOT reply inline. Batch ALL GCA responses into ONE issue comment: \`@gemini-code-assist\` followed by a numbered list addressing each finding. Use \`gh pr comment $ARGUMENTS --body-file -\` and pipe the comment body via stdin.
1808
+ - **ghcq items:** \`github-code-quality[bot]\` has no known @-listener (attested: no in-org tag attempt has drawn a response and none is documented — mmnto-ai/totem#2626) — do not tag it; treat its dispositions as audit-trail-only.
1546
1809
  - **SARIF items:** No reply needed (our own tool).
1547
1810
 
1548
1811
  ### \`nit <numbers | category>\`
@@ -1577,7 +1840,7 @@ totem review --covariate
1577
1840
 
1578
1841
  It resolves the current branch lineage exactly as the review fan does, loads the LATEST verdict artifact for that lineage (\`.totem/artifacts/verdicts/\`), and prints the canonical \`local-lane:\` line from the single core-owned renderer — never trust a pasted or hand-copied value. If it reports no verdict for the current lineage, there is no line to carry (note that in the body and continue).
1579
1842
 
1580
- 2. **Assemble the single body.** One comment: @-tag EVERY bot addressed in the round — exactly ONE tag each (e.g. \`@gemini-code-assist\`, \`@coderabbitai\`, \`@greptileai\`) so each bot registers the disposition, and tags must be present when the comment is POSTED, never edited in (GCA's listener fires on comment-created only). One notification per bot per round: a bot with nothing addressed gets no tag, and a bot already @-tagged in this round's batch comment (the GCA defer/nit batch above) is NOT re-tagged here. Never combine a tag with ANY bot's review trigger — triggers are standalone comments, one trigger and no prose (a trigger embedded in a content-rich comment chat-routes the bot). Then the per-item dispositions (fixed / deferred / nit / extracted) followed by the non-empty \`local-lane:\` line from step 1, verbatim. The local \`review-loop\` holds this line but never posts it, so \`/review-reply\` is the SOLE path that carries it to GitHub.
1843
+ 2. **Assemble the single body.** One comment: @-tag EVERY bot addressed in the round — exactly ONE tag each (e.g. \`@gemini-code-assist\`, \`@coderabbitai\`, \`@greptileai\`) so each bot registers the disposition, and tags must be present when the comment is POSTED, never edited in (GCA's listener fires on comment-created only). One notification per bot per round: a bot with nothing addressed gets no tag, and a bot already @-tagged in this round's batch comment (the GCA defer/nit batch above) is NOT re-tagged here. ghcq (\`github-code-quality[bot]\`) has no known listener — it is never tagged; its items are dispositioned in the body for the audit trail only (mmnto-ai/totem#2626). Never combine a tag with ANY bot's review trigger — triggers are standalone comments, one trigger and no prose (a trigger embedded in a content-rich comment chat-routes the bot). Then the per-item dispositions (fixed / deferred / nit / extracted) followed by the non-empty \`local-lane:\` line from step 1, verbatim. The local \`review-loop\` holds this line but never posts it, so \`/review-reply\` is the SOLE path that carries it to GitHub.
1581
1844
 
1582
1845
  3. **Post on an explicit go.** Show the assembled body and wait for the operator; on their go, post the ONE comment with \`gh pr comment $ARGUMENTS --body-file -\` (pipe the body via stdin). Never mutate the PR autonomously.
1583
1846
 
@@ -1 +1 @@
1
- {"version":3,"file":"init-templates.js","sourceRoot":"","sources":["../../src/commands/init-templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-templates.js","sourceRoot":"","sources":["../../src/commands/init-templates.ts"],"names":[],"mappings":"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"}
@@ -1705,13 +1705,31 @@ describe('GEMINI_SESSION_START template', () => {
1705
1705
  it('does NOT call `totem status` (the prior drifted shape)', () => {
1706
1706
  expect(GEMINI_SESSION_START).not.toContain("'totem status'");
1707
1707
  });
1708
- it('uses a 30-second timeout matching the Claude-side hook contract', () => {
1709
- expect(GEMINI_SESSION_START).toContain('timeout: 30000');
1710
- });
1711
- it('routes diagnostic stdio so the banner lands in the session prompt', () => {
1712
- // Gemini SessionStart hooks inherit stdio; the third entry must be
1713
- // 'inherit' for the orientation output to reach the agent.
1714
- expect(GEMINI_SESSION_START).toContain("stdio: ['ignore', 'inherit', 'inherit']");
1708
+ it('uses 20-second per-leg timeouts measured worst-case exit drops 60s to 40s', () => {
1709
+ // Two sequential legs at the old 30s each could consume Gemini's entire
1710
+ // 60s DEFAULT_HOOK_TIMEOUT on one pathological hang. Post-fix no
1711
+ // descendant inherits the hook's own streams, so the inner budgets are
1712
+ // honored even under a hung grandchild, and the vendor tree-kills at its
1713
+ // own 60s expiry regardless (mmnto-ai/totem#2613 falsification rounds).
1714
+ expect(GEMINI_SESSION_START).toContain('timeout: 20000');
1715
+ expect(GEMINI_SESSION_START).not.toContain('timeout: 30000');
1716
+ });
1717
+ it('captures BOTH streams of the briefing legs and emits envelope + systemMessage', () => {
1718
+ // Interactive Gemini ingests SessionStart output ONLY from
1719
+ // hookSpecificOutput.additionalContext — an 'inherit' stdout wraps as
1720
+ // systemMessage, which the interactive startup consumer never reads
1721
+ // (mmnto-ai/totem#2613; the pre-fix pin here asserted exactly that
1722
+ // dropped channel). The Totem CLI writes its banner to STDERR, so capture
1723
+ // must take both streams — a stdout-only capture silently drops the
1724
+ // describe leg. systemMessage rides alongside for the /clear and -p
1725
+ // surfaces, which read only that key. The runtime contract is pinned
1726
+ // end-to-end by gemini-sessionstart-contract.test.ts; this guards
1727
+ // template drift.
1728
+ expect(GEMINI_SESSION_START).toContain("stdio: ['ignore', 'pipe', 'pipe']");
1729
+ expect(GEMINI_SESSION_START).not.toContain("stdio: ['ignore', 'inherit', 'inherit']");
1730
+ expect(GEMINI_SESSION_START).toContain("hookEventName: 'SessionStart'");
1731
+ expect(GEMINI_SESSION_START).toContain('additionalContext: briefing');
1732
+ expect(GEMINI_SESSION_START).toContain('systemMessage: briefing');
1715
1733
  });
1716
1734
  it('emits a generic fallback breadcrumb when describe fails', () => {
1717
1735
  // No strategy-repo-specific pointers leak; matches the Claude-side