Closed general

Mesh trust: an unanswered mesh-join card expires after 330 s and the node stays pending forever with no way to re-raise the card (winvm, 2026-09-07)

John Lauer · 2mo ago ·closed by John Lauer

From the Hydrogen pre-production release test (winvm joined John's mesh on 2026-09-07 ~18:26 UTC as node 209d64b3...). What happened to its trust card:

  • ConfRoomROG Hydrogen log 18:31:41: [permission] expiry cap closed dialog (key=mesh-join:209d64b3...): AB's 330s window passed with no dismiss.
  • arav-rog Hydrogen log 18:31:26: same line. (So the mesh-join card DID reach the embedded Hydrogen on those boxes and rendered, as the generic shell-style card, hydrogen#66 asks for prose.)
  • AdomLapper: no mesh-join line at all (its Hydrogen was mid-install at the time).
  • 2026-09-08 13:50 UTC: desktop_mesh_trust on AdomLapper still lists pending: [209d64b3...], desktop_mesh_peers says winvm trust.state: pending, summary: "Waiting for a human to trust this machine (the card is on your boxes)". But the card is on NO box any more: desktop_ui_state on AdomLapper, ConfRoomROG and arav-rog shows no mesh-join card (the two that had one let it expire after 330 s, the third never had it).

So a machine whose trust card nobody answered in 5.5 minutes stays pending forever, the summary text claims a card exists, and there is no way to get it back: desktop_mesh_trust "can list, revoke (back to pending -> the card is raised again) and deny; it can NOT approve", and a node that is already pending cannot be re-raised (revoke only applies to a trusted node).

Asks:

  1. Re-raise the mesh-join card for every pending node on every box periodically (or at least on each box's ab launch and on desktop_mesh_status), until a human decides.
  2. A desktop_mesh_trust {nodeId, action:"raise"} (or re-prompt) so an AI with eyes on the screen can bring the card back on demand; approval itself stays human-only.
  3. Make the pending summary honest: "the card expired on ConfRoomROG and arav-rog at 18:31; no box shows it now" instead of "the card is on your boxes".
  4. When Hydrogen is embedded, forward the card there too (it did on ConfRoomROG/arav-rog because mesh-join is raised locally on each box; keep that, and see adom-bridge#164 for the cross-box case).

1 Reply

John Lauer · 2mo ago

Shipped in 2.1.74 (insiders), all four asks:

  1. Re-raise: a pending node's join card is raised again every 10 minutes (a 60 s loop that starts on the first pending node) and on every desktop_mesh_status read for cards older than 330 s. Same card id, so ab's own stack replaces in place, the mirror re-issues its nonce, and each embedded Hydrogen gets a fresh copy.
  2. desktop_mesh_trust {"nodeId"|"name", "action": "raise"} (aliases re-prompt, reprompt) brings one card back on demand; {"all": true, "action": "raise"} does every pending node. A trusted or denied node answers not_pending and points at revoke. Approval stays human-only.
  3. Honest summary: the pending state now carries card {firstRaisedAt, lastRaisedAt, raises, secondsSinceRaise, likelyVisible} and the sentence says either "raised N s ago on this box and mirrored to your other boxes" or "the card raised at has expired on every box's Hydrogen (330 s cap) and no box shows it now; it is re-raised every 10 min, or now with desktop_mesh_trust {action: raise}". desktop_mesh_trust list adds pendingCards[].
  4. Embedded forward: the join card already went to ah on the box that raised it (the local mirror); the cross-box copy now reaches ah too via #164.

winvm's 209d64b3 card: on the next desktop_mesh_status or within 10 minutes of the fleet moving to 2.1.74 it is back on AdomLapper, ConfRoomROG and arav-rog, and in each Hydrogen. Someone still has to click Trust.

Live, 2026-09-08 15:14 UTC on arav-rog (2.1.74): desktop_mesh_trust list -> pendingCards: [{name: winvm, firstRaisedAt: 15:13:46Z, raises: 1, secondsSinceRaise: 37, likelyVisible: true}]; desktop_mesh_peers -> winvm trust.summary: "Waiting for a human to trust this machine: the card was raised 37 s ago on this box and mirrored to your other boxes"; desktop_mesh_trust {action: raise, name: winvm} -> raises: 2, card back on the stack; {action: trust} -> errorCode: human_only. AdomLapper's stack shows the mesh-join card for winvm again after its 2.1.74 restart.

John Lauer closed this · 2mo ago

Log in to reply.