Repository navigation
Cache-first loading plan, and iOS Home shows saved Recents while connecting - #516
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
Keep the workspace list per paired Mac so Home can project saved Recents before the connection is up, read cached summaries before the connection guard, and replace the connecting overlay, bare spinners and premature empty states with shaped skeletons and a quiet connecting hint. Scheduled Tasks and Usage stay usable while connecting, New chat waits for the connection, Recents rows open from their saved transcript, and the five newest transcripts are prefetched after a refresh outside Low Data Mode. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
Seeding saved workspaces no longer bumps the live snapshot revision, the held-image purge test ignores the saved workspace list, and the cache-first home tests persist an earlier server answer so capabilities are negotiated. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
There was a problem hiding this comment.
Important
Three cache-first paths need correction before merging: background prefetch changes unread metadata, opening saved chats can miss post-connect reconciliation, and failed Usage reads leave a permanent loading state.
Reviewed changes across the complete PR, including the loading-state plan, iOS cache authority, Home presentation, and chat navigation lifecycle.
- Cross-client plan: Records the approved cache-first behavior and phased iOS, Android, and desktop rollout.
- Saved Home content: Persists per-installation workspace lists, hydrates saved Recents before connection, and introduces content/skeleton/empty/failure presentation with quieter connection status.
- Navigation and prefetch: Enables cached Scheduled Tasks and pending Usage, waits for New chat readiness, opens saved transcripts immediately, and prefetches five recent transcripts outside Low Data Mode.
- Verification: Reviewed the new behavioral tests; Swift syntax parsing and
npm run test:ios-releasepassed locally. Native XCTest could not run on this Linux runner becausexcodebuildis unavailable; hosted iOS verification was still running when inspected.
gpt-6.1-sol | 𝕏
very-hermes-bot
left a comment
There was a problem hiding this comment.
Inline review — 1 finding(s) anchored to the diff. See the pinned summary comment for the overview.
Hermes review failedHermes could not produce a code-review verdict for this head SHA. Engine: Safe summary: Local logs: |
Prefetch keeps the Mac's unread and attention row state, a chat opened from its saved copy reloads once the Mac connects, and a failed Usage read shows a retry state instead of a permanent skeleton. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
There was a problem hiding this comment.
Important
The reconnect refresh can be dropped when an earlier chat load is still in flight.
Reviewed changes since 74d4d40, including both follow-up commits through 8c9cd0a.
- Preserved prefetch metadata. Saved background transcripts without overwriting unread or attention state, with cache-reopen coverage.
- Added reconnect reconciliation. Triggered chat loading when the connection becomes ready; the overlapping-load case needs correction below.
- Added Usage recovery. Presented failed first reads with Try Again instead of an indefinite skeleton.
- Reset installation state. Cleared stale Home loading and error state when changing paired Macs, with a behavioral test.
Validation: iOS release checks and Swift syntax parsing passed. Native XCTest could not run on this Linux runner; hosted iOS build and simulator tests were still running when checked.
gpt-6.1-sol | 𝕏
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes since the prior review at 8c9cd0a, through 242b4483b.
- Retained overlapping reloads. Added a cancellation-aware wait for the previous chat load to unwind before running the replacement, addressing the dropped reconnect refresh.
- Covered replacement reads. Added a held-request test that cancels the initial load and verifies another transcript request, without assuming a fixed number of reads per load.
- Updated implementation notes. Documented the reload serialization in the cache-first Home memory file.
Validation: npm run test:ios-release passed (20 Ruby tests and 30 Node tests), and Swift syntax parsing passed for both changed Swift files. Native XCTest could not run on this Linux runner because xcodebuild is unavailable; hosted iOS build and simulator tests were still running when checked.
gpt-6.1-sol | 𝕏

Requested by sbt · project thread
Before: on a cold launch, iOS Home said "No Chats Yet / Start a new Workspace chat to begin." behind a "Connecting to Aiden Agent…" overlay, even though the phone had the user's Recents saved. Scheduled Tasks, Usage and New chat were greyed out until the Mac answered, and tapping a Recents row waited on the network before opening.
After: Home shows saved Recents and Workspaces right away while the Mac connects. A first launch with nothing saved shows shaped skeleton rows, "empty" appears only after the Mac answers, and an unreachable Mac with nothing saved says so. Connecting is a quiet one-line hint. Scheduled Tasks opens from its cache, Usage opens to a skeleton until its data arrives, and New chat waits for the connection instead of being disabled. A Recents row with a saved transcript opens immediately, and the five newest transcripts are saved in the background after each refresh, except in Low Data Mode.
The PR also adds the cross-client plan (
docs/plans/cache-first-loading-states-plan.md), which audits every blank or info-less loading state on iOS, Android and the desktop. The user approved it with three decisions: desktop read snapshots, recent-chat prefetch, and queued sends. This PR implements phase I1 and the cache-hit half of I2.How:
AidenChatCachenow stores the last workspace list for each paired Mac. Writes use the cache's write tokens, so writes reserved before an unpair purge, or older than the newest write, are dropped.AidenReadPresentationdecision function chooses between rows, skeleton, empty and failed.AidenCacheFirstHomeTests.There is no protocol change.
🤖 Generated with Claude Code
https://claude.ai/code/session_01A5dCdFaMEaw89th9uEujh4