Bring every doc up to date, and give the repo a Wi-Fi template that exists

CONTEXT.md had grown by appending and contradicted itself (all four nodes vs six, a retracted CPU
figure, "no calibration", "nobody enrolled", "audio untested as a service", the Wi-Fi-off boot as
not done, a class the tracker replaced). Rewritten as one current-state document organised by
subsystem, with fresh measurements, the owner's decisions, the gotchas, the neck's arrival-day plan
and what is genuinely still open.

README: status, speakers not fitted, new-session note for Hermes, the calibration section (shipped
calibration, coverage hints, outlier dropping, --from-views), running the tests, the docs row.
HANDOFF.md gets a status banner listing where the original brief has drifted. CLAUDE.md starts at
CONTEXT.md. The echo-cancel config no longer talks about a Pi Zero, and the enclosure guide no longer
tells you to centre a servo with a tool that does not exist yet.

pi/network-config.example is a tracked, credentials-free first-boot template: the README pointed at
pi/50-cloud-init.yaml, which is gitignored and so missing from a fresh clone. The dead IdentityCache
(replaced by the tracker) is removed. Docstrings corrected: audio scope publishing, the MCP health
topics, and what the calibration tool does.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
This commit is contained in:
2026-10-05 08:38:32 -07:00
co-authored by Claude Sonnet 5.5
parent ce7063f647
commit 720a7cfc34
14 changed files with 390 additions and 468 deletions
+24
View File
@@ -0,0 +1,24 @@
# Example first-boot network config for the Pi, with Wi-Fi. COPY it to `network-config` on the card's
# `system-boot` partition and fill in SSID and PASSWORD (or keep a filled copy outside the repo:
# `pi/50-cloud-init.yaml` is gitignored for that, because it holds your password).
#
# cloud-init applies this on the FIRST boot only. To change Wi-Fi later, edit
# /etc/netplan/50-cloud-init.yaml on the Pi (mode 600, owner root), or bump `instance_id` in `meta-data`
# on the boot partition to force a fresh first boot.
# Spaces only, no tabs. Quote the SSID and password.
network:
version: 2
ethernets:
eth0:
dhcp4: true
optional: true
wifis:
wlan0:
dhcp4: true
optional: false
regulatory-domain: US # set your country: the Pi may refuse some 5 GHz channels without it
access-points:
"SSID":
password: "PASSWORD"
+5 -3
View File
@@ -4,10 +4,12 @@
#
# It creates an echo-cancelled mic ("robot_ec_source") and a matching speaker
# ("robot_ec_sink"). After enabling it, uncomment the pulse.device lines in the
# Omarchy tunnel config so the tunnels use these nodes instead of the raw ones.
# Omarchy tunnel config (host/omarchy/50-robot-tunnel.conf) so the tunnels use these nodes instead of the
# raw ones.
#
# WebRTC echo cancellation costs some CPU; a Pi Zero 2 W manages it at speech rates,
# but check `top` afterwards.
# UNTESTED: it only matters once the speakers are fitted (the robot has none yet). WebRTC echo
# cancellation costs some CPU, and the Pi 4 already runs the whole robot with about 40% of the machine
# idle; check `top` and `robot://status` (temperature) after enabling it.
context.modules = [
{ name = libpipewire-module-echo-cancel