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:
@@ -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
|
||||
|
||||
@@ -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 ─────────────────────────────────────────────────
|
||||
|
||||
@@ -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
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user