Repository navigation
regen: default --jobs 4 (forced regen 787 s -> 467 s, same outputs) - #188
Merged
Merged
Conversation
… conflicts resolved beside ANIM-b1 (web-css animations and the interaction state rules both kept) and INL; derived-count pins left at master's values until the regen
…inations per app assignment (R4, R5, R7), the web hover gate (R3) and the fail-closed hit model refusal (R13) selectors.ts lifts :active (focus-within and the rest stay refused); match.ts's InteractionState gains active. analysis/interaction.ts builds, per case, the hover chains, active chains and focus values (pointer focus without focus-visible, keyboard focus with it) from the candidates found to a fixed point, resolves every combination in full and stores each distinct resolution once (R5: a :focus that changes nothing is the none state); more than 256 distinct reachable states in one app assignment, or more than 4096 combinations, are refused naming SELD-R2s (R7); the states never count against the app state table, so seld-r2a's MAX_STATE_ASSIGNMENTS count is gone, and so is combinedStateRefusal (combined states compile). Each state records what Chrome's CSS.forcePseudoState forces to reach it (a real pointer's whole chains and focus), which the parity forced cases use. web-css.ts emits a condition per combination a state stands for, and wraps every condition that needs a :hover candidate in @media (hover: hover); a condition with :hover candidates only off is also emitted without them under not all and (hover: hover), so a tap never leaves a hover style on a phone (R3). project.ts refuses, on native, every interaction rule in a case with a pointer-reachable state and a compiled paint fact outside HIT_MODELLED (R13, fail closed, naming SELD-R2b), after the value checks so a value the profile refuses does not count. Plants: comboStateDropped, webHoverUngated, hitUnmodelledNotRefused (caught in interaction.test.ts). Fixtures: interaction-active and interaction-combo (forced cases), reject-interaction-focus-within and reject-interaction-cap; reject-interaction-active is removed because :active now compiles. docs/decisions.md records R1 to R16 and amends "Hover and focus". Test retargets keeping intent: selectors.test and compile.test refusal pins move from :active to :checked and :focus-within; css-escapes judges div:\68over against Chrome and pins the escaped :focus-within refusal (selectors 59 -> 60); interaction-forced.test lists the four forced fixtures and the new state keys.
… 2028 -> 2060 in device-vectors and translate tests (one hit vector per layout case per DPR: 4 interaction fixtures x 2 directions x 4 DPRs); glyph-clearance pins gain the new cases' lines (DRAGON_PIN_WRITE=1 vitest run packages/parity/test/pixel-reference.test.ts; additive, no existing line changes); the web output's state-member list fails loudly on a state that stands for no combination
…iOS 26.5 runtime, host-arch Android image, CI memory reserve, outcome merge)
…candidate 26.5 resolves to
…vice-run.ts pins the AVDs
…-case captures of the interaction fixtures, emitted CSS, vectors, hit vectors, profiles, north-star check, tw:sweep and the rest of the chain
…on the Mac (device-ci.ts vectors); merge needs both halves; lane records name their hosts (producedOn)
…ns in interaction rules (no silent drop on web); keep color: inherit under an animated colour in state rules; refuse interaction rules on ios and android outside the parity lanes until the native runtime (PR 3, PR 4); R13 counts an overflow value computed from a refused partner as refused and runs only in the lanes; isFocusable follows HTML for invalid tabindex and input type=hidden
…pares each set's model; LAND_ARCH_REBASELINE for the PR that switches, exact failure sets); cli/device-ci.ts in the evidence stamp; a refused merge exits 3 and a blocked device fails its job; CI checks Xcode and the host toolchains; the compare step fails on a difference
…tionLanes; a user's compile refuses its interaction rules there) proves no ios or android profile row: the record lists those targets (laneOnlyNative) and the parity pipeline gives such a case no iOS keys, as the web-only fonts cases
…rth-star check, profiles and the rest of the chain after the native refusal, the interaction-rule animation refusal and no native rows from lane-only cases
…138): SELD-R2's faults move to faults/seld-r2.ts (one FAULT_GROUPS line), the interaction group is one sorted GROUPS line, master's side of the central files and tests; project.ts keeps both nativeLanes and interactionLanes; p1/hit pins carried at 2060 until the regen re-derives them
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: 6877d7c Run: https://github.com/compiled-run/dragoncss/actions/runs/37275532666
…c-only android vectors lane; merge takes the CI outcomes alone
…ors): master's translate.test and device-vectors.test check hit against p1-floor.json, so the exact 2060 hit pins are dropped; project.ts keeps both REPL-a's images and SELD-R2's laneOnlyNative in the internal record
…irst and only reports the comparison (its tree's lanes are "not run"; the driver judges against the previous position); compare in device-ci.ts with a test on a not-run tree; the android vectors lane records and binds its ABI
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: dcd9110 Run: https://github.com/compiled-run/dragoncss/actions/runs/37325951383
… hit vectors (DRAGON_FLOOR_WRITE=1 vitest run packages/translate/test/translate.test.ts, after the CI regen; only grows)
…evice code the evidence stamp digests (device-ci.ts, cli/device-ci.ts)
…, #182): project.ts runs NA-NATIVE's split, then the interaction refusals; capture.ts keeps CHROME_PAGES-parallel fixtures with SELD-R2's forced cases; hit-capture IDENTITY_NEW names both the interaction and the transform fixtures; floors are the max per key
…() now compiles under the enforced profiles, so R13 refuses there as in derive mode (spec §10's owned rise, cleared by SELD-R2b)
…ength animation on an img was dropped on native rt-animator.ts lengthBase (findBox) and patchInput (patchBox) walked only box children, so an img or iframe, a replaced leaf since REPL-a (#72), was neither read for its length endpoints nor written with the frame's lengths: a width, height, margin or padding transition on an img ran in the web output and silently did nothing on iOS and Android. findStyle and patchChild now treat a replaced leaf's style as a box's (the same shape as FORM-a's control fix in #77, 5077d8b, which is not on master yet). rt-hit.ts already lists a replaced leaf as its own target (replacedNode, rt-hit.test "hitTableOf hit-tests a replaced element as a childless box"); no change there. Test: rt-animator.test reads an img's width and margin-left and patches its width (fails without the fix).
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: cbfa388 Run: https://github.com/compiled-run/dragoncss/actions/runs/37341041399
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
CI-OFFLOAD 3-4: device lanes on GitHub runners (device-lanes.yml)
SELD-R2 PR 1: :hover, :active, :focus and :focus-visible compiled as per-assignment interaction states (R3, R4, R5, R7, R13)
Commands: pnpm regen; pnpm run parity:devices; pnpm regen
Runtime animator reads and patches replaced leaves (img, iframe)
Commands: 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.
What changed
scripts/regen.ts:DEFAULT_JOBSgoes from 2 to 4, and the header comment now says "default 4".--jobs <n>andDRAGON_REGEN_JOBSstill override it.Why it is safe now
Measurement
Forced full regens (
pnpm regen --force --jobs N) on origin/master, one after the other in one heavy-lease slot (job regen-speed-jobs-measure), with load 16–46 from other lanes:The outputs are byte-identical at both settings.
What passed
pnpm typecheck: pass, after merging origin/master.vitest run packages/parity/test/regen.test.ts: pass.scripts/regen.tsis not an input of any step, and the default changes how many steps run at once, not what they write. The forced--jobs 4run above is the byte-identity proof.No tolerance, check, test or fixture changed.
🤖 Generated with Claude Code