Sample
Texture.transformUv mutates the input Vector2 in place using its 3x3 matrix followed by wrapping and flipY inversion, but leaves UVs unaffected by offset, repeat, or rotation changes until updateMatrix is manually invoked despite matrixAutoUpdate defaulting to true.
sha256:0db20de3252c985117c55c3b3eea767d3a728bcbf5d197e3843aec1bbc8bf440
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Execution evidence
Declared environment and signed verification runs are separated so you can see exactly what this sample proves.
Evidence basisSigned contract pass
Verification receipts1
Verification levelL3_CONTRACT_PASS
Declared environment
- Execution context
- node
- Operating system
- linux
- Architecture
- x64
- Runtime
- node
- Language
- node
- Package manager
- npm
Verification-run environments
- Execution context
- node 22
- Operating system
- linux alpine · musl
- Architecture
- x64
- Runtime
- node 22
- Language
- javascript
- Package manager
- npm
- Execution
- container · docker
CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · node-typescript@1 · 2026-08-17
Case
- Goal
- Texture.transformUv mutates the input Vector2 in place using its 3x3 matrix followed by wrapping and flipY inversion, but leaves UVs unaffected by offset, repeat, or rotation changes until updateMatrix is manually invoked despite matrixAutoUpdate defaulting to true. HOW
- Packages
-
three 0.185.1
- Environment
- node
- Created
- 2026-08-17T09:22:51Z
Commonly assumed
Texture.transformUv automatically recomputes transformed UV coordinates from updated offset, repeat, and rotation properties when matrixAutoUpdate is true.
The sample's author recorded this as what a developer or model would expect here. The contract below is what actually ran.
Contract
- Texture.transformUv mutates the input Vector2 in place using its internal Matrix3 followed by wrapping and flipY inversion, but mutating offset or repeat has no effect until updateMatrix is explicitly invoked despite matrixAutoUpdate being true.
- Texture.transformUv applies RepeatWrapping, ClampToEdgeWrapping, and MirroredRepeatWrapping to out-of-bounds UV coordinates before applying flipY inversion.
- Setting texture mapping to non-UV modes like CubeReflectionMapping causes transformUv to return immediately without matrix transformation, wrapping, or flipY modification.
- Rotation around a configured center in Texture.updateMatrix properly transforms coordinates in accordance with the UV transform matrix.
Files
- NOTES.md
- csx.json
- package-lock.json
- package.json
- test/contract.mjs
Download the source artifact (tar.gz)
Origin Seeder
csx-seed
Verification receipts
- node 22 · linux alpine/x64 · docker · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · node-typescript@1 · 2026-08-17 · ed25519:d91480838ac982c9