Skip to content

Investigate pre-existing SVG source precision under ordinary group opacity #136

Description

@softmarshmallow

Measured finding

Ordinary group-opacity source controls found while verifying #135
already depart from Chromium on the pre-rung fd4097f2 build. This is not a
regression from its byte-255 restore correction: the retained pre-rung binary,
evidence-only 7d42ab20 binary and corrected consumer produce identical PNG
bytes for every successful output in the 24-source matrix (both admissions).

Measured on CPU N32 raster, macOS arm64, Rust 1.92.0 / Skia 0.99.0, against
twice-deterministic Chromium 149.0.7827.55 captures through the repository's
unchanged hash-pinned capture module and probe harness. These are measured,
not celled
. No new tolerance, oracle replacement, conformance score or FLIP
change is proposed.

Source inside ordinary opacity group Opacity .999 Opacity .998
Circle with Gaussian blur sigma 4, unrotated 25 differing pixels, maximum channel delta 3 25 pixels, maximum delta 2
Circle with repeating pattern, unrotated 1 pixel, maximum delta 1 1 pixel, maximum delta 1
Circle with radial ramp, rotated 15 degrees 1,312 pixels, maximum delta 1 1,307 pixels, maximum delta 1

Strict accepts these sources without a named departure; best effort gives
the same image without degradation. Neighboring ordinary circle, ellipse,
curved path, round stroke, curved clip and admitted alpha-mask controls are
exact. Rotated pattern/mask and small-kernel blur controls separately reach
their existing stable refusal names before and after the correction.

Retained blur reproduction

This is the exact retained source, not a claimed minimal reduction. Unused
definitions are intentionally retained; deleting them has not been measured.

<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><defs><radialGradient id="rg"><stop stop-color="#d76843"/><stop offset="1" stop-color="#5bace1" stop-opacity=".4"/></radialGradient><pattern id="p" width="8" height="8" patternUnits="userSpaceOnUse"><rect width="4" height="8" fill="#d76843"/><rect x="4" width="4" height="8" fill="#5bace1" fill-opacity=".6"/></pattern><clipPath id="c"><circle cx="30" cy="30" r="22"/></clipPath><mask id="m" maskUnits="userSpaceOnUse" x="0" y="0" width="64" height="64"><rect width="64" height="64" fill="white" fill-opacity=".7"/></mask><filter id="f" x="-30%" y="-30%" width="160%" height="160%"><feGaussianBlur stdDeviation="4"/></filter></defs><rect width="64" height="64" fill="#426589"/><g opacity=".999" transform="translate(0 0)"><g filter="url(#f)"><circle cx="30" cy="30" r="20" fill="#d76843"/></g><rect x="38" y="34" width="18" height="20" fill="#5bace1" fill-opacity=".6"/></g></svg>

Changing the group opacity to .998 gives the other measured blur control.
For the pattern pair, replace only the filtered-circle group with
<circle cx="30" cy="30" r="24" fill="url(#p)"/>. For the radial pair,
use <circle cx="30" cy="30" r="24" fill="url(#rg)"/>, change the outer
transform to rotate(15 32 32), and change the unused blur definition back
to stdDeviation="1"; those are the measured matrix sources.

Render the source through cargo run -p n0_cli --bin n0 -- input.svg out.png 64x64 --strict and without --strict. Capture via the
probe harness,
not a separate browser recipe. Capture-module SHA-256:
069296201718c43d29efe356fbea893781b73250dca51de3b6d47468d74027b0.
Retained pre-rung CLI SHA-256:
0c134a4192100693b30c6620e220985c31c07123740716f8b24fc5a6b97d7d5f.

Follow-up work

  1. Minimize each source with exact measured pairs; compare with no opacity
    before assigning causality to opacity, source materialization or a backend.
  2. Determine whether an existing ratified cell-local ramp/arc precision rule
    actually applies. A small delta alone is not justification for tolerance.
  3. Fix true semantic departures or quarantine them by a stable name in both
    admissions; reassess the affected feature row if its grammar has a gap.
  4. Add discriminating Chromium cells through just add, bake without
    overwriting, and prove gate sensitivity.

Keep this separate from the bounded authored-blending profile and from
#87, #88 and #93; no common cause
with those issues has been established.

Both opacity checklist rows and <radialGradient> are currently ticked.
Pre-existence establishes no regression from the B1 correction, not that
those obligations are unaffected. Cause and tick ownership remain unresolved;
if attribution proves a closed-row defect, its repair/refusal and tick
disposition must follow. No additional B1 production change or new tolerance
is justified by these still-unclassified measurements alone.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions