Skip to content

CTX-PROOF-2: inherit proven on the flex, box-sizing, margin, padding, border and size longhands (30 alias probes) - #210

Merged
thejackshelton merged 58 commits into
masterfrom
ctx-proof-2
Oct 9, 2026
Merged

thejackshelton merged 58 commits into
masterfrom
ctx-proof-2

Conversation

@thejackshelton

@thejackshelton thejackshelton commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

CTX-PROOF-2. This PR adds one parity fixture that proves inherit on the flex, box-sizing, margin, padding, border and size longhands. The coverage-rank alias probes (-webkit-justify-content: inherit, -webkit-flex-direction: inherit, -webkit-box-sizing: inherit, -webkit-margin-before: inherit and the rest) were refused only because no fixture used inherit on these longhands. The resolver handles inherit the same way for every longhand. There is no engine, compiler, gate or tolerance change. Reviewed diff: about 9 KB.

How the batch was found

I listed every DRAGON_UNPROVEN_CONTEXT, and every UNSUPPORTED_VALUE whose value is a CSS-wide keyword, across three sources: the coverage-rank probes (#146's script, run locally), the Tailwind sweep snapshot and the music player's north-star check. I grouped them by (value kind, context) and ranked them by reach.

  • The largest fixture-only group: inherit in block flow on the alias rows, about 320 reach-points.
  • What remains needs engine work:
    • display: inline, inline-block and inline-flex in block flow (INL1a, INL2a).
    • justify-self and grid-row-end (GRID).
    • overflow-x on the root (OVFL).
    • The Tailwind flex keywords on non-flex boxes, 45 utilities with no visible effect. They are left for a later batch.

What changed

  • New group inherit-contexts (packages/parity/src/fixture-groups/inherit-contexts.ts, one GROUPS line) with ctx-proof-inherit, run in ltr and rtl. It contains:
    • An inheriting flex container: direction, wrap, justify-content, align-items, align-content and column-gap.
    • A block box inheriting the same container longhands. That is the not-flex-container context the probes key.
    • Inheriting flex items: grow, shrink, basis, align-self and order. A row that overflows makes shrink and basis bind.
    • Inherited box-sizing, margins, paddings, border widths, styles and colours, height and min/max sizes, and the logical margin/padding forms.
  • Every inherit in a flex or box context moves a frame in Chrome. I checked this by removing each declaration alone and diffing Chrome's boxes, in both directions (the CTX-PROOF 2/2: parity fixture proving rem lengths in the music player's flex and positioned contexts #180 min-height lesson).
  • The block-flow forms the probes use (flex-item and flex-container longhands on a block box) are no-ops in Chrome. Their proof is chrome-dual's computed values plus the unchanged layout.
  • No engine bug was found. Both cases pass linux-dragon-layout and chrome-dual.

Result

  • Profile rows: +100 per target (ios, android, web), compared with the merge base 72ebd37. Of these, 84 are inherit rows; the rest are the parent declarations in the contexts the fixture uses. Rows removed: 0. Status changes: 0.
  • Coverage-rank: native goes from 40.4% to 42.8% (iOS and Android), and web from 44.6% to 47.1%. 30 alias probes now compile on all three targets: -webkit-box-sizing, -webkit-justify-content, -webkit-align-items, -webkit-flex-direction, -webkit-flex-grow, -webkit-flex-wrap, -webkit-flex-shrink, -webkit-flex, -webkit-flex-flow, -webkit-flex-basis, -webkit-align-self, -webkit-align-content, -webkit-order, -webkit-column-gap, the margin and padding before/after/start probes, the border before/after probes and the logical size probes.
  • Music player: unchanged at 199 of 291 declarations on both natives. Only the wording of diagnostics changes, since proven-value lists now include inherit.

Tests changed, with reasons

  • aliases.test.ts, "an unsupported value says which alias set it": the example was -webkit-box-sizing: inherit, which this PR proves. It is now -webkit-box-sizing: unset, still without a row. Same intent: the message names the alias.
  • initial-line-width.test.ts latent finding: the test pinned border-top-width: inherit and initial as refused. inherit is now proven here (ctx-proof-inherit) and CASC 1: @supports decided at build time as Chrome 145 decides it; revert and revert-layer; CSS-wide keyword rows #200 proved initial (casc-css-wide), so the case now asserts both compile, and that each is backed by its web and iOS profile rows (block/ltr and block/rtl) naming its fixture (casc-css-wide[-rtl] for initial, ctx-proof-inherit[-rtl] for inherit). No other check was dropped.
  • hit-capture-identity needs no change, because the new files belong to a registered fixture.

What passed

  • pnpm regen reached a fixed point. The outputs are in their own commits, "Regenerate: pnpm regen".
  • pnpm typecheck: pass.
  • Targeted tests:
    • chrome-ports, registry-claims, profile-index, android-profile, north-star-accounting, north-star-tree, north-star-reference and hit-capture-identity: 61 tests pass.
    • vitest run packages/layout packages/dragon (the CI platform-free set): 98 files pass. The two pins above were then retargeted and pass (aliases and initial-line-width, 25 tests).
  • The device step is pending; the landing driver runs it.

Catch-up with #200 (CASC-1)

Merged origin/master 9b32f10 in 921361f. Only one file conflicted: packages/dragon/test/initial-line-width.test.ts. #200 had changed the latent-finding case to "inherit stays refused, initial compiles" and this branch had it as "initial stays refused, inherit compiles". The resolved case asserts that both compile, each backed by the profile rows and fixture that prove it (see Tests changed). The other shared files merged without conflict: packages/parity/src/fixtures.ts (it keeps both the casc and inherit-contexts groups) and the generated profiles (web, ios, android, merge=dragon-generated, which keep this side and are rebuilt by regen). After regen, both border-top-width:initial (casc-css-wide) and border-top-width:inherit (ctx-proof-inherit) rows are in the web and iOS profiles. pnpm install --frozen-lockfile passed.

Landing failure at c317973, and the fix (7f8b04e)

The landing driver's full test (https://github.com/compiled-run/dragoncss/actions/runs/37855032315, chrome shard 2/4) failed p6a-dash-oracle.test.ts > "the T116 skips drop no pixel the pre-T116 comparison checked" for ctx-proof-inherit and ctx-proof-inherit-rtl.

  • Cause: the fixture page was 339px tall in a 400x300 viewport. The dashed bp box (y 296 to 319) ran past the bottom of Chrome's capture. The current comparison skips pixels outside the raster, but the pre-T116 comparison counts them, so those pixels (bp:0..19,600 at DPR 2) were not a subset.
  • Fix: the fixture now stays inside the viewport. The test's invariant is unchanged.
    • .fc > div is 50 → 40px tall.
    • .fc2 > div is 60 → 40px tall.
    • .row is 30 → 20px tall.
    • The page is now 299px tall. bp sits at y 256 to 279 and hp at y 279 to 299.
  • Each inherit still moves a frame:
    • align-content: flex-end keeps 10px of free space.
    • justify-content: space-between keeps 15px.
    • align-self: center centres the 8px items in 20px.
  • What changed in the outputs: the regen changed only this fixture's captures and vectors. The support profiles are byte-identical, so no row was added or removed.
  • Fixture changed (reason): packages/parity/fixtures/ctx-proof-inherit.html, so that every border pixel is inside the Chrome capture.

What passed at 7d8d3f1

  • Regen on CI: pnpm ci:regen ctx-proof-2 --head 7f8b04e2af42942900458b9238944e640b11a9b5 pushed regen commit 7d8d3f1. https://github.com/compiled-run/dragoncss/actions/runs/37858809480
  • pnpm typecheck: pass (local).
  • Platform-free, local: 6 files in packages/dragon, 80 tests, all pass.
    • aliases, initial-line-width, casc, cascade-var, registry-claims, profile-index
  • Chrome group, through pnpm ci:test-files: all pass. https://github.com/compiled-run/dragoncss/actions/runs/37862382139
    • The targeted set: android-profile (5), casc (2), chrome-ports (13), registry-claims (8) and hit-capture-identity (6).
    • Every parity test file that iterates all fixtures or native cases:
      • p6a-dash-oracle (314) and parity (519)
      • device-lanes (60), dist (6), fixture-reader (7), glyph-calibration (8), hit-report (9), inline (13)
      • interaction-forced (3), line-breaks (11), media-runtime (8), media-sweep (19), native-host (326)
      • phrasing-blockified (3), pixel-reference (12), platform (12), pnt2-quads (5), pnt2-samples (7)
      • replaced-identity (3), replaced-paint (13), tree-faults (3), values (72)
  • pnpm pr:review 210 --once: exit 0, with 0 unanswered findings. It reports UNREVIEWED because Macroscope hit its monthly spending limit.
  • Earlier evidence at c317973 (before the fixture fix):
  • The device step is pending; the landing driver runs it.

🤖 Generated with Claude Code


Generated by Claude Code

thejackshelton and others added 22 commits October 5, 2026 17:23
…der-radius on iOS and Android, rebuilt from #80/#81 on master

Carries the radius half of #80 (paint-radius.ts, its harness cases, vectors input generator and host plumbing) and #81 (parsing,
computed values, lowering, emission, rounded background, border and clip stages, the radius-square plant, the pnt1-radius proofs
and fixtures) onto master's per-feature registries, and adds -webkit-border-radius with Chrome's legacy two-value parsing, the
radius-longhands fixture, and native refusals for rounded html, body and replaced elements.
…does not model rounded corners yet), the identity check strips the corner radii added since its base, and pnt1-radius covers radius-longhands
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: 61f24f0
Run: https://github.com/compiled-run/dragoncss/actions/runs/37382572332
…mily registers between pointer-events and transform, and a rounded box leaves the hit facts unchanged (the hit lane refuses rounded cases by name)
# Conflicts:
#	packages/parity/src/hit-capture.ts
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: 4094fb1
Run: https://github.com/compiled-run/dragoncss/actions/runs/37389802133
# Conflicts:
#	packages/layout/test/paint-seams.test.ts
#	packages/translate/harness/harness.ts
…orthands/radius.ts cites css_parsing_utils.cc ConsumeRadii); no uncited replaced_painter.cc reference
…job.sh pnpm regen: fixed point after 3 passes, 27 steps)
…acy shorthand (PNT1-radius), so it leaves the still-refused list
…rget, as Chrome drops it; any other encoding, form or position is refused

