@mmnto/totem 1.108.0 → 1.110.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 (60) hide show
  1. package/dist/config-schema.d.ts +22 -0
  2. package/dist/config-schema.d.ts.map +1 -1
  3. package/dist/config-schema.js +6 -0
  4. package/dist/config-schema.js.map +1 -1
  5. package/dist/config-schema.test.js +21 -0
  6. package/dist/config-schema.test.js.map +1 -1
  7. package/dist/embedders/embedder.d.ts +29 -0
  8. package/dist/embedders/embedder.d.ts.map +1 -1
  9. package/dist/embedders/embedder.js +26 -3
  10. package/dist/embedders/embedder.js.map +1 -1
  11. package/dist/embedders/embedder.test.js +51 -0
  12. package/dist/embedders/embedder.test.js.map +1 -1
  13. package/dist/embedders/gemini-embedder.d.ts +18 -1
  14. package/dist/embedders/gemini-embedder.d.ts.map +1 -1
  15. package/dist/embedders/gemini-embedder.js +98 -5
  16. package/dist/embedders/gemini-embedder.js.map +1 -1
  17. package/dist/embedders/gemini-embedder.test.js +153 -1
  18. package/dist/embedders/gemini-embedder.test.js.map +1 -1
  19. package/dist/embedders/openai-embedder.d.ts +2 -1
  20. package/dist/embedders/openai-embedder.d.ts.map +1 -1
  21. package/dist/embedders/openai-embedder.js +21 -4
  22. package/dist/embedders/openai-embedder.js.map +1 -1
  23. package/dist/embedders/openai-embedder.test.d.ts +2 -0
  24. package/dist/embedders/openai-embedder.test.d.ts.map +1 -0
  25. package/dist/embedders/openai-embedder.test.js +102 -0
  26. package/dist/embedders/openai-embedder.test.js.map +1 -0
  27. package/dist/embedders/pacing.d.ts +11 -0
  28. package/dist/embedders/pacing.d.ts.map +1 -0
  29. package/dist/embedders/pacing.js +23 -0
  30. package/dist/embedders/pacing.js.map +1 -0
  31. package/dist/embedders/pacing.test.d.ts +2 -0
  32. package/dist/embedders/pacing.test.d.ts.map +1 -0
  33. package/dist/embedders/pacing.test.js +50 -0
  34. package/dist/embedders/pacing.test.js.map +1 -0
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/ingest/file-resolver.d.ts +14 -0
  40. package/dist/ingest/file-resolver.d.ts.map +1 -1
  41. package/dist/ingest/file-resolver.js +27 -9
  42. package/dist/ingest/file-resolver.js.map +1 -1
  43. package/dist/ingest/pipeline.d.ts +9 -0
  44. package/dist/ingest/pipeline.d.ts.map +1 -1
  45. package/dist/ingest/pipeline.js +315 -29
  46. package/dist/ingest/pipeline.js.map +1 -1
  47. package/dist/ingest/pipeline.test.js +397 -0
  48. package/dist/ingest/pipeline.test.js.map +1 -1
  49. package/dist/ingest/sync.d.ts +2 -2
  50. package/dist/ingest/sync.d.ts.map +1 -1
  51. package/dist/ingest/sync.js +2 -2
  52. package/dist/ingest/sync.js.map +1 -1
  53. package/dist/parity-detect.d.ts +12 -0
  54. package/dist/parity-detect.d.ts.map +1 -1
  55. package/dist/parity-detect.js +4 -3
  56. package/dist/parity-detect.js.map +1 -1
  57. package/dist/types.d.ts +39 -0
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js.map +1 -1
  60. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { execFileSync } from 'node:child_process';
1
2
  import * as fs from 'node:fs';
2
3
  import * as os from 'node:os';
3
4
  import * as path from 'node:path';
@@ -144,6 +145,402 @@ describe('runSync embedding guard', () => {
144
145
  await expect(runSync(config, { projectRoot: os.tmpdir(), incremental: false })).rejects.toThrow('No embedding provider configured');
145
146
  });
146
147
  });
