Primary target surface
This non-rendering suite is generated from canonical fixtures. Acceptance comes from deterministic route verdicts and negative controls, not GPU readback.
Fallback unavailable WebGPU features through an isolated compatibility branch. Use only when the user explicitly asks how to handle an initialized non-WebGPU backend; then classify canonical behavior as preserved, weakened, or removed.
Image: Deterministic contract-lab screenshot. Source lab: browser-fallback-harness.
This non-rendering suite is generated from canonical fixtures. Acceptance comes from deterministic route verdicts and negative controls, not GPU readback.
Source hashes, claim verdicts, promoted same-lab media, fixed routes, exact tier contracts, and current limitations.
Fallback planning is explicit tier design, not silent degradation. Capability detection partitions devices into tiers, and each tier gets an authored (not merely reduced) target:
$$\text{tier} = f(\text{WebGPU}, \text{limits}, \text{bandwidth}) \in \{T_0, T_1, T_2\}$$Cost scaling estimates how a pass responds to resolution and step count — raymarch cost scales as $O(N_{px}\cdot S)$, so half resolution plus half steps is a $4\times$ reduction that must be re-validated visually, never assumed. The skill's rule: a fallback is a smaller authored scene with its own validation contract, and tier switching is a hard gate (fail loudly), never a silent downgrade mid-session.
Only schema-v2 labs with accepted runtime and evidence contracts appear here. Other source directories remain visible through the demo registry without being promoted to runnable proof.
Every image identifies what it proves. This skill owns a non-rendering scenario suite, so acceptance depends on deterministic fixture verdicts, ownership and budget checks, and mutations rather than GPU pixels.
1 published image
The complete SKILL.md as loaded by agents, rendered verbatim.
Treat fallback as an explicitly authorized product branch. Canonical WebGPU/TSL work and native WebGPU quality tuning remain with their owning skills.
Record all of the following before selecting an implementation:
WebGPURenderer that
renderer.backend.isWebGPUBackend !== true on the named target;Backend truth is available only after await renderer.init(). When WebGPU
initializes, return to the canonical owner. When the explicit request is absent,
report the unavailable-WebGPU blocker from the canonical path. Dispose the
capability-probe renderer before constructing a separate compatibility renderer.
This step is complete when the five activation facts are recorded and the canonical implementation remains unchanged.
List the canonical feature's geometric, radiometric, color, temporal, interaction, state-ownership, and lifecycle invariants. Classify each one:
preserved: the same quantity and proof still apply;weakened: keep the quantity, name the changed error, support, cadence,
staleness, or envelope, and freeze a new gate;removed: mark the capability unsupported and remove dependent claims.At a cross-system boundary, preservation means retaining the same units, frames/origin, time interval and sample phase, owner, producer/consumer version, support/filter, validity/staleness/error, rate-versus-integrated semantics, one-way or two-way reaction scope, stable identity, immutable previous/current presentation state, reset behavior, and GPU completion dependency. An approximation with different semantics is weakened or removed. Keep steady-frame GPU-to-CPU readback outside frame-critical paths.
This step is complete when every canonical claim has exactly one disposition and every weakened or removed row names its user-visible consequence.
Use this order for each feature:
Read the downgrade matrix when selecting among unavailable capabilities. Read the r185 API map only when implementing or verifying the legacy/API branch; reverify each symbol against the installed revision.
This step is complete when the selected representation is the earliest row
that passes every preserved invariant and every remaining loss is explicit.
Give the compatibility branch separate imports, build/deployment entrypoint, tests, artifacts, capability gate, and maintenance ownership. Keep one scene signal graph and one tone-map/output-transform owner inside the branch. Record color versus data texture domains, resource creation/reset/resize/disposal, and the boundary between canonical and compatibility assets.
When a GPU-performance claim requires timestamps, construct the branch renderer
with trackTimestamp: true before initialization. A legacy branch may use
WebGPURenderer( { forceWebGL: true } ) only after activation; it remains a
compatibility product rather than the canonical renderer.
This step is complete when disabling or deleting the compatibility entrypoint leaves the canonical build and runtime graph unchanged, and every branch-owned resource has one owner and disposal path.
Invoke $threejs-visual-validation for every preserved or weakened claim. Use
the canonical evidence as truth. For visual or mechanism claims, capture the
final/no-post/contribution views needed to isolate the cause; for temporal,
performance, resource, or lifecycle claims, capture only their producing trace
and diagnostics. Return PASS, FAIL, or INSUFFICIENT_EVIDENCE per claim.
Exercise the branch-specific reset, resize/DPR, repeated transition, teardown,
and dispose/recreate paths. Persistent resources must plateau after declared
warm-up. Missing timestamps make a required GPU-attribution claim
INSUFFICIENT_EVIDENCE; presentation or CPU duration remains end-to-end
evidence only.
This step is complete when every surviving claim has a direct verdict, every removed claim is absent from product language, output conversion has one owner, and lifecycle resources plateau or fail.
Return one row per feature:
| Feature | Target | Preserved | Weakened | Removed | Representation | Validation |
|---|
Also record the activation facts, isolated entrypoint and maintenance owner,
output owner, lifecycle result, unsupported claims, and the exact evidence
needed for any INSUFFICIENT_EVIDENCE verdict.
Preserved concept proxies and generated-asset previews. They are excluded from primary completion counts and link to the canonical lab through the schema-v2 registry.