Repository navigation
cnx-ios: fix full-verify defects D1–D14 (Chief, teams, previews, Codex default, polish) - #22354
azooz2003-bit wants to merge 31 commits into
Conversation
… no Chief placement in the launch) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…socket) A DEV or tagged build keeps its Chief at ~/.cmux/chief/<bundle id>, but the app never set CnxHostLaunch.chiefSession, so hostd dialed the default home's owner and refused every phone chief channel. The wiring now passes the app's ChiefConversationOwner session (always) and its socket once connected (CNX_CHIEF_SOCKET), for tagged and Release builds alike. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… keeps the message (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…T /v1/teams) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… key; phone test (red) Stack refuses client-side team creation in both projects (client_team_creation_enabled is false), so a team made from the phone never existed. The Worker now creates it as the caller with the server key and says team_creation_unavailable when it has none. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…reads Stack's list Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e written then stays The conversation's first-load spinner never ended without the Mac's Chief, and its composer cleared and dropped a message sent before Chief connected. Chief's bar now shows the reason (in plain words, hostd's text goes to the log) with Try Again, which opens the chief channel again. The send button goes through a gate: until Chief takes sends the text stays in the composer and an alert offers Try Again or Send When Chief Connects (the outbox). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iOS-only), tests there Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ers, never home (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ntcwd roots), never home or above Files and Artifacts lists files the phone's chat edited in its workspace folder, but hostd's file service only knew the Chat Folders, so every preview was refused. A file outside the Chat Folders is now checked against the folders of the tabs the Mac's daemon lists (the same folders the app shares with phones for agent chats), dropping /, home and its ancestors as acpmux does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(cnx-ios D4) A Codex account without GPT-6.1 Sol accepted session/set_model and then failed every prompt, so a new chat (the phone's Default) never worked. The catalog default now applies only when the harness lists it (or lists nothing, as Claude Code); otherwise New Agent Chat says no start model and the chat runs the harness's own default, its config's model. A soft start model this session's harness does not list is skipped with start_default_skipped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…named, model refusals read plain (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…reads plainly; model menu in a running chat
- New Agent Chat on a named agent with Default starts on the Mac's own last
pick for that agent, and does not name a default the Mac's account does
not list.
- A refused prompt's raw JSON error ({"type":"error","status":400,...})
becomes a sentence ("Codex can't use this model with the Mac's account.
Pick another model."), in the toast and on the failed-turn card.
- The composer's model menu shows whenever the agent lists models, even when
the running model is not among them, so a chat can switch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… a second tab request says so D8: a tab request while another opens returned silently; it now shows "Still opening ..." and every request is logged with its option. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nect works); plain diff and Feed wording - D7/D11: while loading, the skeleton was an overlay over the List and drew over the Mac section lines and took their Connect taps; with Mac lines it now sits below them as a non-interactive row. - D6: a snippet edit's rows read without a line number, never "line 0". - D12: an empty terminal finished event reads "Finished its turn in the terminal..."; an Allow reads "Allowed" / "Allowed once", not "Allowed: Allow". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…me previews the newest reply; VoiceOver's time matches "now" Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ew each Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… harness lists catalog ids A saved pick is never skipped. A harness whose reported ids are not the catalog's (Claude Code's aliases) keeps the catalog default; DSH route ids match as model_catalog::resolve accepts them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…compare in the stored spelling as acpmux does Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ce; voice and + gated before Chief connects; team creation limiter; copy nits - LiveCoordinator.startChief ends a Try Again on every exit (defer) and a retry while one opens does nothing. - Before Chief connects, the record and + buttons are off too (they clear and drop like Send); package views are looked up once. - POST /v1/teams: its own TEAM_LIMIT (3 a minute), no control characters. - A capacity error naming the model stays a capacity error; setext and thematic breaks keep the Feed's web renderer. - http.test.ts expected API 0.8.0 while wrangler says 0.9.0 (stale on base). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Correctness-first review (fresh subagent) of 3e6a2b5..186b62f: no blockers. Findings and resolution:
|
|
Found 14 test failures on Blacksmith runners: Failures
...and 4 more test failures. View all on Blacksmith
|
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Probably yours: CI failed on
Matched log linesNot re-run automatically: Written by
|
Results table for D1-D14 on fleet build cnx-e2e-4a31def5 and a Demo phone build of the same SHA; the fresh verifier's fv.py/fvr.sh driver, with FV_ENV launch variables for the app. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Again; plain refusal copy; onboarding team name not autocorrected - D2: after Try Again connected, the open Chief screen kept drawing the old store and spun; the screen is now keyed by the session's store. - D2: hostd closing the chief channel (owner socket missing) reads "Chief isn't running on <Mac>" instead of "didn't answer (daemon channel closed)". - D5: the onboarding Create your team field was missed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Live recheck over the real link (simulator + hidden tagged Mac rig Pass: D2 Chief loads (hostd gets CNX_CHIEF_SESSION/SOCKET), D2 unavailable bar, D3, D9 (inside folder opens, ~/ file refused), D4 Default (plain "Default", full turn ran), D8 (Claude tab opens), D5, D7/D11, D10 (16.8 hitch ms/s vs 91.3; p99 34.6 vs 49.2 ms; rig load lower than before), D12, D14. Fixed after the recheck (ffbcd54, not re-run live): Try Again left the open Chief screen spinning on the old store; refusal copy read "daemon channel closed"; onboarding Create your team field still autocorrected. The review fixes 903b7ac, e96061c, 186b62f were also not in the live build. Open: D1 live (the Workers need STACK_SECRET_SERVER_KEY; none deployed); D4 model pill does not appear in a running Codex chat (acpmux appears to list no models for the codex harness; needs a look at |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ac ran is withdrawn (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ft the Mac ran leaves the composer After a link drop, session/prompt's reply was lost although the Mac had run the prompt, so it came back into the composer and Send would run it twice. The prompt's promptId now travels with the returned draft; sending the same text again reuses it with resend (acpmux runs each id once), and when the replayed transcript shows that id ran or queued, the draft is withdrawn from the composer. Also updates two preview refusal tests for the D9 hint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…/attach's session detail (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ch, so a running chat has its model menu The phone took models and modes only from later session updates, which a Codex chat never sends after it starts; acpmux keeps them in the session detail _acpmux/attach returns. A config option of category model also serves as the list. The menu's check follows a pick. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tachments count and leave with a withdrawn draft; Chief keeps unsent text across a rebuild; attach state after the page Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Round 2 (coordinator follow-up), commits after 186b62f:
Second fresh review (correctness first) of 186b62f..a553ef2: no blockers; should-fix items (seen-running draft, attachments in the match/withdrawal, Chief text lost on rebuild, attach state applied before older records) and the Close All count nit are fixed in 5180efa and 087c69c (head d79ea22). Not fixed: knownModels doesn't follow a model change made through a config option (check mark only). Live re-run on the new head is in progress; results go to cnx-ios/verify/fixes-r1-20261020.md. |
|
Live pass 2 (real link; Mac rig fleet job 8ddc14f818104818f5d51e2e, tag cnx-e2e-a553ef2b; phone Demo build of d79ea22 on mini-cmux7s, Xcode 26.6), results in the Second pass section of cnx-ios/verify/fixes-r1-20261020.md (e9e9bf0):
|
Summary
Fixes the defects a fresh verifier found in the cmux-next iOS app at 3e6a2b5 (cmux INTERNAL 1.2.0); report:
cnx-ios/verify/full-verify-app-20261019.mdon feat-cnx-ios-fullverify-app.CNX_CHIEF_SESSION, andCNX_CHIEF_SOCKETonce connected), for tagged and Release builds. The phone shows "Chief isn't available" with the reason and Try Again instead of an endless spinner.client_team_creation_enabled: false). New Worker routePOST /v1/teamscreates the team with the project's server key; the phone uses it and rereads Stack's list.fileservice also reads the folders of the Mac daemon's tabs (the agentcwd roots acpmux already shares), dropping/, home and its ancestors. SECURITY.md updated.CmuxTabsKit and CmuxConversation are unchanged. No transport files changed.
Tests
cnxkit-test.sh): ChiefUnavailableTests, ChiefFailureTests, ServiceTeamCreationTests, AgentCatalog*, TurnFailureCopyTests, LastAnswerTests, RelativeStampSpokenTests, FeedPlainTextTests, TerminalFeedTests, FeedPendingTests: pass.cmux-ci run): IPhoneHostChiefTests, CnxHostTests.a_catalog_default_the_harness_does_not_offer_is_not_used.test/teams.test.ts;http.test.tsexpected API 0.8.0 (stale on base, wrangler says 0.9.0).Review
Correctness-first subagent review found no blockers; should-fix items (HOME fallback in hostd, stored-spelling compare, acpmux skip limited to catalog defaults, Try Again stuck, voice/+ send paths, team-creation limiter) and nits are fixed in later commits.
Open
STACK_SECRET_SERVER_KEYfor the dev and prod Stack projects, and theTEAM_LIMITbinding deploys with them. Not deployed here.cnx-ios/verify/fixes-r1-20261020.md.Mac-side counterpart against feat-cnx-ios-macnext: see linked PR.
Changelog
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Fixes the 14 defects a full verification found in the cmux-next iOS app, across the phone app, the Mac's host daemon, the acpmux harness hub, and the backend Worker.
Chief on the phone now says why it's unavailable instead of an endless spinner, offers Try Again (which ends on every exit and never opens Chief twice), and keeps a message written before Chief connected; a prompt reuses one acpmux id on resend so the Mac never runs it twice, a returned draft for a prompt the Mac was already running is withdrawn from the composer, and unsent text survives a rebuild. The Mac app hands hostd its own Chief owner and socket, so DEV and tagged builds serve the right Chief.
Team creation goes through the Worker (
POST /v1/teams) with the project's server key instead of Stack's refused client call, and a per-user rate limit with the phone's Try Again shown when it fails; creation is rate-limited to 3 a minute. File previews like the agent-chat workspaces (never/, home or its ancestors), a catalog default model applies only when the harness offers it (never a saved pick), and a running chat's model and mode menus come from the session detail_acpmux/attachreturns. Close All Tabs now asks first, like Safari.Smaller fixes: autocorrect and auto-capitalization off in code-like fields, the loading skeleton no longer blocks Mac rows, short feed rows draw as native text, plain-English failure messages replace raw JSON, VoiceOver reads times and lines correctly, and copy is clearer. Tests added for each fix; no transport files changed.
Written for commit e9e9bf0. Summary will update on new commits.