docs: M5c spec: sends are at least once, skip in decided lines, sync from when Honcho is on
The ledger cannot promise an item is never sent twice: a crash between a send and its sent line, or an owner removing that line, sends it again. A decided line holds a skip and its reason, as task 07's ledger does. Turns from before sync began are skipped (owner's decision, 2026-09-28). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -138,10 +138,15 @@ rebuilt from them.
|
|||||||
`honcho-send-refused`), and the worker moves on. `bxctl memory sync` lists failed entries.
|
`honcho-send-refused`), and the worker moves on. `bxctl memory sync` lists failed entries.
|
||||||
|
|
||||||
**The ledger**, `memory/honcho.jsonl`, is append-only JSON lines, one per event: `decided` (the
|
**The ledger**, `memory/honcho.jsonl`, is append-only JSON lines, one per event: `decided` (the
|
||||||
item, the workspace or `none` and why), `sent` (the item and Honcho's ids), `failed` (the item and
|
item, and the workspace it goes to or `skip` and why), `sent` (the item and Honcho's ids), `failed`
|
||||||
the status). What is decided and not sent is the outbox; there is no separate queue. An item is
|
(the item and the status). What is decided and not sent is the outbox; there is no separate queue.
|
||||||
never sent twice: the worker checks for its `sent` line first, and on start `memoryd` reads the
|
The worker checks for an item's `sent` line before sending it, and on start `memoryd` reads the
|
||||||
ledger through. Items are a turn (`session`, `turn`) or an edit (its journal id).
|
ledger through, so an item is sent at least once and a second time only if a crash falls between
|
||||||
|
the send and its `sent` line, or the owner removes that line (Honcho cannot delete a message).
|
||||||
|
Items are a turn (`session`, `turn`) or an edit (its journal id).
|
||||||
|
|
||||||
|
**Sync starts when Honcho is turned on.** The ledger records when sync began, and a turn that
|
||||||
|
started before then is skipped, so turning on `[honcho]` never sends earlier conversations.
|
||||||
|
|
||||||
Everything written to Honcho is neutralised (`sanitize::neutralise`); a reply is the model's own
|
Everything written to Honcho is neutralised (`sanitize::neutralise`); a reply is the model's own
|
||||||
output and was logged as it came, so it is neutralised here, when it leaves.
|
output and was logged as it came, so it is neutralised here, when it leaves.
|
||||||
|
|||||||
Reference in New Issue
Block a user