Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## [v0.15.2] - 2026-11-05

BiBCode v0.15.2 fixes chat and diff interactions, provider compatibility, and diagnostics. This release includes the fixes from PR #308 since v0.15.1.
BiBCode v0.15.2 fixes chat and diff interactions, provider compatibility, and diagnostics. This release includes the fixes from PR #308, PR #314, and issue #316 since v0.15.1.

### Chats and diffs

Expand All @@ -12,6 +12,7 @@ BiBCode v0.15.2 fixes chat and diff interactions, provider compatibility, and di

### Providers

- Codex no longer requests the MCP catalogue that can exceed its chat transport limit on new or resumed threads. Oversized stdout failures during launch stop automatic retries and preserve Retry/Dismiss recovery. MCP status now reflects startup notifications, so servers without notifications may be absent. (#316)
- The Codex skill picker includes skills installed through plugins, including Superpowers. (#298)
- Codex stderr logs no longer appear as raw **Codex warning** rows with ANSI escapes and incorrect severity. (#299)
- The Claude model picker shows model names rather than taglines with Claude Code 2.1.318. (#300)
Expand All @@ -24,6 +25,7 @@ BiBCode v0.15.2 fixes chat and diff interactions, provider compatibility, and di

### Regression coverage

- The Unix PTY setup-failure test waits for a complete descendant PID before checking process-group cleanup. The native macOS arm64 CI build has a four-hour job budget, matching x64. (#314)
- Changed files coverage now clicks **View diff** through the chat and verifies that the selected diff stays open through same-turn plan updates. (#275)
- The packaged resume-at-end check follows the active timeline through turn completion, avoiding stale scrollers and replies from history. (#215)

Expand Down
3 changes: 2 additions & 1 deletion apps/server/src/diagnostics/profiler/provider_turns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,8 @@ fn turn_failure_finding(

/// Records a message delivery that failed for good without reaching its provider as a
/// `delivery.failing` finding: the provider, the delivery's `attempts` and the `error_class`
/// (`provider-configuration` or `attempts-exhausted`). Never the error text, a path or a title.
/// (`provider-configuration`, `transport-line-too-long` or `attempts-exhausted`). Never error text,
/// a path or a title.
/// Does nothing while the profiler is off.
pub fn record_delivery_failing(provider: &str, attempts: i64, error_class: &str) {
#[cfg(test)]
Expand Down
298 changes: 292 additions & 6 deletions apps/server/src/production/provider_runtime.rs

Large diffs are not rendered by default.

8 changes: 5 additions & 3 deletions apps/server/src/production/turn_delivery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -790,10 +790,11 @@ async fn settle_dismissed_once(
| ProviderReconciliationOutcome::LaunchFailed { .. } => Ok(true),
// A turn this runtime still holds, or a server that cannot report its status:
// the marker stays until a later pass finds the session idle.
// A relaunch refused for the provider's configuration is refused again: stop asking.
// Configuration refusals and oversized transport closes repeat: stop asking.
ProviderReconciliationOutcome::Found
| ProviderReconciliationOutcome::ConversationLost { .. }
| ProviderReconciliationOutcome::ProviderConfiguration { .. } => Ok(false),
| ProviderReconciliationOutcome::ProviderConfiguration { .. }
| ProviderReconciliationOutcome::TransportLineTooLong { .. } => Ok(false),
}
})
.buffer_unordered(MAX_CONCURRENT_THREADS)
Expand Down Expand Up @@ -961,7 +962,8 @@ async fn recover_sending(
// Whether the original send arrived is unknown, and every relaunch is refused the same
// way: the user's Retry or Dismiss decides.
ProviderReconciliationOutcome::ConversationLost { detail }
| ProviderReconciliationOutcome::ProviderConfiguration { detail } => {
| ProviderReconciliationOutcome::ProviderConfiguration { detail }
| ProviderReconciliationOutcome::TransportLineTooLong { detail } => {
(TurnDeliveryState::Uncertain, Some(detail))
}
// A launch that never reached the provider is tried again, at most
Expand Down
Loading
Loading