Commit Graph
209 Commits
Author SHA1 Message Date
kyleandornith-1.5-35b-a3b 45984b45be loopd: replay a carried summary as an unlogged user message
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-10-02 23:46:06 -07:00
kyleandornith-1.5-35b-a3b 18039fa2e4 loopd: open the highest epoch and carry its summary
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-10-02 23:38:10 -07:00
kyleandornith-1.5-35b-a3b 518d6ec416 loopd: [compact] threshold, summary_chars and summarise
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-10-02 23:25:47 -07:00
kyleandGrok 4.6 f80842640c review: a secret session's recall and ask_memory still query Honcho
Spec 13 requires that a secret session's query is sent unless the query
itself holds a known-prefix secret. serve.rs already ignores MemoryCall
taint on both read tools; the serve tests always sent Private. A skip of
Honcho for Secret would not have failed. Each suite now has one call at
class secret that asserts the fake received the search or chat.

Co-Authored-By: Grok 4.6 <noreply@x.ai>
2026-10-02 20:11:01 -07:00
kyleandornith-1.5-35b-a3b e0f0057ac8 memoryd: ask_memory served beside recall and memory, outside the lock
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-29 10:01:39 -07:00
kyleandornith-1.5-35b-a3b 165145edb5 memoryd: the admin socket's requests move to serve/admin.rs
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-29 09:54:14 -07:00
kyleandornith-1.5-35b-a3b 132e816322 memoryd: ask_memory, each workspace's chat at once with its own limit
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-29 09:47:08 -07:00
kyleandornith-1.5-35b-a3b 18bafbd2a0 memoryd: recall asks Honcho after the local index, outside the state lock
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-29 09:36:43 -07:00
kyleandornith-1.5-35b-a3b 6e3e713298 memoryd: recall's Honcho part, every source at once with its own limit
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-29 09:28:12 -07:00
kyleandornith-1.5-35b-a3b a73d49c609 memoryd: recall's local items on one indented line, as Honcho's
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-29 09:17:05 -07:00
kyleandornith-1.5-35b-a3b d8c396e691 memoryd: Honcho's results as recall items, kept, labelled and interleaved
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-29 09:11:11 -07:00
kyleandornith-1.5-35b-a3b b370c60bd4 memoryd: the Honcho workspaces it reads, with their clients and labels
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-29 08:56:50 -07:00
kyleandornith-1.5-35b-a3b b33341c53a loopd: ask_memory as a core tool, and a wait of its own on brokerd
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 22:41:37 -07:00
kyleandornith-1.5-35b-a3b 7ac7e8094a brokerd: a wait of its own for ask_memory, 170 s
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 22:34:49 -07:00
kyleandornith-1.5-35b-a3b e9f103dfdd brokerd: ask_memory, a built-in memory tool that memoryd runs
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 22:28:41 -07:00
kyleandornith-1.5-35b-a3b 3c54096704 bxcore: ask_memory's arguments and their shape checks
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 22:20:27 -07:00
kyleandClaude Opus 5.5 484804c00a bxctl: chat_approvals' helper accepts a broken pipe on stdin
json_prints_only_json_and_never_asks_brokerd failed once under load: the helper wrote the typed
input to a `bxctl chat --json` that never reads stdin and had already exited, and unwrapped the
broken pipe. A broken pipe on that write is now accepted; any other error still fails the test,
and a test whose input must be read checks the output.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 18:49:56 -07:00
kyleandClaude Opus 5.5 718e66d3f6 memoryd: Honcho responses for M5c-2's read path, recorded from rift (M5c-2 task 00)
Workspace search with a limit and with no match, conclusion queries for the owner's and another
agent's peer, and what a workspace that does not exist answers to search, query, chat and delete.
Recorded through roncho 1.0.0's blocking client in the throwaway workspace boxmaker-plan-probe,
deleted afterwards.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 16:20:42 -07:00
kyleandClaude Opus 5.5 e83b53b8b6 review: loopd prints every startup notice before it binds; tests wait for "serving on"
The serve tests waited for the socket file, then killed `loopd` and read its stderr, but the
socket is bound before its mode is set and before "serving on" and the broker notice are printed,
so a kill in between lost those lines (`pointers` failed once under load in M5c-1 task 15). The
broker notice now comes before the bind, so "serving on" is the last startup line, and the tests
wait for it (`tests/support/serving.rs`).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:26:37 -07:00
kyleandClaude Opus 5.5 45be83b891 review: gatewayd drops an approval's answer receiver before it says the approval ended
Every path that told the loop `Ended` did so while the handler still held the receiver of the
approver's answer; it was dropped only when the handler returned. An answer sent in between was
taken, reported to the approver as sent, and lost. `end` now takes the receiver and drops it
first. `brokerd_closing_first_ends_it_as_no_longer_pending` failed 10 of 60 runs under load
before, and 0 of 100 after.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:26:37 -07:00
kyleandClaude Opus 5.5 5e57cd69a3 review: a session log that cannot be read now is waited out
The worker marked a turn failed on any error reading its log. A missing log,
a damaged line or a turn not found still fail it; any other I/O error is now
waited out with the outage's doubling wait, logged once when it starts and
once when the log reads again (pointer session-log-damaged, whose runbook
entry now covers it), shown by bxctl memory sync, and the turn stays waiting.

read_records tells an unreadable file from a damaged line (read_log is
unchanged). The message helpers move from worker.rs to honcho/messages.rs,
re-exported, to keep worker.rs under 500 lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:15:04 -07:00
kyleandClaude Opus 5.5 bd4cf9fb7f review: a key split by an invisible character is still a secret
has_secret masked each character a character rule matches to a space, so one
zero-width space inside a key cut it into two runs too short to match. The
secret rules now also run on the text with those characters deleted, and the
text is a secret if either matches.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:12:12 -07:00
kyleandClaude Opus 5.5 3d266df9de review: bxctl memory sync shows what the Honcho side waits on
A shared status, kept by the worker and the walk and read by the report under
its own leaf lock, holds the workspaces whose key was refused, when an outage
of Honcho began, and when brokerd stopped answering. The report adds a line
for each while it lasts, and is unchanged when all is well. The runbook's
Honcho entries and broker-state-unavailable now say what sync shows.

Tuning and Wake move to honcho/wake.rs (re-exported from worker) to keep
worker.rs under 500 lines. honcho_sync.rs's serve test now allows the outage
line: the write wakes the worker, which finds Honcho unreachable.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:11:31 -07:00
kyleandClaude Opus 5.5 3dd95c5791 review: a memory write wakes the Honcho worker
A write, an undo or an accepted write decided into the ledger waited out the
worker's 30 s idle sleep. Mirror::journalled now says whether it added a line,
and memoryd wakes the worker when it did. The Wake lock is a leaf, taken under
the index lock as before.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:07:38 -07:00
kyleandClaude Opus 5.5 7c207f6ec6 review: an undo concludes again only what it had deleted
Undoing a consolidate concluded its moved entries a second time, and a later
removal deleted only the newer conclusion. An undo's added entry is now
concluded only when the ledger decided a Conclude for it and then an
Unconclude: an entry still concluded, or never concluded (a secret session's,
one from before sync), gets nothing. Ledger::concluded and unconcluded answer
from the decisions, in a module of their own to keep ledger.rs under 500 lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:06:28 -07:00
kyleandClaude Opus 5.5 b392af9ca4 review: memory writes from a secret session are not written to Honcho
The journal now records each call's class (absent on the owner's undo and on
older lines, which still read). The mirror turns everything a secret write
would conclude or send to the fleet into one Skip, after its deletions, which
still go; a note whose own header says secret is skipped the same way.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 14:04:42 -07:00
kyleandornith-1.5-35b-a3b 5f4e0d9997 memoryd: sync begins when Honcho is turned on, and conclusions are matched by peer
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 13:40:48 -07:00
kyleandornith-1.5-35b-a3b fb2afa1979 bxctl memory sync: the Honcho ledger's counts and failed items
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 13:22:26 -07:00
kyleandornith-1.5-35b-a3b fb05b26462 memoryd: the Honcho worker sends conclusions, their deletions and fleet notes
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 13:11:51 -07:00
kyleandornith-1.5-35b-a3b 4ebfc36c1a memoryd: memory writes decided into the Honcho ledger as they are journalled
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 12:46:18 -07:00
kyleandornith-1.5-35b-a3b b37eaef390 memoryd: the Honcho worker sends decided turns, waits out outages, retries undecided turns
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 12:30:49 -07:00
kyleandornith-1.5-35b-a3b aabfbc2f0a memoryd: a Honcho client per workspace, and its workspace, peers and sessions made sure of
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 12:13:48 -07:00
kyleandornith-1.5-35b-a3b 28df2a0e3b memoryd: a reported turn decided after loopd has its answer, from brokerd and the log
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 11:59:34 -07:00
kyleandornith-1.5-35b-a3b a339eb58b6 memoryd: where a finished turn goes in Honcho, decided from brokerd and the log
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 11:41:38 -07:00
kyleandornith-1.5-35b-a3b 8aaeb74f36 memoryd: the Honcho ledger, decided, sent and failed, read through at start
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 11:33:49 -07:00
kyleandornith-1.5-35b-a3b 129a9eadc3 memoryd: [honcho] and its keys checked at start, and brokerd's state socket
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 11:20:10 -07:00
kyleandornith-1.5-35b-a3b 9b4e9807b2 brokerd: state.sock answers memoryd's question about a session's state
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 11:05:42 -07:00
kyleandornith-1.5-35b-a3b 5199bd7149 bxctl: chat --speaker NAME, the speaker on every turn of the chat
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 10:57:11 -07:00
kyleandornith-1.5-35b-a3b fae12c3fe2 gatewayd: a turn's speaker, the username of the one person who wrote its burst
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 10:51:17 -07:00
kyleandornith-1.5-35b-a3b 4866353ac9 loopd: a turn's speaker in the log, its number in SessionUpdated
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 10:33:36 -07:00
kyleandornith-1.5-35b-a3b c798714af1 bxcore: a turn's speaker, SessionUpdated's turn, the session-state messages
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-28 10:27:28 -07:00
kyleandClaude Opus 5.5 7b40686def memoryd: depend on roncho 1.0.0 (M5c-1 task 00)
The owner's Honcho client, blocking, with TLS: default features off,
feature tls. It adds only itself to the lock file (checksum a5ccccc2…,
as checked against crates.io in review). cargo deny passes. The
dependency and the egress to rift are documented; the egress table also
lists the design model's probe of rift in a throwaway workspace.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 22:53:19 -07:00
kyleandClaude Opus 5.5 5a2464d81d loopd: the tag check asks /tokenize twice, not once per tag
Found in the M5b device check on straylight: the self-test asked about
each of the 33 tags and each neutralised form, 66 requests, one
connection each, and inferproxy's token bucket (burst 10) refused the
ninth, so loopd would not start. Now it asks about all the tags at once,
one per line, and then all their neutralised forms: the answer to the
first must hold each tag's recorded token in order, the second none of
them. Each tag is a special token, split out before anything else, so
the lines between cannot change it; and a neutralised form is only
dangerous as a tag's own token, so that is what the second answer must
not hold. The errors name a tag by its id, as before.

