Investigation report · Ticket z94amct34x · 6 November 2026

Card search: typing stops after picking a card

Why the search box stops accepting input on iPhone, whether it can be improved, and how to test it.

Investigation only. No product code was changed and nothing was deployed. No fix option was tested for this report; the option results come from the August work.
Why does input stop?

Confirmed After a card is picked, the box still looks active, but the iPhone keyboard is no longer connected to it. Keys are pressed and nothing arrives. We reproduced this in Apple's iOS simulator, on the same kind of screen the client recorded.

Is it related to the earlier fixes?

Confirmed Yes. It is the same problem. The earlier fix is a workaround that runs after each pick, and it does not reliably restore the connection. This weakness was already known in August.

Why does it feel worse?

Not proven We found possible reasons but cannot prove any of them yet. The card search code has barely changed since August. Device testing is needed (see How to test).

Can it be improved?

Partly The freeze has been stopped twice before, but each time the client rejected the side effect. One option has no recorded result and is worth a short test. If it fails, this becomes a choice between trade-offs, not a technical fix.

What the client's recording shows

The recording is 18 seconds long, on an iPhone, version v1.9.0. The user types か and taps a card, over and over.

PickChips move toTyping afterwards
1Row 1Works
2Row 1Works
3New row 2Stops Keys are pressed and nothing appears, until the keyboard is closed and the box is tapped again
4Row 2Works
5New row 3Stops Same as pick 3
6Row 3Recording ends

The ticket says "card number", but this recording shows kana being typed. Number entry may behave differently, because the workaround is skipped when plain digits are typed. It is included in the test steps below.

What we measured

iOS simulator showing the search box after a pick: one chip added, card list open, Japanese keyboard up, and no text in the box.
Frozen state in the simulator, using test data. Chip added, list open, keyboard up, keys ignored.

We tapped the real on-screen Japanese keyboard in an iOS 27 simulator. The test page used the real search box code with sample data, not the full live site.

RunAfter first pickLater picks measured
1Stopped6 of 6 worked
2Stopped6 of 6 worked
3Stopped6 of 6 worked

While frozen, the page still reported the search box as focused, yet three key presses produced no input at all. Tapping the box again fixed it every time.

Limits of this test

Why it happens

  1. Japanese text is unconfirmed while it is being typed. iOS keeps a private connection between the keyboard and the box during that time.
  2. Picking a card clears the box while that connection is still open.
  3. To recover, our code moves the cursor to a hidden box and back. This keeps the keyboard open, which the client asked for in July.
  4. That usually works. When it doesn't, the page has no way of knowing: the box looks fine, and the keyboard is up but feeding nothing.
  5. A real finger tap rebuilds the connection. Code cannot do this by refocusing a box that already has focus.

Why it may feel worse

None of these is proven.

Possible reasonEvidenceStatus
A different search box version now runs on productionRelease settings imply production moved to the iOS version after August. On 11 August the client said that version, on beta, seemed worse than production at the time. QA also saw it fail more often on beta than on staging. Both versions carry the same workaround.Strongest lead, unconfirmed
The moment the box moves downOn the client's recording, input stopped on the two picks that added a chip row. This would explain "about 3 cards" and the older "5th card" report. In the simulator, later new rows worked, so this is not the full explanation.Open
A newer iPhone or iOS versionThe problem depends on iOS behaviour. The client's iOS version is unknown.Unknown
A heavier page on each pickNot measured on the live site. It is also not required: the failure happened on our lightweight test page.Open
Changes to the search box itselfSince 11 August, the only changes to it were usage logging.Unlikely

Options

Results below come from the June to August work on real iPhones. Nothing here was retested for this report.

