Public: anyone can read this; the crew can change it.

Migrated from github.com/Trevato/SO-ARM100

workbenchthis machine

A Data view to explore the arm: people, precision, latency and health, over time, on any screen #508

stopped parked by the crew opened this
opened this

Owner, 2026-10-22: "build me a wonderful view for any screen size in any context in the app. I will want to explore it, so more of a data viz tool… make sure your metrics are solid." The owner is sending the arm out to people now. This is the place to see how it's going.

A Data view in the app (owner and moderators), reachable from the admin settings and from a "Data" entry in the dock or tabs.

Exploration, not a static report:

  • Time range brush: last hour, day, week, all, plus a drag to zoom on a time series. Every chart follows the same range.
  • Overview strip (big numbers with sparklines): visitors, driving sessions, drivers, minutes driven, snap-backs per 100 releases, p95 time to arrive, p95 command → confirmed motion, jams, uptime.
  • Precision:

- Per-joint small multiples of settle error and arrival time over the range. - Snap-backs by cause as a stacked bar over time. - The worst sessions, listed and clickable to a session detail: that session's joint traces (intent against actual), the events (jam, block, STOP, release) as marks on the timeline, and its latency hops.

  • Latency: per hop (page → relay, relay → Pi, Pi read-back → relay, read-back → page) as p50/p95 bands over time, plus a histogram for the range.
  • People:

- Live watchers and drivers now. - Visitors per hour (anonymous against named). - Queue length and wait. - Turn length. - Chat volume. - Where people drop off (joined but never drove; drove under 10 s).

  • Health:

- Camera fps per camera. - Link reconnects. - App and Pi restarts with their cause (deploy, crash). - Pi temperature and under-voltage flags. The Pi already logs them every minute in /var/log/so101-health.log; expose them.

  • Every chart: hover or tap shows exact values. A "compare to previous period" toggle. Version markers (deployed commit) on every time axis, so a change's effect shows.

Any screen:

  • Phone portrait: one column, the overview strip as swipeable cards, charts full width.
  • Phone landscape: two columns.
  • Tablet and desktop: a dense grid, like Grafana's best.
  • Both color schemes; never covers the camera; reduced-motion respected.
  • Canvas or SVG, drawn by hand or with a small charting library vendored like three.js. No heavy framework, and the page stays fast: the Data view is loaded only when opened.

Data that must exist first (do these as part of this issue, each tested):

  1. The precision rows carry the real deployed commit. The Pi now has a COMMIT file. The relay should push its own commit too.
  2. A sessions table, one row per turn: who (or anonymous id), start, length, releases, snap-backs by cause, jams, p95 arrive, and the latency hops. Plus an events table: jam, block, STOP, park, reconnect, restart. Keep 90 days in the app's data dir.
  3. Visitor and turn facts from the lobby: joins, names set, turns started, turns ended (why), queue waits.
  4. One read API for the view: GET /data?from&to&step (owner and moderators), returning the series the charts need, pre-aggregated per step.

Tests: the aggregation math, the API auth (anonymous gets 403), and layout at 390×844, 844×390, 820×1180 and 1440×900 (no overflow, nothing 0 px, the camera never covered).

the crew's run was interrupted: restart, resumes on the next pass — cancelled
commented

Parked by the crew: the preview's deploy failed and the decider saw no point in another try (pull #519 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.

commented

Re-planned. Pull #519 had the whole base on quill/508-a-data-view-to-explore-the-arm-people-pr and failed only because main was red at the time (fixed in 2d8bec1). It is now three single-pull pieces taken from that branch: #528 (the facts store, ready), #529 (GET /data) and #530 (the /admin/data page). Pi health is now #531 and #532, and session traces are #533 and #534. This issue waits on all of them.

commented

Already done on main in 5f2aecf, cc68622, 50021dd, 9ba11cb and f532441:

  • 5f2aecf: the facts store (turns, events and per-minute samples, 90 days, each tagged with its commit).
  • cc68622: GET /data (403 for anonymous visitors and plain users).
  • 50021dd: the /admin/data page (ranges, zoom, compare, version marks, worst sessions, layouts for 390×844 through 1440×900).
  • 9ba11cb: Pi temperature and under-voltage under Health.
  • f532441: a session's joint traces, intent against actual, with event marks.

The Pi readings (82abcda) and the trace store (27e9c27) back the last two. The view is linked from /admin and from the app's Admin tab. A person can close this, because my close as done is refused.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs