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

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

✓

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 of docs/c-api/FEATURE_MATRIX.md repeats "for any of the 50 public renderer identities". The routes accept the 14 identities of cmake/RendererIdentities.cmake and refuse everything else (MapRendererType in CnaCApiCoreExt.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 generated docs/c-api/LIMITATIONS.md and COMPATIBILITY.md bullet "CNA has 25 renderer identities; four are built and run here" (from tools/c-api/compatibility_matrix.json).
  • core_ext.h, Doxygen of cna_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 through CNA_GRAPHICS_RENDERER". The tag's own selection list (cmake/RendererSelection.cmake at v0.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

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.

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

Known issues
Bug index