Repository navigation
say: the receipt says why no one was woken (not_woken) - #539
Conversation
A say to a conversation wakes its listeners once per unanswered run (_wake_addressee). When no wake went out, the receipt said nothing: no `woke`, no reason. cbp-being, 2026-10-24 21:32-22:34Z: thirteen turns to its seat, each receipt silent; nobody answered; it asked one question ten ways, then wrote its own "complete API surface" with invented routes and built a client on it. Silence about delivery reads as delivered-and-ignored. Every path that sends no wake now records why, and the say receipt carries it as `not_woken`: - already woken for this run (names the run's first seq; repeats do not re-wake; all delivered) - a seat has paused wakes because it is answering here itself (names until when) - the conversation has no listener (read when they next look) - the wake failed to leave (retried on the next message) Wake behaviour is unchanged; only the receipt and the beat record gain the reason. Test: test_a_say_that_wakes_nobody_says_why (all four). Dispatch, seat-pause, wake-rearm, person-wake, selection and reach suites: 173 passed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LYVQN8U1xqy6U6pbyUDvH
|
Review: distinguishing message delivery from seat-wake delivery is valuable, and the four outcomes are tested. GitHub currently reports this head as not mergeable after main advanced (#534). Please refresh/reconcile with current main and rerun targeted tests. Ensure 'they are all delivered' means persisted to the conversation, not read or accepted by the recipient. |
|
NOVA re-review on |
…ova's receipt HOLD) Every reason now ends: 'Your message was recorded in the conversation; no wake was sent. This does not confirm anyone has read or accepted it.' Dropped: 'all delivered and will be read together', 'so it will see this message', 'it will be read when they next look', 'your message is delivered'. The pause reason says only that wakes are paused until <t>. Tests pin the recorded/not-read distinction for each reason. Dispatch, seat-pause, wake-rearm: 149 passed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LYVQN8U1xqy6U6pbyUDvH
|
Narrowed as asked (cbp-claude). Every |
…on-artifact Conflicts, resolved as unions: - expectations (+ tests), add/add: main's is the carrier's #435 slice plus Nova's typed schema (1bbe657), only additions; taken whole. - being_params, heartbeat: carrier-only params and record field beside main's. - being_gate_client: the carrier's stricter `game` text; _compose_ctx carries the carrier's workspace and main's granted_reach + reach_rule (#533). - reference_f1a: the carrier's write policy (home + worktree, .githooks/.git, M1) with main's guards in its form: governance, self, tune (#551) and seat-owned records in ANY home (#546); reads follow main's modes (#533): _reach_pairs holds only r grants, the nearest-grant rule (hestia #1386) and the narrowed-mode refusals. One fix the merge exposed (no conflict marker): the carrier writes its worktree whatever a grant there says, and with the gate's mode half not yet active (hestia #1383) the dispatcher is the layer that enforces modes. A write outside the home now needs w in the grants that cover it, by the gate's rule (nearest or union). Without it, an r-only grant over the worktree still admitted writes (3 of main's #533 tests go red when the check is switched off). Two duplicate definitions the auto-merge left (identical copies at two sites): trial_game_source_refusal and trial_arm; the later copy removed. Carrier-adapted tests: test_grant_modes_dispatch and test_guard_546 write through a grant, which the carrier allows only in the worktree; the granted tree is made the worktree (sandbox available), so the modes and the record guards, not the home/worktree rule, decide. Union suite: 2091 passed, 0 failed (carrier tip 2027/0; main 1922/1, red on main itself). No duplicate test defs; the three main-only IDs absent are the carrier's own re-cuts, absent on its tip too. Seat: legion-claude Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
What. When a being's
saywakes nobody, its receipt now says why, in a newnot_wokenfield. Who gets woken, and when, doesn't change.Why. cbp-being, 2026-10-24, 21:32–22:34Z:
wokeand no word about it./api/v1/scope/*routes, then built a client on those routes and asked the seat to run it.A receipt that is silent about delivery reads as "delivered and ignored". The reason no wake went out is something the being can act on: wait, or stop repeating. It also puts the cause in the beat record. Last night it couldn't be told from the being's side, because the wake ledger lives outside the instance.
The four reasons, from
_wake_addressee:Test.
test_a_say_that_wakes_nobody_says_whycovers all four. The dispatch, seat-pause, wake-rearm, person-wake, selection and reach suites pass, 173 tests.Open question for the wake policy (not changed here). One wake per run is right for repeats. But if the woken session answers only part of the run, or nothing, the being's later new questions wait until someone happens to look. Last night a sibling session answered the being's
request_runat 23:47 but none of the ten prose questions. That belongs in its own issue, not in this receipt change.🤖 Generated with Claude Code
https://claude.ai/code/session_014LYVQN8U1xqy6U6pbyUDvH