Repository navigation
Start an agent's terminal at its first real size instead of after a 12-frame wait - #30442
Conversation
…ad of after a 12-frame wait The startup grid settle waited for the grid to change and then hold for 2 frames; a grid that was right from the start always paid the 12-frame maximum (~90 ms at 120 Hz, ~200 ms at 60 Hz, seconds when frames are throttled, since it also cleared the 250 ms fallback timer). Its only case, the setup split, was retired in #29819. Command panes now connect like plain panes: on the first frame with a real measurement, or the 250 ms fallback timer.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Priority: ➖ Normal Merge Risk: ⚪ Minimal · up to
|
|
Agent terminals waited twelve screen refreshes even when their first fitted size was already correct. That wait also cancelled the fallback timer, so a background window could take seconds to start an agent. This change starts an eligible visible local agent or command on its first completed fit, keeps an independent fallback and uses the existing resize path for later changes. Plain terminals and remote launch routes keep their existing policies. Review complete on Source review remains completed on The source-review record remains three rounds, without a reset for QA-tooling failures:
Review fixes preserve pending working-folder resolution, use the actual fitting result, retain fallback behavior for narrow/plain/remote panes, and release a fit wait when its window becomes hidden. Startup/disposal removes pending frames, timers and the temporary visibility subscription. Twenty-seven deterministic ordering controls pass. The recorded full PR workflow passed on this exact head, including static analysis, all five unit shards, selected end-to-end tests and the required aggregate. Downloaded execution artifacts confirm the six terminal-geometry files and the split-spawn containing suite passed. The earlier QA pass compared frozen main plus measurement probes against final head plus the identical probes on the same machine within each platform. Screenshots followed timing, with hidden/unfocused windows and isolated homes. Five warm runs per available cell produced these automation-click-to-startup-ready medians:
App-handler-to-ready medians were Mac Codex 352→274 ms/OpenCode 442→369 ms, and Windows Codex 13,712→1,372 ms/OpenCode 25,345→7,895 ms. The old twelve-frame settle measured Mac 187/173 ms and Windows 11,776/11,774 ms at its throttled hidden-renderer cadence; its marks are absent, not measured as zero, afterward. Automation overhead and plain-shell elapsed time changed too, so the entire wall-clock improvement cannot be attributed to this PR. These are startup-ready observations, not inference timings. In that earlier Codex/OpenCode/plain-shell pass, Windows CMD and cold-app runs were not measured; separate Claude cold-app measurements are reported below. Paired screenshots cover new Codex and OpenCode tabs, a queued Codex split with an immediate sidebar resize, and a new worktree with Codex first/active and Setup second with actual script output. Mac also covers plain tabs/splits, folder working directory, pending close and hidden startup. Real Codex reached its input-ready screen through the existing provider. OpenCode coverage is unauthenticated startup-ready only. The earlier Claude account-auth blocker is withdrawn: Claude must use each machine’s existing load-balancer environment under a dedicated QA home. The prior Windows low-spec pass below supplies Claude reply/timing evidence; the current matched M4Air Claude timing set is now reported separately below. Historical Mac Claude measurements are supplementary: “normal-home wrapper, run under the rule in force at the time.” The earlier Windows worker outcome was FAILED because its wider assigned contract did not finish restoring the throwaway setup setting/tabs or three supplementary checks before its machine lease ended. Core comparisons completed without a proven PR-specific drawing regression. Ordinary plain split, folder workspace and immediate pending close were not run on Windows final head; covered on macOS final head. The lane owner accepted this coverage and cancelled the finishing pass. The remaining throwaway profile belongs to the QA worktree and its scheduled sweep; no UI-profile normalization pass is claimed. At that earlier handback, all 25 recorded Windows test processes and all owned Mac test processes stopped; assigned ports were empty. The later supplemental Windows stop is reported separately below. Deferred evidence limits: faint Codex header ghosting appears on both Windows builds. The Windows early split image spans connection while the baseline early image finishes before connection; neither proves continuous first drawing. OpenCode images retain different inactive Codex tabs. A pending-close snapshot does not prove pre-spawn cancellation. Mac original-terminal input lost the first character on both builds, so the exact-output guard stopped before final reload; the bounded trace did not assign a cause. The Mac worker likewise settled FAILED for incomplete reload/profile-cleanup cells. Windows original-terminal restore/reload stopped at a preserved owner-change error outside the changed source; its banner later cleared naturally during navigation, without driver repair. No final renderer-reload or full-app-restart equivalence is claimed. Immediate pre/post-stop real-config hashes were stable; earlier metadata/config changes have an unassigned writer, while sampled app/native-agent homes were isolated and settings/hooks stable. Linux, live SSH, WSL, mobile/old-peer handshakes and native ConPTY size readback were not exercised; no wire or saved-data change is present. Prior additional Windows low-spec QA: real load-balanced Claude and Codex each produced a distinct interactive reply through normal new-tab actions on both builds, under dedicated homes with hooks enabled. The same Windows machine, frozen Claude image, normalized settings and cache produced these medians, with five runs per cell and screenshots afterward:
The automation clock includes about four seconds before the app handler. The hidden renderer ran around one frame per second; these are not 60 Hz results. All 20 raw samples and failed attempts are retained. Cold-app and warm-app results are separate, and the entire wall-clock difference is not attributed to this PR. In that prior Windows low-spec pass, both builds also completed one supported CLI agent launch with a uniquely correlated returned terminal and 20 sampled callbacks. Those targets stayed inactive while the original tab remained active, with zero-size DOM rectangles: both connected at 80×24 and reached 135×60. This is launch/correlation evidence, not a rendered drawing comparison. Neither establishes launch before deferred graphics attachment. Both apps and their recorded owned process graphs stopped; assigned ports were empty and before/after real-config hashes matched. Current M4Air matched Claude timings — original 20 samples: the same machine compared current main
These are Claude 2.1.305 startup-screen observations sampled every 100 ms, not assistant-reply latency or proof that input was accepted. The automation clock begins at the agent-menu-item call after opening + and preparing its menu; it excludes that preparation and is not a physical-click clock. The hidden renderer ran around 60 Hz. Cold cases started a fresh app and daemon, without claiming an empty operating-system cache. The corrected BEFORE cold handler median is 1,417 ms; the earlier 1,401 ms was one sample. The warm total is slower AFTER in this batch even though connection and first data are earlier. All BEFORE batches preceded all AFTER batches, so revision and observation order/time are confounded. The first AFTER warm 3,142 ms sample is retained. Neither a universal wall-clock speedup nor a PR-caused slowdown, time-of-day effect or provider/network cause is established. The original 20-row audit is frozen; future interleaved samples are not included in these medians. All 12 cases have native hidden-window and actual isolation evidence. Eleven have regular completion receipts with matching raw hashes, empty owned-process/port checks and stable real-config hashes. BEFORE cold 3 retains its failed stop-integration outcome and missing regular completion; a separately accepted cleanup-only addendum verifies the unchanged timing raw file and linked originals, positive cleanup with empty owned-process/port checks, and matching failure/recovery config hashes. It did not rerun the timing sample or manufacture a normal completion. This timing matrix alone does not establish the full QA outcome; the accepted final scope is recorded below. Supplemental interleaved M4Air warm comparison: The same M4Air then ran five alternating BEFORE/AFTER pairs with the same frozen builds, harness, initial-profile template and 133×63 grid. Each case started a fresh app and daemon, retained one prespecified warmup, then measured its second Claude launch. All ten measured rows and ten warmups are retained separately from the original 20 samples.
The difference of phase medians is −210 ms for the automation clock and −155 ms for the handler clock; these differ from the median paired differences. One pair became 9 ms slower on both clocks, while four became faster. The BEFORE fourth-pair 1,511 ms sample is retained. The old wait again consumed twelve unchanged-grid frames. All ten cases have verified raw hashes, hidden-window/isolation evidence, positive cleanup, empty assigned ports and matching recorded configuration hashes. This set has lower AFTER medians; the original batched warm set has higher AFTER medians. Both results stand. Every pair ran BEFORE first, so the order was not randomized or counterbalanced. These startup-screen observations establish neither a universal speedup nor a causal regression, time-of-day effect or provider/network explanation. They do not establish accepted input, real replies or the separate upgrade outcome. New Windows high-spec supplemental pair — BLOCKED: qa-drive exited 0, but its final report explicitly says The first-run “Pick a project” tip was dismissed once through its scoped Skip tour action and the dismissal was verified. The composer was left open under the stop rule; no new worktree, tab or split was created and no setting/feature was enabled. The retained blocker image also shows a previously recorded PSReadLine import error in the original terminal behind the composer; no cause is assigned to this PR. The named driver browser connection was closed. ROOT then positively stopped the recorded owned process graph: Prior settled Windows screenshots below remain prior low-spec QA, not substitutes for the blocked high-spec pair. Earlier first-action menu attempts missed the one-second target or did not finish; the earlier BEFORE-only sidebar attempt took 322.5 ms, missing 200 ms, without a matching AFTER case. Historical two-line-prompt and native-chat-matrix cells were removed from the settled supplemental scope; no result is claimed for them. The final scope accepts existing native logs and passive xterm resize observations, without requiring bridge interception or all-API resize capture; this new attempt collected neither because it stopped before arming. Same-profile Mac upgrade — UNVERIFIED (rig failure). BEFORE Claude and Codex reached their input screens in two distinct terminal tabs. The app quit normally, but the review rig then stopped their surviving processes and terminal daemon before reopening AFTER. The same complete saved profile and home were carried forward without cloning or resetting them. All original tab/pane/terminal identities returned at a 133×63 grid, but both tabs showed plain shell prompts. Each live-agent checkpoint failed; neither tab received a prompt or produced a reply. These screenshots show the observed shells, not a successful agent restore or a proven product regression. No upgrade retry was performed. The checkpoint also searched only the AFTER wrapper receipts, which cannot establish absence of a surviving BEFORE agent in a normal reattach. The full preserved-state manifest, original failed checkpoints, driver reports and cleanup receipts are retained privately. The preservation harness initially rejected two ordinary Codex executable links; the repair admitted only those exact observed links and pinned executable bytes while preserving the full file comparison. The earlier cold-run cleanup exception likewise retains its failed original controller receipt and separately verified cleanup addendum; no result was rerun or fabricated.
Final QA disposition. The review owner accepted the existing final-head main-versus-branch core QA and real Claude/Codex replies, with the limits above, and explicitly ended the extra restore and Windows repeat checks without retrying them. Ordinary restored tabs have no queued startup command, so they do not enter this PR's wait-for-fit gate. An ordinary split of an established terminal keeps the first pane connected and gives the new pane no agent startup command. This does not cover every split: splitting during a queued agent launch can affect its first grid, and the earlier paired queued Codex split and agent/Setup flow remain the relevant evidence. Direct agent restart actions can also supply startup commands; the claim is not that every startup comes from the new-tab queue. The additional Windows six-case repeat remains BLOCKED, with zero cases attempted and no AFTER leg. It is not relabelled as a pass. The same-profile agent reply check remains UNVERIFIED. The Mac AFTER app had already exited before the final request for one extra new Claude tab, so no app or driver was relaunched; existing final-head Windows Claude and Codex real replies supply that end-to-end evidence. The original Mac batched timings, interleaved timings and Windows matched timings all remain separate, with every sample and limitation retained. Recorded owned processes from the completed Mac and Windows runs exited and their assigned ports were empty; tickets 943 and 921 were released. The final independent whole-mechanism comparison with the common pattern found all retained differences intended, with no unlabelled or temporary difference. Three source rounds and the unanimous KEEP ruling stand; no source fix or fourth round was introduced by these rig failures. For Brennan’s review The PR body’s Visual Proof section contains 12 Mac and six Windows main/branch screenshot pairs, captured after the final commit. Review the new-tab, queued-split and agent/Setup pairs with the capture limits above. Prior Windows low-spec main-versus-branch evidence (real load-balanced agents, same machine; screenshots captured after that pass’s timing runs). These uploaded pairs are unchanged; none comes from the blocked high-spec supplemental attempt.
The setup flow opens the agent first and Setup second. The split observation records 20 frames, but the PTY was already assigned before the click: this proves a resize before renderer connection, not before process spawn. The branch connected the first pane at 64 columns, reported 135 in its first observed frame, and then settled at 66; main connected and reported 66. The faint center logo appears in both. The branch screenshots also show a discovered-worktree notice; its cause is unproven, so the whole-window comparison includes that fixture-state limitation. New high-spec Windows setup-blocker screenshot, captured after timing: the composer is open after the normal tour dismissal. The driver command failed before Create or any split, so this image is not a paired drawing test. Three places warrant human judgment:
|