- css/at-rules/charset.ts: the handler, one line in AT_RULE_HANDLERS, and a 'drop' AtRuleOutcome the driver skips; the at-rule
  context carries its source text and whether it starts the sheet.
- Fixture group charset: charset-utf8 and charset-utf8-upper must render as charset-none in Chrome (dragon/test/charset.test.ts),
  and three rejects (another encoding, not at the start, single quotes).
- seams.test.ts: charset leaves the refused list with its own handler; the byte-identical pin is the base's hash without it.
…t-regen2: pnpm regen, fixed point): the charset fixtures' captures, emitted CSS, vectors and break vectors, the profiles (proof cases added, no row or status changed), the native lanes record, the hit facts and the translate corpus
…, margin, padding and border-width longhands

The coverage-rank alias probes (-webkit-justify-content, -webkit-flex-direction, -webkit-box-sizing, -webkit-margin-before and the rest, about 320 reach-points) are refused only because no fixture used inherit on these longhands; the resolver handles inherit the same way for every longhand. One fixture in ltr and rtl: an inheriting flex container (direction, wrap, justify, align-items, align-content, column-gap), inheriting flex items (grow, shrink, basis, align-self, order), inherited box-sizing, margins, paddings, border widths and their logical forms, each checked in Chrome to move a frame, plus the block-flow forms the probes use (computed values). Group inherit-contexts, one GROUPS line
… (not-flex-container, the context the alias probes key), border style and colour, height and min/max sizes inheriting
…it (now proven by ctx-proof-inherit) to unset; border-top-width: inherit compiles (proven by ctx-proof-inherit) while initial stays refused
…and max-width inherits in its own child where the inherited value decides the frame (#210 review, Low: the shared child left min-height, max-height and min-width unbound); each checked in Chrome to move a frame in both directions
@thejackshelton

Copy link
Copy Markdown
Contributor Author

Precomputed review (Low, ctx-proof-inherit.html:31, .hp min-height, max-height and min-width inherits did not bind): fixed in d3aedde, with outputs in 3c90719.

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: 6279b61
Run: https://github.com/compiled-run/dragoncss/actions/runs/37848210107
@thejackshelton thejackshelton added the landing-failed The landing driver stopped this PR; see its comment label Oct 8, 2026
@thejackshelton

Copy link
Copy Markdown
Contributor Author

Landing stopped at step test (pnpm land)

the CI full test run https://github.com/compiled-run/dragoncss/actions/runs/37855032315 concluded failure; failed jobs: chrome (2) (vitest run (every other file, shard 2/4)), summary (Every test's state, and the failures):
FAILED packages/parity/test/p6a-dash-oracle.test.ts > the T116 skips drop no pixel the pre-T116 comparison checked ctx-proof-inherit-rtl: the pre-T116 checked pixels are a subset at every DPR
FAILED packages/parity/test/p6a-dash-oracle.test.ts > the T116 skips drop no pixel the pre-T116 comparison checked ctx-proof-inherit: the pre-T116 checked pixels are a subset at every DPR

Fix the cause, then hand #210 back to the landing queue with the new clean head.

@thejackshelton thejackshelton removed the land-ready Reviewed clean; the Mac landing driver takes it label Oct 8, 2026
claude and others added 2 commits October 8, 2026 23:19
…339px tall, so the dashed bp border ran past Chrome's raster and p6a-dash-oracle's pre-T116 subset proof failed at landing); the flex boxes are 10-20px shorter and keep free space, so every inherit still moves a frame

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WSkSiXMPXTAsNpS9BD9LDR
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: 7f8b04e
Run: https://github.com/compiled-run/dragoncss/actions/runs/37858809480

