Repository navigation
fix: preserve truthful empty-terminal launch failures - #1911
Conversation
Cover rejected requests across both remount timing orders and deliberate acknowledgement through the mounted App and Tauri boundary. All three regressions fail against the exact package base. Plan-ID: FU-KR08C-LAUNCH-ERROR Test-First: src/screens/terminal/TerminalRoute.test.tsx::shows the same rejected request after returning before settlement Test-First: src/screens/terminal/TerminalRoute.test.tsx::shows the same rejected request after returning after settlement Test-First: src/screens/terminal/TerminalRoute.test.tsx::acknowledges launch failures on reopen and clears them before a new attempt Co-Authored-By: OpenAI gpt-6-astra <noreply@openai.com>
Keep the launcher request outcome across empty-view remounts separately from the pending guard. Show one alert inside an open chooser or outside its closed panel, and acknowledge it on deliberate reopen or retry. Add one opt-in browser rejection input and isolate affected failure tests. Plan-ID: FU-KR08C-LAUNCH-ERROR Test-First: src/screens/terminal/TerminalRoute.test.tsx::shows the same rejected request after returning before settlement Test-First: src/screens/terminal/TerminalRoute.test.tsx::shows the same rejected request after returning after settlement Test-First: src/screens/terminal/TerminalRoute.test.tsx::acknowledges launch failures on reopen and clears them before a new attempt Co-Authored-By: OpenAI gpt-6-astra <noreply@openai.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Root A7 record (unproven placements, documented before acceptance): besides R1911-C2 (scrolled long profile list) and R1911-C3 (close-animation overlap), the following are NOT proven by the inspected captures: other viewport sizes than 1440x900/1440x1100, other themes than dark/system, very long error text, profile-list overflow, assistive-technology behaviour beyond role=alert in tests. Accepted as recorded limits; no automatic exception to A1–A8. |
|
Root acceptance (INTEGRIEREN) for head
Setting |
|
@Mergifyio queue |
☑️ This pull request is already queued |
Merge Queue Status
This pull request spent 9 minutes 26 seconds in the queue, including 8 minutes 42 seconds running CI. Required conditions to merge
|
Fehlgeschlagene Sitzungsanfragen bleiben in der leeren Terminalansicht auch nach einem Seitenwechsel sichtbar.
Bewusstes erneutes Öffnen oder ein neuer Startversuch quittiert den alten Fehler, während die Startsperre erhalten bleibt.
Der Entwurf ist lokal geprüft; unabhängige Reviews sowie die native und die Nutzerabnahme stehen noch aus.
Report
Package:
FU-KR08C-LAUNCH-ERROR— implementation delivery, tier A, one draft PR.Base:
0583073a65a3d760a256fc32519459f2ddfe3e32(#1908 merged).Candidate/fix:
2bd9fd06a386e6356811b51bfb90df2c764a54fc.Red-test commit:
0080c704d3f56f166b842153b410a526df63c490.Actual author model:
gpt-6-astra, efforthigh, provider OpenAI, observed in the worker's native header and ownturn_contexton 2026-10-25; not inferred from the requested profile.RAW: 177 = 144 additions + 33 deletions, including tests/mock/PLAN; no size exception.
Change and ownership
The empty-view launcher retains one in-memory request error across remounts, independently of the existing pending guard. A deliberate reopen or launch clears it. An open chooser renders the alert inside its panel; a closed chooser renders one outside it. Existing truthful German copy is reused. The only browser-mock addition is one explicit first-spawn rejection input. No dependencies, CSS/i18n changes, native seam edits, provider/App/reducer/IPC/shared-design-system changes or new launcher contexts.
Owner:
srv-fu-kr08c-launch-error; child ticket725df5d4-5cd3-4adb-8217-33fb320eee60, predecessor5a2a38f9, parent366c57e2-488c-48c1-9405-90b0cf28fab6remains open. Existing #1908 is not reopened. Root owns reviews, acceptance and integration; the author sets no labels and does not enqueue.Admission and evidence
2026-10-25: clean assigned branch and HEAD matched exact
origin/mainbefore writes.git fetch originandgit log origin/main -1exit 0; CI run40192686399on the exact base was completed/success;gh pr list --state openreturned[].bash scripts/sync.sh startandnpm run dev:start-check -- --max-cargo 2 --min-free-gb 3.5exited 0 (13.1 GB free, zero cargo builds). The supplied quota receipt hash matched and was fresh at actual start. Missing--usagewas not treated as quota evidence.Each tests/browser/commit/prepush/push phase ran as one foreground
python3 .pa/launch-error-evidence/phase_guard.py && <phase>. The guard checked fresh load/RAM, actual ancestry/processes, exact known-idle identity, cargo roots, exclusive warm slot ownership, jobs=1 and absence of CARGO_PROFILE overrides. No background work was left running. The known idle process was present with the exact authorized identity and stayed untouched; provenance remains unknown. The guard conservatively also counted its waiting shell wrapper. No process stop or server configuration changes.The memory mirror was absent; live Git/PR/CI plus this brief supplied the bounded evidence. Sourcegraph, dispatcher quota tools and AgentsRoom memory tools were absent from the callable catalog.
get_goalreturned no existing goal; the supportedcreate_goalrecorded this bounded delivery objective without closing an older goal. No exhaustive graph assessment is claimed.npm run test:unit -- src/screens/terminal/TerminalRoute.test.tsx -t 'shows the same rejected request|acknowledges launch failures'before implementationnpm run test:unit -- src/screens/terminal/TerminalRoute.test.tsx src/sessions/SessionProvider.test.tsx src/sessions/sessionReducer.test.tsnpm run typecheckgit diff --checkbash scripts/ci/red-first.shnode .pa/launch-error-evidence/capture.mjs basenode .pa/launch-error-evidence/capture.mjs headnode .pa/launch-error-evidence/mock-contract.mjsgit commit -F <message-file>with normal hooksbash scripts/ci/secret-scan.sh, no leaksbash scripts/ci/gates.sh lane prepushin the assigned worktree at candidategit push -u origin codex/fu-kr08c-launch-errorwith normal full prepush hookgit ls-remote origin codex/fu-kr08c-launch-error2bd9fd06a386e6356811b51bfb90df2c764a54fcThe first fix-commit attempt exited 1 at the CRLF source gate because it scanned the uncommitted BASE scratch copy under new paths. The scratch copy was relocated under the existing excluded scratch
distdirectory (archive retained); no production source or gate was weakened. The repeated normal commit hook passed. Its incomplete first run did not reach the remaining ten precommit gates. The unit runner printed the existing jsdom canvas warning; no new dependency was installed. Filtered red-first runs report unselected tests as skipped; no skip was added to any test.A1–A8: unchanged acceptance and candidate evidence
A1 — C2, visible failure
TerminalRoute.test.tsx:842checks one alert in the open panel and one after closing. Inspected BASE/HEAD top and bottom captures below show the request text fully visible on HEAD; the downward BASE panel occludes it. Evidence T1, B1, B2; sourceTerminalLauncher.tsx:65,74.A2 — D2, failure across remount
Both new tests at
TerminalRoute.test.tsx:835,838are red on BASE production and green on this candidate. They cover return before/after rejection, exact request-error text, unchanged route and exactly one spawn with no kill/respawn. Evidence R1, T1, RF.A3 — K1, deliberate acknowledgement
The regression at
TerminalRoute.test.tsx:842fails at stale-error clearing on BASE and passes on HEAD. It covers reopen, explicit retry while the chooser remains open, pending state, successful settlement and a later empty remount. B3 additionally exercises a real browser retry and empty view after close. Evidence R1, T1, B3.A4 — preserve closed C1 and provider contract
Existing resolve/reject remount guard regressions remain unchanged in assertions (
TerminalRoute.test.tsx:737helper); only their finally acknowledgement changes. T1 passes both re-arm paths, repeated activation and exact spawn counts. Pending setters remain separate from error setters (TerminalLauncher.tsx:20,24,45). No provider, route, timeout, selection or cancellation code changes. Evidence T1 and full prepush.A5 — truthful outcome, not absence proof
Existing inserted-session subscription-rejection tests at
TerminalRoute.test.tsx:670,718remain green with their original visibility/mutation assertions. Error text remains the existingterminal.launchFailedplusdescribeError; it says the request failed, not that a PTY is absent. No provider/session manipulation added. Evidence T1; sourceTerminalLauncher.tsx:48.A6 — isolated public proof
New deferred tests settle every started request in finally and then use
acknowledgeLaunchFailureatTerminalRoute.test.tsx:800to unmount/remount the public App and deliberately reopen/close the chooser. Required existing-test changes are listed below. R1 exercises the new tests through assertion failures. No private reset export, added production-module mock, skip, retry or timeout changes. Evidence R1, T1; unrelated C3/D3/D4 remain open.A7 — inspected browser evidence and unchanged defaults
Exactly one new input,
?launchFailure=1, rejects the first spawn and preserves the existing subsequent success path. The BASE scratch was exported from the exact base and blob-compared: only the identical fixture file differs. B1/B2 use the real Vite/Tauri-browser-mock Glass route, identical input, dark system theme, reduced motion and matching 1440x900 / 1440x1100 viewports. All eight PNGs were inspected. Top and bottom placements are covered; other dimensions/themes, long-error/profile-overflow stress and assistive technologies are unproven and disclosed for Root below. B3 compares flag-absent default/rich/restore responses and two successful spawns per mode across BASE/HEAD, then verifies the opt-in deliberate browser retry.A8 — bounded delivery and records
177 RAW lines (144 added + 33 deleted) against the exact merge-base; four allowed files only. Own PLAN row at
docs/PLAN.md:257, other rows and subplan unchanged. T1/typecheck/diff/prepush/normal push all exit 0; remote SHA verified. One draft PR, independent tier-A reviews and checked handover pending. Parent/native/installed/effective/whole-Glass/UAT acceptance stays open.Inspected browser artifacts
Evidence directory in the worker handover:
.pa/launch-error-evidence/(uncommitted artifacts, not added to the public repository). All BASE/HEAD screenshots use?launchFailure=1#/leitstand/terminal, rich profiles, dark system theme and reduced motion. The BASE archive differs only by the same two-line opt-in fixture patch; SHA-256ab076d948a320c02b20a83810b1ef1624fc72e9dc4f2393acb1b0290255ab4cd. All other tracked BASE blobs were checked equal.base-900-open.png8ff92be58635a32a444cee1867118f778d6d0988d5e1b15ac22e2cf8ccbfb27abase-900-closed.png27fb2c541bb3d726268ce7b6f1362e19e1040738ac3777e42e20c5d7f95631a8base-1100-open.png64c6ea87e61bae69cdd6098aadc57e2cd30e83dfd5f1a602757fc9dbbe8d77cfbase-1100-closed.png37a17af6efdca876fdedb241a92e1dc5dc7e00ce7d66c2be75375a72ae6e4d5ahead-900-open.png824d3db2a704b179fcd1435fcc5f4b59ac17856187dae942e3e7af7a3127aa77head-900-closed.png27fb2c541bb3d726268ce7b6f1362e19e1040738ac3777e42e20c5d7f95631a8head-1100-open.png5608b012fdb099309131008f3ff26dba9af168bd86cb06d8c89fc916ad4cb507head-1100-closed.png37a17af6efdca876fdedb241a92e1dc5dc7e00ce7d66c2be75375a72ae6e4d5aAt 1440x900 the chooser opens above; at 1440x1100 it opens below. BASE downward error center is occluded; HEAD center is uncovered in all four states. HEAD open alert bounds are y=329..368 inside panel y=288.5..568.5 (top) and y=761..800 inside panel y=720.5..1000.5 (bottom). Screenshots visually confirm the full text, not merely center-point visibility. Closed captures are pixel-identical BASE/HEAD. Each capture exposes exactly one active alert and records one explicit spawn.
base-geometry.json,head-geometry.jsonandmanifest.jsonretain measurements and hashes. No captured PNG is uninspected.Directly forced existing-test cleanup
Candidate
src/screens/terminal/TerminalRoute.test.tsx:Their original behavior assertions remain. No unrelated C3/D3/D4 cleanup is included. The acknowledgement helper uses the public mounted App, not module resets or private exports.
Finding disposition and review
2bd9fd06a386e6356811b51bfb90df2c764a54fc; A1/A7 tests and inspected up/down evidence; Root closure pendingReview (Tier A, author family OpenAI/Codex GPT-6 Astra), both bound to head
2bd9fd06a386e6356811b51bfb90df2c764a54fc:claude-opus-5-5). APPROVE WITH CONDITIONS. Its A1–A6 verdicts: MET. A7/A8 were UNCLEAR only because the evidence was not in its bundle.kimi-code/k3per session wire logsession_f33427ec…. APPROVE WITH CONDITIONS, with the same A7/A8 evidence condition.2bd9fd06, at 177 RAW lines.openAdHocrejects after the provider inserted a session (subscribeExit failure), the kept request error reappears on the empty view after that tab is closed. No test asserts this; thefinallyacknowledgement hides it.acknowledgeLaunchFailurefailure infinallymasks the original assertion, and the alert being gone is not asserted afterwards.subscribePendingnow serves both stores; rename tosubscribe.finallyacknowledgement; there is no reset export, by A6 design.finish?.(…)(TerminalRoute.test.tsx:690).No high finding. One round. Root decision: merge.
Root must arrange two distinct non-author families (the assigned Anthropic + Kimi chain with verified identities) against this fixed candidate. No author self-review is counted. Stabs checked handover, Root acceptance/integration, parent acceptance and native/UAT remain pending.
NICHT ABGEDECKT
#[cfg(windows)]tests (run_in_pty, npm_shim, ConPTY, DPAPI) or Windows clippy arms; the Windows lane runs in the merge queue.Plan-ID: FU-KR08C-LAUNCH-ERROR