Say something when a clarify question times out (#382) #23

Closed
claude wants to merge 2 commits from overnight/clarify-expiry-pr into overnight/clarify-rework
Contributor

One commit. The trap PR 22 found on its way out, now fixed (#382).

Same bug you caught in review — she gives up in silence — one layer further out. Park a clarifying question, answer it 90 seconds later, and the request behind it is already gone: expiry happens when the question is read, so the answer path finds nothing and routes your words as a brand-new sentence. You never learn the first one died.

She says so now:

Прости, я слишком долго ждала ответа и отпустила прошлую просьбу. Если она ещё нужна, скажи заново.

Feminine on her side ("ждала", "отпустила"), plain imperative for you ("скажи") — no gendered form pointed at you.

The turn is not swallowed. Your words still go through the normal path and still get answered; the notice is glued in front of whatever comes back. It is a prefix rather than a second message because the wire allows one reply per turn — there's a comment saying that.

The ordering was the actual work. The check has to run before the answer path, because reading a parked question is what destroys the evidence that it expired. So the store grew a TakeExpired that reports "there was one, it timed out" and drops it, instead of Get dropping it quietly.

Tests: expiry announced and the new words still routed, the notice not repeated on the turn after, and the store-level check that a live question survives while a stale one reports once.

One known gap, on purpose: if a yes/no confirm gate is armed at the same time, the confirm turn answers without the notice and you get it on the following turn instead. Late, not lost. Fixing it means threading the notice through the confirm path too, which is a bigger change than this is worth.

One commit. The trap PR 22 found on its way out, now fixed (#382). Same bug you caught in review — she gives up in silence — one layer further out. Park a clarifying question, answer it 90 seconds later, and the request behind it is already gone: expiry happens when the question is *read*, so the answer path finds nothing and routes your words as a brand-new sentence. You never learn the first one died. **She says so now:** > Прости, я слишком долго ждала ответа и отпустила прошлую просьбу. Если она ещё нужна, скажи заново. Feminine on her side ("ждала", "отпустила"), plain imperative for you ("скажи") — no gendered form pointed at you. **The turn is not swallowed.** Your words still go through the normal path and still get answered; the notice is glued in front of whatever comes back. It is a prefix rather than a second message because the wire allows one reply per turn — there's a comment saying that. **The ordering was the actual work.** The check has to run *before* the answer path, because reading a parked question is what destroys the evidence that it expired. So the store grew a `TakeExpired` that reports "there was one, it timed out" and drops it, instead of `Get` dropping it quietly. **Tests:** expiry announced and the new words still routed, the notice not repeated on the turn after, and the store-level check that a live question survives while a stale one reports once. **One known gap, on purpose:** if a yes/no confirm gate is armed at the same time, the confirm turn answers without the notice and you get it on the following turn instead. Late, not lost. Fixing it means threading the notice through the confirm path too, which is a bigger change than this is worth.
claude added 2 commits 2026-07-31 10:53:22 +02:00
Vikunja #382. A parked clarifying question past its TTL was discarded
silently on read; now she says the old request is gone and the newly
spoken words are still routed as a fresh utterance.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ
kami reviewed 2026-07-31 18:58:25 +02:00
@@ -48,0 +49,4 @@
// already gone. Same tone as clarifyGaveUp, different reason: too much time
// passed, not "I did not understand". Feminine self-reference ("ждала",
// "отпустила"); he is addressed with a plain imperative.
const clarifyExpired = "Прости, я слишком долго ждала ответа и отпустила прошлую просьбу. Если она ещё нужна, скажи заново."
Owner

might be better to have ~5 of those.
something in the spirit of: "Кажется, {topic} уже не имеет значения? Если я ошибаюсь, повтори".
or: "Ты как-то резко замолчал, тебе ещё нужно, чтобы я {what was asked}?".

might be better to have ~5 of those. something in the spirit of: "Кажется, {topic} уже не имеет значения? Если я ошибаюсь, повтори". or: "Ты как-то резко замолчал, тебе ещё нужно, чтобы я {what was asked}?".
Owner

Superseded by #47, which landed this whole stack on master as one reviewed integration merge. This PR head is an ancestor of master — its commits are in, nothing here is lost. Closing as merged-by-proxy rather than merged, since the merge came in through #47.

Review threads on this PR were answered or acted on before the merge; the Russian wording fixes went in as #48.

Superseded by #47, which landed this whole stack on master as one reviewed integration merge. This PR head is an ancestor of master — its commits are in, nothing here is lost. Closing as merged-by-proxy rather than merged, since the merge came in through #47. Review threads on this PR were answered or acted on before the merge; the Russian wording fixes went in as #48.
kami closed this pull request 2026-07-31 20:22:09 +02:00

Pull request closed

Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kami/Maven#23