Heartbeat poll and Persona turn durations measured on Yggdrasil, the busy
report, the dt cap, what the vote release does and does not promise, the
rerun table (27th by rank), and the crossing bound stated by the rows it
admits.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Conditional integration takes the caller's single saturation report (the
last beat was the floor, or launched nothing because every eligible Mind
was busy) instead of estimating the high limit from its own output; the
slow limit is judged on the integral's own answer, so the vote carry no
longer masks it. A call after a long silence integrates MAX_STEP_MS, not
the outage. The sim gains the swarm's throughput ceiling: per-Mind busy
time from the measured turn duration, a beat that finds every Mind busy
launches nothing, and the controller is told; scenarios cheap-then-x3 and
one-slow-mind exercise it; the band-crossing bound is per scenario.
Co-Authored-By: Claude Sonnet 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>
Replaces the integrate-only-on-advance step: it changed the sampling the gains were tuned against for no gain over an age horizon, and left a replayed reading steering for as long as its age stayed inside it.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The integral no longer back-calculates to the voted rate (unbounded, it parked
the controller near the vote's burn after release): nothing integrates while
voted, and the gap between the voted rate (inside the beat bounds) and the
controller's own answer is a carry that fades over a poll period after
release. A reading whose observed_at has not advanced is not evidence: the
integral steps only on an advanced reading, at most one longest beat. Two
resets_at within a minute are one window.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Replaces the Mind-wide fresh-brief-waits test with the scenarios of the
run-scoped hold; fail_bundle and beats stay.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Cut claimable's Mind-wide stop on any follow-up question and queue's inline
blocked loop. queue::on_hold is the one reader of what an in-force question
holds (a question raised in a run holds that run's claims, anything else holds
itself); queue, inbox::derive and the open_and_launch gate read it.
Breaker::Trip names the newest ended counted run; the breaker question is
raised in that run; the boundary is the newest of a question raised in the item
and a run claiming it that a question is raised in, so an answer or withdrawal
gives every claim of the run a fresh count. The trip and the held-brief wait
are written to the heartbeat trace.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A Self run claims up to 64 briefs and each empty run counts against all of
them, so one cause tripped the briefs in turn, one question per brief per beat.
claimable now returns nothing while a question is open in any follow-up of the
Mind; the answer reopens the briefs with a fresh count.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>