Repository navigation
fix: use Glass controls for shared session restoration - #1904
Merged
Merged
Conversation
Cover the busy restart name, missing-worktree description, saved content, explicit restart, and stale worker completions at the Tauri boundary. Both new route tests fail on the unchanged implementation at the base. Plan-ID: KR-08b Test-First: src/screens/terminal/TerminalRoute.test.tsx::keeps the restart name while busy and isolates a late restart after a worker change Test-First: src/screens/terminal/TerminalRoute.test.tsx::describes the disabled restart with the missing worktree warning and ignores stale restore data Co-Authored-By: OpenAI gpt-6-astra <noreply@openai.com>
Keep the restart label and busy state with the existing Glass Button and associate the disabled action with its missing-worktree warning. Preserve both callers and the existing restore and restart policies. Add one explicit browser restoration scenario without changing any default mock responses. Record the bounded post-merge delivery and remaining native acceptance. Plan-ID: KR-08b Test-First: src/screens/terminal/TerminalRoute.test.tsx::keeps the restart name while busy and isolates a late restart after a worker change Test-First: src/screens/terminal/TerminalRoute.test.tsx::describes the disabled restart with the missing worktree warning and ignores stale restore data Co-Authored-By: OpenAI gpt-6-astra <noreply@openai.com>
Cuarroc
marked this pull request as ready for review
October 25, 2026 08:11
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. |
Owner
Author
Root acceptance — review-ok bound to head
|
30 of 46 tasks
Contributor
Merge Queue Status
This pull request spent 8 minutes 59 seconds in the queue, including 8 minutes 20 seconds running CI. Required conditions to merge
|
This was referenced Oct 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Die gemeinsame Sitzungswiederherstellung verwendet jetzt den vorhandenen Glass-Neustartknopf.
Seine Beschriftung bleibt beim Neustart erhalten, und die Worktree-Warnung ist mit dem gesperrten Knopf verknüpft.
Die lokalen Prüfungen sind grün; unabhängige Reviews und Roots Abnahme stehen noch aus.
Report
Plan-ID: KR-08b
Ticket: 7409db94-2cf9-4457-9c9e-41f2764a1b03
Operator: UMSETZEN. Execution owner: srv-kr-08b-restore-glass. Parent: Nutzbar-1; Root owns acceptance and integration.
Candidate and scope
a9edb9a2f2cd107a362881705948ea955ee74e6a.3bf75e558b81e3a3eb1d0ec5bfe02e5e0840a191, branchcodex/kr-08b-restore-glass.e90c8b25a1fd2ab07101ba268aa73caae6ea6569; fix commit is HEAD. Both actual commit messages and exact Test-First trailers checked; no history rewrite.gpt-6-astra, efforthigh, from this session's native turn_context at 2026-10-25T07:41:37.531Z. Root's supplied admission record was read, hash-checked and within its 60-minute start window. No account, cap, model or provider setting changed.get_goal({})returnedgoal: null,remainingTokens: null,completionBudgetReport: null. No old goal was completed or replaced, and no new goal created. The bounded objective is the shared restoration control port and this checked DRAFT handover; parent acceptance remains with Root.40171601625succeeded on BASE; live main/CI was checked again at 07:55:48Z before normal push.What changed
Button. Its label remains “Agent neu starten”;loadingsuppliesaria-busyand the existing loading indicator. Native disabling still follows the original missing-worktree/busy policy.useIdandaria-describedby. The existing status, alerts, saved scrollback and unsent draft remain intact.worker,busyandonRespawnfor both TerminalRoute and Classic App. The callers, IPC normalization, provider, terminal viewer and request-token guards are unchanged. No automatic spawn or new loading/null restart policy.?restore=1: one exited worker with no session and a missing worktree, saved scrollback and draft. Default/rich tables and every pre-existing mock line remain byte-identical. Removing just the two additive scenario blocks reproduces the complete BASE mock source byte-for-byte; the unchanged default and rich browser tests also pass.Evidence
Heavy phases used a fresh foreground
phase_guard && phase: load1 <8, available RAM >=3500 MiB, cargo roots <2, actual heavy roots <=2, assigned warm slot free, one Cargo build job, no profile overrides. The additional browser smoke was initially prevented by load1 8.0249; after a foreground 30-second wait, guard passed at 4.9497 and only then launched the tests. No failed guard was bypassed.bash scripts/sync.sh startnpm run dev:start-check -- --max-cargo 2 --min-free-gb 3.5npm run test:unit -- src/screens/terminal/TerminalRoute.test.tsx -t 'keeps the restart name|describes the disabled restart'on BASE implementationnpm run test:unit -- src/components/SessionRestorePanel.test.tsx src/screens/terminal/TerminalRoute.test.tsx src/App.audit.test.tsxnpm run typecheckbash scripts/ci/red-first.shbash scripts/ci/secret-scan.shthrough ordinary precommit hooksgit commit -F <message-file>bash scripts/ci/gates.sh lane prepushgit push -u origin codex/kr-08b-restore-glassgit ls-remote origin codex/kr-08b-restore-glass3bf75e558b81e3a3eb1d0ec5bfe02e5e0840a191.npx --no-install playwright test e2e/boot.smoke.spec.ts e2e/terminal-view.mount.spec.tsgit diff --check/git status --porcelain=v1scripts/dev/shot.mjsThe new integration tests mount the real TerminalRoute, SessionProvider, shared panel and IPC normalization; only the existing Tauri core/event and xterm system boundaries are mocked. Assertions cover saved buffer/draft, no spawn/respawn on mount, exactly one restart for a real click, busy disabling, the persistent public accessible name, the warning description, stale restart completion after worker-ID navigation and stale restore data. Existing tests/assertions are unchanged; no skip, retry, timeout or quarantine was added. Classic's App.audit null fixture is not claimed as a real-panel integration proof.
Inspected screenshots: BASE+scenario versus HEAD+scenario
BASE proof setup: extract
git archive a9edb9a2f2cd107a362881705948ea955ee74e6ainto a new preserved scratch directory, link existing dependencies, and apply only the same opt-in scenario tosrc/test/tauriBrowserMock.ts. Every tracked BASE blob was compared: this mock is the sole difference; there are no UI changes or commits in the BASE proof tree. HEAD uses the clean committed candidate. Both capture runs were sequential, withVITE_TAURI_MOCKS=true, the real application route and the existing Vite/Playwright/shot machinery. Each foreground invocation closes its Vite server infinally; no native application, daemon, static imitation, new package or committed capture harness.Capture API/input in each run, with machine-local directory literals shown as named variables (BASE sets Vite
rootto the preserved BASE+scenario tree; HEAD omitsrootand uses the assigned worktree):captureRouteis imported from the unchangedscripts/dev/shot.mjsbehindnpm run dev:shot;createServercomes from the installed Vite. Input, viewport 1440x900, Glass variant, reduced-motion setting, saved text and missing-worktree state are identical; light and dark are captured separately by the existing helper. Observed delta: the legacy rectangular action becomes the existing rounded Glass action; the warning, saved output and unsent draft stay visible without clipping in both themes. These images prove browser rendering of this fixture only.The following links contain the original PNG bytes in GitHub's blob JSON
contentfield (base64), not an HTML preview. They are evidence objects, not extra files/commits in the source branch. All local originals and the BASE scratch tree are preserved for Root. Root must download/decode and inspect both BASE and HEAD before review-ok.e17f43df6ca70e2942843bbe8948f722dd5d22cdb5588580ecf47808a1dce20d10b1004191a8080429ef8829ff90ed1d09f7ac778735d4691b966615acff2a5c857f9505cb1073ae54111468fcb58eb060b8c23acbb959abb0a03f5876b7e4e95afacc17f73018dd688b70201f4b6fb4786aee96fba516f43137301f8a9046e1Download an image with
gh api repos/Cuarroc/ProjectA/git/blobs/<blob-sha> --jq .contentand decode base64 into a PNG; useset -o pipefailif piping. Public HTTP 200 and exact-byte roundtrip were verified without authentication. No durable branch reference is added for these image objects; preserved originals are also available in the checked coordinator handover.NICHT ABGEDECKT
#[cfg(windows)]tests (run_in_pty, npm_shim, ConPTY, DPAPI) or check Windows Clippy branches. The Windows lane remains a merge-queue obligation.App.tsx:1268. No Classic screenshot or App-level restore test exists;App.audit.test.tsx:234mocks the panel to null.controls.cssis already loaded by other Classic-shared components (TerminalView, EmergencyStop, ErrorBoundary) and has only.g-btn*-scoped selectors, so no global style leak.Reviews and handover
Review: Stufe A, two non-author families, both bound to head 3bf75e5 — Anthropic (Claude subagent, observed
claude-opus-5-5[1m]): APPROVE WITH CONDITIONS; Moonshot (Kimi CLI v2.1.1, self-reportedkimi-code/k3): APPROVE WITH CONDITIONS. No high finding.controls.cssis already imported by Classic-shared TerminalView/EmergencyStop/ErrorBoundary and has only.g-btn*selectors?restore=1scenario has no repo consumer/test/?restore=1#/leitstand/terminal?worker=restore-demo); test → follow-updisabled+loading, contradicting Button keep-focus contract (same as before, not a regression)tokens.csslike siblingsBoardView.tsx:525still usesbusy ? "…"restart labelRoot arranges two distinct non-author review families bound to HEAD, inspects the BASE/HEAD image pair, dispositions findings and owns acceptance, ready/review-ok and Mergify. No independent review or finding closure is claimed. The worker opens this as DRAFT and does not set labels, ready state or queue.
State: implemented, locally tested, committed and pushed with verified remote SHA. Independent reviews, Root acceptance, merge, native/UAT and installed/effective delivery remain open. No blocker or scope expansion; no follow-on dispatch by this worker. The parent goal remains open.