Skip to content

Commit c80fbe5

Browse files
Merge pull request #568 from corbitsdev/cl-6960-reactor-extra-segment-load-errors-do-not-name-the-failing
Name the failing segment in extra-segment load errors
2 parents 2369021 + 0ff0b91 commit c80fbe5

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/session/optimized-context-store.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,21 @@ describe("loadRecentTurns", () => {
398398

399399
await expect(store.load()).rejects.toThrow(TURNS_FILE);
400400
});
401+
402+
test("reactor's load() stays strict and names an unrecoverable extra segment", async () => {
403+
const dir = tempDir();
404+
const store = await createOptimizedContextStore(dir);
405+
const segmentName = segmentFileName(TURNS_FILE, 1);
406+
407+
fs.writeFileSync(path.join(dir, TURNS_FILE), jsonl([turn("a")]));
408+
// Mid-file garbage that is neither null padding nor a torn tail — unrecoverable.
409+
fs.writeFileSync(
410+
path.join(dir, segmentName),
411+
jsonl([turn("b")]) + "THIS IS NOT JSON\n" + jsonl([turn("c")]),
412+
);
413+
414+
await expect(store.load()).rejects.toThrow(segmentName);
415+
});
401416
});
402417

403418
describe("createOptimizedContextStore checkpoint", () => {

src/session/optimized-context-store.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,11 @@ export async function createOptimizedContextStore(dir: string): Promise<ContextS
387387
if (extraTexts.length === 0) return baseTurns;
388388

389389
const parsedExtras = extraTexts.map((text, index) =>
390-
parseSegmentTurns(text, index === extraTexts.length - 1),
390+
parseSegmentTurns(
391+
text,
392+
index === extraTexts.length - 1,
393+
segmentFileName(TURNS_FILE, index + 1),
394+
),
391395
);
392396
const keepExtras = longestWellFormedExtraCount(baseTurns, parsedExtras);
393397

@@ -466,7 +470,7 @@ export async function createOptimizedContextStore(dir: string): Promise<ContextS
466470
const parsedExtras: ConversationTurn[][] = [];
467471
for (const name of extraNames) {
468472
const text = await runGit(dir, ["show", `${hash}:${name}`]);
469-
parsedExtras.push(parseSegmentTurns(text, false));
473+
parsedExtras.push(parseSegmentTurns(text, false, name));
470474
}
471475
const keepExtras = longestWellFormedExtraCount(baseTurns, parsedExtras);
472476
if (keepExtras === 0) return baseTurns;

0 commit comments

Comments
 (0)