Closed general

Firewall/UAC-class prompts ab causes must be explained on-screen (caption) and mirrored to the user's other boxes over mesh AND relay

John Lauer · 2mo ago ·closed by John Lauer

What happened

I turned the Adom Mesh on for arav-rog remotely (settings_set {mesh_enabled:true} over the relay, 2026-09-06). Binding the mesh QUIC endpoint on a network interface made Windows show its "Do you want to allow public and private networks to access this app? Adom Bridge, Publisher Adom Industries, Inc." firewall dialog on arav-rog. Nobody was at that keyboard; John found it by chance later and did not know whether it was safe to approve. He was scared of it. Adrian would be too. Ray hides ab toasts entirely.

The dialog itself is the sanctioned cost of the mesh opt-in (CLAUDE.md: the one acceptable firewall moment is the user flipping that switch). What is missing is everything around it.

What must change (2.1.54)

  1. Explain it on the screen it appears on, with a CAPTION, not a toast. At mesh listener bind time, show a persistent ab caption: Windows is about to ask to allow Adom Bridge on the network; this is the Adom Mesh you turned on; the only thing it exposes is an encrypted, authenticated (TLS 1.3 + ed25519 node identity) endpoint that only machines signed into YOUR account can connect to; every other ab listener stays on 127.0.0.1; click Allow; Cancel writes a permanent block rule. Keep the caption up until the "Windows Security" window is gone (window enumeration), with a timeout. Toasts are not enough: Ray hides them.
  2. Mirror it to the user's other boxes as a permission event. New mirror type firewall-prompt alongside the #157 decision mirror: "arav-rog is showing a Windows Firewall prompt for Adom Bridge (Mesh was just turned on). Go approve it there: click Allow." Informational (it cannot be approved remotely; a human must be at that box). Deliver over the mesh AND over the hc relay to every same-account connected ab - the relay is the fallback mesh, and this fires precisely when the mesh is not up yet, so mesh-only delivery would never reach anyone.
  3. Remote trigger = mandatory mirror. When mesh_enabled was set by a verb from another machine (relay/mesh caller), ab knows nobody is at the keyboard: the mirror is required, not best-effort, and the caption text says who turned it on and from where.

Also worth checking

winvm is a headless Azure VM: an unanswered firewall dialog there waits forever with inbound blocked. Same class of surface applies to any future UAC-class prompt ab is allowed to cause (the two sanctioned elevations): announce, explain, mirror.

5 Replies

John Lauer · 2mo ago

Evidence from the fleet (read-only Get-NetFirewallRule for adom-bridge.exe, 2026-09-06):

  • arav-rog: Inbound Allow, Public - John's click today, after I enabled the mesh there remotely.
  • ConfRoomROG: Inbound Allow, Public - its mesh was on before today, so the prompt fired earlier and was answered; nobody remembered doing it.
  • winvm (headless Azure VM): Inbound Block, Public - the prompt fired to an empty screen and Windows wrote a permanent block rule. winvm still works over the relay (outbound is never blocked) but no peer can open a direct inbound path to it until a human flips the rule in an elevated shell (Set-NetFirewallRule -DisplayName 'adom-bridge.exe' -Action Allow). ab must never do that itself (elevation is forbidden).

This is the exact silent failure the issue exists for: same network as ConfRoomROG, different outcome, purely because of who was at the keyboard when the listener first bound. The caption + mirror in (1)-(3) would have put the prompt in front of John on AdomLapper for both arav-rog and winvm. Also confirmed: a read-only desktop_find_window {titleContains:"Windows Security"} returned NO match on arav-rog while the dialog was visibly on screen, so the caption's dismiss logic cannot rely on plain window enumeration - needs verifying against UIA or the firewall rule appearing.

John Lauer · 2mo ago

Shipped in 2.1.56 (whole fleet is on it now).

How it works:

  • mesh::spawn_with_trigger(app, BindTrigger) is the single bind entry point. Boot re-binds are silent; a LocalUser (Settings toggle here) or Remote (a verb from another machine) enable draws an on-screen CAPTION via caption::show_local BEFORE the endpoint binds, so it is up when Windows pops the dialog. The caption explains what Windows is asking, that only machines signed into your own account can connect (TLS 1.3 + a per-machine ed25519 key), that every other listener stays on 127.0.0.1, and to click Allow and tick BOTH profiles (Cancel just blocks the mesh). It clears the instant the #32770 Windows Security dialog is gone (best-effort EnumWindows poll) and always self-clears within 60s, with an X, so it can never strand.
  • A Remote enable (nobody at that keyboard) makes the caption name who turned it on and from where, and MANDATORY-mirrors a firewall-prompt notice to every same-account box: over the hc relay (the reliable channel, since that box's own mesh is only just binding) AND best-effort over the mesh, deduped by noticeId. On the other boxes it renders an INFORMATIONAL card in the permission stack (" is showing a firewall prompt for the Adom Mesh - go approve it there"), with one "Got it" button and no decision routed, because a human must be physically at that box. It shows in-window (not just a toast) so a toast-blocking box (Ray) still sees it.

Verified live on 2.1.56: turning the mesh on drew the mesh-firewall caption (confirmed via desktop_caption action:list). This is now the general rule for any Windows prompt ab can cause (documented in CLAUDE.md): explain it on the screen it appears on, and tell your other boxes.

Note the detection caveat you flagged: some Windows builds render that dialog on a surface EnumWindows cannot see, which is exactly why the caption also has a hard 60s cap and an X rather than relying on the poll.

John Lauer · 2mo ago

Shipped in 2.1.56 (whole fleet is on it). A LocalUser or Remote mesh-enable draws an on-screen CAPTION before the endpoint binds (what Windows is asking; only your own signed-in machines can connect via TLS 1.3 + per-machine ed25519; every other listener stays on 127.0.0.1; click Allow + tick both; Cancel just blocks the mesh). It clears when the #32770 dialog is gone and self-clears within 60s with an X. A Remote enable also mirrors an informational firewall-prompt card to every same-account box over the relay AND mesh (go approve it there; cannot be approved remotely; shown in-window so a toast-blocker still sees it) and the caption names who/where. Verified live: mesh-firewall caption confirmed via desktop_caption action:list. Detection caveat you flagged is handled: some builds render the dialog where EnumWindows cannot see it, so the 60s cap + X are the fail-safe, not the poll.

John Lauer · 2mo ago

2.1.58 (fleet is on it): polish on the mirrored notice card, all three caught by John in the 2.1.57 proof screenshot. The notice text now wraps as prose in the UI font (it was in the perm stack's monospace command box and split words mid-line); the panel's decision-button legend (Once/Deny/1h/24h/Auto, web grants, credential UAC) is hidden while only informational Got-it cards are showing; and a box no longer renders a notice about itself (the relay all-broadcast echoed the sender its own notice - the origin already has the on-screen caption). Verified on AdomLapper with a notice about arav-rog: displayed, prose-wrapped, no legend, ON ARAV-ROG chip; a notice about AdomLapper itself returned displayed:false.

John Lauer · 2mo ago

Closing: shipped in 2.1.56 (caption drawn before the mesh bind + firewall-prompt card mirrored over mesh and relay), polish in 2.1.58 (prose wrap, legend hidden for info-only cards, no self-notice). Fleet is on 2.1.72 insiders; nothing left open in this thread.

John Lauer closed this · 2mo ago

Log in to reply.