PersonaInbox.seen accumulates every person a write() showed; flush_text
becomes fallible and, when no line awaits its echo, sets Written for the
flush line from seen plus the open items and people read now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eyes facts: reconstructed wake and traffic inputs with file:line, reply schema,
per-Mind behaviour since persona-session went live, refused flush replies.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A brake hold that stops her unit left an in-force run that counted as busy
forever; the row was never launched, so slot step 0 never closed it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The one conflict was the public-surface snapshot: the branch's new
launch::StopScope line beside main's LaunchOutcome::Tripped { run } line;
both kept.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The single retell slot becomes one merged Retell (every refused delivery not yet told again, in seq order, with the refusals of the most-refused one), so the ack rule's lowest unanswered seq never loses a batch. The refusal count travels with the batch through its Written line and echo instead of resetting on any answer; a batch's third refusal ends the session by the existing failure path.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Soul's probe_ack.rs reproductions as committed tests, with a Timed child that moves the clock past a poll; they fail at bde8ef6.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deliveries are told in seq order, so an unanswered one below an answered seq
means nothing answered lies below it; the ack waits for the retold batch's
answer. The test reads the next process's opening line as JSON.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Soul s1 retell-ack-passes-unanswered, between-sessions-read-unpinned and
poll-retell-guard-unpinned. after_echo moves the clock when the echo is
handed out, so a poll falls due while the turn runs and unanswered 1 is
pending; the old during-based test jumped before the driver read the clock.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
act no longer acks. result acks through the highest answered seq of the
process, never past a delivery still told and unanswered (the retold batch or
a line written and not yet echoed), and only forward. Soul s1
retell-ack-passes-unanswered: a newer turn's ack passed a retold batch, so a
session ending first lost it and the retell's answer acked a lower seq.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Soul s1 scratch-symlink-deputy-write: she could plant a link at the
instructions file in the unit's RUNTIME_DIRECTORY and the organ's next write
followed it onto any path the unit's user can write, the hidden trace included.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
stop_all becomes SystemdLauncher::stop(StopScope): a Mind's two exact units,
or the swarm's mind-self@*.service and mind-persona@*.service globs. Both
holds write first, then stop whatever the write's outcome, with the same four
outcomes. Soul s1 swarm-hold-leaves-live-turn-running: a held swarm brake left
a live Persona turn running with its shell until the turn ended.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A 1 ms clock never reaches the session's idle timers (the loop guard fired); the other two new tests passed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Written from mut3's survivors (process-boundary brake read, poll seq bound, flush_text); not yet run when committed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Written from the first mutation run's survivors (unix_ms, the process-boundary brake read, record_refusal, the batch-id arm).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The base is LF; the wip commits rewrote whole files as CRLF, hiding the real diff. Content unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
open_and_launch decides what an open question holds, once, after the breaker reads and just before the admission: LaunchRequest.held and Held's Default are gone, so no caller can launch a held item and a caller's earlier read (claimable) is advisory only. launch::retire_answered and its heartbeat call are deleted: whoever answers retire resolves the claims, and the hold persists until they do. The retire option text is restored to the r4 wording.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
s5 findings of cut-self-session-live:
- blocked-recipe-misses-run-held-spec: eureka_state::hold is the one decider
(a question holds the item it is raised in, or every claim of the run it is
raised in; an answer of retire keeps holding the claims still in force).
queue::on_hold and `huginn blocked` both read it.
- hold-read-not-one-snapshot: on_hold returns a Held snapshot that the request
carries; claimable, queue and the gate read it, none reads it again.
- dead-self-holder-stalls-successor: launch::slot is the one reader of whether
a holder lives; claimable asks it, a dead holder is closed by the launch and
the beat's trace says so.
- retire-answer-reopens: launch::retire_answered resolves the claims of an
answered-retire question Withdrawn; the beat runs it before reading briefs.
- held-note-threshold-unpinned: a test pins the note for exactly one held brief.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>