Skip to content

lint: flag CSS transition (seek-unsafe; adapter only covers @keyframes) #3493

Closed

Description

@valeriangalliat

Problem

CSS transition runs on the browser clock. A GSAP class/attr swap looks correct in preview and --workers 1. Parallel chunk workers (and snapshot --at past the settle time) restore the class on a fresh page, so the browser restarts the fade and the export flashes.

Motion skills already ban it. The CSS adapter only discovers animation-name — finite @keyframes are seekable; transition is not. hyperframes check does not flag it. Agents and web-CSS habits keep producing it.

Proposed solution

A lint error (so check fails, same family as non_deterministic_code / gsap_infinite_repeat):

  • Flag transition / transition-* (and -webkit-) in <style> and inline style="".
  • Allow transition: none / transition-property: none.
  • Ignore custom properties (--transition-speed).
  • Fix hint: keep the class swap for state; put the visual change on the paused GSAP timeline.

The frame-worker self-check already uses the label css_transition_used — reuse that code name if you add the rule.

Alternatives considered

finish() jump-spawned CSS transitions in the renderer. That papers over illegal motion and still leaves agents producing it.

Additional context

Fixture: https://github.com/ArcadeHQ/hyperframes-repros/tree/patch/jump-seek-css-settle

(check is clean; --workers 4 and snapshot --at 2 replay the 0.5s fade.)

Activity

  1. added a commit that references this issue on Sep 3, 2026
    ff8a62d
  2. added a commit that references this issue on Sep 14, 2026
    e31ab14
  3. zdnemz commented on Sep 23, 2026

    @zdnemz

    Implemented the proposed solution verbatim in #4300: error-level css_transition_used core rule flagging transition/transition-* and -webkit- in style blocks and inline styles, allowing transition: none / transition-property: none, ignoring custom properties. Verified end-to-end on the jump-seek-css-settle fixture (check now fails with the error, previously clean).

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

    triage/needs-triageNeeds current-behavior, related-work, and scope evaluation.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions