A successful retry removes its failure alert
https://medlab.sublayer.space/c/recovered-capture-alert/
now fails loudly A failure-to-recovery test requires capture identity and removal of only that capture's active alerts.
What broke
A background vocabulary service stored terminal failure notifications without the capture identifier. Successful reprocessing updated the capture and job but left the notification active. The report displayed all active notifications above unrelated captures.
How it showed
A learner submitted a short phrase and saw Generated cloze rewrote the original sentence. The notification came from a test capture roughly half an hour earlier. The new capture completed successfully and proposed one card. The older capture had also recovered before the learner opened the report.
What was watching
Integration tests covered successful capture processing, reprocessing and report authentication. They did not check a terminal failure followed by successful recovery through the report. A customer identified the mismatch on their first real capture.
Where it sits
This is a behavioral failure across the job and notification lifecycle. Integration tests were present but checked those components separately. The missing observation was whether a recovered job still appeared as an active failure to its learner.
What we did
Capture failures now persist their capture identifier. The report shows the affected source and notification timestamp. Successful completion acknowledges only that capture's failure notifications. An upgrade links historical notifications only when matching recorded failures identify one capture. Ambiguous historical notifications remain active for investigation.
What now fails loudly
A test forces a capture's last retry to fail, reads its report and requires the correct capture identifier and source. It then successfully processes that capture and requires its alert to disappear while another capture's alert and an unrelated sync alert remain active. Restoring the original engine makes the identity assertion fail because the identifier is null. A migration test checks recovery of an unambiguous historical alert and retention of ambiguous failures.