FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

websem: admit same-document static SVG markers by softmarshmallow · Pull Request #115 · gridaco/nothing · GitHub

websem: admit same-document static SVG markers - #115

Merged
softmarshmallow merged 2 commits into
mainfrom
rung/svg-marker-core
Aug 28, 2026
Merged

websem: admit same-document static SVG markers#115
softmarshmallow merged 2 commits into
mainfrom
rung/svg-marker-core

Conversation

Copy link
Copy Markdown
Member

Verdict

ADMIT/SPLIT, with no checklist closure.

This lands a bounded M1 profile for same-document static SVG vertex markers on <line>, <path>, <polyline>, and <polygon>. The <marker> element, its three direct presentation attributes, the four CSS property rows, and the six marker-resource attribute rows stay open for the wider source, cascade, grammar, dynamics, and external-resource surface.

What landed

  • Retains Blink-style authored marker topology beside the existing raster path projection, including whole-path start/end selection, subpaths, close back-patching, curve/arc tangents, move-only paths, one-point point lists, and valid erroneous prefixes.
  • Resolves direct inherited marker-start, marker-mid, and marker-end references through one same-document first-id table. CSS ingress remains quarantined at the pinned Stylo cap; no matcher was added around the cascade.
  • Resolves the admitted marker viewport, units, reference point, orientation, viewBox, and preserveAspectRatio mapping before the frame.
  • Compiles one checked static solid/context-solid marker source transactionally and flattens instances to ordinary source-neutral frame items.
  • Adds a generic rframe::ClipEdgeMode fact because Chromium marker viewports use hard clip edges; existing geometric clips keep anti-aliasing by default.
  • Preserves client transform, stroke-width scaling, opacity, clip, mask, and filter composition.

Measured crux and law audit

Chromium 149.0.7827.55 was probed through the shared hash-pinned capture module, and every candidate was rendered through both actual n0 admissions.

The raster crux was decisive: changing the marker viewport from hard to anti-aliased clipping changes Chromium pixels. A deliberate Hard → AntiAliased perturbation made just gate fail on 17 named marker cells; restoring the hard edge returned the full gate to green.

The manual law pass found and fixed two silent-pixel classes before review:

  1. Rendering declarations on the marker root inherit into its source. Root shape-rendering="crispEdges" differs from default by 128 pixels at Δ255; root paint-order="stroke fill" differs by 121 pixels at Δ188. Both admissions previously painted the default. A stable marker refusal now guards attribute and inline-style ingress.
  2. Missing ids, wrong-kind targets, and an unselected marker kind are Chromium-equivalent to none for client opacity composition. A selected real marker still chooses combined composition when its viewport is zero or source is empty. The former route isolated every syntactically present reference, making the amplified missing/wrong controls 997 pixels at Δ2 wrong and the unselected-mid control 380 pixels at Δ2 wrong. Selection now requires an authored position kind resolving to an actual marker resource; five committed cells guard both sides.

Evidence

  • 90 new Chromium-baked marker cells, byte-exact in strict and best-effort.
  • Corpus: 1,026 Chromium-baked cells + 16 sampled frames.
  • Named refusal register: 189 rows. The former broad marker refusal graduates; 18 focused marker rows replace it.
  • Filter estate remains 451 cells.
  • just bake, just gate, and just status pass.
  • Full cargo test passes.
  • cargo clippy --no-deps passes cleanly.
  • cargo fmt --all -- --check and git diff --check pass.
  • All 38 local Markdown link targets in touched docs resolve.
  • OSS audit found no secrets, machine paths, scratch references, or unintended artifacts. Existing oracles were not overwritten.

Review roles and boundaries

No Workflow runner is exposed in this environment, so .agents/workflows/verify-rung.js could not be invoked. I reproduced its roles manually:

  • TICK/LAW: ADMIT/SPLIT; no box closes; source vocabulary stops in websem; rframe carries only a generic resolved clip-edge fact.
  • REPRO: every claimed branch has a discriminating Chromium cell or is explicitly marked measured-not-celled; focused refusals are guarded in strict and best-effort; gate sensitivity is proven.

External resource loading is a separate family and remains TODO. Dynamics, wider marker-source composition, resource-side cascade, complete resource grammars, and CSS marker properties remain named boundaries.

No conformance score was produced or inspected. No FLIP record, rule, or baseline changed.

vercel Bot commented Aug 28, 2026
edited
Loading

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
nothing Ready Preview Aug 28, 2026 10:13am

coderabbitai Bot commented Aug 28, 2026
edited
Loading

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info ⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e7605cad-4e2e-41ac-b34e-4fbe54576d3c

