Skip to content

fix(app): turn off question dock animation by default - #59389

Merged
kitlangton merged 2 commits into
devfrom
question-still
Oct 26, 2026
Merged

kitlangton merged 2 commits into
devfrom
question-still

Conversation

@kitlangton

@kitlangton kitlangton commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

The question dock no longer animates. Switching questions, minimizing, restoring and submitting now change on the same frame.
The new dock, keyboard answering, number keys, the "N of M" title, the dashes and the Back/Next/Submit footer all stay. The old motion is still available behind one Knobs toggle, Timeline → Question → Question dock motion, which is off by default.

❌ Before

  1. Press → or Next.
  2. ❌ The dock blurs out a copy of the old question, springs to the new height, rolls the number and slides the progress bar along.
  3. ❌ Minimize, restore and submit each play their own fold, grow or exit.

✅ After

  1. Press → or Next.
  2. The next question, its number and its lit dash appear on the next frame, already at their final size.
  3. Minimize, restore and submit fold, unfold or swap in the composer at once.
- switch question -> ghost copy + blur + height spring + rolling number + sliding bar
+ switch question -> if motion knob on: same as before, else paint the new question once
- minimize / restore / submit -> fold, grow and exit animations
+ minimize / restore / submit -> instant unless the motion knob is on

📊 Proof

Case (knob off) Before After
→ / click / → between questions: running animations ❌ several ✅ 0
Outgoing copy, blur or height change ❌ yes ✅ none
Minimize then restore ❌ animated fold ✅ same frame
Submit ❌ closing flight ✅ composer on the same frame
Reduced motion ❌ fades ✅ no motion, even with the knob on

The new test, "switches questions, folds and submits on the same frame with the dock's motion off", fails on dev and passes here. The existing motion tests now turn the knob on first and still pass, as do the keyboard tests from #58494 and #59333.

Knob off: switching with the keys and a click, minimize, restore, then submit.

question-still-dev.mp4

Visual

<svg xmlns="http://www.w3.org/2000/svg" width="240" height="72" viewBox="0 0 240 72" fill="none">
  <rect x="8.5" y="6.5" width="223" height="59" rx="8" stroke="currentColor" stroke-opacity=".25"/>
  <rect x="20" y="16" width="34" height="4" rx="2" fill="currentColor" fill-opacity=".35"/>
  <g fill="currentColor">
    <rect x="160" y="17" width="10" height="2" rx="1" fill-opacity=".2"/>
    <rect x="174" y="17" width="10" height="2" rx="1" fill-opacity=".2"/>
    <rect x="188" y="17" width="10" height="2" rx="1" fill-opacity=".2"/>
    <rect x="202" y="17" width="10" height="2" rx="1" fill-opacity=".2"/>
    <rect y="17" width="10" height="2" rx="1" x="160">
      <animate attributeName="x" values="160;174;188;202;160" keyTimes="0;.25;.5;.75;1" dur="4s" calcMode="discrete" repeatCount="indefinite"/>
    </rect>
  </g>
  <g fill="currentColor" fill-opacity=".55">
    <rect x="20" y="28" width="120" height="4" rx="2">
      <animate attributeName="width" values="120;96;140;84;120" keyTimes="0;.25;.5;.75;1" dur="4s" calcMode="discrete" repeatCount="indefinite"/>
    </rect>
  </g>
  <g fill="currentColor" fill-opacity=".25">
    <rect x="20" y="40" width="80" height="3" rx="1.5"/>
    <rect x="20" y="50" width="64" height="3" rx="1.5"/>
  </g>
  <rect x="176" y="44" width="44" height="14" rx="4" stroke="currentColor" stroke-opacity=".4"/>
  <rect x="188" y="50" width="20" height="2" rx="1" fill="currentColor" fill-opacity=".5"/>
</svg>

👀 Read: session-question-dock.tsx, the new still() path: with the knob off, wake() snaps every spring, drops the outgoing copy and paints once instead of starting a frame loop, and the boxes keep their natural heights. spring-height.tsx gains an instant option so the composer swap and the dock's grow skip their morph for the question dock only. The CSS only scopes the existing transitions under data-animated="true". The rest is routine.

🔍 Asked for in team chat · the motion stays available behind the Question dock motion knob

Checks run
  • bun run test:components -- component-tests/session-question-dock.spec.ts (packages/app): 25 passed
  • New knob-off test against dev's source: fails
  • bun run test:e2e -- e2e/regression/session-request-docks.spec.ts (packages/app): 5 passed
  • bun typecheck in packages/app and packages/session-ui: no errors
  • oxlint and prettier --check on the changed files: clean

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks sound to me. I read through the knob-off paths: still() in the dock, and instant in ComposerMorph/Grow, which only applies to question faces, so the other docks and the queue panel keep their motion. I also checked the CSS scoping under data-animated and the reduced-motion handling, and nothing there would block a merge. tsc -b in packages/app is clean. I couldn't run the component tests or the app here because the sandbox's Chromium is missing system libraries, so the frame-level behaviour still rests on your test run. Before/after screen captures of switching and minimizing with the knob off would help reviewers.

Public API is unchanged. The only addition is the question.motion Knobs tuning toggle, which isn't config.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new commit only adds blank lines in session-composer-region.tsx for lint, with no change in behaviour and nothing new to raise. The public API is unchanged.

@kitlangton
kitlangton merged commit 161d466 into dev Oct 26, 2026
19 checks passed
@kitlangton
kitlangton deleted the question-still branch October 26, 2026 20:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant