Files
amethyst/desktopApp/src
Claude 5bfa70d276 fix: search field audit — typed text rollback, blank chips, recomposition
- Desktop search screen: the field<->query sync compared the field to
  the displayText the effect was keyed on, which arrives through
  collectAsState a frame late. Two keystrokes between frames saw the
  field ahead of a stale key and setText() rolled the second one back.
  Compare against the query's current value instead; the binding moves
  into BindSearchField so a test drives the real code (reproduced
  failing: expected <ab> but was <a>).
- A blank display/group/scope name no longer replaces the token: an
  empty profile name used to erase the chip entirely.
- TokenizedSearchField only recomposes when the active picker changes,
  not on every keystroke, now that typing no longer needs recomposition.
- The output transformation is keyed on the field state too, so a new
  SearchFieldState is never read through a stale caret lambda.
- replaceRuns compares in place instead of allocating a substring.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013ESr8Pkt6WJsVkD5dUZEw6
2026-09-22 20:23:39 +00:00
..