Repository navigation
ANIM-b slice 2: -webkit- transition/animation aliases, @-webkit-keyframes, and web frame fixtures for easings, direction and fill backwards - #201
Merged
Conversation
…runtime reference and the Chrome resize traces Native targets are checked and lowered in every @media band, and accept @media where their profile proves at-rule:@media and each media feature in the media context (R13, retiring the until-MQ-R refusal). The band table (typed atoms, truth vectors) and the band state program fold every band into the state program as the internal env#band variable (R4, R5); MediaRuntime is the TypeScript reference of the runtime (one size change, one band delta, one layout); rt-band.ts is the device band lookup with Chrome's 1/64 px comparisons and float media size (R2, R3). Transitions a size change would start are refused on native until MQ-Rt (R8). Six media-runtime fixtures with resize scripts run on the band runtime and in Chrome through setViewportSize at DPR 1, 2, 2.625 and 3 (resize-capture.ts), and their passing cases derive the media profile rows.
…he band move throws
…t before any enforce-mode compile of a media fixture (dpr-vectors saw ios blocked)
…tted CSS of the media-runtime fixtures, DPR, pixel, break and hit captures and vectors, profiles with the media rows, north-star check, lanes.json)
…oves to parity); rt-band in the translator subset; .gitattributes in step order; pins the new fixtures move (hit suite 2084, state scripts, glyph clearance additions, s4b/s5 at-rule example, android-profile and hit identity scope)
…tted CSS of the media-runtime fixtures, DPR, pixel, break and hit captures and vectors, profiles with the media rows, north-star check, lanes.json)
… banded transitions and animations refused on native (MQ-Rt), near-threshold slack combinations refused at run-time switching until MQ-R0 (with the off-grid sweep), android-views band programs on the resize lanes, the (assignment, band) cap as a diagnostic, '@' reserved in document ids, mqr-forms for the other comparison forms
…tted CSS of the media-runtime fixtures, DPR, pixel, break and hit captures and vectors, profiles with the media rows, north-star check, lanes.json)
…; anim-bands: ios refuses a banded transition until MQ-Rt; the resize test names the backend in its step label)
…ers): the resize-capture step moves to scripts/regen-steps/mq-r1.ts (after capture, so before profile-rows), the media-runtime group to one sorted GROUPS line, .gitattributes sorted; hit suite 2092 beside master's animator suite
Commands: pnpm regen --skip lanes-host --skip tw-sweep (macos-26) and pnpm regen --only lanes-host (xcode-27), alternated to a fixed point, then pnpm regen --only tw-sweep (macos-26). Base: fed6f56 Run: https://github.com/compiled-run/dragoncss/actions/runs/37275478198
…lowering takes the image naturals and its programs the images and moving transforms; the hit suite checks move to master's p1-floor.json
Commands: pnpm regen --skip lanes-host --skip tw-sweep (macos-26) and pnpm regen --only lanes-host (xcode-27), alternated to a fixed point, then pnpm regen --only tw-sweep (macos-26). Base: 4d4251d Run: https://github.com/compiled-run/dragoncss/actions/runs/37326048481
… (the hit suite grows by the media-runtime layout vectors)
…, used by nativePrograms and nativeBandPrograms alike, so an img under a transform only a band change moves gets the direct draw in every band
… expected-quads and expected-resize, both sides' package.json scripts
…'s lowering includes the interaction variants; both sides' record fields, exports and imports; p1-floor.json takes master's until regen re-derives it
…tes scrolls that script, fragment links or focus start, and the native output starts none); web still refuses it
…and gridItem fields, grid lowering and grid contexts Rebuilt from grid-g1a (#32, 2196d59 through 00877f4) onto origin/master as one unstacked branch. input.ts: display grid, LayoutStyle.grid and LayoutStyle.gridItem (null where unused); validate.ts: array and nullable rules and the grid shape rules; environment.ts (where master now zooms the input) zooms px track breadths and fit-content limits; the native harness decodes the fields and the native emitter builds them. lower/grid-layout.ts resolves every item line in the compiler as Blink's GridLineResolver does. Grid contexts in analysis/context.ts. The engine still refuses display: grid (grid-layout). Changes for master since #32: replaced elements (REPL-a) in a grid container carry their placement (lowerReplaced, and checkGrid checks replaced children too); display: grid on a replaced element is refused in lowering and by the validator.
…he lowering, checked by the validator) and for display: grid on a replaced element
…in grid: null and gridItem: null on every style (additive; a JSON round trip with indent 1, as the files are written)
…ed leaves too (REPL-a landed after #32); PASS over 2200 vectors
…ixed point after 3 passes): every vector gains grid: null and gridItem: null (check-grid-input-additive PASS: 2200 vectors, 39964 styles), the translated engine and harness, the native corpora, the animator cases and the host lanes record
…grid fields instead of crashing on it; state-program.test's hand-built style gains grid: null and gridItem: null (CI failure on cbeb232)
…n and device-run steps blame the tree, a setup step falls back to the local run
…ition of a batch prepared at once in its own worktree (master plus PRs 1..k, installed, regenerated to its fixed point under the heavy lease), then assembled in order on the actual chain with the device step; an ejection ends the speculation
… rt-vectors/animator/cases.json (ANIM-b2's frame fixtures bring it to 26), with a short-run check; it pinned 18
Contributor
Author
|
Fixed the landing-proof failure in packages/parity/test/device-vectors.test.ts ('expected 26 to be 18'): the animator suite's declared count is now read from packages/layout/rt-vectors/animator/cases.json (26 with this PR's four frame fixtures; it stays >= 18), and a short animator run is checked to fail, alongside the existing undeclared-suite check. device-vectors.test.ts passes (8/8). Test-only change, no regen needed. |
…that build's failure ejects); abandoned preparations are waited out before their worktrees are reused; position worktrees kept within a disk budget and removed at a run's end (and after each builder); prepared trees and regen commits checked against regen's declared outputs, not the review-ignore list
MQ-R1 1/2 (T067): @media bands for native in the compiler, the band runtime reference and Chrome resize traces
Contributor
Author
|
Landing stopped at step Fix the cause, then hand #201 back to the landing queue with the new clean head. |
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
Commands: pnpm regen
Commands: pnpm regen
GRID G1a input: grid and gridItem engine fields, grid lowering and grid contexts, unstacked on master (supersedes #32)
land CI steps: judge a failed job by its failed step (setup failures fall back, never blame the PR)
NA-NATIVE: scroll-behavior is not applicable on native (OVFL lane)
Commands: pnpm regen
land: parallel position builds (prepare every position of a batch at once; devices serialize)
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
thejackshelton
added a commit
that referenced
this pull request
Oct 6, 2026
thejackshelton
added a commit
that referenced
this pull request
Oct 8, 2026
…eeps -webkit-keyframes and charsetAtRule; the seams pin drops both from its list, and master gives the same hash for that list (bb433400…)
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.
ANIM-b slice 2 (T065), web side: the -webkit- transition and animation aliases, @-webkit-keyframes, and Chrome frame fixtures that prove the easing, direction and fill-mode values the web profile was missing. It stays out of the state-program, the driver and
state.ts(the native animation lane, slice 1, owns those).What changed
Aliases.
packages/dragon/src/css/aliases/animation.tsadds 14 aliases, one sorted line inaliases.ts. These are Chrome 145'salias_forentries (css_properties.json5 lines 9700-9733 and 9928-9945):-webkit-animationand-webkit-animation-{delay, direction, duration, fill-mode, iteration-count, name, play-state, timing-function};-webkit-transitionand-webkit-transition-{delay, duration, property, timing-function}.None is parsed with
UseAliasParsing: in css_parsing_utils.cc, shorthands_custom.cc and longhands_custom.cc it is used only for background, mask and perspective. So each alias parses exactly as its property. They use ALIAS: legacy -webkit- aliases of supported properties resolve as in Chrome (44 aliases) #172's mechanism.aliases.tsnow also accepts the transition and animation list properties as alias targets, since those stay out of LONGHANDS (T065 option B).@-webkit-keyframes is registered as
keyframesAtRule, so it parses as @Keyframes, as Chrome'sConsumeKeyframesRule(webkit_prefixed)does (css_parser_impl.cc 895-898 and 1531-1581, a new ports.json entry).KeyframesRule.prefixedrecords which form was written.keyframesOverridein analysis/animations.ts applies Chrome'sKeyframeStyleShouldOverride: an unprefixed rule beats a prefixed one of the same name in either order, and otherwise the later rule wins. Dragon refuses @layer, so all rules share one layer.at-rule:@-webkit-keyframes, so the row names the fixture that proves it.@-webkit-keyframes inside @media is not supported (package MQ-R).Frame fixtures (group animations, picked up by the
anim-*glob, ltr and rtl at 400x300, captured from Chrome bypnpm regen's anim-capture):anim-easings: transitions with ease-in, ease-out, ease-in-out, step-start and step-end, plus the longhand form. The state is set, then cleared, so each runs both ways.anim-timing: animations with every easing: linear, ease, ease-in, ease-out, ease-in-out, an overshooting cubic-bezier(), steps(4, jump-none), steps(3, jump-both), step-start and step-end, plus the longhand form.anim-direction: alternate, reverse, and fill-mode backwards with positive delays. This includes reverse backwards, where the before-phase holds thetovalue, and alternate backwards with three iterations.anim-webkit: every alias, an alias and its property in the same rule in both orders, and the @-webkit-keyframes precedence. That covers an unprefixed rule before and after a prefixed one, and two prefixed rules.Rows promoted (web,
animationcontext, allexact)animation-direction:alternate,animation-direction:reverseanimation-fill-mode:backwardsanimation-timing-function:cubic-bezier(),:ease-in,:ease-out,:ease-in-out,:steps()transition-timing-function:ease-in,:ease-out,:ease-in-outat-rule:@-webkit-keyframesThat is 12 new rows. Existing rows gain the new fixtures as further proof cases, and no status changes.
step-startandstep-endkeysteps(), which anim-steps already proved for transitions; anim-easings and anim-timing add cases for them. iOS and Android rows wait for the device run (the driver's job).Music-player north-star delta
None:
examples/music-player/dragon/north-star-check.jsondid not change in the regen.What passed
pnpm typecheck.pnpm regenvia/tmp/job.sh animb2-regen: fixed point after 4 passes. I then ranpnpm notices:genfor the new ports entry.pnpm testwas not run, per the lane contract.Changed tests, and why
dragon/test/aliases.test.ts:Declaration.animation, since an animation declaration's longhands are empty.anim-webkit/view.cssfor the animation aliases.dragon/test/registry-claims.test.ts: an alias family must still be a property family. The one exception isanimation, whose own properties areANIM_LIST_PROPERTIESplus theANIM_SHORTHANDSkeys. The no-alias-is-a-property check now covers those too, so the check is wider, not looser.dragon/test/seams.test.ts:-webkit-keyframesjoinskeyframesas accepted.-webkit-keyframesfrom its list, as ANIM-b1 droppedkeyframes. The new hash, a0302641…, is what the base a36ce22 gives for the same list. I ran it on the base, so every other at-rule's refusal is unchanged.dragon/test/keyframes.test.ts: "@-webkit-keyframes stays refused" becomes "a valid one is accepted". A nameless one (none) and one inside @layer are still refused.dragon/test/animations.test.ts: the band-gate test usedease-in-out, which this PR proves. It now usestransition-delay: inherit, which is still unproven, and keeps its intent.Outside the spec
docs/ports.json: css_parser_impl.cc entry (andTHIRD_PARTY_NOTICES.md).packages/dragon/src/css/at-rules.ts: one registry line (MQ-R1 1/2 (T067): @media bands for native in the compiler, the band runtime reference and Chrome resize traces #140 also edits this file, in another line).packages/dragon/src/analysis/animations.ts: the keyframes map and the feature key (INL1a 5/5 (C2): lowering inline boxes and <br>s, native runtime emit, 7 inline fixtures and lanes #91, a stacked PR, also edits this file).Reviewed diff: about 52 KB. Everything else is regen output under
.macroscope/ignore.mdshapes.🤖 Generated with Claude Code