Conversation
… nobody is there
An archived agent (terminal gone) keeps its inbox, so a message to it lands
there, is logged as delivered, and stays unread. Filing it is right — a
worker re-hired under the same id reads it on its first turn, and a released
worker's inbox is settled only up to its done signal — but the sender learned
nothing: god kept mailing dead agents for hours (seen live 2026-08-16), and a
request to a worker nobody re-hired was simply lost.
routeMessage(): a direct message to an archived recipient is still delivered
(and logged `archived-recipient`). When it expects an answer (`requires_reply`:
request / query / propose) and the sender is a live registry agent, the sender
gets an immediate `inform` from `system`, threaded on the original
(in_reply_to, conversation, hops + 1, requires_reply false so it can never
ping-pong): "[no one is there to answer — "<id>" is archived] <subject>" with
what to do about it (route to a live agent or hire one). Inform-only mail is
filed quietly; broadcasts already skip archived agents; god (the bounce
target) is never treated as archived.
Test: request → filed verbatim + notice to the sender + log entry + message
log still reports the delivery; query/propose notify, inform/done do not; a
live non-god sender is notified, a sender off the roster ("system") is not;
an unarchived agent gets ordinary mail again.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…esign, OpenWolf transient), PRs chaitanyagiri#512 aviso a remitente con destinatario archivado y chaitanyagiri#513 exit en dev, 6 fixes integrados (891/891), boot real 11:50 OK - Agente Claude-IMPLEMENTADOR - TESTED Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WmYD63qADnKFKjpU1Ar3TF
…routed, not dropped into an inbox Self-review (CONTRIBUTING: run your agent over your PR). An archived agent on a hookless or proxy-tier engine hit the terminal-handoff branch first: nothing filed, no log, no notice. The archived branch now runs right after the assistant bounce, so with no terminal the inbox is where the mail goes whatever the engine. The notice goes through routeMessage, so a sender on such an engine receives it the way it receives any mail (terminal handoff, or the god bounce when no renderer is there); requires_reply false and the live-sender guard keep it from re-entering. Dropped the redundant sender-is-target guard. Test: an archived custom-engine agent is filed and its sender told; a custom-engine sender is told through routing. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Agent review of this PR (CONTRIBUTING: "run your coding agent over your own PR, and paste what it found"). Claude Code went over
Verified after the fix: typecheck clean, the test file 5/5 (new case: an archived custom-engine agent is filed and its sender told; a custom-engine sender is told through routing), local suite 839/839. |
be60a47 to
e1c216c
Compare
|
Housekeeping, no code change: I force-pushed this branch to reword the commit messages (an internal session trailer was dropped; |
What & why
An archived agent (its terminal is gone) keeps its inbox, so a message to it lands there, is logged as delivered, and stays unread. Filing it is right — a worker re-hired under the same id reads it on its first turn (#472 settles a released worker's inbox only up to its done signal) — but the sender learned nothing: god kept mailing dead agents for hours (seen live 2026-08-16), and a request to a worker nobody re-hired was simply lost.
Now a direct message to an archived recipient is still filed (and logged
archived-recipient), and when it expects an answer (request/query/propose) and the sender is a live agent, the sender gets an immediateinformfromsystem, threaded on the original (in_reply_to,conversation,hops + 1,requires_reply: falseso it can never ping-pong):[no one is there to answer — "<id>" is archived] <subject>, with what to do about it (route to a live agent or hire one). Inform-only mail is filed quietly; broadcasts already skip archived agents; god (the bounce target) is never treated as archived.Type of change
Evidence
Before
On main the new test is red: the request is filed and reads as delivered, and the sender's inbox stays empty.
After
Same test with the fix: filed verbatim, the sender holds the notice, the ledger has the
archived-recipiententry and the message log still reports the delivery that happened.How I tested it
main@ 417d8denode --test test/hive-archived-recipient.test.cjs→ 3 of 4 fail onmain(src stashed), 4/4 pass with the fix.npm run typecheckclean;npm run test:focused838/838.system,in_reply_to,requires_replyfalse, subject prefix, body) + log + delivered list; query/propose notify while inform/done are filed quietly; a live non-god sender is notified and a sender off the roster (system) is not; an unarchived agent gets ordinary mail again.Credit (optional)
Discord:
X:
Checklist
npm run typecheckpasses.npm run test:focusedpasses.npm run buildsucceeds.DESIGN.md/tokens.ts— no ad-hoc colors, spacing, or fonts. (no UI)ATTRIBUTION.md. (no art)🤖 Generated with Claude Code