diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d875a8a..136727cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 `` 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 diff --git a/crates/tui/src/prompts.rs b/crates/tui/src/prompts.rs index d713724f..fa7e4edf 100644 --- a/crates/tui/src/prompts.rs +++ b/crates/tui/src/prompts.rs @@ -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 ───────────────────────────────────────────────── diff --git a/crates/tui/src/tools/subagent/mod.rs b/crates/tui/src/tools/subagent/mod.rs index e62511c5..23bf73dd 100644 --- a/crates/tui/src/tools/subagent/mod.rs +++ b/crates/tui/src/tools/subagent/mod.rs @@ -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 + )); + } } }