Skip to content

bug(claude): a colour-only slash-picker selection change never republishes the picker #1253

Description

@Juliusolsson05

Found in the #1236 review (reviewer A). It predates #1236: the old screen-frame path had the same gate.

What happens

detectSlashPicker reads the selected row from relative foreground colour. HeadlessTerminal.scheduleFlush (packages/claude-code-headless/src/terminal/HeadlessTerminal.ts:~632) compares only the plain and recent strings.

When arrowing through the picker changes only the highlight colour and not the text, no screen event fires. ClaudeCodeHeadless then never reparses the picker or publishes claude.slash-picker, and the composer keeps showing the old selected row until the text changes.

Reviewer evidence: a temporary test repainted three coloured slash rows with the bright colour moved from /help to /clear. detectSlashPicker returned /clear, but the terminal had emitted only one screen frame.

Also untested

The producer that feeds the composer's picker is unpinned. Replacing slashPicker: this.pickerState with an empty picker in the evaluator input survived every headless and renderer picker suite.

Fix direction

  • Include a picker-selection signature (or the picker state) in the flush comparison, or reparse the picker on attribute-only repaints while it is visible.
  • Add a real-frame test asserting open, filtered, selected and closed picker snapshots on the conditions event.
  • There is no captured Claude picker PTY sequence yet; record one first.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions