Skip to content

feat: sync upstream 580b526758 keeping Ada configuration - #246

Merged
jayleaton merged 1043 commits into
mainfrom
sync/upstream-580b526758-20261114
Nov 14, 2026
Merged

jayleaton merged 1043 commits into
mainfrom
sync/upstream-580b526758-20261114

Conversation

@jayleaton

@jayleaton jayleaton commented Nov 14, 2026 •

Copy link
Copy Markdown
Owner

Brings Ada up to upstream pingdotgg/t3code 580b526758 (last sync was d2c25950b4) and merges current main (#241, #244, #245). Ada's own configuration stays as it was. The upstream merge is a real merge commit (3e39d765fe). Every conflict was resolved by intent, never by blanket ours/theirs.

What stays Ada

  • Brand. APP_NAME is "Ada", the iPhone home-screen name is "Ada Agents", and the Pip logo, README and slogan are unchanged. App and bundle IDs are unchanged. 27 new upstream "T3 Code" strings that merged cleanly were caught by the brand guard and changed to APP_NAME/Ada. They were in desktop, server, web and Muse status text, the vite bootstrap title, and the user docs. An orphan "T3 Account" translation key was also removed.
  • Repo and releases. CLI_RELEASE_REPOSITORY is jayleaton/ada, and install.sh/install.ps1 are unchanged. The fork nightly and Windows-installer workflows, windows-package-names.ts and the artifact naming are untouched. Upstream's new npx t3@latest hints were replaced, so the SSH tunnel fallback points at Ada's install.sh and the desktop home-owner dialog shows Ada's runnable command.
  • Privacy. Telemetry is still off by default, mobile Observe still points at observe.invalid, and the hosted-app default stays opt-in (fix: Ada no longer reports to upstream T3 services #245).
  • Product behavior. Notifications are top-level only (fix(web): only top-level chats notify #243). Mobile push goes direct to Expo. Scheduled tasks stay unified. The headless/gateway fixes and Tailscale-only remote are kept. Agent presets are kept, including fix(agents): Captain listeners always run on Haiku #244's Haiku-only Captain listeners. Mobile EAS config and eas.json are unchanged.
  • Migrations. Upstream migrations keep upstream ids (through 91). The 24 fork migrations stay on their own ledger. The runner merge keeps the fork's two-ledger schedule and adopts upstream's "started" log line plus one transaction per migration with progress. scripts/upstream-migrations.json is re-synced. A copy of a real fork database (485 MB) migrated cleanly through upstream 82–91.

Conflicts and how they were resolved

Upstream mechanisms adopted because they are better

These are the SQLite writer worker, beforePosition paging, restoreMissingWorktree, listActiveThreads, historical PR handling, PullRequestWatchService, and the live home-owner dialog. Also adopted: useOpenLocalWorkspace, the chunk reload guard, canResumeThread, isServerNetworkAccessible, the channel label helper, the shell's early HTTP load, routeKeepsItsHost, the peer probe, resolveLauncherPath, the tagged-source build version, and the preview listening handshake.

New upstream outbound, telemetry and Connect code removed

None of it is stubbed. scripts/check-removed-connect is green.

  • Connect device approval (a2edd28) and everything that depended on it: auth contracts and endpoints, the CLI, the web/mobile approval coordinators and settings, the revoke dialog, clerkLoadFailure, the banners, and migrations 90/91. The migrations stay registered so upstream ids line up, but nothing reads or writes their tables.
  • Hosted pieces: Clerk sign-in and auth shell, cloud/relay/managed tunnels and their relay test, hosted MCP apps (Poke, Claude, ChatGPT and others), the desktop relay-tunnel restart marker, the relay tracing defines, the credentials-changed account relist wakeup, and the T3 Account row.
  • Analytics call sites that remained after fix: Ada no longer reports to upstream T3 services #245: the MCP tool analytics wrapper and handoff block in McpHttpServer, client analytics props and owners in ws.ts, the DelegatedTaskAnalytics and ProviderTurnAnalytics layers, turn analytics in RunExecutionService, and two analytics tests in core.test.
  • Dead code: apps/mobile/src/state/auth.ts, which chore: delete dead code, unused deps, and duplicate helpers pingdotgg/t3code#9129 had deleted and the merge brought back.

gt-react/gt-react-native i18n uses bundled translations with no project id, so it makes no runtime network calls.

Custom UI (pingdotgg#35247)

Captures are in a secret gist. They come from the web client of vp run dev on seeded dev state, driven by a real Claude Haiku 5.5 turn calling t3_theme_set. Replay can't call MCP tools, so it couldn't drive this.

Before (default) After the agent's theme After the agent's revert
before after revert

The prompt was "change the accent colour to teal (#0d9488) and add a small CSS tweak that gives the chat header a 2px solid bottom border in that teal". The agent published ada-teal (canvas #ffffff, accent #0d9488, CSS on [data-chat-header]) and switched to it. Asked to go back to the default, it set t3-code, which restored the default palette and the sidebar art.

  • Surfaces. Web and desktop are supported. Mobile isn't, because upstream doesn't support it: mobile keeps its own themes and ignores environment themes.
  • Ada naming. The tool descriptions, the agent theme guide, the theme eval cases and docs/user/appearance.md say Ada and ada theme set.
  • Ada default and Pip. Publishing a theme never changes the default. The Pip logo shows under every theme. The sidebar art shows only under built-in themes, which is upstream design.
  • Persistence. Agent themes are saved as files in the server's themes directory, and the default lives in server settings. Clients apply it once per generation, including after a reload or reconnect.

Conflicts with fork changes, and gaps fixed:

  • The feature's own files merged cleanly. The fork-specific work was the rebrand of the model-facing text and docs/user/appearance.md.
  • Revert to default was impossible. The standard look t3-code was not a selectable id, so agents could only switch to a built-in theme such as T3 Chat. t3-code can now be selected through the tool and ada theme set, but never published. The web client maps it back to the standard look and keeps the user's light/dark mode. Tests are in environmentTheme.test.ts.
  • "Change the accent" turned Ada pink. On the first run (capture), Haiku put the accent only in colors. A colors-only theme starts from the stock pink palette, so Ada turned pink with a teal border. The guide now says to seed canvas and accent together, and that t3-code returns to the default look. On a rerun with the same prompt, Haiku seeded both and the whole palette followed. The new accent-change-seeds-canvas-and-accent eval case builds (--dry-run), but I didn't run it: this checkout has no Anthropic API key for evals.

Checks

  • check:changed, run against origin/main with TMPDIR=/tmp and vite-plus Node 26. Format, lint, knip and typecheck failed on the first run. All of those failures came from the merge, and they're fixed in c330c3384e. On the rerun, format, lint (warnings only), knip and typecheck pass in every package touched, including evals. The test stage (876 files) hit the 900-second local timeout, so CI owns the full suite. Focused runs were green: about 1,700 server and 2,400 client tests during conflict work, plus the files touched afterwards.
  • Fork guards: 31/31. Upstream migrations: 91 upstream plus 24 fork. check-removed-connect: green. Brand guard: 2/2. CI node:test scripts: green.
  • Real client: one integrated test-t3-app pass on isolated, seeded dev state, covering the theme flow above.
  • Full server and desktop suites: run in a Davit box (davit box run -- vp test run). Server: 8,459 passed and 20 failed in 6 files. Two of those files are fixed here: fork tests updated for upstream's thread.visit-recorded event and favicon missing-root cache (fix(server): favicon lookups for a missing project folder are cached pingdotgg/t3code#34905). The other four (ServerBrowser, ServerBrowserPage, ProjectionStore, AntigravityInstallation) pass locally and on CI, so they're specific to the box environment. Desktop: 1,067 passed. Six files couldn't load because the box had no Electron binary.
  • CI failures on the first push, all fixed here:
    • Server typecheck: a layer-wiring warning.
    • Tests still written for upstream or T3 Code behaviour. They now match Ada's branding and the fork rules kept above: settlement, auto-settle 0, no compaction before send, and the ada install: prefix.
    • Upstream mechanism changes: PR-watch baselining and the Linux icon write.
    • A settings mock missing useClientSettings.

Model: Claude Opus 5.5 with Claude Code subagents for the conflict slices.

🤖 Generated with Claude Code

juliusmarminge and others added 30 commits November 12, 2026 19:54
… slow (pingdotgg#26127)

Co-authored-by: Elliot Drel <elliotdrel@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Tabonx and others added 17 commits November 13, 2026 17:58
…etect (pingdotgg#31170)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…ingdotgg#31146)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…ged revalidation (pingdotgg#23775)

Signed-off-by: Shaswat Raj <shaswat340@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…ell (pingdotgg#33064)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: lyn1dev <lyn1dev@users.noreply.github.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
… local port (pingdotgg#24247)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
…pingdotgg#23743)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: only21mil <only21mil@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Real merge of 1034 upstream commits since d2c2595, resolved by intent so
Ada's brand, release repo, privacy defaults, push, scheduled tasks, agent
presets and fork migration ledger survive. Upstream T3 Connect device
approval, relay, cloud and hosted-app wiring stay removed; agents can now
revert an environment theme to the default look.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream changes to the analytics, Observe and hosted-app code that #245
deleted stay deleted: the MCP tool-analytics wrapper, ws client analytics
props, delegated-task and turn analytics layers and their tests are removed,
and hosted thread-link parsing stays out while upstream's sturdier
t3-thread link parsing is kept. The desktop home-owner dialog keeps
upstream's live owner details with #241's runnable CLI command hints.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The theme guide never said that a colors-only theme starts from the stock
pink palette, so Haiku put a teal accent in `colors` and Ada turned pink.
The guide now says to seed `canvas` and `accent` together, and to use
`t3-code` to return to the default look.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Format the files the merge left unformatted.
- Drop unused imports and the relay-only account relist helper, un-export
  isPullRequestWatchTask, and delete mobile state/auth.ts, which pingdotgg#9129 had
  already removed.
- Restore upstream's lost-launch-reply outbox tests that were dropped along
  with the compaction block.
- The background-wait eval mocks the fork's TailnetDevices and
  ProjectionStoreV2 handler services.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted Author is trusted by repo permissions or the VOUCHED list. size:XXL labels Nov 14, 2026
@jayleaton jayleaton added the agent-context-increase Approves a measured increase to the agent context budget label Nov 14, 2026
@jayleaton

Copy link
Copy Markdown
Owner Author

Captain: accepting the agent-context growth (+386 B Claude system append, +50 B Codex context, +1.7 KB MCP tool list). It all comes from upstream 580b526's new tools and instructions, mainly the agent theme/CSS tool (pingdotgg#35247), which JJ asked for. The fork's tail-compat change must not add description text.

@github-actions github-actions Bot added the 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. label Nov 14, 2026
Live Captain listener prompts and agent-library skills call t3_thread_read
with tail=true, and the tool schema rejects unknown parameters. tail=true
reads the newest `limit` items, and combining it with beforePosition or
afterPosition is an error. The description leaves it out, so new callers
learn upstream's beforePosition paging.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 21.5 KiB 21.5 KiB 0 B (0.0%) 24.4 KiB ✅
Codex Live turn messages 1 1 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.9 KiB 21.9 KiB +1 B (+0.0%) 24.4 KiB ✅
Claude Live turn messages 1 1 0 (0.0%) 8 ✅

Baseline: bfad67d · PR result: e64a244 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

jayleaton and others added 4 commits November 14, 2026 14:41
- Server typecheck: ScheduledTaskService gets ProjectService through
  provideMerge, not from a parallel mergeAll.
- Peer links say which HTTP status a non-Ada address answered with.
- Tests follow Ada's branding (APP_NAME) and kept fork rules: an idle
  subagent child settles on its own, auto-settle 0 turns the rule off, and
  Ada never compacts before a send.
- A new PR watch baselines checks already on the pull request (upstream
  pingdotgg#23522), so the delegated-PR test fails the check after watching starts.
- The Agents Linux launcher test expects upstream's icon write instead of a
  copy, the AgentsRoutes mock provides useClientSettings, and the installer
  404 test expects Ada's `ada install:` prefix (the archive is still named).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Visits are recorded as the small thread.visit-recorded event, so the
  agent-launch test reads that type and measures its payload directly.
- A missing workspace root stays cached for a minute (upstream pingdotgg#34905), and
  a finished clone invalidates it. The re-clone test does the same.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ronmentId

A server that predates multi-environment waits returns a t3_thread_wait
result without environmentId, so forwarded waits and the CLI failed to
decode it. The field is optional on decode, and peer forwarding fills in the
environment it forwarded to.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…TORY

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jayleaton
jayleaton marked this pull request as ready for review November 14, 2026 08:37
@jayleaton
jayleaton merged commit 336123a into main Nov 14, 2026
40 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-context-increase Approves a measured increase to the agent context budget 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:XXL vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.