Problem
The Flutter backend currently provides a bounded synchronous SVG mask parser for untransformed filled path/rect/circle/ellipse/polygon elements. Groups, transforms, fill rules, strokes, defs/use, and CSS inheritance fail closed, while the Skia backend uses the complete shared SVG renderer.
Focused implementation
- Move synchronous SVG mask compilation into a reusable cached resource abstraction rather than reparsing renderer-specific markup.
- Add bounded group and affine transform stacks, even-odd/nonzero fill rules, inherited opacity/fill, and safe defs/use expansion.
- Support stroked geometry by converting the bounded stroke subset into alpha coverage or an equivalent cached picture.
- Enforce depth, element, path-command, use-reference, and decoded-byte caps; cycles and unsupported external resources fail closed.
- Keep cache keys, eviction, reset, detach, and memory accounting aligned with Skia resource lifetime.
Gates
Shared SVG corpus pixels across Skia/Flutter/Chromium, adversarial depth/reference/cycle limits, cache-hit and parse-time counters, mutation/replacement tests, 4,096-icon memory/CPU benchmarks, and 100 renderer reset cycles returning to baseline.
Parent: #256. Depends on merged #502.
Current status — 19 September 2026
Implementation is active in an isolated worktree from WebScene 276d5b77737927a4bd67bfeb523b8a515a7b115f. The focused slice owns Flutter SVG group/transform/fill/stroke/defs/use geometry, bounded cache/lifecycle behavior, and authored corpus/adversarial/performance regressions. It does not overlap the active #519 selector work. No branch has been pushed and no PR exists at this checkpoint. Per the current implementation-first direction, only git diff --check will run locally; execution and Release gates remain deferred.
Problem
The Flutter backend currently provides a bounded synchronous SVG mask parser for untransformed filled path/rect/circle/ellipse/polygon elements. Groups, transforms, fill rules, strokes, defs/use, and CSS inheritance fail closed, while the Skia backend uses the complete shared SVG renderer.
Focused implementation
Gates
Shared SVG corpus pixels across Skia/Flutter/Chromium, adversarial depth/reference/cycle limits, cache-hit and parse-time counters, mutation/replacement tests, 4,096-icon memory/CPU benchmarks, and 100 renderer reset cycles returning to baseline.
Parent: #256. Depends on merged #502.
Current status — 19 September 2026
Implementation is active in an isolated worktree from WebScene
276d5b77737927a4bd67bfeb523b8a515a7b115f. The focused slice owns Flutter SVG group/transform/fill/stroke/defs/use geometry, bounded cache/lifecycle behavior, and authored corpus/adversarial/performance regressions. It does not overlap the active #519 selector work. No branch has been pushed and no PR exists at this checkpoint. Per the current implementation-first direction, onlygit diff --checkwill run locally; execution and Release gates remain deferred.