Persona wakes on address only: chat_pending.v3 basis/form, unaddressed acked in sequence #43

Merged
eureka merged 2 commits from eureka-substrate/address-only-wake into main 2026-11-11 07:27:20 +00:00
Owner

Consumer half of eureka-body:ruling:addressed-delivery-only / follow-up persona-wakes-on-address-only (Bifrost PR #48, main 1d05483, docs/bridge.md "Addressing facts").

  • Wire: chat_pending_request.v2 out, chat_pending.v3 in (basis direct|tag|reply|room|nil at 12, form message|notice|edit at 13). A mouth that answers the v2 request UnknownKind is asked the v1 way and its 12-field answers decode as basis: None, form: Message. Golden bytes in tests/fixtures/persona-chat-v5/ (copied from Bifrost).
  • Rule (address.rs): addresses = message + mentions/names (about any Mind); is_for(own, delivery) adds Matrix's basis, which is a fact about the polling Persona only. room and nil basis wake no one by themselves; names still decide. Notices and edits are for no one.
  • Heartbeat: off-beat wake uses is_for behind the existing sender gate (operator or another Mind).
  • Persona: leading run of deliveries not for her is acked in one ack (quiet_through), never past a delivery she was told and has not answered; a live session is told only what is hers (the stagger now ranks among addressed).
  • public_surface.txt regenerated (it was already stale for MouthRefused).

Not deployed. Known limit: the leading-run decision uses the heartbeat's addressing table for her project names; with no table, only her own names, tags and Matrix's basis count.

🤖 Generated with Claude Code

Consumer half of `eureka-body:ruling:addressed-delivery-only` / follow-up `persona-wakes-on-address-only` (Bifrost PR #48, main 1d05483, docs/bridge.md "Addressing facts"). - Wire: `chat_pending_request.v2` out, `chat_pending.v3` in (`basis` direct|tag|reply|room|nil at 12, `form` message|notice|edit at 13). A mouth that answers the v2 request `UnknownKind` is asked the v1 way and its 12-field answers decode as `basis: None, form: Message`. Golden bytes in `tests/fixtures/persona-chat-v5/` (copied from Bifrost). - Rule (`address.rs`): `addresses` = message + mentions/names (about any Mind); `is_for(own, delivery)` adds Matrix's basis, which is a fact about the polling Persona only. `room` and nil basis wake no one by themselves; names still decide. Notices and edits are for no one. - Heartbeat: off-beat wake uses `is_for` behind the existing sender gate (operator or another Mind). - Persona: leading run of deliveries not for her is acked in one ack (`quiet_through`), never past a delivery she was told and has not answered; a live session is told only what is hers (the stagger now ranks among addressed). - `public_surface.txt` regenerated (it was already stale for `MouthRefused`). Not deployed. Known limit: the leading-run decision uses the heartbeat's addressing table for her project names; with no table, only her own names, tags and Matrix's basis count. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Consumer half of ruling eureka-body:ruling:addressed-delivery-only. A delivery is for a Persona when it is a message and Matrix says
direct/tag/reply, or its mentions or text name her (address::is_for); notices, edits, @room and a nil basis (unproven) wake no one on
their own. The heartbeat's off-beat wake keeps its sender gate. The Persona acks the leading run of what is not hers in one ack and a
live session is told only what is hers. A mouth that does not serve the v2 request is asked the v1 way. Golden bytes pinned from Bifrost
tests/fixtures/persona-chat-v5; the public-surface snapshot is regenerated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
eureka merged commit 95713735aa into main 2026-11-11 07:27:20 +00:00
Sign in to join this conversation.
No reviewers
No labels
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
GameCult/Huginn!43
No description provided.