Skip to content

chore(chase): port 27 upstream server and provider fixes through fa2f4ff2a2 - #2836

Merged
lidge-jun merged 40 commits into
devfrom
chase/t3-261110-server
Nov 10, 2026
Merged

lidge-jun merged 40 commits into
devfrom
chase/t3-261110-server

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Ports 27 upstream t3code fixes from the 261110 chase (743bb8cf3d..fa2f4ff2a2) into GOAT's server, providers, SSH runtime and source-control code. Each was cherry-picked with -x or adapted to GOAT's code, with the upstream test carried over. The cycle card devlog/_chase/10.024_t3_chase_cycle_261110.md has the classification.

Highlights:

  • Orchestration: background command results reach a running Codex goal; a steer that restarts a completion wake no longer strands later subagent results; a Claude turn whose CLI exits before its first frame fails instead of running forever; steering during a Claude compaction shows it stopped, not failed.
  • Providers: Codex /goal no longer creates the goal twice; detaching a session cancels its pending approval; Claude Fable 5.2, Mythos and Antigravity pricing and model-name fixes; OpenCode command timeouts and bounded usage reads; Cursor account usage scanning; ACP registry commands past 128; OMP device writes use GOAT's MCP server name.
  • Source control: opening the branch menu keeps PR status; a finished turn looks up its PR once; Commit, push & PR never pushes the default branch into itself; Forgejo finds merged PRs whose head branch was deleted.
  • SSH and runtime: tunnel readiness ignores ssh connection time; Intel Macs no longer download a missing archive; quitting no longer restarts the relay client; failed updates report download diagnostics.
  • Browser: tabs shown in a desktop window report visible, using GOAT's tab-capacity visibility check.

GOAT-specific changes: OMP device writes resolve the goat MCP server; new tests and helpers moved into focused files so no file grows past its code budget; knip-flagged exports made module-private.

Deferred upstream commits are tracked in #2832, including the Claude MCP session grant (4c361199f4), reverted after review because its grant key ignored the app and request schema and had no bound. The PR-watch approval holds (f6a32dbc7f) were reverted for the same reason: a vanished gated run left a hold that never cleared. Review also bounded two ports: the ACP command probe stops at 1,024 commands and OpenCode usage pages rowids by keyset. Load-sensitive tests found along the way: #2833, #2834.

Validation: focused vp test run on every touched test file (server, provider-acp, provider-opencode, provider-cursor, ssh, shared, source-control-forgejo/github, agent-surface replay); vp run check:changed passed rename, format, lint, knip and typecheck (38 packages).

NOT RUN: the local check:changed test stage (killed twice by GOAT restarts; goat-ci runs it), the full server suite, a real-client pass.

Model: anthropic/claude-opus-5-5 coordinating, ports by hyds/deepseek-v4.1-flash-free and gpt-6.1-terra (xhigh) lanes; harness: Codex in GOAT.

t3dotgg and others added 30 commits November 10, 2026 20:04
…3260)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 1a43f4870d4d27e6514b7485a8742027e2f48b34)
…t failed (#33291)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 2b65ffb641f152fadf443096bad7f4a0677caae4)
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
(cherry picked from commit 9a3f8db9b39704cd1adb522babda23c21de8e1e4)
…rashpad pipe (#26374)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 12085f0b0c1229198bbcbf47c63135f4931936f6)
…ab (#23589)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 5ae957848a3bac1324213f68dc3e091b23f8a69b)
…707)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 4c361199f47f6ea32a2c14835df392640d0f7c63)
…al (#33535)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 577c524089368176e00b331a8217b642fd6d06a5)
…n (#33628)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 5636b5666d3fb9b2b280dbe8a0c5cb42874f1bcd)
…3721)

(cherry picked from commit 0ca73a19f06bc82d729f6d1c1c8903aa22d78868)
…768)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 7171fdd7716b05dc1b4be40c26ac78e8bb35f80c)
OpenCode usage scans materialized complete message bodies and queried empty
rowid ranges. Select in-window rowids first and project usage fields in
SQLite, keeping message bodies off the JS heap. Read each database in one
snapshot and record scan row and page counts.

On a read-only snapshot of a 3.32 GB real database, five fresh-process runs
measured 2.33x faster 30-day reads and 2.82x faster 90-day reads with identical
records. These are cold application-cache measurements; OS caches were not
cleared. Local check:changed and CI passed.

Adapted SQL projection from pingdotgg/t3code#27679
and window selection/snapshot handling from
pingdotgg/t3code#26613.

