Skip to content

Cuckoo: quarter-hour nod + hourly trust flourish on the time row (opt-in) - #14

Draft
peterlewis wants to merge 105 commits into
mitxela:masterfrom
peterlewis:cuckoo
Draft

peterlewis wants to merge 105 commits into
mitxela:masterfrom
peterlewis:cuckoo

Conversation

@peterlewis

@peterlewis peterlewis commented Jul 20, 2026

Copy link
Copy Markdown

A cuckoo for the Mk IV: short, scheduled display flourishes on the time row, after the Westminster
pattern — each quarter-hour gets a fixed small gesture (the nod: a shallow brightness trough
sweeping the six big digits left to right, ~550 ms, sub-seconds and colons untouched), and the hour
performs the configured piece.

Videos

Cuckoo (hour): https://www.youtube.com/watch?v=0jkTwYmk7kM
Cuckoo (quarter): Coming soon!

One config key, enable-and-select fused, off by default:

cuckoo = off        # off (default) | trust

trust — how much the instrument actually knows right now: the time row dips to a dim x-ray,
then a relight wave walks HH → MM → SS → ds → cs → ms, each digit relighting to the confidence the
tolerance ladder genuinely holds for it. Fully locked earns one unified pulse; in holdover the wave
dies at the honest position and the dashes return. The final frame of every flourish is the plain
live face — the clock never shows wrong digits.

How it renders. Pieces write per-digit intent levels (0..16, meaning perceived lightness);
the seg_balance dither mirror composes them into duty through a perceptual gamma
(16·(L/16)^2.2) — light output is linear in lit cycles, the eye is not, and the curve is what
made the choreography read on real LEDs. One interleave engine, two clients. With cuckoo = off
the display path is byte-identical to stock. Every envelope is a terminating integer countdown;
MODE_STANDBY and text/countdown modes refuse and abort.

Preview. The on-device menu row (DISP → CUCKOO) performs each value as it is selected — the
menu's colon-preview idiom applied to the flourishes — and cuckoo_preview = trust|nod|on over USB
serial plays once without touching the config. The selection persists in the on-device settings
store (new key id in previously-zeroed record padding; old records round-trip, schema unchanged).

Scope honesty. Time-board-only, for two hardware reasons: the time row reads left-to-right in
both fold poses (only the date board rotates, and it senses its own orientation), and the date
row's UART carries text with no brightness — so whatever it shows (date, ADEV, star transit,
countdown, text) keeps reading truthfully through every flourish. CUCKOO_SPEC.md (in this PR)
records the full design: the cadence law, the stand-in rule, and four further pieces (carry,
heartbeat, pendulum, rain) specified but not shipped — three parked pending visual rework, rain
deferred to the date board; their names parse to off.

Verified: WASM conformance harness 23/23 (envelopes and termination on the plain face,
quarter/hour scheduling through real boundaries, off byte-identity, parked-name safety, preview
semantics); settings-store and factory-reset suites pass; ARM Release clean (174 756 B text);
running on a bench Mk IV. Draft note: the nod's depth (8/16 floor) and sweep rate (30 ms/digit)
are bench-tuned once and marked provisional in the spec.

Stack: based on menu (#13) — followed by zone2 (#15). Merging #5 → … → #13 → this PR
#15 in order is a chain of fast-forwards whose result is byte-identical to the
rollup branch (the tree this feature was
emulator-tested and hardware-validated on).

🤖 Generated with Claude Code

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant