Commit graph

774 commits

Author SHA1 Message Date
Meta Vens
07b2d124e7 recall dispatch: fix literals, boxed view 2026-11-07 11:51:04 +01:00
Meta Vens
5b469ef54d huginn recall dispatch: the Agent PreToolUse hook appends the in-force neighbours of a brief's cited records; admit's hold check bounded at 10 s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 11:49:48 +01:00
Meta Vens
373d96691f huginn admit: hold a batch once when its rulings or questions have in-force neighbours
cut huginn-admit-hold r2. admit decodes, then asks near::neighbours (the one
neighbour query, for admit now and recall dispatch next) for the nearest
in-force rulings and questions to each of the batch's first three titled
rulings or questions, minus the batch's own ids, the question a ruling answers
and the subject of a Superseded resolution. A neighbour left holds the batch:
exit 6, the neighbours and a token (16 hex of sha256 over the decoded batch and
the agent) printed, nothing sent. The same command with --seen <token> admits
it; any other token is InvalidInput. A trouble during the check prints a note on
stderr and the admission proceeds.

PipelineDocumentSummary::of is public so the neighbours print as header lines.
sha2 joins eureka-state (already in the lock).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 11:35:01 +01:00
6c9581cb18 Merge pull request 'huginn persona get|put' (#9) from eureka-substrate/huginn-cli-json-persona into main 2026-11-07 10:06:28 +00:00
Meta Vens
bea5e8eccc huginn CLI: persona get and persona put
persona get prints the stored gamecult.persona_state.v0 document, then its
updatedAt and receipt (absent, exit 1, until the first put). persona put reads
the whole document from a file or stdin and prints Committed <receipt>, or the
refusal (a stale put names the stored updatedAt), exit 1; a document that is
not one JSON object is a usage error and sends nothing. Provenance tool is huginn.
The eureka-state MCP's last unique capability is now in the CLI.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 10:43:36 +01:00
c63327ece9 Merge pull request 'Release: Self replies reach her Persona; one conversation at a time; resume; project-name addressing; stream thoughts' (#8) from eureka-body/release-reply-path into main 2026-11-07 09:09:21 +00:00
Meta Vens
77ce0465ea stream: the proxy-environment test is an integration target, so the lib carries no environment read
Moves the_stream_agent_ignores_the_proxy_environment to crates/mind-body/tests/stream_proxy.rs, as control.rs carries its env-touching tests. It asserts through the public surface: with a proxy in the child's environment the stream's agent reaches its endpoint directly and follows no redirect, and a plain ureq agent in the same environment takes the proxy. No behaviour change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 09:37:17 +01:00
Meta Vens
98a3741d4b stream: the binary's argument reader carries the reasoned allow its siblings carry
mind-stream reads its own arguments like the other binaries, which each allow the crate's disallowed-methods lint with a reason; one range assertion written as contains. No behaviour change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 08:11:16 +00:00
Meta Vens
b90d84cd50 release-reply-path: two fixtures reconciled after the merges
A DM's room is its room id under the reply cut (the steward cut's hand-built DM delivery carried the alias form); a request after a result opens a turn under the task cut, so the resume cut's bound test closes that turn with a result.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 08:09:24 +00:00
Meta Vens
c1f7d7d8d9 Merge hands/eureka-body-stream-thoughts (e2e0488) into eureka-body/release-reply-path
# Conflicts:
#	crates/mind-body/src/persona.rs
2026-11-07 08:03:05 +00:00
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
e2e0488abb stream: LF again; the stale boundary docs name the label as the gap's origin
Restores LF on stream.rs, stream/tests.rs and bin/mind-stream.rs (5defa18 converted them). Renames the capped-repo test for the rule built; build_seed's since is the newest thought's label tick time; STREAM_MIN_GAP_S counts from the label, so a model run of M seconds leaves 900 - M s of quiet after admission. No behaviour change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 04:44:48 +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
2f77fb2c50 stream: the public surface names STREAM_POLL_S
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 02:36:43 +00: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
5defa18afa stream: soul pass s2 fixes (thinking window, capped per repo, no proxy env, identical lines, forge read at gap marks)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 02:01:02 +00: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
Meta Vens
70de8cfec2 stream: soul pass s1 fixes (stale repo news, userinfo bypass, reads, prompt version, poll cost)
- Repo activity is news only for events after her newest thought, and the notice is stamped with the event time; a capped repo counts only beside such an event.
- OllamaStream::open parses the URL as the HTTP client does and refuses userinfo, a path or a query.
- A thought's reads cite what the capped context sections kept.
- Every thought records prompt_version: Ghostlight revision, word budget, guidance and the continuer frame (thought.v2, not yet deployed).
- tick decides due-ness from responsibilities and news before building the seed or reading the persona.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 01:14:34 +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
Eureka Hands
4bf29ca16a thought: four candidates are valid, pinned
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:01:51 +00:00
Eureka Hands
75d48b1fbd stream: the stimulus bound is one cut and the reads follow it; the newest thought is read newest-first
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 00:01:04 +00: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
Eureka Hands
497b03f013 stream tests: kill the surviving mutants of cap, bonds, news, unbidden, flood and cadence
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 23:49:49 +00: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