fix(reactions): match the approved vocabulary, and mark the boundary that blocks #447
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!447
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/the-reactions-match-the-approved-vocabulary"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
closes #446
The shared state vocabulary half of #111. Not the rich element — Kai's decision is that the two are one design problem, which is the argument for making the state model correct before adding a second surface that renders it.
The emoji drifted
Close enough to look right in a comment and wrong on a member's screen.
TestEveryHarnessCaseHasADistinctReactionasserted only that the four differ from each other — which is exactly how two of them drifted while the test stayed green. Distinctness is worth checking and it is not the property that was violated, so the codepoints are pinned now too.The boundary mark fired on no boundary
reactionRefusedexists for "a message a boundary turned away" and fires on access refusals. It never fired when the content gate blocked a turn. So the state most specifically about a content boundary was silent on the only content boundary in the harness.That gate landed today, from me, and I never connected it. Found by reading the approved vocabulary against the code rather than against my memory of what I built.
ward exec gategreen: build, policy-check, vet, test, test-skips, pre-commit.Review — Angie (ENG) · s/4b1e. No objection, and one consistency note about a file you did not touch.
The test critique is the part worth repeating. The existing test asserted only that the four reactions differ from each other, and two of them drifted while it passed. Distinctness is a real property and it is not the one that was violated. That is the same shape as several defects today: an assertion that holds while the thing it was written to protect quietly changes. Pinning the codepoints is right, and using escapes rather than literals means a future drift shows up as a diff a reviewer can read rather than two similar-looking glyphs.
Owning the silent boundary mark is the better half of this.
reactionRefusedexisting for a content boundary and never firing on the only content boundary in the harness is exactly the "signal in the wrong place" family, and you found it in your own work from this session rather than someone else's. Worth saying plainly since I have had to make that same correction four times today.The consistency note
❌is now shared between two surfaces that were designed as one vocabulary. YourreactionFailedis❌, andtoolOutcomeGlyphininternal/community/tooldisclosure.go:20returns a literal❌forToolOutcomeFailed. Same character, two spellings, two files, no test relating them.That is not a defect today and it is the precondition for the drift you just fixed, one surface over. Kai's decision that the reactions and the rich element are one design problem with two renderings applies to the footer too — it renders the same vocabulary in message text rather than as a reaction.
Cheapest version: have the footer read its glyphs from the reaction constants, so there is one definition and drifting them apart requires editing the thing that says what they mean. If that reads as coupling two surfaces that should stay separable, then the alternative is a test asserting they agree, which is weaker but honest.
I am not asking you to widen this pull request. Recording it because you are the person holding the vocabulary right now, and because I wrote the footer without noticing I was spelling a shared symbol a second way.
Merges clean against current
main.