From 3f40ea7840379538fba27610bd44551d40901da2 Mon Sep 17 00:00:00 2001 From: 777genius Date: Thu, 14 May 2026 02:16:03 +0300 Subject: [PATCH] test(opencode): cover proof missing recovery suppression --- ...nCodeDeliveryAdvisory.fixture-e2e.test.tsx | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/renderer/components/team/members/MemberCardOpenCodeDeliveryAdvisory.fixture-e2e.test.tsx b/test/renderer/components/team/members/MemberCardOpenCodeDeliveryAdvisory.fixture-e2e.test.tsx index 30cf3f24..c5cdde57 100644 --- a/test/renderer/components/team/members/MemberCardOpenCodeDeliveryAdvisory.fixture-e2e.test.tsx +++ b/test/renderer/components/team/members/MemberCardOpenCodeDeliveryAdvisory.fixture-e2e.test.tsx @@ -241,6 +241,37 @@ describe('MemberCard OpenCode delivery advisory fixture e2e', () => { expect(sideEffects.sendMessageToRun).not.toHaveBeenCalled(); expect(sideEffects.invalidations).toEqual([{ teamName: TEAM_NAME, memberName: MEMBER_NAME }]); }); + + it('suppresses protocol proof-missing recovery after visible reply proof appears', async () => { + const record = makeDeliveryRecord({ + failedAt: OLD_FAILURE_ISO, + updatedAt: OLD_FAILURE_ISO, + lastObservedAt: OLD_FAILURE_ISO, + respondedAt: OLD_FAILURE_ISO, + responseState: 'responded_non_visible_tool', + lastReason: 'non_visible_tool_without_task_progress', + diagnostics: [ + 'OpenCode used tools, but did not create a visible reply or task progress proof.', + ], + }); + await writeDeliveryFixture(record); + await writeVisibleRuntimeReplyProof(record); + const scheduleProofMissingRecovery = vi.fn(async () => ({ + scheduled: true, + reason: 'scheduled' as const, + intentKey: 'proof-missing:msg-empty-turn', + })); + + const advisory = await readMemberAdvisory(); + expect(advisory).toBeNull(); + + const sideEffects = await runUserFacingSideEffects(record, scheduleProofMissingRecovery); + + expect(scheduleProofMissingRecovery).not.toHaveBeenCalled(); + expect(sideEffects.addTeamNotification).not.toHaveBeenCalled(); + expect(sideEffects.sendMessageToRun).not.toHaveBeenCalled(); + expect(sideEffects.invalidations).toEqual([{ teamName: TEAM_NAME, memberName: MEMBER_NAME }]); + }); }); async function readMemberAdvisory(): Promise {