Review complete on
c56738a28bc898249d7e762475ad99ff1f4c9e43within the accepted QA scope. Original Mac batched timings, the interleaved five-pair set and Windows matched timings are reported separately below. The extra Windows repeat remains BLOCKED and the same-profile agent reply check remains UNVERIFIED; the review owner accepted the existing final-head core comparisons and real replies without retrying those extra checks.ELI5
Agent terminals waited twelve screen refreshes even when their first fitted size was already correct. This change starts an eligible terminal as soon as fitting succeeds, so the agent can appear sooner.
What Changed
The old startup wait only ended early after the grid changed and then stopped changing. A grid that was correct immediately therefore always paid twelve extra frames. Entering that wait also cancelled the 250 ms fallback timer, so throttled frames could delay startup for seconds.
The new scheduler:
The separate grid-stability helper and its session bookkeeping are deleted. All agents use the same startup rule; there is no agent-name exception.
Why
The stability wait was introduced for the setup split tracked in #6940. #29819 moved setup to its own Setup tab. Paired Codex split and setup launches on macOS and Windows checked sampled drawing states; removing the old setup split alone does not prove that early resizing is harmless. The hidden-window behavior tracked in #28351 is retained.
The common pattern is to accept the first valid layout with an independent timeout, then handle later geometry through resizing. This uses Orca's existing synchronous scheduler. Intended retained policies are the existing fit floor, local-command scope, unsuccessful-fit retry ceiling, 250 ms budget and immediate release on hide. Keeping a minimum successful-frame wait would continue delaying terminals whose size is already correct.
Linked Issue
Maintainer change; history tracked in #6940 and #28351.
Visual Proof
The earlier final-build comparisons below cover real Codex, unauthenticated OpenCode startup and plain shells on the same Mac and Windows machines used for their respective baselines. They remain prior evidence, with their original capture limits. Additional Claude timing and reply evidence is reported separately below; startup-screen timing is distinct from a real assistant reply.
Mac +Codex, same machine and profile, whole-window originals captured after the final commit:
Five warm runs per available cell at approximately 60 frames/second: Codex automation-click-to-ready median 610→532 ms; OpenCode 702→620 ms; plain terminal 328→341 ms. The old twelve-frame settle measured 187 ms for Codex and 173 ms for OpenCode; its marks are absent on the branch. The plain-shell ranges overlap; its +13 ms median does not establish equivalence or attribution. App-handler-to-ready medians were 352→274 ms for Codex and 442→369 ms for OpenCode; the automation click clock includes about 250 ms before the app handler. Stills show coherent sampled states, not every first drawing frame.
Mac setup retained agent-first/active and Setup-second order; queued Codex was resized 20.9 ms before connection and settled coherently. Folder working directory and hidden startup passed. Direct reload is untested on the final build: the same input-loss symptom on both builds failed its output guard before reload. An earlier Codex tab remained open, and profile UI cleanup was incomplete. All owned test processes stopped and assigned ports were empty. Normal metadata/config hashes changed with the writer unassigned; sampled app and native agent homes were isolated, settings/hooks unchanged. These limits are preserved rather than counted as passed cells.
Other final Mac whole-window comparisons
Same physical machine/profile. Main is frozen main plus probes; branch is final c567 plus the same probes. Screenshots were captured after timing. Extra retained Codex tabs, incoming-main sidebar/status differences and the pending-close race are qualified above; the last pair does not certify a renderer reload.
Windows final-build comparison
Prior low-spec Windows QA: five warm PowerShell runs per cell on the same machine and preserved test profile. This evidence is separate from the blocked new high-spec pair below:
App-handler-to-ready medians were 13,712→1,372 ms for Codex and 25,345→7,895 ms for OpenCode. The old twelve identical grid frames cost 11,776/11,774 ms at the hidden renderer's throttled cadence; their marks are absent afterward. Automation overhead and plain-shell elapsed time also fell, so the entire wall-clock improvement cannot be attributed to this PR. In that earlier Codex/OpenCode/plain-shell pass, CMD and cold-app timing were not run; separate Claude cold-app measurements are reported below. These measure startup-ready screens, not inference.
Screenshots were captured after timed runs. Both builds show faint Codex header ghosting; coherent settled panes do not prove every first drawing frame. The branch early-split screenshot spans connection, while the baseline early screenshot finished before connection, so those early samples are not equivalent capture stages. The branch OpenCode capture retains an inactive Codex tab absent from the baseline capture. Setup preserves Codex first/active, Setup second and the actual setup-script output.
The Windows worker outcome was FAILED because its assigned contract also required restoring the throwaway setup setting/tabs and three supplementary final-head flows before the machine lease ended. The core comparisons above completed; no PR-specific drawing regression was established. Ordinary plain split, folder workspace and immediate pending close were not run on Windows final head; covered on macOS final head. The lane owner accepted that coverage and cancelled the finishing pass. The remaining test profile is confined to the QA worktree for its scheduled sweep; all 25 recorded Windows test processes stopped and assigned ports were empty. No profile-normalization pass is claimed. Original-terminal renderer reload/restore was not verified on the final build; a preserved owner-change error stopped that flow. Immediate pre/post-stop real-config hashes were stable, while earlier metadata changes have an unassigned writer.
Supplemental matched M4Air Claude timing — original 20 samples
The same M4Air compared production main
5f2bb930against final headc56738a, each with identical measurement-only probes, verified frozen outputs and the same immutable starting-profile template. These original batches contain five warm and five cold-app/fresh-daemon samples per build:These are normal-buffer Claude 2.1.305 startup/input-ready screen observations, sampled every 100 ms, not assistant-reply latency, exact paint timing or proof that input was accepted. The automation clock starts immediately before the agent-menu-item call after opening + and preparing the menu; it excludes that preparation and is not a physical-click clock. The hidden renderer ran around 60 Hz. Warm samples share one app/daemon; each cold sample uses a fresh app and daemon, without claiming empty operating-system caches. BEFORE cold handler median is 1,417 ms, correcting the earlier 1,401 ms single-sample summary.
The warm total is slower AFTER in this batch even though connection and first data are earlier. The first AFTER warm 3,142 ms sample is retained. All BEFORE batches preceded all AFTER batches, so revision and observation order/time are confounded. These records establish neither a universal wall-clock speedup nor a causal PR regression, time-of-day effect or provider/network explanation. The deleted settle is absent, not measured as zero. These 20 original samples are not pooled with the separate interleaved set or earlier-machine timings.
All 12 case namespaces have native hidden-window and actual isolation evidence. Eleven have normal completion receipts with matching raw hashes, positive cleanup/empty assigned ports and matching real-config hashes. BEFORE cold 3 retains its failed stop-integration outcome and missing normal completion; its separately accepted cleanup-only addendum verifies the unchanged raw sample and linked originals, positive cleanup/empty ports and matching failure/recovery config hashes. That exception did not rerun the sample or invent normal controller completion. A separate failed zero-sample attempt contributes no timing row.
Supplemental interleaved M4Air Claude timing — separate set
The same M4Air then ran five alternating BEFORE/AFTER pairs with the same frozen builds, harness, initial-profile template and 133×63 grid. Each case started a fresh app and daemon, retained one prespecified warmup, then measured its second Claude launch. All ten measured rows and ten warmups are retained separately from the original 20 samples.
The difference of phase medians is −210 ms for the automation clock and −155 ms for the handler clock; these differ from the median paired differences. One pair became 9 ms slower on both clocks, while four became faster. The BEFORE fourth-pair 1,511 ms sample is retained. The old wait again consumed twelve unchanged-grid frames. All ten cases have verified raw hashes, hidden-window/isolation evidence, positive cleanup, empty assigned ports and matching recorded configuration hashes.
This set has lower AFTER medians; the original batched warm set has higher AFTER medians. Both results stand. Every pair ran BEFORE first, so the order was not randomized or counterbalanced. These startup-screen observations establish neither a universal speedup nor a causal regression, time-of-day effect or provider/network explanation. They do not establish accepted input, real replies or the separate upgrade outcome.
Prior additional Windows low-spec Claude and real-agent evidence
An earlier, separate low-spec Windows pass obtained real load-balanced Claude and Codex replies through ordinary new-tab actions on both builds, under dedicated QA homes with hooks enabled. Its Claude timings used the same machine, frozen real CLI and normalized starting settings, with five samples per cell:
Those hidden Windows callbacks ran around one frame per second, not 60 Hz; cold-app daemon warmth was not independently certified. These results do not replace the current M4Air comparison or establish the new Windows high-spec behavioral pair. Their full wall-clock change is not attributed entirely to this PR. Prior settled setup/split images sampled different connection/grid stages and do not establish every early drawing frame or all process-resize requests.
New Windows high-spec behavioral comparison — BLOCKED
The final qa-drive exit code was 0, but its actual report is SUPPLEMENTARY_PAIR_QA_BLOCKED. A driver PowerShell/CLI command-quoting error rejected the command before observer arming, Create or split. Zero of six BEFORE cases were attempted: three composer-create/split trials and three already-running Codex split trials. The early-sidebar/reply case was also not attempted because the bounded continuation stopped at this automation blocker, not because the lease expired. AFTER was not run. This is a capture/setup failure, not an observed product regression, and supplies no new paired drawing, spawn/resize-sequence or direct startup-gate result.
The first-run “Pick a project” tip was dismissed once through its scoped Skip tour action and verified absent. The composer was left open under the stop rule; no new tab, split or worktree was created, and no setting or feature was enabled. The retained blocker image also shows a previously recorded PSReadLine import error in the original terminal behind the composer; its cause is not assigned to this PR. The named driver browser connection was disconnected. The lead then positively stopped the recorded owned process graph, with
alive=[], assignedlisteningPorts=[], unchanged historical evidence and seven matching immediate pre/post-stop config hashes; gate 921 was released. Stop-time hash stability does not certify the whole driver interval.Existing uploaded Windows images remain prior low-spec evidence. They are not new high-spec pair results. The settled supplemental scope accepts existing native logs and passive resize observations without bridge interception or an all-API resize requirement. The blocked attempt stopped before arming and collected none of that new sequence evidence. Historical two-line-prompt and native-chat-matrix cells were removed from the final supplemental scope; no result is claimed for them.
New high-spec Windows setup-blocker screenshot, captured after timing: the composer is open after the normal tour dismissal. The driver command failed before Create or any split, so this image is not a paired drawing test.
Supplemental restore observations and final QA scope
Same-profile Mac upgrade — UNVERIFIED (rig failure). BEFORE Claude and Codex reached their input screens in two distinct terminal tabs. The app quit normally, but the review rig then stopped their surviving processes and terminal daemon before reopening AFTER. The same complete saved profile and home were carried forward without cloning or resetting them. All original tab/pane/terminal identities returned at a 133×63 grid, but both tabs showed plain shell prompts. Each live-agent checkpoint failed; neither tab received a prompt or produced a reply. These screenshots show the observed shells, not a successful agent restore or a proven product regression. No upgrade retry was performed.
The checkpoint also searched only the AFTER wrapper receipts, which cannot establish absence of a surviving BEFORE agent in a normal reattach. The full preserved-state manifest, original failed checkpoints, driver reports and cleanup receipts are retained privately. The preservation harness initially rejected two ordinary Codex executable links; the repair admitted only those exact observed links and pinned executable bytes while preserving the full file comparison. The earlier cold-run cleanup exception likewise retains its failed original controller receipt and separately verified cleanup addendum; no result was rerun or fabricated.
Final QA disposition. The review owner accepted the existing final-head main-versus-branch core QA and real Claude/Codex replies, with the limits above, and explicitly ended the extra restore and Windows repeat checks without retrying them. Ordinary restored tabs have no queued startup command, so they do not enter this PR's wait-for-fit gate. An ordinary split of an established terminal keeps the first pane connected and gives the new pane no agent startup command. This does not cover every split: splitting during a queued agent launch can affect its first grid, and the earlier paired queued Codex split and agent/Setup flow remain the relevant evidence. Direct agent restart actions can also supply startup commands; the claim is not that every startup comes from the new-tab queue.
The additional Windows six-case repeat remains BLOCKED, with zero cases attempted and no AFTER leg. It is not relabelled as a pass. The same-profile agent reply check remains UNVERIFIED. The Mac AFTER app had already exited before the final request for one extra new Claude tab, so no app or driver was relaunched; existing final-head Windows Claude and Codex real replies supply that end-to-end evidence. The original Mac batched timings, interleaved timings and Windows matched timings all remain separate, with every sample and limitation retained.
Recorded owned processes from the completed Mac and Windows runs exited and their assigned ports were empty; tickets 943 and 921 were released. The final independent whole-mechanism comparison with the common pattern found all retained differences intended, with no unlabelled or temporary difference. Three source rounds and the unanimous KEEP ruling stand; no source fix or fourth round was introduced by these rig failures.
Testing
c56738a28bc898249d7e762475ad99ff1f4c9e43: https://github.com/stablyai/orca/actions/runs/39218650121c56738a28bc898249d7e762475ad99ff1f4c9e43. The complete PR diff and all seven reviewed paths remain unchanged; 27 source ordering controls pass. The prior final-build Mac and Windows core comparisons and their screenshot attachments remain complete only within the stated coverage gaps. Supplemental timing/upgrade/Windows-pair outcomes and the review owner’s final scope ruling are recorded separately above; accepted QA coverage is complete with those explicit limits.Review
FULL path: this changes terminal process startup ordering and lifecycle. Three source-review rounds, the up-front architecture challenge, a fresh end-of-round-three challenger, the final three-model unanimous KEEP ruling and final source-readiness check completed. The final main sync left the complete PR diff byte-identical to the reviewed repair. Earlier real Mac/Windows core QA retains its explicitly accepted historical limits; the extra Windows pair remains BLOCKED and the same-profile agent reply check remains UNVERIFIED under the final scope ruling above. No additional source round or confirmed source defect is established by these QA-tooling failures.
Agent skill upstream boundary
Notes
Renderer scheduling only. No saved field, protocol or minimum peer version changed. Folder workspaces retain their normal cwd path; runtime and unserved SSH panes keep their existing launch routes. The common code is reviewed for macOS, Windows and Linux; real QA here covers Mac and Windows.
Checklist
Terminal reliability contract
Invariant (
terminal-geometry.visible-convergence,terminal-session.split-activation-ordering): an eligible visible local startup uses its first completed fit, forwards the actual grid once, preserves the inherited working folder and tab/pane identity, and converges through the existing later resize path. A hidden pane must retain its immediate startup path; disposal must cancel pending startup and release its frame, timer and temporary visibility listener. The motivating paths are a new agent tab, a queued agent split and the setup history tracked in #6940 and #28351.Final workflow artifacts prove passed execution of the six geometry gate files and the split-spawn containing suite. The oracle combines deterministic completed-fit/failed-fit/deadline/folder/hide/disposal controls with real agent ready screens, a resize before connection, coherent settled output, setup tab order and retained terminal identity. The two matching manifest gates are experimental/partial; their deterministic unit tests do not prove every initial painted frame or shell-visible geometry on every provider. The independent performance pass checks one initial frame/timer, at most twelve queued unsuccessful-fit opportunities, one temporary hide subscription, exactly one start and cleanup on disposal. One- and ten-pane source controls establish linear counts; they are not CPU or memory benchmarks.
Coverage: local/daemon startup has final Mac and Windows core evidence, subject to the listed limits; Linux, live SSH, WSL and mobile/relay are accepted runtime gaps. Runtime/SSH startup eligibility, mobile geometry authority, saved data and mixed-peer wire contracts are unchanged in the diff. Native Windows ConPTY size readback and continuous first-output capture remain unproved. Existing diagnostics report connection routing, unusable visible dimensions and later resize convergence; private QA evidence includes timestamps, grids, process identities, build/source hashes and full-window originals.