@mmnto/cli 1.91.0 → 1.93.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 (52) hide show
  1. package/dist/commands/doctor-parity.d.ts +105 -1
  2. package/dist/commands/doctor-parity.d.ts.map +1 -1
  3. package/dist/commands/doctor-parity.js +406 -34
  4. package/dist/commands/doctor-parity.js.map +1 -1
  5. package/dist/commands/doctor-parity.test.js +423 -2
  6. package/dist/commands/doctor-parity.test.js.map +1 -1
  7. package/dist/commands/ecl-gc.test.js +20 -0
  8. package/dist/commands/ecl-gc.test.js.map +1 -1
  9. package/dist/commands/init-templates.d.ts +6 -2
  10. package/dist/commands/init-templates.d.ts.map +1 -1
  11. package/dist/commands/init-templates.js +63 -2
  12. package/dist/commands/init-templates.js.map +1 -1
  13. package/dist/commands/init.test.js +78 -3
  14. package/dist/commands/init.test.js.map +1 -1
  15. package/dist/commands/mail.d.ts.map +1 -1
  16. package/dist/commands/mail.js +36 -0
  17. package/dist/commands/mail.js.map +1 -1
  18. package/dist/commands/mail.test.js +77 -0
  19. package/dist/commands/mail.test.js.map +1 -1
  20. package/dist/commands/review-fan.d.ts +336 -0
  21. package/dist/commands/review-fan.d.ts.map +1 -0
  22. package/dist/commands/review-fan.js +1076 -0
  23. package/dist/commands/review-fan.js.map +1 -0
  24. package/dist/commands/review-fan.test.d.ts +2 -0
  25. package/dist/commands/review-fan.test.d.ts.map +1 -0
  26. package/dist/commands/review-fan.test.js +1184 -0
  27. package/dist/commands/review-fan.test.js.map +1 -0
  28. package/dist/commands/shield-covariate.test.d.ts +14 -0
  29. package/dist/commands/shield-covariate.test.d.ts.map +1 -0
  30. package/dist/commands/shield-covariate.test.js +84 -0
  31. package/dist/commands/shield-covariate.test.js.map +1 -0
  32. package/dist/commands/shield-eval.integration.test.js +57 -13
  33. package/dist/commands/shield-eval.integration.test.js.map +1 -1
  34. package/dist/commands/shield.d.ts +162 -3
  35. package/dist/commands/shield.d.ts.map +1 -1
  36. package/dist/commands/shield.js +342 -74
  37. package/dist/commands/shield.js.map +1 -1
  38. package/dist/commands/shield.test.js +169 -3
  39. package/dist/commands/shield.test.js.map +1 -1
  40. package/dist/git.d.ts +25 -0
  41. package/dist/git.d.ts.map +1 -1
  42. package/dist/git.js +50 -6
  43. package/dist/git.js.map +1 -1
  44. package/dist/git.test.js +119 -14
  45. package/dist/git.test.js.map +1 -1
  46. package/dist/index.js +24 -2
  47. package/dist/index.js.map +1 -1
  48. package/dist/orchestrators/orchestrator.d.ts +1 -0
  49. package/dist/orchestrators/orchestrator.d.ts.map +1 -1
  50. package/dist/orchestrators/orchestrator.js +1 -1
  51. package/dist/orchestrators/orchestrator.js.map +1 -1
  52. package/package.json +2 -2
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Multi-lane review fan, round chaining, predicates, and verdict emission
3
+ * (Prop 304 R2, mmnto-ai/totem#2106).
4
+ *
5
+ * This module owns everything that turns `review.lanes` into a Prop 302 verdict
6
+ * artifact: the config validator, the strict per-lane runner wrapper over
7
+ * `runOrchestrator`, the #2104 panel + #2103 post-check wiring, the round-chain
8
+ * lineage bookkeeping, the two derived predicates (`settled` and cache
9
+ * eligibility), and the verdict emission + report line. `shieldCommand` calls
10
+ * `runReviewFan` on the standard review path when lanes are configured; the
11
+ * legacy single-lane path is untouched (invariant 7).
12
+ *
13
+ * The whole loop state machine lives here in the CLI (Tenet 16): any agent
14
+ * driving `totem review` gets identical round-chaining/settle capability — the
15
+ * `review-loop` skill is a thin driver, never a state owner.
16
+ *
17
+ * ── TWO HASH DOMAINS (codex fold 1, load-bearing) ────────────────────────────
18
+ * `diffScope.diffHash` (the MASKED review-payload identity — what the lanes
19
+ * reviewed) and `.reviewed-content-hash` (the extension-scoped tracked-source
20
+ * hash that authorizes a push) bind DIFFERENT state and are never equal. The
21
+ * caller captures the content hash once PRE-fan; the fan re-hashes ONCE POST-fan,
22
+ * derives `reviewedState` from that single compare, and reuses it for BOTH the
23
+ * verdict field and the stamp decision (codex rev-2 fold 1). Drift ⇒
24
+ * `reviewedState='drifted'` ⇒ `settled=false` AND cache-ineligible; the fan
25
+ * stamps the pre-fan hash directly via `writeReviewedContentHashValue` (bypassing
26
+ * `stampReviewedContentHashIfTreeUnchanged`, whose recompute would be a second,
27
+ * divergent compare — the single-lane path still uses that helper).
28
+ */
29
+ import type { GroundingBundle, PersistedPostCheckFinding, PostCheckRule, RunArtifact, TotemConfig, VerdictArtifact, VerdictDiffScope, VerdictLane, VerdictRound } from '@mmnto/totem';
30
+ import type { ExemptionShared } from '../exemptions/exemption-schema.js';
31
+ import { type ShieldFinding } from './shield-templates.js';
32
+ /**
33
+ * Round index at/above which the advisory max-rounds sensor line fires. A
34
+ * constant (never a config knob this slice) — advisory only, NEVER a block.
35
+ */
36
+ export declare const MAX_ROUNDS_ADVISORY = 5;
37
+ /**
38
+ * Validate a configured `review.lanes` array at review startup — a hard init
39
+ * error on any violation (Prop 304 R2 config boundary; codex fold 7). Reuses
40
+ * the CLI's `assertValidModelName` (shell-injection + leading-dash gate) and
41
+ * `parseModelString`, so a lane accepted here resolves identically at invoke.
42
+ *
43
+ * Rules (design item 1):
44
+ * - every entry must be a known `provider:model` (a `:`-prefixed known
45
+ * provider, or a bare model resolved against the base provider),
46
+ * - the `shell` provider is REJECTED (a review lane is an LLM lane, never a
47
+ * shell command),
48
+ * - empty / whitespace-only entries are rejected,
49
+ * - duplicate NORMALIZED (`provider:model`) entries are rejected.
50
+ *
51
+ * `baseProvider` is the configured orchestrator provider used to resolve a bare
52
+ * (prefix-less) lane; when absent, a bare lane is rejected (it has no provider
53
+ * to resolve against). ABSENT `lanes` returns `[]` (the legacy path runs).
54
+ *
55
+ * Returns the NORMALIZED (`provider:model`) lane list — the fan's laneIds and
56
+ * per-lane model routing use exactly these strings, so normalization has one
57
+ * home.
58
+ */
59
+ export declare function validateReviewLanes(lanes: readonly string[] | undefined, baseProvider: string | undefined, TotemConfigError: TotemConfigErrorClass): string[];
60
+ /** The dynamically-imported core `TotemConfigError` class, threaded to the sync validators (rule 64). */
61
+ type TotemConfigErrorClass = typeof import('@mmnto/totem').TotemConfigError;
62
+ /**
63
+ * Reject fan-incompatible flags at review startup when the fan is active (finding 12).
64
+ * `--suppress`, `--learn`, and `--auto-capture` have NO defined fan semantics yet, so a
65
+ * fan-active run rejects them LOUDLY (naming the unsupported combination) rather than
66
+ * silently ignoring them. Note: `--raw` is diverted to the legacy zero-LLM path upstream
67
+ * (so the fan never activates with `--raw`; finding 1), and `--out` IS supported by the
68
+ * fan (it writes the human-readable fan report; finding 2).
69
+ */
70
+ export declare function assertFanFlagsSupported(options: {
71
+ suppress?: string[];
72
+ learn?: boolean;
73
+ autoCapture?: boolean;
74
+ }, TotemConfigError: TotemConfigErrorClass): void;
75
+ /**
76
+ * The CLI-side review structured-output rule (DECIDABLE). The shipped generic
77
+ * `structuredOutputRule` bare-`JSON.parse`s `output.content` and would
78
+ * MIS-VERDICT valid XML-wrapped / fenced Shield output as malformed — so it is
79
+ * deliberately NOT wired here. This rule runs the SINGLE shared
80
+ * `extractStructuredVerdict` cascade (the same parser the CLI path uses): an
81
+ * extractable verdict passes, unextractable output is a decidable fail.
82
+ * Caller-scoped to `review` runs.
83
+ */
84
+ export declare const reviewStructuredOutputRule: PostCheckRule;
85
+ /**
86
+ * A single lane's raw invocation result, as the runner wrapper surfaces it. The
87
+ * production invoker (`makeLaneInvoker`) forces a fresh invoke, captures the run
88
+ * artifact via the `onEmitted` callback, and LOADS it so `runArtifact` is
89
+ * present iff `runArtifactHash` is. Test invokers construct this directly.
90
+ */
91
+ export interface LaneInvocation {
92
+ /** The model output. A response-cache hit is impossible (fresh forced). */
93
+ content: string | undefined;
94
+ /** The captured run-artifact content address; `undefined` ⇒ no emission fired. */
95
+ runArtifactHash: string | undefined;
96
+ /** The loaded run artifact; present iff `runArtifactHash` is present. */
97
+ runArtifact: RunArtifact | undefined;
98
+ }
99
+ /**
100
+ * A per-lane invoker: runs one lane over the shared pre-assembled `deliveredPrompt`
101
+ * (the masked bytes every lane sees, identical across lanes — codex rev-2 fold 4)
102
+ * and returns its raw invocation (or throws). The production invoker sends
103
+ * `deliveredPrompt` verbatim; a test invoker may echo it into the run artifact's
104
+ * `maskedPrompt` so the persisted `<git_diff>` segment recomputes the stored
105
+ * `diffHash` (invariant 12/15).
106
+ */
107
+ export type LaneInvoker = (laneModel: string, deliveredPrompt: string) => Promise<LaneInvocation>;
108
+ /** One lane's fully-classified outcome plus the by-products the fan needs downstream. */
109
+ export interface LaneRunResult {
110
+ /** The verdict-artifact lane record (status-discriminated union). */
111
+ lane: VerdictLane;
112
+ /** The completed/abstained lane's run artifact (for panel + post-checks). */
113
+ runArtifact?: RunArtifact;
114
+ /** The completed lane's exemption-filtered findings (drives predicates + verdict.findings). */
115
+ filteredFindings: ShieldFinding[];
116
+ }
117
+ /**
118
+ * Classify one lane's INVOCATION result (index-tagged for the laneId). The invoker is
119
+ * called once and NOT wrapped here: an invoker throw REJECTS this promise and the fan's
120
+ * `Promise.allSettled` maps the rejection to a `failed` lane via
121
+ * {@link classifyRejectedLane} — an explicit terminal classification, never a bare
122
+ * swallow (finding 13). A missing artifact emission is a `failed` lane, unextractable
123
+ * output is `abstained`, and an extractable verdict is `completed` with a severity tally
124
+ * from its exemption-filtered findings.
125
+ *
126
+ * NO retry lives here beyond `runOrchestrator`'s existing logged quota fallback
127
+ * (the design's "no runner retry"); `resolvedBackend` records what actually ran.
128
+ */
129
+ export declare function runLane(index: number, laneModel: string, invoker: LaneInvoker, shared: ExemptionShared, deliveredPrompt: string): Promise<LaneRunResult>;
130
+ /**
131
+ * Map a REJECTED lane promise to a `failed` lane record (finding 13): an invoker throw
132
+ * is classified (quota vs generic invoke error) and lands in the verdict as a terminal
133
+ * `failed` lane — a lane is never lost to a rejection. The laneId uses the CONFIGURED
134
+ * lane (a rejection means no backend resolved).
135
+ */
136
+ export declare function classifyRejectedLane(index: number, laneModel: string, reason: unknown): Promise<LaneRunResult>;
137
+ /** The additive diff-scope metadata `getDiffForReview` now returns. */
138
+ export interface DiffScopeMeta {
139
+ source: 'explicit-range' | 'staged' | 'uncommitted' | 'branch-vs-base';
140
+ base?: string;
141
+ head?: string;
142
+ /**
143
+ * The RAW CLI selector form (finding 10) — the operator's exact `--diff` string. It
144
+ * distinguishes selectors that resolve to the same refs but describe different
145
+ * lineages: `--diff main` (base-vs-working-tree, no head) vs `--diff main..HEAD`
146
+ * (range mode) both resolve base='main' head='HEAD' but must NOT share a lineage.
147
+ * Threaded into `LineageKeyInput.selectorForm` so the two forms produce distinct keys.
148
+ */
149
+ selectorForm?: string;
150
+ }
151
+ /**
152
+ * Build the source-discriminated `VerdictDiffScope` from the resolved scope
153
+ * metadata + the masked-payload `diffHash`. For `explicit-range` the schema
154
+ * requires both endpoints; a bare `--diff <ref>` (working-tree comparison) has
155
+ * no explicit head, so `HEAD` is recorded as the implicit head.
156
+ */
157
+ export declare function buildDiffScope(meta: DiffScopeMeta, diffHash: string): VerdictDiffScope;
158
+ /** A git command runner seam (injectable for tests). Returns trimmed stdout. */
159
+ export type GitExec = (args: readonly string[]) => string;
160
+ /** The resolved lineage components (item 5). */
161
+ export interface LineageResolution {
162
+ branch: string;
163
+ mergeBase: string;
164
+ lineageKey: string;
165
+ }
166
+ /**
167
+ * Resolve the composite lineage key over the RESOLVED scope selector (item 5;
168
+ * codex rev-2 fold 2). `repoIdentity` is the stable worktree identity (absolute
169
+ * `git rev-parse --show-toplevel`); `branch` is the current branch
170
+ * (`git symbolic-ref --short HEAD`), a detached HEAD becoming the literal
171
+ * `DETACHED:<sha>`. The per-source range selectors are contributed to the key so
172
+ * they describe the *lineage*, never the diff bytes:
173
+ * - `explicit-range` — the normalized `base` + `head` endpoints (two different
174
+ * ranges on one branch never cross-link — gate 2).
175
+ * - `branch-vs-base` — the resolved `base` + `mergeBase` sha (a moved merge-base
176
+ * forks the chain).
177
+ * - `staged` / `uncommitted` — no range fields; worktree identity + branch +
178
+ * source carry the lineage (the index/worktree has no second endpoint).
179
+ */
180
+ export declare function resolveLineage(meta: DiffScopeMeta, gitExec: GitExec): Promise<LineageResolution>;
181
+ /** The default `git` runner (production). */
182
+ export declare function defaultGitExec(cwd: string): Promise<GitExec>;
183
+ export interface RoundResolution {
184
+ round: VerdictRound;
185
+ /** Warnings to surface (chain restart / lineage mismatch) — never blocks. */
186
+ warnings: string[];
187
+ }
188
+ /**
189
+ * Resolve the round record (item 5). Implicit path: the latest verdict sharing
190
+ * the computed lineage key links as prior (round = prior + 1); a corrupt/missing
191
+ * prior restarts the chain at round 0 with a warning. Explicit `--continues
192
+ * <hash>`: load that verdict and link to it (its round + 1); a lineage mismatch
193
+ * WARNS (honoring the explicit intent) and records the CURRENT lineage key.
194
+ */
195
+ export declare function resolveRound(totemDirAbs: string, lineageKey: string, continuesHash: string | undefined): Promise<RoundResolution>;
196
+ /** The panel + post-check by-products the verdict assembly consumes. */
197
+ export interface PanelAndChecks {
198
+ /** All post-check rows across completed lanes, flattened. */
199
+ postChecks: PersistedPostCheckFinding[];
200
+ /** The panel content address — present iff ≥2 completed lanes assembled a panel. */
201
+ panelArtifactHash?: string;
202
+ /** The top-level panel diversity summary — present iff a panel was assembled. */
203
+ diversity?: VerdictArtifact['diversity'];
204
+ }
205
+ /**
206
+ * Run the #2103 post-check engine over every lane that emitted a run artifact
207
+ * (completed AND abstained — finding 8) and, with ≥2 COMPLETED lanes, assemble + write
208
+ * the #2104 panel from the completed lanes' run artifacts ONLY (failed/abstained lanes
209
+ * never reach `assemblePanelArtifact`).
210
+ *
211
+ * Panel inputs stay completed-only, but post-checks ALSO cover abstained lanes: an
212
+ * abstained lane's unextractable output is exactly what the review-specific decidable
213
+ * structured-output rule must persist a 'fail' row for, so its failure lands honestly
214
+ * in `verdict.postChecks` instead of vanishing.
215
+ */
216
+ export declare function runPanelAndPostChecks(laneResults: readonly LaneRunResult[], totemDirAbs: string, configRoot: string, createdAt: string): Promise<PanelAndChecks>;
217
+ /** All inputs needed to assemble the full verdict artifact in memory. */
218
+ export interface VerdictAssemblyInputs {
219
+ diffScope: VerdictDiffScope;
220
+ laneResults: readonly LaneRunResult[];
221
+ panelAndChecks: PanelAndChecks;
222
+ round: VerdictRound;
223
+ /** Post-fan tree compare (codex rev-2 fold 1) — recorded AND fed into `settled`. */
224
+ reviewedState: 'matched' | 'drifted';
225
+ createdAt: string;
226
+ }
227
+ /**
228
+ * Assemble the full verdict artifact in memory (item 7). Counts are DERIVED
229
+ * from `lanes` (never mirrored on trust — the schema re-validates them), the
230
+ * findings union is the completed lanes' exemption-filtered findings, and
231
+ * `settled` is the derived predicate over this artifact's own content (including
232
+ * the `reviewedState` drift clause — codex rev-2 fold 1).
233
+ */
234
+ export declare function assembleVerdict(inputs: VerdictAssemblyInputs, deriveSettled: (typeof import('@mmnto/totem'))['deriveSettled'], VERDICT_ARTIFACT_SCHEMA_VERSION: (typeof import('@mmnto/totem'))['VERDICT_ARTIFACT_SCHEMA_VERSION']): VerdictArtifact;
235
+ /** Everything `shieldCommand` hands the fan on the standard review path. */
236
+ export interface ReviewFanContext {
237
+ /** Normalized fan lane models (each a `provider:model` string). */
238
+ laneModels: string[];
239
+ /** The assembled review prompt — identical for every lane (identical-kit discipline). */
240
+ prompt: string;
241
+ /** The code-only filtered diff the lanes review (masked here for `diffHash`). */
242
+ filteredDiff: string;
243
+ /** Resolved diff-scope metadata from `getDiffForReview`. */
244
+ diffMeta: DiffScopeMeta;
245
+ config: TotemConfig;
246
+ cwd: string;
247
+ configRoot: string;
248
+ /** Absolute `.totem` dir (`configRoot`/`config.totemDir`). */
249
+ totemDirAbs: string;
250
+ /**
251
+ * The shield options the fan reads. The fan forces `fresh` per lane and forces `raw`
252
+ * OFF (a fan-configured `--raw` is diverted to the legacy zero-LLM path upstream, so
253
+ * `raw` never reaches here true). `out` writes the human-readable fan report;
254
+ * `failOn` (`critical`|`warn`) opts into a non-zero exit; `override` converts a
255
+ * `--fail-on` failure to pass AND authorizes the trap-ledgered stamp (finding 3).
256
+ */
257
+ options: {
258
+ raw?: boolean;
259
+ out?: string;
260
+ model?: string;
261
+ fresh?: boolean;
262
+ override?: string;
263
+ failOn?: 'critical' | 'warn';
264
+ };
265
+ /** Grounding identity for the run-artifact request (same as the single-lane path). */
266
+ groundingHash: string;
267
+ provenanceSummary: string;
268
+ groundingBundle: GroundingBundle;
269
+ totalResults: number;
270
+ codeBlind: boolean;
271
+ /** Shared exemptions (read once by the caller; passed in side-effect-free). */
272
+ shared: ExemptionShared;
273
+ /** The pre-fan content hash (codex fold 1) — the stamp binds exactly this tree. */
274
+ preFanContentHash: string | null;
275
+ /** Explicit `--continues <hash>` round override. */
276
+ continues?: string;
277
+ /** Injected per-lane invoker (production builds one over `runOrchestrator`). */
278
+ invoker?: LaneInvoker;
279
+ /** Injected git runner (production uses `safeExec('git', ...)`). */
280
+ gitExec?: GitExec;
281
+ /** Injected clock (production uses `new Date().toISOString`). */
282
+ now?: () => string;
283
+ /**
284
+ * Injected POST-fan content-hash computer (codex rev-2 fold 1) — production
285
+ * re-hashes the tracked-source tree via `computeReviewedContentHash`. Called
286
+ * ONCE after the fan; its result vs `preFanContentHash` derives `reviewedState`
287
+ * (and, transitively, the stamp decision). Tests inject a value that differs
288
+ * from `preFanContentHash` to simulate a mid-fan tree mutation.
289
+ */
290
+ contentHash?: () => Promise<string | null>;
291
+ }
292
+ /**
293
+ * The standard-path fan entry. Runs every configured lane IN PARALLEL (finding 13),
294
+ * canonicalizes the results into configured-lane order, runs the panel + post-checks,
295
+ * resolves the round chain, takes the single post-fan tree compare in a short critical
296
+ * section (finding 6), assembles + saves the verdict, renders the findings + covariate
297
+ * line, and enforces the exit contract (finding 3 / Gate G5):
298
+ *
299
+ * - DEFAULT: sensor exit 0 — the verdict, the covariate line, and the findings render
300
+ * are always emitted; a findings-bearing or degraded-coverage round does NOT throw.
301
+ * - `--fail-on <severity>`: throw `SHIELD_FAILED` when the round has findings at/above
302
+ * that severity OR is not cache-eligible.
303
+ * - `--override <reason>`: converts a `--fail-on` failure to pass AND authorizes the
304
+ * trap-ledgered cache stamp on a non-cache-eligible round (matched trees only —
305
+ * drift is never stampable, even overridden).
306
+ *
307
+ * Cache-eligible ⇒ stamp the pre-fan hash. ALL lanes terminal-failed (Gate G3) ⇒ the
308
+ * honest verdict is WRITTEN FIRST, then the run hard-errors. Zero configured lanes ⇒ a
309
+ * pre-attempt hard error with no verdict.
310
+ */
311
+ export declare function runReviewFan(ctx: ReviewFanContext): Promise<void>;
312
+ /** `printCovariateLine` inputs — the resolved diff-scope metadata plus store location. */
313
+ export interface CovariateQuery {
314
+ /**
315
+ * Resolved diff-scope metadata from `getDiffForReview`, or `null` when no diff was
316
+ * detected (no scope ⇒ no lineage ⇒ loud sensor message, exit 0).
317
+ */
318
+ diffMeta: DiffScopeMeta | null;
319
+ /** Absolute `.totem` dir. */
320
+ totemDirAbs: string;
321
+ cwd: string;
322
+ /** Injected git runner (tests); production uses `safeExec('git', ...)`. */
323
+ gitExec?: GitExec;
324
+ }
325
+ /**
326
+ * `totem review --covariate` (rev-5 item 4): the EXECUTABLE covariate transport.
327
+ * Read-only and zero-LLM — resolves the CURRENT lineage through exactly the same
328
+ * {@link resolveLineage} path `runReviewFan` uses (never a re-implementation), loads
329
+ * the latest verdict for that lineage, and prints the core-owned
330
+ * {@link renderCovariateLine} to STDOUT (the skills pipe it into the consolidated
331
+ * round-disposition comment). No verdict for the lineage ⇒ a LOUD sensor message and
332
+ * a clean return (exit 0) — the caller learns there is no line to carry, nothing gates.
333
+ */
334
+ export declare function printCovariateLine(query: CovariateQuery): Promise<void>;
335
+ export {};
336
+ //# sourceMappingURL=review-fan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-fan.d.ts","sourceRoot":"","sources":["../../src/commands/review-fan.ts"],"names":[],"mappings":"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"}