ONC2-8555 · app branch to dev, api#1428 to main · updated 28 Oct, 4 am IST

The tutor chat, rebuilt

Rezzy, Savvy and Casey now show a reply in the order it happened, a step at a time. The chat stays still while the learner reads.

DoneThe code. Typecheck, lint and the tests for changed files pass at the latest commit.
DoneA fresh reviewer checked the web, iPhone, iPhone SE and Android captures without seeing the code. It found 1 must-fix and about a dozen should-fix items (below).
NowChecking each finding against the app and fixing the real ones.
NextiPad landscape and Android "before" captures, then the PR to dev. Two to three hours (a guess, most of it the fixes).

What learners see

Steps sit where they happened

Before, a reply's thinking steps were pulled above its text, so the answer jumped around as steps arrived. Now the steps sit in one "Thinking" group, in order. A step shows the moment it starts. Its detail fills in once it finishes.

Before, streaming
Before, mid-reply
After, streaming
After, mid-reply

The question stays pinned

Before, the list chased the stream to the bottom, so the learner couldn't read from the top. Now the question moves to the top once and the list stays put. When the reply is done the group reads "Thought for 15s". A round "Jump to latest reply" button shows while part of the reply is below the screen, and takes you to the follow-ups.

Before, done
Before, done
After, done
After, done
After the jump
After the jump

Smaller things

Speed

Measured on the iPhone 18 Pro simulator with a dev build, before the change:

Now each chat has its own store, and every part reads only the slice it needs. A streamed line redraws one reply, not the whole chat. The drawer fetches only while it's open.

Bugs QA found, now fixed

Android showed nothing while a reply ran

The question sat alone until the whole answer landed. Android's list detaches rows it thinks are off screen, and the native "Thinking" shimmer and spinner stayed at zero size inside a detached row. The chat list now keeps its rows attached.

Android before the fix
Before the fix
Android after the fix
After the fix

On a small iPhone the jump button sat on the question

With the keyboard open on an iPhone SE, the button overlapped the pinned question by 5 pt. It now waits while the keyboard is up and comes back when it closes.

SE keyboard before the fix
Before the fix
SE keyboard after the fix
After the fix

What the fresh review found

These are the reviewer's claims from the captures. I haven't confirmed them in the app yet.

Must fix

Should fix

Some Android items (no steps while it runs, a 4 s tap delay) likely come from the cloud device's network and remote taps, not the app. I'll check those before treating them as bugs.

Where it was checked

iPhone 18 ProBefore and after captures, a 40 s video
iPhone SEText fit, row alignment, keyboard
Largest text sizeHeader stays one line, steps wrap cleanly
Android (cloud Pixel 9)Captures and video after the fix
Web, desktop and phone widthBefore and after captures, videos
iPad (cloud)Videos done; landscape still to capture
AutomatedTypecheck, lint, jest, and the end-to-end chat tests on web and iOS
Largest text size
Largest text size

For the next engineer

Noticed, not fixed here