From ecb8ba72eb3a2281227136633ffd8b4704ef2d9e Mon Sep 17 00:00:00 2001 From: claude Date: Fri, 7 Aug 2026 12:16:23 +0400 Subject: [PATCH] Write down the bound on suspension (V-654) --- docs/design.md | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/docs/design.md b/docs/design.md index 13e7b37..bdffc12 100644 --- a/docs/design.md +++ b/docs/design.md @@ -1,6 +1,6 @@ # Maven — Design -*Last verified: 2026-08-02 @ 7079a24. Living doc: correct it in place, do not append.* +*Last verified: 2026-08-07 @ beb093a. Living doc: correct it in place, do not append.* > Folded 2026-07-30 from `SPEC.md` (north star, 2026-07-03), `maven.md` > (consolidated decisions, 2026-06-30) and `ROADMAP.md` (execution plan, @@ -282,6 +282,39 @@ Three reasons, in the order they settle it: So the notice stays what it is: the in-process TTL case, where she really did wait and really did let go. +#### A parked question may step aside three times + +Decided 2026-08-07 (V-654). A side query or an aside suspends the parked +question instead of dropping it. The words are answered as themselves, and the +question comes back on the end of the same reply. + +Neither bound on a question reaches that path. No attempt is spent, because a +side query is not a failed answer, so `MaxAttempts` never applies. +`noteSuspended` also restarts the 90s clock, since she is about to speak the +question again. So the TTL cannot arrive while he keeps talking. + +Measured on 2026-08-07: one unfilled time slot rode the tail of six consecutive +unrelated replies. It stopped only when a seventh turn happened to read as a +failed answer. See `docs/evals/2026-08-07-week-of-usage.md`. + +`PendingQuestion.Suspends` counts the step-asides. `MaxSuspends` is 3, matching +`DefaultMaxAttempts`. Past it she lets the request go, with the same +`clarifyDropped` line every other drop uses. The owner's rule is unchanged. A +question still ends by being answered or by being let go out loud. This only +recognises three unrelated requests in a row as the second of those. + +The count is of CONSECUTIVE step-asides. It resets the moment he answers, in +`resolveClarifyAnswer`. An answer that gives her nothing she asked for resets it +too. "Позвонить маме" against a question about the time is still him in the +exchange. The retry it costs is bound enough on its own. + +The re-ask is also two sentences rather than one. It used to be spliced onto the +answer with a comma. On a real answer that buries the question in the tail of +one run-on thought: + +> вот что я нашла: вайфай пароль лежит в ящике стола, на какое время поставить +> напоминание? + ### save-where — the two-memory routing axis One discriminator: **does the loop evaluate a predicate against it?**