fix(FN-4389): preserve legacy token usage rows with null cache writes

Fusion-Task-Id: FN-4389
Fusion-Task-Lineage: 366f9d57-c476-448f-96c0-6e753fc8b090
This commit is contained in:
Fusion
2026-05-13 21:34:12 -07:00
committed by gsxdsm
parent 3bda8b6a61
commit d85ff6e827
2 changed files with 31 additions and 2 deletions

View File

@@ -90,6 +90,36 @@ describe("TaskStore", () => {
expect(reloaded.tokenUsage).toEqual(tokenUsage);
});
it("defaults legacy null cacheWriteTokens rows to 0 without dropping tokenUsage", async () => {
const created = await harness.store().createTask({
description: "Legacy null cache write",
tokenUsage: {
inputTokens: 10,
outputTokens: 20,
cachedTokens: 30,
cacheWriteTokens: 40,
totalTokens: 100,
firstUsedAt: "2026-04-23T15:00:00.000Z",
lastUsedAt: "2026-04-23T15:01:00.000Z",
},
});
(harness.store() as any).db.prepare(`
UPDATE tasks
SET tokenUsageCacheWriteTokens = NULL
WHERE id = ?
`).run(created.id);
const legacy = await harness.store().getTask(created.id);
expect(legacy.tokenUsage).toMatchObject({
inputTokens: 10,
outputTokens: 20,
cachedTokens: 30,
cacheWriteTokens: 0,
totalTokens: 100,
});
});
it("round-trips cacheWriteTokens specifically", async () => {
const tokenUsage = {
inputTokens: 1,

View File

@@ -1016,7 +1016,6 @@ export class TaskStore extends EventEmitter<TaskStoreEvents> {
row.tokenUsageInputTokens === null
|| row.tokenUsageOutputTokens === null
|| row.tokenUsageCachedTokens === null
|| row.tokenUsageCacheWriteTokens === null
|| row.tokenUsageTotalTokens === null
|| row.tokenUsageFirstUsedAt === null
|| row.tokenUsageLastUsedAt === null
@@ -1028,7 +1027,7 @@ export class TaskStore extends EventEmitter<TaskStoreEvents> {
inputTokens: row.tokenUsageInputTokens,
outputTokens: row.tokenUsageOutputTokens,
cachedTokens: row.tokenUsageCachedTokens,
cacheWriteTokens: row.tokenUsageCacheWriteTokens,
cacheWriteTokens: row.tokenUsageCacheWriteTokens ?? 0,
totalTokens: row.tokenUsageTotalTokens,
firstUsedAt: row.tokenUsageFirstUsedAt,
lastUsedAt: row.tokenUsageLastUsedAt,