Finish coordinator migration: zero ChatViewModel back-references remain

ChatPeerListCoordinator, ChatComposerCoordinator, ChatOutgoingCoordinator,
and GeoChannelCoordinator complete the migration; every coordinator now
depends on a narrow @MainActor context protocol. GeoChannelCoordinator's
three injected closures collapse into a weak context. New intent op
recordPublicActivity(forChannelKey:) keeps lastPublicActivityAt
single-writer. 15 new mock-context tests; flaky-poll deadline in the
gift-wrap dedup test raised for parallel load.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jack
2026-06-10 22:13:09 +02:00
co-authored by Claude Fable 5
parent 82736c4991
commit 6091ee83ad
11 changed files with 1023 additions and 114 deletions
@@ -418,9 +418,11 @@ struct ChatViewModelNostrExtensionTests {
try await Task.sleep(nanoseconds: 150_000_000)
#expect(!viewModel.deduplicationService.hasProcessedNostrEvent(giftWrap.id))
// Generous deadline: the detached verification task can be starved
// under parallel test load.
viewModel.handleNostrMessage(giftWrap)
var recorded = false
for _ in 0..<200 {
for _ in 0..<600 {
if viewModel.deduplicationService.hasProcessedNostrEvent(giftWrap.id) {
recorded = true
break