Skip to content

regen: default --jobs 4 (forced regen 787 s -> 467 s, same outputs) - #188

Merged
thejackshelton merged 47 commits into
masterfrom
regen-default-jobs
Oct 5, 2026
Merged

thejackshelton merged 47 commits into
masterfrom
regen-default-jobs

Conversation

@thejackshelton

Copy link
Copy Markdown
Contributor

What changed

  • scripts/regen.ts: DEFAULT_JOBS goes from 2 to 4, and the header comment now says "default 4". --jobs <n> and DRAGON_REGEN_JOBS still 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:

--jobs wall result
2 787 s 1 pass, 23 steps run, git status clean
4 467 s 1 pass, 23 steps run, git status clean

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.
  • No regen: scripts/regen.ts is not an input of any step, and the default changes how many steps run at once, not what they write. The forced --jobs 4 run above is the byte-identity proof.

No tolerance, check, test or fixture changed.

🤖 Generated with Claude Code

thejackshelton and others added 30 commits October 4, 2026 13:52
… 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)
…-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)
thejackshelton and others added 17 commits October 5, 2026 12:08
…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)
@thejackshelton
thejackshelton merged commit 96cdafe into master Oct 5, 2026
5 checks passed
@thejackshelton
thejackshelton deleted the regen-default-jobs branch October 5, 2026 19:50
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