diff --git a/docs/evals/2026-08-08-parked-clarify-ride.md b/docs/evals/2026-08-08-parked-clarify-ride.md new file mode 100644 index 0000000..13dd484 --- /dev/null +++ b/docs/evals/2026-08-08-parked-clarify-ride.md @@ -0,0 +1,88 @@ +# The parked clarify ride, bounded and re-measured + +Date: 2026-08-08, V-663. Same 140 turns, same driver, third and fourth runs of +the day. Before is `d6f3914`, after is that plus two changes. + +## What was measured before + +One question about a reminder's day rode turns 6 to 13. It ended only because +turn 14 was a new request. Two of those turns are the worst replies in the +corpus: + +```text +спасибо -> Сейчас 21:25. В какой день? +привет -> Сейчас 21:25. В какой день? +``` + +V-654 had already added `MaxSuspends` and the tail count had not moved. + +## Why three bounds let it happen + +The TTL, `MaxAttempts` and `MaxSuspends` all exist and all were rearmed. + +An aside spends no attempt, so `MaxAttempts` never reaches it. A turn reading as +a failed answer zeroes `Suspends`, so `MaxSuspends` never reaches the asides. +`спасибо` read as a failed answer. So the pleasantry both produced the reply +above and paid for it out of the budget meant to end the ride. + +## The two changes + +`PendingQuestion.Rides` counts the same event as `Suspends` with the resets +taken out. Set once, incremented only in `noteSuspended`, carried across the +re-park in `askRemainingGap`. `MaxRides` is 4, one looser than `MaxSuspends` so +that the tighter statement about a run stays reachable. + +A pleasantry is an aside, not a failed answer. The set is a new closed lexicon +entry, matched as whole utterances rather than tokens. `вечер` answers `это утра +или вечера?` and `нет` answers a confirm. Anything that could fill a slot stays +out. + +## Result + +| | before | after | +|---|---|---| +| turns carrying a clarify tail | 21 | 17 | +| turns carrying any failure string | 31 | 29 | +| the longest ride | 8 turns | 4 turns | + +The turns carrying a tail, by number: + +```text +before 6 7 8 9 10 11 12 13 53 54 55 56 57 99 102 103 116 136 137 138 139 +after 6 7 8 9 53 54 55 56 57 99 100 101 116 136 137 138 139 +``` + +Turn 10 is the change. It now reads: + +```text +спасибо -> Прошлую просьбу отпускаю. Пожалуйста, я всегда готова помочь тебе. +``` + +She lets the request go, says so, and answers the man. Turns 11 to 13 are clean. + +**`MaxRides` is not what fired.** The pleasantry is an aside now, so it no +longer breaks the run. `MaxSuspends` reached three on turn 10 and ended it. +`Rides` is the backstop for the shape where an answer really does break the run. +No turn in this corpus reaches it. + +## What did not move + +Four rides are untouched. Turns 53 to 57 are five consecutive asides against a +reminder missing its day. Turn 58 is a new request that drops it. Nothing +pleasant appears in that run, so neither change applies. Turns 99 to 101 shifted +by one, and 116 and 136 to 139 are unchanged. + +So the fix is worth four turns of twenty-one. What is left is asides against a +question the owner never answers. `MaxSuspends` was written for that shape and +does bound it, at four turns each. + +## Not attributable + +Latency moved p50 1.1s to 1.5s and p95 2.8s to 3.0s, and the 34.3s outlier in +the earlier run is gone. Both runs had the workstation up. Read none of it as +caused by this change. + +One unrelated defect appeared in the after run and is recorded here because it +is visible in the transcript. Turn 4 answered `Я записала твою привычкуRegarding +coffee without sugar.` That is English leaking into a Russian reply with no +space in front of it. It is a phrasing defect and it has no task yet.