diff --git a/crates/tui/src/commands/groups/session/compact.rs b/crates/tui/src/commands/groups/session/compact.rs index 4ad08a7dde..7e905183b5 100644 --- a/crates/tui/src/commands/groups/session/compact.rs +++ b/crates/tui/src/commands/groups/session/compact.rs @@ -41,8 +41,8 @@ pub(in crate::commands) fn compact_pure(arg: Option<&str>) -> CommandResult { .filter(|focus| !focus.is_empty()) .map(str::to_string); let receipt = match focus.as_deref() { - Some(focus) => format!("Context compaction triggered (focus: {focus})..."), - None => "Context compaction triggered...".to_string(), + Some(focus) => format!("Making room (focus: {focus})…"), + None => "Making room…".to_string(), }; CommandResult::with_message_and_action(receipt, AppAction::CompactContext { focus }) } @@ -55,10 +55,7 @@ mod tests { #[test] fn pure_compact_matches_baseline_receipts() { let none = compact_pure(None); - assert_eq!( - none.message.as_deref(), - Some("Context compaction triggered...") - ); + assert_eq!(none.message.as_deref(), Some("Making room…")); assert!(matches!( none.action, Some(AppAction::CompactContext { focus: None }) @@ -74,7 +71,7 @@ mod tests { let focus = compact_pure(Some(" the auth refactor ")); assert_eq!( focus.message.as_deref(), - Some("Context compaction triggered (focus: the auth refactor)...") + Some("Making room (focus: the auth refactor)…") ); assert!(matches!( focus.action, diff --git a/crates/tui/src/commands/mod.rs b/crates/tui/src/commands/mod.rs index d67c922e98..23f832567b 100644 --- a/crates/tui/src/commands/mod.rs +++ b/crates/tui/src/commands/mod.rs @@ -2881,7 +2881,7 @@ mod tests { let compact = execute("/compact the auth refactor", &mut app); assert_eq!( compact.message.as_deref(), - Some("Context compaction triggered (focus: the auth refactor)...") + Some("Making room (focus: the auth refactor)…") ); assert!(matches!( compact.action, diff --git a/crates/tui/src/commands/session_acceptance.rs b/crates/tui/src/commands/session_acceptance.rs index 8877f12756..4575f94925 100644 --- a/crates/tui/src/commands/session_acceptance.rs +++ b/crates/tui/src/commands/session_acceptance.rs @@ -569,10 +569,7 @@ fn codewhale_triggers_context_compaction(world: &mut SessionCommandWorld) { world.last_action.as_ref(), Some(AppAction::CompactContext { .. }) )); - assert_eq!( - world.last_message.as_deref(), - Some("Context compaction triggered...") - ); + assert_eq!(world.last_message.as_deref(), Some("Making room…")); } #[then("CodeWhale should trigger context purge")] diff --git a/crates/tui/src/commands/session_lifecycle_regression_tests.rs b/crates/tui/src/commands/session_lifecycle_regression_tests.rs index d515b47c17..77e9e3f480 100644 --- a/crates/tui/src/commands/session_lifecycle_regression_tests.rs +++ b/crates/tui/src/commands/session_lifecycle_regression_tests.rs @@ -802,7 +802,7 @@ fn test_compact_toggles_state() { let result = compact(&mut app, None); assert!(result.message.is_some()); let msg = result.message.unwrap(); - assert!(msg.contains("compaction") || msg.contains("Compact")); + assert!(msg.contains("Making room"), "{msg}"); assert!(matches!( result.action, Some(AppAction::CompactContext { focus: None }) diff --git a/crates/tui/src/compaction.rs b/crates/tui/src/compaction.rs index 0530771cc5..5af81e75af 100644 --- a/crates/tui/src/compaction.rs +++ b/crates/tui/src/compaction.rs @@ -1056,7 +1056,7 @@ pub fn report_compaction_failure( .to_string() } Some(crate::llm_client::LlmError::RateLimited { .. }) => { - "provider rate limit blocked compaction — retry after the limit resets or switch provider/model" + "provider rate limit blocked making room — retry after the limit resets or switch provider/model" .to_string() } Some(crate::llm_client::LlmError::AuthenticationError(_)) => { @@ -1064,12 +1064,12 @@ pub fn report_compaction_failure( .to_string() } Some(crate::llm_client::LlmError::AuthorizationError(_)) => { - "provider authorization rejected compaction — verify account access or switch provider/model" + "provider authorization rejected making room — verify account access or switch provider/model" .to_string() } _ => match crate::error_taxonomy::classify_error_message(&raw) { crate::error_taxonomy::ErrorCategory::RateLimit => { - "provider rate limit blocked compaction — retry after the limit resets or switch provider/model" + "provider rate limit blocked making room — retry after the limit resets or switch provider/model" .to_string() } crate::error_taxonomy::ErrorCategory::Authentication => { @@ -1077,7 +1077,7 @@ pub fn report_compaction_failure( .to_string() } crate::error_taxonomy::ErrorCategory::Authorization => { - "provider authorization rejected compaction — verify account access or switch provider/model" + "provider authorization rejected making room — verify account access or switch provider/model" .to_string() } _ => safe_raw, @@ -1235,7 +1235,7 @@ pub async fn compact_messages_safe( >= estimate_input_tokens_for_pressure(messages, system_prompt) { anyhow::bail!( - "Compaction did not reduce context; original conversation was preserved." + "Making room did not shrink the context; the original conversation was preserved." ); } let keep: CompactionKeep = inspect_compaction_keep(&kept); @@ -1274,7 +1274,7 @@ pub async fn compact_messages_safe( } Err(last_error - .unwrap_or_else(|| anyhow::anyhow!("Compaction failed after {MAX_RETRIES} retries"))) + .unwrap_or_else(|| anyhow::anyhow!("Making room failed after {MAX_RETRIES} retries"))) } pub(crate) fn build_compaction_summary_block_text(summary: &str, anchors: &str) -> String { @@ -1516,7 +1516,7 @@ checkpoint machinery, or return a placeholder. {COMPACTION_LANGUAGE_CONTRACT}" fn validate_compaction_summary(summary: &str) -> Result<()> { let trimmed = summary.trim(); if trimmed.is_empty() { - anyhow::bail!("Compaction summary response was unusable: no text was returned."); + anyhow::bail!("The summary for making room was unusable: no text was returned."); } // Strip every non-word edge, not just ASCII punctuation. Providers can @@ -1529,7 +1529,7 @@ fn validate_compaction_summary(summary: &str) -> Result<()> { .to_ascii_lowercase(); if normalized.is_empty() { anyhow::bail!( - "Compaction summary response was unusable: only whitespace or punctuation was returned." + "The summary for making room was unusable: only whitespace or punctuation was returned." ); } if matches!( @@ -1544,7 +1544,7 @@ fn validate_compaction_summary(summary: &str) -> Result<()> { | "i can't provide a summary" | "unable to provide a summary" ) { - anyhow::bail!("Compaction summary response was unusable: a placeholder was returned."); + anyhow::bail!("The summary for making room was unusable: a placeholder was returned."); } Ok(()) } @@ -1673,7 +1673,7 @@ async fn create_summary( // with a fragment. if codewhale_models::is_incomplete_stop_reason(response.stop_reason.as_deref()) { anyhow::bail!( - "Compaction summary response incomplete: provider stop reason `{}`; the partial summary was not accepted.", + "The summary for making room was incomplete: provider stop reason `{}`; the partial summary was not accepted.", codewhale_models::stop_reason_detail(response.stop_reason.as_deref()) ); } @@ -1683,7 +1683,7 @@ async fn create_summary( .any(|block| matches!(block, ContentBlock::ToolUse { .. })) { anyhow::bail!( - "Compaction returned a tool call instead of a completed handoff; original conversation was preserved." + "Making room returned a tool call instead of a summary; the original conversation was preserved." ); } diff --git a/crates/tui/src/compaction/last_round.rs b/crates/tui/src/compaction/last_round.rs index 32db8ad897..7a024d19ff 100644 --- a/crates/tui/src/compaction/last_round.rs +++ b/crates/tui/src/compaction/last_round.rs @@ -369,7 +369,7 @@ pub(crate) fn validate_last_round_coverage( for text in last_round.iter().copied().filter_map(user_prompt_text_of) { if !survives(&text, replacement, user_prompt_text_of) { anyhow::bail!( - "Compaction coverage floor: a last-round user message was dropped; history was not replaced." + "Making room stopped: a last-round user message was dropped; history was not replaced." ); } } @@ -379,7 +379,7 @@ pub(crate) fn validate_last_round_coverage( .any(|message| has_tool_result_id(message, &id)) { anyhow::bail!( - "Compaction coverage floor: last-round tool result {id} was dropped; history was not replaced." + "Making room stopped: last-round tool result {id} was dropped; history was not replaced." ); } } @@ -391,7 +391,7 @@ pub(crate) fn validate_last_round_coverage( .any(|message| has_tool_use_id(message, &id)) { anyhow::bail!( - "Compaction coverage floor: last-round tool call {id} was dropped; history was not replaced." + "Making room stopped: last-round tool call {id} was dropped; history was not replaced." ); } } @@ -401,7 +401,7 @@ pub(crate) fn validate_last_round_coverage( for text in last_round.iter().copied().filter_map(assistant_text_of) { if !survives(&text, replacement, assistant_text_of) { anyhow::bail!( - "Compaction coverage floor: last-round assistant output was dropped; history was not replaced." + "Making room stopped: last-round assistant output was dropped; history was not replaced." ); } } @@ -413,7 +413,7 @@ pub(crate) fn validate_last_round_coverage( .any(|message| message.role.is_assistant_like()) { anyhow::bail!( - "Compaction coverage floor: last-round assistant output was dropped; history was not replaced." + "Making room stopped: last-round assistant output was dropped; history was not replaced." ); } Ok(()) @@ -436,7 +436,7 @@ pub(crate) fn require_text_survives( }) }); if !kept { - anyhow::bail!("Compaction coverage floor: {label} was dropped; history was not replaced."); + anyhow::bail!("Making room stopped: {label} was dropped; history was not replaced."); } Ok(()) } @@ -453,12 +453,12 @@ pub(crate) fn validate_survival_contract( .count(); if checkpoints == 0 { anyhow::bail!( - "Compaction coverage floor: checkpoint receipt was dropped; history was not replaced." + "Making room stopped: checkpoint receipt was dropped; history was not replaced." ); } if checkpoints > 1 { anyhow::bail!( - "Compaction coverage floor: prior summaries were duplicated; history was not replaced." + "Making room stopped: prior summaries were duplicated; history was not replaced." ); } if let Some(anchors) = anchors { diff --git a/crates/tui/src/compaction/tests.rs b/crates/tui/src/compaction/tests.rs index a1412085de..843f83ce96 100644 --- a/crates/tui/src/compaction/tests.rs +++ b/crates/tui/src/compaction/tests.rs @@ -109,7 +109,7 @@ fn untyped_usage_limit_text_never_becomes_quota_exhaustion() { "[auth] Authorization failed: You've reached your usage limit for this billing cycle" ); let message = report(&error); - assert!(message.contains("provider rate limit blocked compaction")); + assert!(message.contains("provider rate limit blocked making room")); assert!(!message.contains("quota exhausted")); } @@ -133,7 +133,7 @@ fn typed_rate_limit_stays_transient_and_does_not_become_quota() { message: "Too Many Requests".into(), retry_after: None, }); - assert!(report(&error).contains("provider rate limit blocked compaction")); + assert!(report(&error).contains("provider rate limit blocked making room")); assert!(is_transient_error(&error)); } diff --git a/crates/tui/src/core/engine.rs b/crates/tui/src/core/engine.rs index 236c8ca351..7abd0835b6 100644 --- a/crates/tui/src/core/engine.rs +++ b/crates/tui/src/core/engine.rs @@ -3152,8 +3152,8 @@ impl Engine { let _ = self .tx_event .send(Event::status(format!( - "Auto-compaction {}", - if enabled { "enabled" } else { "disabled" } + "Make room automatically: {}", + if enabled { "on" } else { "off" } ))) .await; } diff --git a/crates/tui/src/core/engine/compaction.rs b/crates/tui/src/core/engine/compaction.rs index 57e334b6bb..8fcfd82421 100644 --- a/crates/tui/src/core/engine/compaction.rs +++ b/crates/tui/src/core/engine/compaction.rs @@ -167,7 +167,7 @@ impl Engine { input_tokens, )?; context_pressure_message(budget.usage_percent()).map(|warning| format!( - "{warning}. Estimated input: {input_tokens} tokens ({:.1}% of route budget). Automatic compaction is explicitly disabled for this session. A manual /compact saves the original conversation and its model-written handoff before replacing context.", + "{warning}. Estimated input: {input_tokens} tokens ({:.1}% of route budget). Making room automatically is off for this session. /compact saves the original conversation and its model-written handoff before replacing context.", budget.usage_percent(), )) } @@ -192,14 +192,10 @@ impl Engine { route: ResolvedRuntimeRoute, compaction: CompactionConfig, ) { - self.emit_compaction_started( - id.clone(), - false, - "Manual context compaction started".to_string(), - ) - .await; + self.emit_compaction_started(id.clone(), false, "Making room…".to_string()) + .await; let Some(cancel_token) = self.claim_compaction(&id) else { - let message = "Context compaction canceled before it started".to_string(); + let message = "Making room stopped before it started".to_string(); self.emit_compaction_cancelled(id, false, message).await; let _ = self .tx_event @@ -257,7 +253,7 @@ impl Engine { ..Usage::default() }; let Some(client) = self.codewhale_client.clone() else { - let message = "Manual compaction unavailable: API client not configured".to_string(); + let message = "Can't make room: no model is connected".to_string(); self.finish_compaction(&id); self.emit_compaction_failed(id, false, message.clone()) .await; @@ -313,7 +309,7 @@ impl Engine { self.emit_compaction_cancelled( id, false, - "Context compaction canceled; conversation context was not changed".to_string(), + "Making room stopped; the conversation was not changed".to_string(), ) .await; let _ = self @@ -341,8 +337,7 @@ impl Engine { self.emit_compaction_cancelled( id, false, - "Context compaction canceled; conversation context was not changed" - .to_string(), + "Making room stopped; the conversation was not changed".to_string(), ) .await; let _ = self @@ -373,11 +368,11 @@ impl Engine { let tokens_after = self.estimated_input_tokens(); let message = if retries_used > 0 { format!( - "Compaction complete: {messages_before} → {messages_after} messages ({removed} removed, {retries_used} retries), ~{tokens_before} → ~{tokens_after} tokens ({coverage_clause})" + "Made room: {messages_before} → {messages_after} messages ({removed} removed, {retries_used} retries), ~{tokens_before} → ~{tokens_after} tokens ({coverage_clause})" ) } else { format!( - "Compaction complete: {messages_before} → {messages_after} messages ({removed} removed), ~{tokens_before} → ~{tokens_after} tokens ({coverage_clause})" + "Made room: {messages_before} → {messages_after} messages ({removed} removed), ~{tokens_before} → ~{tokens_after} tokens ({coverage_clause})" ) }; self.emit_compaction_completed( @@ -396,7 +391,7 @@ impl Engine { ) .await; } else { - let message = "Compaction skipped: produced empty result".to_string(); + let message = "Making room skipped: the summary came back empty".to_string(); self.emit_compaction_failed(id.clone(), false, message.clone()) .await; turn_status = TurnOutcomeStatus::Failed; @@ -405,7 +400,7 @@ impl Engine { } Err(err) => { let message = crate::compaction::report_compaction_failure( - "Manual context compaction failed", + "Making room failed", &id, false, &err, @@ -461,14 +456,14 @@ impl Engine { .stop_diagnostics .emergency_compaction_attempts .saturating_add(1); - let start_message = format!("Emergency context compaction started ({reason})"); + let start_message = format!("Making room now ({reason})"); self.emit_compaction_started(id.clone(), true, start_message) .await; let Some(compaction_cancel) = self.claim_compaction(&id) else { self.emit_compaction_cancelled( id, true, - "Emergency context compaction canceled before it started; conversation context was not changed" + "Making room stopped before it started; the conversation was not changed" .to_string(), ) .await; @@ -514,9 +509,9 @@ impl Engine { let Some(compaction_result) = compaction_result else { self.finish_compaction(&id); let message = if turn_was_canceled { - "Emergency context compaction canceled with the active turn; conversation context was not changed" + "Making room stopped with the turn; the conversation was not changed" } else { - "Emergency context compaction canceled; conversation context was not changed" + "Making room stopped; the conversation was not changed" } .to_string(); self.emit_compaction_cancelled(id, true, message).await; @@ -561,9 +556,9 @@ impl Engine { if turn_was_canceled || compaction_cancel.is_cancelled() { self.finish_compaction(&id); let message = if turn_was_canceled { - "Emergency context compaction canceled with the active turn; conversation context was not changed" + "Making room stopped with the turn; the conversation was not changed" } else { - "Emergency context compaction canceled; conversation context was not changed" + "Making room stopped; the conversation was not changed" } .to_string(); self.emit_compaction_cancelled(id, true, message).await; @@ -577,9 +572,9 @@ impl Engine { if turn_was_canceled || compaction_cancel.is_cancelled() { self.finish_compaction(&id); let message = if turn_was_canceled { - "Emergency context compaction canceled with the active turn; conversation context was not changed" + "Making room stopped with the turn; the conversation was not changed" } else { - "Emergency context compaction canceled; conversation context was not changed" + "Making room stopped; the conversation was not changed" } .to_string(); self.emit_compaction_cancelled(id, true, message).await; @@ -606,7 +601,7 @@ impl Engine { self.emit_session_updated().await; let removed = before_count.saturating_sub(after_count); let mut details = format!( - "Emergency compaction complete: {before_count} → {after_count} messages ({removed} removed), ~{before_tokens} → ~{after_tokens} tokens" + "Made room: {before_count} → {after_count} messages ({removed} removed), ~{before_tokens} → ~{after_tokens} tokens" ); if retries_used > 0 { details.push_str(&format!(" ({retries_used} retries)")); @@ -639,12 +634,12 @@ impl Engine { // reads as self-contradictory. Name the actual outcome instead. let message = if after_tokens > target_budget { format!( - "Emergency context compaction failed to reduce request below model limit \ + "Making room failed: the request is still over the model limit \ (estimate ~{after_tokens} tokens, budget ~{target_budget}). Original conversation was preserved." ) } else { format!( - "Emergency context compaction made no progress (estimate ~{after_tokens} tokens \ + "Making room made no progress (estimate ~{after_tokens} tokens \ is already within the ~{target_budget} budget; the provider may count the \ request differently). Original conversation was preserved." ) diff --git a/crates/tui/src/core/engine/preview.rs b/crates/tui/src/core/engine/preview.rs index 31820aba9c..83c15fc13d 100644 --- a/crates/tui/src/core/engine/preview.rs +++ b/crates/tui/src/core/engine/preview.rs @@ -631,7 +631,7 @@ impl Engine { if crate::compaction::compaction_pressure_reached(messages, system_prompt, compaction) { let prepared = self.prepare_compaction_envelope(compaction.clone()); if should_compact(messages, system_prompt, &prepared) { - reasons.push("auto-compaction would rewrite the conversation first"); + reasons.push("making room would summarize the conversation first"); } } diff --git a/crates/tui/src/core/engine/preview/tests.rs b/crates/tui/src/core/engine/preview/tests.rs index 51cdef2eff..d2d326a43c 100644 --- a/crates/tui/src/core/engine/preview/tests.rs +++ b/crates/tui/src/core/engine/preview/tests.rs @@ -301,7 +301,7 @@ fn turn_metadata_uses_planned_cross_route_limits_not_installed_limits() { .unwrap(); assert!(pressure.contains("Context pressure: critical")); assert!(pressure.contains("Estimated input:")); - assert!(pressure.contains("Automatic compaction is explicitly disabled")); + assert!(pressure.contains("Making room automatically is off")); let message = engine.user_text_message_from_snapshot( "cross-route budget".to_string(), &prompt_context.model, @@ -580,7 +580,7 @@ async fn compaction_preview_uses_the_planned_routes_system_prompt() { .preview_runtime_transforms(&messages, Some(&planned_prompt), &compaction) .await; assert!( - planned_reasons.contains(&"auto-compaction would rewrite the conversation first"), + planned_reasons.contains(&"making room would summarize the conversation first"), "the planned route prompt crosses the compaction threshold: {planned_reasons:?}" ); @@ -588,7 +588,7 @@ async fn compaction_preview_uses_the_planned_routes_system_prompt() { .preview_runtime_transforms(&messages, Some(&installed_prompt), &compaction) .await; assert!( - !installed_reasons.contains(&"auto-compaction would rewrite the conversation first"), + !installed_reasons.contains(&"making room would summarize the conversation first"), "the installed route prompt is the below-threshold control: {installed_reasons:?}" ); } diff --git a/crates/tui/src/core/engine/tests.rs b/crates/tui/src/core/engine/tests.rs index 08b8ab2107..ce472bc83e 100644 --- a/crates/tui/src/core/engine/tests.rs +++ b/crates/tui/src/core/engine/tests.rs @@ -13231,7 +13231,7 @@ async fn narrower_posture_patch_during_approval_wait_fails_the_call() { let err = result.expect_err("narrowed posture fails the call"); assert!( err.to_string() - .contains("posture changed before this tool call executed"), + .contains("Permissions changed before this tool call executed"), "{change_to:?}: {err}" ); assert!(!written, "{change_to:?}: the shell must not run"); @@ -16271,7 +16271,7 @@ async fn compaction_completed_reports_complete_post_input_tokens() { .emit_compaction_completed( "compact_test".to_string(), false, - "Compaction complete".to_string(), + "Made room".to_string(), Some(4), Some(1), super::compaction::CompactionPass { @@ -16424,9 +16424,9 @@ async fn unchanged_compaction_config_is_acknowledged_silently() { let mut changed = current; changed.enabled = !changed.enabled; let expected = if changed.enabled { - "Auto-compaction enabled" + "Make room automatically: on" } else { - "Auto-compaction disabled" + "Make room automatically: off" }; handle .send(Op::SetCompaction { config: changed }) @@ -18836,7 +18836,7 @@ fn turn_metadata_keeps_stable_fields_while_pressure_reports_live_estimates() { without_pressure(&second_meta) ); assert!(second_meta.contains("Estimated input:")); - assert!(second_meta.contains("Automatic compaction is explicitly disabled")); + assert!(second_meta.contains("Making room automatically is off")); } #[tokio::test] diff --git a/crates/tui/src/core/engine/tests/compaction.rs b/crates/tui/src/core/engine/tests/compaction.rs index b9f95f650b..ef793254b4 100644 --- a/crates/tui/src/core/engine/tests/compaction.rs +++ b/crates/tui/src/core/engine/tests/compaction.rs @@ -454,7 +454,7 @@ fn recovery_failures_from_the_provider_are_told_apart_from_budget_failures() { LlmError::ContextLengthError("prompt is too long".to_string()) ))); assert!(!is_provider_rejection(&anyhow::anyhow!( - "Compaction did not reduce context; original conversation was preserved." + "Making room did not shrink the context; the original conversation was preserved." ))); } diff --git a/crates/tui/src/core/engine/turn_loop.rs b/crates/tui/src/core/engine/turn_loop.rs index 0dc3367b14..17c49fc1a9 100644 --- a/crates/tui/src/core/engine/turn_loop.rs +++ b/crates/tui/src/core/engine/turn_loop.rs @@ -1013,14 +1013,14 @@ impl Engine { let message = match reason { crate::compaction::CompactionRefusal::TooFewMessages { count } => { format!( - "Context pressure is high but auto-compaction held: only {count} messages — nothing meaningful to summarize yet" + "Context is filling up, but there is nothing to make room from yet: only {count} messages" ) } crate::compaction::CompactionRefusal::RetainedFloor { floor, threshold, } => format!( - "Context pressure is high but auto-compaction held: retained context (~{}K tokens) cannot fall below the {}K trigger — /compact to force a pass, or trim pinned context", + "Context is filling up, but making room would not help: retained context (~{}K tokens) cannot fall below the {}K trigger — /compact to force a pass, or trim pinned context", floor / 1000, threshold / 1000 ), @@ -1051,7 +1051,7 @@ impl Engine { self.emit_compaction_started( compaction_id.clone(), true, - "Auto context compaction started".to_string(), + "Making room…".to_string(), ) .await; let auto_messages_before = self.session.messages.len(); @@ -1081,9 +1081,9 @@ impl Engine { auto_compaction_suppressed = true; self.finish_compaction(&compaction_id); let message = if turn_was_canceled { - "Auto-compaction canceled with the active turn; conversation context was not changed" + "Making room stopped with the turn; the conversation was not changed" } else { - "Auto-compaction canceled; conversation context was not changed" + "Making room stopped; the conversation was not changed" } .to_string(); self.emit_compaction_cancelled(compaction_id, true, message) @@ -1105,9 +1105,9 @@ impl Engine { auto_compaction_suppressed = true; self.finish_compaction(&compaction_id); let message = if turn_was_canceled { - "Auto-compaction canceled with the active turn; conversation context was not changed" + "Making room stopped with the turn; the conversation was not changed" } else { - "Auto-compaction canceled; conversation context was not changed" + "Making room stopped; the conversation was not changed" } .to_string(); self.emit_compaction_cancelled(compaction_id, true, message) @@ -1138,11 +1138,11 @@ impl Engine { let auto_tokens_after = self.estimated_input_tokens(); let status = if retries_used > 0 { format!( - "Auto-compaction complete: {auto_messages_before} → {auto_messages_after} messages ({removed} removed, {retries_used} retries), ~{auto_tokens_before} → ~{auto_tokens_after} tokens ({coverage_clause})" + "Made room: {auto_messages_before} → {auto_messages_after} messages ({removed} removed, {retries_used} retries), ~{auto_tokens_before} → ~{auto_tokens_after} tokens ({coverage_clause})" ) } else { format!( - "Auto-compaction complete: {auto_messages_before} → {auto_messages_after} messages ({removed} removed), ~{auto_tokens_before} → ~{auto_tokens_after} tokens ({coverage_clause})" + "Made room: {auto_messages_before} → {auto_messages_after} messages ({removed} removed), ~{auto_tokens_before} → ~{auto_tokens_after} tokens ({coverage_clause})" ) }; self.emit_compaction_completed( @@ -1162,7 +1162,8 @@ impl Engine { .await; } else { auto_compaction_suppressed = true; - let message = "Auto-compaction skipped: empty result".to_string(); + let message = + "Making room skipped: the summary came back empty".to_string(); self.emit_compaction_failed( compaction_id.clone(), true, @@ -1176,7 +1177,7 @@ impl Engine { auto_compaction_suppressed = true; // Log error but continue with original messages (never corrupt) let message = crate::compaction::report_compaction_failure( - "Auto-compaction failed", + "Making room failed", &compaction_id, true, &err, @@ -3751,7 +3752,7 @@ impl Engine { ); for plan in plans { let result = Err(ToolError::permission_denied( - "Runtime permission posture changed while this tool call was being planned; retry it under the current posture." + "Permissions changed while this tool call was being planned; retry it with the current permissions." .to_string(), )); let _ = self @@ -4366,7 +4367,7 @@ impl Engine { } else { result_override.or_else(|| { Some(Err(ToolError::permission_denied( - "Runtime permission posture changed before this tool call executed; retry it under the current posture." + "Permissions changed before this tool call executed; retry it with the current permissions." .to_string(), ))) }) @@ -4411,7 +4412,7 @@ impl Engine { { result_override.get_or_insert_with(|| { Err(ToolError::permission_denied( - "Runtime permission posture changed before this tool call executed; retry it under the current posture." + "Permissions changed before this tool call executed; retry it with the current permissions." .to_string(), )) }); diff --git a/crates/tui/src/tui/ui/compaction_flow.rs b/crates/tui/src/tui/ui/compaction_flow.rs index 2fbc580ec9..066379bb29 100644 --- a/crates/tui/src/tui/ui/compaction_flow.rs +++ b/crates/tui/src/tui/ui/compaction_flow.rs @@ -380,7 +380,7 @@ pub(crate) fn try_cancel_compaction(app: &mut App, engine_handle: &EngineHandle) if !app.is_compacting && app.deferred_manual_compaction.take().is_some() { app.manual_compaction_queued = false; app.manual_compaction_id = None; - let message = "Context compaction canceled before it started".to_string(); + let message = "Making room stopped before it started".to_string(); add_compaction_receipt(app, &message); set_explicit_compaction_status(app, message, StatusToastLevel::Info, false); return true; @@ -399,13 +399,13 @@ pub(crate) fn try_cancel_compaction(app: &mut App, engine_handle: &EngineHandle) Ok(()) => { set_explicit_compaction_status( app, - "Canceling context compaction…".to_string(), + "Stopping making room…".to_string(), StatusToastLevel::Info, false, ); } Err(error) => { - let message = format!("Could not cancel context compaction: {error}"); + let message = format!("Could not stop making room: {error}"); add_compaction_receipt(app, &message); set_explicit_compaction_status(app, message, StatusToastLevel::Error, true); } @@ -476,7 +476,7 @@ pub(crate) fn maybe_warn_context_pressure_for_config( ", unverified window" }; - let recommendation = "Automatic compaction is disabled. Enable auto_compact or use /compact."; + let recommendation = "Making room automatically is off. Turn on auto_compact or use /compact."; if percent >= CONTEXT_CRITICAL_THRESHOLD_PERCENT { set_context_pressure_status( diff --git a/crates/tui/src/tui/ui/session_state.rs b/crates/tui/src/tui/ui/session_state.rs index a9ebffe911..ae6824e983 100644 --- a/crates/tui/src/tui/ui/session_state.rs +++ b/crates/tui/src/tui/ui/session_state.rs @@ -1477,7 +1477,7 @@ mod launch_resume_tests { assert_eq!(app.onboarding, OnboardingState::Provider); assert!(app.onboarding_needs_api_key); - app.status_message = Some("Auto-compaction enabled".to_string()); + app.status_message = Some("Make room automatically: on".to_string()); let shown = app .active_status_toast(crate::tui::underwater::ShellPhase::Idle) .expect("footer notice");