CNA-BUG-055: Stale whole-registry renderer counts survive outside check_renderer_identities.py's list: the C API's CORE.md and FEATURE_MATRIX.md say 50, core_ext.h says 46, ModuleProbes.cmake says 42, and CHANGELOG says 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 009d40f5; 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 25 public renderer identities, yet the C API's backend-classification contract, 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
009d40f5(009d40f5dd085c4e674d3479675fac84b12b3e0a) - 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 25 public renderer identities over 21 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 25 and refuse everything else, astools/c-api/coverage_mappings.json, the C API's own mapping record for the same routes, says.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 later '25 renderer identities' bullettools/c-api/limitations.json— source record of the stale subjecttools/c-api/compatibility_matrix.json— source of the correct '25 renderer identities' notecmake/RendererIdentities.cmake— 25 public renderer identities at this snapshot
Evidence
Checked by reading at 009d40f5; 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 21 families / 25 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; the stale row comes from tools/c-api/limitations.json.
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 (46, 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