148
+ // ─── Full-sync crash recovery (#2562, ADR-115 Train-1 induced regression) ───
149
+ //
150
+ // The defect: `--full` reset the store, crashed mid-embed, and left the
151
+ // previous SUCCESSFUL sync's baseline behind — so the next plain `totem sync`
152
+ // diffed from the old SHA, saw 0 changed files, and reported "Sync complete:
153
+ // 0 files" over the gutted store. These tests reproduce that state with a
154
+ // crash-at-flush-K embedder and lock in the checkpoint/resume contract.
155
+ const FULL_SYNC_CHECKPOINT_FILE = 'cache/full-sync-checkpoint.json';
156
+ const HEAVY_TIMEOUT_MS = 60_000;
157
+ /** Embeds deterministically; throws a quota-shaped 429 from call N onward. */
158
+ class ScriptedEmbedder {
159
+ dimensions;
160
+ embedCalls = [];
161
+ failFromCall = null;
162
+ onCall;
163
+ describeEffective;
164
+ resolveEffective;
165
+ calls = 0;
166
+ constructor(dimensions = 4) {
167
+ this.dimensions = dimensions;
168
+ }
169
+ embed(texts) {
170
+ this.calls++;
171
+ this.onCall?.();
172
+ if (this.failFromCall !== null && this.calls >= this.failFromCall) {
173
+ return Promise.reject(Object.assign(new Error('quota exceeded: RESOURCE_EXHAUSTED'), { status: 429 }));
174
+ }
175
+ this.embedCalls.push([...texts]);
176
+ return Promise.resolve(texts.map((_, i) => new Array(this.dimensions).fill(i % 7)));
177
+ }
178
+ /** All text embedded across every call, joined for content assertions. */
179
+ allText() {
180
+ return this.embedCalls.flat().join('\n');
181
+ }
182
+ }
183
+ describe('full-sync crash recovery (#2562)', () => {
184
+ let tmpDir;
185
+ let config;
186
+ const run = (embedder, incremental) => runSync(config, { projectRoot: tmpDir, incremental, embedder });
187
+ const checkpointPath = () => path.join(tmpDir, '.totem', FULL_SYNC_CHECKPOINT_FILE);
188
+ const syncStatePath = () => path.join(tmpDir, '.totem', 'cache/sync-state.json');
189
+ const git = (...args) => execFileSync('git', args, { cwd: tmpDir, stdio: 'pipe' });
190
+ /** Exactly 80 chunks per file (one per `##` section; the `#` preamble has
191
+ * no body text, so it yields no chunk) — 240 total. Two files overflow
192
+ * EMBED_BATCH_SIZE (100), so the first flush lands at a file boundary and
193
+ * the crash-at-flush-2 embedder dies on the third file's flush with two
194
+ * files already in the store. */
195
+ const TOTAL_CHUNKS = 240;
196
+ const writeCorpusFileTo = (dir, name, stem) => {
197
+ const sections = Array.from({ length: 80 }, (_, i) => `## ${stem} ${i}\n\n${stem}-content-${i}\n`).join('\n');
198
+ fs.writeFileSync(path.join(dir, name), `# ${stem}\n\n${sections}`, 'utf-8');
199
+ };
200
+ const writeCorpusFile = (name, stem) => writeCorpusFileTo(tmpDir, name, stem);
201
+ beforeEach(() => {
202
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-fullsync-'));
203
+ config = TotemConfigSchema.parse({
204
+ targets: [{ glob: '*.md', type: 'spec', strategy: 'markdown-heading' }],
205
+ embedding: { provider: 'gemini', model: 'test-model', dimensions: 4 },
206
+ });
207
+ writeCorpusFile('a.md', 'alpha');
208
+ writeCorpusFile('b.md', 'bravo');
209
+ writeCorpusFile('c.md', 'charlie');
210
+ git('init');
211
+ git('config', 'user.email', 'test@test.com');
212
+ git('config', 'user.name', 'Test');
213
+ git('add', '--', 'a.md', 'b.md', 'c.md');
214
+ git('commit', '-m', 'init');
215
+ });
216
+ afterEach(() => {
217
+ cleanTmpDir(tmpDir);
218
+ });
219
+ const ALL_FILES = ['a.md', 'b.md', 'c.md'];
220
+ const STEM = { 'a.md': 'alpha', 'b.md': 'bravo', 'c.md': 'charlie' };
221
+ const readCheckpoint = () => JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
222
+ /** The one file the crashed epoch never flushed (glob order is not guaranteed,
223
+ * so which file that is must be READ from the checkpoint, not assumed). */
224
+ const unflushedFile = () => {
225
+ const { completedFiles } = readCheckpoint();
226
+ const missing = ALL_FILES.filter((f) => !completedFiles.includes(f));
227
+ expect(missing).toHaveLength(1);
228
+ return missing[0];
229
+ };
230
+ /** Crash a full sync at the second flush: two files land, the third does not. */
231
+ async function crashFullSync() {
232
+ const crasher = new ScriptedEmbedder();
233
+ crasher.failFromCall = 2;
234
+ await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
235
+ return crasher;
236
+ }
237
+ it('a crashed --full leaves the dirty marker with only fully-flushed files checkpointed', { timeout: HEAVY_TIMEOUT_MS }, async () => {
238
+ const crasher = new ScriptedEmbedder();
239
+ crasher.failFromCall = 2;
240
+ let markerSeenDuringEmbed = false;
241
+ crasher.onCall = () => {
242
+ markerSeenDuringEmbed ||= fs.existsSync(checkpointPath());
243
+ };
244
+ await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
245
+ // The marker was already on disk when the first embed call ran — no
246
+ // window exists where the store is reset but unmarked.
247
+ expect(markerSeenDuringEmbed).toBe(true);
248
+ // Exactly the two fully-flushed files are checkpointed; the file whose
249
+ // flush crashed is not (whole-file flush boundaries).
250
+ const cp = JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
251
+ expect(cp.completedFiles).toHaveLength(2);
252
+ expect(ALL_FILES.filter((f) => !cp.completedFiles.includes(f))).toHaveLength(1);
253
+ expect(cp.embedder).toEqual({ provider: 'gemini', model: 'test-model', dimensions: 4 });
254
+ expect(typeof cp.startedHeadSha).toBe('string');
255
+ // No successful sync ever completed — no baseline may exist.
256
+ expect(fs.existsSync(syncStatePath())).toBe(false);
257
+ });
258
+ it('INDUCED REGRESSION: the next plain sync resumes the full re-index instead of reporting complete over a partial store', { timeout: HEAVY_TIMEOUT_MS }, async () => {
259
+ // The lying sensor NEEDS a surviving baseline from a previous
260
+ // SUCCESSFUL sync: pre-fix, the crashed --full left this state file
261
+ // intact over the reset store, the next plain sync diffed
262
+ // lastSyncSha..HEAD, saw 0 changed files, and reported "Sync
263
+ // complete: 0 files" (falsification round 1, MAJOR 5 — without this
264
+ // baseline the pre-fix code fails via the git-diff fallback instead).
265
+ const first = await run(new ScriptedEmbedder(), false);
266
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
267
+ const staleState = fs.readFileSync(syncStatePath(), 'utf-8');
268
+ await crashFullSync();
269
+ const missing = unflushedFile();
270
+ const flushed = ALL_FILES.filter((f) => f !== missing);
271
+ // The crash left the stale baseline byte-identical — the defect's
272
+ // exact precondition.
273
+ expect(fs.readFileSync(syncStatePath(), 'utf-8')).toBe(staleState);
274
+ const resumer = new ScriptedEmbedder();
275
+ const result = await run(resumer, true); // plain `totem sync`
276
+ // Pre-fix this reported 0 files processed over a partial store.
277
+ expect(result.filesProcessed).toBe(1);
278
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
279
+ for (const kept of flushed) {
280
+ expect(resumer.allText()).not.toContain(`${STEM[kept]}-content-1`);
281
+ }
282
+ // The store now holds the whole corpus, the marker is gone, and the
283
+ // baseline points at HEAD — the epoch completed for real.
284
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
285
+ expect(fs.existsSync(checkpointPath())).toBe(false);
286
+ const state = JSON.parse(fs.readFileSync(syncStatePath(), 'utf-8'));
287
+ const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
288
+ cwd: tmpDir,
289
+ encoding: 'utf-8',
290
+ }).trim();
291
+ expect(state.lastSyncSha).toBe(headSha);
292
+ });
293
+ it('a file changed since the crashed epoch re-embeds on resume', { timeout: HEAVY_TIMEOUT_MS }, async () => {
294
+ await crashFullSync();
295
+ const missing = unflushedFile();
296
+ const [mutated, untouched] = ALL_FILES.filter((f) => f !== missing);
297
+ fs.appendFileSync(path.join(tmpDir, mutated), `\n## ${STEM[mutated]} extra\n\n${STEM[mutated]}-mutated\n`, 'utf-8');
298
+ git('add', '--', mutated);
299
+ git('commit', '-m', 'mutate a flushed file');
300
+ const resumer = new ScriptedEmbedder();
301
+ const result = await run(resumer, true);
302
+ // The changed-since-epoch flushed file re-embeds alongside the
303
+ // never-flushed one; the untouched flushed file stays skipped.
304
+ expect(result.filesProcessed).toBe(2);
305
+ expect(resumer.allText()).toContain(`${STEM[mutated]}-mutated`);
306
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
307
+ expect(resumer.allText()).not.toContain(`${STEM[untouched]}-content-1`);
308
+ });
309
+ it('GT round: a completed file EMPTIED since the epoch purges its stale rows on resume', { timeout: HEAVY_TIMEOUT_MS }, async () => {
310
+ await crashFullSync();
311
+ const missing = unflushedFile();
312
+ const [emptied] = ALL_FILES.filter((f) => f !== missing);
313
+ // The file now yields ZERO chunks. Its old rows must still purge —
314
+ // after this run the baseline advances past the change, so no later
315
+ // incremental diff revisits it and stale rows would be searchable
316
+ // forever (#2569 Greptile P1).
317
+ fs.writeFileSync(path.join(tmpDir, emptied), `# ${STEM[emptied]}\n`, 'utf-8');
318
+ git('add', '--', emptied);
319
+ git('commit', '-m', 'empty a flushed file');
320
+ const resumer = new ScriptedEmbedder();
321
+ const result = await run(resumer, true);
322
+ // The emptied file's 80 rows are gone; the never-flushed file's 80 landed.
323
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS - 80);
324
+ expect(resumer.allText()).not.toContain(`${STEM[emptied]}-content-1`);
325
+ expect(fs.existsSync(checkpointPath())).toBe(false);
326
+ });
327
+ it('a corrupt checkpoint is dirty-but-unusable: the full re-index restarts from zero', { timeout: HEAVY_TIMEOUT_MS }, async () => {
328
+ await crashFullSync();
329
+ fs.writeFileSync(checkpointPath(), '{ not json !!', 'utf-8');
330
+ const resumer = new ScriptedEmbedder();
331
+ const result = await run(resumer, true);
332
+ expect(result.filesProcessed).toBe(3);
333
+ expect(fs.existsSync(checkpointPath())).toBe(false);
334
+ });
335
+ it('an embedder-config change makes checkpointed progress unusable — restart from zero', { timeout: HEAVY_TIMEOUT_MS }, async () => {
336
+ await crashFullSync();
337
+ const differentDims = new ScriptedEmbedder(8);
338
+ const result = await run(differentDims, true);
339
+ expect(result.filesProcessed).toBe(3);
340
+ expect(differentDims.allText()).toContain('alpha-content-1');
341
+ expect(fs.existsSync(checkpointPath())).toBe(false);
342
+ });
343
+ it('a marker-write failure aborts BEFORE the store is destroyed', { timeout: HEAVY_TIMEOUT_MS }, async () => {
344
+ const healthy = new ScriptedEmbedder();
345
+ const first = await run(healthy, false);
346
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
347
+ // Occupy the checkpoint path with a directory. The run first reads it
348
+ // as a checkpoint (EISDIR → dirty-but-unusable), then the restart's
349
+ // marker write fails at the atomic rename — and the reset never runs.
350
+ fs.mkdirSync(checkpointPath(), { recursive: true });
351
+ await expect(run(new ScriptedEmbedder(), false)).rejects.toThrow();
352
+ fs.rmSync(checkpointPath(), { recursive: true, force: true });
353
+ fs.rmSync(`${checkpointPath()}.${process.pid}.tmp`, { force: true });
354
+ // The store survived the aborted run: a plain incremental sync sees a
355
+ // clean baseline and the full chunk count, not an empty or partial store.
356
+ const after = await run(new ScriptedEmbedder(), true);
357
+ expect(after.filesProcessed).toBe(0);
358
+ expect(after.totalChunks).toBe(first.totalChunks);
359
+ });
360
+ // ─── Falsification round 1 regressions ───
361
+ it('MAJOR 1: a store emptied under a live checkpoint is re-embedded in full, not trusted from paper', { timeout: HEAVY_TIMEOUT_MS }, async () => {
362
+ const first = await run(new ScriptedEmbedder(), false);
363
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
364
+ await crashFullSync();
365
+ // Simulate the heal-by-nuke path (LanceStore.connect on a corrupt
366
+ // dataset): the store vanishes while the checkpoint still claims two
367
+ // files are embedded.
368
+ fs.rmSync(path.join(tmpDir, config.lanceDir), { recursive: true, force: true });
369
+ const resumer = new ScriptedEmbedder();
370
+ const result = await run(resumer, true);
371
+ // Pre-fold this embedded ONLY the unflushed file over an empty store
372
+ // and wrote a clean baseline — the #2562 lying sensor by another door.
373
+ expect(result.filesProcessed).toBe(3);
374
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
375
+ expect(fs.existsSync(checkpointPath())).toBe(false);
376
+ });
377
+ it('MAJOR 2: untracked corpus files stay checkpointed across a resume (quota convergence)', { timeout: HEAVY_TIMEOUT_MS }, async () => {
378
+ // Make the corpus untracked-but-live: git has no history for it, so it
379
+ // is a PERMANENT member of git's changed-union. Pre-fold that union
380
+ // evicted these files from the completed set on every resume — quota
381
+ // re-spent on the same files forever, never converging.
382
+ git('rm', '--cached', '--', 'a.md', 'b.md', 'c.md');
383
+ git('commit', '-m', 'untrack corpus');
384
+ await crashFullSync();
385
+ const missing = unflushedFile();
386
+ const resumer = new ScriptedEmbedder();
387
+ const result = await run(resumer, true);
388
+ expect(result.filesProcessed).toBe(1);
389
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
390
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
391
+ expect(fs.existsSync(checkpointPath())).toBe(false);
392
+ });
393
+ it('MAJOR 2: an untracked completed file MODIFIED after the crash still re-embeds (mtime arm)', { timeout: HEAVY_TIMEOUT_MS }, async () => {
394
+ git('rm', '--cached', '--', 'a.md', 'b.md', 'c.md');
395
+ git('commit', '-m', 'untrack corpus');
396
+ await crashFullSync();
397
+ const missing = unflushedFile();
398
+ const [mutated] = ALL_FILES.filter((f) => f !== missing);
399
+ // Ensure the edit's mtime lands measurably after the epoch start.
400
+ await new Promise((resolve) => setTimeout(resolve, 20));
401
+ fs.appendFileSync(path.join(tmpDir, mutated), `\n## ${STEM[mutated]} extra\n\n${STEM[mutated]}-mutated\n`, 'utf-8');
402
+ const resumer = new ScriptedEmbedder();
403
+ const result = await run(resumer, true);
404
+ expect(result.filesProcessed).toBe(2); // mutated (mtime > epoch) + never-flushed
405
+ expect(resumer.allText()).toContain(`${STEM[mutated]}-mutated`);
406
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
407
+ });
408
+ it('MAJOR 3: a checkpoint stamped with a fallback embedder identity restarts instead of resuming', { timeout: HEAVY_TIMEOUT_MS }, async () => {
409
+ // The crashing run's embedder reports an EFFECTIVE identity (the
410
+ // LazyEmbedder Ollama-fallback shape) that differs from the configured
411
+ // gemini fingerprint — the checkpoint must record the effective one.
412
+ const crasher = new ScriptedEmbedder();
413
+ crasher.failFromCall = 2;
414
+ crasher.describeEffective = () => ({
415
+ provider: 'ollama',
416
+ model: 'nomic-embed-text',
417
+ dimensions: 4,
418
+ });
419
+ await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
420
+ const cp = JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
421
+ expect(cp.embedder.provider).toBe('ollama');
422
+ // The resume runs under the configured gemini fingerprint — the
423
+ // stamped ollama progress is unusable: vector spaces must not mix.
424
+ const resumer = new ScriptedEmbedder();
425
+ const result = await run(resumer, true);
426
+ expect(result.filesProcessed).toBe(3);
427
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
428
+ });
429
+ it('F2: a PERSISTENT fallback resumes as itself instead of restart-looping', { timeout: HEAVY_TIMEOUT_MS }, async () => {
430
+ const ollamaId = { provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 };
431
+ const crasher = new ScriptedEmbedder();
432
+ crasher.failFromCall = 2;
433
+ crasher.describeEffective = () => ollamaId;
434
+ await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
435
+ const missing = unflushedFile();
436
+ // The fallback persists into the next run: it resolves to the SAME
437
+ // effective identity, so the epoch continues. Pre-fold, the gate
438
+ // compared the stamped ollama identity against the CONFIG (gemini)
439
+ // fingerprint and restart-looped forever, resetting the store on
440
+ // every attempt — a corpus needing more than one run never completed.
441
+ const resumer = new ScriptedEmbedder();
442
+ resumer.resolveEffective = () => Promise.resolve(ollamaId);
443
+ const result = await run(resumer, true);
444
+ expect(result.filesProcessed).toBe(1);
445
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
446
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
447
+ expect(fs.existsSync(checkpointPath())).toBe(false);
448
+ });
449
+ it('F1: a run falling back mid-resume restarts BEFORE inserting into the genuine epoch', { timeout: HEAVY_TIMEOUT_MS }, async () => {
450
+ await crashFullSync(); // checkpoint carries the genuine (gemini) fingerprint
451
+ // This run's embedder RESOLVES to an ollama fallback. The gate must
452
+ // compare effective-vs-effective and restart — pre-fold it compared
453
+ // config-vs-stamped (gemini vs gemini → match) and ollama vectors were
454
+ // inserted beside the epoch's gemini rows, mixing vector spaces.
455
+ const resumer = new ScriptedEmbedder();
456
+ resumer.resolveEffective = () => Promise.resolve({ provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 });
457
+ const result = await run(resumer, true);
458
+ expect(result.filesProcessed).toBe(3);
459
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
460
+ expect(fs.existsSync(checkpointPath())).toBe(false);
461
+ });
462
+ it('MINOR 10: a zero-work resume clears the marker WITHOUT requiring an embedder', { timeout: HEAVY_TIMEOUT_MS }, async () => {
463
+ // Epoch crashed between its final flush and the marker delete: the
464
+ // store is complete but the marker survives. The resume has nothing to
465
+ // embed, so the identity gate must not force embedder resolution — a
466
+ // missing embedder would otherwise wedge the epoch closed forever.
467
+ const first = await run(new ScriptedEmbedder(), false);
468
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
469
+ const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
470
+ cwd: tmpDir,
471
+ encoding: 'utf-8',
472
+ }).trim();
473
+ fs.writeFileSync(checkpointPath(), JSON.stringify({
474
+ startedHeadSha: headSha,
475
+ startedAt: Date.now(),
476
+ indexExclusionHash: 'whatever',
477
+ embedder: { provider: 'gemini', model: 'test-model', dimensions: 4 },
478
+ completedFiles: ALL_FILES,
479
+ }), 'utf-8');
480
+ const unresolvable = new ScriptedEmbedder();
481
+ unresolvable.resolveEffective = () => Promise.reject(new Error('no embedder available'));
482
+ const result = await run(unresolvable, true);
483
+ expect(result.filesProcessed).toBe(0);
484
+ expect(unresolvable.embedCalls).toHaveLength(0);
485
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
486
+ expect(fs.existsSync(checkpointPath())).toBe(false);
487
+ });
488
+ it('ROUND 4: a RESOLVABLE identity mismatch restarts even with zero work remaining', { timeout: HEAVY_TIMEOUT_MS }, async () => {
489
+ // The zero-work exemption is for RESOLUTION FAILURE only. A resolvable
490
+ // mismatch with nothing left to embed must still restart: clearing the
491
+ // marker would rewrite index-meta to the new identity and launder the
492
+ // DATABASE_MISMATCH evidence over a store built in the old space.
493
+ const first = await run(new ScriptedEmbedder(), false);
494
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
495
+ const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
496
+ cwd: tmpDir,
497
+ encoding: 'utf-8',
498
+ }).trim();
499
+ fs.writeFileSync(checkpointPath(), JSON.stringify({
500
+ startedHeadSha: headSha,
501
+ startedAt: Date.now(),
502
+ indexExclusionHash: 'whatever',
503
+ embedder: { provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 },
504
+ completedFiles: ALL_FILES,
505
+ }), 'utf-8');
506
+ // Plain resolvable embedder — falls back to the config (gemini)
507
+ // fingerprint, which mismatches the stamped ollama identity.
508
+ const resumer = new ScriptedEmbedder();
509
+ const result = await run(resumer, true);
510
+ expect(result.filesProcessed).toBe(3); // restarted, not cleared
511
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
512
+ expect(fs.existsSync(checkpointPath())).toBe(false);
513
+ });
514
+ it('MAJOR 4: a non-git project resumes via the mtime arm instead of restarting every run', { timeout: HEAVY_TIMEOUT_MS }, async () => {
515
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-nongit-'));
516
+ try {
517
+ writeCorpusFileTo(dir, 'a.md', 'alpha');
518
+ writeCorpusFileTo(dir, 'b.md', 'bravo');
519
+ writeCorpusFileTo(dir, 'c.md', 'charlie');
520
+ const crasher = new ScriptedEmbedder();
521
+ crasher.failFromCall = 2;
522
+ await expect(runSync(config, { projectRoot: dir, incremental: false, embedder: crasher })).rejects.toThrow('RESOURCE_EXHAUSTED');
523
+ const cpPath = path.join(dir, '.totem', FULL_SYNC_CHECKPOINT_FILE);
524
+ const cp = JSON.parse(fs.readFileSync(cpPath, 'utf-8'));
525
+ expect(cp.startedHeadSha).toBeNull();
526
+ expect(cp.completedFiles).toHaveLength(2);
527
+ const resumer = new ScriptedEmbedder();
528
+ const result = await runSync(config, {
529
+ projectRoot: dir,
530
+ incremental: true,
531
+ embedder: resumer,
532
+ });
533
+ // Pre-fold, null startedHeadSha mapped to restart-from-zero on every
534
+ // run — the population with no diff signal could never converge.
535
+ expect(result.filesProcessed).toBe(1);
536
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
537
+ expect(fs.existsSync(cpPath)).toBe(false);
538
+ }
539
+ finally {
540
+ cleanTmpDir(dir);
541
+ }
542
+ });
543
+ });
147
544
  describe('buildIndexManifest', () => {
148
545
  const writtenAt = new Date('2026-05-07T00:00:00.000Z');
149
546
  const docs = [
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../src/ingest/pipeline.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../src/ingest/pipeline.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export type { ResolvedFile } from './file-resolver.js';
2
- export { getChangedFiles, getHeadSha, resolveFiles } from './file-resolver.js';
2
+ export { getChangedFiles, getChangedFilesDetailed, getHeadSha, resolveFiles, } from './file-resolver.js';
3
3
  export type { IndexManifest, ManifestDocument } from './pipeline.js';
4
- export { buildIndexManifest, INDEX_MANIFEST_SCHEMA, runSync, verifyIndexMeta } from './pipeline.js';
4
+ export { buildIndexManifest, hasFullSyncCheckpoint, INDEX_MANIFEST_SCHEMA, runSync, verifyIndexMeta, } from './pipeline.js';
5
5
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/ingest/sync.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/E,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/ingest/sync.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,OAAO,EACP,eAAe,GAChB,MAAM,eAAe,CAAC"}
@@ -1,3 +1,3 @@
1
- export { getChangedFiles, getHeadSha, resolveFiles } from './file-resolver.js';
2
- export { buildIndexManifest, INDEX_MANIFEST_SCHEMA, runSync, verifyIndexMeta } from './pipeline.js';
1
+ export { getChangedFiles, getChangedFilesDetailed, getHeadSha, resolveFiles, } from './file-resolver.js';
2
+ export { buildIndexManifest, hasFullSyncCheckpoint, INDEX_MANIFEST_SCHEMA, runSync, verifyIndexMeta, } from './pipeline.js';
3
3
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/ingest/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/ingest/sync.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,OAAO,EACP,eAAe,GAChB,MAAM,eAAe,CAAC"}
@@ -329,6 +329,18 @@ export interface DetectMechanicalContext {
329
329
  * the detector reads `<consumerPath>` (UTF-8); a read failure is honest-absent.
330
330
  */
331
331
  readFile?: (absPath: string) => string | undefined;
332
+ /**
333
+ * The remedy named by the remediation strings, composed as "via ${installHint}"
334
+ * — a command (`totem init`, the default) or a short descriptive imperative.
335
+ * Threaded per-artifact because a contract's consumer surface may not be one
336
+ * `totem init` writes yet — naming a remedy that does not touch the surface
337
+ * ships an inert instruction (mmnto-ai/totem#2532 slice-1 falsification round;
338
+ * kin of the #2082 per-class installCommand). Prose beats a literal command
339
+ * here: a command-shaped hint must be platform-true AND self-containing
340
+ * (destination dirs, source presence, cwd) or it fails exactly in the states
341
+ * it is prescribed for (#2559 cross-bot round).
342
+ */
343
+ installHint?: string;
332
344
  }
333
345
  /**
334
346
  * Normalize a managed block for content comparison (req #3): CRLF / lone-CR → LF,
@@ -1 +1 @@
1
- {"version":3,"file":"parity-detect.d.ts","sourceRoot":"","sources":["../src/parity-detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parity-detect.d.ts","sourceRoot":"","sources":["../src/parity-detect.ts"],"names":[],"mappings":"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"}
@@ -831,6 +831,7 @@ export function detectMechanicalContract(ctx) {
831
831
  // Append the binary self-report (req #5) by concatenation (not interpolation)
832
832
  // so the provenance suffix never reads as a jammed token in a message.
833
833
  const tag = (msg) => msg + provenance;
834
+ const install = ctx.installHint ?? 'totem init';
834
835
  // ── Canonical unresolvable → unknown (Stale-Doctor-Paradox guard) ──
835
836
  // `undefined` = the CLI could not extract the canonical (a build/marker bug);
836
837
  // an EMPTY string is a legitimately empty template that must still be COMPARED,
@@ -851,7 +852,7 @@ export function detectMechanicalContract(ctx) {
851
852
  return {
852
853
  status: 'skip',
853
854
  message: `artifact not installed at ${ctx.consumerPath} — cohort permits absence`,
854
- remediation: 'Run totem init to install the distributed artifact, or ignore if this repo intentionally omits it.',
855
+ remediation: `Install it via ${install}, or ignore if this repo intentionally omits it.`,
855
856
  };
856
857
  }
857
858
  // ── Extract the consumer's managed block ──
@@ -870,7 +871,7 @@ export function detectMechanicalContract(ctx) {
870
871
  return {
871
872
  status: 'warn',
872
873
  message: `managed-block markers absent in ${ctx.consumerPath} — file is unmanaged or marker-stripped`,
873
- remediation: 'Re-run totem init to restore the managed block, or add a totem:fork marker if this divergence is intentional.',
874
+ remediation: `Restore the managed block via ${install}, or add a totem:fork marker if this divergence is intentional.`,
874
875
  };
875
876
  }
876
877
  // ── Normalize + compare (req #3) ──
@@ -893,7 +894,7 @@ export function detectMechanicalContract(ctx) {
893
894
  return {
894
895
  status: 'warn',
895
896
  message: tag(`drift — consumer ${hashManagedBlock(consumerNorm)} != canonical ${hashManagedBlock(canonicalNorm)}`),
896
- remediation: 'Reconcile the artifact to the canonical (re-run totem init), or add a totem:fork marker if the divergence is intentional.',
897
+ remediation: `Reconcile the artifact to the canonical via ${install}, or add a totem:fork marker if the divergence is intentional.`,
897
898
  };
898
899
  }
899
900
  /**