fix: runtime-prompt stand-still guard and closed launch-gate handling (#3061/#3095)

Clarify in the frozen runtime policy reference that a lone <runtime_prompt>
tag must not trigger new tool/git/sub-agent work without user input or a
pending handoff.

Log and degrade gracefully when the interactive fanout semaphore is closed
instead of silently dropping backpressure.

Document v0.8.59 release spine in CHANGELOG [Unreleased].

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Hunter B
2026-06-11 19:43:05 -07:00
parent e1a5f5c464
commit a9808cc111
3 changed files with 41 additions and 2 deletions
+29
View File
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
- **Provider-wait observability (#3095).** Footer stall reasons now name the
active provider/model route, idle seconds vs stream budget, and whether a
fanout plan is still at `0 running` or dispatch is pending. Structured
provider-wait incidents log once per turn from the main tick loop (not on
every footer redraw).
- **Interactive fanout launch gate (#3095).** Direct sub-agent children queue
behind a configurable semaphore (`[subagents] interactive_max_launch`,
default 4) with a visible `queued: waiting for an interactive fanout slot`
reason before their first model step.
### Fixed
- **TUI mouse-report leak (#3063/#3067).** Strip raw SGR mouse coordinate
tails from the composer even when `use_mouse_capture` is false, covering
orphaned terminal reporting state after crashes or focus races.
- **Interrupted sub-agent lifecycle (#3080).** API-timeout interruptions now
emit `MailboxMessage::Interrupted`, render terminal interrupted cards, and
reconcile stale running fanout counts from manager snapshots.
- **Runtime prompt autonomous loop guard (#3061).** Runtime policy reference
now explicitly forbids initiating new work when `<runtime_prompt>` is the
only new turn content and no tool/sub-agent handoff is pending.
### Contributors
- Devin session work on #3080/#3095 (PRs #3103, #3104, #3106) — Hunter Bown
(maintainer integration/cherry-pick on `codex/v0.8.59-release-ready`).
## [0.8.58] - 2026-06-11
### Added
+6 -1
View File
@@ -738,7 +738,12 @@ pub(crate) fn render_runtime_policy_reference() -> String {
The `visibility=\"internal\"` attribute means this tag is a runtime \
instruction for the model, not user input. Do not announce the \
current mode or restate the tag content to the user just apply \
the referenced rules silently.\n\n",
the referenced rules silently.\n\n\
When this tag is the only new content in a turn and there is no \
pending tool output, sub-agent completion handoff, or explicit user \
message requesting continuation, do not initiate new edits, shell \
commands, git commits, or sub-agent launches. End the turn and wait \
for the user's next message.\n\n",
);
// ── Mode reference ─────────────────────────────────────────────────
+6 -1
View File
@@ -3912,7 +3912,12 @@ async fn run_subagent_task(task: SubAgentTask) {
}
_launch_permit = Arc::clone(gate).acquire_owned().await.ok();
}
Err(tokio::sync::TryAcquireError::Closed) => {}
Err(tokio::sync::TryAcquireError::Closed) => {
crate::logging::warn(format!(
"interactive launch gate closed for {}; proceeding without backpressure",
task.agent_id
));
}
}
}