Skip to content

De-guess the rest: streams, cards, provenance, §14.2 — all ref-bound - #18

Merged
Octember merged 3 commits into
mainfrom
claude/bevelina-issues-10c086
Aug 13, 2026
Merged

De-guess the rest: streams, cards, provenance, §14.2 — all ref-bound#18
Octember merged 3 commits into
mainfrom
claude/bevelina-issues-10c086

Conversation

@Octember

Copy link
Copy Markdown
Owner

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

Octember and others added 3 commits August 13, 2026 18:28
…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>
@Octember
Octember merged commit 901e6da into main Aug 13, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant