Repository navigation
An author session that stops with nothing staged is resumed, not ended - #496
Conversation
A session that ended without a syscall (an empty reply after long reasoning, or narration with no command) ended its run as 'ended without a submit', discarding the open run and any unsubmitted result. The kernel now resumes the session with a note that nothing ran, up to three times per leg. A stop after a kernel note, a gate verdict, or with a PR open is still the agent's answer, and end still ends the run.
There was a problem hiding this comment.
Round 1 — reviewed head 0d459c08 — reviewer summarizer:hermes/gpt-5.6-terra over coverage+credentials+deployment+general+lifecycle+prose.
terra
Advisory findings from outerloop — the code owner decides. Reply to disagree; the outerloop:no-review label opts this PR out.
Verdict: 1 blocking, 1 advisory.
2 findings attached to the lines below.
Merged one blocking orchestrator defect agreed by coverage, credentials, deployment, lifecycle, and prose: persisted capacity kernel notes are not recognized by the silent-stop retry guard. Also retained the coverage test-gap finding. Rejected: none; the lifecycle version was merged into the same blocking finding despite its non-blocking flag because it makes the same claim at the same location.
…top the author's answer The silent-stop guard only saw notes sent during the leg; a capacity refusal delivered with the wake was missed, so a stop answering it was nudged. The guard now reads refusals pending from the leg's starting cursor; pacing notes and launch results still allow the nudge. The capacity-wake test pins that no nudge follows.
There was a problem hiding this comment.
Round 1 — reviewed head 1eb0f21f — reviewer hermes/gpt-5.6-terra.
terra
Advisory findings from outerloop — the code owner decides. Reply to disagree; the outerloop:no-review label opts this PR out.
Verdict: nothing blocking — 1 advisory note.
1 finding attached to the lines below.
Refusal notes with other established key prefixes still trigger silent-stop retries.
refused: (stale submit), capacity-refusal: and publish-refused: notes were not recognized, so a stop answering them was nudged. The keys live in one tuple, and a test covers each.
There was a problem hiding this comment.
Round 2 — reviewed head 278d48a7 — reviewer hermes/gpt-5.6-terra.
terra
Advisory findings from outerloop — the code owner decides. Reply to disagree; the outerloop:no-review label opts this PR out.
Verdict: 1 blocking, 0 advisory.
1 finding attached to the lines below.
A previously delivered scope refusal disables silent-stop recovery on later legs.
…er leg scope_refused reads the whole inbox, so one answered scope refusal turned the nudge off for the rest of the run. Refusals delivered with or during the current leg already make a stop an answer; the history-wide flag is dropped from the condition.
Problem
When an author session ends without staging a syscall (no launch, sleep, submit or end), the orchestrator treats it as the end of the run:
request is Nonebreaks the decision loop and the attempt ends as "ended without a submit". Some models stop this way by accident:In one study run, a run had found a new best in a sweep, and its next session ended on an empty reply before submitting. The result was lost, and the run ended with GPU budget left.
Change
If a session stops with nothing staged, the kernel resumes the same session with a note: nothing ran, the run is still open, continue, or stage
end --report FILEif done. This happens up toSILENT_STOP_RESUMES(3) times per leg.A stop keeps its old meaning (end, or park for review) when:
on_stop), because then the stop parks the run for review;Tests
endthen ends the run; silent stops are bounded; with a PR open, a silent stop still parks.Compatibility
No persisted format changes. The note is an ordinary kernel
notewith a new key prefix (silent-stop:). Readers that matchrefusal:notes are unaffected.Built by Claude (Opus 5.5); review by the advisory panel on this PR.