Primary implementation surface
These routes are generated from canonical source. Their exact status remains separate from implementation availability.
Diagnose unexpected Three.js runtime, rendering, API, asset, and version-dependent behavior. Use when observed output disagrees with expected behavior, installed source, types, documentation, or examples; when a regression or known upstream issue may exist; when a project is behind and a later fix may justify upgrading; or when choosing among an application fix, dependency upgrade, bounded workaround, upstream report, and blocker. Do not use for ordinary scene design without a concrete failure, suspicious behavior, or audit request.
These routes are generated from canonical source. Their exact status remains separate from implementation availability.
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. Page screenshots demonstrate the published presentation only; generated inputs demonstrate asset channels only; canonical acceptance still requires render-target readback and a schema-v2 bundle.
0 published imagesnpm run pages:capture-previewsThe complete SKILL.md as loaded by agents — verbatim, rendered.
Establish the failure locally, then treat official upstream history as executable diagnostic evidence. Do not preload remembered issue lists. Issue status, affected versions, fix availability, and backend behavior are revision-dependent facts.
This skill owns root-cause and version/fix triage. A domain skill owns the
intended graphics or physics mechanism. $threejs-visual-validation owns formal
image, timing, resource, and regression evidence when those proofs are required;
it does not own issue archaeology.
When the failing path participates in a routed physical domain or a physics-to-render boundary, first read the router's canonical physics domain and interaction contract. It remains the exact ABI during diagnosis; this skill defines no reduced physics, interaction, commit, or presentation dialect.
A proposed quality fix that changes physics-facing state or provider semantics,
cadence, represented support/band/filter, error bounds, inventories, stable
IDs/RNG streams, or event and exact-once application-ledger cursors must be
reproduced through the shared QualityTransition. A render-only tier change may
remain local only when every physical contract and committed version is
unchanged.
Keep one compact working record. This is diagnostic output, not an extension of the visual-validation manifest:
debugCase:
symptom: ""
expectedBehavior: ""
firstObserved: ""
minimalRepro: ""
installed:
packageVersion: ""
runtimeRevision: ""
lockfileResolution: ""
importEntrypoints: []
rendererClass: ""
initializedBackend: ""
browserGpuOs: ""
suspectApis: []
localEvidence: []
upstreamCandidates: []
versionMatrix: []
conclusion: ""
nextAction: ""
Record exact commands, commits, package versions, URLs, and repro results. Keep unknown values unknown; do not infer the runtime revision from a lockfile range.
THREE.REVISION, import map or bundler resolution, renderer class,
initialized backend, browser/OS/GPU, relevant capabilities, scene seed, asset
revisions, and the smallest deterministic reproduction.PhysicsContext,
PhysicsGraph stages/edges/intervals, provisional-to-committed
PhysicsCommitGroup lineage, InteractionRecord sequence and exact-once
InteractionApplicationLedger keys/versions/cursors, and the complete
PhysicsPresentationCandidate -> CameraViewPublication ->
ViewPreparationPublication -> sealed PhysicsPresentationSnapshot ->
FrameExecutionRecord closure. Use the canonical records and typed absence
unchanged; a smaller fixture may omit an owner only by removing its graph
dependency, never by inventing a validation-local ABI.
A different material or renderer may localize the fault; it cannot prove the
original path correct.Do not stop after finding a plausible issue title. Continue until its reproduction, affected range, fix state, and release availability agree with the local case.
Classify each upstream candidate independently:
| Status | Required proof |
|---|---|
usage-or-integration-error |
Installed source/API contract explains the local failure and a local correction passes. |
intentional-api-change |
Official migration/source history proves the behavior changed by design. |
upstream-active |
Current checked code reproduces and an open or acknowledged upstream record matches. |
fixed-unreleased |
The matching fix is merged, but no verified published package contains it. |
fixed-released |
A published release contains the fixing commit and the local repro passes on it. |
not-reproduced |
The candidate's stated configuration cannot reproduce the local failure. |
unrelated |
API path, backend, symptom, affected range, or reproduction differs materially. |
insufficient-evidence |
Fix containment, release mapping, or reproduction proof is missing. |
Closed is not a classification. A closed issue may be fixed, duplicated, invalid, intentional, or abandoned. Likewise, a merged PR is not automatically available to an npm-installed project.
Before recommending an upgrade, record:
Before recommending a workaround, record the violated invariant, why the workaround avoids it, its version/backend scope, removal condition, and whether it changes correctness, image quality, performance, or resource ownership.
Return only the evidence needed to act:
threejsDebugging:
rootCause: ""
installedResult: ""
upstream:
issueOrPr: ""
fixingCommit: ""
affectedRange: ""
firstPublishedFixedRelease: ""
classification: ""
verification:
fixedVersionResult: ""
regressionTest: ""
decision: application-fix | upgrade | workaround | upstream-report | blocker
limitations: []
Do not turn investigated issue IDs into a general cheat sheet. Carry them only inside the case that proved their relevance.