You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
keep transcript consumers registered when a delivery send, acknowledgement, or capacity attempt fails
make the next delivery reset the existing consumer projection instead of silently detaching it
keep RuntimeHostSessionObservationRegistry as the sole transcript lifecycle authority and remove the Observer duplicate renderer-destruction listener
The production diff is +4 / -11. The earlier Renderer close/reopen retry has been removed; this repair adds no retry protocol, recovery state, or second consumer identity.
Root cause
RuntimeHostSessionObserver treated delivery work failure as consumer termination and removed the physical consumer from its indexes. RuntimeHostSessionObservationRegistry still retained the renderer logical registration because it owns continuity across Runtime Host replacement. Every later range request therefore passed the Registry and failed in the Observer with Desktop transcript consumer does not exist.
The diagnostic report cannot distinguish whether the original detach was triggered by a send failure, acknowledgement timeout, or delivery-capacity protection. All three entered the same silent-detach path.
Architecture
The lifecycle is now one-way:
the Registry owns whether the renderer transcript intent exists, including renderer destruction and Host replacement
the Observer owns bounded replica and delivery work, but a failed delivery is non-terminal; it marks the same consumer for a reset on the next attempt
the Renderer owns its materialized range and retains only its existing explicit user-facing reload action
This removes the conflicting Observer termination authority. Explicit close, renderer destruction, and Registry shutdown still release the consumer and idle Session normally.
Verification
RED: the new Observer regression failed on the old behavior with Desktop transcript consumer does not exist
real Electron fixture with temporary fault injection: forced a delivery failure, then observed the same consumer ID recover on the next transcript projection; no error toast or ErrorBoundary appeared. The probe, Electron window, fixture Runtime Host, installed Maka process, and residual Runtime Host were removed or stopped afterward.
full repository tests were not run locally
The previous CI failure was inherited from five missing ASF headers on the old base. #3708 fixed that baseline failure; this branch is rebased onto current green main and the new exact-head CI is running.
AI use
Select exactly one:
No generative tool made a substantive contribution
Generative tooling made a substantive contribution
Tool(s) and scope: Codex diagnosed the lifecycle mismatch, performed the simplification audit, authored the Observer repair and regression coverage, and ran the focused automated and real-window verification. The commit includes the required Generated-by: Codex trailer.
Checklist
Tests cover the change and fail without it
Lint, format, typecheck and the affected suites pass locally
Keep a transcript consumer registered after delivery failures and request a reset instead of silently detaching it. This preserves the Registry as the sole lifecycle authority across Host replacement and removes the Observer's duplicate renderer-destruction listener.
Generated-by: Codex
The reason will be displayed to describe this comment to others. Learn more.
I reviewed exact head 52adc4e70c2ae9020d98a822d1233cf37bf9c715 and found no P0-P3 issues.
The change keeps the renderer's logical transcript registration in RuntimeHostSessionObservationRegistry while treating send, acknowledgement-timeout, and delivery-capacity failures as recoverable Observer work. Renderer destruction, explicit close, Host replacement, and Registry shutdown still own the terminal cleanup paths; an initial open failure remains terminal on both layers, so the change does not leave split lifecycle state.
I verified the focused Observer, execution IPC, and Desktop manager suites (81 tests total), the Desktop main TypeScript build, Biome on both changed files, the ASF header audit, and the clean current-main merge tree. The exact-head hosted test check is terminal-success.
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
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.
Summary
RuntimeHostSessionObservationRegistryas the sole transcript lifecycle authority and remove the Observer duplicate renderer-destruction listenerThe production diff is
+4 / -11. The earlier Renderer close/reopen retry has been removed; this repair adds no retry protocol, recovery state, or second consumer identity.Root cause
RuntimeHostSessionObservertreated delivery work failure as consumer termination and removed the physical consumer from its indexes.RuntimeHostSessionObservationRegistrystill retained the renderer logical registration because it owns continuity across Runtime Host replacement. Every later range request therefore passed the Registry and failed in the Observer withDesktop transcript consumer does not exist.The diagnostic report cannot distinguish whether the original detach was triggered by a send failure, acknowledgement timeout, or delivery-capacity protection. All three entered the same silent-detach path.
Architecture
The lifecycle is now one-way:
This removes the conflicting Observer termination authority. Explicit close, renderer destruction, and Registry shutdown still release the consumer and idle Session normally.
Verification
Desktop transcript consumer does not existnode --test apps/desktop/dist/main/__tests__/runtime-host-session-observer.test.js apps/desktop/dist/main/__tests__/desktop-transcript-range-store.test.js— 51 passednpm --workspace @maka/desktop run typechecknpx biome check apps/desktop/src/main/runtime-host-session-observer.ts apps/desktop/src/main/__tests__/runtime-host-session-observer.test.tsnpm run check:asf-headersThe previous CI failure was inherited from five missing ASF headers on the old base. #3708 fixed that baseline failure; this branch is rebased onto current green
mainand the new exact-head CI is running.AI use
Select exactly one:
Tool(s) and scope: Codex diagnosed the lifecycle mismatch, performed the simplification audit, authored the Observer repair and regression coverage, and ran the focused automated and real-window verification. The commit includes the required
Generated-by: Codextrailer.Checklist
Does this PR entail a change in behavior?