Skip to content

fix(fork): resolve upstream merge 37714a8de5 (2026-11-14) - #162

Open
orbitingflea wants to merge 1 commit into
catch-up/20261114-basefrom
catch-up/20261114
Open

orbitingflea wants to merge 1 commit into
catch-up/20261114-basefrom
catch-up/20261114

Conversation

@orbitingflea

@orbitingflea orbitingflea commented Nov 15, 2026 •

Copy link
Copy Markdown
Owner

This pull request resolves the merge of upstream 37714a8 into the fork: commit A (41919f8) left conflict markers in 11 files. The fork now differs from upstream in 364 files, 2 more than before, and adds no lint suppression.

改了什么行为

Behaviour change: yes, in a Normal-mode thread Claude is told to send drafts and code blocks mid-turn with send_to_user, which then takes upstream's 4000-character limit, and web and mobile show the sent text as the agent's words; threads in Messages only, Messages + Dashboard and Chat + Replies keep the fork's 1000-byte send_to_user and get no such instruction.

Upstream added its own send_to_user (pingdotgg#36384). The fork's tool stays registered, because display modes read its calls, and follows upstream's design in Normal. A Claude conversation keeps its first system prompt, so the instruction comes from a prompt hook while the thread is in Normal. In Normal a sent code block now shows above the final reply instead of inside the folded work. send_to_user is pre-approved in plan mode, as upstream does. After sudo t3 browser setup, a profile an older T3 wrote is replaced, so full Chrome keeps its sandbox; an administrator's profile is kept.

Why

Upstream's changes reach the fork, and each fork feature keeps working on upstream's new code.

Undo

Revert this commit and commit A together.

Files
  • SendToUser.ts: Normal takes 4000 UTF-16 units and returns sentMessage; the other modes keep 1000 bytes. Stored sends count by their display event, so a Normal send's ignored reply_to or ack changes nothing after a mode switch.
  • DisplayModeCompactionNote.ts, ClaudeAdapterV2.ts: the hook gives upstream's section on the first Normal prompt, after a compaction, and after a return to Normal; the system prompt leaves it out.
  • displayModeTimeline.ts: Normal sends show in upstream's row, and as replies in the other modes.
  • fork/previewChrome.ts: the older profile is a literal, and setup and sandboxBlocked call its check; setup rewrites only that profile.
  • Upstream tests: browser.test.ts gets Xvfb in its fake host and a row for the older profile. Upstream's unregistered message/handlers.ts is deleted; the eval lists the registered tools.
  • agentContextBudget.json: the tool list grows 1714 bytes, 1240 from upstream's theme tools and 474 from the fork's Normal wording; the Claude append is measured with upstream's layout.
  • Not run here: model evals (no key) and the native mobile app.

Resolves the 11 conflicts of the merge commit below and the breaks the merge left.

- send_to_user: upstream added its own tool with the same name. The fork's tool stays the
  registered one, since display modes read its calls by name and `text`, and it now
  follows upstream's design in Normal display mode: up to 4000 UTF-16 code units, upstream's
  result with `sentMessage`, so web and mobile draw the text as the agent's words, and
  upstream's Claude instructions on mid-turn sends. A Claude conversation keeps its first
  system prompt, so those instructions come from a prompt hook while the thread is in
  Normal. Messages only, Messages + Dashboard and Chat + Replies keep the 1000-byte tool
  and get no such instructions. The tool carries upstream's alwaysLoad hint; labels follow
  upstream's; upstream's unregistered handler file is removed, and the eval lists the
  registered tools.
- AppArmor: upstream's setup keeps a profile already on disk. The fork's full Chrome needs
  its path in the profile, so setup now also rewrites the exact profile an older T3 wrote,
  and keeps any other profile as upstream does.
- Upstream's browser setup test host gets Xvfb, which the fork's setup asks for, and a case
  for the older profile.
- The fork's parity test mocks upstream's new theme service.
- The rest keeps both sides: GitHub-hosted macOS runner, delegated-completion wakes,
  preview mode restarts and start page, the reply-draft guard in the chat view.

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:L labels Nov 15, 2026
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

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

Other scenarios

No main baseline exists yet for these 64 scenario measurements.

All 64 scenario measurements
Provider Scenario Metric Main baseline This PR Impact PR ceiling
Codex short turn resume WebSocket decoded — 10.5 KiB — 12.7 KiB ✅
Codex short turn resume WebSocket messages — 2 — 2 ✅
Codex long turn running, cold open HTTP decoded — 281.7 KiB — 302.7 KiB ✅
Codex long turn running, cold open rows — 75 — 75 ✅
Codex long turn running, history page HTTP decoded — 92.4 KiB — 107.4 KiB ✅
Codex long turn running, history page rows — 75 — 75 ✅
Codex long turn finished, cold open HTTP decoded — 381.5 KiB — 410.2 KiB ✅
Codex long turn finished, cold open rows — 151 — 151 ✅
Codex long turn finished, socket cold open WebSocket decoded — 381.6 KiB — 410.2 KiB ✅
Codex long turn finished, socket cold open WebSocket messages — 2 — 2 ✅
Codex long turn finished, socket cold open rows — 151 — 151 ✅
Codex long turn finished, work page HTTP decoded — 186.2 KiB — 200.2 KiB ✅
Codex long turn finished, work page rows — 150 — 150 ✅
Codex idle thread resume WebSocket decoded — 65 B — 200 B ✅
Codex idle thread resume WebSocket messages — 1 — 1 ✅
Codex fleet shell snapshot HTTP decoded — 42.4 KiB — 53.7 KiB ✅
Codex fleet shell snapshot rows — 27 — 27 ✅
Codex fleet shell subscribe WebSocket decoded — 65 B — 200 B ✅
Codex fleet shell subscribe WebSocket messages — 1 — 1 ✅
Codex fleet shell resume check HTTP decoded — 18 B — 100 B ✅
Codex fleet shell resume check rows — 0 — 0 ✅
Codex stale shell reload HTTP decoded — 42.4 KiB — 53.7 KiB ✅
Codex stale shell reload rows — 27 — 27 ✅
Codex stale shell resume WebSocket decoded — 140 B — 400 B ✅
Codex stale shell resume WebSocket messages — 2 — 2 ✅
Codex stale todo list cold open HTTP decoded — 72.4 KiB — 83.0 KiB ✅
Codex stale todo list cold open rows — 75 — 75 ✅
Codex stale todo list cold open nodes — 2 — 4 ✅
Codex stale todo list cold open subagents — 2 — 4 ✅
Codex stale todo list cold open plans — 1 — 2 ✅
Codex stale todo list cold open providerTurns — 1 — 2 ✅
Codex stale todo list cold open checkpoints — 1 — 2 ✅
Claude short turn resume WebSocket decoded — 10.6 KiB — 12.7 KiB ✅
Claude short turn resume WebSocket messages — 2 — 2 ✅
Claude long turn running, cold open HTTP decoded — 283.3 KiB — 302.7 KiB ✅
Claude long turn running, cold open rows — 75 — 75 ✅
Claude long turn running, history page HTTP decoded — 93.4 KiB — 107.4 KiB ✅
Claude long turn running, history page rows — 75 — 75 ✅
Claude long turn finished, cold open HTTP decoded — 384.2 KiB — 410.2 KiB ✅
Claude long turn finished, cold open rows — 151 — 151 ✅
Claude long turn finished, socket cold open WebSocket decoded — 384.3 KiB — 410.2 KiB ✅
Claude long turn finished, socket cold open WebSocket messages — 2 — 2 ✅
Claude long turn finished, socket cold open rows — 151 — 151 ✅
Claude long turn finished, work page HTTP decoded — 188.1 KiB — 200.2 KiB ✅
Claude long turn finished, work page rows — 150 — 150 ✅
Claude idle thread resume WebSocket decoded — 66 B — 200 B ✅
Claude idle thread resume WebSocket messages — 1 — 1 ✅
Claude fleet shell snapshot HTTP decoded — 43.0 KiB — 53.7 KiB ✅
Claude fleet shell snapshot rows — 27 — 27 ✅
Claude fleet shell subscribe WebSocket decoded — 66 B — 200 B ✅
Claude fleet shell subscribe WebSocket messages — 1 — 1 ✅
Claude fleet shell resume check HTTP decoded — 18 B — 100 B ✅
Claude fleet shell resume check rows — 0 — 0 ✅
Claude stale shell reload HTTP decoded — 43.0 KiB — 53.7 KiB ✅
Claude stale shell reload rows — 27 — 27 ✅
Claude stale shell resume WebSocket decoded — 140 B — 400 B ✅
Claude stale shell resume WebSocket messages — 2 — 2 ✅
Claude stale todo list cold open HTTP decoded — 73.4 KiB — 83.0 KiB ✅
Claude stale todo list cold open rows — 75 — 75 ✅
Claude stale todo list cold open nodes — 2 — 4 ✅
Claude stale todo list cold open subagents — 2 — 4 ✅
Claude stale todo list cold open plans — 1 — 2 ✅
Claude stale todo list cold open providerTurns — 1 — 2 ✅
Claude stale todo list cold open checkpoints — 1 — 2 ✅

Baseline: unavailable · PR result: 430a441 · Source CI: failure

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.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 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.

1 participant