diff --git a/PLAN-DETERMINISM-02-08-2026.md b/PLAN-DETERMINISM-02-08-2026.md index b455285..adee01a 100644 --- a/PLAN-DETERMINISM-02-08-2026.md +++ b/PLAN-DETERMINISM-02-08-2026.md @@ -163,15 +163,17 @@ Medium priority, behind the four above. ### Polish. Present, incomplete. -**Strict JSON everywhere.** Six call sites already carry a grammar: the router, -both phraser paths, kiwix, `internal/memeval`, `internal/email/extract`. Two do -not: `cmd/mavend/capture.go` and `cmd/mavend/replier_llm.go`. Close those two and -the rule holds everywhere. +**Strict JSON everywhere.** Done 02-08-2026. The replier sends +`phraser.ResponseGrammar`. It is exported once so its two copies cannot drift. +The meeting summariser is wrapped and unwrapped in the daemon's Completer, so +`internal/capture` stays text-in/text-out. Every model call now carries a grammar. -**Evidence-first prompting.** The world snapshot, the embedder RAG hint and matched -notes all exist. What is missing is the discipline that the model verbalises -retrieved evidence rather than recalling. This is the direct fix for the Левитан -fabrication. High value. +**Evidence-first prompting.** Done 02-08-2026, in the evidence branch of +`PhraseQuery`. Sources arrive numbered, one per line. The system prompt no longer +calls them all "заметки" and no longer lets the model add anything of its own. +Blank sources now take the knowledge branch instead of asking for an answer from +an empty list. Not yet measured against a live model. Run `make eval-phrasing`, +and watch the case `query-notes-do-not-answer`. **Progressive inference.** What exists is a fallback cascade, not escalation. On error it drops to something weaker. It never escalates on ambiguity. The upgrade is