diff --git a/src/resources/extensions/sf/tests/escalation-feature.test.ts b/src/resources/extensions/sf/tests/escalation-feature.test.ts index ecba864a5..566212e30 100644 --- a/src/resources/extensions/sf/tests/escalation-feature.test.ts +++ b/src/resources/extensions/sf/tests/escalation-feature.test.ts @@ -348,4 +348,49 @@ describe("claimOverrideForInjection (carry-forward)", () => { "empty user rationale should fall back to recommendationRationale", ); }); + + test("writeEscalationArtifact with continueWithDefault=true also persists a memory", async () => { + writeEscalationArtifact( + dir, + buildEscalationArtifact({ + ...baseArtifact, + continueWithDefault: true, + }), + ); + const { getActiveMemories } = await import("../memory-store.ts"); + const memories = getActiveMemories(); + const escalationMemory = memories.find((m) => + m.content.startsWith("[escalation:T01]"), + ); + assert.ok( + escalationMemory, + "continueWithDefault=true should write a memory at artifact-write time", + ); + assert.equal(escalationMemory!.category, "architecture"); + // Recommendation was "fail" → memory should reference the Fail option label. + assert.match(escalationMemory!.content, /Fail/); + // Rationale prefix distinguishes auto-applied defaults from operator- + // resolved entries on a journal scan. + assert.match(escalationMemory!.content, /auto-applied default:/); + }); + + test("writeEscalationArtifact with continueWithDefault=false does NOT persist a memory at write time", async () => { + writeEscalationArtifact( + dir, + buildEscalationArtifact({ + ...baseArtifact, + continueWithDefault: false, + }), + ); + const { getActiveMemories } = await import("../memory-store.ts"); + const memories = getActiveMemories(); + const escalationMemory = memories.find((m) => + m.content.startsWith("[escalation:T01]"), + ); + assert.equal( + escalationMemory, + undefined, + "pending escalations defer memory persistence to resolveEscalation", + ); + }); });