Files
Maven/HANDOFF-2026-08-15.md
T

94 lines
4.3 KiB
Markdown

# 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:
- `78a9c61` `docs/spec.md`, 51 capabilities with a DoD each.
- `02e3d27` `docs/roadmap.md`, seven milestones, plus both pointer rows in `CLAUDE.md`.
- `5cae33a` honesty 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.Reminder` carries
`Cron` and `ipc.CreateReminder` takes one. `grep "Cron:" --include='*.go'`
outside tests returns only `internal/ipc/client.go`, `internal/ipc/storeapi.go`
and `cmd/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 `chain` in `internal/router` is the
world chain and the source chain.
- **Desk notifications are inbound only.** `ambient:notif` reads 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`:
1. The capability audit itself, headed "unfiled".
2. Remember-versus-query misroute, two of seven audit probes.
3. The masculine reply on the wire, caught live while `CheckFeminine` passed.
4. Recurring reminders having no caller.
5. The seventeen capabilities with no living doc.
6. 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:
```sh
docker compose up -d --force-recreate mavsttd mavttsd mavpoll
```