feat(skills): spring registers, bakeSpring for the CSS/WAAPI lanes, follow-through + inertia-chain - #3779
Open
jbernard077 wants to merge 1 commit into
Open
Conversation
…ollow-through + inertia-chain Extends adapters/gsap-easing-and-stagger.md → Spring Eases on top of the existing springEase: named registers as a feel-word lookup (snappy / heavy-settle for entrances; bouncy / wobbly as a separate impact-recovery table, with the "< 0.55 — Don't" row amended to name that exception), the greppable duration-is-an-output criterion, and bakeSpring() emitting a CSS linear() easing for the css and waapi adapters with measured parity. Adds two rules — follow-through (a velocity- continuous ring composed into any ease that arrives with speed) and inertia-chain (followers replay the leader's identical tween, time-shifted by frames) — their rules-index rows, and one-line pointers in spring-pop-entrance.md, css-animations.md and waapi.md.
jbernard077
force-pushed
the
feat/spring-registers-and-bake
branch
from
September 8, 2026 21:09
9318ba9 to
885224f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Extends the spring lane of
skills/hyperframes-animationon top of thespringEasehelper thatalready ships in
adapters/gsap-easing-and-stagger.md, and adds two secondary-motion rules.Everything was validated in one deterministic reference build (24 s, 4 scenes) plus a three-lane
parity composition, both through the local gate (
hyperframes check, which includes lint): 0 errors —the reel carries one pre-existing structural warning, called out below — double-render frame hashes
bit-identical, and shuffled-vs-ascending direct seeks bit-identical on both (9/9 on the reel, 8/8 on the parity composition).
What's added
adapters/gsap-easing-and-stagger.md→ Spring Eases → Named Registers) — afeel-word lookup over the existing
springEase:snappyandheavy-settlefor entrances andsettles, and a separate Recovery Registers table (
bouncy,wobbly) scoped to impactrecovery only. The "< 0.55 — Don't" row is amended to name that single exception; the entrance
doctrine (ζ ≥ 0.8, smooth beats bouncy) is untouched and restated beside the table. The
durations quoted are what the helper returns for each pair.
ease and the duration from the helper") gets a mechanical audit: a spring tween's
duration:carries no arithmetic; a longer flight scales
response.bakeSpring()— bakes the closed-form spring into a CSSlinear()easing(curvature-adaptive, at most 75 stops by default) for the
cssandwaapiadapters, with a measuredparity table (the error scales with travel) and one-line pointers from
css-animations.mdandwaapi.md.rules/follow-through.md— a velocity-continuous ring-out composed into any ease thatarrives with speed: the base curve's arrival velocity is measured numerically and a decaying-sine
tail proportional to it extends the window. It explicitly does nothing on
outeases (theyarrive at rest — that is the existing doctrine); the C¹ default amplitude makes the ring size
predictable (≈ 0.68 · v · amp of the travel).
rules/inertia-chain.md— follow-the-leader secondary motion: every follower runs theleader's identical tween time-shifted by a couple of frames, so a stack or trail reads as one
body with drag. The slide-in runs an entrance register; only a post-contact settle-back may use a
recovery register, whose overshoot ripples down the chain. Longer-travel followers scale
response, never the duration.Plus two
rules-index.mdrows, a pointer inspring-pop-entrance.md's exact-physics variation, andthe hook-regenerated
skills-manifest.json.Validation
hyperframes checkgrep -nE 'duration\s*\*'→ 0 hits on spring tweens (the trail's longer flight is response-scaled)bakeSpringparity in the render (wobbly register,maxPts: 200; CSS and WAAPI lanes vs the GSAP analytic ease, 1-px edge scan on every frame)power1.in, 700 px travel; 1-px edge scan, rest baselines differ by up to 5 px between the two panels)Fit against current HEAD
Every insertion anchor was re-verified against
main@ 250afc3 before cutting this branch. Twothings worth flagging to reviewers:
springEase({ response, dampingFraction })is unchanged;SPRING_REGISTERS[feel]feeds it.spring(bounce)ease token (packages/core/src/parsers/springEase.ts, asingle-parameter damped-cosine curve) and the parsers package's
SPRING_PRESETS(mass / stiffness / damping presets for CustomEase generation) are untouched and unrelated: the
registers here are
{ response, dampingFraction }pairs for the adapter doc's closed-form helper,which predates this PR.
outease arrives at zero velocity, sothe rule applies to arrivals that carry speed (
none,ineases) and says so, rather thanclaiming a ring on the house
power3.outentrance.Preview media
(reference reel: the feel table — every card arrives on an entrance register, the two recovery
registers appear only as the spring-back after a contact drop — with the baked-vs-analytic parity
pair on the same recovery, follow-through at full then half speed, the inertia chain with a snappy
arrival and a bouncy settle-back; the pennant in the last scene is the sibling baked-sim PR)
pr-a-spring-reel.mp4
🤖 Generated with Claude Code