Repository navigation
ALIAS: legacy -webkit- aliases of supported properties resolve as in Chrome (44 aliases) - #172
Merged
Merged
Conversation
…e, as in Chrome 44 Chrome 145 alias_for entries whose property Dragon compiles (flex, box-sizing, logical margins, paddings, borders and sizes), registered per family in css/aliases/<family>.ts. Aliases Chrome parses with UseAliasParsing, and the -webkit-writing-mode surrogate, stay refused. Fixture group aliases (alias-flex, alias-logical, reject-alias-legacy-parsing).
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: bb32cfb Run: https://github.com/compiled-run/dragoncss/actions/runs/37326021043
…block, flex and positioned contexts Three both-direction fixtures (group ctx-proof): margin-top/bottom/block auto in block flow and on relative boxes; top/right/bottom/left auto on absolute boxes in block and flex-row containing blocks and on relative boxes, plus inset: 10px auto auto 0; auto margins on relative flex items and flex-column items, auto insets in a flex-column containing block. Each passes linux-dragon-layout and chrome-dual against live Chrome.
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: f079666 Run: https://github.com/compiled-run/dragoncss/actions/runs/37335793261
…e the alias as written - analysis/animations.ts longhandsNamed resolves a legacy alias, as css_animations.cc CalculateTransitionUpdateForStandardProperty does (ResolveCSSPropertyID), so transition: -webkit-logical-width 1s lists width instead of warning. - Declaration.alias records the written alias; parse, keyframe, profile (set by ...), unproven-context and var() substitution messages name it. - aliases.ts records the css_properties.json5 path, tag, sha256 and line ranges.
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: 205bbd9 Run: https://github.com/compiled-run/dragoncss/actions/runs/37342842729
…auto (now proven in block flow) to margin-right: 6mm margin-right:<length-mm> is proven in flex-row/ltr and not in block/ltr, so each test keeps its intent: a value proven only in another context, reported as DRAGON_UNPROVEN_CONTEXT with its alternatives (s5, media-wiring) and absent from the block/ltr rows (parity.test).
…res as new since its base hit-capture-identity.test requires every capture and emitted file outside the identity base to belong to a fixture named in IDENTITY_NEW; the ctx-proof fixtures postdate the base, as SELD-R2a's and PNT2's did. The base files' key-stripped hashes are unchanged (the test's hash case passes).
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: 054f787 Run: https://github.com/compiled-run/dragoncss/actions/runs/37375618192
…inned spec, on an absolute box in a flex column The milestone-1 spec (span text 'auto') is pinned byte-identical by seams.test; margin-top:auto is still unproven in absolute-in-flex-column after #179 and #180, so only the fixture HTML moves (as reject-selector-hover and reject-unit-* did), and fixture-reader keeps checking the BASE text.
Contributor
Author
|
Landing stopped at step Fix the cause, then hand #172 back to the landing queue with the new clean head. |
…dict (also when the wait runs out); everything else is CiUnavailable and runs the step locally; waits cover the workflows' job timeout chains; stale scratch branches are swept at driver start
# Conflicts: # packages/dragon/src/css/stylesheet.ts
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
Commands: pnpm regen
CTX-PROOF 1/2: parity fixtures proving auto margins and auto insets in block, flex and positioned contexts
…olveXPosition), not 100% − x (PM amendment from the #192 review)
LAND_TEST=ci: the driver takes CI's full-test result for each proved tree (with local fallback)
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
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.
ALIAS (coverage-rank lane 1, size S): legacy
-webkit-alias properties now compile as their standard property, exactly as Chrome resolves them.What changed
Alias registry, per family (HOTSPOT-SPLIT shape):
packages/dragon/src/css/aliases/{box,flex,logical}.tseach own their family's aliases.css/aliases.tsspreads them one line per family, sorted by id. The same shape asanimation-kinds/<family>.ts. A later lane (radius, transform, user-select and so on) adds its own file and one line. Each alias file is typed against its family's longhands and shorthands, andaliases.tsthrows at load if an alias is claimed twice, is itself a property, or names a non-Dragon property.Resolution at parse time:
stylesheet.tsparseDeclarationandat-rules/keyframes.tsmap the lower-cased name throughresolveAliasbefore anything else. This is what Chrome does:CSSPropertyParserresolves the alias id, so the declaration is the standard declaration. The cascade (order, importance, specificity, logical-group competition), var() substitution, CSS-wide keywords and diagnostics are therefore the standard property's. One visible effect: a refusal message names the standard property (for exampleflex-basis: …), and its span still points at the authored alias declaration.Which aliases: 44 entries from Chrome 145
css_properties.json5alias_forwhose target is a Dragon longhand or shorthand that compiles on native:-webkit-box-sizing.-webkit-align-content,-webkit-align-items,-webkit-align-self,-webkit-column-gap,-webkit-flex,-webkit-flex-basis,-webkit-flex-direction,-webkit-flex-flow,-webkit-flex-grow,-webkit-flex-shrink,-webkit-flex-wrap,-webkit-justify-content,-webkit-order.-webkit-margin-{start,end,before,after},-webkit-padding-{start,end,before,after},-webkit-border-{start,end,before,after}with their-color,-styleand-widthlonghands, and-webkit-{min-,max-,}logical-{width,height}.Left out on purpose:
UseAliasParsing(css_parsing_utils.cc), whose grammar differs from the standard property's:-webkit-transform(unitlessperspective()),-webkit-perspective,-webkit-border-radius(the two-value form),-webkit-background-*,-webkit-mask-*and-webkit-appearance. Their properties are not supported on native anyway.-webkit-transform-origin,-webkit-transition*and-webkit-animation*: their standard properties don't compile on native yet.-webkit-writing-mode: in Chrome it is asurrogate_for, not an alias.display: -webkit-box,-webkit-box-*): that is a separate lane.All of these stay
DRAGON_UNSUPPORTED_PROPERTY, pinned by test and by the reject fixture.docs/ports.json:aliases.tscitescss_parsing_utils.cc(UseAliasParsing), so it is added as areferenceuse on the existing entry.css_properties.json5is data, so the ports scan doesn't track it.Proof
packages/dragon/test/aliases.test.ts:pendingvar() parts and diagnostics. It is checked for typical, multi-token (first baseline,safe center,2 0 10px), CSS-wide, var() and invalid values, case-insensitively and through escapes.!importantand specificity still decide first. A logical alias competes only with the physical longhand of the element's direction, in both directions. An alias of a shorthand is overridden by a later alias of one of its longhands. The losing declaration is reported at the alias source.registry-claims.test.ts: the alias families are sorted, one file each, and each is a property family. No alias is claimed twice or is a property, and each family file aliases only its own family's properties.aliases:alias-flex(ltr) covers all 14 non-logical aliases, alone and paired with their property in both orders, plus!important.alias-logical(ltr and rtl) covers all 30 logical aliases, alone and paired with logical and physical properties in both orders.reject-alias-legacy-parsingchecks that-webkit-transform: perspective(100)stays refused.runFixture, profiles enforce):alias-flex,alias-logicalandalias-logical-rtlpass.regenlabel). Device lanes run in the landing driver.Coverage-rank (scripts/coverage-rank.ts from #146, run on this tree and on its base f50b6ad)
inherit(for example-webkit-box-sizing: inherit). The standard properties' rows don't proveinherit, so those probes still fail.-webkit-writing-mode, a surrogate. Suggestion for the PM: point alias rows at their target's samples incoverage-rank-input.json.Review round 1 (precomputed review of e277afc)
transition-propertyand thetransitionshorthand now resolve alias names.longhandsNamedcallsresolveAlias, as Chrome does (css_animations.ccCalculateTransitionUpdateForStandardPropertycallsResolveCSSPropertyID, line 2737 at the tag).transition: -webkit-logical-width 1snow listswidth, with no "not a CSS property" warning. Test:anim-program.test.ts"a legacy alias in transition-property…". It fails without the fix, withDRAGON_ANIMATION_NO_EFFECT.will-changeneeds no change: no alias in this PR targets a will-change feature (transform, opacity).@keyframeswas already covered.Declaration.aliasrecords the name.aliases.test.tspins are updated to the new wording, and new tests cover the profile and unproven-context messages.css_properties.json5indocs/ports.json. The registry andchrome-ports.test.tsaccept only .cc/.cpp/.mm/.h upstreams and scan only for those citations. Widening the scan to .json5 also catches existing citations inkeyframes.ts,chrome-deviations-dpr.ts,capture-interpolable.tsandfont-face.ts. One of those files,css_value_keywords.json5, has no licence header, so the licence-phrase check can't apply to it. That is a ports-schema change, so it belongs in its own PR. Instead,aliases.tsnow records the full path, tag, sha256 and line ranges.grid-gap,grid-row-gapandgrid-column-gapwere already accepted on master, as grid-family shorthands of gap, row-gap and column-gap.aliases.tsnow says so.Verification
pnpm typecheck: pass.vitest runon 11 files, 131 tests: all pass. The files:packages/dragon/test/aliases.test.tspackages/dragon/test/registry-claims.test.tspackages/dragon/test/logical.test.tspackages/dragon/test/keyframes.test.tspackages/parity/test/chrome-ports.test.tspackages/dragon/test/seams.test.tspackages/parity/test/registry-claims.test.tspackages/parity/test/fixture-reader.test.tspackages/dragon/test/platform-free.test.tspackages/dragon/test/ua.test.tspackages/dragon/test/diagnostics.test.tspnpm test: not run locally (lane contract). The landing driver runs it.Outside the spec
docs/ports.json: onereferenceline on thecss_parsing_utils.ccentry.🤖 Generated with Claude Code