Skip to content

AI-generated changelog#33181

Draft
sunag wants to merge 2 commits intomrdoob:devfrom
sunag:dev-changelog
Draft

AI-generated changelog#33181
sunag wants to merge 2 commits intomrdoob:devfrom
sunag:dev-changelog

Conversation

@sunag
Copy link
Collaborator

@sunag sunag commented Mar 15, 2026

Description

The work is not complete yet, but so you can follow along, I’m updating the changelog to be generated by AI. It should read the first message of the PR, which is usually the most important one, gather everything into a file, and with a context window generate a summary mentioning the new features and migration tips. I’m also thinking about adding new examples.

I would also like to evolve the functionalities using github labels like highlight to make management easier to AI.

The description turned out fun to read, and even using a free token with the flash version it produced a great result, which you can see below in this release.

It’s also possible to specify a release, which can be useful for LLMs.

npm run changelog

AI Summary (r184)

Release Summary (r184)

The r184 release of three.js introduces significant improvements to the WebGPU backend, a major new compatibility layer for WebGL, and enhancements to the Inspector tools.

  • WebGL/TSL Compatibility Layer: A major addition is the WebGLNodesAdapter, which allows users to run TSL (Three.js Shading Language) and NodeMaterial instances within the traditional WebGLRenderer. This provides a unified transition path for users moving toward WebGPURenderer.

  • WebGPURenderer Enhancements: The renderer received critical performance updates, including the removal of inline function allocations in hot rendering paths (yielding ~20% performance gains) and making compileAsync() truly non-blocking via NodeBuilder.buildAsync(), ensuring smooth animations during material pre-compilation.

  • Inspector Tools: The internal Inspector has been significantly upgraded with a new Timeline tab for recording commands (Hierarchy/Counts), a Settings tab (including Force WebGL for easier testing), and an initial Memory analysis tab.

  • USDLoader Advancements: The USDLoader has reached a higher level of maturity with support for MaterialX UsdPreviewSurface, geometric primitives (Cube, Sphere, etc.), improved skinning weight handling to reduce distortion, and support for metersPerUnit scaling.

  • Dynamic Lighting: The WebGPURenderer now supports DynamicLighting, allowing for the addition or removal of lights without triggering a full material recompilation, significantly improving interactive workflows.

  • Animation Fixes: Long-standing bugs in AnimationAction regarding time scale reversal and loop counts were addressed. Additionally, AnimationAction now correctly preserves custom interpolant.settings, fixing issues with InterpolateBezier functionality.

  • Robustness and Maintenance: The codebase underwent several cleanups, including adopting ECMA 2022 static initialization blocks for Math classes, addressing vulnerabilities, and improving robustness in animation modules when handling null contexts.

Migration Tips

  • Controls Touch Handling: If your application relies on custom CSS touch-action settings for your canvas, note that controls (like MapControls or FirstPersonControls) now set touchAction = '' upon disconnection instead of 'auto'. This removes the inline style entirely, allowing your CSS to take precedence.

  • AudioListener: The AudioListener class no longer uses the Clock class. It has been updated to use the Timer class. If you were monitoring or patching AudioListener clock-related properties, please update your implementation to use Timer.

  • SkinnedMesh Transformations: SkinnedMesh.applyBoneTransform now supports both Vector3 and Vector4. If passing a Vector4 (homogenous coordinates), ensure the w component is set correctly: w === 0 for directions (normals/tangents) and w === 1 for positions.

  • Texture Updates in WebGPU: If you are using DataArrayTexture and rely on layerUpdates for performance, this property is now respected in the WebGPU backend. Ensure your implementations utilize this for partial updates to avoid unnecessary full-texture uploads.

  • Inspector Usage: If you were previously using a custom Inspector setup, note that the new Timeline feature relies on specific method prefixes (begin, create, destroy, update) in Backend functions to track commands effectively.

  • WebGL Normal Maps: WebGLRenderer now supports packed normal maps automatically if the texture format is RGFormat, RG11_EAC_Format, or RED_GREEN_RGTC2_Format. You do not need to manually configure this, but verify that your shader logic accounts for this if you were previously performing custom normal reconstruction for these formats.

Generated by gemini-3.1-flash-lite-preview


r184

@github-actions
Copy link

📦 Bundle size

Full ESM build, minified and gzipped.

Before After Diff
WebGL 359.97
85.54
359.97
85.54
+0 B
+0 B
WebGPU 630.72
175.04
630.72
175.04
+0 B
+0 B
WebGPU Nodes 628.84
174.75
628.84
174.75
+0 B
+0 B

🌳 Bundle size after tree-shaking

Minimal build including a renderer, camera, empty scene, and dependencies.

Before After Diff
WebGL 492.17
120.12
492.17
120.12
+0 B
+0 B
WebGPU 703.46
189.94
703.46
189.94
+0 B
+0 B
WebGPU Nodes 652.69
177.33
652.69
177.33
+0 B
+0 B

if ( a === 'Global' ) return - 1;
if ( b === 'Global' ) return 1;
return a.localeCompare( b );
fs.writeFileSync( cacheFilename, pageContent );

Check failure

Code scanning / CodeQL

Potential file system race condition High

The file may have changed since it
was checked
.
if ( a === 'Global' ) return - 1;
if ( b === 'Global' ) return 1;
return a.localeCompare( b );
fs.writeFileSync( cacheFilename, pageContent );

Check warning

Code scanning / CodeQL

Network data written to file Medium

Write to file system depends on
Untrusted data
.
Comment on lines +426 to +428
body: JSON.stringify( {
contents: [ { parts: [ { text: aiPrompt } ] } ]
} )

Check warning

Code scanning / CodeQL

File data in outbound network request Medium

Outbound network request depends on
file data
.
const reportFilePath = path.join( changelogDir, `r${releaseNumber}.md` );

} else if ( isAddon ) {
fs.writeFileSync( descriptionsFilePath, prDescriptionsForAI );

Check warning

Code scanning / CodeQL

Network data written to file Medium

Write to file system depends on
Untrusted data
.

} else if ( isAddon ) {
fs.writeFileSync( descriptionsFilePath, prDescriptionsForAI );
fs.writeFileSync( reportFilePath, output );

Check warning

Code scanning / CodeQL

Network data written to file Medium

Write to file system depends on
Untrusted data
.
Write to file system depends on
Untrusted data
.
@sunag sunag changed the title AI-assisted changelog AI-generated changelog Mar 15, 2026
@danrossi
Copy link
Contributor

That is really good. i will make sure to add better descriptive titles if needed. I already use the format WebXRController:description etc.

The tokens might need to come from environment variables. And the model selector could be a config rather than dynamic maybe. So you post to the google api the prompt with the collated commits.

@sunag
Copy link
Collaborator Author

sunag commented Mar 15, 2026

That is really good. i will make sure to add better descriptive titles if needed. I already use the format WebXRController:description etc.

Yeah, I also need to make a validator for the title format.

The tokens might need to come from environment variables. And the model selector could be a config rather than dynamic maybe. So you post to the google api the prompt with the collated commits.

This is just a perspective between defining the configuration dynamically or statically; there is no need to store tokens in environment variables since we are working with direct access to memory.

To be honest, we’re going to use it once a month/release, and I think defining it dynamically is more fun. We can have both if we consider it necessary.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants