Skip to content

feat(webview): cancellable interactive terminal wait - #199

Closed
zackees wants to merge 8 commits into
mainfrom
feat/webview-lifetime
Closed

zackees wants to merge 8 commits into
mainfrom
feat/webview-lifetime

Conversation

@zackees

@zackees zackees commented Sep 13, 2026 •

Copy link
Copy Markdown
Owner

Refs #198. Coordinated with FastLED/cli#242. Stacked on #197; merge page bootstrap first.

Adds WebviewHandle::wait_for_terminal() for interactive windows without an arbitrary lifetime deadline. Uses the existing resource hub and notification path; no periodic polling, timer, runtime or dependency is introduced. Dropping the borrowed future leaves the native window alive and releases waiter admission; handle cancellation and Drop retain revocation semantics. The timed method retains expiry behavior.

Review identified a shared-operation concurrent-wait hang. A private cancellation-released admission guard now rejects overlapping timed/untimed waits with facade-owned TerminalWaitInProgress, before they can consume terminal state or expire the window. Generic hub notification semantics are unchanged.

RED: native regression failed because a second untimed wait was not rejected within one second. GREEN: real Linux Xvfb window-close proof covers both initial waiter types, overlapping timed/untimed rejection, cancellation without resource loss, and resumed closure observation. Native timeout and handle-cancel proofs also pass. One-agent clud-review is clean. Windows CI gains the interactive window-close proof; Linux already executes it.

Full GUI-support tests, strict all-target Clippy, formatting, dependency isolation and Windows x86-64 MSVC crosscheck pass. macOS ARM64 crosscheck could not complete locally: two attempts failed in the Soldr SESSION relay while compiling zerofrom-derive, before this crate was checked. CI validation remains required. Native Windows validation, FastLED viewer adoption, Windows zoom/media/render/capture parity and exact published release consumption remain outstanding.

Windows CI follow-up: the bootstrap fixture failed on an automatic GET /favicon.ico before the iframe request. Commit 46344dc answers only exact favicon GETs within the existing connection/deadline budget; unexpected paths and all proof assertions remain required. Socket regression observed RED then GREEN; all five smoke-helper tests, strict binary Clippy and real Linux native bootstrap proof pass; clud-review is clean. The correction is also merged into the lifetime branch (470f16c). New native Windows CI results remain required.

@zackees
zackees changed the base branch from feat/webview-bootstrap to main September 13, 2026 12:28
@zackees

zackees commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

Reconciled with main f65c8ee after #197 landed; new merge commit 6a8539d. Only conflict was the Windows window-close CI entry, retained. Lifetime Rust files are unchanged from previous head; main auto-release/SQLite/private-file changes preserved. Effective diff versus main is only two lifetime Rust files plus the six-line Windows test gate. Full tauri-webview-test-support suite, strict all-target Clippy, formatting, real Linux native window-close proof, and read-only review passed. Fresh CI against main is required; old-base green checks are not merge evidence. Coordinated with FastLED/cli#242.

@zackees

zackees commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

Fresh CI is now running on 4073650 (empty synchronization commit; tree unchanged from locally verified 6a8539d). Dylints failed before source linting: setup-soldr nightly-version map digest mismatch, expected f1711f51d170a78cff889fe49b42865995302e3ef4af7e0088d66b570282c86e, received c30a132cb419a772c213616a09e2a61efeb8f77c1722bf4a640670e0904c1b13 after one catalog refresh. This matches the setup failure on #208. Integrity checks remain intact; do not merge on failed or absent checks.

@zackees

zackees commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

A second new-base CI failure is source-level, not the catalog issue: Windows rust-native reports 563 passed, 1 failed, 3 ignored. platform_win::ipc_private_dir::tests::inherited_private_child_is_accepted_but_explicitly_permissive_child_is_rejected panics at src/platform_win/ipc_private_dir.rs:494 on PermissionDenied: private input is not current-user owner/SYSTEM DACL private. This file/test was imported unchanged from main during reconciliation; lifetime changes only touch tauri.rs, smoke binary, and CI gate. Investigate the private-file ACL regression before merge; do not weaken ACL validation or treat this run as green.

@zackees

zackees commented Sep 14, 2026

Copy link
Copy Markdown
Owner Author

Closing as superseded: #220 replayed this stacked FastLED foundation onto current main after the #216 merge diverged, and it has landed.

Verified against origin/main (e0666e0): every file this PR's own commits add exists on main, and every distinctive added source/test line is present on main (one JSON doc-comment line was reworded). Merging this branch now would only reintroduce pre-refactor code that main has since replaced.

Reopen if something here is still missing from main.

@zackees zackees closed this Sep 14, 2026
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.

1 participant