Model and harness: GPT 6.1 Sol through Codex in T3 Code.

Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Tymoteusz Bielski <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit bbdc7dca320ee4fbc7131498aaffef2fa1eb3d41)
…uest times out (#27677)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit eff45664fae739f0efadaee13acc145ddf0d0b66)
Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit d47591f613a28818d583bd3003f950ccd5060951)
Upstream: d47591f613 (#33677) matched T3's server key; GOAT injects its server as goat.
The device parsing moves beside the shared fallback-input parser to keep runtimeModel.ts within its code budget.
…pacity check

Upstream: 5ae957848a (#23589) relied on an isVisible helper from upstream's idle-tab capacity change; GOAT's equivalent lives in ServerBrowserCapacity, which now exposes the visibility it already used for idle tabs. The upstream test moves to the capacity test file that owns the shown-tab fixture.
A local-only refresh cached `pr: null` for the current branch, so readers
treated the branch as read with no pull request. Leave the remote cache
untouched and read the parts instead.

Upstream: a22068f3711 (#33263)
A turn end commits several checkpoint and run events at once, and each
queued its own branch lookup. Coalesce requests per thread so the batch
shares one lookup, while a request that arrives after the lookup starts
still queues a later refresh.

Upstream: f8fbc199ae1 (#33752)
…to itself (#33695)

GOAT checks the push destination before a commit, push & PR when origin/HEAD is
stale, and publishes a branch that tracks the default branch under its own name.

Upstream: ad91636f0b48fe41119c888ebe937acb5167f0ee (#33695)
… (#33675)

A deleted head branch arrives as refs/pull/<N>/head with the name in label;
read it when the repository is known and the pull request is not an AGit topic.

Upstream: b37c7f6fa41e36f259ce3b8ae7821e0a3a22793c (#33675)
…24599)

A check awaiting approval is no longer a failure. The watch records each approval
hold until its workflow run finishes, announces it once, and an unreadable
approval list neither passes nor reports missing checks.

Upstream: f6a32dbc7f9047cce5e6a83062aa1b8031a03081 (#24599)
Steer server-raised command notices into a running turn whose provider
thread has an active goal, so a background result is seen instead of
waiting behind the goal run. Other notices keep queueing.

Upstream: 4c8eb1dfd5 (#33268)

Implemented with deepseek-v4.1-flash-free through OpenCodex.
…s later subagent results (#33469)

Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 8d54c8b1a7ab58528ec7fcddb30fdc68a6e68ea0)
(cherry picked from commit e2aa223229e42dd742b6dd05a9fad61775231d88)
Normalize Cursor usage pages as they arrive, retain bounded raw page data, and preserve count-proven boundary deduplication and stable event keys. Use direct hex hashing, limit concurrent account refreshes to two, reuse unchanged cached records, and persist retention pruning.

Validation: check:changed passed with 61 focused tests; 40 differential reader cases matched the original output. CI and agentic reviews passed on the merged head.

GPT 6.1 Sol via Codex in T3 Code.
…chive (#33325)

Gate the remote runner's archive download on the supported release platform
keys, so Darwin x86_64 fails before fetching instead of 404ing.

Upstream: 56064fc4f6 (#33325)
preview_evaluate's guidance said page tools only read. Say they write on
request, and keep results on html_render.

Upstream: 0c832589a0 (#26570)
…#33255)

A thread id can carry parentheses, and a raw Markdown destination ends at
the first one. Labeled links now bracket a destination that holds them,
and the parser reads angle-bracketed destinations back.

Upstream: cd87cce900 (#33255)
Upstream: bcee0f5d2872ba193c66ed9ba979bbe424f89ff9 (#33008)
…ion id allocator

Knip flagged five exports only their own modules use, and the delegated-completion module typed the allocator's error channel as unknown.
Cherry-picked upstream tests and helpers grew six budgeted files. Move the new and self-contained tests into focused test files and testkits, move the detach thread-id helper, compaction outcome and MCP elicitation options into neighbouring modules, and narrow the SSH readiness test to the ready case.
…waits

Review of #2836 found two ports that removed a bound GOAT keeps on server memory: the ACP command probe now stops at 1,024 distinct commands (up from upstream's old 128), and the OpenCode usage reader pages rowids by keyset instead of listing the whole window. A PR watch also re-announces a workflow approval wait once earlier holds on the same head have settled.
…ion (#33707)"

The session grant keyed only on server name and message, so a different app or a changed request schema reused it without a card, and the grant set had no bound. Deferred to #2832 with the review findings. The cycle card now counts 73 ported and 68 deferred.
@lidge-jun lidge-jun changed the title chore(chase): port 29 upstream server and provider fixes through fa2f4ff2a2 chore(chase): port 28 upstream server and provider fixes through fa2f4ff2a2 Nov 10, 2026
…roval (#24599)"

An approval hold stayed until a finished check for that exact run appeared, so a cancelled or vanished gated run left a hold that never cleared, had no count limit and blocked checks-passed. The re-announce fix built on it goes too. Deferred to #2832; the cycle card now counts 69 ported and 72 deferred.
@lidge-jun lidge-jun changed the title chore(chase): port 28 upstream server and provider fixes through fa2f4ff2a2 chore(chase): port 27 upstream server and provider fixes through fa2f4ff2a2 Nov 10, 2026
…ompt

Upstream 1a43f4870d changed the prompt a /goal turn starts with; GOAT's computer-use replay still expected the old text, which failed goat-test-server on #2836.
@lidge-jun

Copy link
Copy Markdown
Contributor Author

Independent review (GOAT backup watch, 2026-11-11 04:11 KST): PASS for head f6e45e421b33a4110c115e31b1e0f0e60b496382.

The ported fixes fit GOAT's code. The delegated-completion acceptance was pulled into goat/DelegatedCompletionAcceptance.ts and now also settles a wake on a steer restart. The push-target refactor keeps the old upstream and publish semantics (it writes config through writeConfigValue with the same shared-config lock). The local-only status refresh still drops a remote status left over from another branch. Forgejo's deleted-head fallback refuses AGit PRs and PRs whose repo is gone, and command notices only steer into a running turn when the goal is active. On security: the new OpenCode SQL binds every value (the table names come from a fixed list and the IN list has at most 64 entries), Cursor paging is still capped inside readPage, the SSH platform switch only adds a combined uname -s/uname -m case (no new interpolation), and I found no secrets, unsafe paths or stray files. Scope matches the body. The one nit, not a blocker: the "A stale or missing origin/HEAD…" comment appears twice in apps/server/src/git/GitManager.ts (lines 3037 and 3046).

@lidge-jun
lidge-jun merged commit d7f0f7e into dev Nov 10, 2026
13 checks passed
@lidge-jun
lidge-jun deleted the chase/t3-261110-server branch November 10, 2026 19:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants