rabadon

overview / rules / event-unread

event-unread

An event rabadon could not read to its end cannot be judged.

what it refuses, and what it lets through

An event past kMaxEvent was not read to its end, so there is nothing whole to judge. A tool call is refused: a verdict on a prefix is a verdict on a different call, and allowing what was not read would let size buy a pass. Any other event is recorded as skipped and let be.

From the comment in native/gate.cpp above the code that decides it.

the refusal, as the agent reads it

rabadon BLOCKED this action. Rule: event-unread — an event rabadon could not read to its end cannot be judged the hook event is over 16 MiB and was not read Adjust the approach instead of retrying the same action. (this rule is sealed: disabled[] does not switch it off. Only the operator, editing .rabadon/promise.json or .rabadon/guard.json by hand, can change what it protects.)

Rendered from the strings in native/gate.cpp and the envelope in native/gate_pre.h (Judge::refuse). A word in <angle brackets> is filled in from the command at the moment it is refused.

in watch mode the same verdict is recorded, and nothing is stopped

rabadon (watch) would have blocked this. Rule: event-unread — an event rabadon could not read to its end cannot be judged the hook event is over 16 MiB and was not read Nothing was stopped. `rabadon on` makes this a real refusal.

switching it off

Sealed: disabled[] in .rabadon/guard.json does not switch it off, and the refusal does not offer that way out. They answer only to the operator editing the files by hand, which does not pass through this hook. promise-off-target stays switchable: a once-per-session challenge buys no integrity by being locked, and drift stays on the ledger regardless.

in the field

No record in the published field dataset (field.jsonl, 778 records, 2026-07-27 to 2026-08-26) carries this id.

The dataset is on the field page.

changelog

unreleased (20 entries)