Files
windmill/frontend
Guilhem LemouelandClaude Opus 5 9bc076762b fix(chat): end a turn on what the run said, and show what the rows did not
A finished turn is two questions, and answering them as one is what this
keeps getting wrong. Whether the turn succeeded is the run's to answer
and it always knows; what the turn said is the rows', and they arrive
late, out of order, and sometimes not at all.

They were tangled. Retry was offered on the strength of the last row's
`success`, so whether the reader could retry a failed turn depended on
whether a write the run does not wait for happened to land in time. And
the answer shown when no row arrived was decided by proxies for "did
anything happen" — how many rows the last read returned, then how much
the transcript grew — neither of which distinguishes an answer from a
tool call, or a row replaced in place from one that never came.

The verdict now comes from the job, and only from the job. A result
shaped like a failure is a reason to go and ask, never an answer in
itself: a flow is free to return that shape. A job that cannot be read
counts as failed, because the alternative is arming the next turn on a
guess.

What is shown comes from the rows, asked at the one boundary that means
anything — the message the turn answers, with the turn's own work after
it. A turn whose question is no longer on screen is left alone. The
run's result is shown only where the rows have not already shown it and
the stream did not, since the two are the same answer twice.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:33:27 +02:00
..

Windmill frontend

The Windmill frontend written in Svelte 5 + Tailwind CSS

The frontend is under AGPL, see the LICENSE file at the root of this repo