CNA-BUG-256: docs/model-content-pipeline-support.md still says CNA has no binary .xnb model reader and lists Model loader gaps that the code has closed
Evidence basis: source-verified at the pinned commit. Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
Below a short update note, the document says no .xnb Model can be loaded and that the .cnj Model loader has one bone, no ParentBone, no BoundingSphere and no tests. ModelReader, the bone hierarchy, parent bones, bounding spheres and CnjModelTests exist.
- Identifier
CNA-BUG-256- Category
- Bug
- Subsystem
- Documentation & release tooling
- Status
- Narrowed (partially fixed; describes only what survives)
- Verified against
- CNA
009d40f5(009d40f5dd085c4e674d3479675fac84b12b3e0a) - Severity
- Low (a triage suggestion, not a project priority)
- Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- None
- Affected contract
- docs/model-content-pipeline-support.md and docs/xna-4-api-coverage.md, the statements about Model loading
Expected behaviour
A current-support document describes the loaders as they are at the snapshot: loading a Model through ContentManager reads real .xnb Model assets through ModelReader (xnb-content-pipeline-support.md and migration-guide.md say so), and the .cnj Model loader builds the bone hierarchy, each mesh's parent bone and bounding sphere, with tests.
Actual behaviour at TARGET
model-content-pipeline-support.md carries a 2026-07-16 note that a real .xnb ModelReader now exists, but its body still says 'CNA has no binary .xnb model reader at all' and 'No existing FNA-produced .xnb model asset can be loaded by CNA'. Its summary table lists Model binary .xnb loading as not implemented, a loader that always synthesizes exactly one bone, no per-mesh ParentBone, a BoundingSphere never set, and zero tests of the loader. The note scopes those gaps to the .model.json path, but that path (ModelTypeReader::Read, cnjVersion 2) now parses the bones array and links parents with AddChild, assigns each mesh's parent bone, sets the mesh BoundingSphere from its vertices, and CnjModelTests.LoadsRealCnjFixture loads a real fixture through it. xna-4-api-coverage.md repeats the loader gaps in its Model row and its known-deviations list.
Source locations
docs/model-content-pipeline-support.md— body and summary table under the 2026-07-16 update notedocs/xna-4-api-coverage.md— Model row and known-deviations bullet repeating the loader gapsdocs/xnb-content-pipeline-support.md— states ModelReader is fully implementedmodules/content/src/Xna/ContentManager.cpp— ModelTypeReader::Read: bone hierarchy, parentBone, BoundingSpheremodules/content/src/Xnb/ModelContentTypeReaders.cpp— ModelReader::Readmodules/content/tests/Microsoft/Xna/Framework/Content/CnjModelTests.cpp— LoadsRealCnjFixturemodules/content/tests/CNA/Internal/Xnb/ModelContentTypeReaderTests.cpp— the .xnb ModelReader suite
Evidence
Read at 009d40f5; nothing executed. The five documents named in the original ledger item are corrected; this is a further current document making the same assertion, mitigated only by the update note. The Tag gap in the same table was not judged: CNA's Model Tag is engine-defined data, not a content-authored object.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
None: nothing checks these documents' Model-loader statements against the code; CnjModelTests exercises the loader itself.
Regression test
A documentation fix; a consistency check would compare each document's ModelReader status with docs/xnb-content-pipeline-support.md.
Blast radius
Readers deciding whether CNA can load a binary .xnb Model or what the .cnj Model loader sets (bones, parent bones, bounding spheres).
Workaround
Read docs/xnb-content-pipeline-support.md, which states ModelReader is fully implemented, and the code.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- User guide
- Model loading
- Internals
- Content runtime internals
- Known issues
- Bug index