Appearance
Theseus BLE discover and confirm
Approved: 17 September 2026 (#156)
On the map picker screen, Theseus hears nearby WTK_ advertisements, matches them to snapshot beacons by uname, and a tap writes pixel x/y through T5 field APIs (POST /theseus/beacons/:id/confirm).
This is phone BLE, not Gateway ID / Gatify, not Hansel printed-MAC deploy, and not route authoring.
No operator-actions row. OA-AT-hansel-mac-qr stays later.
Scan
flutter_blue_plus. Thin scanner intheseus/lib/ble/(not a shared package, not an Ariadne fork).- Keep
advNamestartingWTK_. Skip ads withserviceUuids(battery). - Discover every heard
WTK_*. Do not require Ariadne’s active-uname allowlist. - If BLE is unsupported, the adapter is off, or permission is denied, show a short in-app status. Do not copy Keryx permission-recovery.
Match and confirm
- Join heard name to
NavBeacon.unameon the current floor. - Matched rows are confirmable. Unmatched names stay in the list and cannot POST (no beacon create).
- Operator selects a matched row, then taps the map. No confirm without a selection.
- The InteractiveViewer child is the PNG’s intrinsic pixel size, so tap
dx/dyare floorx/y. - Optional
maconly whenremoteIdnormalizes to 12 hex. iOS UUIDs are omitted. Auth isBearer th_…only.
Non-goals
Flame, Gatify, Hansel MAC/holder QR wizard, trilateration, fingerprint survey, pathfind, end-user maps, FCM, staff ntfy, safecall-ops, hospital rasters / mar.json. Graph drawing is route authoring.