Current defect
On physical Ubuntu 26.04.1/GNOME Wayland, the stock app generated at docs candidate 8981b67 (runtime base dcc4676) opens normally. Clicking native Close removes the renderer, but CLI, host, Bun/bwrap and the nonce stage remain after an independent bounded process observation. Ctrl-C cleanup works and is a separate result.
Evidence and ownership
Maintainer coordination: KEL-185; source observations from KEL-183. crates/keld-cli/templates/hello/src/main-body.ts awaits forever after echo without consuming lifecycle events. The Linux window loop emits LastWindowClosed and waits for Bun Quit; core forwards that existing event.
Acceptance
Reproduce with the untouched generated app before fixing. Derive the smallest change at the existing lifecycle/transport owner: preserve one authenticated link, existing framing/correlation and custom listener behavior. No blanket kill, platform-loop workaround, duplicate parser or sleep retry. Verify native Close, descendant/stage cleanup and relaunch independently, and retain the unfixed failure. Run required Rust/TS/conformance/real-OS gates and independent review.
The Linux operator owns the fix through a separate claimed worktree. Discuss before competing edits. If the shared transport contract must change, record the prerequisite/spec decision first. Foundation #167; docs #172 must qualify behavior until fixed.
Current defect
On physical Ubuntu 26.04.1/GNOME Wayland, the stock app generated at docs candidate 8981b67 (runtime base dcc4676) opens normally. Clicking native Close removes the renderer, but CLI, host, Bun/bwrap and the nonce stage remain after an independent bounded process observation. Ctrl-C cleanup works and is a separate result.
Evidence and ownership
Maintainer coordination: KEL-185; source observations from KEL-183.
crates/keld-cli/templates/hello/src/main-body.tsawaits forever after echo without consuming lifecycle events. The Linux window loop emits LastWindowClosed and waits for Bun Quit; core forwards that existing event.Acceptance
Reproduce with the untouched generated app before fixing. Derive the smallest change at the existing lifecycle/transport owner: preserve one authenticated link, existing framing/correlation and custom listener behavior. No blanket kill, platform-loop workaround, duplicate parser or sleep retry. Verify native Close, descendant/stage cleanup and relaunch independently, and retain the unfixed failure. Run required Rust/TS/conformance/real-OS gates and independent review.
The Linux operator owns the fix through a separate claimed worktree. Discuss before competing edits. If the shared transport contract must change, record the prerequisite/spec decision first. Foundation #167; docs #172 must qualify behavior until fixed.