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
With machine A off and B online, the Coding banner still tells someone already running pags up to run pags up
Recorded on #531 as AC 2 improved-but-not-closed, and split out because closing it is a design decision rather than a patch.
State: the instance is pinned to A; A is off; B is online and running the runner.
/runtime/status → connected (B's socket is live)
/capture → offline (correct — the session is stamped to A, which is gone)
resolveRunnerOnline:36 gives a live session's capture priority over the relay answer, so the banner resolves to offline
Every one of those readings is truthful about the question it answers. The banner is not, because it collapses them into a boolean and then renders the one remedy a boolean can carry: run pags up. The owner is already running it — on B.
This is the same shape as #530 (the chat prompt prescribing pags up when the pin was the problem) and #524 (a remedy naming no machine), both now fixed. The banner is the remaining surface where a true fact produces a false instruction.
Why a boolean cannot fix it
The honest sentence is per-session, not per-instance: "this session is running on A, which is offline. B is connected — start a new session there, or bring A back." That needs the session's stamped node and the live node in the same sentence.
diagnoseAttachment (routes/instances.ts:860-866) already produces exactly this class of sentence for the instance, and runtime-attachment.ts:69-79 deliberately returns remedy: null where pags up would be wrong. The missing piece is the session-scoped equivalent.
Resolve the conflict differently — stop letting a stale session's capture override a live relay, and let the session surface its own staleness separately. Smaller, but resolveRunnerOnline's current priority exists for a reason worth re-reading before overturning.
Offer to relocate — a stamped session on a dead node is arguably a prompt to move it, not just a report. startSessionOnRunner already reclaims a session onto the live machine (reassignSessionNode), so the capability exists.
Acceptance criteria
With A off and B online, no surface instructs the owner to run pags up.
The banner names the session's machine and the live machine.
/capture staying truthful about the session is preserved — it is not the bug.
A test with a session stamped to an offline node and a live socket elsewhere, asserting the rendered sentence.
Verified
The three readings and resolveRunnerOnline:36's priority were measured by the #531 lane and are recorded there. Not reproduced by me: this needs an instance pinned to a machine that is off, which means manufacturing production state on the owner's setup — deliberately not done.
With machine A off and B online, the Coding banner still tells someone already running
pags upto runpags upRecorded on #531 as AC 2 improved-but-not-closed, and split out because closing it is a design decision rather than a patch.
State: the instance is pinned to A; A is off; B is online and running the runner.
/runtime/status→ connected (B's socket is live)/capture→ offline (correct — the session is stamped to A, which is gone)resolveRunnerOnline:36gives a live session's capture priority over the relay answer, so the banner resolves to offlineEvery one of those readings is truthful about the question it answers. The banner is not, because it collapses them into a boolean and then renders the one remedy a boolean can carry: run
pags up. The owner is already running it — on B.This is the same shape as #530 (the chat prompt prescribing
pags upwhen the pin was the problem) and #524 (a remedy naming no machine), both now fixed. The banner is the remaining surface where a true fact produces a false instruction.Why a boolean cannot fix it
The honest sentence is per-session, not per-instance: "this session is running on A, which is offline. B is connected — start a new session there, or bring A back." That needs the session's stamped node and the live node in the same sentence.
diagnoseAttachment(routes/instances.ts:860-866) already produces exactly this class of sentence for the instance, andruntime-attachment.ts:69-79deliberately returnsremedy: nullwherepags upwould be wrong. The missing piece is the session-scoped equivalent.The decision
pags upwhen the runner is excluded by the pin — the chat prompt is a fourth "no runner" construction site and the only one never wired to diagnoseAttachment #530 and [bug] A "Runs on" tile claims "Attached · online" for a node the pin excludes — one line below "Status: Offline", and the invariant test only covers the pinned tile #531 landed; costs a new state in a table that is now aRecord<AttachmentState, …>(a compile error until handled, which is the point).resolveRunnerOnline's current priority exists for a reason worth re-reading before overturning.startSessionOnRunneralready reclaims a session onto the live machine (reassignSessionNode), so the capability exists.Acceptance criteria
pags up./capturestaying truthful about the session is preserved — it is not the bug.Verified
The three readings and
resolveRunnerOnline:36's priority were measured by the #531 lane and are recorded there. Not reproduced by me: this needs an instance pinned to a machine that is off, which means manufacturing production state on the owner's setup — deliberately not done.