Copy link
Copy Markdown
Contributor Author

LAND-READY
READY ctx-proof-2:210:7d8d3f1c3b46faa45e63cc6f778d543b2f32e0f8

Re-handed after the landing failure at c317973 (p6a-dash-oracle pre-T116 subset for ctx-proof-inherit[-rtl]: the fixture page overflowed the 400x300 viewport). Fix 7f8b04e keeps the page inside the viewport; the invariant is untouched.

Lane receipt (PM session A): pnpm typecheck pass; platform-free dragon {aliases,initial-line-width,casc,cascade-var,registry-claims,profile-index} pass (local, at 7d8d3f1); ci:regen https://github.com/compiled-run/dragoncss/actions/runs/37858809480 (regen commit 7d8d3f1); ci:test-files https://github.com/compiled-run/dragoncss/actions/runs/37862382139 (tested 7d8d3f1 at 7d8d3f1: targeted set plus every fixture-wide parity file incl. p6a-dash-oracle 314, parity 519, native-host 326, device-lanes 60; 0 failed); pr:review 210 --once exit 0 (UNREVIEWED: Macroscope spending limit).

Independent Claude review of c317973..7d8d3f1 (the fixture fix and its regen; checks that each inherit claim is still proven), Medium or higher only:

{"pr":210,"head":"7d8d3f1c3b46faa45e63cc6f778d543b2f32e0f8","findings":[]}

