Record the recall measurement and the two subsystem contracts (V-719)

docs/evals/2026-08-15-locative-answerability-verifier.md rules the
resident model out as a recall answerability verifier. Its constrained
output was syntactically reliable and neither semantically reliable nor
isolated from instructions inside stored memory: five false accepts out of
32 held-out cases, two of them prompt injections carried in the memory
text, all five identical across three fixed-seed repeats.

design.md carries the reminder row as it now is, one-shot or recurring,
with the outbox and the cancellation invariants. routing.md carries the
new stage 0 frames and the cancellation rung. deployment.md carries the
/reminders contract. The assistant_workday scenario exercises the turn
sequence end to end.

--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:
2026-08-15 17:19:38 +04:00
parent 1b5d35ad37
commit db50c34c23
5 changed files with 249 additions and 7 deletions
+17 -1
View File
@@ -97,7 +97,7 @@ Text-to-speech has not moved. piper on homesrv is the only synthesizer.
| Binary | Role |
|---|---|
| `mavend` | **Core.** Router, phraser, memory, reminders, digestion tick. Owns the DB and IPC socket. |
| `mavweb` | HTTP UI and PWA (`/dash`, `/history`, `/trace`, `/notifications`, `/tools`), WebAuthn auth. |
| `mavweb` | HTTP UI and PWA (`/dash`, `/chat`, `/history`, `/trace`, `/notifications`, `/reminders`, `/tasks`, `/events`, `/tools`, `/ecosystem`, `/morning`), WebAuthn auth. |
| `mavsttd` | Speech-to-text (whisper.cpp, CGO). |
| `mavttsd` | Text-to-speech (piper subprocess). |
| `mavwaked` | Wake-word and VAD gate. Runs on workpc. |
@@ -233,3 +233,19 @@ lives in Go, and the sidebar is data (`sidebarSections`, `pageIcon`) the templat
renders. No per-page `<style>` beyond true one-offs. Wrap every table in
`<div class=scroll>` so wide data pans on a phone. Local preview and headless
screenshot recipes are in `AGENTS.md`.
`/reminders` is both the complete cancellation surface and recent history.
`GET` merges every pending reminder (ordered by next fire) with the latest 50
rows without duplicates, so old pending work cannot fall off a history window.
Recurring rows show `next_fire_ts` and their cron expression. A pending row has
an inline `POST action=cancel`; success uses a 303 redirect so refresh cannot
repeat the mutation. Missing IDs return 404, terminal or in-flight rows return
409, malformed IDs/actions return 400, and transport failures return the normal
sanitized 502 problem response.
The page calls `ListPendingReminders` and `CancelReminder` over `ipc.CoreAPI`.
Listing is read authority. Cancellation is ordinary authenticated write
authority and deliberately has no separate step-up: it prevents a future send
but cannot create one. `MarkReminder` remains delivery-only and accepts
`fired`; no web or legacy IPC caller can bypass cancellation's outbox check by
writing `cancelled` directly.