CNA-GAP-003: CNA::Runtime and CNA::RuntimeOptions are declared in CNA/Misc.hpp but not implemented

CNA snapshot 009d40f5  ·  Known Issues › Functional gaps  ·  source links pinned to 009d40f5

✓

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.

The runtime module's public include path declares a CNA::Runtime subsystem facade with documented behaviour, but no translation unit defines it, so any call fails to link; CNA knows and guards the fact with a CMake check.

Identifier
CNA-GAP-003
Category
Functional gap
Subsystem
Core & runtime
Status
Open
Verified against
CNA 009d40f5 (009d40f5dd085c4e674d3479675fac84b12b3e0a)
Evidence basis
Source-verified: read at TARGET, not executed
Tests touching this area
Yes: see Current tests
Affected contract
CNA::Runtime::Initialize(const RuntimeOptions&), Shutdown(), IsGraphicsEnabled(), IsAudioEnabled(), IsInputEnabled(); CNA::RuntimeOptions

Expected behaviour

A class in a header on the module's public include path, documented as managing “the lifetime of the CNA runtime and its subsystems”, either works or says that it does not exist yet.

Actual behaviour at TARGET

CNA/Misc.hpp declares RuntimeOptions (four flags) and Runtime with five methods and Doxygen describing working behaviour. No source defines them and no translation unit includes the header, so a program that calls any method fails at link time. The C API records the rows as not applicable because the facade "is declared and defined nowhere". The CApi_UnimplementedRuntimeFacade CTest test (CheckUnimplementedRuntimeFacade.cmake, which runs nm over the runtime archive) fails the day CNA::Runtime:: symbols appear, so the gap is known and guarded; that test is defined only in builds configured with CNA_BUILD_C_API, which is off by default, and it fails a test run rather than the build. The header itself does not say the facade is unimplemented. Game is the working startup boundary.

Source locations

Evidence

Checked by reading Misc.hpp, CheckUnimplementedRuntimeFacade.cmake and the coverage mapping at 009d40f5, and by searching the tree for includes of the header and for definitions of the methods (none). CNA's own check inspects the compiled runtime archive with nm; it was not run here.

Independent re-verification: Checked by reading Misc.hpp, CheckUnimplementedRuntimeFacade.cmake, its add_test registration in CMakeLists.txt and the coverage mapping at 009d40f5, and by searching the tree for includes of the header and for definitions of the methods (none). CNA's own check inspects the compiled runtime archive with nm; it was not run here.

Focused reproduction

Illustrative: CNA::Runtime r; r.Initialize({}); compiles against the header and fails to link with an undefined reference to CNA::Runtime::Initialize.

Current tests

The CMake check above is the only guard; no unit test covers the facade because there is nothing to call.

Regression test

If the facade is implemented: unit tests for each flag and the C API rows the coverage mapping marks not applicable. If it is removed: the header disappears and the CMake check and mapping rule go with it.

Blast radius

Only code that tries to use CNA::Runtime or CNA::RuntimeOptions; nothing in CNA does. The failure is a link error, never a runtime misbehaviour.

Workaround

Use Game (or the C API's game handle) as the startup and shutdown boundary.

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