Outcome
Keep a consequential mobile pane action explicitly reconciliation-required when its request may have taken effect but its reply is lost. Parent outcome: #200; related recovery work: #199.
Confirmed source behavior
At main a42dc61, RemoteActionStore.respond consumes the action session before awaiting ControlRequesting.send. Its catch path calls fail(), which removes the pane from busyPaneIDs and presents an ordinary failure. Dismissing that presentation permits a fresh action. The control request timeout does not cancel host execution.
An operation such as merge can update the target branch and then wait for a hook before returning. A timeout/disconnect during that interval cannot establish that the merge failed. The current UI says That did not work and permits a new action without authoritative reconciliation. This was independently identified in review of #429 and remains in its merged source; the later fixture-client wiring correction does not change RemoteActionStore error semantics.
This is a source-ordering finding, not a claim that physical-device duplication has already been observed.
Acceptance
- Reproduce lost reply after a confirmed disposable host-side effect using the production action request path.
- Distinguish known pre-dispatch rejection from may-have-executed outcomes; no blanket error-to-failure conversion.
- Preserve request/session, pane, host and generation context for authoritative reconciliation without persisting raw input, credentials, or prompts.
- A dismiss/retry/reconnect/host switch cannot turn an unknown effect into an ordinary fresh request or attach an old result to a new scope.
- Observe the canonical outcome or an explicit operator recovery path before clearing the consequential-action guard.
- Add negative timeout/disconnect/late-response/cross-host tests and independent R3 review. Do not infer completion from a changed UI label alone.
Boundaries
Do not invent canonical action identity or receipts in the UI. Preserve Beads/product-outcome separation. Existing author work on the merge/PR workflow branch must be integrated without overwriting it.
Outcome
Keep a consequential mobile pane action explicitly reconciliation-required when its request may have taken effect but its reply is lost. Parent outcome: #200; related recovery work: #199.
Confirmed source behavior
At main a42dc61, RemoteActionStore.respond consumes the action session before awaiting ControlRequesting.send. Its catch path calls fail(), which removes the pane from busyPaneIDs and presents an ordinary failure. Dismissing that presentation permits a fresh action. The control request timeout does not cancel host execution.
An operation such as merge can update the target branch and then wait for a hook before returning. A timeout/disconnect during that interval cannot establish that the merge failed. The current UI says That did not work and permits a new action without authoritative reconciliation. This was independently identified in review of #429 and remains in its merged source; the later fixture-client wiring correction does not change RemoteActionStore error semantics.
This is a source-ordering finding, not a claim that physical-device duplication has already been observed.
Acceptance
Boundaries
Do not invent canonical action identity or receipts in the UI. Preserve Beads/product-outcome separation. Existing author work on the merge/PR workflow branch must be integrated without overwriting it.