@mmnto/cli 1.121.0 → 1.122.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 (43) hide show
  1. package/dist/artifact-vocabulary.d.ts +23 -0
  2. package/dist/artifact-vocabulary.d.ts.map +1 -0
  3. package/dist/artifact-vocabulary.js +23 -0
  4. package/dist/artifact-vocabulary.js.map +1 -0
  5. package/dist/commands/config-drift.test.js +16 -0
  6. package/dist/commands/config-drift.test.js.map +1 -1
  7. package/dist/commands/init-templates.d.ts +2 -2
  8. package/dist/commands/init-templates.d.ts.map +1 -1
  9. package/dist/commands/init-templates.js +2 -2
  10. package/dist/commands/install-hooks.d.ts.map +1 -1
  11. package/dist/commands/install-hooks.js +183 -17
  12. package/dist/commands/install-hooks.js.map +1 -1
  13. package/dist/commands/install-hooks.test.js +559 -18
  14. package/dist/commands/install-hooks.test.js.map +1 -1
  15. package/dist/commands/spec-cli-wiring.test.d.ts +19 -0
  16. package/dist/commands/spec-cli-wiring.test.d.ts.map +1 -0
  17. package/dist/commands/spec-cli-wiring.test.js +90 -0
  18. package/dist/commands/spec-cli-wiring.test.js.map +1 -0
  19. package/dist/commands/spec-templates.d.ts +18 -0
  20. package/dist/commands/spec-templates.d.ts.map +1 -1
  21. package/dist/commands/spec-templates.js +21 -0
  22. package/dist/commands/spec-templates.js.map +1 -1
  23. package/dist/commands/spec.d.ts +168 -1
  24. package/dist/commands/spec.d.ts.map +1 -1
  25. package/dist/commands/spec.js +448 -7
  26. package/dist/commands/spec.js.map +1 -1
  27. package/dist/commands/spec.test.js +903 -20
  28. package/dist/commands/spec.test.js.map +1 -1
  29. package/dist/index.js +7 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/services/run-artifacts.d.ts +12 -1
  32. package/dist/services/run-artifacts.d.ts.map +1 -1
  33. package/dist/services/run-artifacts.js +48 -3
  34. package/dist/services/run-artifacts.js.map +1 -1
  35. package/dist/services/run-artifacts.test.js +97 -1
  36. package/dist/services/run-artifacts.test.js.map +1 -1
  37. package/dist/utils.d.ts +22 -3
  38. package/dist/utils.d.ts.map +1 -1
  39. package/dist/utils.js +4 -0
  40. package/dist/utils.js.map +1 -1
  41. package/dist/utils.test.js +65 -1
  42. package/dist/utils.test.js.map +1 -1
  43. package/package.json +2 -2
@@ -1,8 +1,24 @@
1
+ import * as crypto from 'node:crypto';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { GROUNDING_ANCHOR_FREE_TEXT, GROUNDING_ANCHOR_ISSUE, GROUNDING_ANCHOR_MIXED, GROUNDING_ANCHOR_RECORD, PROMPT_SOURCE_BUILTIN, PROMPT_SOURCE_OVERRIDE, } from '../artifact-vocabulary.js';
1
5
  import { SYSTEM_PROMPT } from './spec-templates.js';
2
6
  // ─── Constants ──────────────────────────────────────────
3
7
  const TAG = 'Spec';
4
8
  const QUERY_BODY_TRUNCATE = 500;
5
9
  const MAX_INPUTS = 5;
10
+ /** Digest prefix rendered into the prompt's RECORD banner — identity, not the whole digest. */
11
+ const RECORD_SHA_PROMPT_PREFIX = 12;
12
+ /** Separator between several topics (and between the issue half and the topic half of a `mixed` ref). */
13
+ const ANCHOR_TOPIC_JOIN = ' | ';
14
+ /** Separator between several issue refs. */
15
+ const ANCHOR_ISSUE_JOIN = ', ';
16
+ /** Decimal places every relevance and floor is disclosed at (the MCP guard's shape). */
17
+ const RELEVANCE_DECIMALS = 3;
18
+ /** Where the floor comes from — named in every refusal (B1: the config-vs-default bit is NOT derivable after `TotemConfigSchema.parse`). */
19
+ const FLOOR_PLACE = 'searchRelevanceFloor in totem.config.ts (schema default 0.25 when unset)';
20
+ /** The two cures, named in every refusal and in the gate's BLOCKED line. */
21
+ const ANCHOR_CURES = "run 'totem spec <issue>' or 'totem spec --from <record>'";
6
22
  export const MAX_LESSONS = 10;
7
23
  export const MAX_LESSON_CHARS = 8_000;
8
24
  const SPEC_SEARCH_POOL = 20;
@@ -48,6 +64,24 @@ function buildSearchQuery(issue) {
48
64
  const bodySnippet = issue.body.slice(0, QUERY_BODY_TRUNCATE);
49
65
  return `${issue.title} ${labels} ${bodySnippet}`.trim();
50
66
  }
