Skip to content

CTX-PROOF 2/2: parity fixture proving rem lengths in the music player's flex and positioned contexts - #180

Merged
thejackshelton merged 29 commits into
masterfrom
ctx-proof-rem
Oct 5, 2026
Merged

thejackshelton merged 29 commits into
masterfrom
ctx-proof-rem

Conversation

@thejackshelton

@thejackshelton thejackshelton commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

CTX-PROOF 2/2 (music player). The north-star check refuses 19 declarations per native target with DRAGON_UNPROVEN_CONTEXT. Sixteen of them are rem lengths in contexts where px (or calc) was proven and rem had no fixture. This PR adds one parity fixture that uses those exact values in those contexts. No engine, compiler, gate or tolerance change. Profile rows come from regen's profile-rows step.

What changed

  • New fixture group rem-contexts (packages/parity/src/fixture-groups/rem-contexts.ts; named so its GROUPS line is not next to CTX-PROOF 1/2: parity fixtures proving auto margins and auto insets in block, flex and positioned contexts #179's ctx-proof line, one line in GROUPS) with ctx-proof-rem, run in ltr and rtl:
    • padding: 0.5rem (and a four-value rem padding) plus min-height: 2.5rem on position: relative flex-row items, as on .library-button.
    • So these values change a frame, row r3 uses align-items: flex-start, so each item's height comes from its content:
      • b3's content is 30px, so min-height: 2.5rem sets its height to 40px.
      • b4 has no min-height; padding-bottom: 1.5rem makes it 42px.
      • b5 is 54px: padding-bottom: 1rem under a 30px child.
    • These come from Chrome in both directions, and the engine lane matches them. The stretched row r1 alone could not catch an ignored min-height or a wrong rem padding-bottom (review of 061e8d0).
    • padding: 1rem (and a four-value rem padding) on absolute boxes in a block containing block, as on .animate-track.
    • width: 18rem, max-width: 18rem / 12.5rem on flex-column items, as on .time-control and .song-title.
    • left: 1rem, top: 0.75rem on a static flex-column item. That is the context .mini-video-shell reaches once its position: fixed is blanked. The fixture proves the static case (insets have no effect, Chrome-equal). The fixed box itself stays refused under its own diagnostic until POSX-f.
    • min-width: 2.5rem / 6rem on flex-row items, as on .time-control p.

Not covered (stay refused, for a reason other than a missing fixture)

Verification

  • A one-off runner (not committed) ran the fixture through runFixture with live Chrome (liveAuthored, profiles derive). Both cases pass linux-dragon-layout and chrome-dual. Their ios keys include all 16 refused keys, in both directions.
  • registry-claims.test.ts: pass. pnpm typecheck: pass.
  • Outputs come from the regen label on CI, in their own commit.

Result (on the tree merged with master)

  • Profile rows: +28 per target (ios, android, web: <length-rem> for padding-*, min-height, min-width, width, max-width, left and top in the contexts above, ltr and rtl). Rows removed: 0. Status changes: 0.
  • north-star-check.json: DRAGON_UNPROVEN_CONTEXT goes from 19 to 3 per native target (web from 21 to 5). Errors go from 286 to 238. Declarations supported on both native targets go from 193 to 196 of 289 applicable. The other refused declarations still carry a different error, such as position: fixed or transitions.
  • Coverage-rank headline: unchanged at 37.4% native. None of its probes uses rem in these contexts.
  • After regen: registry-claims, north-star-accounting, north-star-tree and profile-index tests: 18/18 pass. pnpm typecheck: pass.

Fixtures added

This adds 1 new fixture. No fixture, test, check or tolerance was changed or removed.

🤖 Generated with Claude Code

…ring the CI run; merge both halves with device-ci.ts; the local run until master has device-lanes.yml
…h (a leftover never blocks the next run; a failed delete is a warning); runs of master's workflow only; a refused merge fails with its own reasons; cancel the CI run and remove rejected outcomes on failure
…h driver's buildPosition, judged against the previous position; all device lanes on CI (no Mac half)
…upervisor cancels it and deletes the scratch branch after an interrupt (abandonInflight, tested); merge origin/master
… flex and positioned contexts

ctx-proof-rem (both directions): padding and min-height in rem on relative flex-row items, padding in rem on absolute
boxes, width, max-width, left and top in rem on flex-column items, min-width in rem on flex-row items. Passes
linux-dragon-layout and chrome-dual against live Chrome.
@thejackshelton thejackshelton added the regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back label Oct 5, 2026
thejackshelton and others added 2 commits October 5, 2026 11:13
…e builder records its own CI run in flight, and stopping it cancels that 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: 8b47a5c
Run: https://github.com/compiled-run/dragoncss/actions/runs/37335981744
@github-actions github-actions Bot removed the regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back label Oct 5, 2026
@thejackshelton thejackshelton added the regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back label Oct 5, 2026
@thejackshelton thejackshelton added regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back and removed regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back labels Oct 5, 2026
thejackshelton and others added 2 commits October 5, 2026 12:14
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: f24f174
Run: https://github.com/compiled-run/dragoncss/actions/runs/37342969009
@github-actions github-actions Bot removed the regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back label Oct 5, 2026
…ve flex-row items (review of #180)

A flex-start row: b3's content is 30px, so min-height: 2.5rem sets its 40px height; b4 (no min-height) is 42px from
padding-bottom: 1.5rem; b5 is 54px with padding-bottom: 1rem under a taller child. The stretched row r1 could not
detect an ignored min-height or a wrong rem padding-bottom.
@thejackshelton thejackshelton added the regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back label Oct 5, 2026
thejackshelton and others added 2 commits October 5, 2026 12:56
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: cc53581
Run: https://github.com/compiled-run/dragoncss/actions/runs/37349291047
@github-actions github-actions Bot removed the regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back label Oct 5, 2026
@thejackshelton thejackshelton added regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back and removed regen Run pnpm regen on CI (regen-on-ci.yml) and push the outputs back labels Oct 5, 2026
@thejackshelton thejackshelton added the landing-failed The landing driver stopped this PR; see its comment label Oct 5, 2026
@thejackshelton

Copy link
Copy Markdown
Contributor Author

Landing stopped at step test (pnpm land)

packages/parity/test/hit-capture-identity.test.ts, rerun alone on a quiet machine, exited 1 (log /tmp/land-180-test-solo-1.log)
 ❯ packages/parity/test/hit-capture-identity.test.ts:64:56
     62|   it('holds only SELD-R1b fixtures\' files beyond the base', () => {
     63|     const extra = IDENTITY_ROOTS.flatMap(walk).filter((p) => (p.endsWi…
     64|     expect(extra.filter((p) => !IDENTITY_NEW.test(p))).toEqual([]);
       |                                                        ^
     65|     expect(extra.length).toBeGreaterThan(0);
     66|   });

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯


 Test Files  1 failed (1)
      Tests  1 failed | 5 passed (6)
   Start at  14:31:45
   Duration  2.64s (transform 1.54s, setup 0ms, import 2.07s, tests 502ms, environment 0ms)

Found by bisecting the batch #188 #180 #176 #135 (3 proofs): master with #188 passes, adding #180 fails.

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

thejackshelton and others added 3 commits October 5, 2026 15:15
@thejackshelton
thejackshelton merged commit a1f4815 into master Oct 5, 2026
5 checks passed
@thejackshelton
thejackshelton deleted the ctx-proof-rem branch October 5, 2026 21:21
@thejackshelton thejackshelton removed the landing-failed The landing driver stopped this PR; see its comment label Oct 5, 2026
thejackshelton added a commit that referenced this pull request Oct 5, 2026
…proven in block flow by #179 and #180 together) to margin-right: 6mm

margin-right:<length-mm> is proven in flex-row and not in block flow, so the fixture still blocks with
DRAGON_UNPROVEN_CONTEXT; the fixture reader keeps checking the BASE text through RETARGETED_AFTER_BASE.
thejackshelton added a commit that referenced this pull request Oct 5, 2026
…rived 'beyond the base' check and #180's ctx-proof- entry (IDENTITY_LATER dropped: #189 covers MQ-R0's media fixtures); IDENTITY_RULED and its hash override stay
thejackshelton added a commit that referenced this pull request Oct 5, 2026
…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.
thejackshelton added a commit that referenced this pull request Oct 5, 2026
…st) into form-a-v2. rt-animator.ts keeps both sides: findStyle and patchChild walk control boxes (FORM-a) and read and patch replaced leaves (master's img/iframe fix); rt-animator.test.ts imports both helpers
thejackshelton added a commit that referenced this pull request Oct 6, 2026
…st) into inl1a-lowering. hit-capture-identity.test.ts takes master's registered-fixture check and keeps INL1a's: no file beyond the base belongs to a base fixture (now judged by fixtureOf, which knows the ~ixN and #N suffixes). glyph-clearance-pins.json keeps both sides' entries. rt-animator.ts patchChild (master's replaced-leaf patch) takes INL1a's inline children and passes them through unchanged, as INL1a's patchBox did
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