Every figure on this page is aggregated from the operator’s local ride
corpus by
tools/cue-results/aggregate.py; run
python3 tools/cue-results/aggregate.py from the repo root to reproduce it.
The corpus itself (rides/) is field data and stays out of the repo
(NFR-005: it is gitignored), so this page is a dated snapshot, and the
command reproduces it wherever the corpus lives, not on a fresh clone. For
a corpus a fresh clone can reproduce, make demo-corpus generates a
synthetic, coordinate-free ride set that the same tools consume
(aggregate.py demo-rides, ablate.py demo-rides).
Negative results stay on the record: missed coverage is preferable to noisy
cueing (NFR-001), and the same ethos applies to reporting.
Corpus snapshot: rides of 2026-07-20 through 2026-08-08.
Re-verified 2026-09-12: 23/23 traces and regenerated aggregate evidence. Raw GPS exports remain private.
The same kernel/cue_policy.c runs in three places: live on the phone, as
the MCU actuator (Pico W, RFC 0006), and offline in the replay harness; and
the contract is that all three agree on the recorded logical decision fields.
Shared code can also share defects.
| Contract check | Result |
|---|---|
Offline replay of every corpus ride trace (replay_cli, NFR-003) |
23/23 traces exit 0: every recorded decision reproduced exactly |
| Phone ↔ Pico shadow comparison, per-step, live during rides (RFC 0006 D5) | 11,301 steps logged, 11,300 compared, 0 divergences, 0 orphan reports across 8 instrumented rides |
Pico state-size tripwire (SESSION_ACK state_size vs. static_assert) |
Implemented session-start guard; same-size behavioral drift can pass it |
The one logged-but-uncompared step is a tail record with no recorded report. Its tail position is confirmed; the cause of the missing report is not independently established by this re-verification.
| Metric | Value |
|---|---|
| Ride traces | 23 (19 with motion; the rest are stationary bring-up captures, kept because they replay too) |
| Distance | 88.1 km |
| Kernel steps | 57,783 |
HEAD_UP cues fired |
42 |
| Cues graded by the rider | 33, across 13 rides |
| Grade | Count | Reading |
|---|---|---|
useful |
17 | |
too_late |
7 | Drove the §13 max_notice_s 15 → 20 widening, which then failed and is on the record in kernel/cue_policy.h |
unrecognized |
7 | A delivery/perceptibility outcome, not a policy one (see grading-guide.md); moves no policy lever |
too_early |
2 | |
false_alarm |
0 |
The exports expose incomplete delivery coverage across watch haptics and the Pico buzzer. Replay agreement cannot rule out policy defects or prove that output reached the rider.
| Metric | Value |
|---|---|
| Watch dispatches | 49 |
| Marked delivered live by watch telemetry | 27 (median latency 542 ms, min 25, max 2,890; n=27) |
| Queued without recorded live delivery | 22 of 49 dispatches; not a general failure-rate estimate |
Of the 27 delivered: watch verdict play |
18 (4 duplicate, 5 pre-verdict schema) |
| Pico reported actuations | 15 records marked actuated |
| Reported buzzer actuation delay (decision → GPIO) | 138–173 µs (median 147 µs, n=13; 2 early records at ms resolution) |
The unrecognized grades and queued dispatches concern different observation
boundaries. Their aggregate counts do not establish a cue-by-cue causal link.
Transport acknowledgements, play verdicts and actuation flags do not independently
prove physical output or perception. The 49 dispatches are not 49 unique kernel cues.