Problem
URL-backed SVG masks loaded synchronously through host policy are merged, but raster masks and controlled ServiceWorker responses do not reach the retained mask resource. Dynamic extension/webview assets can therefore remain invisible or stale.
Focused implementation
- Route PNG/WebP and controlled asynchronous mask fetches through the bounded CSS image request/cache lifecycle.
- Publish immutable decoded alpha resources with generation, dimensions, content identity, policy result, and cancellation state.
- Replace pending/failed resources atomically; stale completions after navigation, style replacement, or detach cannot publish.
- Reuse decoded resources across background/mask consumers while keeping per-origin policy and memory ownership explicit.
- Apply repeat/position/size through the existing mask group; unsupported formats and failures remain transparent/fail closed.
Gates
Host-policy, redirect, MIME, decode failure, controlled/uncontrolled ServiceWorker, cancellation/navigation, replacement, cache reuse/eviction, Skia/Flutter pixels, 4,096-resource load bounds, and 100 restart/detach cycles with no monotonic RSS growth.
Parent: #256. Coordination: #266/#267 and merged #502.
Completion checkpoint — 19 September 2026
WebScene native Stack #517 atomically merged provider PR #515 and cumulative Avalonia/Flutter consumer PR #516 as 73d0daf925d7b7bdddcae2ef2ca00bffb7fbd225. AppScene PR #181 merged the packaged Skia/Graphite consumer as 50da4995b07bfa7bd23cd2eaf6fae85912ad7c5b; AppScene #180 is closed.
The delivered webscene-raster-v2 envelope keeps mask v2/v3 framing, carries dimensions, SHA-256 identity, and base64 PNG/WebP, and is shared with webscene-bg-svg-v1. Provider publication reuses controlled CSS resource generation/policy/cancellation state and rejects stale URL/navigation/detach completions. Avalonia, Flutter, and AppScene validate format/identity/dimensions/caps; caches are limited to 256 entries and 64 MiB logical decoded pixels; Flutter requests the existing checkpoint after current async decode.
Regression sources cover sync/controlled/stale/failure provider behavior, PNG/WebP pixels, repeat/position/size, add/exclude, cache reuse/bounds, and lifecycle. Per the implementation-first direction they were not executed; only git diff --check ran. Runtime pixels, performance, memory, lifecycle, installed package, complete CI, and Release qualification remain deferred and are not claimed.
Problem
URL-backed SVG masks loaded synchronously through host policy are merged, but raster masks and controlled ServiceWorker responses do not reach the retained mask resource. Dynamic extension/webview assets can therefore remain invisible or stale.
Focused implementation
Gates
Host-policy, redirect, MIME, decode failure, controlled/uncontrolled ServiceWorker, cancellation/navigation, replacement, cache reuse/eviction, Skia/Flutter pixels, 4,096-resource load bounds, and 100 restart/detach cycles with no monotonic RSS growth.
Parent: #256. Coordination: #266/#267 and merged #502.
Completion checkpoint — 19 September 2026
WebScene native Stack #517 atomically merged provider PR #515 and cumulative Avalonia/Flutter consumer PR #516 as
73d0daf925d7b7bdddcae2ef2ca00bffb7fbd225. AppScene PR #181 merged the packaged Skia/Graphite consumer as50da4995b07bfa7bd23cd2eaf6fae85912ad7c5b; AppScene #180 is closed.The delivered
webscene-raster-v2envelope keeps mask v2/v3 framing, carries dimensions, SHA-256 identity, and base64 PNG/WebP, and is shared withwebscene-bg-svg-v1. Provider publication reuses controlled CSS resource generation/policy/cancellation state and rejects stale URL/navigation/detach completions. Avalonia, Flutter, and AppScene validate format/identity/dimensions/caps; caches are limited to 256 entries and 64 MiB logical decoded pixels; Flutter requests the existing checkpoint after current async decode.Regression sources cover sync/controlled/stale/failure provider behavior, PNG/WebP pixels, repeat/position/size, add/exclude, cache reuse/bounds, and lifecycle. Per the implementation-first direction they were not executed; only
git diff --checkran. Runtime pixels, performance, memory, lifecycle, installed package, complete CI, and Release qualification remain deferred and are not claimed.