The stroke-paint rung: the paint grammar celled as twins, the context refusal proven load-bearing - #81
Conversation
… refusal proven load-bearing Thirteen new Chromium-149-baked cells (suite 217 -> 230), every one a byte-identical twin. Seven share one oracle -- a hex stroke, its name steelblue, the CSS declaration, currentColor against the color hint, the CSS-over-attribute precedence pair, the invalid-declaration fallback, and a dead url() reference falling back to the same color. Five share the fill-alone oracle -- stroke none, an invalid paint dropping to that same initial none, a dead reference with a none fallback or no fallback at all, and a valid stopless gradient whose fallback stays inert. The thirteenth bakes the gradient stroke's CSS spelling onto the committed attribute cell's exact bytes. No checklist row ticks, on purpose. The <paint> grammar's remaining members -- context-fill and context-stroke -- were measured both ways: on a plain shape Chromium paints them as nothing, but a <use> clone resolves them against the use site's own paint (byte-identical to the authored color), and markers do the same. This slice admits <use>, so the engine's refusal of both keywords is load-bearing, not over-refusal: lowering the plain-document nothing would silently mispaint every instantiated shape. The refusal gains its register fixture (declared at the clone's own path), and the inline guard grows the attribute and use-clone spellings. Also measured, engine and Chromium agreeing pixel-for-pixel: a color through var() in every ingress (colors carry no device basis), keyword case, transparent, and the CSS-wide keywords -- including revert-layer, which rolls back one layer so the presentation hint survives where initial and revert land on none. An escaped paint spelling refuses under the stroke patrol's coarse scan where Chromium paints it: declared over-refusal, never a wrong pixel. The pre-landing ritual affirmed the split, and its findings -- a record row stamping (measured) on unmeasured keywords, and a statement-of-record clause outrunning its cells -- were applied before this commit.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reached
Next review available in: 1 minute 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?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (27)
📒 Files selected for processing (8)
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. Comment |
What
Checklist-loop iteration 5 — the
stroke(<paint>) twin rows, the declared Next from #43. A split, not a tick, exactly as scoped: the checklist is deliberately untouched, and the verify ritual's tick-law audit affirmed the split after arguing both directions.The cells (suite 217 → 230, every one a byte-identical twin)
#4682b4, its namesteelblue, the CSS declaration,currentColoragainst thecolorhint, an author declaration beating a different attribute, an invalid declaration ceasing to exist so the attribute survives, and a deadurl()reference falling back to the same color.stroke="none", an invalid paint dropping to that same initialnone(the initial value ofstrokeisnone, baked rather than asserted), a dead reference with an explicitnonefallback, a dead reference with no fallback, and a valid but stopless gradient whose fallback stays inert — the fill-side reference law, restated on the stroke.svg-gradient-stroke-css— the gradient stroke's CSS spelling bakes onto the committed attribute cell's exact oracle bytes.Measured beyond the cells, engine ≡ Chromium pixel-for-pixel (recorded as measured-not-celled): a color through
var()in every ingress — colors carry no device basis, so indirection is honest here where iteration 4's width had to refuse it — keyword case,transparent, and the CSS-wide keywords includingrevert-layer, which rolls back one layer so the presentation hint survives whereinitial/revertland onnone. An escaped paint spelling refuses under the stroke patrol's coarse whole-attribute scan where Chromium paints it: declared over-refusal, never a wrong pixel.Why no tick: the context keywords are load-bearing
The SVG2 grammar is
none | <color> | <url> [none | <color>]? | context-fill | context-stroke. The context keywords were measured both ways:<use>— which this slice admits — a clone'sstroke="context-fill"resolves against the use site's own fill (byte-identical to the authored color), and markers do the same.So the engine's refusal of both keywords is load-bearing, not over-refusal: lowering the plain-document nothing would silently mispaint every instantiated shape. Unlike iteration 4's units, the context keywords have no own checklist row to carry them — the header's partial-admission rule pins both
strokerows unchecked. The refusal gains its register fixture (unsupported/svg-stroke-context-paint.svg, the use-clone form, declared at the clone's own path) and the inline guard grows the attribute and use-clone spellings of both keywords. The remaining work is a context-paint capability rung.Verification
The
verify-rungritual ran adversarially against the split itself. Repro: all 22 probe pairs reproduced on Chromium 149.0.7827.55, bake verified 230 oracles live, gate 4/4 at the byte-exact bar, 28 suites green, manifests additions-only with all hashes recomputed against disk. The audit's findings were applied before commit: a README row that stamped "(measured)" on unmeasured CSS-wide keywords — the verifier caughtrevert-layer's distinct restore semantics, which this session then re-measured and recorded precisely — and a statement-of-record clause whose "celled in both spellings" outran the cell inventory, now enumerated in the iteration-4 form. Stroke-cell count refreshed to its true 69-of-70.