The fake tokenizer reads text with several tags in it; the tests cover
each tag as ordinary tokens, as another listed or unlisted token, a
duplicated token in the middle and at the end, a form holding each tag,
and both requests failing. Spec section 8 and the runbook entry follow.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 19:08:42 -07:00
kyleandClaude Opus 5.5 1fda5bfdb9 bxcore, bxctl: drop the skeletons' instruction comments; usage indent
M5b review, findings 3 and 4: the instruction comments tasks 03 and 04
left inside filled bodies, and a space of indent task 11 added to four
lines of bxctl's usage text. No behaviour changes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 19:08:42 -07:00
kyleandClaude Opus 5.5 27aeab48e1 gatewayd: links: url_len and closes as their comments say
M5b review, findings 1 and 2. url_len ended a clean reply's URL at any
`<` outside parentheses, not at a `<` before white space, a bracket,
`<`, `>` or the end; closes used a count of characters as a byte
offset, so a closer indented with a no-break space did not close its
fence. Both bodies, and fence_end's (an index replaced by `get`), are
the reference's again. tests/links_review.rs pins both cases with the
reference's output.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 19:08:42 -07:00
kyleandornith-1.5-35b-a3b 7cbc1d7342 brokerd, memoryd, gatewayd: a lock file keeps each to one instance
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-27 19:08:42 -07:00
kyleandornith-1.5-35b-a3b fd0437a032 bxcore, loopd, inferproxy: a lock file keeps each to one instance
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-27 19:08:42 -07:00
kyleandornith-1.5-35b-a3b 54f102bbe1 bxctl: sanitize check shows which sanitizer rules a text breaks
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-27 19:08:42 -07:00
kyleandornith-1.5-35b-a3b 648469cd67 gatewayd: images, and links in untrusted replies, are posted as code
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-27 19:08:42 -07:00
kyleandornith-1.5-35b-a3b 0d3048c3c4 bxcore, loopd: TurnDone says whether the session has read untrusted content
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
2026-09-27 19:08:42 -07:00