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
{{ message }}
Repository navigation
Commit 1272936
Browse filesBrowse the repository at this point in the historyBrowse files
Vendor 48944dd: the Monitor's "Waiting" screen now actually waits
The reported failure: a Viewer scans the web Monitor's QR and is told the
pairing code has expired, on a code that was just minted. v2.0.6 fixed a
real code-rotation bug but not this one.
Root cause is that the web Monitor was never connected. openWatchPair()
set the channel, minted a code, drew the QR and showed "Waiting for the
Viewer" with a spinner — and opened no socket. The relay learns a room's
ticket only from a station hello, so nothing was registered, and admit()
turned the Viewer away. It reported that as 4008 "pairing expired", which
is the one thing it was not: the code was fine, the Monitor was off. The
Viewer rescanned the same QR and looped. Pressing "Start watching now" was
what actually connected, which nothing on a screen claiming to be waiting
suggests. app-as-Monitor was never affected — the native shell runs its own
pairing screen and connects itself.
Reproduced against a container at the protocol level: a viewer hello into a
room no station has registered closed 4008 "pairing expired", byte for byte
what a genuinely wrong ticket gets.
- start() gained opts.stayPut: all of its work (camera, ticket, socket,
room) with the caller's screen left up. openWatchPair() uses it, so the
screen is honest and a scan right then pairs. Both stand down under the
native shell.
- "Start watching now" is now only the move to the live view; leaving the
screen tears the Monitor down rather than abandoning a live camera.
- 4010 "monitor offline" splits "no Monitor has ever registered this room"
from 4008's "this ticket does not match", with its own sentence in both
locales. The Android app needs no change for it — an unknown reason for a
viewer already lands on its monitor-offline screen.
Verified in an isolated container: the 4008/4010 split end to end, 17
structural checks including that the QR's `t` and the registered hashT are
the same secret, the 12-check pairing-rotation suite from v2.0.6 still green
in both directions, and the v2.0.5/v2.0.6 origin gate unchanged (127.0.0.1,
[::1] and `Origin: null` admitted, https://evil.example still 403).
rendezvous/room.js has the same 4008 conflation and additionally counts it
as an auth failure against the room's lockout. Not touched here — that is
the cloud relay and needs a wrangler deploy.
Operators pick this up with: docker compose pull && docker compose up -d
No Android app rebuild is needed.
Co-Authored-By: Claude Opus <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uct7Y3wVjJHTuX5F31a3dZ
Copy file name to clipboardExpand all lines: app/public/i18n.js
+5Lines changed: 5 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -88,6 +88,10 @@
88
88
w_bail_not_on_wifi: 'This phone is not on Wi-Fi yet. Connect it to Wi-Fi and try again.',
89
89
w_bail_wifi_only_code: 'This code only works on the same Wi-Fi as the other phone. Put both phones on the same Wi-Fi and try again.',
90
90
w_bail_already_running: 'This monitor is already running on another phone.',
91
+
// The relay has no ticket for this room at all: the Monitor is not running,
92
+
// which is a different thing from a code that stopped working. Saying
93
+
// "expired" here sent people back to rescan the same QR for ever.
94
+
w_bail_monitor_offline: 'The monitor is not online yet. Open Tawny on the monitor phone or computer and press Start, then scan again.',
91
95
w_msg_expired: 'That pairing code has expired. Show a new code on the monitor phone and scan it again.',
92
96
},
93
97
@@ -160,6 +164,7 @@
160
164
w_bail_not_on_wifi: 'Este teléfono aún no está en Wi-Fi. Conéctalo a Wi-Fi e inténtalo de nuevo.',
161
165
w_bail_wifi_only_code: 'Este código solo funciona en la misma red Wi-Fi que el otro teléfono. Pon los dos teléfonos en la misma Wi-Fi e inténtalo de nuevo.',
162
166
w_bail_already_running: 'Este monitor ya se está ejecutando en otro teléfono.',
167
+
w_bail_monitor_offline: 'El monitor aún no está en línea. Abre Tawny en el teléfono o la computadora del monitor y pulsa Iniciar, luego vuelve a escanear.',
163
168
w_msg_expired: 'Ese código de vinculación caducó. Muestra un código nuevo en el teléfono monitor y escanéalo otra vez.',
0 commit comments