Repository navigation
Phones: chats without a workspace, like the desktop (Remote rev 51) - #692
sambitcreate wants to merge 22 commits into
Conversation
iPhone and Android now list No workspace chats in one Chats group and offer No Workspace first under New Chat. Workspace records carry an optional noWorkspace marker; the host splits a phone's new chat (or a move) into a fresh hidden folder when the target already holds a chat, and releases an empty hidden folder when a chat moves out. Hidden records stay out of phone pickers, the workspace list and Scheduled Tasks. Older phones ignore the key; the CLI lists no hidden records, so phones offer nothing new there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
Caution
No Workspace creation can silently fail to open the new chat on iOS. The workspace-reconciliation, concurrent-allocation, and archive-recovery issues below need correction before merging.
Reviewed changes across the host allocation lifecycle, Remote contract, both native clients, tests, and documentation.
- Host allocation: Remote chat creation and moves split occupied hidden workspaces into fresh records and release unused records after moves.
- Phone experience: iOS and Android add No Workspace creation, consolidate hidden chats into Chats, and remove hidden records from workspace management and selection surfaces.
- Protocol: Revision 50 adds the optional workspace marker to projections, OpenAPI, and the shared fixture without another feature token.
- Verification: All 173 focused server tests and both focused Android suites passed; changed Swift files passed syntax parsing. A real-service probe reproduced the concurrent-folder collision. Native iOS execution and phone screenshot checks were not available in this Linux review environment.
gpt-6.1-sol | 𝕏
- Both phones re-read workspaces when a create lands in a hidden workspace they haven't listed, so iOS opens the chat and both sidebars show it under Chats. - The host assigns phone creates and moves into hidden folders one at a time, so two requests at an empty home can't share its folder. - Phones ignore an archive flag an older build left on a hidden record; the Chats group has no Unarchive, so its chats would stay hidden. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
very-hermes-bot
left a comment
There was a problem hiding this comment.
Inline review — 3 finding(s) anchored to the diff. See the pinned summary comment for the overview.
Hermes Review BotConfidence: 4 Engine: SummaryThis change extends the desktop's "chats without a workspace" model to paired phones: the host projects hidden per-chat workspace records with an optional Confidence Score: 4/5I traced the host create/move/projection/archive-prune paths and both clients' create, link, split-view, scheduled-task and re-read paths, read the changed tests, and verified the cited files and line ranges; I could not run the native suites or hosted CI, so compile/runtime coverage on device is unverified. 📁 Important Files Changed
FindingsNo findings. 📊 Sequence DiagramsequenceDiagram
participant Phone as Phone (iOS/Android)
participant Host as Aiden host
participant WS as WorkspaceApplicationService
participant Desktop as Desktop renderer
Phone->>Host: POST /chats {workspaceId: home, noWorkspace: true}
Host->>Host: assigningNoWorkspace (serialized)
Host->>WS: workspaceForNoWorkspaceChat(home)
WS->>WS: chatIdsIn(home); createNoWorkspace() if used
WS-->>Host: workspaceId (home or fresh hidden record)
Host-->>Desktop: workspaces:changed (when a record was made)
Host->>Host: application.create(chat, workspaceId)
Host-->>Phone: 201 chat {workspaceId}
Phone->>Host: GET /workspaces (if the id is unlisted)
Host-->>Phone: workspaces incl. noWorkspace marker
Phone->>Phone: group into one Chats section and open the chat
Machine-Readable Findings[]
|
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in 12cecf679 since the prior review at 01abaa5a4, focusing on the three corrective changes and their native-client and host integration.
- Reconciled workspace discovery. Added workspace refreshes after creation returns an unknown workspace, with iOS awaiting discovery and rechecking request authority before opening the chat.
- Serialized hidden-folder assignment. Coordinated occupancy selection and persistence across Remote creates and moves, and added a concurrent two-device creation test.
- Recovered legacy archived chats. Ignored archive flags on hidden records in both phones' active workspace projections while keeping ordinary project archives intact, with focused policy assertions and updated documentation.
- Verified focused behavior. Passed all 174 focused server/workspace tests, changed-TypeScript ESLint, and changed-Swift syntax checks. Android verification was inconclusive: an overlapping Gradle invocation failed with
Failed to create MD5 hash ... merger.xml ... as it does not exist, and the subsequent synchronous attempt reportedTool 'shell' timed out after 120000ms; native iOS execution and phone screenshot checks were unavailable. Hosted CI on this head is still pending.
gpt-6.1-sol | 𝕏
…e in turn - Announce workspaces:changed when a phone's chat gets a fresh hidden folder or one is released, so the desktop sidebar lists the chat. - New-chat links and Shortcuts see hidden records as one Chats entry and accept a chat that landed in a fresh hidden folder, refreshing workspaces before opening it. - A move releases the folder it left inside the same serialized turn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
Important
The new Chats Shortcut entry can be offered but rejected on devices with a legacy archive flag on its hidden home.
Reviewed changes in 1e561ebf3 since the previous Pullfrog review at 12cecf679, covering desktop invalidation, serialized release, and native Shortcut/new-chat-link integration.
- Added desktop invalidation. Broadcast workspace changes when Remote allocation creates or releases hidden records.
- Serialized folder release. Kept move cleanup inside the same assignment turn as allocation and persistence.
- Grouped Shortcut choices. Published one Chats entry in both native catalogs and allowed new-chat links to accept a newly allocated hidden workspace, refreshing workspace discovery when necessary.
- Verified focused behavior. Passed all 174 focused server tests, changed-host-service ESLint, and changed-Swift syntax parsing. The focused Android run returned
Tool 'shell' timed out after 120000mswithout assertion results; native iOS execution and phone screenshot checks were unavailable, and exact-head hosted CI was still pending.
gpt-6.1-sol | 𝕏
Both phones now prune archive flags for hidden No workspace records when the Mac's workspace list arrives, so Shortcuts, new-chat links and cached-chat opening agree that the Chats home is never archived. iOS link targets list the Chats home the same way as the catalog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
very-hermes-bot
left a comment
There was a problem hiding this comment.
Inline review — 2 finding(s) anchored to the diff. See the pinned summary comment for the overview.
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in 8f3f00f16 since the previous Pullfrog review at 1e561ebf3, covering the archive-state correction and its Shortcut/new-chat admission paths on both phones.
- Cleared legacy hidden-record archives. Updated both coordinators to prune persisted archive flags against ordinary workspace IDs when accepting live workspace lists, making Chats available to the existing admission checks while preserving archived projects.
- Aligned iOS target choices. Grouped active-instance new-chat targets into one Chats entry, matching the intent catalog and Android.
- Checked focused behavior. Traced archive pruning, persistence, catalog publication, and connected creation gates on both clients; both changed Swift files passed syntax parsing. The focused Android grouping and new-chat-consent run returned
Tool 'shell' timed out after 120000mswithout assertion results. Native iOS execution and phone screenshot validation remain unavailable here, and exact-head hosted CI is still pending.
gpt-6.1-sol | 𝕏
…Pad detail - POST /chats takes an optional noWorkspace: true. Only new phones send it (when the target is a hidden record), so the host splits only their chats into a fresh folder; older phones keep the workspace they named and never get a chat back in a record they haven't listed. Moves keep the workspace they name and still release an emptied hidden folder. - iOS split view never shows a hidden record's own page, and an opened Chats chat selects and expands the Chats group. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in 068d1fe6c since the previous Pullfrog review at 8f3f00f16, covering request-level compatibility and the iOS Chats selection/detail behavior.
- Made allocation opt-in. Added
noWorkspace: trueto the create contract and both native clients, preserving the named workspace for older clients and moves; updated the OpenAPI definition, API guide, and focused tests. - Aligned iOS navigation. Selected and expanded the shared Chats home when opening a hidden-record chat, while retaining the actual chat workspace for detail actions, and prevented hidden records from opening workspace-management detail pages.
- Verified focused contracts. Passed all 174 Remote/workspace tests, all 14 peer operation/response tests, changed-TypeScript ESLint, and syntax parsing for all four changed Swift files. Android verification was stopped during
:app:compileDebugKotlin, before test assertions, so no Android pass is claimed. Native iOS execution and phone screenshot validation remain unavailable here; exact-head hosted CI is still pending.
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.
New-chat links and Shortcuts map a requested or remembered workspace id through the Chats grouping before matching it, so a chat's own hidden folder resolves to the Chats home instead of an arbitrary workspace. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in 631e4a2dd since the previous Pullfrog review at 068d1fe6c, covering new-chat link target resolution on iOS and Android.
- Normalized hidden selections. Mapped explicit and persisted hidden-folder workspace selections to the shared Chats home before matching grouped candidates, preserving ordinary workspace matching and fallback behavior.
- Checked creation admission. Traced the resolved home through existing archive, pairing, and consent checks into opt-in No Workspace creation on both clients; all prior Pullfrog threads remain resolved.
- Verified available checks. Passed syntax parsing for the changed Swift file. The focused Android grouping/consent run was stopped during Gradle initialization before test results, so no Android pass is claimed. Native iOS execution and screenshot validation remain unavailable here; exact-head hosted CI is still pending.
gpt-6.1-sol | 𝕏
… shape check The New Workspace Chat accessibility label stays as it was on both phones (the reviewed iOS product-shell check names it). That check's createChat pattern now also matches the call that passes noWorkspace. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in e4e0cdd97 since the previous Pullfrog review at 631e4a2dd, covering the native label restoration and the adjusted iOS shipping check.
- Restored existing labels. Kept
New Workspace Chatas both phones' new-chat button accessibility label; Android also reuses that resource for its creation-sheet title. - Adjusted the shipping check. Allowed the existing
createChat(workspaceId: workspace.id…)pattern to match the additionalnoWorkspaceargument without changing creation behavior. - Verified available checks. Passed
npm run test:ios-releasewith 20 Ruby tests and 30 Node tests, plus syntax parsing for the changed Swift file. Native UI, screen-reader, and XCTest validation were not performed; Android compilation was not rerun for its string-only delta, and green exact-head hosted CI is not established.
gpt-6.1-sol | 𝕏
very-hermes-bot
left a comment
There was a problem hiding this comment.
Inline review — 2 finding(s) anchored to the diff. See the pinned summary comment for the overview.
…reates split - iPhone's scheduled task editor still lists the hidden No workspace folder a task already runs in, so it shows its name and saving keeps it, as on the desktop. - Only a flagged POST /chats gets a fresh hidden folder. The revision 50 and helper comments now say so, and the unused chat id argument is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in ca5503749 since the previous Pullfrog review at e4e0cdd97, covering scheduled-task workspace preservation and the create-only allocator cleanup.
- Preserved scheduled-task workspaces. Kept an existing task's selected hidden workspace available in the iOS picker and final review while continuing to exclude unrelated hidden records; extended the filtering test and updated the guides.
- Clarified create-only allocation. Removed the unused existing-chat argument from the allocator and its adapter, and aligned comments with the existing opt-in create behavior and unchanged move targets.
- Verified focused checks. Passed all 152 focused protocol/chat/workspace tests, ESLint on the changed TypeScript files, syntax parsing for all three changed Swift files, and the iOS release checks (20 Ruby tests and 30 Node tests). Native XCTest, SwiftUI type-checking, and screenshot validation remain unavailable on this Linux runner; exact-head hosted CI is still in progress.
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.
If the workspace re-read after creating a chat in a fresh hidden folder fails, iPhone now tells the person the chat was started on the Mac and will appear under Chats once it reconnects, instead of dropping it silently. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in 84486d603 since the prior Pullfrog review at ca5503749, covering the iOS created-but-not-opened failure path.
- Reported incomplete workspace discovery. Added explicit feedback in Home and Shortcut/link creation when the returned chat's workspace remains unknown after refresh, preserving request-authority checks and avoiding another create attempt.
- Retained the Home receipt. Accepted the created chat into Home's summary model before returning from that failure path, while leaving navigation blocked until its workspace is available.
- Verified available checks. Passed syntax parsing for all three changed Swift files and
npm run test:ios-releasewith 20 Ruby tests and 30 Node tests. Native XCTest, SwiftUI type-checking, and simulator screenshots remain unavailable on this Linux runner; the failed-refresh branch was inspected but not runtime-tested, and exact-head hosted CI is still pending.
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.
The sheet now opens with No Workspace, so its heading matches iPhone's "New Chat"; the + button keeps its "New Workspace Chat" description. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in 110407572 since the prior Pullfrog review at 84486d603, scoped to Android’s New Chat sheet heading.
- Aligned the visible heading. Switched the sheet to the existing
New Chatstring while preserving the plus button’sNew Workspace Chataccessibility description. - Checked the resource and surrounding UI. Confirmed the referenced string exists and the sheet renders a single heading; no local build, native UI, or screen-reader tests were run for this one-line change. Exact-head hosted CI is still pending.
gpt-6.1-sol | 𝕏
very-hermes-bot
left a comment
There was a problem hiding this comment.
Inline review — 2 finding(s) anchored to the diff. See the pinned summary comment for the overview.
…for the re-read - iPad split view only selects the Chats group's home while one of its chats is open; otherwise the selection falls to a workspace that has a page, so the detail column no longer sits on "Choose a Workspace". - Android waits for the workspace re-read before opening a chat that landed in a hidden folder it hadn't listed, so the sidebar has it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
Important
Android's new workspace-refresh wait can open the created chat under a different installation if the active pairing changes while waiting.
Reviewed changes in 82fb553d1 since the prior Pullfrog review at 110407572, covering iPad selection reconciliation and Android's post-create discovery ordering.
- Restricted split-view selection. Excluded hidden workspace records from reconciled selection unless they represent an open Chats conversation, and added focused fallback/group-selection assertions.
- Awaited Android discovery. Returned the workspace-refresh job and joined it in Home and external new-chat creation before navigating; identified the missing authority recheck after that suspension.
- Verified available checks. Passed syntax parsing for both changed Swift files and the iOS release checks (20 Ruby tests and 30 Node tests). The focused Android coordinator/consent/grouping run was stopped during Gradle initialization before assertions; native XCTest, SwiftUI type-checking, and screenshots were unavailable, and exact-head mobile CI remains pending.
gpt-6.1-sol | 𝕏
…aces After waiting for the workspace re-read, both create paths check that the pairing that made the chat is still the active one before opening it, so a switch to another Mac during the wait never opens the old chat there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in fb8739821 since the prior Pullfrog review at 82fb553d1, scoped to Android’s two navigation checks after workspace discovery.
- Rechecked external creation authority. Reused
valid()after the workspace-refresh wait, before changing the selected area or opening the created chat. - Checked Home’s original client. Added a client-identity check after the same wait to suppress navigation when the active client has changed, without retrying creation.
- Traced the surrounding behavior. Checked consent consumption, coordinator client replacement, and workspace-response fencing. The focused Android coordinator/consent run was stopped during resource processing before test assertions; the exact held-refresh/navigation scenario remains untested, and hosted CI is still pending.
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.
…-ifvf3g Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
very-hermes-bot
left a comment
There was a problem hiding this comment.
Inline review — 2 finding(s) anchored to the diff. See the pinned summary comment for the overview.
…Phone links re-read - A move out of a hidden folder answers with the moved chat even if the folder can't be released (logged; startup clears it later). - An iPhone chat link whose workspace it hasn't listed re-reads the Mac's workspaces once before deciding the chat is unavailable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in aace34425 since the previous Pullfrog review at fb8739821; the intervening merge of main left the net PR behavior unchanged.
- Preserved successful move receipts. Made hidden-folder release best effort after persistence, with a generic adapter warning and a focused test confirming that cleanup failure still returns the moved chat.
- Reconciled iPhone chat links. Added workspace discovery for an unknown chat workspace, retained the installation-authority and archive checks, and selected the shared Chats group before opening the conversation; updated the API guide accordingly.
- Verified available checks. Passed all 104 focused Remote chat/workspace tests, changed-TypeScript ESLint, Swift syntax parsing, and iOS release checks covering 20 Ruby tests and 30 Node tests. Native XCTest, SwiftUI type-checking, and screenshots were unavailable on this Linux runner; the new link sequence was inspected rather than runtime-tested, and exact-head hosted CI remains pending.
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.
…ted one A chat another phone or the Mac starts without a workspace gets a fresh hidden record that this phone hasn't listed, so its sidebar left the chat out until a reconnect. iPhone and Android now re-read the workspace list once per such id, and the chat shows under Chats. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
Important
The new iOS workspace-discovery task can cancel its own request and leave another device's chat hidden without another discovery attempt.
Reviewed changes since the prior Pullfrog review at aace34425, scoped to cross-device workspace discovery in 5254090cf and the intervening merge of main.
- Added missing-workspace discovery. Triggered workspace re-reads from Android's summary updates and an iOS shell task, with per-installation attempted-ID tracking and connected-state gates.
- Extended projection coverage. Added both platforms' missing-ID and grouping assertions, and documented discovery of chats started on other devices.
- Verified available checks. Passed syntax parsing for all three changed Swift files and the iOS release checks: 20 Ruby tests and 30 Node tests. The focused Android test command returned
Tool 'shell' timed out after 120000mswithout assertion results; native iOS lifecycle execution was unavailable, and exact-head hosted CI remains pending.
gpt-6.1-sol | 𝕏
…iew task Marking the ids changed the .task(id:) identity, which cancelled the task while it awaited the workspace read. The read now runs in its own task. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
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.
…n error Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes since the prior Pullfrog review at 5254090cf, covering the iOS discovery-lifecycle fix, the subsequent cancellation-handling correction, and the intervening merge of main.
- Separated discovery ownership. Started the workspace re-read in an independent
Task, so updating the attempted-ID set no longer lets SwiftUI task cancellation abort discovery. - Preserved connection state on cancellation. Returned silently for cancelled workspace reads while retaining existing handling for real failures and installation/generation checks for responses.
- Verified available checks. Passed syntax parsing for both changed Swift files and
npm run test:ios-releasewith 20 Ruby tests and 30 Node tests; native XCTest, SwiftUI type-checking, and the held-response lifecycle test were unavailable on this Linux runner, and green exact-head hosted CI is not established.
gpt-6.1-sol | 𝕏
…en phones first see the choice Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in f9ea872b2 since the prior Pullfrog review at e4ae753cf, scoped to Recents labels on both phones and the discovery documentation.
- Aligned Recents labels. Used the existing
Chatsgroup-name constants for hidden-workspace conversations on iOS and Android, preserving ordinary workspace names and existing missing-workspace handling. - Corrected discovery guidance. Documented that startup converts only a folderless default workspace; installations whose default already has a folder expose the phone choice once a hidden record exists.
- Verified available checks. Passed Swift syntax parsing and traced both label paths and the host migration condition. Native builds, XCTest, Android tests, and rendered-label checks were not run for this delta; exact-head hosted CI remains pending.
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.
…en chat shows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes in 49653e593 since the prior Pullfrog review at f9ea872b2, scoped to Recents search on both phones.
- Aligned search with displayed labels. Routed Recents filtering and row labels through each platform's
AidenNoWorkspace.label, so hidden-record chats matchChatswhile ordinary workspace and chat-title searches retain their behavior. - Extended behavioral coverage. Added expected-result assertions to both existing projection suites for matching
chatsand excluding the hidden record's underlyingNo workspacename. - Verified available checks. Passed syntax parsing for all three changed Swift files. The focused Android test command returned
Tool 'shell' timed out after 120000mswithout assertion results; native XCTest and rendered UI checks were unavailable, and exact-head hosted CI remains pending.
gpt-6.1-sol | 𝕏
#693 took revision 50 (attachments:raw). This PR claims 51 across the host constant, fixture, OpenAPI, iOS, Android, tests and docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes since the previous Pullfrog review at 49653e593, scoped to the merge of main and the No Workspace contract-revision update.
- Moved No Workspace to revision 51. Preserved raw uploads at revision 50 and aligned the global host revision, shared fixture, iOS assertion, OpenAPI descriptions, native comments, and documentation; discovery still uses the workspace marker rather than a revision gate.
- Checked merge integration. Confirmed the merged root test chain retains every step from both parents; all six prior Pullfrog finding threads remain resolved.
- Verified focused checks. Passed all 284 focused Remote/workspace tests, scoped ESLint, Swift syntax parsing, and iOS release checks covering 20 Ruby tests and 30 Node tests. Native XCTest and Android builds/tests were not rerun for this delta; exact-head hosted CI remains pending.
gpt-6.1-sol | 𝕏

