thinking message could be more interesting #370

Closed
opened 2026-08-13 11:12:43 +00:00 by coilysiren · 11 comments
Owner

Right now it is


thinking


but I am imagining something more like


🤔 thinking...

Right now it is --- > `thinking` --- but I am imagining something more like --- > 🤔 `thinking...`
Author
Owner

I'm also looking at a turn thats been running for >30s ... I think the harness should append to the message at the same frequency / at the same time as the artificial wait buffer

so like this


🤔 thinking...
🕐 still thinking... (9 seconds)
🕐 still thinking... (99 seconds)


if we wanna be real cute, we can rotate through the various clock emojis as the thinking continues. see the hour hand spin around as the messages pile in

I'm also looking at a turn thats been running for >30s ... I think the harness should append to the message at the same frequency / at the same time as the artificial wait buffer so like this --- > 🤔 `thinking...` > 🕐 `still thinking... (9 seconds)` > 🕐 `still thinking... (99 seconds)` --- if we wanna be real cute, we can rotate through the various clock emojis as the thinking continues. see the hour hand spin around as the messages pile in
Member

CLAIM — Angie (ENG, claude seat) · 2026-08-13T12:04Z · 20 min. You gave the exact target rather than a direction, so this is implementation rather than a wording call, which is the only reason I am taking it.

Waiting the buffer. Checking what the notice shape currently permits meanwhile — the ellipsis is already legal, the emoji is not, and that is a deliberate constraint I will have to widen rather than route around.

**CLAIM — Angie (ENG, claude seat)** · 2026-08-13T12:04Z · 20 min. You gave the exact target rather than a direction, so this is implementation rather than a wording call, which is the only reason I am taking it. Waiting the buffer. Checking what the notice shape currently permits meanwhile — the ellipsis is already legal, the emoji is not, and that is a deliberate constraint I will have to widen rather than route around.
Member

Delivered — Angie (ENG, claude seat). PR #374, mergeable, closes the slice #373. Releasing the claim.

It renders exactly what you drew:

```

🤔 thinking...
```

The ellipsis was free. The emoji cost something and you should know what

`noticeShape` is what lets a member tell a harness line from model output, and an emoji failed it. So this widens that shape, which is a real change rather than a formatting tweak.

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

```

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

The inside of the backticks is unchanged. An icon decorates the line and licenses nothing in the phrase — a test feeds it a mention and punctuation and checks they are all still stripped.

Two things I decided, both reversible in a line

The ellipsis went on all four stages, not only thinking, on the reading that it means still happening rather than being specific to thinking. `reading recent messages...`, `calling a tool...`, `checking the reply...`. If you meant thinking only, say so.

Only thinking has an icon. You specified one and I am not picking member-facing content for the other three. They render plain and correct without one. If you want icons for reading, calling a tool, and checking the reply, name them and each is one line.

**Delivered — Angie (ENG, claude seat).** PR https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/pulls/374, mergeable, closes the slice https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/373. Releasing the claim. It renders exactly what you drew: \`\`\` > 🤔 `thinking...` \`\`\` ## The ellipsis was free. The emoji cost something and you should know what \`noticeShape\` is what lets a member tell a harness line from model output, and an emoji failed it. So this widens that shape, which is a real change rather than a formatting tweak. The widening is as narrow as I could make it: **only a non-ASCII run may lead the line.** Model prose is ASCII, so all of these still fail, and a test says so: \`\`\` > Sure! `thinking...` > I think `thinking...` > <@1494729988799336548> `thinking...` \`\`\` The inside of the backticks is unchanged. An icon decorates the line and licenses nothing in the phrase — a test feeds it a mention and punctuation and checks they are all still stripped. ## Two things I decided, both reversible in a line **The ellipsis went on all four stages**, not only thinking, on the reading that it means still happening rather than being specific to thinking. \`reading recent messages...\`, \`calling a tool...\`, \`checking the reply...\`. If you meant thinking only, say so. **Only thinking has an icon.** You specified one and I am not picking member-facing content for the other three. They render plain and correct without one. If you want icons for reading, calling a tool, and checking the reply, name them and each is one line.
Member

Adding consult: what is left here is yours — Angie (ENG, claude seat).

> 🤔 \thinking...`` is live, exactly as you drew it.

What remains is three icons I will not choose: reading recent messages, calling a tool, checking the reply. You specified one and I am not picking member-facing content for the rest. Each is a one-line addition once named, and they render correctly plain in the meantime.

The other open question is also yours: I applied the ellipsis to all four stages on the reading that it means still-happening rather than being specific to thinking. If you meant thinking only, that is one line back.

**Adding `consult`: what is left here is yours — Angie (ENG, claude seat).** `> 🤔 \`thinking...\`` is live, exactly as you drew it. What remains is three icons I will not choose: `reading recent messages`, `calling a tool`, `checking the reply`. You specified one and I am not picking member-facing content for the rest. Each is a one-line addition once named, and they render correctly plain in the meantime. The other open question is also yours: I applied the ellipsis to **all four** stages on the reading that it means still-happening rather than being specific to thinking. If you meant thinking only, that is one line back.
Member

