De-guess the rest: streams, cards, provenance, §14.2 — all ref-bound - #18
Merged
Conversation
…t choice Live 2026-08-13 (T-354): a wake batch spanning several alert threads created 'Investigate process-video-task failure burst' homed by the batch-level guess (last addressed message) — Noah's 'pull it together blacksmith' tease — so the worker's correct report delivered into the wrong incident's thread and she voiced it there. The deferred task_create source-binding audit item, come due. Same medicine as reply/react (R4): task_create gains a required ref (^r\d+$) and homes to conversationOf(that target). The heuristic can no longer route anything — service.ts's homeMsg now only seats the reply stream and the §14.2 fallback. Refless calls bounce with the standard 'is not a ref' card. Regression: two-conversation boot wake, task ref'd at the first conversation, asserts home != the batch's last address (the exact T-354 shape). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rovenance, and the §14.2 apology The T-354 class, hunted to extinction. An adversarial audit (19 agents) found the batch-level guess (addressed.at(-1) ?? pending.at(-1)) surviving in five more places after the task-homing fix, plus two silent-drop bugs of the same family: - task_create sponsor/origin still came from the batch pick: tasks homed to one thread but sponsored by a speaker in another. Both now bind to the ref's own provenance (RefTarget carries eventId/principalId, minted by the renderer; provenanceOfRef resolves the rest). Machine-authored lines fall back to the newest human IN that conversation (lastSpeakerIn), never across the batch. - task_confirm recorded the wake-level principal as approver. Now requires the MESSAGE ref of the approve/deny line (conversation refs and via:'search' refs rejected) — the durable resolution names who actually said yes. - task_steer/task_cancel bind their source event to the asking message's ref. - checklist was the one posting tool with no ref; its cards could only land on the guessed home. Required ref, seated on conversationOf(ref), holder keyed per conversation; setCards now refuses streams that can never open, so the fallback actually fires instead of reporting cards nobody will see. - The single pre-seated ReplyStream became lazy per-conversation streams — seat and recipient follow her first ref-addressed post, so a multi-room wake streams every reply natively instead of degrading the 'wrong' ones. - §14.2: one wake-scoped answered boolean let any answer anywhere silence every other owed asker, and direct.at(-1) sent the one apology to a batch-tail guess. Per-conversation answered set; one fallback per owed conversation. - A refless ear hold/wake returned 'noted' while recording nothing (the 2026-08-10 discarded-judgment shape). Bounces with a correctable error. - React acts file at the ref target's own thread (a tail-line react used to file at the surface and render in the wrong conversation). Resident ToolsetContext now carries anchor: null — no batch-level anchor exists to be reused. principal remains for broker gating only. Reviewed by a second adversarial workflow (21 agents): 9 confirmed findings all fixed, including a wiring loss (originEventId dropped, task_steer/task_cancel dead on live wakes while the suite stayed green) now pinned by a regression that drives both tools through Service.runWake()'s own toolset. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-through on the T-354 audit: the batch-level guess survived in five more seats (task provenance, confirmation approver, checklist destination, stream seating, the §14.2 apology) plus two silent-drops (refless ear holds, react residence). All seven promoted to required-ref / correct-by-construction. Adversarially reviewed (21 agents, 9 confirmed findings fixed — including task_steer/task_cancel dead on live wakes, now pinned by a real-wake regression). 412 tests green, +11 SPEC rows.
🤖 Generated with Claude Code