Commit graph

754 commits

Author SHA1 Message Date
Meta Vens
d920e8b171 Merge hands/eureka-body-project-name-addresses-steward (25502a5) into eureka-body/release-reply-path
# Conflicts:
#	crates/mind-body/src/persona.rs
#	crates/mind-body/src/persona/tests.rs
2026-11-07 08:02:11 +00:00
Meta Vens
8616cc2752 Merge hands/eureka-body-self-session-resume (46800b8) into eureka-body/release-reply-path
# Conflicts:
#	crates/mind-body/src/self_run.rs
#	crates/mind-body/src/self_run/decide.rs
#	crates/mind-body/src/self_run/decide/tests.rs
#	crates/mind-body/tests/public_surface.txt
2026-11-07 07:57:32 +00:00
Meta Vens
c5a2c68cb8 self: silent-stop kinds cover every kind the CLI queues nothing for on our stop; capture fixtures killshell and deadline-race; tests kill hand mutants H2 and H5
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 07:44:59 +00:00
Meta Vens
21f92068fb self: public_surface snapshot carries Usage's kind fields
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 07:55:40 +01:00
Meta Vens
7c0313b068 self: a stop of ours owes no turn only for a shell task (task_type local_bash, Bash or Monitor); every other or unread kind owes its turn when stopped
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 07:48:13 +01:00
Meta Vens
62ce2ba12d self: idleness reads the CLI's own background-task level and its notification-to-turn rule; at idle the oldest waiting conversation goes first
Cut: State.tasks, Event::TaskStarted, the tool_use_id keying of task lines and the notification replay, and TaskNotified's tasks.remove gate. running is a copy of the CLI's last background_tasks_changed, replaced whole; a notification owes a turn when the task was backgrounded and the session did not stop it with TaskStop (or KillShell, KillBash: the stream shows the alias as the model named it); Polled and Inbox carry other_first, so a served conversation's newer brief no longer outruns an older brief of another. Fixtures bg-fgto, bg-kill and bg-monitor pin the three falsified cases; the probe's fake API gains a generic tool step and a timed scenario.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 06:48:03 +01:00
Meta Vens
625c171781 probe: background-task captures with the real claude 2.1.312 (bg-fgto, bg-kill, bg-monitor)
A foreground task moved to the background at its timeout, a task stopped with TaskStop, and a persistent Monitor; scrubbed to /probe/work, the key is the fake one.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 06:41:38 +01:00
Meta Vens
d655b59ce8 self: a session serves one conversation at a time; another conversation's brief is written only at idle, and every result belongs to the conversation being served
decide owns idleness (no turn open, nothing outstanding, no backgrounded task running, no notification owed its turn) and the switch of
conversation; read_usage reads the task lines for liveness only; the CLI's replay of a task notification is no echo of ours. SelfInbox
serves one Conversation and attributes a result by the span, not by the order of the stream. Deleted: briefless_open, briefless_answers,
turn_conversation, turn_allows, may_tell, one_conversation_told, note_task, tasks, notified, the Persona pointer line and its plumbing.
ScheduleWakeup and CronCreate are denied to the Self session. Tests replay the real-order captures with briefs spliced in.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 05:31:38 +01:00
Meta Vens
970086f6a0 probe: background-task captures with the real claude 2.1.312 (bg-idle, bg-fold, bg-other, bg-race, bg-agent, bg-late)
The harness runs the CLI against the fake Messages API with a fake key and a throwaway config dir: bg and agent plan steps, a
Monitor step, --disallowedTools through DENY. Captured: an Agent call with run_in_background gives task_started
(is_backgrounded true, the call's tool_use_id) and a task_notification with the same id; a background Bash ending while no turn is open
makes the CLI begin its own turn (init, a request, no echo); ScheduleWakeup and CronCreate are absent from the init tools when denied;
a Monitor is a backgrounded task with the same two lines, so it needs no denial. Host paths scrubbed to /probe/work.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 05:14:03 +01:00
Meta Vens
3402cb839d self: a notification is pending by its task's id alone and a turn that took in its conversation's briefs takes it in; tests for the survivors
A notification with no tool_use_id registers nothing (the open-turn gate still holds it by its request). Tests: the notified conversation's brief joins its turn, a notification of another conversation stays pending through a brief turn, two conversations' notifications open a turn no brief may join, an idle non-request line opens no turn, a resolved claim is read by its own key, a claimed cut spec stays on the start line.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 03:46:44 +01:00
Meta Vens
8bdb84d94b self: a briefless turn is open from a request with nothing echoed until its result; the start message states the routing rules
A request with no line of ours echoed is a turn that took in no brief, notification or not; until its result only the conversation it continues, or the notification's task's, is written. Nothing told yet means no other conversation exists.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 03:20:23 +01:00
Meta Vens
08a80697d3 self_run tests: the fake claude scripts that loop end when their stdin closes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 03:16:27 +01:00
Meta Vens
a1370cf424 persona: a reply that cannot be placed is a text-free pointer in the public session
A reply that answers no brief, or briefs of two conversations, was read by nothing and re-paged on every Persona read. It is now a route in the public conversation marked as a pointer: the line carries the reply id and a fixed note, never its text, and the Persona reads the reply by id. Heard, it is resolved like any reply.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 03:16:27 +01:00
Meta Vens
7182ff107b self: a notification's result is its task's turn's; a briefless turn holds other conversations; a resolved claim's conversation is read by key
The stream's task_started and task_notification events carry the tool_use_id of the call that started the task. The actuator records, per task, the briefs the starting turn was answering; a briefless result after a notification answers those (any notification it cannot place answers none). While a notification's turn is open, only the conversation it is attributed to may be written. A restart reads a resolved claim's conversation by key and opens the gate for it alone. The flush result is the note to the successor, in the journal: it is no reply. The start message states the rules.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 03:16:26 +01:00
Meta Vens
46800b8f8a self_run resume: a request with no echo before it is bounded by the result before it (kills the result-line mutant)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 01:20:51 +00:00
Eureka Hands
4bc00e36f9 self tests: the gate follows the conversation of a line written and unechoed when a result arrives
Kills the conversation_of mutants (== to !=, body to None) that the previous pass left.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 01:08:45 +00:00
Meta Vens
25502a5e74 persona tests: her own row is in the addressing once, whatever the table holds
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 01:56:06 +01:00
Meta Vens
57592e3f7f address, persona tests: no hang on a self-overlapping name; the hash order, the fallback's own row and the poll's table refresh are pinned
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 01:28:09 +01:00
Meta Vens
54a89b94bf self_run resume: the kept conversation lives in the unit second state directory, outside her working directory; a resumed start consumes its record before spawning; the warm window counts from the line before a request
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:23:39 +00:00
Eureka Hands
34db62e3ca persona tests: a reply to no brief is told nowhere; the rotation margin ends a start; an idle session tells its own retell, revision or notice; a reply that fails to resolve twice is retried once
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:20:18 +00:00
Eureka Hands
f8403165e5 self: a result that took in no brief answers nothing once two conversations were told; the flush answers no brief; the start line holds one conversation
A reply to no brief is told in no session and stays in force (ruling briefless-result-routing). A restart drops a claim that is not of the start set conversation.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:20:09 +00:00
Meta Vens
6670562c61 persona tests: the first-line golden follows the to sentence
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 01:06:37 +01:00
Meta Vens
6aedd54155 mind-body: the committed surface follows HeartbeatView and Addressing; the responsibilities list says which chat names are exact; a test's direct message does not name a Mind
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 01:03:46 +01:00
Meta Vens
cfef5bee4f heartbeat: the swarm's addressing table in heartbeat.cc, written by the poll; Personas rank the stagger and list to from it
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:59:02 +01:00
Meta Vens
0d2f4ec216 address: a one-word repo name matches as the repo spells it, a split phrase in any case; a self-overlapping name is found; stagger test helpers search a bounded range
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:53:34 +01:00
Meta Vens
be9f55ce3d heartbeat tests: a member naming nothing of hers scores nobody
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:51:17 +01:00
Meta Vens
f6b6cb3899 address: contains, not any
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:51:17 +01:00
Meta Vens
fe6fb21f35 mind-body: the committed surface names address's impl; the responsibilities test sees the chat names
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:51:17 +01:00
Meta Vens
5c384773dc persona tests: the name-ranked event is named, not searched for
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:51:17 +01:00
Meta Vens
5aa643a6c2 stewardship names: chat names a steward lists, and the Persona and heartbeat address her by them
address.rs is the one rule for whether a delivery is for a Mind (tag, or a name as a whole word, a listed name exactly as written and a derived or her own in any case); heartbeat's addresses and names_whole_word move into it, the Persona's to_you and own stagger rank call it. eureka-pipeline PipelineStewardship gains names (absent when empty); facts, schemas and golden follow.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:51:17 +01:00
Meta Vens
725facb183 self_run resume: clearing a missing kept dir is nothing, an unreadable one an error 2026-11-06 23:41:07 +00:00
Meta Vens
8ceee68009 self_run lane: the fake echoes the start before it reads the flush 2026-11-06 23:41:07 +00:00
Meta Vens
fe4973b21e self_run lane: the start is echoed before the flush is read, and the lane unit names its state directory 2026-11-06 23:41:07 +00:00
Meta Vens
1a2b86c4b7 self_run: doc names no flag the negative check forbids 2026-11-06 23:41:07 +00:00
Meta Vens
ad21196c75 self_run resume: public surface, sequence doc status, container-lane test across two real processes 2026-11-06 23:41:07 +00:00
Meta Vens
30fb34917e self_run resume: existing tests learn the session journal lines and the keep order 2026-11-06 23:41:07 +00:00
Meta Vens
8f296c96ac self_run resume: tests for warm_until, resumes, the keep dir and the carry path; Fake gains kept/keep 2026-11-06 23:41:07 +00:00
Meta Vens
73c951861d self_run: a clean end is kept until its cache lapses and the next process resumes it (decide, spawner keep dir, claude_args), WIP 2026-11-06 23:41:07 +00:00
Meta Vens
1f8dae184e mind-body: Brief.conversation is crate-visible like its type; start_self_run's inputs stay flat
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:10:18 +01:00
Meta Vens
8b61cca7da self: one Self turn answers one conversation
The start set is one conversation's; poll and tell gate briefs by the conversation of those unanswered;
a result that took in no brief continues the turn before; the start message says so.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:07:20 +01:00
Meta Vens
b675ba75c1 persona tests: a reply is told only in its brief's conversation, end to end
DM invariant across three sessions, a reply alone opening its DM once per start, the oldest waiting thing deciding,
pre-deploy briefs going public, a two-conversation reply told nowhere, the yield, one origin per turn, the open-brief mark.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:07:20 +01:00
Meta Vens
98e61aff3e persona: a reply is told only in its brief's conversation; a start opens a DM's session for a reply alone
reply_routes derives each in-force reply's conversation from the origins of the briefs it answers (nothing stores it);
next_session lets the oldest waiting thing decide, carry's batch no longer owns rooms, conversation or origin;
an empty batch takes the session's origin; the brief records the turn's origin; a session with nothing of its own yields to another conversation's reply.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:07:20 +01:00
Meta Vens
c4303e8657 recall: origin_phrase is the one render of an origin
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:06:44 +01:00
Meta Vens
5eb1452ca4 pipeline: a follow-up records the origin of the Persona turn that admitted it
PipelineFollowUp gains origin (absent is not written, so the golden sample is unchanged);
MemoryOrigin's doc says it is a brief's too; the header facts carry it; schemas regenerated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:06:44 +01:00
Meta Vens
26303f045b persona: once she answered a line, its heard replies never return to waiting; resolution is retried silently
A heard reply whose resolution did not take (admit failed, or the keyed read errs) went back through untell and was told again. The answered
replies now wait in answered_replies, retried at each result and at close (settle_replies), one by one so no refusal holds another hostage;
untell serves only the lines she did not answer. Tests pin the retry, the close retry, the reply resolved elsewhere on a refused line, and the
unreadable in-force read on that path (told again, kept as retell).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 23:55:25 +01:00
Meta Vens
987c6ec74d persona: the mind says whether a heard reply took; tests kill the keyless read and the lost resolution
hear_replies attempts each resolution and untell asks the mind which replies are still in force, so an Ok/Err reading of the
admission is no second opinion. The out-of-force test holds replies past the first line so a read by kind alone would retell the
resolved one.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 23:15:25 +01:00
Meta Vens
8ab5959d46 persona: a reply out of force leaves for good; replies resolve one by one; idle and waiting-duplicate paths pinned
untell checks a reply is still in force before it waits again, and hear_replies resolves each reply on its own, so one refused
resolution neither retells a reply nobody can answer nor holds the rest of its batch. Tests: out-of-force retell, a reply reaching an
idle session with no chat pending, and a reply waiting across a read while a line is not echoed (a stalled child).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 22:57:42 +01:00
Meta Vens
5269260d12 persona tests: each reply line carries its own words
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 21:26:13 +00:00
Meta Vens
8f184f9028 self_run: REPLY_TEXT_LIMIT is the actuator's, not the public surface
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 20:59:58 +00:00
Meta Vens
aab49c5d35 eureka-state: schema list names reply before selection
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 20:42:10 +00:00