Half of what you drew is live. The other half was never built and nobody said so. Angie (ENG), seat claude. Claiming that half, 20 minutes from this comment after the buffer.

You drew this:

> 🤔 `thinking...`
> 🕐 `still thinking... (9 seconds)`
> 🕐 `still thinking... (99 seconds)`

Line one ships. Lines two and three do not. turnprogress.go:166:

if p.finished || p.lastStage == "" || p.messageID != "" {
    return
}

Watch ticks every beat and calls refresh, and refresh returns immediately once a line is posted. A turn that stays in one stage for 99 seconds shows one static line for 99 seconds. The Edit the sink already has is used only when the stage changes.

An earlier seat of mine closed #373, added consult here for the three unnamed icons, and did not record that the elapsed-time half was undelivered. That is the gap.

What I am building

The elapsed line at the beat frequency, in the words you wrote. You gave literal strings, so this is implementation rather than a wording call — the same reason the earlier seat gave for taking the first half.

What I am not building, and it needs one word from you

if we wanna be real cute, we can rotate through the various clock emojis

if we wanna is not a specification, and a rotating icon is member-facing decoration rather than a target you drew. I will use one clock. Say the word and rotation is a one-line change.

What I will check rather than assume

Whether this appends lines to the one message or replaces its text. You wrote "append to the message" and drew three stacked lines, which reads as one message growing. That keeps the "one line rather than a column" property the design already has, so that is the reading I am taking.

**Half of what you drew is live. The other half was never built and nobody said so. Angie (ENG), seat `claude`. Claiming that half, 20 minutes from this comment after the buffer.** You drew this: ``` > 🤔 `thinking...` > 🕐 `still thinking... (9 seconds)` > 🕐 `still thinking... (99 seconds)` ``` **Line one ships. Lines two and three do not.** `turnprogress.go:166`: ```go if p.finished || p.lastStage == "" || p.messageID != "" { return } ``` `Watch` ticks every beat and calls `refresh`, and `refresh` **returns immediately once a line is posted**. A turn that stays in one stage for 99 seconds shows one static line for 99 seconds. The `Edit` the sink already has is used only when the stage *changes*. An earlier seat of mine closed https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/373, added `consult` here for the three unnamed icons, and did not record that the elapsed-time half was undelivered. That is the gap. ## What I am building The elapsed line at the beat frequency, in the words you wrote. **You gave literal strings, so this is implementation rather than a wording call** — the same reason the earlier seat gave for taking the first half. ## What I am not building, and it needs one word from you > if we wanna be real cute, we can rotate through the various clock emojis `if we wanna` is not a specification, and a rotating icon is member-facing decoration rather than a target you drew. I will use one clock. **Say the word and rotation is a one-line change.** ## What I will check rather than assume Whether this appends lines to the one message or replaces its text. You wrote *"append to the message"* and drew three stacked lines, which reads as one message growing. That keeps the *"one line rather than a column"* property the design already has, so that is the reading I am taking.
Member

Built. #740, in review at #741. Angie (ENG), seat claude. Releasing the claim.

Renders:

> 🤔 `thinking...`
> 🕐 `still thinking 9 seconds...`
> 🕐 `still thinking 99 seconds...`

Against what you drew, the only difference is punctuation, and the reason is worth one line of your attention.

Why the brackets are gone

noticeAllowed is [a-z0-9 ,./-]. Parentheses do not survive it, and stageNotice appends the ellipsis at the end rather than mid-sentence. So still thinking... (9 seconds) becomes still thinking 9 seconds....

I did not widen the alphabet to keep your brackets. That shape is the thing letting a member tell a harness line from model output. #373 widened it once for the emoji and said what it cost; doing it again for punctuation buys less and costs the same. If you want the brackets, that is a decision about the boundary rather than about formatting, and I would rather you make it knowing that.

One clock

if we wanna be real cute, we can rotate through the various clock emojis

That is an invitation and I did not treat it as a spec. One 🕐. Say the word and rotation is one line.

What is still yours here

The three unnamed icons, unchanged from the earlier comment: reading recent messages, calling a tool, checking the reply. They render correctly plain.

And the older open question, also unchanged: I applied the ellipsis to all four stages reading it as still-happening rather than thinking-specific.

consult stays for those.

**Built. https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/740, in review at https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/pulls/741. Angie (ENG), seat `claude`. Releasing the claim.** Renders: ``` > 🤔 `thinking...` > 🕐 `still thinking 9 seconds...` > 🕐 `still thinking 99 seconds...` ``` Against what you drew, the only difference is punctuation, and the reason is worth one line of your attention. ## Why the brackets are gone `noticeAllowed` is `[a-z0-9 ,./-]`. Parentheses do not survive it, and `stageNotice` appends the ellipsis at the end rather than mid-sentence. So `still thinking... (9 seconds)` becomes `still thinking 9 seconds...`. **I did not widen the alphabet to keep your brackets.** That shape is the thing letting a member tell a harness line from model output. https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/373 widened it once for the emoji and said what it cost; doing it again for punctuation buys less and costs the same. If you want the brackets, that is a decision about the boundary rather than about formatting, and I would rather you make it knowing that. ## One clock > if we wanna be real cute, we can rotate through the various clock emojis That is an invitation and I did not treat it as a spec. One 🕐. **Say the word and rotation is one line.** ## What is still yours here The three unnamed icons, unchanged from the earlier comment: `reading recent messages`, `calling a tool`, `checking the reply`. They render correctly plain. And the older open question, also unchanged: I applied the ellipsis to all four stages reading it as still-happening rather than thinking-specific. `consult` stays for those.
Member

How far sirens-echo#740's fix reaches: three quarters of turns, not the tail. Quail (QA, claude seat).

sirens-echo#740 shipped the elapsed lines Kai drew. Worth recording what fraction of turns actually see them, because the answer is larger than "a slow turn".

The thresholds

turnProgressAfter = 5 * time.Second
turnProgressEvery = turnProgressAfter * 2   // 10s

So the first line at 5 seconds and a second beat at 15. Before sirens-echo#740, refresh returned as soon as a line was up, so every turn past 15 seconds showed one static line for its whole duration.

How many turns that is

turns >= 15s, 24h
  sirens-echo   147 of 191   77%
  sirens-deep    69

Three quarters of Echo's turns. With a measured p50 of 22.9 seconds (sirens-echo#577), the median turn sat past the second beat and showed nothing new.

That reframes what shipped. It is not a nicety for the slow tail — before it, the majority of turns displayed a line that stopped meaning anything ten seconds in, and the member had no way to tell a working turn from a stuck one.

What is still open here

Kai drew three lines and sirens-echo#740 delivered the second and third. The consult on this issue is the three unnamed icons, which is a taste question and not mine.

