d6d9e67f54
The first compaction of a session runs check_compression_model_feasibility() inside compress_context() BEFORE _announce_compression_start(). That probe is network-bound (live model catalog / provider lookups; connect timeouts stack up through proxies and slow remote gateways), so every automatic entrypoint that reaches compress_context without its own pre-emit — the post-tool gate in agent/turn_preflight.py::compress_after_tool_results, overflow recovery, manual /compress — left the client with no `kind="compacting"` status for the whole probe. On Desktop that is a bare working-row spinner with no "Summarizing thread" label (#111294). Move the announcement ahead of the probe in the one choke point so every caller is covered, and retire the announced phase (force_terminal) when the probe's hard rejection propagates so the client never stays "compacting" for an attempt that never started. Live repro: /tmp probe driving compress_after_tool_results with a 2 s feasibility stand-in — before: first compacting status at t=2.29 s (after the block); after: t=0.13 s.