OptionResult so farCost for the userSize
1Swap in a new input box on each pick, so iOS builds a fresh connectionNo recorded result Prepared in August, then parked when the client asked to go backPossible brief flickerSmall
2Close the keyboard after each pickStopped the freeze Client rejected it on 1 JulyReopen the keyboard for every cardSmall
3Don't clear half-typed text until the word is confirmedStopped the freeze Client rejected it on 5 AugustThe typed text stays in the box after a pickSmall to medium
4Clear the text or reload the keyboard from code, without moving the cursorFailed on iPhone Several versions tried on 5 August. Old text came back or doubledNot applicableNot applicable
5Replace the search box library with a plain boxFailed on iPhone Still froze in AugustNot applicableNot applicable
6Build our own on-screen keyboardNot started Assessment ticket is blockedDifferent typing experienceLarge

Recommended next step: test option 1 in the simulator, including the iOS search box version, then on a real iPhone. If it fails, the remaining paths are all trade-offs: accept the current behaviour, or ask the client to reconsider option 2 or 3, or choose option 6. The earlier rejections were made before the client reported this as getting worse, so they may be worth asking about again.

How to test

Before you start

Steps

  1. Tap the search box. Expected: the keyboard opens and the card list appears.
  2. Type か. Do not press 確定. Expected: the list narrows to matching cards.
  3. Tap a card. Expected: a chip appears, the box empties and the keyboard stays open.
  4. Without tapping the box, type か again. Expected: the text appears. If it does not, input has stopped.
  5. If input stopped, write down the pick number. Close the keyboard, tap the box and continue. Expected: typing works again.
  6. Repeat until you have made 10 picks.
  7. Do three rounds. Reload the page between rounds.
  8. Repeat with card numbers typed on the number keys.

Please record

iPhone modeliOS versionSafari or home screen appSite version (footer)Input typePick numbers where input stopped
 

The same phone on production, beta and staging would be the most useful comparison. A failing pick number that always adds a new chip row would support the "box moves down" explanation.

Questions for the client

  1. Which iPhone model and iOS version do you use, and did either change recently?
  2. Do you use Safari or the home screen app?
  3. Does it also stop when typing numbers only?
  4. If the freeze cannot be removed any other way, which is more acceptable: the keyboard closing after each pick, or typed text staying in the box after a pick?

Technical notes

Production version check

CardSelect.jsx picks CardSelectIOS when VITE_TICKET_SERA_86EY1MHAD is on and the device is iOS. A code comment says production stays off. However, the flag is true on beta and is not in the _parity.yml allow-list, and full production releases have passed that gate, so production should match. This is inferred, because production was not read directly. A developer should confirm it, then correct the comment in featureFlags.js if needed.

Event trace for one frozen pick
click        target=option   chips 0 → 1
focusout     search box
focusin      hidden box
focusout     hidden box      (next frame, 25–33 ms)
focusin      search box      activeElement = search box
key × 3      no beforeinput, compositionstart or input on any element

Dead and working picks had overlapping refocus delays (25–33 ms and 25–60 ms), so delay alone does not explain the failure.

History of the earlier fixes
DateChangeOutcome
1 JulClose keyboard after pickClient rejected it
1 JulHidden box workaround, keyboard stays openPassed retest
9–13 JulKeep list open, keep number keyboard, cover single-character inputReleased 31 Jul
31 JulClient report from productionInput stops from the 5th card
4 AugiOS version of the box, magnifier fix (#1132)Merged to staging
5 AugWorkaround removed, clearing held until the word is confirmed (#1139)Freeze stopped, but the client rejected it because the typed text stayed
5 AugClearing from code without moving the cursorFailed on device: old text came back or doubled
7 AugPlain custom box and recovery methodsCustom box still froze on iPhone. Input box swap and other recovery methods parked
7 AugClient asked to return to the production box while a custom keyboard was consideredReverted (#1151)
11 AugiOS version restored behind a flag (#1160), without #1139Hidden box workaround kept
12 AugClient feedback on production"Better than before"
26 OctClient recording for this ticketInput stops after about 3 cards
How the simulator test was run

An XCUITest drove Safari on an iPhone 18 Pro simulator (iOS 27.0) and tapped the software keyboard. The page mounted the real CardSelectLegacy and SelectedList with a sample store of 87 cards and logged focus, composition and input events. Each run made 8 picks. Picks where the test tap missed the card were excluded, and the last pick of each run had no typing after it. The test kit is not published because it is built around private application code.