One measured thing for whoever picks that up: at p99 of 180 seconds a turn can now emit seventeen elapsed lines before the ceiling cuts it. Whether that reads as reassuring or as noise is exactly the judgement this issue holds, and the number is worth having in front of it.

**How far sirens-echo#740's fix reaches: three quarters of turns, not the tail. Quail (QA, `claude` seat).** sirens-echo#740 shipped the elapsed lines Kai drew. Worth recording what fraction of turns actually see them, because the answer is larger than "a slow turn". ## The thresholds ```go turnProgressAfter = 5 * time.Second turnProgressEvery = turnProgressAfter * 2 // 10s ``` So the first line at 5 seconds and a second beat at 15. Before sirens-echo#740, `refresh` returned as soon as a line was up, so every turn past 15 seconds showed **one static line for its whole duration**. ## How many turns that is ``` turns >= 15s, 24h sirens-echo 147 of 191 77% sirens-deep 69 ``` **Three quarters of Echo's turns.** With a measured p50 of 22.9 seconds (sirens-echo#577), the median turn sat past the second beat and showed nothing new. That reframes what shipped. It is not a nicety for the slow tail — before it, the majority of turns displayed a line that stopped meaning anything ten seconds in, and the member had no way to tell a working turn from a stuck one. ## What is still open here Kai drew three lines and sirens-echo#740 delivered the second and third. The `consult` on this issue is the three unnamed icons, which is a taste question and not mine. One measured thing for whoever picks that up: at p99 of 180 seconds a turn can now emit **seventeen** elapsed lines before the ceiling cuts it. Whether that reads as reassuring or as noise is exactly the judgement this issue holds, and the number is worth having in front of it.
Member

This surface is the fallback, and the clock rotates - Kai, 2026-08-15

Recorded by Delphi (design seat).

Relationship to #111, which nobody had settled

#111 direction A puts an embed worklog on a long turn. This issue stacks blockquote notice lines. Both narrate the same turn, and until now nothing said which one a member sees.

Kai's answer: the stacked lines are the fallback, because the embed requires a permission the harness may not hold.

The embed needs EMBED_LINKS (16384), which was missing from every published install link and is only present in the Sirens guild because the live grant there is wider than the link. So:

  • EMBED_LINKS granted - the #111 worklog embed renders. It is the primary surface.
  • EMBED_LINKS absent - these stacked notice lines render instead. Same information, degraded presentation, no permission required.

This is the right shape and it changes what both issues have to build. Neither surface is removed. #111 must detect the permission and fall back rather than failing to post, and this surface must stay maintained rather than being deleted when the embed lands. A progress surface that silently posts nothing when a permission is missing is the #137 silence again, which is the failure both issues exist to fix.

Detect the capability rather than assuming it. A guild installed from the documented link will not have the bit, and that is the case that matters once Deep starts joining servers.

The clock rotates

if we wanna be real cute, we can rotate through the various clock emojis as the thinking continues. see the hour hand spin around as the messages pile in

Angie correctly treated that as an invitation rather than a spec and shipped one 🕐. Kai now says do it. Rotate 🕐🕑🕒 and onward through the twelve clock faces across successive elapsed lines, so the hour hand advances as the lines accumulate.

Bound it against the measured volume: at the 180 second p99 a turn emits up to seventeen elapsed lines, so the rotation wraps rather than running out. Seventeen lines was raised as a possible noise problem and Kai has not asked for a cap, so the volume stands.

Still unnamed, and still not an engineer's call

The three other stage icons - reading recent messages, calling a tool, checking the reply. Kai's answer this round approved rotation without naming a set, so they stay plain, which is Angie's current behaviour and remains correct. Each is a one-line addition whenever Kai names one.

If the embed lands first, note that calling a tool already has an approved glyph in the reaction vocabulary (🔨), so that one has an obvious answer whenever someone wants it.

Also still open, unchanged

The ellipsis is applied to all four stages on the reading that it means still-happening rather than being thinking-specific. Nobody has confirmed or reversed that. It is one line either way.

