@mmnto/totem 1.109.0 → 1.111.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 (63) 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 +2 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -2
  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 +356 -33
  46. package/dist/ingest/pipeline.js.map +1 -1
  47. package/dist/ingest/pipeline.test.js +456 -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/ledger.d.ts +4 -4
  54. package/dist/lock.d.ts +55 -6
  55. package/dist/lock.d.ts.map +1 -1
  56. package/dist/lock.js +180 -39
  57. package/dist/lock.js.map +1 -1
  58. package/dist/lock.test.js +201 -1
  59. package/dist/lock.test.js.map +1 -1
  60. package/dist/types.d.ts +45 -0
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/types.js.map +1 -1
  63. 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,461 @@ 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
+ /** Awaited at embed entry — lets a cell hold the embed open while timers fire (#2564). */
164
+ onCallAsync;
165
+ describeEffective;
166
+ resolveEffective;
167
+ calls = 0;
168
+ constructor(dimensions = 4) {
169
+ this.dimensions = dimensions;
170
+ }
171
+ async embed(texts) {
172
+ this.calls++;
173
+ this.onCall?.();
174
+ if (this.onCallAsync)
175
+ await this.onCallAsync();
176
+ if (this.failFromCall !== null && this.calls >= this.failFromCall) {
177
+ throw Object.assign(new Error('quota exceeded: RESOURCE_EXHAUSTED'), { status: 429 });
178
+ }
179
+ this.embedCalls.push([...texts]);
180
+ return texts.map((_, i) => new Array(this.dimensions).fill(i % 7));
181
+ }
182
+ /** All text embedded across every call, joined for content assertions. */
183
+ allText() {
184
+ return this.embedCalls.flat().join('\n');
185
+ }
186
+ }
187
+ describe('full-sync crash recovery (#2562)', () => {
188
+ let tmpDir;
189
+ let config;
190
+ const run = (embedder, incremental) => runSync(config, { projectRoot: tmpDir, incremental, embedder });
191
+ const checkpointPath = () => path.join(tmpDir, '.totem', FULL_SYNC_CHECKPOINT_FILE);
192
+ const syncStatePath = () => path.join(tmpDir, '.totem', 'cache/sync-state.json');
193
+ const git = (...args) => execFileSync('git', args, { cwd: tmpDir, stdio: 'pipe' });
194
+ /** Exactly 80 chunks per file (one per `##` section; the `#` preamble has
195
+ * no body text, so it yields no chunk) — 240 total. Two files overflow
196
+ * EMBED_BATCH_SIZE (100), so the first flush lands at a file boundary and
197
+ * the crash-at-flush-2 embedder dies on the third file's flush with two
198
+ * files already in the store. */
199
+ const TOTAL_CHUNKS = 240;
200
+ const writeCorpusFileTo = (dir, name, stem) => {
201
+ const sections = Array.from({ length: 80 }, (_, i) => `## ${stem} ${i}\n\n${stem}-content-${i}\n`).join('\n');
202
+ fs.writeFileSync(path.join(dir, name), `# ${stem}\n\n${sections}`, 'utf-8');
203
+ };
204
+ const writeCorpusFile = (name, stem) => writeCorpusFileTo(tmpDir, name, stem);
205
+ beforeEach(() => {
206
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-fullsync-'));
207
+ config = TotemConfigSchema.parse({
208
+ targets: [{ glob: '*.md', type: 'spec', strategy: 'markdown-heading' }],
209
+ embedding: { provider: 'gemini', model: 'test-model', dimensions: 4 },
210
+ });
211
+ writeCorpusFile('a.md', 'alpha');
212
+ writeCorpusFile('b.md', 'bravo');
213
+ writeCorpusFile('c.md', 'charlie');
214
+ git('init');
215
+ git('config', 'user.email', 'test@test.com');
216
+ git('config', 'user.name', 'Test');
217
+ git('add', '--', 'a.md', 'b.md', 'c.md');
218
+ git('commit', '-m', 'init');
219
+ });
220
+ afterEach(() => {
221
+ cleanTmpDir(tmpDir);
222
+ });
223
+ const ALL_FILES = ['a.md', 'b.md', 'c.md'];
224
+ const STEM = { 'a.md': 'alpha', 'b.md': 'bravo', 'c.md': 'charlie' };
225
+ const readCheckpoint = () => JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
226
+ /** The one file the crashed epoch never flushed (glob order is not guaranteed,
227
+ * so which file that is must be READ from the checkpoint, not assumed). */
228
+ const unflushedFile = () => {
229
+ const { completedFiles } = readCheckpoint();
230
+ const missing = ALL_FILES.filter((f) => !completedFiles.includes(f));
231
+ expect(missing).toHaveLength(1);
232
+ return missing[0];
233
+ };
234
+ /** Crash a full sync at the second flush: two files land, the third does not. */
235
+ async function crashFullSync() {
236
+ const crasher = new ScriptedEmbedder();
237
+ crasher.failFromCall = 2;
238
+ await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
239
+ return crasher;
240
+ }
241
+ it('#2564: a lock stolen mid-embed aborts loudly at the flush boundary, keeps the marker, and leaves the thief lock intact', { timeout: HEAVY_TIMEOUT_MS }, async () => {
242
+ const lockFile = path.join(tmpDir, '.totem', 'sync.lock');
243
+ const foreign = {
244
+ pid: 424242,
245
+ timestamp: Date.now(),
246
+ createdAt: Date.now(),
247
+ holderId: 'thief-holder',
248
+ };
249
+ const embedder = new ScriptedEmbedder();
250
+ let swapped = false;
251
+ embedder.onCallAsync = async () => {
252
+ // First flush (two files) lands clean; the theft hits during the
253
+ // second flush's embed — the paced multi-minute window from the issue.
254
+ if (embedder.embedCalls.length >= 1 && !swapped) {
255
+ swapped = true;
256
+ fs.writeFileSync(lockFile, JSON.stringify(foreign));
257
+ // Idle long enough for a 25ms heartbeat to observe and latch.
258
+ await new Promise((r) => setTimeout(r, 300));
259
+ }
260
+ };
261
+ await expect(runSync(config, {
262
+ projectRoot: tmpDir,
263
+ incremental: false,
264
+ embedder,
265
+ lockOptions: { heartbeatIntervalMs: 25 },
266
+ })).rejects.toThrow('Sync lock was lost');
267
+ expect(swapped).toBe(true);
268
+ // The mutating degraded path preserved crash safety: the marker is
269
+ // intact...
270
+ expect(fs.existsSync(checkpointPath())).toBe(true);
271
+ // ...and the abort came from the flush EXIT probe, BEFORE the
272
+ // post-theft checkpoint append: only the two pre-theft files are
273
+ // checkpointed. Deleting the exit probe lets the last flush append the
274
+ // third file and fails here (leg MAJOR-1 — an existsSync check alone
275
+ // cannot tell WHICH probe fired). The ENTRY probe is not inducible
276
+ // in-process on the full path — no await exists between one flush's
277
+ // exit probe and the next flush's entry probe for a beat to latch in
278
+ // (leg MINOR-R1, disclosed); its marginal window is the incremental
279
+ // purge gap, and a miss converges at the next probe.
280
+ expect(readCheckpoint().completedFiles).toHaveLength(2);
281
+ // ...no completion-claiming baseline was written...
282
+ expect(fs.existsSync(syncStatePath())).toBe(false);
283
+ // ...and the thief's lock survived our release (no cascade theft).
284
+ expect(JSON.parse(fs.readFileSync(lockFile, 'utf-8'))).toEqual(foreign);
285
+ // Recovery control: with the thief gone, the next sync resumes the
286
+ // epoch and completes the full corpus — and actually re-embeds the
287
+ // un-checkpointed file (store.count() alone would pass on a zero-work
288
+ // resume, leg MAJOR-1).
289
+ fs.unlinkSync(lockFile);
290
+ const finisher = new ScriptedEmbedder();
291
+ const result = await run(finisher, false);
292
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
293
+ expect(finisher.embedCalls.length).toBeGreaterThan(0);
294
+ expect(fs.existsSync(checkpointPath())).toBe(false);
295
+ });
296
+ it('a crashed --full leaves the dirty marker with only fully-flushed files checkpointed', { timeout: HEAVY_TIMEOUT_MS }, async () => {
297
+ const crasher = new ScriptedEmbedder();
298
+ crasher.failFromCall = 2;
299
+ let markerSeenDuringEmbed = false;
300
+ crasher.onCall = () => {
301
+ markerSeenDuringEmbed ||= fs.existsSync(checkpointPath());
302
+ };
303
+ await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
304
+ // The marker was already on disk when the first embed call ran — no
305
+ // window exists where the store is reset but unmarked.
306
+ expect(markerSeenDuringEmbed).toBe(true);
307
+ // Exactly the two fully-flushed files are checkpointed; the file whose
308
+ // flush crashed is not (whole-file flush boundaries).
309
+ const cp = JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
310
+ expect(cp.completedFiles).toHaveLength(2);
311
+ expect(ALL_FILES.filter((f) => !cp.completedFiles.includes(f))).toHaveLength(1);
312
+ expect(cp.embedder).toEqual({ provider: 'gemini', model: 'test-model', dimensions: 4 });
313
+ expect(typeof cp.startedHeadSha).toBe('string');
314
+ // No successful sync ever completed — no baseline may exist.
315
+ expect(fs.existsSync(syncStatePath())).toBe(false);
316
+ });
317
+ 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 () => {
318
+ // The lying sensor NEEDS a surviving baseline from a previous
319
+ // SUCCESSFUL sync: pre-fix, the crashed --full left this state file
320
+ // intact over the reset store, the next plain sync diffed
321
+ // lastSyncSha..HEAD, saw 0 changed files, and reported "Sync
322
+ // complete: 0 files" (falsification round 1, MAJOR 5 — without this
323
+ // baseline the pre-fix code fails via the git-diff fallback instead).
324
+ const first = await run(new ScriptedEmbedder(), false);
325
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
326
+ const staleState = fs.readFileSync(syncStatePath(), 'utf-8');
327
+ await crashFullSync();
328
+ const missing = unflushedFile();
329
+ const flushed = ALL_FILES.filter((f) => f !== missing);
330
+ // The crash left the stale baseline byte-identical — the defect's
331
+ // exact precondition.
332
+ expect(fs.readFileSync(syncStatePath(), 'utf-8')).toBe(staleState);
333
+ const resumer = new ScriptedEmbedder();
334
+ const result = await run(resumer, true); // plain `totem sync`
335
+ // Pre-fix this reported 0 files processed over a partial store.
336
+ expect(result.filesProcessed).toBe(1);
337
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
338
+ for (const kept of flushed) {
339
+ expect(resumer.allText()).not.toContain(`${STEM[kept]}-content-1`);
340
+ }
341
+ // The store now holds the whole corpus, the marker is gone, and the
342
+ // baseline points at HEAD — the epoch completed for real.
343
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
344
+ expect(fs.existsSync(checkpointPath())).toBe(false);
345
+ const state = JSON.parse(fs.readFileSync(syncStatePath(), 'utf-8'));
346
+ const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
347
+ cwd: tmpDir,
348
+ encoding: 'utf-8',
349
+ }).trim();
350
+ expect(state.lastSyncSha).toBe(headSha);
351
+ });
352
+ it('a file changed since the crashed epoch re-embeds on resume', { timeout: HEAVY_TIMEOUT_MS }, async () => {
353
+ await crashFullSync();
354
+ const missing = unflushedFile();
355
+ const [mutated, untouched] = ALL_FILES.filter((f) => f !== missing);
356
+ fs.appendFileSync(path.join(tmpDir, mutated), `\n## ${STEM[mutated]} extra\n\n${STEM[mutated]}-mutated\n`, 'utf-8');
357
+ git('add', '--', mutated);
358
+ git('commit', '-m', 'mutate a flushed file');
359
+ const resumer = new ScriptedEmbedder();
360
+ const result = await run(resumer, true);
361
+ // The changed-since-epoch flushed file re-embeds alongside the
362
+ // never-flushed one; the untouched flushed file stays skipped.
363
+ expect(result.filesProcessed).toBe(2);
364
+ expect(resumer.allText()).toContain(`${STEM[mutated]}-mutated`);
365
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
366
+ expect(resumer.allText()).not.toContain(`${STEM[untouched]}-content-1`);
367
+ });
368
+ it('GT round: a completed file EMPTIED since the epoch purges its stale rows on resume', { timeout: HEAVY_TIMEOUT_MS }, async () => {
369
+ await crashFullSync();
370
+ const missing = unflushedFile();
371
+ const [emptied] = ALL_FILES.filter((f) => f !== missing);
372
+ // The file now yields ZERO chunks. Its old rows must still purge —
373
+ // after this run the baseline advances past the change, so no later
374
+ // incremental diff revisits it and stale rows would be searchable
375
+ // forever (#2569 Greptile P1).
376
+ fs.writeFileSync(path.join(tmpDir, emptied), `# ${STEM[emptied]}\n`, 'utf-8');
377
+ git('add', '--', emptied);
378
+ git('commit', '-m', 'empty a flushed file');
379
+ const resumer = new ScriptedEmbedder();
380
+ const result = await run(resumer, true);
381
+ // The emptied file's 80 rows are gone; the never-flushed file's 80 landed.
382
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS - 80);
383
+ expect(resumer.allText()).not.toContain(`${STEM[emptied]}-content-1`);
384
+ expect(fs.existsSync(checkpointPath())).toBe(false);
385
+ });
386
+ it('a corrupt checkpoint is dirty-but-unusable: the full re-index restarts from zero', { timeout: HEAVY_TIMEOUT_MS }, async () => {
387
+ await crashFullSync();
388
+ fs.writeFileSync(checkpointPath(), '{ not json !!', 'utf-8');
389
+ const resumer = new ScriptedEmbedder();
390
+ const result = await run(resumer, true);
391
+ expect(result.filesProcessed).toBe(3);
392
+ expect(fs.existsSync(checkpointPath())).toBe(false);
393
+ });
394
+ it('an embedder-config change makes checkpointed progress unusable — restart from zero', { timeout: HEAVY_TIMEOUT_MS }, async () => {
395
+ await crashFullSync();
396
+ const differentDims = new ScriptedEmbedder(8);
397
+ const result = await run(differentDims, true);
398
+ expect(result.filesProcessed).toBe(3);
399
+ expect(differentDims.allText()).toContain('alpha-content-1');
400
+ expect(fs.existsSync(checkpointPath())).toBe(false);
401
+ });
402
+ it('a marker-write failure aborts BEFORE the store is destroyed', { timeout: HEAVY_TIMEOUT_MS }, async () => {
403
+ const healthy = new ScriptedEmbedder();
404
+ const first = await run(healthy, false);
405
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
406
+ // Occupy the checkpoint path with a directory. The run first reads it
407
+ // as a checkpoint (EISDIR → dirty-but-unusable), then the restart's
408
+ // marker write fails at the atomic rename — and the reset never runs.
409
+ fs.mkdirSync(checkpointPath(), { recursive: true });
410
+ await expect(run(new ScriptedEmbedder(), false)).rejects.toThrow();
411
+ fs.rmSync(checkpointPath(), { recursive: true, force: true });
412
+ fs.rmSync(`${checkpointPath()}.${process.pid}.tmp`, { force: true });
413
+ // The store survived the aborted run: a plain incremental sync sees a
414
+ // clean baseline and the full chunk count, not an empty or partial store.
415
+ const after = await run(new ScriptedEmbedder(), true);
416
+ expect(after.filesProcessed).toBe(0);
417
+ expect(after.totalChunks).toBe(first.totalChunks);
418
+ });
419
+ // ─── Falsification round 1 regressions ───
420
+ it('MAJOR 1: a store emptied under a live checkpoint is re-embedded in full, not trusted from paper', { timeout: HEAVY_TIMEOUT_MS }, async () => {
421
+ const first = await run(new ScriptedEmbedder(), false);
422
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
423
+ await crashFullSync();
424
+ // Simulate the heal-by-nuke path (LanceStore.connect on a corrupt
425
+ // dataset): the store vanishes while the checkpoint still claims two
426
+ // files are embedded.
427
+ fs.rmSync(path.join(tmpDir, config.lanceDir), { recursive: true, force: true });
428
+ const resumer = new ScriptedEmbedder();
429
+ const result = await run(resumer, true);
430
+ // Pre-fold this embedded ONLY the unflushed file over an empty store
431
+ // and wrote a clean baseline — the #2562 lying sensor by another door.
432
+ expect(result.filesProcessed).toBe(3);
433
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
434
+ expect(fs.existsSync(checkpointPath())).toBe(false);
435
+ });
436
+ it('MAJOR 2: untracked corpus files stay checkpointed across a resume (quota convergence)', { timeout: HEAVY_TIMEOUT_MS }, async () => {
437
+ // Make the corpus untracked-but-live: git has no history for it, so it
438
+ // is a PERMANENT member of git's changed-union. Pre-fold that union
439
+ // evicted these files from the completed set on every resume — quota
440
+ // re-spent on the same files forever, never converging.
441
+ git('rm', '--cached', '--', 'a.md', 'b.md', 'c.md');
442
+ git('commit', '-m', 'untrack corpus');
443
+ await crashFullSync();
444
+ const missing = unflushedFile();
445
+ const resumer = new ScriptedEmbedder();
446
+ const result = await run(resumer, true);
447
+ expect(result.filesProcessed).toBe(1);
448
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
449
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
450
+ expect(fs.existsSync(checkpointPath())).toBe(false);
451
+ });
452
+ it('MAJOR 2: an untracked completed file MODIFIED after the crash still re-embeds (mtime arm)', { timeout: HEAVY_TIMEOUT_MS }, async () => {
453
+ git('rm', '--cached', '--', 'a.md', 'b.md', 'c.md');
454
+ git('commit', '-m', 'untrack corpus');
455
+ await crashFullSync();
456
+ const missing = unflushedFile();
457
+ const [mutated] = ALL_FILES.filter((f) => f !== missing);
458
+ // Ensure the edit's mtime lands measurably after the epoch start.
459
+ await new Promise((resolve) => setTimeout(resolve, 20));
460
+ fs.appendFileSync(path.join(tmpDir, mutated), `\n## ${STEM[mutated]} extra\n\n${STEM[mutated]}-mutated\n`, 'utf-8');
461
+ const resumer = new ScriptedEmbedder();
462
+ const result = await run(resumer, true);
463
+ expect(result.filesProcessed).toBe(2); // mutated (mtime > epoch) + never-flushed
464
+ expect(resumer.allText()).toContain(`${STEM[mutated]}-mutated`);
465
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
466
+ });
467
+ it('MAJOR 3: a checkpoint stamped with a fallback embedder identity restarts instead of resuming', { timeout: HEAVY_TIMEOUT_MS }, async () => {
468
+ // The crashing run's embedder reports an EFFECTIVE identity (the
469
+ // LazyEmbedder Ollama-fallback shape) that differs from the configured
470
+ // gemini fingerprint — the checkpoint must record the effective one.
471
+ const crasher = new ScriptedEmbedder();
472
+ crasher.failFromCall = 2;
473
+ crasher.describeEffective = () => ({
474
+ provider: 'ollama',
475
+ model: 'nomic-embed-text',
476
+ dimensions: 4,
477
+ });
478
+ await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
479
+ const cp = JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
480
+ expect(cp.embedder.provider).toBe('ollama');
481
+ // The resume runs under the configured gemini fingerprint — the
482
+ // stamped ollama progress is unusable: vector spaces must not mix.
483
+ const resumer = new ScriptedEmbedder();
484
+ const result = await run(resumer, true);
485
+ expect(result.filesProcessed).toBe(3);
486
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
487
+ });
488
+ it('F2: a PERSISTENT fallback resumes as itself instead of restart-looping', { timeout: HEAVY_TIMEOUT_MS }, async () => {
489
+ const ollamaId = { provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 };
490
+ const crasher = new ScriptedEmbedder();
491
+ crasher.failFromCall = 2;
492
+ crasher.describeEffective = () => ollamaId;
493
+ await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
494
+ const missing = unflushedFile();
495
+ // The fallback persists into the next run: it resolves to the SAME
496
+ // effective identity, so the epoch continues. Pre-fold, the gate
497
+ // compared the stamped ollama identity against the CONFIG (gemini)
498
+ // fingerprint and restart-looped forever, resetting the store on
499
+ // every attempt — a corpus needing more than one run never completed.
500
+ const resumer = new ScriptedEmbedder();
501
+ resumer.resolveEffective = () => Promise.resolve(ollamaId);
502
+ const result = await run(resumer, true);
503
+ expect(result.filesProcessed).toBe(1);
504
+ expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
505
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
506
+ expect(fs.existsSync(checkpointPath())).toBe(false);
507
+ });
508
+ it('F1: a run falling back mid-resume restarts BEFORE inserting into the genuine epoch', { timeout: HEAVY_TIMEOUT_MS }, async () => {
509
+ await crashFullSync(); // checkpoint carries the genuine (gemini) fingerprint
510
+ // This run's embedder RESOLVES to an ollama fallback. The gate must
511
+ // compare effective-vs-effective and restart — pre-fold it compared
512
+ // config-vs-stamped (gemini vs gemini → match) and ollama vectors were
513
+ // inserted beside the epoch's gemini rows, mixing vector spaces.
514
+ const resumer = new ScriptedEmbedder();
515
+ resumer.resolveEffective = () => Promise.resolve({ provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 });
516
+ const result = await run(resumer, true);
517
+ expect(result.filesProcessed).toBe(3);
518
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
519
+ expect(fs.existsSync(checkpointPath())).toBe(false);
520
+ });
521
+ it('MINOR 10: a zero-work resume clears the marker WITHOUT requiring an embedder', { timeout: HEAVY_TIMEOUT_MS }, async () => {
522
+ // Epoch crashed between its final flush and the marker delete: the
523
+ // store is complete but the marker survives. The resume has nothing to
524
+ // embed, so the identity gate must not force embedder resolution — a
525
+ // missing embedder would otherwise wedge the epoch closed forever.
526
+ const first = await run(new ScriptedEmbedder(), false);
527
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
528
+ const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
529
+ cwd: tmpDir,
530
+ encoding: 'utf-8',
531
+ }).trim();
532
+ fs.writeFileSync(checkpointPath(), JSON.stringify({
533
+ startedHeadSha: headSha,
534
+ startedAt: Date.now(),
535
+ indexExclusionHash: 'whatever',
536
+ embedder: { provider: 'gemini', model: 'test-model', dimensions: 4 },
537
+ completedFiles: ALL_FILES,
538
+ }), 'utf-8');
539
+ const unresolvable = new ScriptedEmbedder();
540
+ unresolvable.resolveEffective = () => Promise.reject(new Error('no embedder available'));
541
+ const result = await run(unresolvable, true);
542
+ expect(result.filesProcessed).toBe(0);
543
+ expect(unresolvable.embedCalls).toHaveLength(0);
544
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
545
+ expect(fs.existsSync(checkpointPath())).toBe(false);
546
+ });
547
+ it('ROUND 4: a RESOLVABLE identity mismatch restarts even with zero work remaining', { timeout: HEAVY_TIMEOUT_MS }, async () => {
548
+ // The zero-work exemption is for RESOLUTION FAILURE only. A resolvable
549
+ // mismatch with nothing left to embed must still restart: clearing the
550
+ // marker would rewrite index-meta to the new identity and launder the
551
+ // DATABASE_MISMATCH evidence over a store built in the old space.
552
+ const first = await run(new ScriptedEmbedder(), false);
553
+ expect(first.totalChunks).toBe(TOTAL_CHUNKS);
554
+ const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
555
+ cwd: tmpDir,
556
+ encoding: 'utf-8',
557
+ }).trim();
558
+ fs.writeFileSync(checkpointPath(), JSON.stringify({
559
+ startedHeadSha: headSha,
560
+ startedAt: Date.now(),
561
+ indexExclusionHash: 'whatever',
562
+ embedder: { provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 },
563
+ completedFiles: ALL_FILES,
564
+ }), 'utf-8');
565
+ // Plain resolvable embedder — falls back to the config (gemini)
566
+ // fingerprint, which mismatches the stamped ollama identity.
567
+ const resumer = new ScriptedEmbedder();
568
+ const result = await run(resumer, true);
569
+ expect(result.filesProcessed).toBe(3); // restarted, not cleared
570
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
571
+ expect(fs.existsSync(checkpointPath())).toBe(false);
572
+ });
573
+ it('MAJOR 4: a non-git project resumes via the mtime arm instead of restarting every run', { timeout: HEAVY_TIMEOUT_MS }, async () => {
574
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-nongit-'));
575
+ try {
576
+ writeCorpusFileTo(dir, 'a.md', 'alpha');
577
+ writeCorpusFileTo(dir, 'b.md', 'bravo');
578
+ writeCorpusFileTo(dir, 'c.md', 'charlie');
579
+ const crasher = new ScriptedEmbedder();
580
+ crasher.failFromCall = 2;
581
+ await expect(runSync(config, { projectRoot: dir, incremental: false, embedder: crasher })).rejects.toThrow('RESOURCE_EXHAUSTED');
582
+ const cpPath = path.join(dir, '.totem', FULL_SYNC_CHECKPOINT_FILE);
583
+ const cp = JSON.parse(fs.readFileSync(cpPath, 'utf-8'));
584
+ expect(cp.startedHeadSha).toBeNull();
585
+ expect(cp.completedFiles).toHaveLength(2);
586
+ const resumer = new ScriptedEmbedder();
587
+ const result = await runSync(config, {
588
+ projectRoot: dir,
589
+ incremental: true,
590
+ embedder: resumer,
591
+ });
592
+ // Pre-fold, null startedHeadSha mapped to restart-from-zero on every
593
+ // run — the population with no diff signal could never converge.
594
+ expect(result.filesProcessed).toBe(1);
595
+ expect(result.totalChunks).toBe(TOTAL_CHUNKS);
596
+ expect(fs.existsSync(cpPath)).toBe(false);
597
+ }
598
+ finally {
599
+ cleanTmpDir(dir);
600
+ }
601
+ });
602
+ });
147
603
  describe('buildIndexManifest', () => {
148
604
  const writtenAt = new Date('2026-05-07T00:00:00.000Z');
149
605
  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"}
package/dist/ledger.d.ts CHANGED
@@ -164,9 +164,9 @@ export declare const LedgerEventSchema: z.ZodEffects<z.ZodObject<{
164
164
  qbd_correlation_id: z.ZodOptional<z.ZodString>;
165
165
  }, "strip", z.ZodTypeAny, {
166
166
  type: "suppress" | "corpus_query" | "derive_action" | "override" | "exemption" | "mcp_call" | "tool_call_first_significant" | "hook_fire" | "session_start" | "compile_run" | "claim_discipline_finding" | "compile_cache_decision";
167
+ timestamp: string;
167
168
  justification: string;
168
169
  source: "lint" | "shield" | "bot";
169
- timestamp: string;
170
170
  immutable?: boolean | undefined;
171
171
  file?: string | undefined;
172
172
  line?: number | undefined;
@@ -180,8 +180,8 @@ export declare const LedgerEventSchema: z.ZodEffects<z.ZodObject<{
180
180
  qbd_correlation_id?: string | undefined;
181
181
  }, {
182
182
  type: "suppress" | "corpus_query" | "derive_action" | "override" | "exemption" | "mcp_call" | "tool_call_first_significant" | "hook_fire" | "session_start" | "compile_run" | "claim_discipline_finding" | "compile_cache_decision";
183
- source: "lint" | "shield" | "bot";
184
183
  timestamp: string;
184
+ source: "lint" | "shield" | "bot";
185
185
  immutable?: boolean | undefined;
186
186
  file?: string | undefined;
187
187
  line?: number | undefined;
@@ -196,9 +196,9 @@ export declare const LedgerEventSchema: z.ZodEffects<z.ZodObject<{
196
196
  qbd_correlation_id?: string | undefined;
197
197
  }>, {
198
198
  type: "suppress" | "corpus_query" | "derive_action" | "override" | "exemption" | "mcp_call" | "tool_call_first_significant" | "hook_fire" | "session_start" | "compile_run" | "claim_discipline_finding" | "compile_cache_decision";
199
+ timestamp: string;
199
200
  justification: string;
200
201
  source: "lint" | "shield" | "bot";
201
- timestamp: string;
202
202
  immutable?: boolean | undefined;
203
203
  file?: string | undefined;
204
204
  line?: number | undefined;
@@ -212,8 +212,8 @@ export declare const LedgerEventSchema: z.ZodEffects<z.ZodObject<{
212
212
  qbd_correlation_id?: string | undefined;
213
213
  }, {
214
214
  type: "suppress" | "corpus_query" | "derive_action" | "override" | "exemption" | "mcp_call" | "tool_call_first_significant" | "hook_fire" | "session_start" | "compile_run" | "claim_discipline_finding" | "compile_cache_decision";
215
- source: "lint" | "shield" | "bot";
216
215
  timestamp: string;
216
+ source: "lint" | "shield" | "bot";
217
217
  immutable?: boolean | undefined;
218
218
  file?: string | undefined;
219
219
  line?: number | undefined;