feat(progress): the thinking line now shows that it is still thinking #374

Merged
coilyco-ops merged 3 commits from feat/the-thinking-line-shows-it-is-working into main 2026-08-13 11:25:52 +00:00
Member

closes #373

Renders exactly the string from #370:

> 🤔 `thinking...`

The ellipsis was free, the icon was not

noticeShape is ^> \[a-z0-9][a-z0-9 ,./-]*`$`, and that shape is what lets a member tell a harness line from model output. An emoji failed it, so this widens it — which is a real change, not a formatting tweak.

The widening is deliberately narrow: only a non-ASCII run may lead the line. Model prose is ASCII, so all of these still fail the shape, and a test says so:

> Sure! `thinking...`
> I think `thinking...`
> <@1494729988799336548> `thinking...`
> ** `thinking...`

The body is still sanitized. An icon decorates the line and licenses nothing inside the phrase — a test feeds it Thinking: about <@123> & things! and checks the mention, ampersand, colon and bang are all gone.

One thing I did not decide

Only the thinking stage has an icon. reading recent messages, calling a tool, and checking the reply render plain, unchanged apart from the ellipsis. Kai specified one icon and I am not choosing member-facing content — each of the other three is a one-line addition once someone picks them.

The ellipsis is applied to all four, on the reading that it means "still happening" rather than being specific to thinking. Say the word if it should be thinking only.

Existing tests

Two assertions compared against the old rendering. They now compare against the same helper the code uses rather than a literal, so the next rendering change moves them with it instead of breaking them.

ward exec gate green: build, policy-check, vet, test, test-skips, pre-commit.

closes #373 Renders exactly the string from https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/370: ``` > 🤔 `thinking...` ``` ## The ellipsis was free, the icon was not `noticeShape` is `^> \`[a-z0-9][a-z0-9 ,./-]*\`$`, and that shape is what lets a member tell a harness line from model output. An emoji failed it, so this widens it — which is a real change, not a formatting tweak. **The widening is deliberately narrow: only a non-ASCII run may lead the line.** Model prose is ASCII, so all of these still fail the shape, and a test says so: ``` > Sure! `thinking...` > I think `thinking...` > <@1494729988799336548> `thinking...` > ** `thinking...` ``` The body is still sanitized. An icon decorates the line and licenses nothing inside the phrase — a test feeds it `Thinking: about <@123> & things!` and checks the mention, ampersand, colon and bang are all gone. ## One thing I did not decide Only the thinking stage has an icon. `reading recent messages`, `calling a tool`, and `checking the reply` render plain, unchanged apart from the ellipsis. Kai specified one icon and I am not choosing member-facing content — each of the other three is a one-line addition once someone picks them. The ellipsis **is** applied to all four, on the reading that it means "still happening" rather than being specific to thinking. Say the word if it should be thinking only. ## Existing tests Two assertions compared against the old rendering. They now compare against the same helper the code uses rather than a literal, so the next rendering change moves them with it instead of breaking them. `ward exec gate` green: build, policy-check, vet, test, test-skips, pre-commit.
feat(progress): the thinking line now shows that it is still thinking
All checks were successful
ci / test (pull_request) Successful in 30s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Successful in 20s
9dfa9d7c23
Renders exactly what was asked for: an icon, the phrase, and an ellipsis.

The ellipsis was free. The alphabet already admits a full stop, though the
sanitizer trims a trailing one, so it is appended after sanitizing rather than
passed through it.

The icon was not free. noticeShape is what lets a member tell a harness line
from model output, and an emoji failed it. The widening is deliberately narrow:
only a non-ASCII run may lead the line, so model prose still cannot pose as one.
A test holds that, with four ASCII prefixes a model would plausibly emit.

The body is still sanitized. An icon decorates the line and licenses nothing
inside the phrase, which a test also holds by feeding it a mention and
punctuation.

Only the thinking stage has an icon. An unlisted stage renders plain, so the
other three are unchanged apart from the ellipsis, and picking icons for them
is a decision rather than a change.

Two existing assertions compared against the old rendering. They are updated to
the same helper the code uses rather than to a literal, so the next rendering
change moves them with it.

closes #373

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Merge branch 'main' into feat/the-thinking-line-shows-it-is-working
All checks were successful
ci / test (pull_request) Successful in 31s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Successful in 19s
8521f52aff
Merge branch 'main' into feat/the-thinking-line-shows-it-is-working
All checks were successful
ci / test (pull_request) Successful in 30s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Successful in 19s
7fe38d65fd
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo!374
No description provided.