Skip to content

Milestones

Zlatko Lakisic edited this page Aug 3, 2026 · 2 revisions

Milestones M0–M9

Condensed from docs/IMPLEMENTATION_PLAN.md. Live checkboxes: Progress Tracker.

Milestones journey


M0 — Ground truth (6h)

Goal: every verifiable SPEC in Contracts becomes VERIFIED with real captured responses. No product code.

Key tasks: CPAI probe + fixtures · GPU/contention check · ao_reach hello spike · TalkingHead API note · Pi baseline · audio routing ADR.

Exit: real CPAI JSON for detect/hit/miss · miss-shape answered · CUDA confirmed · reach_hello works · TalkingHead spoke on desktop · ADR 0001 written · BASELINES populated.


M1 — Skeleton & config (8h + DEV_LOOP)

Goal: three processes start, parse config, structured JSON logs, loopback WS, clean SIGTERM.

Key: typed config (unknown keys fatal) · logger + Span · local WS 8777/8778 · clients with backoff · systemd units · remote Dev Loop.

Exit: analyze/ruff/mypy clean · 10 min uptime · reconnect <5s · doctor/logs/deploy/rollback · LAN bind refuses without gates.


M2 — Vision client (10h)

Goal: Dart CPAI client + frame grabber + poll loop emitting vision events. No state machine yet.

Key: long-lived ffmpeg grabber · detect/recognize · vote-based identity · fps switch · fake CPAI from fixtures.

Exit: offline tests green · live resolve userid <2s with recognize ~once · no fd leak · vision.degraded works.


M3 — Attention state machine (12h + console)

Goal: CONTRACTS §8 as pure logic with injected clock, 100% branch coverage, all invariants.

Key: sealed events/states · effects as data · effect runner · turn_id · fake-clock timers · dev console.

Exit: property test 10k sequences · golden scenarios · no await in handle() · console walks the ladder.

M3 machine purity


M4 — Audio pipeline (14h)

Goal: wake + VAD on real Pi mic, tuned threshold, PCM to bridge.

Key: capture ring · train hey_comstar.onnx · runtime wake · VAD + pre-roll · streaming · ROC table · do not drop threshold to fix a bad mic.

Exit: 0 false accepts on 60 min room · ≥90% at 3 m quiet · ≥70% with TV · ROC committed · idle CPU <15% one core.


M5 — AO Reach session (12h)

Goal: face recognition opens identity-mapped AO session; typed question → spoken-appropriate text.

Key: session manager · greeter/voice overlays · guest restrictions · terminal + vision MCPs.

Exit: p95 <10s text turn · no markdown in answers · 20 open/close leave zero overlays · guest cannot reach HA.


M6 — Voice round trip (10h)

Goal: speak a question, hear an answer. No avatar required for this gate.

Key: STT/TTS clients · runner wiring · fallback WAVs · latency report · half-duplex barge-in policy · Reach speech prefer (ADR 0003).

Exit: 20 consecutive spoken answers · p50 <8s / p95 <15s · orchestration dominates · fallbacks offline · wake blocked during playback.


M7 — Avatar & kiosk (14h)

Goal: avatar on Pi screen driven by bridge messages.

Key: kiosk shell · SVG/TalkingHead · state visuals · render path ADR · WebGL failure fallback · reconnect.

Exit: ≥24 fps on chosen path · lip-sync acceptable (when GLB) · ADR written · kiosk death does not wedge bridge · voice survives GLB failure.


M8 — First contact (10h)

Goal: the demo. Walk up. Greeted by name. Ask. Spoken answer. Under 15s.

Key: full wiring · greeter <1.5s · follow-up window · stranger modes · enroll script · demo mode overlay.

Exit: 10/10 greet attempts · greeting p95 <2s · turn p95 <15s · guest restricted · stranger can use without instructions.

First contact demo


M9 — Hardening & soak (16h)

Goal: survives a week unattended.

Key: failure matrix · backoff everywhere · resource limits + watchdog · 24h soak · retune wake from real audio · runbook · privacy audit.

Exit: 24h zero crashes · ≤2 false wakes · flat memory/fds · auto-recover every failure row · privacy claims verified.


Related pages

Clone this wiki locally