A build grows 200 MB over a sprint and nobody can say which commit did it. An asset ends up in six bundles because six materials reference it, and nothing in the editor mentions that. A level bundle is 2 MB and a player downloads 62 MB to open it.
Content Inspector answers those questions from what your build already wrote.
THE DIFF, FIRST
Two builds side by side, sorted by what changed most: what appeared, what grew, what went. Snapshots are plain JSON small enough to commit, so last sprint's build is still there in three months. It reads Unity's own build report and needs no Addressables at all.
DUPLICATES, AND WHICH OF THE TWO MISTAKES IT IS
An asset in more than one bundle is paid for once per bundle. Two different problems produce the same symptom and want opposite fixes: named by two groups (take it out of one) or named by nobody and copied into every bundle that needed it (move it into a shared group). The cost quoted is everything except the heaviest copy - the least the fix can save, never the most. Select a row and you get the chain that dragged the asset in, through the material rather than around it. That chain is the reference somebody actually has to change.
WHAT A BUNDLE COSTS TO LOAD
Not what it weighs. A 2 MB level bundle that depends on a 60 MB shared bundle is a 62 MB download; the Addressables window shows the 2. Dependency cycles are named too - not fatal, but they mean neither bundle can ever ship without the other.
REAL WEIGHT, NOT SOURCE SIZE
What each asset serialised to inside the bundle, by type and by group, with the heaviest assets counted across every copy. A 2 MB texture shipped six times sorts above an 8 MB one shipped once.
SHADER VARIANTS
Counted while the build compiles them - the only moment the number exists - after every stripping callback in the project has run, so it is what shipped rather than what the shaders declare. Select a shader to see which keywords its variants are made of.
IMPORT AUDIT, ON DAY ONE
The one screen that works before you have built anything. Texture, audio and model settings that cost build size or memory, each saying what is set, what that costs and what to set instead, marked Certain, Likely or Consider. Build size and runtime memory are counted separately. Most findings are fixed from the window, one at a time or all at once; the ones that depend on how the asset is used are reported and left alone.
BUDGETS THAT STOP A BUILD
A limit on the build, a group, a bundle or an asset type, kept in a JSON file meant to be committed. On the build machine, Ci.Check exits non-zero when one breaks and writes the numbers as JSON either way. A budget naming a group somebody renamed is reported as broken rather than passed silently.
WHAT THE PLAYER ACTUALLY GETS
Point it at the folder your bundles were uploaded to: one HEAD request each, nothing downloaded, and it reports which are missing and which are left over from an older build.
WHAT YOU GET
Full C# source. No DLL, no third-party code, no additional package required. 217 tests, run against Unity 6000.4. Works without Addressables on a plain build report; reads Addressables layouts when they are there. The code that does is in an assembly that only compiles when the package is installed, so the package itself depends on nothing. A 20 000-asset project is analysed in under two seconds.
WHAT IT IS NOT
It is not Project Auditor - that one is free and looks at code and project settings. This looks at the bundle graph and the bytes. They answer different questions and are worth having together. It does not build for you, and it strips nothing: the shader recorder passes every variant through untouched.