Skip to content

fix: integrate upstream reliability fixes (Sep 30) - #55

Merged
nickrroberts merged 39 commits into
mainfrom
sync/upstream-reliability-20260930
Sep 30, 2026
Merged

nickrroberts merged 39 commits into
mainfrom
sync/upstream-reliability-20260930

Conversation

@nickrroberts

Copy link
Copy Markdown
Collaborator

Control Plane misses several upstream reliability fixes since the last sync (#17). This batch cherry-picks seven upstream commits with git cherry-pick -x, one commit per upstream PR. All seven applied without conflicts; no fork code was changed.

Skipped:

Validation (local, no remote CI):

  • client-runtime: 1,690 tests passed.
  • web: 9 failures in 2 files (connectCliAuth, SnapShotCoordinator), the known failures on main.
  • mobile: 4 failures in use-composer-drafts.test.ts plus the react-native Flow parse error; same on main (verified by running the file on origin/main).
  • server: 52 failures in 11 files. 51 are identical by name on origin/main (ThreadSettlementReactor storage cleanup, CodexDriver/providerMaintenance npm, Cursor skills, UsageService and others). The 52nd (server.test.ts worktree bootstrap for a non-repository) passed when rerun alone; it failed under load average ~200.
  • Typecheck: client-runtime, web, server clean; mobile has the same 10 errors as main.
  • Lint: 0 errors; warnings only, none new.

🤖 Generated with Claude Code

nickrroberts and others added 16 commits September 29, 2026 15:24
The iOS splash reused the square app icon tile. Since the Control Plane
rename (0be7513) that tile is fully opaque white, so the splash showed a
white box around the jet, most visibly on the dark (#0a0a0a) splash.

Render a transparent jet per variant from the mark SVGs in the existing
icon export script and point expo-splash-screen at it. The jet keeps the
size it had inside the tile. Android artwork is unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
fix(browser): recover thread automation after host timeout
fix(mobile): transparent jet on the iOS splash screen
fix(server): let coordinators settle agents after follow-ups
Coordinators and standing agents can start one-off agents on other machines
linked to their server. Placement (this machine, one machine, or balanced by
load) is a server-owned setting under Settings > Connections > Agent machines.
Results, read, stop and send work across machines through a registry and a
bridge that pushes results into the asking thread.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
cp_agent_settle now works on a remote agent: it settles the peer thread when
no request is in flight, archives on request, and marks the record settled.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Follows the coordinator-owned settling rule: the bridge no longer settles a
remote agent after its result. cp_agent_settle does it, on the peer.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
feat: start agents on linked machines per server settings
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Home only offered New Project once an environment's socket reached
connected, even when the cached server config already advertised
Projects. The cached Projects rendered on the first frame and New
Project popped in about half a second later, shifting the list.

Projects support now comes from the cached or live config. Only a
connected server's config can mark Projects unsupported.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
fix(mobile): list New Project with cached Projects on cold launch
Drop the per-Project settled toggle and rows from the Home list and iPad
sidebar. The Settled screen gets a Projects area above the Tasks groups,
one group per Project, newest settled first. View Settled is now in the
Android and iPad sidebar menus too, and the unused settled toggle helper
in client-runtime is removed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Sep 30, 2026
…ttled-view

Mobile: settled Project agents only on the Settled screen
@nickrroberts
nickrroberts force-pushed the sync/upstream-reliability-20260930 branch from 938bca3 to c738520 Compare September 30, 2026 13:33
nickrroberts and others added 10 commits September 30, 2026 07:33
A "Try demo" button on the first-run screens (Home empty state, iPad
empty detail, Add Environment sheet, New Task empty state) opens a local
"Demo Mac" environment with sample Projects, Tasks folders and threads.

The demo environment is a platform registration served by an in-process
DemoServer through a new ConnectionDriverOverride hook, so the real
connection supervisor, shell and thread state, and screens run unchanged
with no network calls. Sends and approvals get canned local replies;
unsupported requests fail quietly with a demo message. A persistent Demo
banner offers Exit demo, which clears the sample data and opens the
connect flow.

Also fixes the Add Environment sheet showing an error on open: it read an
app-wide error that failed sends and other flows also write, so it could
open already showing a stale or unrelated failure.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pairing with a host that is offline or answers with a server error (the
stopped App Review server returned 503) showed raw transport or status
text. The Add Environment screen now says the computer could not be
reached, what to check, and that Try demo works without one. Code,
permission and compatibility failures keep their specific message.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Build 14's review server returned 503 from /.well-known/t3/environment,
which surfaced as "returned undeclared status 503" with no way forward.

- Undeclared statuses keep their transient class (saved environments still
  reconnect on web and mobile) but split by reason: 5xx is
  remote-unavailable, 4xx is endpoint-unavailable.
- The status error records Retry-After.
- Pairing retries 502/503/504 twice over about 20s, honoring Retry-After
  (capped at 12s).
- Mobile maps each reason, and a rejected pairing code, to plain text,
  with Try again and Try demo buttons under the banner.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The review server cold-starts in about 14s, but the pairing descriptor
request times out at 10s, so pairing failed before it ever answered.

- Pairing now retries descriptor timeouts as well as 502/503/504, within
  one 45s budget. Each attempt's timeout is capped to the budget left,
  Retry-After is honored (capped at 12s), and anything else still fails
  at once.
- PairingConnectionInput takes an optional onWaiting callback. Mobile uses
  it to show "Waking up the server..." with a note that it can take up to
  45 seconds. Web does not pass one and keeps its current pending state.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A reviewer who relaunches the app lands back in the demo until they tap
Exit demo. The flag is a file in the documents folder, read synchronously
at launch, so reinstalling starts outside the demo.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
feat(mobile): demo mode for App Store review
Drop the desktop-browser exceptions from the agent, coordinator and Codex
browser instructions, and tell agents to ask the user to sign in once in the
Control Plane browser panel instead.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Require agents to use only the built-in Control Plane browser
…ception

fix(server): allow explicitly requested desktop browser use
nickrroberts and others added 12 commits September 30, 2026 08:51
Adds an orderKey (fractional index) to the project record, written by a new
project.reorder command on the owning server and delivered through the shell
like projectIcon. Web reads and writes it (drag and Alt+Arrow), seeds it from
the saved local order once, and mobile applies it to Projects and Tasks
folders. Mobile also draws Lucide glyph icons and workspace icons on Home.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ument ordering

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
feat: sync Projects and Tasks folder order across clients
The assistant message is wrapped in a long-press Pressable, which takes the
JS responder on every touch. Fabric's ScrollView refuses to cancel content
touches while an ancestor is the JS responder, so the horizontal scrollers
around tables and code blocks never started a drag and wide content was
clipped at the message edge.

While the content overflows, the scroller's content view now claims the
responder itself so the Pressable never does. Content that fits still leaves
the long press to the message. Wide blocks also fade into the surface at any
edge that hides content.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…croll

fix(mobile): let wide markdown tables and code scroll horizontally
… offline (pingdotgg#13577)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit a107f8a)
…gdotgg#13684)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 8aa5be2)
…th failed repacks (pingdotgg#13812)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 95030dc)
…ingdotgg#13767)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 9151ea4)
… before submission (pingdotgg#12003)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
(cherry picked from commit e518866)
…ncy improvement (pingdotgg#13884)

Co-authored-by: GPT-6 Astra <noreply@openai.com>
(cherry picked from commit ed57bed)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
(cherry picked from commit 050cfad)
@github-actions

Copy link
Copy Markdown

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for b3e3266.

This comment will update automatically after the next completed run.

@github-actions github-actions Bot added size:XXL and removed size:L labels Sep 30, 2026
@nickrroberts
nickrroberts merged commit 54925e2 into main Sep 30, 2026
10 of 21 checks passed
@nickrroberts
nickrroberts deleted the sync/upstream-reliability-20260930 branch September 30, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants