The auto-snapcompact non-ASCII fallback test seeded a single CJK turn with a
245k-token usage. claude-sonnet-4-5's 200k context window made that an input
overflow, so the recovery path dropped the assistant turn and left nothing to
summarize; the default 20k keep-recent window also kept both tiny messages.
Either way prepareCompaction returned undefined, the renderability preflight
never ran, and the strategy stayed "snapcompact" instead of downgrading to
context-full.
Derive the synthetic prompt size from the active model's context window (above
the auto-compaction threshold, below the window) and force keepRecentTokens=1
so the CJK history is always summarized and scanned, regardless of model
metadata.
After the overflow-recovery change started dropping the failed assistant turn before compacting, the non-ASCII fallback test's minimal transcript was left with nothing to summarize (the lone CJK message is kept-recent), so snapcompact was skipped and the run never exercised the non-ASCII downgrade. Bill the trigger turn just under the model's context window so it routes through the threshold compaction path (which keeps the turn) instead of overflow recovery, restoring deterministic coverage of the high-non-ASCII context-full fallback.
Auto-compaction now falls back to context-full on any snapcompact preflight or post-render rejection (non-ASCII, kept history too large, projection overflow), matching the text-only-model handling. Manual /compact snapcompact keeps its local-only failure contract per #3599.
Fixes#3659