import assert from "node:assert/strict"; import test from "node:test"; import { createRectificationActivityReceiptState, reduceRectificationActivityReceipt, receiptFromRectificationActivityState, } from "../src/lib/rectification-activity-receipt"; test("a successful retry clears the same tool's earlier failure", () => { let state = createRectificationActivityReceiptState(); for (const event of [ { tool: "rectification-read-case", status: "completed" }, { tool: "rectification-propose-evidence", status: "failed" }, { tool: "rectification-propose-evidence", status: "started" }, { tool: "rectification-propose-evidence", status: "completed" }, { tool: "rectification-confirm-evidence", status: "completed" }, ] as const) { state = reduceRectificationActivityReceipt(state, event); } assert.deepEqual(receiptFromRectificationActivityState(state), { steps: [ "rectification-read-case", "rectification-propose-evidence", "rectification-confirm-evidence", ], methods: [], }); }); test("an unrecovered latest tool failure remains visible", () => { let state = createRectificationActivityReceiptState(); state = reduceRectificationActivityReceipt(state, { tool: "rectification-read-case", status: "completed", }); state = reduceRectificationActivityReceipt(state, { tool: "rectification-propose-evidence", status: "failed", }); assert.deepEqual(receiptFromRectificationActivityState(state), { steps: ["rectification-read-case"], methods: [], failedTool: "rectification-propose-evidence", }); }); test("a later failure overrides an earlier completion for the same tool", () => { let state = createRectificationActivityReceiptState(); state = reduceRectificationActivityReceipt(state, { tool: "rectification-read-case", status: "completed", }); state = reduceRectificationActivityReceipt(state, { tool: "rectification-read-case", status: "failed", }); assert.deepEqual(receiptFromRectificationActivityState(state), { steps: ["rectification-read-case"], methods: [], failedTool: "rectification-read-case", }); });