Validate the WireGuard fallback branch of hydraheadflatscreen end-to-end, via the normal body-selection procedure (no manual HeadBodyID pinning). Target: peppy (Mac mini, bxl1/rupelmonde, node-74adf4f8) streaming from cosmic (Windows body, bxl1/cloud-seven, node-4c2be4b0) — different subnets, so inherently WG-only.
Two gaps block this today:
Defer: do NOT run before Friday go-live. Park work afterwards.
Server-side, new optional ?head_id= query param on /api/v1/bodies/eligible. When present, server looks up the head and filters: district==head.district AND role=hydrabody AND status=online AND (n.Venue==head.venue OR n.Owner==head.owner). Same-venue matches sort first. When head_id absent, preserve current strict-venue behavior for backwards compatibility.
One-line change in pkg/client/discovery.go:24-28 — append &head_id= to the URL. head_id already in Config. Testbook entry in hydraheadflatscreen/docs/testbooks/.
Do NOT drain. Instead, temporarily move boom-pickle to the existing bxl1-test district (real district in the catalog, id=bxl1-test, name=Brussels Test, on-premise) for the test window, then back. One POST /api/v1/nodes/node-74f9fbf2/district call each way, zero touch on the boom-pickle machine itself.
Risk to validate BEFORE running on boom-pickle: does hydranode react to a district change? Provisioning is per-role so typically no, but unconfirmed. Either grep hydranode for district-reactive paths first, or test the move on a lower-stakes node.
Per feedback_no_manual_deploy: tag + push each repo, GitHub Actions → release server → auto-update. Full kiosk reset on peppy after hydraheadflatscreen update per runbook section 'Full kiosk reset after update (macOS)'.
Phase 0 — preflight: confirm hydracluster new build, peppy agent >=v2.0.25 AND on the new build sending head_id (grep log for bodies/eligible?.*head_id=), wg show peer 10.10.100.12 up, baseline eligibility returns both bodies (boom-pickle first), bxl1-test in districts catalog, record boom-pickle's bxl1/rupelmonde for restore.
Phase 1 — move boom-pickle to bxl1-test: POST /district {"district":"bxl1-test","venue":"rupelmonde"}. Eligibility now returns only cosmic. Full kiosk reset on peppy to clear cachedBody/cachedBodyIP/currentHost (v2.0.25 flip bug caches).
Phase 2 — observe WG branch: tail /tmp/hydraheadflatscreen.log, trigger stream with cosmic experience, expect log literals (from pkg/client/config.go:61,64,68):
Phase 3 — restore (run even on failure): POST /district back to bxl1/rupelmonde. Full kiosk reset. Stream returns to 'routing via LAN: 10.110.0.51'. Eligibility call shows boom-pickle first again.
Plan file: /home/claude-user/.claude/plans/expressive-sniffing-pearl.md