When columns change (Step 3), invalidate row_result and word_result. When rows change (Step 4), invalidate word_result. This ensures Step 5 always uses the latest row boundaries instead of showing stale cached word_result from a previous run. Applies to both auto-detection and manual override endpoints. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>