fix(reactions): clear the marks that describe work in flight #497

Merged
coilyco-ops merged 3 commits from coilyco-ops/clear-the-marks-that-describe-work-in-flight into main 2026-08-13 14:48:22 +00:00 AGit
Member

closes #475 - the eyes and the hammer describe work happening and stop being true when the turn ends. The outcome marks stay.

closes #475 - the eyes and the hammer describe work happening and stop being true when the turn ends. The outcome marks stay.
fix(reactions): clear the marks that describe work in flight
All checks were successful
ci / image-build (pull_request) Successful in 27s
ci / test (pull_request) Successful in 42s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
401aa5dd16
The eyes and the hammer say a turn is being taken and is calling tools. Once
the turn is over they say nothing, and a channel accumulates a wall of marks
that no longer describe anything. The warning and the no entry describe how the
turn ended, so they stay.

The clear reuses the applied set pull request 480 built for marking once, so
only a mark actually applied costs a removal call. An ordinary turn that called
no tool costs one, not two.

Removal is scoped to this identity, so a member's own reaction on the same
message is never touched.

Not deferred, and that is the substance rather than a style choice. The clear
runs where a turn produced an outcome the member can see: the answer, the
failure notice, or the boundary response. The accepted mark exists so a turn
that dies silently is still visible as a message that was taken and never
answered, which is the argument in the reactions doc for it earning its place.
A turn that dies without reaching an outcome path never clears and keeps that
mark. A deferred cleanup would fire on that death too and delete the evidence,
which is the one case the mark was built for.

A failing removal is swallowed the way a failing application is. A tidy-up must
never cost a member an answer they already received, and the likeliest cause is
a missing permission, which is an operator question.

The clear detaches from the turn context and bounds itself, for the reason the
failure notice already does: a turn that failed by expiring has no budget left
to tidy up with.

A transport that can add a reaction and cannot remove one implements nothing
and keeps its marks rather than failing.

closes #475

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Resolved docs/sirens-echo-reactions.md, which pull request 493 and this one
both extended. Neither edit was wrong and the file crossed its line cap when
they met, so the lifecycle is now its own doc rather than one of them yielding.

The tree still fails the two 486 characterization tests inherited from main.
Those are fixed by pull request 504 and are not from this branch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into eng/clear-the-marks-that-describe-work-in-flight
All checks were successful
ci / image-build (pull_request) Successful in 21s
ci / test (pull_request) Successful in 33s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
3ba724d070
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!497
No description provided.