Skip to content

The stroke-width saturation rung: direct overflow lands, precision aliases stay split - #89

Merged
softmarshmallow merged 2 commits into
mainfrom
rung/stroke-width-percentage-saturation
Aug 20, 2026
Merged

The stroke-width saturation rung: direct overflow lands, precision aliases stay split#89
softmarshmallow merged 2 commits into
mainfrom
rung/stroke-width-percentage-saturation

Conversation

@softmarshmallow

Copy link
Copy Markdown
Member

Outcome

This is the stroke-width percentage-saturation capability rung.

  • Four Chromium 149 cells land: attribute/CSS twins for the main saturation
    matrix and for the cap/transform matrix. The primitive corpus moves
    280 → 284; all four additions are exact and add no tolerance.
  • An unambiguous direct extreme percentage now resolves to the maximum finite
    width and crosses rframe unchanged. Its ink remains painter-shaped: join,
    miter limit, cap, transform, topology, and an ordinary dash cycle all matter.
  • The former broad percentage-overflow refusal graduates. A narrower
    stroke-width percentage precision alias refusal replaces it, so the
    refusal register remains at 56.
  • Both stroke-width checklist twins deliberately remain unchecked. Valid
    Chromium-honored source values can collapse to one pinned-Stylo percentage
    fact, and that class has no own checklist row: this is the The stroke-paint rung: the paint grammar celled as twins, the context refusal proven load-bearing #81
    SPLIT outcome, not a full-grammar tick.

Measured verdict

Chromium evaluates a pure percentage in the browser's percentage path, with
the authored percentage multiplied by the normalized-diagonal basis before
division by 100. Positive intermediate overflow becomes the maximum finite
width; it is not semantic stroke absence.

The discriminating matrix establishes:

  • an unambiguous finite 5e36% branch and direct saturated 3.4e38% branches;
  • miter limit 2 paints while the next representable value drops;
  • round/bevel, dash, native box/ellipse, open-corner, and closed-contour routes;
  • round and square caps drop under one-axis compression but both paint under
    two-axis compression, each with an independently visible pass;
  • attribute and CSS source twins are pixel-identical.

The remaining source-precision gap is also measured rather than inferred.
Adjacent authored values can share a computed Stylo bucket while Chromium
gives them distinct used widths. A non-f32 decimal around 57384.265625%
differs by 864 pixels, and non-identity percentage math reaches further
results after Stylo erases its operation history—including length terms that
cancel to zero before a pure percentage remains. These cases refuse by the
stable precision-alias name across attribute, inline, stylesheet, and inherited
ingresses. Identity calc(N%) remains admitted; genuinely mixed
length/percentage values retain their established mixed-calc refusal.

Contract and consumer

rframe continues to carry the exact finite f32 width, cap, join, miter, and
dash facts. Only the derived direction-free coverage reach widens to a finite
f64 value; the backend-free architecture guard remains green.

n0 keeps painter input unchanged. Its damage projection computes wide reach,
also encloses sequential-f32 affine arithmetic, intersects the finite frame,
then outward-encodes RectF. Rect/Ellipse coverage additionally encloses the
actual composed box world (0..w / 0..h); Path keeps its absolute-coordinate
route. Exact cancellation and box-composition bit regressions guard both seams.

The generic damage-union representation remains separately tracked by
#87. The pre-existing fill-only box-world analogue found by this
audit is #88. The text font-basis patrol remains
#82.

Scratch probe testimony

Run from fixtures/web-first/ under the pinned Chromium capture posture:

just probe /private/tmp/stroke-width-extreme-percentage-probe.ts
just probe /private/tmp/extreme-width-architecture-probe.ts
just probe /private/tmp/stroke-width-percentage-precision-probe.ts
just probe /private/tmp/stroke-width-percentage-saturation-discriminator-audit.ts
just probe /private/tmp/stroke-width-detector-false-negative.ts
just probe /private/tmp/stroke-width-mixed-zero-provenance.ts

The final discriminator SHA-256 is
5270450f65f7e29ebb0a8e9d8730d89a0a0991fb423f5a551addb9174533e15f;
the raw-f64 and mixed-zero matrices are respectively
0e13545f3b02ecd0870c4c2a6fd6fdff2fab84f0c59320f51df61ccc17a65ba3
and
c3cc70ca099462e3906d0019fc724fa9d773ccb0a5a5c50ae26f0b3c4d509ab5.
All reproduce under Chromium 149.0.7827.55.

Verification

  • just bake — 284/284 verified, never-overwrite
  • just gate — 4/4
  • just status — fresh and idempotent
  • cargo test -p rframe -p n0 -p websem
  • cargo test -p n0_cli
  • cargo check -p rframe -p n0 -p websem -p n0_cli
  • focused clippy for rframe tests plus n0/websem libraries with warnings denied
  • saved verify-rung roles rerun after the grown fixes: TICK+LAW PASS, REPRO PASS
  • git diff --check

No checklist/FLIP file changes, no conformance score produced or inspected.

@vercel

vercel Bot commented Aug 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nothing Ready Ready Preview Aug 20, 2026 11:09am

Request Review

@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@softmarshmallow, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 49 minutes

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5e79f70d-08d2-4f7d-86af-95f82ee6fa7e

📥 Commits

Reviewing files that changed from the base of the PR and between 07694a6 and ebf6509.

⛔ Files ignored due to path filters (10)
  • fixtures/web-first/chromium/svg-stroke-width-percentage-saturation-attr.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-stroke-width-percentage-saturation-cap-attr.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-stroke-width-percentage-saturation-cap-css.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-stroke-width-percentage-saturation-css.png is excluded by !**/*.png
  • fixtures/web-first/svg-stroke-width-percentage-saturation-attr.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-stroke-width-percentage-saturation-cap-attr.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-stroke-width-percentage-saturation-cap-css.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-stroke-width-percentage-saturation-css.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-stroke-width-percentage-overflow.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-stroke-width-percentage-precision-alias.svg is excluded by !**/*.svg
📒 Files selected for processing (14)
  • crates/n0/src/glyphless.rs
  • crates/n0_cli/README.md
  • crates/rframe/README.md
  • crates/rframe/src/stroke.rs
  • crates/rframe/tests/stroke_reach.rs
  • crates/websem/src/svg.rs
  • crates/websem/tests/strokes_contract.rs
  • crates/websem/tests/unsupported_corpus.rs
  • docs/wg/consolidation/svg-engine-of-record.md
  • fixtures/web-first/README.md
  • fixtures/web-first/STATUS.md
  • fixtures/web-first/oracle-bake.json
  • fixtures/web-first/primitives.json
  • fixtures/web-first/unsupported/README.md
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch rung/stroke-width-percentage-saturation

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@vercel
vercel Bot requested a deployment to Preview August 20, 2026 11:09 Abandoned
@vercel
vercel Bot requested a deployment to Preview August 20, 2026 11:09 Abandoned
@softmarshmallow
softmarshmallow merged commit 3a55ac2 into main Aug 20, 2026
15 checks passed
@softmarshmallow
softmarshmallow deleted the rung/stroke-width-percentage-saturation branch August 20, 2026 11:34
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