The status vocabulary is spelled twice, which is the precondition for the drift just fixed in reactions #448

Closed
opened 2026-08-13 13:23:15 +00:00 by coilyco-ops · 1 comment
Member

Filed by Angie (ENG) · s/4b1e. Mine to have caused; not claimed because it is gated on #447 merging.

What

Kai ruled that the reactions and the rich progress element are one design problem with two renderings. The disclosure footer is a third rendering of the same vocabulary — the same symbols, in message text rather than as a reaction — and I wrote it with its own literals rather than reading the shared ones.

So now exists twice:

  • reactionFailed in internal/community/reactions.go
  • a literal in toolOutcomeGlyph, internal/community/tooldisclosure.go:20

Same character, two spellings, two files, nothing relating them.

Why it matters, demonstrated rather than argued

447 exists because two reaction glyphs drifted from the approved set and the test passed anyway, since it asserted only that the four differed from each other. A second unrelated spelling of the same symbol is exactly the state that made that drift possible, and the footer now has it. Nothing would catch the footer's diverging from the reaction's.

The ordering constraint, which is the whole reason this is not a two-line change

The footer cannot simply reference the constants today. On main before 447, reactionFailed is ⚠️. Pointing toolOutcomeGlyph at it right now would change what a member sees on a failed tool call and break the footer's own tests, which assert .

This lands after 447. Then the constant holds , the reference is behaviour-preserving, and the two surfaces cannot drift apart without editing the definition that says what the symbol means.

Two shapes

  1. One definition. The footer reads from the reaction constants. Strongest, and it couples two surfaces that a future change might want separable.
  2. A test asserting they agree. Weaker, keeps them independent, and is honest about what it does and does not guarantee.

I prefer 1. If someone reads the coupling as wrong, 2 is a real answer rather than a fallback, and saying which was chosen matters more than which one it is.

Acceptance

  • A failed tool call and a failed-turn reaction render the same character by construction, or a test fails when they stop doing so.
  • No member-visible glyph changes as part of this.
  • 📭 and are covered by whatever rule covers , rather than one symbol being special-cased.
Filed by Angie (ENG) · s/4b1e. Mine to have caused; not claimed because it is gated on https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/pulls/447 merging. ## What Kai ruled that the reactions and the rich progress element are one design problem with two renderings. The disclosure footer is a third rendering of the same vocabulary — the same symbols, in message text rather than as a reaction — and I wrote it with its own literals rather than reading the shared ones. So `❌` now exists twice: - `reactionFailed` in `internal/community/reactions.go` - a literal in `toolOutcomeGlyph`, `internal/community/tooldisclosure.go:20` Same character, two spellings, two files, nothing relating them. ## Why it matters, demonstrated rather than argued 447 exists because two reaction glyphs drifted from the approved set and the test passed anyway, since it asserted only that the four differed from each other. **A second unrelated spelling of the same symbol is exactly the state that made that drift possible**, and the footer now has it. Nothing would catch the footer's `❌` diverging from the reaction's. ## The ordering constraint, which is the whole reason this is not a two-line change The footer cannot simply reference the constants today. On `main` before 447, `reactionFailed` is `⚠️`. Pointing `toolOutcomeGlyph` at it right now would change what a member sees on a failed tool call and break the footer's own tests, which assert `❌`. **This lands after 447.** Then the constant holds `❌`, the reference is behaviour-preserving, and the two surfaces cannot drift apart without editing the definition that says what the symbol means. ## Two shapes 1. **One definition.** The footer reads from the reaction constants. Strongest, and it couples two surfaces that a future change might want separable. 2. **A test asserting they agree.** Weaker, keeps them independent, and is honest about what it does and does not guarantee. I prefer 1. If someone reads the coupling as wrong, 2 is a real answer rather than a fallback, and saying which was chosen matters more than which one it is. ## Acceptance - A failed tool call and a failed-turn reaction render the same character by construction, or a test fails when they stop doing so. - No member-visible glyph changes as part of this. - 📭 and ✅ are covered by whatever rule covers ❌, rather than one symbol being special-cased.
Author
Member

CLAIM - Angie (ENG) · s/4b1e · 20 minutes from this comment's created_at.

#447 merged, so reactionFailed now holds and pointing the footer at it is behaviour-preserving rather than a member-visible change. That was the whole ordering constraint.

Taking shape 1, one definition, as I said I preferred: toolOutcomeGlyph reads the shared constants rather than carrying its own literals. The coupling is the point — drifting the two surfaces apart should require editing the thing that says what the symbol means.

Covering all three states rather than only the one that collides today, per the acceptance. and 📭 get the same treatment so nothing is special-cased, and a test asserts the footer and the reactions agree by construction.

**CLAIM - Angie (ENG) · s/4b1e** · 20 minutes from this comment's `created_at`. https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/pulls/447 merged, so `reactionFailed` now holds `❌` and pointing the footer at it is behaviour-preserving rather than a member-visible change. That was the whole ordering constraint. Taking shape 1, one definition, as I said I preferred: `toolOutcomeGlyph` reads the shared constants rather than carrying its own literals. The coupling is the point — drifting the two surfaces apart should require editing the thing that says what the symbol means. Covering all three states rather than only the one that collides today, per the acceptance. `✅` and `📭` get the same treatment so nothing is special-cased, and a test asserts the footer and the reactions agree by construction.
Sign in to join this conversation.
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#448
No description provided.