Skip to content

feat(todo-dock): sweep the working step and drop per-row chrome - #1729

Merged
Tioit-Wang merged 1 commit into
mainfrom
feat/todo-dock-plain-shimmer
Oct 16, 2026
Merged

Tioit-Wang merged 1 commit into
mainfrom
feat/todo-dock-plain-shimmer

Conversation

@Tioit-Wang

Copy link
Copy Markdown
Collaborator

Why

The expanded session checklist read as a stack of bordered status squares, so
the list competed with the task text for attention and the running step was no
easier to find than any other row.

What changed

  • Plain-text rows. The per-row status mark becomes a bare glyph instead of
    a bordered 16px box. Completed strike-through, cancelled muting, and the
    in-progress weight/colour are unchanged.
  • One sweep, on the working step's own text. A light band is painted into
    the text with -webkit-background-clip: text, so no row changes shape, gains
    a fill, or reserves space for it. This is now the dock's only motion.
  • Exactly one shimmer at a time. While collapsed it rides the header's
    current-item line (that is where the running step is shown); while expanded it
    moves to the row and the header goes quiet. The list stays mounted behind the
    disclosure, so without that gate the same text would sweep twice.
  • Reduced motion. A prefers-reduced-motion user gets flat primary ink
    instead of a band frozen mid-sweep, rather than animation: none alone.
  • The bordered panel, the disclosure behaviour, the session-scoped recovery,
    and the i18n keys are all unchanged.

Band geometry is what makes the loop hold: a 200% image sliding 100% → 0%
keeps the visible window inside the image at every frame, so it neither drops
out nor restarts visibly. Both gradient stops are existing --ds-text-* tokens,
so each theme keeps its own contrast and a contributed theme can still move
them.

Verification

  • tsc -p apps/desktop/tsconfig.json --noEmit — 0 errors.
  • apps/desktop/test/todo-dock-rendering.test.mjs, todo-events.test.mjs,
    todo-recovery.test.mjs — 8/8 pass. The rendering test asserts exactly one
    shimmer in the collapsed markup, that it sits on the header's current-item
    line, and that the marker keeps no border/radius; the CSS test asserts the
    clip, the 200% geometry, the keyframe, and the reduced-motion fallback.
  • scripts/check-style-tokens.mjs, style-surface-tokens on composer.css,
    check-architecture.mjs, check-agent-policy-sync.mjs, biome lint,
    docs/scripts/check-locales.mjs, docs/scripts/check-docs.mjs — all pass.
  • The full apps/desktop suite still reports its pre-existing platform failures
    (macOS codesign/stapler, remote-host supervisor, Windows path fixtures); the
    same files fail identically on a clean origin/main tree, and none of them
    touch todo.

Specs synced: docs/spec/04-ux/08-component-spec.md §11.3a (and its zh-CN
mirror), docs/spec/06-delivery/04-e2e-test-plan.md (and mirror), ADR 0312.

The expanded checklist read as a stack of bordered status squares, so the
list competed with the task text for attention and the running step was no
easier to find than any other row. Replace the mark with a bare glyph and
let a single light band, painted into the running step's own text, carry
"this is working now". Nothing else in the dock moves: no capsule, no row
fill, no step numbers, and the existing bordered panel stays the surface.

The sweep appears on exactly one string at a time. While collapsed it rides
the header's current-item line, because that is where the running step is
shown; while expanded it moves to the row and the header goes quiet. The
list stays mounted behind the disclosure, so without that gate the same
text would sweep twice. Both gradient stops are existing text tokens, so
each theme keeps its own contrast, and a reduced-motion user gets flat
primary ink instead of a band frozen mid-sweep.

Band geometry is what makes the loop hold: a 200% image sliding from 100%
to 0% keeps the visible window inside the image at every frame, so it
neither drops out nor restarts visibly.
@Tioit-Wang
Tioit-Wang merged commit d6ed51a into main Oct 16, 2026
6 checks passed
@Tioit-Wang
Tioit-Wang deleted the feat/todo-dock-plain-shimmer branch October 16, 2026 18:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant