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

CNA snapshot 009d40f5  ·  Known Issues › Current bugs  ·  source links pinned to 009d40f5

✓

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

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.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.

User guide
Model loading
Known issues
Bug index