67
+ /** Text of the first markdown heading in `body`, or `''` when it carries none. */
68
+ function firstHeadingText(body) {
69
+ for (const line of body.split('\n')) {
70
+ const match = line.match(/^#{1,6}[ \t]+(.+)$/);
71
+ if (match)
72
+ return match[1].trim();
73
+ }
74
+ return '';
75
+ }
76
+ /**
77
+ * Retrieval query for a bound record (mmnto-ai/totem#2700) — the same shape
78
+ * {@link buildSearchQuery} gives an issue: the record's own title (its first
79
+ * markdown heading) plus the head of its body, so a record retrieves the same
80
+ * way an issue does rather than through a hand-picked slug.
81
+ */
82
+ export function buildRecordSearchQuery(record) {
83
+ return `${firstHeadingText(record.body)} ${record.body.slice(0, QUERY_BODY_TRUNCATE)}`.trim();
84
+ }
51
85
  const TEST_KEYWORD_RE = /\b(test(?:s|ing)?|verif(?:y|ies|ication)|example(?:s)?|fixture(?:s)?|hits|misses|rule-?tester)\b/i;
52
86
  const TEST_EXPANSION = ' test testing infrastructure fixture verification testRule rule-tester';
53
87
  /**
@@ -62,7 +96,7 @@ export function expandSpecQuery(query) {
62
96
  export async function assemblePrompt(inputs, context, systemPrompt) {
63
97
  const { formatLessonSection, formatResults, wrapXml } = await import('../utils.js');
64
98
  const sections = [systemPrompt];
65
- for (const { issue, freeText } of inputs) {
99
+ for (const { issue, freeText, record } of inputs) {
66
100
  if (issue) {
67
101
  const issueLabels = issue.labels.join(', ');
68
102
  sections.push(`\n=== ISSUE #${issue.number}: ${issue.title} ===`);
@@ -74,6 +108,13 @@ export async function assemblePrompt(inputs, context, systemPrompt) {
74
108
  sections.push(wrapXml('issue_body', issue.body));
75
109
  }
76
110
  }
111
+ else if (record) {
112
+ // The bound record enters the prompt VERBATIM, banner-identified by the
113
+ // path the anchor records and the head of the digest the anchor binds —
114
+ // so the prompt and `grounding.anchor` name the same bytes.
115
+ sections.push(`\n=== RECORD ${record.path} (sha256 ${record.sha256.slice(0, RECORD_SHA_PROMPT_PREFIX)}) ===`);
116
+ sections.push(wrapXml('record_body', record.body));
117
+ }
77
118
  else if (freeText) {
78
119
  sections.push('\n=== TOPIC ===');
79
120
  sections.push(wrapXml('topic_text', freeText));
@@ -113,6 +154,353 @@ export function validateOutputOptions(options, TotemConfigErrorCtor) {
113
154
  throw new TotemConfigErrorCtor('--stdout and --out cannot be used together.', 'Pick one: --out <path> writes to a specific file; --stdout writes to standard output.', 'CONFIG_INVALID');
114
155
  }
115
156
  }
157
+ // ─── Invocation validation (mmnto-ai/totem#2700) ────────
158
+ //
159
+ // Every check below runs BEFORE the config is resolved, before the store
160
+ // connects and before any LLM call — a user error surfaces with no API cost
161
+ // and no artifact written.
162
+ /**
163
+ * Refuse the two invocation shapes that carry no single grounded subject:
164
+ * nothing at all (commander no longer refuses it — `spec [inputs...]` is
165
+ * optional so `--from` is reachable, mmnto-ai/totem#2700 B2), and a record
166
+ * bound alongside positional inputs (two subjects, one anchor).
167
+ */
168
+ export function validateSpecInvocation(inputs, options, TotemConfigErrorCtor) {
169
+ const hasRecord = options.from !== undefined;
170
+ if (hasRecord && inputs.length > 0) {
171
+ throw new TotemConfigErrorCtor(`--from <record> cannot be combined with positional inputs (${inputs.join(', ')}).`, 'Pass one or the other: issue/topic inputs, or --from <record>.', 'CONFIG_INVALID');
172
+ }
173
+ if (!hasRecord && inputs.length === 0) {
174
+ throw new TotemConfigErrorCtor('No inputs. `totem spec` needs at least one issue/topic, or --from <record>.', 'Usage: totem spec [inputs...] [--from <record>] — e.g. `totem spec 2700`, `totem spec "cache invalidation"`, or `totem spec --from .totem/specs/2700.md`.', 'CONFIG_INVALID');
175
+ }
176
+ }
177
+ /**
178
+ * The byte-order mark's code point. Written numerically because an authored
179
+ * `\u` escape lands in this file as a RAW control byte through some editing
180
+ * paths (mmnto-ai/totem#2692).
181
+ */
182
+ const UTF8_BOM_CODE_POINT = 0xfeff;
183
+ /** A path in the one spelling every containment predicate and the hook agree on. */
184
+ function toForwardSlashes(target) {
185
+ return target.split(path.sep).join('/');
186
+ }
187
+ /**
188
+ * Whether a root-relative record path ESCAPES the repository — the containment
189
+ * gate on `grounding.anchor.ref` (mmnto-ai/totem#2700).
190
+ *
191
+ * The published ref is resolved by the strict pre-commit reader from the
192
+ * WORKTREE TOP, so a path that leaves the root names a file the gate would
193
+ * read from outside the repo: `--from ../sibling/x.md` binds `../sibling/x.md`,
194
+ * and a record on another drive binds an absolute path (`path.relative` returns
195
+ * one when the two paths share no root). The hook carries the same refusal —
196
+ * the artifact is hand-editable, so neither half may trust the other — but a
197
+ * ref that escapes must never be MINTED either.
198
+ *
199
+ * Both `path` flavors are consulted because the caller normalizes to forward
200
+ * slashes before asking: `D:/x.md` is not a repo-relative path on ANY platform,
201
+ * so the answer must not depend on which one is running.
202
+ *
203
+ * Containment is decided by NORMALIZATION, not by inspecting the first segment:
204
+ * `a/../../x.md` escapes the root even though its first segment does not say
205
+ * so, while a mid-path `..` that stays inside (`a/../b.md`) is contained and
206
+ * legal. `path.posix.normalize` is the cwd-free equivalent of the reader's
207
+ * `resolve` + `relative` containment test, so both sides answer the same on the
208
+ * same input — the predicate is compared by path SEGMENT throughout, which is
209
+ * why a file named `..notes.md` inside the root stays legal.
210
+ *
211
+ * {@link loadSpecRecord} asks this TWICE: once on the lexical repo-relative
212
+ * spelling that becomes the ref, and once on the relative path between the two
213
+ * REALPATHS, so an in-repo symlink whose target lives outside the tree is
214
+ * refused as well. Normalization alone cannot see through a link.
215
+ */
216
+ export function isRecordPathOutsideRoot(relativePath) {
217
+ if (path.win32.isAbsolute(relativePath) || path.posix.isAbsolute(relativePath))
218
+ return true;
219
+ const normalized = path.posix.normalize(relativePath);
220
+ return normalized === '..' || normalized.startsWith('../');
221
+ }
222
+ /**
223
+ * Read and bind the `--from` record. ONE `readFileSync` produces both the
224
+ * digest and the prompt bytes, so `grounding.anchor.sha256` provably names
225
+ * what the model was shown. Every rejection names the path.
226
+ *
227
+ * Order is load-bearing. Existence is decided FIRST, so a path that names
228
+ * nothing keeps the "record not found" cure. CONTAINMENT is decided second —
229
+ * before any `statSync` or `readFileSync` — so a record outside the repository
230
+ * is refused as uncontained rather than by whatever the read happens to say
231
+ * about it (a directory outside the root must not surface as "not a file").
232
+ * Containment is judged twice: LEXICALLY on the spelling that becomes the
233
+ * published ref, and again on the REALPATHS of the record and the root, so an
234
+ * in-repo symlink pointing out of the tree cannot bind a file the gate would
235
+ * read from outside the worktree. `record.path` stays the LEXICAL
236
+ * repo-relative path of the file as given — the hook resolves links on its own
237
+ * side, and rewriting the ref to a link's target would publish a path the
238
+ * operator never wrote.
239
+ */
240
+ export function loadSpecRecord(fromPath, cwd, deps, TotemConfigErrorCtor) {
241
+ const absolutePath = path.resolve(cwd, fromPath);
242
+ if (!fs.existsSync(absolutePath)) {
243
+ throw new TotemConfigErrorCtor(`--from record not found: ${absolutePath}`, 'Point --from at an existing design record (a markdown file you wrote).', 'CONFIG_INVALID');
244
+ }
245
+ // Repo-relative with forward slashes: the strict pre-commit reader resolves
246
+ // this ref from the worktree top, which is where git runs hooks.
247
+ const root = deps.resolveGitRoot(cwd) ?? cwd;
248
+ const relativePath = toForwardSlashes(path.relative(root, absolutePath));
249
+ // The realpath pair: `absolutePath` exists (checked above) and `root` is the
250
+ // git root or the cwd the process is running in. A realpath that fails on
251
+ // either is a real fault (a permission change, a vanished volume), and
252
+ // swallowing it would silently downgrade containment to the lexical half it
253
+ // exists to reinforce — so these calls run UNGUARDED, as `isSameFile` does.
254
+ const realAbs = fs.realpathSync.native(absolutePath);
255
+ const realRoot = fs.realpathSync.native(root);
256
+ const resolvedRelativePath = toForwardSlashes(path.relative(realRoot, realAbs));
257
+ if (isRecordPathOutsideRoot(relativePath) || isRecordPathOutsideRoot(resolvedRelativePath)) {
258
+ const resolved = path.relative(absolutePath, realAbs).length === 0 ? '' : ` (resolves to ${realAbs})`;
259
+ throw new TotemConfigErrorCtor(`--from record is outside the repository: ${absolutePath}${resolved} (git root ${root}).`, 'Point --from at a record inside this repo — the pre-commit gate resolves the bound ref from the worktree top.', 'CONFIG_INVALID');
260
+ }
261
+ let stats;
262
+ try {
263
+ stats = fs.statSync(absolutePath);
264
+ }
265
+ catch (err) {
266
+ throw new TotemConfigErrorCtor(`--from record is unreadable: ${absolutePath}`, 'Check the file permissions and retry.', 'CONFIG_INVALID', err);
267
+ }
268
+ if (!stats.isFile()) {
269
+ throw new TotemConfigErrorCtor(`--from record is not a file: ${absolutePath}`, 'Point --from at the record file itself, not a directory.', 'CONFIG_INVALID');
270
+ }
271
+ let buffer;
272
+ try {
273
+ buffer = fs.readFileSync(absolutePath);
274
+ }
275
+ catch (err) {
276
+ throw new TotemConfigErrorCtor(`--from record is unreadable: ${absolutePath}`, 'Check the file permissions and retry.', 'CONFIG_INVALID', err);
277
+ }
278
+ // A record saved by a BOM-writing editor decodes with U+FEFF in front of its
279
+ // first heading — invisible, but enough to make the first line stop matching
280
+ // a heading, so the retrieval query would open with the mark and the mark
281
+ // would ride into the prompt's `record_body`. One leading mark is stripped
282
+ // from the DECODED text only; the digest below is taken over the RAW bytes,
283
+ // BOM included, because the pre-commit reader hashes the file's raw bytes —
284
+ // stripping before the hash would make every bound BOM record read as
285
+ // "revised since binding" on the very first commit.
286
+ const decoded = buffer.toString('utf-8');
287
+ const body = decoded.charCodeAt(0) === UTF8_BOM_CODE_POINT ? decoded.slice(1) : decoded;
288
+ if (body.trim().length === 0) {
289
+ throw new TotemConfigErrorCtor(`--from record is empty: ${absolutePath}`, 'Write the record before binding it — an empty record grounds nothing.', 'CONFIG_INVALID');
290
+ }
291
+ const sha256 = crypto.createHash('sha256').update(buffer).digest('hex');
292
+ return { record: { path: relativePath, sha256, body }, absolutePath };
293
+ }
294
+ /**
295
+ * Whether two paths are the same FILE, not merely the same spelling.
296
+ *
297
+ * Three tests, cheapest first: the resolved spellings (which is all a
298
+ * not-yet-created `--out` has), the two paths' real targets (a SYMLINK to the
299
+ * record resolves to the record), and the filesystem's own identity —
300
+ * `(dev, ino)` — which is the only thing that catches a HARDLINK, whose two
301
+ * names are equally real and share no path relationship at all.
302
+ *
303
+ * Only the spelling test runs when either path is absent — `--out` usually does
304
+ * not exist yet, and a path that names nothing cannot alias the record. Once
305
+ * both exist the `fs` calls run UNGUARDED: a realpath or stat that fails on a
306
+ * file we just saw is a real fault (a permission change, a vanished volume),
307
+ * and swallowing it would silently downgrade this check to the spelling
308
+ * comparison it exists to replace.
309
+ */
310
+ function isSameFile(a, b) {
311
+ if (path.relative(a, b).length === 0)
312
+ return true;
313
+ if (!fs.existsSync(a) || !fs.existsSync(b))
314
+ return false;
315
+ const realA = fs.realpathSync.native(a);
316
+ const realB = fs.realpathSync.native(b);
317
+ if (path.relative(realA, realB).length === 0)
318
+ return true;
319
+ const statA = fs.statSync(realA);
320
+ const statB = fs.statSync(realB);
321
+ return statA.dev === statB.dev && statA.ino === statB.ino;
322
+ }
323
+ /**
324
+ * `--out` may never resolve to the bound record: the tool BINDS a hand-authored
325
+ * record, it never drafts over it. Identity is decided by {@link isSameFile},
326
+ * so a symlink or a hardlink pointed at the record is refused with the same
327
+ * words a literal path collision gets — a spelling comparison alone would let
328
+ * either one through and clobber the record.
329
+ */
330
+ export function assertOutDoesNotOverwriteRecord(out, recordAbsolutePath, cwd, TotemConfigErrorCtor) {
331
+ if (out === undefined)
332
+ return;
333
+ if (!isSameFile(path.resolve(cwd, out), recordAbsolutePath))
334
+ return;
335
+ throw new TotemConfigErrorCtor(`--out resolves to the --from record (${recordAbsolutePath}) — totem spec never drafts over the record.`, 'Send the draft elsewhere: --out <another path>, or --stdout.', 'CONFIG_INVALID');
336
+ }
337
+ // ─── Anchor + floor (mmnto-ai/totem#2700) ───────────────
338
+ /** Highest C0 control code unit; everything at or below it is collapsed in an anchor ref. */
339
+ const ANCHOR_REF_C0_MAX = 0x1f;
340
+ /** DEL — first code unit of the DEL/C1 band the anchor ref collapses. */
341
+ const ANCHOR_REF_C1_MIN = 0x7f;
342
+ /** Last C1 control code unit (0x9f); U+0085 NEL sits inside this band. */
343
+ const ANCHOR_REF_C1_MAX = 0x9f;
344
+ /** What a collapsed control character is rendered as — the same substitute the hook's reader uses. */
345
+ const ANCHOR_REF_SUBSTITUTE = '?';
346
+ /**
347
+ * Collapse control characters to `?` in an anchor `ref` built out of raw argv
348
+ * (mmnto-ai/totem#2700).
349
+ *
350
+ * A topic and a qualified issue ref are the anchor refs the CLI takes VERBATIM
351
+ * from the command line, so they are the ones that can carry a tab or a newline
352
+ * the user typed. `GroundingAnchorSchema` refuses such a ref outright —
353
+ * correctly, since the pre-commit hook echoes it — but that refusal fires
354
+ * inside `saveRunArtifact`, under `runOrchestrator`'s warn-and-continue catch:
355
+ * the draft would survive and only the ARTIFACT would be lost, silently, for a
356
+ * ref the CLI itself produced. Collapsing at the mint site keeps the artifact
357
+ * writable and the echo safe, and the substitution is the same one the reader
358
+ * applies defensively to what it reads back.
359
+ *
360
+ * The issue-URL match is NOT end-anchored (`.../issues/(\d+)` with trailing
361
+ * text allowed), so an argument such as `https://host/o/r/issues/1<newline>x`
362
+ * resolves to issue 1 and carries the newline into the typed ref — the same
363
+ * hazard the topic arm has, reached through the issue arm.
364
+ *
365
+ * A RECORD ref is never collapsed: the hook RESOLVES it, so a rewritten record
366
+ * path would name a file that is not the bound record. It stays byte-exact and
367
+ * is contained by {@link loadSpecRecord} instead.
368
+ */
369
+ function sanitizeRefText(topic) {
370
+ let out = '';
371
+ for (const character of topic) {
372
+ const code = character.codePointAt(0) ?? 0;
373
+ const control = code <= ANCHOR_REF_C0_MAX || (code >= ANCHOR_REF_C1_MIN && code <= ANCHOR_REF_C1_MAX);
374
+ out += control ? ANCHOR_REF_SUBSTITUTE : character;
375
+ }
376
+ return out;
377
+ }
378
+ /**
379
+ * The anchor's `ref` for one issue arm: the input as typed, `#<n>` for a bare
380
+ * number. The typed spelling goes through {@link sanitizeRefText} — it comes
381
+ * from argv unfiltered, and the URL match that admitted it is not end-anchored.
382
+ */
383
+ function issueAnchorRef(input) {
384
+ const issue = input.issue;
385
+ if (!issue)
386
+ return '';
387
+ const typed = input.issueRef;
388
+ if (typed !== undefined && !/^\d+$/.test(typed))
389
+ return sanitizeRefText(typed);
390
+ return `#${issue.number}`;
391
+ }
392
+ /**
393
+ * Classify what the run is ANCHORED on (mmnto-ai/totem#2700). A record wins
394
+ * outright (it is the only kind carrying bytes); otherwise the kind is
395
+ * `issue` when every input resolved to an issue, `free-text` when every input
396
+ * is a topic, and the honest `mixed` when both are present — `mixed` proceeds
397
+ * (an issue IS grounding) but is not gate evidence, because its free-text half
398
+ * is the confabulation surface.
399
+ *
400
+ * The caller guarantees at least one parsed input ({@link
401
+ * validateSpecInvocation}); the schema's non-empty `ref` refine is the
402
+ * backstop if that ever stops holding. Topic text and a typed issue ref both
403
+ * pass through {@link sanitizeRefText} on the way into the ref, so a control
404
+ * character the user typed cannot cost the run its artifact.
405
+ */
406
+ export function resolveGroundingAnchor(parsed) {
407
+ const bound = parsed.find((input) => input.record !== null)?.record;
408
+ if (bound) {
409
+ return { kind: GROUNDING_ANCHOR_RECORD, ref: bound.path, sha256: bound.sha256 };
410
+ }
411
+ const issueRefs = parsed.filter((input) => input.issue !== null).map(issueAnchorRef);
412
+ const topics = parsed
413
+ .filter((input) => input.issue === null && input.freeText !== null)
414
+ .map((input) => sanitizeRefText(input.freeText));
415
+ if (topics.length === 0) {
416
+ return { kind: GROUNDING_ANCHOR_ISSUE, ref: issueRefs.join(ANCHOR_ISSUE_JOIN) };
417
+ }
418
+ if (issueRefs.length === 0) {
419
+ return { kind: GROUNDING_ANCHOR_FREE_TEXT, ref: topics.join(ANCHOR_TOPIC_JOIN) };
420
+ }
421
+ return {
422
+ kind: GROUNDING_ANCHOR_MIXED,
423
+ ref: `${issueRefs.join(ANCHOR_ISSUE_JOIN)}${ANCHOR_TOPIC_JOIN}${topics.join(ANCHOR_TOPIC_JOIN)}`,
424
+ };
425
+ }
426
+ /**
427
+ * Judge the retrieval against the relevance floor, over ALL items across the
428
+ * four partitions (mmnto-ai/totem#2700). Mirrors the MCP tool's semantics
429
+ * (`packages/mcp/src/tools/search-knowledge.ts`): the floor fires only when a
430
+ * real relevance signal exists, and judges only the hits that carry one —
431
+ * keyword-only hits have no comparable relevance and are floor-EXEMPT, so a
432
+ * mixed batch is never withheld because its vector-leg siblings scored weak.
433
+ *
434
+ * Zero items is this command's OWN rule, not an MCP mirror: nothing retrieved
435
+ * means nothing grounds the run, so it refuses regardless of any floor.
436
+ */
437
+ export function evaluateGroundingFloor(context, floor) {
438
+ const all = [...context.specs, ...context.sessions, ...context.code, ...context.lessons];
439
+ if (all.length === 0) {
440
+ return { refuse: true, hits: 0, bestRelevance: null, withheld: [], floorExempt: 0 };
441
+ }
442
+ const signal = [];
443
+ let floorExempt = 0;
444
+ let bestRelevance = null;
445
+ for (const hit of all) {
446
+ const relevance = hit.relevance;
447
+ // Finite or it is not a signal. The core bundle builder DROPS a non-finite
448
+ // relevance from the item it writes, so a NaN/Infinity hit reaches the
449
+ // artifact with no relevance at all — exactly an FTS-only hit's shape.
450
+ // Counting it as signal here disagreed with that: it made `floorExempt`
451
+ // zero and let a NaN be disclosed as a withheld `relevance NaN` candidate
452
+ // beside a genuinely weak sibling.
453
+ if (typeof relevance !== 'number' || !Number.isFinite(relevance)) {
454
+ floorExempt += 1;
455
+ continue;
456
+ }
457
+ signal.push({
458
+ filePath: hit.filePath,
459
+ ...(hit.sourceRepo !== undefined ? { sourceRepo: hit.sourceRepo } : {}),
460
+ relevance,
461
+ });
462
+ if (bestRelevance === null || relevance > bestRelevance)
463
+ bestRelevance = relevance;
464
+ }
465
+ const refuse = signal.length > 0 && bestRelevance !== null && bestRelevance < floor && floorExempt === 0;
466
+ return {
467
+ refuse,
468
+ hits: all.length,
469
+ bestRelevance,
470
+ withheld: refuse ? signal : [],
471
+ floorExempt,
472
+ };
473
+ }
474
+ /**
475
+ * The refusal's text: the topic(s) refused, the measurement (`0 hits` or the
476
+ * best relevance), the floor's VALUE and its PLACE, and every withheld
477
+ * candidate as `path — relevance` (linked hits prefixed with their store).
478
+ * Exclusion is disclosed, never silently dropped.
479
+ */
480
+ export function formatGroundingRefusal(topics, verdict, floor) {
481
+ const lines = [`Refusing to draft an unanchored spec for topic(s): ${topics}.`];
482
+ if (verdict.hits === 0) {
483
+ lines.push('Retrieval returned 0 hits — nothing in the index grounds this run.');
484
+ }
485
+ else {
486
+ const best = verdict.bestRelevance ?? 0;
487
+ lines.push(`Retrieval returned ${verdict.hits} hits, but best relevance ${best.toFixed(RELEVANCE_DECIMALS)} is below the floor.`);
488
+ }
489
+ lines.push(`floor ${floor.toFixed(RELEVANCE_DECIMALS)} — ${FLOOR_PLACE}`);
490
+ if (verdict.withheld.length > 0) {
491
+ lines.push('Withheld candidates (path + relevance only, no content):');
492
+ for (const [index, candidate] of verdict.withheld.entries()) {
493
+ const label = candidate.sourceRepo
494
+ ? `[${candidate.sourceRepo}] ${candidate.filePath}`
495
+ : candidate.filePath;
496
+ lines.push(`${index + 1}. ${label} — relevance ${candidate.relevance.toFixed(RELEVANCE_DECIMALS)}`);
497
+ }
498
+ }
499
+ return {
500
+ message: lines.join('\n'),
501
+ recoveryHint: `To anchor the run, ${ANCHOR_CURES}. To inspect the retrieval without drafting, run 'totem spec --raw <topic>'.`,
502
+ };
503
+ }
116
504
  /**
117
505
  * Sanitize a free-form topic string for use as a filename stem. Replaces any
118
506
  * character outside `[a-zA-Z0-9_-]` with a single dash, collapses runs, and
@@ -131,6 +519,11 @@ export function resolveDefaultSpecPath(parsedInputs, cwd, deps) {
131
519
  if (parsedInputs.length !== 1)
132
520
  return null;
133
521
  const first = parsedInputs[0];
522
+ // A bound record has no derived path by design (mmnto-ai/totem#2700): the
523
+ // only path it could derive is the record's own, and the tool never drafts
524
+ // over the record. The draft goes to stdout unless --out says otherwise.
525
+ if (first.record)
526
+ return null;
134
527
  let stem;
135
528
  if (first.issue) {
136
529
  stem = String(first.issue.number);
@@ -148,8 +541,7 @@ export function resolveDefaultSpecPath(parsedInputs, cwd, deps) {
148
541
  }
149
542
  // ─── Main command ───────────────────────────────────────
150
543
  export async function specCommand(inputs, options) {
151
- const path = await import('node:path');
152
- const { createEmbedder, LanceStore: LanceStoreImpl, resolveGitRoot, sanitizeForTerminal, TotemConfigError, } = await import('@mmnto/totem');
544
+ const { createEmbedder, LanceStore: LanceStoreImpl, resolveGitRoot, sanitizeForTerminal, TotemConfigError, TotemError, } = await import('@mmnto/totem');
153
545
  const { log } = await import('../ui.js');
154
546
  const { applyCodeBlindGuard, getSystemPrompt, loadConfig, loadEnv, requireEmbedding, resolveConfigPath, runOrchestrator, writeOutput, } = await import('../utils.js');
155
547
  validateOutputOptions(options, TotemConfigError);
@@ -158,6 +550,16 @@ export async function specCommand(inputs, options) {
158
550
  throw new TotemConfigError(`Too many inputs (${unique.length}). Maximum is ${MAX_INPUTS}.`, `Pass at most ${MAX_INPUTS} inputs at a time.`, 'CONFIG_INVALID');
159
551
  }
160
552
  const cwd = process.cwd();
553
+ // ── Invocation + record binding (mmnto-ai/totem#2700) ──
554
+ // Everything here runs before the config resolves, before the store connects
555
+ // and before any LLM call: a bad invocation costs nothing and mints nothing.
556
+ validateSpecInvocation(unique, options, TotemConfigError);
557
+ const boundRecord = options.from !== undefined
558
+ ? loadSpecRecord(options.from, cwd, { resolveGitRoot }, TotemConfigError)
559
+ : null;
560
+ if (boundRecord) {
561
+ assertOutDoesNotOverwriteRecord(options.out, boundRecord.absolutePath, cwd, TotemConfigError);
562
+ }
161
563
  const configPath = resolveConfigPath(cwd);
162
564
  loadEnv(cwd);
163
565
  const config = await loadConfig(configPath);
@@ -199,6 +601,12 @@ export async function specCommand(inputs, options) {
199
601
  const adapter = await createIssueAdapter(cwd, config);
200
602
  const parsed = [];
201
603
  const queryParts = [];
604
+ if (boundRecord) {
605
+ // A record is a complete, single subject: no issue fetch, no topic.
606
+ parsed.push({ issue: null, freeText: null, record: boundRecord.record });
607
+ queryParts.push(buildRecordSearchQuery(boundRecord.record));
608
+ log.info(TAG, `Record: ${boundRecord.record.path} (sha256 ${boundRecord.record.sha256})`);
609
+ }
202
610
  for (const input of unique) {
203
611
  // Match GitHub, GitLab, or any URL ending in /issues/<number> or /-/issues/<number>
204
612
  const urlMatch = input.match(/^https?:\/\/[^/]+\/.*\/(?:-\/)?issues\/(\d+)/);
@@ -222,12 +630,14 @@ export async function specCommand(inputs, options) {
222
630
  log.info(TAG, `Fetching issue #${issueNumber}...`);
223
631
  const issue = fetchAdapter.fetchIssue(issueNumber);
224
632
  log.info(TAG, `Title: ${issue.title}`);
225
- parsed.push({ issue, freeText: null });
633
+ // `issueRef` keeps the input AS TYPED so the anchor's ref round-trips
634
+ // `owner/repo#N` and URL forms (a fetched issue carries only a number).
635
+ parsed.push({ issue, freeText: null, record: null, issueRef: input });
226
636
  queryParts.push(buildSearchQuery(issue));
227
637
  }
228
638
  else {
229
639
  log.info(TAG, `Topic: ${input}`);
230
- parsed.push({ issue: null, freeText: input });
640
+ parsed.push({ issue: null, freeText: input, record: null });
231
641
  queryParts.push(input);
232
642
  }
233
643
  }
@@ -237,8 +647,33 @@ export async function specCommand(inputs, options) {
237
647
  const context = await retrieveContext(query, store, linkedStores.length > 0 ? linkedStores : undefined);
238
648
  const totalResults = context.specs.length + context.sessions.length + context.code.length + context.lessons.length;
239
649
  log.info(TAG, `Found: ${context.specs.length} specs, ${context.sessions.length} sessions, ${context.code.length} code, ${context.lessons.length} lessons`);
650
+ // ── Anchored-evidence gate (mmnto-ai/totem#2700) ──
651
+ // The anchor is what the run is grounded ON. A run with NO issue and NO
652
+ // record is the confabulation surface: it refuses when retrieval returned
653
+ // nothing, or when every signal-bearing hit is below the floor and no
654
+ // floor-exempt hit exists. `--raw` is EXEMPT — it makes no LLM call and
655
+ // mints no artifact, so it is how a weak topic's retrieval is inspected.
656
+ // The refusal returns BEFORE `runOrchestrator`, the only writer of a run
657
+ // artifact, so "mints nothing" holds by control flow.
658
+ const floor = config.searchRelevanceFloor;
659
+ const anchor = resolveGroundingAnchor(parsed);
660
+ if (anchor.kind === GROUNDING_ANCHOR_FREE_TEXT && !options.raw) {
661
+ const verdict = evaluateGroundingFloor(context, floor);
662
+ if (verdict.refuse) {
663
+ const refusal = formatGroundingRefusal(anchor.ref, verdict, floor);
664
+ throw new TotemError('GATE_INVALID', refusal.message, refusal.recoveryHint);
665
+ }
666
+ }
667
+ if (anchor.kind === GROUNDING_ANCHOR_FREE_TEXT || anchor.kind === GROUNDING_ANCHOR_MIXED) {
668
+ log.warn(TAG, `This run is NOT gate evidence: anchor kind "${anchor.kind}" (${anchor.ref}). To make it evidence, ${ANCHOR_CURES}.`);
669
+ }
240
670
  // Resolve system prompt (allow .totem/prompts/spec.md override)
241
671
  const systemPrompt = getSystemPrompt('spec', SYSTEM_PROMPT, cwd, config.totemDir);
672
+ // Captured HERE, before the code-blind directive is folded in: the artifact
673
+ // records which prompt drafted the output, and the strict evidence reader
674
+ // chooses the TEMPLATE vs DOCUMENT shape on it (a draft written under a
675
+ // custom prompt cannot be held to the built-in template's headings).
676
+ const promptSource = systemPrompt === SYSTEM_PROMPT ? PROMPT_SOURCE_BUILTIN : PROMPT_SOURCE_OVERRIDE;
242
677
  // Code-blind grounding guard (mmnto-ai/totem#2106): 0 code retrieved → surface
243
678
  // an advisory banner + fold a suppression directive into the prompt; never
244
679
  // disables (strategy#474 interim ruling).
@@ -271,11 +706,15 @@ export async function specCommand(inputs, options) {
271
706
  // Admission contract (mmnto-ai/totem#2102): the same value the slice-1
272
707
  // constant recorded, now caller-supplied — spec is factually completion-only.
273
708
  backendAdmissionClass: ADMISSION_COMPLETION_ONLY,
274
- runMetadata: { caller: 'spec', codeBlind: codeBlindGuard.codeBlind },
709
+ runMetadata: { caller: 'spec', codeBlind: codeBlindGuard.codeBlind, promptSource },
275
710
  artifact: {
276
711
  groundingHash: calculateDeterministicHash(groundingBundle),
277
712
  provenanceSummary: summarizeProvenance(groundingBundle),
278
713
  bundle: groundingBundle,
714
+ // What the run was anchored on, and the floor it was judged against
715
+ // (mmnto-ai/totem#2700) — published, never inferred by a reader.
716
+ anchor,
717
+ floor,
279
718
  },
280
719
  });
281
720
  if (content == null)
@@ -316,7 +755,9 @@ export async function specCommand(inputs, options) {
316
755
  log.success(TAG, `Spec saved to ${safeRelativePath}`);
317
756
  }
318
757
  else {
319
- log.dim(TAG, 'No default save path — writing to stdout. Use --out <path> to save.');
758
+ log.dim(TAG, boundRecord
759
+ ? 'No derived path for a record — use --out <path> to keep the draft.'
760
+ : 'No default save path — writing to stdout. Use --out <path> to save.');
320
761
  writeOutput(content);
321
762
  }
322
763
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"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"}