Skip to content

CTX-PROOF-3: viewport units proven on min-height, max-height, min-width and max-width - #211

Merged
thejackshelton merged 41 commits into
masterfrom
ctx-proof-3
Oct 6, 2026
Merged

thejackshelton merged 41 commits into
masterfrom
ctx-proof-3

Conversation

@thejackshelton

Copy link
Copy Markdown
Contributor

CTX-PROOF-3. This PR adds one parity fixture proving viewport units (vh, vw, vmin, vmax) on min-height, max-height, min-width and max-width. min-height: 100vh (the full-screen idiom) and max-height: 100vh in block flow were refused only because no fixture used a viewport unit on those properties. height: <length-vh> was already proven, and the engine resolves viewport lengths the same way for every size. There is no engine, compiler, gate or tolerance change. Reviewed diff: about 3 KB.

How the batch was found

I swept the coverage-rank probes, the Tailwind sweep and the music player for refusals whose value kind is already handled elsewhere. I started from the CSS-wide keyword sweep the lane was asked for:

What changed

  • New group unit-contexts (one GROUPS line) with ctx-proof-units, run in ltr and rtl. It contains:
    • min-height: 50vh, max-height: 20vh (under height: 600px), min-width: 50vw, max-width: 25vw, min-height: 10vmin and max-width: 30vmax in block flow.
    • min-height: 15vh, min-width: 20vw, max-height: 5vh and max-width: 10vw on flex-row items.
  • I checked each constraint in Chrome (400×300 viewport) by removing it alone: every one moves a frame, in both directions. Both cases pass linux-dragon-layout and chrome-dual.

Result

  • Profile rows: +20 per target (ios, android, web), all viewport-unit rows. Rows removed: 0. Status changes: 0.
  • Coverage-rank: native goes from 40.4% to 40.7%, with min-height: 100vh and max-height: 100vh promoted on all three targets.
  • Music player: unchanged. It uses no viewport unit on a min or max size.

What passed

  • pnpm regen reached a fixed point. The outputs are in their own commit.
  • pnpm typecheck: pass.
  • chrome-ports, registry-claims, profile-index, android-profile, north-star (accounting, tree, reference) and hit-capture-identity: 62 tests pass.
  • vitest run packages/layout packages/dragon (the CI platform-free set): 103 files, 2354 tests pass.
  • The device step is pending; the landing driver runs it.

No fixture, test, check or tolerance was changed or removed.

🤖 Generated with Claude Code

thejackshelton and others added 30 commits October 5, 2026 17:59
…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
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: b79e6c2
Run: https://github.com/compiled-run/dragoncss/actions/runs/37385909525
…eyframes, and frame fixtures for the web easing, direction and fill gaps

- css/aliases/animation.ts: the 14 Chrome 145 alias_for entries of transition and animation (none uses UseAliasParsing).
- @-webkit-keyframes parses as @Keyframes (css_parser_impl.cc ConsumeKeyframesRule); a same-named unprefixed rule beats it
  in either order, as ScopedStyleResolver::AddKeyframeStyle decides; it keys its own at-rule:@-webkit-keyframes feature.
- Frame fixtures (ltr and rtl): anim-easings (transition ease-in, ease-out, ease-in-out, step-start, step-end), anim-timing
  (every animation easing), anim-direction (alternate, reverse, fill backwards) and anim-webkit (every alias, alias and
  property in both orders, and the @-webkit-keyframes precedence).
…e, and list aliases.test.ts on the css_parser_impl.cc entry
… regen, fixed point after 4 passes; then pnpm notices:gen): the Chrome frame captures of anim-easings, anim-timing, anim-direction and anim-webkit (ltr and rtl), the web profile rows, the emitted CSS, NOTICES, the animator rt-vectors, the translate corpus and the host lanes record
…iler's line resolution, a port) and core/style/grid_area.h (kGridMaxTracks, a reference), fetched at 145.0.7632.6 with their file and header sha256 and located ranges (landing full test: chrome-ports)
…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
…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
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
…-height, min-width and max-width

min-height: 100vh and max-height: 100vh in block flow are refused only for lack of a fixture (height: <length-vh> is proven; the engine resolves viewport lengths the same way for every size). One fixture in ltr and rtl: vh, vw, vmin and vmax on the four min and max sizes in block flow and on flex items, each checked in Chrome to move a frame. Group unit-contexts, one GROUPS line
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)
thejackshelton and others added 11 commits October 6, 2026 01:10
land: parallel position builds (prepare every position of a batch at once; devices serialize)
…(FAILED, label, comment), not only once the whole batch has built
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
ANIM-b slice 2: -webkit- transition/animation aliases, @-webkit-keyframes, and web frame fixtures for easings, direction and fill backwards
land: report a parallel build's ejections as they happen (queue 58: #91 and #198 failed with no FAILED line)
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
@thejackshelton
thejackshelton merged commit 2c48409 into master Oct 6, 2026
5 checks passed
@thejackshelton
thejackshelton deleted the ctx-proof-3 branch October 6, 2026 09:39
thejackshelton added a commit that referenced this pull request Oct 6, 2026
… into ovfl-a: no textual conflicts locally (GitHub's conflict was in files the dragon merge drivers resolve); fixtures.ts keeps master's groups and OVFL's overflow line
thejackshelton added a commit that referenced this pull request Oct 6, 2026
…211 CTX-PROOF-3, #195 OVFL-na) into form-a-v2; no conflicts
thejackshelton added a commit that referenced this pull request Oct 6, 2026
…supports. seams.test.ts keeps both sides: ANIM-b2's @-webkit-keyframes as @Keyframes and CASC's @supports leave the refused list, with @layer as the enclosing at-rule; the pinned hash 48d27023… equals casc-supports' own (1b8eacf) for the same list, so every other at-rule is unchanged
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