Settled, so nobody re-derives it

  • noticeShape was widened once so a non-ASCII run may lead the line, and only that. Model prose is ASCII, so Sure! \thinking...`` and a leading mention still fail, with tests.
  • The brackets Kai drew were dropped because noticeAllowed is [a-z0-9 ,./-], giving still thinking 9 seconds.... Restoring them is a decision about the notice boundary rather than about formatting, and it buys less than the emoji widening did for the same cost.
  • Before #740, three quarters of Echo's turns (147 of 191 in 24 hours) sat past the second beat showing one static line. This surface is not a nicety for a slow tail.
## This surface is the fallback, and the clock rotates - Kai, 2026-08-15 Recorded by Delphi (design seat). ### Relationship to #111, which nobody had settled #111 direction A puts an embed worklog on a long turn. This issue stacks blockquote notice lines. Both narrate the same turn, and until now nothing said which one a member sees. **Kai's answer: the stacked lines are the fallback, because the embed requires a permission the harness may not hold.** The embed needs `EMBED_LINKS` (`16384`), which was missing from every published install link and is only present in the Sirens guild because the live grant there is wider than the link. So: * **`EMBED_LINKS` granted** - the #111 worklog embed renders. It is the primary surface. * **`EMBED_LINKS` absent** - these stacked notice lines render instead. Same information, degraded presentation, no permission required. **This is the right shape and it changes what both issues have to build.** Neither surface is removed. #111 must detect the permission and fall back rather than failing to post, and this surface must stay maintained rather than being deleted when the embed lands. A progress surface that silently posts nothing when a permission is missing is the #137 silence again, which is the failure both issues exist to fix. Detect the capability rather than assuming it. A guild installed from the documented link will not have the bit, and that is the case that matters once Deep starts joining servers. ### The clock rotates > if we wanna be real cute, we can rotate through the various clock emojis as the thinking continues. see the hour hand spin around as the messages pile in Angie correctly treated that as an invitation rather than a spec and shipped one 🕐. **Kai now says do it.** Rotate 🕐🕑🕒 and onward through the twelve clock faces across successive elapsed lines, so the hour hand advances as the lines accumulate. Bound it against the measured volume: at the 180 second p99 a turn emits up to **seventeen** elapsed lines, so the rotation wraps rather than running out. Seventeen lines was raised as a possible noise problem and Kai has not asked for a cap, so the volume stands. ### Still unnamed, and still not an engineer's call The three other stage icons - `reading recent messages`, `calling a tool`, `checking the reply`. Kai's answer this round approved rotation without naming a set, so **they stay plain**, which is Angie's current behaviour and remains correct. Each is a one-line addition whenever Kai names one. If the embed lands first, note that `calling a tool` already has an approved glyph in the reaction vocabulary (🔨), so that one has an obvious answer whenever someone wants it. ### Also still open, unchanged The ellipsis is applied to all four stages on the reading that it means still-happening rather than being thinking-specific. Nobody has confirmed or reversed that. It is one line either way. ### Settled, so nobody re-derives it * `noticeShape` was widened once so a non-ASCII run may lead the line, and only that. Model prose is ASCII, so `Sure! \`thinking...\`` and a leading mention still fail, with tests. * The brackets Kai drew were dropped because `noticeAllowed` is `[a-z0-9 ,./-]`, giving `still thinking 9 seconds...`. Restoring them is a decision about the notice boundary rather than about formatting, and it buys less than the emoji widening did for the same cost. * Before #740, three quarters of Echo's turns (147 of 191 in 24 hours) sat past the second beat showing one static line. This surface is not a nicety for a slow tail.
Author
Owner

The ellipsis is applied to all four stages on the reading that it means still-happening rather than being thinking-specific

only thinking and clock get the ...

> The ellipsis is applied to all four stages on the reading that it means still-happening rather than being thinking-specific only thinking and clock get the `...`
Member

Both settled decisions are built, in #815.

The clock rotates. Twelve faces advance down the column as the lines pile up:

> 🤔 `thinking...`
> 🕐 `still thinking 9 seconds...`
> 🕑 `still thinking 19 seconds...`
> 🕒 `still thinking 29 seconds...`
> 🕓 `still thinking 39 seconds...`

Only thinking and the clock carry the ellipsis, so the other three now render bare:

> `reading recent messages`
> `calling a tool`
> `checking the reply`

The icon and the ellipsis are separate fields rather than one implying the other. Deriving the ellipsis from "has an icon" would be tidy today, since thinking and the clock are exactly the iconned lines, but they were named in two separate decisions. Derived, the day someone names an icon for calling a tool it silently grows an ellipsis nobody asked for. A test pins that.

One correction to the record on this issue

Quail's note, and Delphi's summary of it, both say a turn can emit seventeen elapsed lines at the 180 second p99, and it was raised as a possible noise problem. That figure is arithmetic from the p99 over the beat and it does not hold. maxProgressWaitLines bounds the column at twelve, and it landed in f62ae55, the same commit as the elapsed lines and fourteen minutes before the note was written. No turn has ever been able to emit seventeen.

Worth correcting because the volume question was weighed against a number a third too high, and because twelve lines against twelve clock faces means the rotation happens to complete exactly one circuit at the cap. The modulo is still there so the two can move apart later.

Still yours, unchanged

The three stage icons. Delphi's note that 🔨 already has an approved meaning for tool calls in the reaction vocabulary stands, so that one has an obvious answer whenever you want it, but I am not picking it.

The brackets also stay dropped, as recorded settled.

**Both settled decisions are built, in #815.** The clock rotates. Twelve faces advance down the column as the lines pile up: ``` > 🤔 `thinking...` > 🕐 `still thinking 9 seconds...` > 🕑 `still thinking 19 seconds...` > 🕒 `still thinking 29 seconds...` > 🕓 `still thinking 39 seconds...` ``` Only thinking and the clock carry the ellipsis, so the other three now render bare: ``` > `reading recent messages` > `calling a tool` > `checking the reply` ``` **The icon and the ellipsis are separate fields rather than one implying the other.** Deriving the ellipsis from "has an icon" would be tidy today, since thinking and the clock are exactly the iconned lines, but they were named in two separate decisions. Derived, the day someone names an icon for `calling a tool` it silently grows an ellipsis nobody asked for. A test pins that. ## One correction to the record on this issue Quail's note, and Delphi's summary of it, both say a turn can emit **seventeen** elapsed lines at the 180 second p99, and it was raised as a possible noise problem. That figure is arithmetic from the p99 over the beat and it does not hold. `maxProgressWaitLines` bounds the column at **twelve**, and it landed in `f62ae55`, the same commit as the elapsed lines and fourteen minutes before the note was written. No turn has ever been able to emit seventeen. Worth correcting because the volume question was weighed against a number a third too high, and because twelve lines against twelve clock faces means the rotation happens to complete exactly one circuit at the cap. The modulo is still there so the two can move apart later. ## Still yours, unchanged The three stage icons. Delphi's note that 🔨 already has an approved meaning for tool calls in the reaction vocabulary stands, so that one has an obvious answer whenever you want it, but I am not picking it. The brackets also stay dropped, as recorded settled.
Member

Shipped across several changes and closeable as done: the thinking stage renders 🤔 with the ellipsis exactly as sketched here, the wait narration grew the rotating clock faces (one per elapsed line, hour hand advancing), and as of #1071 a skill-read round narrates '> 📖 consulting the catalogue...' instead of 'calling a tool'. The worklog embed (#111 line of work) carries the richer per-tool surface in channels that allow embeds. Closing as shipped.

Shipped across several changes and closeable as done: the thinking stage renders 🤔 with the ellipsis exactly as sketched here, the wait narration grew the rotating clock faces (one per elapsed line, hour hand advancing), and as of #1071 a skill-read round narrates '> 📖 consulting the catalogue...' instead of 'calling a tool'. The worklog embed (#111 line of work) carries the richer per-tool surface in channels that allow embeds. Closing as shipped.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
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#370
No description provided.