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
+45
View File
@@ -135,6 +135,29 @@ second getting it right. Every rule was added against a measurement.
and "сколько будет 17 на 23". Wired after the agenda rules and **before** the
feed and list rules. "что такое лента" is a definition question, and the feed
rule would take it on the noun alone.
- **Local product help and current public releases** (V-720, 2026-08-15).
`MavenHelpGrammar` keeps a question such as "как отменить напоминание" on
`SourceSelf`, where the answer names the command Maven actually accepts.
`PublicCurrentVersionGrammar` anchors an explicitly current software release
on `SourceWorld`, but declines first-person ownership. Together they stop
operational help leaking to an unrelated search result and stop public
release questions dying at the personal-memory boundary.
- **Thin references and implicit elapsed questions** (2026-08-15).
`AmbiguousFragmentGrammar` refuses filler plus an unresolved demonstrative
("ну это") instead of letting a statistical head invent context.
`ImplicitElapsedQueryGrammar` reads the Russian question word order in
"давно я не тренировался" as recall; the declarative order "я давно не
тренировался" remains a statement.
- **Completed reminder reports** (V-719, 2026-08-15).
`ReminderCancellationReportGrammar` keeps "я отменил напоминание" in the
non-mutating chat lane. It is neither the addressed imperative accepted by
cancellation nor evidence that Maven should search unrelated personal
memory.
- **Named ecosystem service attention** (2026-08-15). The colloquial frame
"что там с X" reaches Praxis only for the four service names in Maven's
architecture. The open-set version still belongs to Nexus; a bare act or an
anaphoric target never crosses into Nexus/Hexis merely because an act head
fired.
- **Russian possession statements** (`PossessionStatementGrammar`, V-577,
2026-08-13). The closed grammatical frame `у меня …` anchors a plain
declaration as `IntentNote`; its remainder is open and contains no noun list.
@@ -187,6 +210,28 @@ against 3.9µs before, benchmarked at 20000x.
`Slots.Text` is deliberately not filled. A grammar that left it empty meant it,
and `agendaQueryBuild` hands the query chain the utterance itself.
### Reminder cancellation gets first refusal
`cmd/mavend/reminder_cancel.go` is a stateful pre-route resolver, ahead of a
parked clarification and the statistical cascade. It accepts only an addressed
command-position imperative plus the explicit reminder/alarm noun. Whole-token
closed lexicons establish that frame; morphology compares a stored subject.
Questions ("как отменить"), reported speech, past-tense reports, and
prohibitions do not establish mutation authority.
Resolution reads every pending reminder. Subject terms retain negation and
quantities; parsed time must pass the same resolved-hour gate as capture. A
single match calls the typed `CancelReminder` IPC method. Several matches are
stored as `Session.Candidates` in the spoken order, capped at five, and only a
whole affirmative ordinal may consume that list. Re-querying on the follow-up
would let state changes move the ordinal, so it is forbidden. No match, an
unread time, an out-of-range or spent ordinal, and an ambiguous delivery result
all produce an explicit no-op.
This rung is also present in `preRouteLadder`, so `/trace` records whether it
won or declined on every surface. The reminder web page uses the same IPC
mutation rather than a second store path.
## Stage 0b: the routing heads
Routing has a bounded output space, so it is classification rather than