4.3 KiB
Handoff
Master is at 5cae33a, pushed, tree clean apart from this file. Working on master
raw by the owner's call: no branch, --no-verify on every commit with the reason
in the body.
Landed this session
Twelve commits pushed. Nine were the previous session's tree, already described in the commit log. Three are new:
78a9c61docs/spec.md, 51 capabilities with a DoD each.02e3d27docs/roadmap.md, seven milestones, plus both pointer rows inCLAUDE.md.5cae33ahonesty split into three milestones, five capabilities deferred past v1.
Read docs/spec.md and docs/roadmap.md before anything else. Every decision
from this session is in them. This file holds only what they do not.
The two documents
docs/spec.md is the union of the 39 audited rows
(docs/evals/2026-08-13-capability-audit.md) and the owner's 18-item v1 list.
Twelve of his items had no audit row, so the file has 51 entries. Each entry
carries three parts. State is a reference to the living doc that owns it. DoD is
a plain list observable on the running box. Scenario names a file in
cmd/mavend/testdata/scenarios/.
docs/roadmap.md orders them into nine milestones. Honesty, then reach, then
breadth. Not ordered by code work, because none of the four broken capabilities is
a code defect.
Decided, do not re-ask
- v1 is a voice assistant, minimum viable. Each DoD is written at "voice-reachable and honest", not "feature-complete".
- Honesty splits into three. M1 the turn path, M2 memory he cannot correct, M3 step-up. M1 and M2 touch different code and owe different docs. Step-up is configuration, not honesty, and sits before M4 because M4 is what first makes acts real.
- Five capabilities deferred past v1 (owner's call, 2026-08-15): speaker recognition, smart home, bluetooth control, model swap, self-update. Bluetooth was on the v1 list and came off it. Their spec entries keep their DoD.
- A milestone closes its own doc gaps and writes its own scenarios. Neither becomes a milestone of its own. Otherwise the 17 missing docs and 46 missing scenario files collect at the end.
- Learning means behavioral, not weights. Stored outcomes only. No adapter, no training set.
- Email and calendar need the product decision before deploying. Both are
built and neither is in
docker-compose.yml. That is M8.
Findings the spec pass produced
- Recurring reminders do not exist on the spoken path.
store.RemindercarriesCronandipc.CreateRemindertakes one.grep "Cron:" --include='*.go'outside tests returns onlyinternal/ipc/client.go,internal/ipc/storeapi.goandcmd/mavend/tick_routines.go, and the last is routines, a separate mechanism. Pills, the dog, the vet and the kibble are unbuilt on top of finished storage and delivery. This is M6. - Seventeen capabilities have no living doc. Memory is the worst cluster: facts, notes and the digestion worker have no owning document at all.
- Webhooks barely exist. The only one in the tree is
internal/delivery/telegramsink/intake.go, Telegram's own inbound hook. - Command chaining does not exist. The
chainininternal/routeris the world chain and the source chain. - Desk notifications are inbound only.
ambient:notifreads his desktop. There is no outbound desk reach, and which direction he meant is undecided. - Only 5 of 51 spec entries cite a scenario that exists.
Not filed, and this is the risk
Vikunja returned 503 across this session and the last, so none of this has a
task id. The three commits above are tagged V-719, which is the
reminder-cancellation task, not this work. Retag or file when Vikunja is back.
Unfiled, listed again at the end of docs/roadmap.md:
- The capability audit itself, headed "unfiled".
- Remember-versus-query misroute, two of seven audit probes.
- The masculine reply on the wire, caught live while
CheckFemininepassed. - Recurring reminders having no caller.
- The seventeen capabilities with no living doc.
- The 46 scenario files the spec names and does not have.
Next
Open a session on M1, which is three gate items on the turn path and owes no new doc. If Vikunja is up, file the six above first and give M1 a real id.
One command still outstanding from the last session, cheap and unrelated:
docker compose up -d --force-recreate mavsttd mavttsd mavpoll