What this does
Follow-up to #667. iPhone and Android now treat chats without a workspace the way the desktop does.
Sidebar: every No workspace chat sits in one Chats group, instead of a "No workspace" section per chat. In the Recents layout, such a chat is labelled "Chats" and found by that name in search.
New Chat: offers No Workspace first ("Use your global settings. Aiden keeps a private folder for this chat."), above Existing, New and Managed Scratch.
Hidden folders stay hidden: they don't appear in any of these:
A Chats group has no workspace-settings link.
Exceptions:
Old archive flags: a "No workspace" section archived on an older build comes back under Chats, because the Chats group has no Unarchive. Phones drop those flags when the Mac's workspace list arrives.
How it works
WorkspaceandHostFeedWorkspacecarry an optionalnoWorkspace: truemarker, and a phone that sees one knows the host supports the feature. Phones are at the 32 feature-token cap, so there is no/serverfeature.defaultworkspace had no folder turns it into the hidden home on first start.defaultalready had a folder lists its first hidden record once a No workspace chat is started on the desktop. Until then, phones offer no No Workspace choice.defaultrecord, else the oldest hidden record bycreatedAtand then id.POST /chats {workspaceId: home, noWorkspace: true}and then send the message.workspaceForNoWorkspaceChatgive the chat a fresh hidden record, when the target already holds a chat.workspaces:changedwhen it makes or releases a hidden record, so the desktop sidebar lists a phone-started chat right away.GET /workspaceswhen the receipt names a workspace they haven't listed yet.GET /workspacesonce for that id while connected, so the chat shows under Chats without a reconnect.maintoday.Protocol revision
Revision 51 (
AIDEN_REMOTE_NO_WORKSPACE_CONTRACT_REVISION), claimed at merge after #693 took 50 (attachments:raw). The host constant, OpenAPI, fixture (contractRevision51), iOS, Android, tests and docs all say 51. #648 also had a provisional claim and moves to the next free number after this lands.Changes
workspace-application-service.ts:workspaceForNoWorkspaceChat, plus achatIdsIndependency.aiden-remote-chats.ts:parseCreateacceptsnoWorkspace: true.noWorkspacetarget only with it.assigningNoWorkspaceserializer.aiden-remote-service-main.ts: the adapter and theworkspaces:changedbroadcast.aiden-remote-workspaces.ts: the projection marker.aiden-remote-protocol.ts,openapi.json(both workspace schemas plus thePOST /chatsrequest body), and the fixture (a third workspace, thedefaulthome).AidenWorkspace.noWorkspace, andAidenNoWorkspace(home, choices withkeeping:, unarchived, grouped, groupID, label, unlistedWorkspaceIDs).createChat(noWorkspace:).AidenWorkspaceNavigation.selectableIDs), Scheduled Tasks, the intent catalog, the link and navigation-request paths, archive pruning, and the unlisted-workspace re-read inAidenWorkspaceShellView.AidenRemoteCoordinator.refreshWorkspaces()ignores cancellation.scripts/check-ios-shipping-target.test.mjs: the existingcreateChat(workspaceId: workspace.id…)pattern now also matches the call that passesnoWorkspace.AidenWorkspace.noWorkspace,AidenNoWorkspace(includinglabelandunlistedWorkspaceIds) andcreateChat(noWorkspace =).MainActivity, archive pruning, strings, and the unlisted-workspace re-read inAidenWorkspaceHomeViewModel.refreshWorkspaces()returns its job, so the create paths can wait for it.docs/aiden-remote-api-v1.md: workspace allowlist, plus a new "Chats without a workspace on phones, revision 51" section.docs/no-workspace-chats.md(Platforms),docs/aiden-on-the-go-remote-access.md, README andios/CHANGELOG.md.Known follow-up (not in this PR)
A phone fork of a No workspace chat still copies into the source chat's hidden folder, as it does on
maintoday. The desktop gives such a fork its own folder on first send from the desktop. A fork that is only sent from a phone keeps sharing the folder; nothing is lost, because the folder is released only after its last chat goes. Splitting forks needs a change in the fork service, so it's left for a follow-up.Tests
npx tsx --test main/services/aiden-remote-{protocol,host-feed,chats,workspaces,router,platform-contract}.test.ts main/services/workspace-application-service.test.tsnpm run test:ios-releasenoWorkspace: falseis refused.AidenChatTests:choices(keeping:)keeps a scheduled task's hidden folder;AidenRemoteClientTests:noWorkspaceis sent when asked and omitted otherwise.AidenChatRowStatusTest: the Chats grouping and the home fallback;choices; no home on an older host; archive flags ignored; Recents search by "Chats"; the unlisted-record re-read.AidenRemoteClientTest: the request flag.AidenBotContractTestreads the third fixture workspace.AidenChatTests.testForegroundProbeFindsRunsWithoutTheRosterAndStopsInTheBackground("Timed out waiting for live foreign output") failed once on head 1104075. This PR doesn't touch the chat view model or its probe, and it is a known timing flake (first seen on Show running subagents in a pill above the composer #637). Run: https://github.com/sambitcreate/aiden-agent/actions/runs/41364611520/job/125022231949. Not re-run: the next push started a fresh run, which passed.main/services/follow-through/background-job-tool.test.ts:58"start returns the job id and early output…" got "No output yet." instead oflistening on 5173(its 300 ms start wait is short on a loaded runner), macOS Desktop tests (core-git), head 3769c52. This PR doesn't touch background jobs. Run: https://github.com/sambitcreate/aiden-agent/actions/runs/41385879608/job/125086741771. Not re-run: the next push (5254090) started a fresh run.Screenshots
Skipped for this PR at the owner's request: there is no iOS simulator or Android emulator here.
🤖 Generated with Claude Code
https://claude.ai/code/session_018VA6RFqDNj2JR5gEfeQrPB