📥 Commits

Reviewing files that changed from the base of the PR and between b8a25c9 and 121926e.

⛔ Files ignored due to path filters (198)
  • fixtures/web-first/chromium/svg-marker-bare-attribute-drop.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-circle-drop.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-clip.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-filter.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-mask.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-opacity-empty-source.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-opacity-missing.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-opacity-unselected-mid.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-opacity-wrong-target.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-opacity-zero-viewport.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-opacity.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-root-viewbox.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-stroke-none-width.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-transform.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-use-inherited.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-client-use-target.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-context-fill.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-context-stroke.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-default-viewport-clip.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-display-none-resource.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-duplicate-id-first.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-ellipse-drop.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-height-direct-alias.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-height-percentage.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-inherited-end.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-line-zero-length.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-line.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-missing-reference.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-none-reset.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-orient-auto-start-reverse.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-orient-degrees.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-orient-direct-alias.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-orient-gradians.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-orient-invalid.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-orient-radians.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-orient-turn.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-orient-whitespace-drop.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path-arc-authored-vertex.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path-cubic-authored-vertex.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path-move-only.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path-multiple-subpaths.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path-quadratic-authored-vertex.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path-repeated-close.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path-repeated-moves.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path-valid-prefix.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-path.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-polygon-one-point.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-polygon.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-polyline-one-point.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-polyline.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-rect-drop.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-reference-negative.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-refx-direct-alias.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-refx-keyword-drop.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-refx-percentage-root.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-refx-percentage-viewbox.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-refy-keyword-drop.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-refy-percentage-alias.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-source-empty.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-source-group-transform.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-source-shapes.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-tangent-angle-wrap.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-tangent-degenerate-cubic.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-tangent-degenerate-quadratic.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-tangent-opposite.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-units-default.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-units-invalid.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-units-stroke-width.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-units-user-space-whitespace.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-units-user-space.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-url-commented.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-url-escaped.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-url-malformed-drop.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-url-quoted.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-viewbox-empty.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-viewbox-invalid.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-viewbox-meet.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-viewbox-negative.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-viewbox-none.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-viewbox-nonzero-origin.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-viewbox-slice.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-width-direct-alias.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-width-invalid.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-width-negative.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-width-percentage-alias.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-width-percentage.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-width-px.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-width-zero.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-marker-wrong-target.png is excluded by !**/*.png
  • fixtures/web-first/chromium/svg-path-marker-end.png is excluded by !**/*.png
  • fixtures/web-first/svg-marker-bare-attribute-drop.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-circle-drop.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-clip.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-filter.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-mask.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-opacity-empty-source.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-opacity-missing.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-opacity-unselected-mid.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-opacity-wrong-target.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-opacity-zero-viewport.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-opacity.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-root-viewbox.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-stroke-none-width.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-transform.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-use-inherited.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-client-use-target.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-context-fill.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-context-stroke.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-default-viewport-clip.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-display-none-resource.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-duplicate-id-first.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-ellipse-drop.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-height-direct-alias.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-height-percentage.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-inherited-end.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-line-zero-length.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-line.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-missing-reference.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-none-reset.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-orient-auto-start-reverse.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-orient-degrees.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-orient-direct-alias.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-orient-gradians.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-orient-invalid.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-orient-radians.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-orient-turn.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-orient-whitespace-drop.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path-arc-authored-vertex.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path-cubic-authored-vertex.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path-move-only.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path-multiple-subpaths.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path-quadratic-authored-vertex.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path-repeated-close.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path-repeated-moves.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path-valid-prefix.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-path.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-polygon-one-point.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-polygon.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-polyline-one-point.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-polyline.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-rect-drop.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-reference-negative.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-refx-direct-alias.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-refx-keyword-drop.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-refx-percentage-root.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-refx-percentage-viewbox.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-refy-keyword-drop.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-refy-percentage-alias.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-source-empty.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-source-group-transform.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-source-shapes.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-tangent-angle-wrap.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-tangent-degenerate-cubic.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-tangent-degenerate-quadratic.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-tangent-opposite.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-units-default.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-units-invalid.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-units-stroke-width.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-units-user-space-whitespace.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-units-user-space.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-url-commented.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-url-escaped.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-url-malformed-drop.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-url-quoted.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-viewbox-empty.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-viewbox-invalid.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-viewbox-meet.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-viewbox-negative.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-viewbox-none.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-viewbox-nonzero-origin.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-viewbox-slice.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-width-direct-alias.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-width-invalid.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-width-negative.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-width-percentage-alias.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-width-percentage.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-width-px.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-width-zero.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-marker-wrong-target.svg is excluded by !**/*.svg
  • fixtures/web-first/svg-path-marker-end.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-author-stylesheet.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-external.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-height-var.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-orient-var.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-overflow.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-refx-unit.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-refy-css-wide.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-root-effect.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-root-opacity.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-root-rendering-style.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-root-transform.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-source-animation.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-source-gradient.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-source-nested.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-source-opacity.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-source-text.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-source-use.svg is excluded by !**/*.svg
  • fixtures/web-first/unsupported/svg-marker-width-calc.svg is excluded by !**/*.svg
📒 Files selected for processing (22)
  • crates/n0/src/drawlist.rs
  • crates/n0/src/glyphless.rs
  • crates/n0/src/paint.rs
  • crates/n0_cli/README.md
  • crates/rframe/README.md
  • crates/rframe/src/clip.rs
  • crates/rframe/src/lib.rs
  • crates/rframe/tests/clip_contract.rs
  • crates/websem/src/svg.rs
  • crates/websem/src/svg_path.rs
  • crates/websem/tests/marker_contract.rs
  • crates/websem/tests/paths_contract.rs
  • crates/websem/tests/points_contract.rs
  • crates/websem/tests/unsupported_corpus.rs
  • docs/wg/consolidation/svg-engine-of-record.md
  • docs/wg/consolidation/web-checklist.md
  • docs/wg/research/chromium/svg/resources-and-effects.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

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


Walkthrough

This change adds bounded static SVG marker compilation for four shape types and preserves marker topology, placement, viewport clipping, effects, and transactional refusal behavior. It also adds explicit hard or anti-aliased clip policies across the rendering pipeline and updates tests, fixtures, and capability records.

Changes

SVG rendering changes

Layer / File(s) Summary
Explicit clip edge policy
crates/rframe/src/clip.rs, crates/rframe/src/lib.rs, crates/n0/src/drawlist.rs, crates/n0/src/glyphless.rs, crates/n0/src/paint.rs, crates/rframe/tests/clip_contract.rs, crates/rframe/README.md
Adds ClipEdgeMode with anti-aliased and hard modes. The selected mode flows through clip lowering into raster painting. Tests cover defaults, explicit hard clips, and distinct raster output.
Authored marker topology
crates/websem/src/svg_path.rs
Path parsing now returns raster commands and authored marker elements from one scan. Marker positions, tangents, close handling, arc normalization, and degenerate cases are computed separately from raster decomposition.
Marker resource and instance compilation
crates/websem/src/svg.rs
Adds marker resource collection, inherited direct-reference resolution, viewport and placement handling, source patrols, context paint, hard viewport clips, opacity composition, and transactional rollback for marker failures.
Marker behavior contracts
crates/websem/tests/marker_contract.rs, crates/websem/tests/paths_contract.rs, crates/websem/tests/points_contract.rs, crates/websem/tests/unsupported_corpus.rs
Adds coverage for admitted marker instances, inheritance, topology, opacity, unsupported constructs, CSS patrols, and strict or best-effort degradation behavior.
Marker corpus and capability records
crates/n0_cli/README.md, docs/wg/consolidation/*, docs/wg/research/chromium/svg/resources-and-effects.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
Adds marker fixture and oracle entries, updates corpus totals and refusal records, and documents the bounded marker profile and placement rules.

Estimated code review effort: 5 (Critical) | ~120 minutes

Merge Risk: ⚪ Minimal · up to 12192

The PR adds bounded same-document static SVG markers with explicit clipping and refusal behavior while preserving existing rendering defaults. Tests and validation checks pass, and no actionable merge-blocking risk remains after normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant SVGDocument
  participant compile_leaf
  participant ParsedPath
  participant ChildWalk
  participant ClipPath
  SVGDocument->>compile_leaf: resolve marker references
  compile_leaf->>ParsedPath: prepare authored marker positions
  compile_leaf->>ChildWalk: compile selected marker sources
  ChildWalk->>ClipPath: apply hard marker viewport clip
  ChildWalk->>compile_leaf: append marker items or return refusal
Loading 🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 46.15% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 78 functions across 11 files. (11 skipped… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the main change: admitting same-document static SVG markers in websem.
Description check ✅ Passed The description is directly related to the changeset and explains the admitted marker profile, implementation scope, tests, and remaining boundaries.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 46.15% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 78 functions across 11 files. (11 skipped: 10 unsupported, 1 too large.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1 📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch rung/svg-marker-core

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.

softmarshmallow merged commit 45dc034 into main Aug 28, 2026
15 checks passed
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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant


Back | FazBrowse Home | New Git URL