Freeze the capability audit as a dated baseline (V-719)
39 capabilities read off the running five-container stack on 2026-08-13, not off the code. 17 live, 9 partial, 4 broken, 9 off. The owner's corrections are applied: speech in, speech out and wake word are live, and he proved all three by speaking to her. The voice reach stays broken, because reaching her by speaking is a pull and a proactive message needs a session to push into. The claim the spec has to be written against: none of the four broken capabilities is a code defect. Weather has no config block, Nexus has no data, the voice reach has no listener, step-up has no WebAuthn credential. The race suite was green during a run where 22 of 39 capabilities were not live, so no definition of done that a test suite can score is worth writing. Every criterion has to be observable on the box. The task id is unfiled: Vikunja answered 503 for the whole session. --no-verify: master is the working branch this session by the owner's call. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,136 @@
|
|||||||
|
# Maven's gaps are configuration and data, not code: 17 of 39 capabilities live and all four broken ones need no Go written
|
||||||
|
|
||||||
|
- Date: 2026-08-13
|
||||||
|
- Task: unfiled at the time of the run. Recorded 2026-08-15 while writing `docs/spec.md`
|
||||||
|
- Box: homesrv, the running five-container stack (`mavend`, `mavsttd`, `mavttsd`, `mavweb`, `mavpoll`)
|
||||||
|
- Build: `mavend` and `mavweb` on `40bf556`. `mavsttd`, `mavttsd` and `mavpoll` on a four-day-old image
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Every capability was checked against the running stack, not against the code.
|
||||||
|
Seven utterances went through `POST /api/chat`. The rest was read from the
|
||||||
|
startup log, the container list, the config, the outbox and the ten web pages.
|
||||||
|
|
||||||
|
The four states mean:
|
||||||
|
|
||||||
|
- **live**: observed working on the box during the run.
|
||||||
|
- **partial**: works and has a named defect.
|
||||||
|
- **broken**: the path exists and cannot complete.
|
||||||
|
- **off**: switched off or absent on purpose.
|
||||||
|
|
||||||
|
A row whose evidence says "not probed" was read from configuration or logs and
|
||||||
|
not exercised. Those rows are stated as such rather than scored optimistically.
|
||||||
|
|
||||||
|
## Corrections applied after the run
|
||||||
|
|
||||||
|
The original run marked speech-to-text and text-to-speech **partial** and the
|
||||||
|
wake word **off**, because the auditing box could not reach them. The owner
|
||||||
|
demonstrated all three by speaking to Maven and corrected them to **live** on
|
||||||
|
2026-08-13. The tally below carries the correction. The per-row evidence names
|
||||||
|
what the audit could and could not see.
|
||||||
|
|
||||||
|
The voice **reach** stays broken despite that correction, and the distinction is
|
||||||
|
real. He reaches her by speaking, which is a pull. A proactive message needs a
|
||||||
|
live voice session to push into. Every proactive message during the run fell
|
||||||
|
through with "no live voice session".
|
||||||
|
|
||||||
|
## Tally
|
||||||
|
|
||||||
|
| state | count |
|
||||||
|
| --- | ---: |
|
||||||
|
| live | 17 |
|
||||||
|
| partial | 9 |
|
||||||
|
| broken | 4 |
|
||||||
|
| off or absent | 9 |
|
||||||
|
| total | 39 |
|
||||||
|
|
||||||
|
## The turn
|
||||||
|
|
||||||
|
| capability | state | evidence | named gap |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Route an utterance | partial | Router, heads and 331 seeds loaded at start. Five of seven probes routed correctly. | Two probes about her own memory routed to remember instead of query. |
|
||||||
|
| Ask instead of guessing | live | "напомни мне позвонить маме" produced "Сейчас 12:57. Когда?"; "отмена" produced "Хорошо, отменила." | None. V-717 closed on this evidence. |
|
||||||
|
| Speak as herself | partial | One live reply came back masculine: "Хорошо, сохранил." | `CheckFeminine` catches this in the eval and nothing catches it on the wire. |
|
||||||
|
| Answer from your own data | live | "что у меня сегодня по плану?" returned the real 10:30 checklist and its three open items. | None. The strongest path she has. |
|
||||||
|
| Answer from the world | partial | "почему небо голубое?" reached SearXNG and answered with invented physics: "корочковатые цветы отражают длинноволны". | Retrieval works, the Russian summary does not. `Response.Empty()` is the only gate in front of it. |
|
||||||
|
| Read an encyclopedia | live | Russian and English books wired at start, `kiwix-server` up four days. Not probed with a question that reached it. | Confirm a Russian question lands on the Russian book. |
|
||||||
|
| Weather | broken | No `weather` block in the config, so the provider loads as `stub`. "какая сейчас погода?" answers "для какого города?" and the follow-up "Самара" dies with "Я тебя не разобрала." | Configure a provider and a home city; make the source park a clarify instead of emitting a question through the answer path. |
|
||||||
|
| See an image | off | No vision model configured; the seam stores the image and says so. | The gemma-4 mmproj is already on the box. V-667. |
|
||||||
|
|
||||||
|
## Memory
|
||||||
|
|
||||||
|
| capability | state | evidence | named gap |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Facts | live | Environment facts land every minute: `desk_active` from hyprland, `netdata_alarm` from the poller. | One probe answered "я записала информацию о тебе" and wrote nothing. |
|
||||||
|
| Notes | partial | His own taps from 111 hours ago are present, and so is a junk note the probe wrote: "я рассказывал тебе про байкал?" stored as a statement. | No surface deletes a note. `/api/revert` voids facts by key and nothing voids this. V-494. |
|
||||||
|
| Recall | partial | Embedder loaded at 384 dimensions with the marker check passing. | The personal boundary scores the Baikal question as world, which is also the failing case in `TestONNXPersonalBoundary`. |
|
||||||
|
| Memory evaluation | off | Evaluator and daemon loop shipped; it writes notes and cannot speak. Not probed. | Verify on the box before trusting anything it concluded. V-248. |
|
||||||
|
|
||||||
|
## Proactive
|
||||||
|
|
||||||
|
| capability | state | evidence | named gap |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Reminders | live | 50 fired. The ntfy failure ran once a minute until 03:05, then reminder #83 went out over Telegram at 03:06 and nothing retried. | None. V-715 closed on this evidence. |
|
||||||
|
| Interruption policy | partial | At 12:30 the dispatcher logged `dropped morning:утро (sev1, presence=present)` after the voice sink found no session. | Nobody has verified the four outcomes against what they should be. V-281. |
|
||||||
|
| Digest of held nudges | live | A rule's semantic fingerprint is checked before the phraser is paid. Six tests cover it; no suppressed candidate has come through the running daemon yet. | Watch one real suppression cycle end to end. V-687. |
|
||||||
|
| Morning routine | partial | Today's checklist exists with all three items missing, the 08:00-11:00 window passed, and the one delivery attempt was dropped. | The routine builds the plan and never reaches him. V-280. |
|
||||||
|
| Routine proposals | live | Page renders, zero proposed. | Idle, not broken. Nothing proves the detector would fire, and the proposer reads a hand-written Russian verb list. V-606. |
|
||||||
|
| Tasks | live | 5 open, one overdue by four days, captured from the web tap, ordered by deadline and urgency. | Mail-derived task candidates are the untested half. V-130. |
|
||||||
|
| RSS feeds | live | Two sources, checked every five minutes, LWN items as recent as eight hours old and tagged. | Read when asked, never announced. That is the intended shape. |
|
||||||
|
|
||||||
|
## Reach
|
||||||
|
|
||||||
|
| capability | state | evidence | named gap |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Telegram | live | Reminder #83 delivered at 03:06 through the socks relay; intake reading his chat since restart. | None. |
|
||||||
|
| ntfy | off | `"disabled": true` in the committed config and no `NTFY_TOKEN` in the environment. | Off on purpose after the 403 storm. Re-enabling needs a write-scoped token first. |
|
||||||
|
| Voice | broken | Every proactive message during the run fell through with "no live voice session". | The wire is up and nothing is listening on it. He reaches her by speaking; she cannot reach him. |
|
||||||
|
| Web UI | live | All ten pages answered 200, the slowest in 31ms. | None. |
|
||||||
|
|
||||||
|
## Speech and senses
|
||||||
|
|
||||||
|
| capability | state | evidence | named gap |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Speech to text | live | Corrected by the owner, who transcribed real speech on the day. The audit box saw only that the workstation transcriber answers 200 on `192.168.1.105:8081` and that `mavend` probes it every 15s. | `mavsttd`, the local floor, runs a four-day-old image and its arm was not exercised separately. |
|
||||||
|
| Text to speech | live | Corrected by the owner, who heard her speak on the day. The audit box saw only that the container was up. | Same four-day-old image. |
|
||||||
|
| Wake word | live | Corrected by the owner, who woke her by voice. Runs on workpc under systemd, outside this stack and unreachable from the audit box. | Its relationship to the dark voice reach is unproven: waking her is not the same as her having a session to push into. V-515. |
|
||||||
|
| Hearing | off | No capture client ships, so the path is unreachable. | Build the client or the capability stays theoretical. V-514. |
|
||||||
|
| Speaker recognition | off | Planned, not verified on the box. | V-255. |
|
||||||
|
|
||||||
|
## The ecosystem
|
||||||
|
|
||||||
|
| capability | state | evidence | named gap |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Nexus | broken | Reachable and empty: "no entities yet". | Free text must resolve to a canonical entity id before any mutating call, so every act naming a target has nothing to resolve against. Seeding is a Nexus-side job. |
|
||||||
|
| Praxis | live | Answers, reports nothing needing attention. | Nothing to do until it has something to surface. |
|
||||||
|
| Hexis | partial | Registry populated: docker start, stop, restart, inspect, git diff and history, all through `workspace_mcp` with risk and access marked. | Blocked behind the empty Nexus. The capabilities exist and the targets do not. |
|
||||||
|
| Smart home | off | `"enabled": false` in the config. | Blocked task, not a defect. V-256. |
|
||||||
|
| LAN scan | live | Enabled in config with subnets, ports and rate set. Not probed. | Bluetooth control stays blocked; no bluez on the box. V-257. |
|
||||||
|
|
||||||
|
## Operations
|
||||||
|
|
||||||
|
| capability | state | evidence | named gap |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| The deployed stack | partial | Five containers up. `mavend` and `mavweb` rebuilt at `40bf556`; `mavsttd`, `mavttsd` and `mavpoll` on the four-day-old image. | One `docker compose up -d --force-recreate` on the three closes the drift. |
|
||||||
|
| Encrypted database | live | Encrypted at rest, working copy in tmpfs, key from the environment and held only by `mavend`. | None. |
|
||||||
|
| Passkey and step-up | broken | WebAuthn unconfigured, so every step-up gate is fail-open, including `POST /api/chat`, which reaches the act path. | The only high-severity item: anyone past the proxy can enroll a passkey, and step-up is process-global. V-683. |
|
||||||
|
| Model swap | off | No `phraser.swap_models` allowlist, so the page has nothing to offer. A swap is never written down and does not survive a restart. | Add the allowed gguf paths, or accept that the resident model is whatever the config says. V-250. |
|
||||||
|
| Self-update | off | Blocked at step 3: `mavupdate` cannot reach the containerized socket. | V-477. |
|
||||||
|
| Tests and analyzers | live | Full race suite green across `./internal/...` and `./cmd/...`. Lint clean against 16 accepted findings, deadcode against 13. | One latency test fails only under the coverage run. V-718. |
|
||||||
|
|
||||||
|
## What this rules out
|
||||||
|
|
||||||
|
It rules out a roadmap ordered by code work. None of the four broken
|
||||||
|
capabilities is a code defect. Weather has no configuration block. Nexus has no
|
||||||
|
data. The voice reach has no listener. Step-up has no WebAuthn credential. Nine
|
||||||
|
more capabilities are off by choice, or blocked on hardware and operator action.
|
||||||
|
|
||||||
|
It also rules out a definition of done that a test suite can score. The suite
|
||||||
|
was green during this run and 22 of 39 capabilities were not live. Every
|
||||||
|
acceptance criterion has to be observable on the running box: an utterance and
|
||||||
|
its expected answer, a log line, an outbox row, or an HTTP response.
|
||||||
|
|
||||||
|
Two capabilities were scored on the owner's correction rather than on machine
|
||||||
|
evidence. Those two are speech in and speech out, which is exactly what a stack
|
||||||
|
audit cannot see from inside the stack. Any future audit run from `mavend`'s
|
||||||
|
network namespace repeats the mistake unless it asks him.
|
||||||
Reference in New Issue
Block a user