The bf-14wx5 deliverables were written but uncommitted (stuck-open-but-done —
auto-split fired at failure-count:3 only because the templated br close --body
had been failing). Commit the focused set so the bead is genuinely closable.
Adds:
- scripts/run-sim-ble-fixture.sh — canonical, self-verifying fixture: starts a
fresh-data-dir mothership, registers a person (POST /api/people), binds the
sim's advertised AA:BB:CC:DD:EE:00 (walker 0) via preregister + PUT, and gates
on GET /api/ble/devices?registered=true showing person_id/person_name in BOTH
phases.
- notes/ble-identity-fixture.md — reuse-note recording the exact REST sequence,
the observed sim BLE address convention (AA:BB:CC:DD:EE:%02X per walker, ids
from 0), and the answer to "must the device be seen-live first?": NO —
PreregisterDevice sets last_seen_at=now so it falls inside the
GetDevicesSeenInHours window with no live sighting, and the binding survives
live sim --ble advertisements (ProcessRelayMessage upserts never touch
person_id).
Verified 2026-07-08 at HEAD 36b9729: ./scripts/run-sim-ble-fixture.sh PASSes
phaseA (bind with NO live adv) and phaseB (binding survives live adv), exit 0.
All four acceptance criteria met; deliberately excludes scripts/run-sim-
identity.sh (parent bf-2m534 capstone) and notes/hardware-free-runtime.md
(bf-40hc re-verify).
Bead-Id: bf-14wx5