Generated by Claude Code

@thejackshelton thejackshelton added the land-ready Reviewed clean; the Mac landing driver takes it label Oct 9, 2026 — with Claude
@thejackshelton thejackshelton removed the landing-failed The landing driver stopped this PR; see its comment label Oct 9, 2026
thejackshelton and others added 8 commits October 8, 2026 19:48
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
@charset "utf-8"; at the start of a sheet is a no-op on every target (Chrome drops it); other encodings and positions refused
PNT1-radius: border-radius, its corner longhands and -webkit-border-radius drawn natively on iOS and Android (supersedes #80, #81)
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
@thejackshelton
thejackshelton merged commit 51a4888 into master Oct 9, 2026
5 of 6 checks passed
@thejackshelton
thejackshelton deleted the ctx-proof-2 branch October 9, 2026 02:48
thejackshelton pushed a commit that referenced this pull request Oct 9, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WSkSiXMPXTAsNpS9BD9LDR
@thejackshelton thejackshelton removed the land-ready Reviewed clean; the Mac landing driver takes it label Oct 9, 2026
thejackshelton pushed a commit that referenced this pull request Oct 9, 2026
…-longhands: no source conflicts; generated files keep this side until the CI regen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WSkSiXMPXTAsNpS9BD9LDR
thejackshelton pushed a commit that referenced this pull request Oct 9, 2026
…flicts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WSkSiXMPXTAsNpS9BD9LDR
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.

2 participants