rdmsm4x-changelog-20260902-1938-tyrell-build14-ios-durable-outbox
rdmsm4x changelog — Tyrell Build 14 iOS durable private chat outbox
Summary
Added a client-only durable, configuration-scoped iOS chat outbox so locally authored text messages retain truthful queued, accepted, or terminal-failed sender state across retryable disconnection without claiming recipient delivery.
Scope and source identity
- Host:
rdmsm4x - Project: Tyrell, Production mode
- Ticket:
FEAT-20260902-28, resolved after source validation - Worktree:
/Users/richh/dev/_worktrees/tyrell-build14-ios-durable-outbox-20260902 - Base:
e0d5cf5430e6cc8cad4f56b1413ed0155b1cee6c - Commit:
89d309c0c96e37c653ec1331a2fc2390ff016ab1 - Files changed:
ios/Sources/MobileStores.swift,ios/Tests/TyrellMobileTests.swift,SESSION-STATE.md,ISSUES.md
What changed
- Text envelopes are atomically persisted through the existing
ChatOutboxStorebefore their first request, then restored as optimistic queued sender bubbles after restart. - The queue preserves FIFO and the immutable
(conversationID, clientNonce)key through retry/backoff. Bootstrap is the reconnect fast path; periodic refresh honors the persisted due time. - A matching acknowledgement removes the queue entry and replaces the optimistic bubble by nonce. Local cleanup failure never causes another in-process send of that acknowledged nonce.
- Terminal failures remove the record and show
Failed — not queued. Retryable outcomes remain visibly queued. Recipient pending is conditional on actual supplied evidence, and no mobile path rendersDelivered. - Production queue files are configuration-scoped with a SHA-256 filename component, so paths disclose neither endpoint, canonical participant, token, message body, nor notification content.
- Local optimistic and acknowledged sender messages bypass attention notification observation. Existing inbound provenance and notification behavior was not changed.
Verification
xcodegen generate --spec ios/project.yml --project iosregenerated only the ignored project.- Disposable iOS 27 iPhone 17 Pro simulator
69708B46-DF41-4073-BD1D-932CC84D7A8D:xcodebuild ... testpassed 52/52 with zero failures; the simulator was observed Shutdown afterward. Log:/Users/richh/dev/_handoff/tyrell-build14-ios-durable-outbox-ios-test-20260902.log, SHA-256f355c2c4159aeebafa162904f2a062c1dcd92bdfc7f45419bac5cfabb0d02ab4. swift test --no-parallel -j 4passed 184 XCTest plus 389 Swift Testing = 573/573, zero failures. Log:/Users/richh/dev/_handoff/tyrell-build14-ios-durable-outbox-swift-test-20260902.log, SHA-256918c017022d8cf05c6060bbfe25146f1fc6b873b16fbb0fa77b68ef11f896c13.git diff e0d5cf5430e6cc8cad4f56b1413ed0155b1cee6c..89d309c0c96e37c653ec1331a2fc2390ff016ab1 --checkpassed. The isolated worktree was clean after commit.
Lifecycle and undo
- This is source-only and has not been integrated, signed, installed, canaried, deployed, or released.
- No server schema/API change, CloudKit/APNs write, credential access, physical-device action, signing, installation, service action, or canonical-checkout mutation occurred.
- Undo by reverting
89d309c0c96e37c653ec1331a2fc2390ff016ab1on an integration branch or discarding this isolated branch. Build 13 source and the accepted Build 11 fleet need no rollback. - Full handoff:
/Users/richh/dev/_handoff/tyrell-build14-ios-durable-outbox-20260902.md.