CNA-BUG-055: Stale whole-registry renderer counts survive outside check_renderer_identities.py's list: CORE.md and FEATURE_MATRIX.md say 50, core_ext.h 46, ModuleProbes.cmake 42, the C API limitation and mapping records 25, and CHANGELOG 49 for a 50-identity release
Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit c1c316b9; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
CNA has 14 public renderer identities, yet the C API's backend-classification contract and mapping records, a public C header's Doxygen, a CMake test header and the alpha.1 release notes still state obsolete totals that no count gate reads.
- Identifier
CNA-BUG-055- Category
- Bug
- Subsystem
- Documentation & release tooling
- Status
- Narrowed (partially fixed; describes only what survives)
- Verified against
- CNA
c1c316b9(c1c316b9c7a846ce8002809c151fcd1af14942c9) - Severity
- Low (a triage suggestion, not a project priority)
- Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- Yes: see Current tests
- Affected contract
- Documentation of cna_graphics_backend_get_category / cna_graphics_backend_get_maturity (docs/c-api/CORE.md, docs/c-api/FEATURE_MATRIX.md), of cna_graphics_renderer_get_is_available_ext (CNA/C/core_ext.h), and the CHANGELOG release notes
Expected behaviour
CNA has 14 public renderer identities over 12 implementation families (CNA_RENDERER_PUBLIC_IDENTITIES in cmake/RendererIdentities.cmake, held to GraphicsRendererType.hpp and CNA/C/graphics.h by scripts/check_renderer_identities.py). A statement of the whole-registry count should give that number or, as the checker's own docstring recommends, name the registry instead of a number. A released section of the changelog should state the count that release had.
Actual behaviour at TARGET
docs/c-api/CORE.md(Backend classification) says both classifications accept "any of the 50 public renderer identities"; the Core extensions row ofdocs/c-api/FEATURE_MATRIX.mdrepeats "for any of the 50 public renderer identities". The routes accept the 14 identities ofcmake/RendererIdentities.cmakeand refuse everything else (MapRendererTypeinCnaCApiCoreExt.cpp);tools/c-api/coverage_mappings.json, the C API's own mapping record for the same routes, still says "any of the 25 public renderer identities", as do the generateddocs/c-api/LIMITATIONS.mdandCOMPATIBILITY.mdbullet "CNA has 25 renderer identities; four are built and run here" (fromtools/c-api/compatibility_matrix.json).core_ext.h, Doxygen ofcna_graphics_renderer_get_is_available_ext: "which of the 46 identities this particular build can actually produce".cmake/Tests/ModuleProbes.cmake, file header: "RendererIdentityRegistry mechanically pins the 42 public renderer identities".CHANGELOG.md, the v0.1.0-alpha.1 section: "49 renderer identities selected at compile time throughCNA_GRAPHICS_RENDERER". The tag's own selection list (cmake/RendererSelection.cmakeatv0.1.0-alpha.1) has 50 entries; a note added later ("That was this release's set") repeats the number instead of correcting it.
check_renderer_identities.py checks counts only in its COUNTED_DOCUMENTS list (docs/runtime-renderer-selection.md, docs/renderer-expansion-candidates.md, docs/physical-modules.md, plans/plan_platform.md, AUDIT.md, CHECKLIST.md), so none of these five is seen.
Source locations
docs/c-api/CORE.md— Backend classification: any of the 50 public renderer identitiesdocs/c-api/FEATURE_MATRIX.md— Implemented surface table, Core extensions rowmodules/c-api/include/CNA/C/core_ext.h— cna_graphics_renderer_get_is_available_ext Doxygen: the 46 identitiescmake/Tests/ModuleProbes.cmake— file header comment: the 42 public renderer identitiesCHANGELOG.md— v0.1.0-alpha.1 section, Added: 49 renderer identitiesscripts/check_renderer_identities.py— COUNTED_DOCUMENTS - the only places whose counts are checkeddocs/c-api/LIMITATIONS.md— the 'Four of the 49 renderers' row and the '25 renderer identities' bullet, both staletools/c-api/limitations.json— source record of the stale subjecttools/c-api/compatibility_matrix.json— source of the stale 'CNA has 25 renderer identities' notecmake/RendererIdentities.cmake— 14 public renderer identities at this snapshottools/c-api/coverage_mappings.json— backend-classification mapping and test rows: 'any of the 25 public renderer identities'
Evidence
Checked by reading at c1c316b9; not executed. The alpha.1 count was read from the tag's cmake/RendererSelection.cmake STRINGS list (50 names). Fixed since this was first reported: docs/runtime-renderer-selection.md, which used to give a stale factory count, now states 12 families / 14 identities and is in COUNTED_DOCUMENTS, so the RendererIdentityRegistry CTest keeps it true. Documents that state older counts as dated history (validation records, NEXT.md, plans/, integration/) are not counted here. The C API's LIMITATIONS.md row "Four of the 49 renderers" is a separate entry.
Independently observed as a separate finding (merged): The generated C API limitations document carries a row saying four of 49 renderers are built and the other 45 share the surface, while a later bullet in the same file says CNA has 25 renderer identities (both figures are stale at this snapshot, which has 14); the stale row comes from tools/c-api/limitations.json.
Re-verified at c1c316b9: every stale figure above is still present (CORE.md, FEATURE_MATRIX.md, core_ext.h, ModuleProbes.cmake, the C API mapping and limitation records, the changelog), and COUNTED_DOCUMENTS is unchanged; the registry itself moved to 14 public identities over 12 families when four more identities were retired (1cac65958). Not executed.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
RendererIdentityRegistry (CTest, cmake/Tests/ModuleProbes.cmake) and multi-renderer-ci.yml run check_renderer_identities.py: registries plus the counted documents. Nothing reads docs/c-api/, public C header comments, CMake comments or the changelog.
Regression test
Add docs/c-api/CORE.md and docs/c-api/FEATURE_MATRIX.md to COUNTED_DOCUMENTS (or reword them to name the registry) and run the checker's identity-count pattern over modules/*/include and cmake/ comments too; correct the changelog's alpha.1 figure to 50.
Blast radius
Documentation only. A C binding author reading CORE.md or FEATURE_MATRIX.md is told the classification routes cover 50 identities. The routes, the constants in CNA/C/graphics.h and CNA_GRAPHICS_RENDERER_MAXIMUM (43, FNA3D, with retired values reserved) are correct.
Workaround
Treat cmake/RendererIdentities.cmake and CNA/C/graphics.h as the count.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- User guide
- C API: ABI and identities
- Architecture
- Repository validators
- Internals
- Core module: renderer identities
- Maintainer workflow
- Update the C API: versions and counts
- Known issues
- Bug index