Summary
Five test coverage gaps identified in the 2026-05-22 review. All should be filled before 1.0.
Gaps
ConversationStore.applyRetentionMode() — .lastNTurns and .unlimited paths are untested
ConversationStore.save() when setAttributes throws but write succeeded — covers the M1 fix; stub setAttributes to throw and assert in-memory state is still updated
ConversationStore.delete() while a stream send is in-flight — race condition path
ApfelServerManager.handleCrash crash→restart cycle — currently no test exercises the crash recovery path
HomebrewInstaller.brewURL / canInstallApfel — directly relevant to the auto-install feature; should be covered when that feature lands
Notes
Gap #2 is coupled to the M1 fix — add the test in the same PR. Gap #5 should land with the auto-install feature PR.
Summary
Five test coverage gaps identified in the 2026-05-22 review. All should be filled before 1.0.
Gaps
ConversationStore.applyRetentionMode()—.lastNTurnsand.unlimitedpaths are untestedConversationStore.save()whensetAttributesthrows butwritesucceeded — covers the M1 fix; stubsetAttributesto throw and assert in-memory state is still updatedConversationStore.delete()while a stream send is in-flight — race condition pathApfelServerManager.handleCrashcrash→restart cycle — currently no test exercises the crash recovery pathHomebrewInstaller.brewURL/canInstallApfel— directly relevant to the auto-install feature; should be covered when that feature landsNotes
Gap #2 is coupled to the M1 fix — add the test in the same PR. Gap #5 should land with the auto-install feature PR.