@mmnto/cli 1.121.0 → 1.123.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.
- package/dist/artifact-vocabulary.d.ts +23 -0
- package/dist/artifact-vocabulary.d.ts.map +1 -0
- package/dist/artifact-vocabulary.js +23 -0
- package/dist/artifact-vocabulary.js.map +1 -0
- package/dist/commands/config-drift.test.js +89 -1
- package/dist/commands/config-drift.test.js.map +1 -1
- package/dist/commands/init-templates.d.ts +6 -6
- package/dist/commands/init-templates.d.ts.map +1 -1
- package/dist/commands/init-templates.js +8 -7
- package/dist/commands/init-templates.js.map +1 -1
- package/dist/commands/init.test.js +18 -5
- package/dist/commands/init.test.js.map +1 -1
- package/dist/commands/install-hooks.d.ts.map +1 -1
- package/dist/commands/install-hooks.js +241 -17
- package/dist/commands/install-hooks.js.map +1 -1
- package/dist/commands/install-hooks.test.js +1019 -23
- package/dist/commands/install-hooks.test.js.map +1 -1
- package/dist/commands/legs.d.ts +259 -0
- package/dist/commands/legs.d.ts.map +1 -0
- package/dist/commands/legs.js +623 -0
- package/dist/commands/legs.js.map +1 -0
- package/dist/commands/legs.test.d.ts +20 -0
- package/dist/commands/legs.test.d.ts.map +1 -0
- package/dist/commands/legs.test.js +1004 -0
- package/dist/commands/legs.test.js.map +1 -0
- package/dist/commands/pre-push-gate-matrix.test.js +14 -0
- package/dist/commands/pre-push-gate-matrix.test.js.map +1 -1
- package/dist/commands/review-fan.d.ts +40 -1
- package/dist/commands/review-fan.d.ts.map +1 -1
- package/dist/commands/review-fan.js +108 -3
- package/dist/commands/review-fan.js.map +1 -1
- package/dist/commands/review-fan.test.js +444 -6
- package/dist/commands/review-fan.test.js.map +1 -1
- package/dist/commands/shield-covariate.test.js +19 -2
- package/dist/commands/shield-covariate.test.js.map +1 -1
- package/dist/commands/shield-nonreview.test.js +140 -1
- package/dist/commands/shield-nonreview.test.js.map +1 -1
- package/dist/commands/shield.d.ts.map +1 -1
- package/dist/commands/shield.js +53 -1
- package/dist/commands/shield.js.map +1 -1
- package/dist/commands/spec-cli-wiring.test.d.ts +19 -0
- package/dist/commands/spec-cli-wiring.test.d.ts.map +1 -0
- package/dist/commands/spec-cli-wiring.test.js +90 -0
- package/dist/commands/spec-cli-wiring.test.js.map +1 -0
- package/dist/commands/spec-templates.d.ts +18 -0
- package/dist/commands/spec-templates.d.ts.map +1 -1
- package/dist/commands/spec-templates.js +21 -0
- package/dist/commands/spec-templates.js.map +1 -1
- package/dist/commands/spec.d.ts +168 -1
- package/dist/commands/spec.d.ts.map +1 -1
- package/dist/commands/spec.js +448 -7
- package/dist/commands/spec.js.map +1 -1
- package/dist/commands/spec.test.js +903 -20
- package/dist/commands/spec.test.js.map +1 -1
- package/dist/git.d.ts +19 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +13 -4
- package/dist/git.js.map +1 -1
- package/dist/index.js +47 -2
- package/dist/index.js.map +1 -1
- package/dist/services/run-artifacts.d.ts +12 -1
- package/dist/services/run-artifacts.d.ts.map +1 -1
- package/dist/services/run-artifacts.js +48 -3
- package/dist/services/run-artifacts.js.map +1 -1
- package/dist/services/run-artifacts.test.js +97 -1
- package/dist/services/run-artifacts.test.js.map +1 -1
- package/dist/utils.d.ts +22 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +4 -0
- package/dist/utils.js.map +1 -1
- package/dist/utils.test.js +65 -1
- package/dist/utils.test.js.map +1 -1
- package/package.json +2 -2
package/dist/commands/spec.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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,
|
|
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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"}
|