Current bugs
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.
Existing behaviour violates an intended or documented contract. Every entry below exists at CNA 009d40f5; open an entry for its expected and actual behaviour, source locations, evidence and blast radius.
232 entries
| ID | Title | Subsystem | Status | Severity | Evidence basis |
|---|---|---|---|---|---|
CNA-BUG-001 | Plane::Transform(plane, matrix) transposes the inverse in place through a non-aliasing-safe Matrix::Transpose | Math & geometry | open | high | reproduced |
CNA-BUG-002 | BoundingSphere::Contains(const BoundingFrustum&) never returns Disjoint | Math & geometry | open | medium | source-verified |
CNA-BUG-003 | BoundingBox::Contains(const BoundingFrustum&) never returns Disjoint and answers Contains when only the first frustum corner is outside | Math & geometry | open | medium | source-verified |
CNA-BUG-004 | BoundingFrustum::Intersects(Ray) never computes an entry distance: rays starting outside always miss, and an origin on a plane throws | Math & geometry | open | medium | source-verified |
CNA-BUG-006 | SpriteEffect caches a MatrixTransform parameter that never exists, so OnApply() never sets the sprite projection | Graphics & renderers | open | low | source-verified |
CNA-BUG-008 | Load<Song> and Load<Video> resolve a same-named .cnj file and return a media object that points at JSON | Content & XNB/CNB/CNJ | open | medium | reproduced |
CNA-BUG-012 | Two tests still encode the wrong occlusion-query expectation for SDL_GPU after the renderer was made truthful | Testing & evidence | narrowed | low | source-verified |
CNA-BUG-016 | The .cnj JSON parser (CNA::Internal::ParseJson) recurses without a nesting limit, so a small crafted document overflows the stack | Content & XNB/CNB/CNJ | open | medium | reproduced |
CNA-BUG-017 | XnbReadLimits::maxFileSize is not applied to ContentManager's whole-file .xnb reads | Content & XNB/CNB/CNJ | open | low | source-verified |
CNA-BUG-021 | ContentManager::Unload() only clears the cache; it disposes none of the assets it loaded | Content & XNB/CNB/CNJ | open | medium | source-verified |
CNA-BUG-022 | ReflectiveTypeReader has no TypeVersion, so an XNA .xnb for a [ContentSerializerTypeVersion] type is rejected | Content & XNB/CNB/CNJ | open | low | source-verified |
CNA-BUG-025 | PlaneIntersectionType's Doxygen swaps the meaning of Front and Back | Documentation & release tooling | open | low | source-verified |
CNA-BUG-026 | Matrix::CreatePerspectiveFieldOfView accepts a field of view of exactly MathHelper::Pi | Math & geometry | open | low | source-verified |
CNA-BUG-027 | Vector Clamp, Min and Max resolve inverted ranges and NaN operands differently from XNA | Math & geometry | open | low | source-verified |
CNA-BUG-028 | Curve::ComputeTangent Smooth tangents test the key spacing against two different epsilons, where XNA tests the value difference against one | Math & geometry | open | low | reproduced |
CNA-BUG-029 | Copying a GraphicsResource bypasses GraphicsDevice resource tracking (copies of Texture2D and TextureCube escape device disposal) | Graphics & renderers | narrowed | medium | source-verified |
CNA-BUG-035 | devices-tests.yml's exact-name gtest filters skip seven Microsoft::Devices suites and never match the FileDialog and MessageBox suites | Build & CI | open | low | source-verified |
CNA-BUG-036 | run-all-renderer-smoke-tests.sh ignores the build's exit status, and its '-- -k' build flag aborts every Ninja build, so smoke verdicts can come from stale binaries | Testing & evidence | narrowed | low | source-verified |
CNA-BUG-041 | ContentManager resolves a relative RootDirectory against the working directory, not TitleLocation, and its .cnb and loose tiers cannot see Android packaged assets | Content & XNB/CNB/CNJ | narrowed | medium | reproduced |
CNA-BUG-045 | THIRD_PARTY_NOTICES.md still omits the vendored cgltf and stb image headers (and ENet and dr_libs) | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-047 | StorageContainer::GetFileNames/GetDirectoryNames(searchPattern): GlobMatch treats ? as one byte and compares case-sensitively on every host | Storage | open | low | source-verified |
CNA-BUG-049 | Accelerometer, Gyroscope, Compass and Motion declare Dispose(bool) public, so an external Dispose(false) marks the sensor disposed without cleanup | Input | narrowed | low | source-verified |
CNA-BUG-050 | Guide message-box and keyboard-input results cannot be waited on: GamerServicesDispatcher::Update pumps nothing and their AsyncWaitHandle is signalled before completion | Networking & gamer services | narrowed | low | source-verified |
CNA-BUG-052 | SongTypeReader and MediaLibraryIndex offer song formats (.opus, .aac, .wma) that no CNA-configured mixer decodes | Audio & media | open | low | inferred (strong) |
CNA-BUG-054 | HEADLESS reports occlusion-query support and a precise pixel count while its query always answers 1 | Graphics & renderers | narrowed | low | source-verified |
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 | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-056 | docs/c-api/FEATURE_MATRIX.md and docs/c-api/README.md still present the C ABI as version 0.1.0 while abi.h declares 0.29.0 | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-057 | RegisterAllBuiltInXnbReaders() documentation still calls the general EffectReader a known-unsupported placeholder | Documentation & release tooling | open | low | source-verified |
CNA-BUG-058 | LIMITATIONS.md omits the 468 planned C API symbols and RELEASE_GATE.md still attributes 654 declarations to CBIND-117 | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-061 | README.md, docs/coverage.md and docs/xna-4-api-coverage.md still report 3,467/3,627 runtime members and 160 gaps; the generated report says 3,627/3,627 | Documentation & release tooling | open | low | source-verified |
CNA-BUG-062 | MODULE_SCOPE in generate_coverage_inventory.py leaves design, diagnostics and inspector unclassified, so every C API inventory gate stops | Documentation & release tooling | open | medium | reproduced |
CNA-BUG-063 | Vector3::Length, LengthSquared, Distance and DistanceSquared accumulate in float, not at the width CNA measured XNA to use | Math & geometry | open | low | recorded by CNA |
CNA-BUG-064 | Curve::Evaluate reads the wrong key for Step continuity away from position 1 and for a Linear post-loop | Math & geometry | open | medium | source-verified |
CNA-BUG-065 | Curve::Evaluate divides by zero for coincident key positions, returning NaN and converting infinity to int in the cyclic loop modes | Math & geometry | open | low | source-verified |
CNA-BUG-066 | BoundingFrustum::Contains(Vector3) answers Intersects for a point exactly on a plane and skips the remaining planes | Math & geometry | open | low | source-verified |
CNA-BUG-067 | Math argument failures throw a mix of Sharp Runtime and std:: exception types that differs between near-identical functions | Math & geometry | open | low | source-verified |
CNA-BUG-068 | Vector2/3/4 and Matrix division by a scalar divide every component where XNA 4.0 multiplies by one reciprocal | Math & geometry | open | low | source-verified |
CNA-BUG-069 | Ray::Intersects(BoundingBox) and Ray::Intersects(BoundingSphere) differ from XNA 4.0 on degenerate and boundary rays | Math & geometry | open | low | reproduced |
CNA-BUG-070 | BoundingSphere::Contains(Vector3) and Contains(BoundingSphere) return different ContainmentType values from XNA 4.0 | Math & geometry | open | medium | source-verified |
CNA-BUG-071 | BoundingFrustum::Intersects differs from XNA 4.0: box and sphere overloads use a conservative plane test, and the Plane overload counts an on-plane corner as Intersecting | Math & geometry | open | low | source-verified |
CNA-BUG-072 | BoundingBox::ToString and Ray::ToString emit literal doubled braces ({{Min:... }}) where XNA 4.0 prints single braces | Math & geometry | open | low | source-verified |
CNA-BUG-073 | Math ToString methods print floats with six significant digits and the C++ global locale, where XNA 4.0 uses Single.ToString(CurrentCulture) | Math & geometry | open | low | inferred (strong) |
CNA-BUG-074 | Vector, Matrix, Quaternion and CurveKey hash codes use raw float bits, so +0.0f and -0.0f components compare equal but hash differently | Math & geometry | open | low | source-verified |
CNA-BUG-075 | Point declares +, -, * and / operators that XNA 4.0's Point does not have, without the CNAEXT marker, and / has no divide-by-zero guard | Math & geometry | open | low | source-verified |
CNA-BUG-076 | Color::FromNonPremultiplied(int r, int g, int b, int a) multiplies in 32-bit int, so large arguments overflow (undefined behaviour) | Math & geometry | open | low | source-verified |
CNA-BUG-077 | An invalid CNA_GRAPHICS_RENDERER value (or Module.cnaPreferredRenderer) terminates the process during static initialisation | Core & runtime | open | low | source-verified |
CNA-BUG-078 | Game::PollEvents fires the renderer's test-only context-loss hooks on F9/F10 in every build | Core & runtime | open | medium | source-verified |
CNA-BUG-080 | The Emscripten Game loop (EmscriptenMainLoopCallback) does not implement Game's loop contract | Core & runtime | open | medium | source-verified |
CNA-BUG-081 | Game::InactiveSleepTime is stored and validated but the loop never sleeps while the game is inactive | Core & runtime | open | low | source-verified |
CNA-BUG-082 | GraphicsDeviceManager leaves dangling references when its lifetime is not nested inside its Game | Core & runtime | open | low | source-verified |
CNA-BUG-083 | PhoneApplicationService::getCurrentProperty()'s static instance detaches from an already-destroyed Game during static destruction | Core & runtime | open | medium | source-verified |
CNA-BUG-085 | GameTime.IsRunningSlowly follows FNA's lag counter, not XNA 4.0's rule | Core & runtime | open | low | source-verified |
CNA-BUG-086 | GameComponent::Dispose(true) does not remove the component from Game.Components | Core & runtime | open | medium | source-verified |
CNA-BUG-087 | Game::Dispose(true) walks Components by live index, so a component that removes itself or another during Dispose makes the loop skip one | Core & runtime | open | low | source-verified |
CNA-BUG-088 | In variable-step mode Game gives its first updates a non-zero ElapsedGameTime where XNA 4.0 reports zero | Core & runtime | open | low | source-verified |
CNA-BUG-090 | GraphicsDeviceInformation accepts a null Adapter, and GraphicsDeviceManager then binds a reference through that null pointer | Core & runtime | open | low | source-verified |
CNA-BUG-091 | GameWindow keeps a raw pointer to the platform window owned by the Game's GraphicsDevice, and nothing clears it when the game disposes that device | Core & runtime | open | low | source-verified |
CNA-BUG-092 | Public non-XNA members Texture::GetFormatSizeEXT, GetBlockSizeSquaredEXT, GetPixelStoreAlignment, ValidateGetDataFormat and GameWindow's IsBorderlessEXT accessors carry no CNAEXT marker | Core & runtime | open | low | source-verified |
CNA-BUG-093 | HeadlessRenderer::GetLastFrameStatistics() reports the frame in progress, not the finished frame its documentation names | Graphics & renderers | open | low | source-verified |
CNA-BUG-094 | SDL_GPU claims compute and SPIR-V shader intake on every device, including Direct3D 12 and Metal drivers that cannot take raw SPIR-V | Graphics & renderers | open | low | inferred (strong) |
CNA-BUG-095 | A GraphicsDevice constructor that fails after renderer resolution leaves the selection latched to the renderer it destroyed | Graphics & renderers | open | low | source-verified |
CNA-BUG-096 | VulkanRenderer's constructor leaks the Vulkan handles it created when a later construction step throws | Graphics & renderers | open | low | source-verified |
CNA-BUG-097 | RenderPipeline::releaseDeviceResourcesEXT() keeps the Bloom, SSAO and volumetric-fog target pools, and the memory estimate never counts them | Graphics & renderers | open | low | source-verified |
CNA-BUG-098 | A throwing shadow-caster or transparent-phase callback leaves RenderPipeline and its ShadowMap in an unrecoverable state | Graphics & renderers | open | low | source-verified |
CNA-BUG-099 | 24 classic SDL_GPU CTests still fail in CNA's latest recorded run; CNA's records name a cause for only three of them | Graphics & renderers | open | medium | recorded by CNA |
CNA-BUG-101 | GraphicsDevice::Reset rolls back only the window and virtual-resolution stage; a later renderer failure leaves the new PresentationParameters stored and DeviceReset unraised | Graphics & renderers | open | low | source-verified |
CNA-BUG-102 | On DIRECTX9, SetContextRecoveryEnabled and SetStringMarkerEXT throw 'not yet implemented', and GraphicsDevice has already changed the recovery flag when the first one throws | Graphics & renderers | open | low | source-verified |
CNA-BUG-103 | VULKAN clears every colour attachment of a multiple-render-target set, so PreserveContents targets lose their contents when bound as part of an MRT set | Graphics & renderers | open | medium | source-verified |
CNA-BUG-104 | DIRECTX9 reports AnisotropicFiltering and MultiSampleAntiAliasing unconditionally and writes MaxAnisotropy to the sampler without clamping to the device cap | Graphics & renderers | open | low | source-verified |
CNA-BUG-105 | SDL_RENDERER clips to any non-empty ScissorRectangle even when RasterizerState.ScissorTestEnable is false | Graphics & renderers | open | medium | source-verified |
CNA-BUG-106 | ShaderEffect, PbrEffect, SkinnedPbrEffect and ColorMatrixEffect clone a disposed source instead of throwing ObjectDisposedException | Graphics & renderers | open | low | source-verified |
CNA-BUG-107 | DIRECTX9 draws a 3D ShaderEffect with the stock BasicEffect shader (16-byte vertices) or fails with a BasicEffect vertex-layout error instead of using or refusing the custom effect | Graphics & renderers | open | low | source-verified |
CNA-BUG-109 | The engine layer's capability-name table has no IndirectDraw entry, although its comment says a missing capability fails to compile | Graphics & renderers | open | low | source-verified |
CNA-BUG-110 | Stock-effect state is captured at draw time, so a property changed after EffectPass::Apply() affects the next draw, unlike XNA | Graphics & renderers | open | low | source-verified |
CNA-BUG-111 | ShaderEffect::SetTexture(int, Texture2D&), SetTexture(int, TextureCube&) and SetTexture(int, Texture3D&) evaluate *renderer_ of a disposed texture (an empty shared_ptr) and forward a null pointer instead of throwing ObjectDisposedException | Graphics & renderers | open | low | source-verified |
CNA-BUG-112 | On VULKAN SpriteBatch draws are never tagged with the active OcclusionQuery: a sprite-only Begin/End span reports PixelCount 0, and sprites in a mixed span are counted only by record order | Graphics & renderers | open | medium | source-verified |
CNA-BUG-113 | An enabled zero-area ScissorRectangle draws unclipped on VULKAN and SDL_GPU, while WEBGPU clips everything and METAL suppresses the draw | Graphics & renderers | open | medium | recorded by CNA |
CNA-BUG-114 | WEBGPU always creates a Depth24PlusStencil8 back-buffer depth attachment but PresentationParameters keeps the requested DepthFormat | Graphics & renderers | open | low | source-verified |
CNA-BUG-115 | DIRECTX9 requests D3DPRESENT_INTERVAL_TWO without checking device support, and a failing Reset is then retried on every Present | Graphics & renderers | open | low | inferred (probable) |
CNA-BUG-116 | DIRECTX9 never resolves multisampled render targets bound as a multiple-render-target set | Graphics & renderers | open | medium | source-verified |
CNA-BUG-117 | The SdlRenderer constructor maps any positive swap interval to 1, so a device constructed with PresentInterval::Two runs at interval 1 until the next reset | Graphics & renderers | open | low | source-verified |
CNA-BUG-118 | GraphicsDevice::GetMaxTextureDimension() is documented as the renderer's real maximum, but most renderers return an unqueried 16384 that the capability profile marks as known | Graphics & renderers | open | low | source-verified |
CNA-BUG-119 | The XNB type-reader registry is process-wide and unsynchronised, and every reader construction writes to it | Content & XNB/CNB/CNJ | open | medium | source-verified |
CNA-BUG-120 | ContentManager::LoadXnbAssetUntyped lacks LoadXnbAsset<T>'s compressed-header guard and refuses LZ4 | Content & XNB/CNB/CNJ | open | medium | source-verified |
CNA-BUG-121 | ContentManager::Load<T> never calls the virtual OpenStream, so ResourceContentManager::Load<T> ignores its resource family | Content & XNB/CNB/CNJ | open | medium | source-verified |
CNA-BUG-122 | ContentManager::Load<T> leaks non-XNA exception types: std::bad_any_cast for a wrong .xnb type, unwrapped Load<SoundEffect> errors, std::runtime_error when disposed | Content & XNB/CNB/CNJ | open | medium | source-verified |
CNA-BUG-123 | ContentManager has no in-progress guard, so an .xnb external-reference cycle recurses until the stack overflows | Content & XNB/CNB/CNJ | open | low | source-verified |
CNA-BUG-124 | ContentManager::Load<T> holds a plain reference to the loose-file reader, so RegisterTypeReader<T> during that reader's Read destroys it mid-call | Content & XNB/CNB/CNJ | open | low | source-verified |
CNA-BUG-125 | DecompressXnbPayload grows the LZX output without bound and checks it against the declared size only after the last block | Content & XNB/CNB/CNJ | open | low | source-verified |
CNA-BUG-126 | ContentReader::InnerReadObjectAny bypasses the object-nesting depth guard, so nested object-typed values recurse without limit | Content & XNB/CNB/CNJ | open | low | source-verified |
CNA-BUG-128 | Model::Draw indexes its bone scratch buffer with bone 0 even for a model with no bones | Models & glTF | open | low | source-verified |
CNA-BUG-129 | BlendMorphTargetsEXT indexes NormalDeltas and every per-vertex delta array without checking their lengths | Models & glTF | open | low | source-verified |
CNA-BUG-130 | The .cnj Model reader truncates vertex and index sidecar sizes and never range-checks indices, where the SkinnedModel reader refuses the same input | Models & glTF | open | low | source-verified |
CNA-BUG-131 | The .cnj Model bones parser accepts forward or self parent indices and turns a malformed transform into identity | Models & glTF | open | low | source-verified |
CNA-BUG-132 | FNA_KEYBOARD_USE_SCANCODES does not make Keyboard::GetState layout-independent; only the input bridge and GetKeyFromScancodeEXT honour it | Input | open | medium | source-verified |
CNA-BUG-133 | DIRECTX11, DIRECTX12, FREEDIRECT and METAL implement the window-to-logical transform but never register for their window, so mouse and touch input ignore it | Input | open | medium | source-verified |
CNA-BUG-134 | Inside a letterbox bar, Mouse::GetState reports the raw window coordinate on renderers whose transform declines the point | Input | open | low | source-verified |
CNA-BUG-135 | Mouse::SetCaptureEXT, GetGlobalPositionEXT and WarpGlobalEXT let PlatformNotSupportedException escape on Wayland and the terminal platform | Input | open | low | source-verified |
CNA-BUG-137 | MediaPlayer::Play(Song*) reads and writes a destroyed Song when given a Song that the queue owns | Audio & media | open | high | reproduced |
CNA-BUG-138 | MediaPlayer flags ActiveSongChanged on every Play(Song*), even for the same song, and never for Play(const SongCollection&[, index]) | Audio & media | open | low | source-verified |
CNA-BUG-139 | MediaPlayer::Play(Song*) records Duration and PlayCount on the caller's Song instead of the queued copy, and Stop never resets that PlayCount | Audio & media | open | low | source-verified |
CNA-BUG-140 | MediaPlayer::Play reports no error when a song cannot be played and can leave the player Playing with no track | Audio & media | open | medium | source-verified |
CNA-BUG-141 | MediaPlayer::ProgramExit is documented as called at application exit, but nothing in CNA calls it | Audio & media | open | low | source-verified |
CNA-BUG-142 | Without a mixer (SDL2 or NULL audio) songs never end: queued copies carry no Duration, so the elapsed-time fallback never fires | Audio & media | open | low | source-verified |
CNA-BUG-143 | VideoPlayer and Video keep raw pointers to each other, so destroying a Video before its player is stopped writes to freed memory | Audio & media | open | medium | reproduced |
CNA-BUG-144 | VideoPlayer::GetTexture lets the decoder's std::runtime_error escape, undocumented, and leaves the player Playing | Audio & media | open | low | source-verified |
CNA-BUG-145 | VideoDecoder::SetVideoStream switches to another video stream mid-playback without seeking, so decoding resumes at a non-keyframe position | Audio & media | open | low | inferred (strong) |
CNA-BUG-146 | VideoDecoder converts every YUV frame with one full-range BT.601 matrix: limited-range and BT.709 video decode with wrong levels and colours | Audio & media | open | medium | reproduced |
CNA-BUG-147 | SoundBank::PlayCue destroys a fire-and-forget cue that is still playing five minutes after it started | Audio & media | open | medium | source-verified |
CNA-BUG-148 | DynamicSoundEffectInstance::SubmitBuffer accepts empty and non-frame-aligned buffers that XNA rejects | Audio & media | open | low | source-verified |
CNA-BUG-149 | Microphone::Start reports Started even when the capture device could not be opened | Audio & media | open | low | source-verified |
CNA-BUG-150 | StorageDevice::EnsureStorageRoot publishes its initialised flag before the root, without synchronisation | Storage | open | low | source-verified |
CNA-BUG-151 | StorageDevice::EnsureStorageRoot latches an empty root after a failed resolution, and storage then operates in the working directory | Storage | open | medium | source-verified |
CNA-BUG-152 | StorageDevice::getFreeSpaceProperty, getTotalSpaceProperty and getIsConnectedProperty pass the UTF-8 root to std::filesystem through the narrow path constructor | Storage | open | low | inferred (strong) |
CNA-BUG-153 | StorageContainer::DeleteFile removes an empty directory and DeleteDirectory removes a file | Storage | open | low | source-verified |
CNA-BUG-154 | A save container titled GamerServices shares its directory with the gamer-services store, so DeleteContainer("GamerServices") deletes local achievements and leaderboards | Storage | open | low | source-verified |
CNA-BUG-155 | StorageContainer members keep working after Dispose instead of throwing ObjectDisposedException | Storage | open | low | source-verified |
CNA-BUG-156 | HttpNotificationChannel answers length-less, chunked and truncated pushes with 200 and reads request bodies of unbounded size | Networking & gamer services | open | low | source-verified |
CNA-BUG-157 | HttpNotificationChannel::Close and the channel destructor block indefinitely while a connected peer sends nothing | Networking & gamer services | open | medium | source-verified |
CNA-BUG-158 | RawPushNotificationMessage::SendAsync and ToastPushNotificationMessage::SendAsync return true for a push the receiver rejected | Networking & gamer services | open | low | source-verified |
CNA-BUG-159 | ToastPushNotificationMessage::SendAsync inserts Title and SubTitle into the toast XML without escaping | Networking & gamer services | open | low | source-verified |
CNA-BUG-160 | Two open HttpNotificationChannel objects with the same name leave Find unable to locate one that is still open | Networking & gamer services | open | low | source-verified |
CNA-BUG-161 | A handler that throws during HttpNotificationChannel::DispatchPendingNotificationsEXT discards every remaining notification of that batch | Networking & gamer services | open | low | source-verified |
CNA-BUG-162 | The phone notification channel and sender never initialise Winsock, cannot detect INVALID_SOCKET and have no Windows test | Networking & gamer services | open | medium | inferred (strong) |
CNA-BUG-163 | HttpNotificationChannel writes its reply with ::send flags 0, so a peer that aborts its connection mid-request can end the process with SIGPIPE | Networking & gamer services | open | medium | inferred (strong) |
CNA-BUG-164 | HttpNotificationChannel's listener reads listenSocket_ unsynchronised while Close resets it, and spins without backoff on a persistent accept error | Networking & gamer services | open | low | source-verified |
CNA-BUG-165 | LeaderboardReader::Read, PageDown and PageUp never delete the LeaderboardAction their Begin call allocates | Networking & gamer services | open | low | source-verified |
CNA-BUG-166 | GamerServicesDispatcher::Initialize deletes every SignedInGamer in the installed collection, including gamers the application created | Networking & gamer services | open | medium | source-verified |
CNA-BUG-167 | LocalGamerServicesStore rounds 64-bit values through double and renames an unchecked temporary write over the store file | Networking & gamer services | open | low | source-verified |
CNA-BUG-168 | LocalGamerServicesStore maps distinct gamertags to one achievements file when they differ only in characters outside A-Z, a-z, 0-9, '.', '_' and '-' | Networking & gamer services | open | low | reproduced |
CNA-BUG-169 | NetworkSession::GamerJoined reports a gamer added with AddLocalGamer twice to a handler subscribed between that call and the next Update | Networking & gamer services | open | low | source-verified |
CNA-BUG-170 | A joined SystemLink session answers LAN discovery for itself and handles ClientHello as if it were the host | Networking & gamer services | open | medium | source-verified |
CNA-BUG-171 | LocalNetworkGamer::ReceiveData(PacketReader&, NetworkGamer*&) does not resize the reader, so a reused reader keeps the previous packet's Length and trailing bytes | Networking & gamer services | open | low | source-verified |
CNA-BUG-172 | A joined SystemLink session reports MaxGamers 31 and PrivateGamerSlots 4 instead of the host's values | Networking & gamer services | open | low | source-verified |
CNA-BUG-173 | GamerPresence maps a presence mode to its display string through an alphabetically ordered table indexed by the enum ordinal | Networking & gamer services | open | low | source-verified |
CNA-BUG-174 | LocalNetworkGamer::ReceiveData(PacketReader&, NetworkGamer*&) always returns 0 instead of the packet size | Networking & gamer services | open | low | source-verified |
CNA-BUG-175 | The bundled procedural avatar's garment shells interpenetrate its body, leaving the collar and cuffs visible through the skin | Networking & gamer services | open | low | recorded by CNA |
CNA-BUG-176 | Setting Game::IsMouseVisible throws PlatformException on the terminal platform when the terminal reports mouse input | Platforms | open | medium | source-verified |
CNA-BUG-177 | The Headless and Terminal window constructors accept BorderlessFullscreen although their own SetFullscreenMode refuses it | Platforms | open | low | source-verified |
CNA-BUG-178 | The SDL2 backend negates a flipped mouse wheel while SDL3 passes SDL's adjusted value through, so the two report opposite signs under natural scrolling | Platforms | open | low | source-verified |
CNA-BUG-179 | Win32 EnterExclusiveFullscreen fails silently yet GetFullscreenMode reports ExclusiveFullscreen | Platforms | open | low | source-verified |
CNA-BUG-180 | Win32GlContext ignores multisample and per-channel format requests and reports the requested description as if it were granted | Platforms | open | low | source-verified |
CNA-BUG-181 | Sdl3Platform reports the nativeFileDialog capability on iOS and web builds, where SDL has no usable file-dialog backend | Platforms | open | low | inferred (strong) |
CNA-BUG-182 | Win32Dialogs file dialogs run modally inside Show* and invoke the callback before returning, contrary to the IPlatformDialogs timing contract | Platforms | open | low | source-verified |
CNA-BUG-183 | The SDL3 file-dialog and tray-entry trampolines call application callbacks without a try/catch, so a throwing handler unwinds through SDL's C code | Platforms | open | low | reproduced |
CNA-BUG-184 | Core's build files still carry dependencies its sources dropped: -lembind on Emscripten and a link probe that tolerates SDL3 | Build & CI | open | low | source-verified |
CNA-BUG-185 | Stub_Smoke links SDL3::SDL3 unconditionally, so STUB + tests cannot be configured with CNA_ENABLE_SDL=OFF | Build & CI | open | low | source-verified |
CNA-BUG-186 | CNA_ENABLE_VIDEO=AUTO accepts any pkg-config FFmpeg, but VideoDecoder.cpp needs the FFmpeg 5.1 channel-layout API | Build & CI | open | low | inferred (strong) |
CNA-BUG-189 | The GDI renderer's configure message hard-codes '3 GDI-owned units' while modules/renderers/gdi/src compiles four | Build & CI | open | low | source-verified |
CNA-BUG-190 | modules/renderers/CMakeLists.txt enters common/d3d, the GDI software sources and the Metal renderer target only when the default identity matches, so a multi-renderer set that lists DIRECTX11, DIRECTX12, GDI or METAL without the matching default passes the combination rules and then cannot build | Build & CI | open | low | inferred (strong) |
CNA-BUG-191 | cna_configure_vendored_enet tells the user to run 'git submodule update --init third_party/enet', but ENet is committed in the tree, not a submodule | Build & CI | open | low | source-verified |
CNA-BUG-192 | metal-macos-ci.yml's push path filter names three CMake files that no longer exist and omits the files that now register the Metal tests | Build & CI | open | low | source-verified |
CNA-BUG-193 | general-tests-ci.yml still allowlists EasyGL_GraphicsDevice_ReferenceStencil as a known failure after REMED-GFX-236 fixed it, so a regression of that test cannot turn the job red | Build & CI | open | low | source-verified |
CNA-BUG-194 | The SDL2-only configuration guard recommends VULKAN, which the SDL2 platform cannot run | Build & CI | open | low | source-verified |
CNA-BUG-195 | The SDL2-only guard inspects only CNA_GRAPHICS_RENDERER, so a multi-renderer list containing an SDL3-linked family is not refused | Build & CI | open | low | source-verified |
CNA-BUG-196 | CNA_X11_HAVE_VULKAN_HEADERS is defined by the X11 CMake but read by no source, so the dependency summary implies a Vulkan-header gate that does not exist | Build & CI | open | low | source-verified |
CNA-BUG-197 | cmake/toolchains/mingw-w64.cmake falls back to the i686 compiler but keeps CMAKE_SYSTEM_PROCESSOR x86_64, so the persistent SDL install key mislabels a 32-bit build | Build & CI | open | low | source-verified |
CNA-BUG-198 | Link-closure tests pass --build-dir ${CMAKE_BINARY_DIR}, so when CNA is added as a subproject they look for link.txt in the consumer's build root and always skip | Build & CI | open | low | source-verified |
CNA-BUG-199 | Six CI workflows pin August 2026 sharp-runtime commits that lack components CNA's default closure requests (Xml.Serialization off Windows, Resources everywhere), so they stop at configure | Build & CI | open | medium | source-verified |
CNA-BUG-200 | The registered CTest CNAEXT_NoPosixSetenv fails at this snapshot: twelve Wayland setenv/unsetenv call lines trip the gate | Build & CI | open | medium | reproduced |
CNA-BUG-201 | StorageDeviceDeleteContainerTest writes to and deletes inside the developer's real per-user data directory | Testing & evidence | open | low | source-verified |
CNA-BUG-202 | In a multi-renderer build, non-default renderers' example CTests are registered but run under the default renderer | Testing & evidence | open | medium | source-verified |
CNA-BUG-203 | SdlGpu_2D_HeadlessDriver forces headless mode under the x11 video driver that the SDL_GPU constructor refuses for it | Testing & evidence | open | low | recorded by CNA |
CNA-BUG-204 | CnjEffectTest.LoadsRealCnjFixture and CnjStockEffectTest.CustomGlslEffectStillWorks expect a valid GLSL ES effect on any renderer that executes shader source under a non-HLSL dialect, which WebGPU (WGSL only) and SDL_GPU with libshaderc (Vulkan-rule GLSL) refuse | Testing & evidence | open | low | inferred (strong) |
CNA-BUG-205 | SDL_Renderer_ClearOptions_Audit encodes Clear semantics that no longer exist and catches the wrong exception type, so it cannot pass at this snapshot | Testing & evidence | open | low | source-verified |
CNA-BUG-206 | Software_XnaLineCoverage passes when a scene differs from the XNA reference: run-oracle-corpus-diff-software.sh fails only on render errors | Testing & evidence | open | low | reproduced |
CNA-BUG-207 | Delta-maintained diagnostics gauges such as Audio/AllocatedVoices drift after a runtime OFF window | Diagnostics & Inspector | open | low | reproduced |
CNA-BUG-208 | On Emscripten a diagnostics frame excludes the requestAnimationFrame wait, so FrameSample.framesPerSecond is a work rate there | Diagnostics & Inspector | open | low | source-verified |
CNA-BUG-209 | Inspector ServerHello.graphicsRenderer reports the compile-time default renderer, not the one GraphicsRendererSelection actually created | Diagnostics & Inspector | open | low | source-verified |
CNA-BUG-210 | A diagnostics name or resource label longer than 4,096 bytes makes every Inspector snapshot or event batch that contains it fail with LimitExceeded | Diagnostics & Inspector | open | low | reproduced |
CNA-BUG-211 | Agent::Stop can wait up to about six seconds for a connection that the accept loop takes around the time Stop runs | Diagnostics & Inspector | open | low | source-verified |
CNA-BUG-212 | cna_graphics_resource_get_graphics_device returns CNA_RESULT_INVALID_HANDLE for every resource created on a caller-created GraphicsDevice | C API & bindings | open | low | source-verified |
CNA-BUG-213 | audio.h and AUDIO.md call cna_dynamic_sound_effect_instance_submit_buffer safe from a producer thread, but every call off the creation thread returns CNA_RESULT_THREAD | C API & bindings | open | low | source-verified |
CNA-BUG-214 | docs/c-api/HANDLES.md documents CNA_RESULT_SHUTTING_DOWN for a closing or closed runtime, but no C API route ever returns it | C API & bindings | open | low | source-verified |
CNA-BUG-215 | GraphicsRendererSelection::IsLatched() is documented to latch when the first GraphicsDevice begins construction; it latches only on successful resolution | Documentation & release tooling | open | low | source-verified |
CNA-BUG-216 | MathTypeConverter::supportStringConvert's comment names three converters that clear it; six do | Documentation & release tooling | open | low | source-verified |
CNA-BUG-217 | docs/framework-design.md says the Framework.Design registration associates the twelve value types with ordered descriptor collections; registerConverter registers only converter factories | Documentation & release tooling | open | low | source-verified |
CNA-BUG-218 | content_readers.h documentation names cna_get_last_error_message, which does not exist | Documentation & release tooling | open | low | source-verified |
CNA-BUG-220 | cna_game_destroy's comment says Shutdown has disposed the canonical graphics device; it has not | Documentation & release tooling | open | low | source-verified |
CNA-BUG-221 | RunContentCompiler documentation says XNB output writers are registered only for --format xnb; they are registered on every run | Documentation & release tooling | open | low | source-verified |
CNA-BUG-222 | Audio comments describe behaviour the code does not have: SoundEffect::Play's instance limit, FireAndForgetPanState freeing, the is3D_ latch and SoundEffectReader's WAV route | Documentation & release tooling | open | low | source-verified |
CNA-BUG-223 | docs/input-backend.md names a SdlInputBridge ProcessEvent overload and src/Input/... paths that do not exist at TARGET | Documentation & release tooling | open | low | source-verified |
CNA-BUG-224 | GraphicsDevice's DeviceLost documentation and device-status comments still say only Direct3D 9 reports device loss | Documentation & release tooling | open | low | source-verified |
CNA-BUG-225 | Two EasyGL comments still describe runtime GL profiles (phase P11) as future work | Documentation & release tooling | open | low | source-verified |
CNA-BUG-227 | StubTextureRenderer's comment says GetData() is accepted and discarded, but the inherited default refuses the read | Documentation & release tooling | open | low | source-verified |
CNA-BUG-228 | xnb.md still says 'Status: planning document only. Nothing described here is implemented yet.' directly beneath a banner that records the XNB reader phases complete | Documentation & release tooling | open | low | source-verified |
CNA-BUG-229 | docs/graphics-renderer-feature-matrix.md calls itself up to date but still says EasyGL's ReferenceStencil gap (Task 872) is open and lists its test as a known failure, contradicting its own table row | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-230 | cna_define_shared_runtime_deferred's comment says cna_graphics_ext and cna_devices_ext exist only with CNA_CNAEXT; modules/CMakeLists.txt always creates both | Documentation & release tooling | open | low | source-verified |
CNA-BUG-231 | CHECKLIST.md's per-file port checklist still says 'FNA still wins on semantics', contradicting the rule in CLAUDE.md that XNA wins where the two disagree | Documentation & release tooling | open | low | source-verified |
CNA-BUG-232 | docs/physical-modules.md has no row for modules/platform, omits the platform and diagnostics edges of runtime, input, audio and devices-ext, and says top-level examples/ holds only examples/golden | Documentation & release tooling | open | low | source-verified |
CNA-BUG-233 | CLAUDE.md's Platform Boundary lists WIN32 as a reserved identifier that fails configuration, but cmake/PlatformSelection.cmake implements CNA_PLATFORM=WIN32 on Windows | Documentation & release tooling | open | low | source-verified |
CNA-BUG-234 | CLAUDE.md's 'WebGPU Is Active' section still gives the current WEBGPU baseline as clear/present, Texture2D, buffer uploads and SpriteBatch, contradicting its own renderer paragraph, which describes a real 3D route with render targets | Documentation & release tooling | open | low | source-verified |
CNA-BUG-235 | docs/physical-modules.md's Sharp Runtime column omits components that four modules link: Uri for phone and media, Collections.Core for input, Resources for content | Documentation & release tooling | open | low | source-verified |
CNA-BUG-236 | docs/platform-abstraction.md's Implementations table lists five backends and omits X11 and Wayland | Documentation & release tooling | open | low | source-verified |
CNA-BUG-237 | Comments in Sdl3Platform.cpp and X11Platform.cpp refer to a Game::UpdateInput() that does not exist | Documentation & release tooling | open | low | source-verified |
CNA-BUG-238 | Win32Window's CnaPlatformWindow.Owned property is written and removed but never read, and its comment misdescribes AdoptWindowHandle | Documentation & release tooling | open | low | source-verified |
CNA-BUG-239 | Two stale comments in the Win32 backend: a nonexistent spike path and a wrong Windows version | Documentation & release tooling | open | low | source-verified |
CNA-BUG-240 | X11 header comments misdescribe the connection lifetime, the service accessors and the Xlib locking | Documentation & release tooling | open | low | source-verified |
CNA-BUG-241 | docs/devices-event-contract.md and docs/devices-thread-safety.md describe sensor behaviour the code no longer has | Documentation & release tooling | open | low | source-verified |
CNA-BUG-242 | Source comments still say StorageDevice reaches the platform or the SDL preference path | Documentation & release tooling | open | low | source-verified |
CNA-BUG-243 | docs/gltf-limitations.md says CNA reverses the winding of mirrored glTF placements; the importer leaves it unchanged | Documentation & release tooling | open | low | source-verified |
CNA-BUG-244 | README.md's Usage Example does not compile (nonexistent Graphics/GraphicsDeviceManager.hpp include, unqualified CornflowerBlue) and presents every frame twice | Documentation & release tooling | open | medium | reproduced |
CNA-BUG-245 | misc/cnj.md and xnb.md say the content manifest services ResolveAssetPath's existence checks; ContentManager still probes the live filesystem on every Load | Documentation & release tooling | open | low | source-verified |
CNA-BUG-246 | docs/graphics-resource-lifetime.md says existing XNA resources hold a unique_ptr renderer and names a non-existent ITexture2DRenderer; Texture2D, Texture3D and TextureCube hold shared_ptr renderers and Texture2D's public copies share one | Documentation & release tooling | open | low | source-verified |
CNA-BUG-247 | The EasyGL L7 policy and report justify zero tolerance with 'all 137 renderable assets' while the report's own fields record 140 captured, byte-identical assets | Documentation & release tooling | open | low | source-verified |
CNA-BUG-248 | PacketReader::ReadColor and PacketWriter::Write(Color) doc comments still say ReadColor reads four floats and is not the inverse of Write(Color) | Documentation & release tooling | open | low | source-verified |
CNA-BUG-249 | misc/CNAEXT.md's 'Renderer shader coverage for PBR' table omits OPENGL4 and METAL and still says WebGPU has no SkinnedPbrEffect path | Documentation & release tooling | open | low | source-verified |
CNA-BUG-250 | LocalNetworkGamer::SendData in a Local or LocalWithLeaderboards session silently drops every packet, so neither the sender nor another local gamer ever receives it | Networking & gamer services | open | low | source-verified |
CNA-BUG-251 | BoundingSphere(Vector3 center, float radius) accepts a negative radius, where XNA 4.0 throws ArgumentException | Math & geometry | open | low | source-verified |
CNA-BUG-252 | Vector3, Vector4, Quaternion and Matrix GetHashCode add raw int bit patterns with signed arithmetic, which overflows (undefined behaviour) for ordinary values | Math & geometry | open | low | recorded by CNA |
CNA-BUG-253 | SdlGpu_ConstructorExceptionSafety aborts with a double free, a defect CNA's own record calls real and leaves unfixed | Graphics & renderers | open | medium | recorded by CNA |
CNA-BUG-254 | docs/directx9-renderer.md says the DIRECTX9 custom ShaderEffect phase (D9-11) has not been started; plans/plan_dx9.md records it fully closed on 2026-07-15 | Documentation & release tooling | open | low | source-verified |
CNA-BUG-255 | EasyGL family: ClearColorAndStencil leaves the stencil write mask forced to all ones, so a later draw ignores StencilWriteMask | Graphics & renderers | narrowed | low | source-verified |
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 | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-257 | PORTABLEGL depth clears force glDepthMask(GL_TRUE) and never restore it, although their own comment says both masks are restored as EasyGL does | Graphics & renderers | open | low | source-verified |
CNA-BUG-258 | LocalNetworkGamer::ReceiveData(byte buffer, offset) dequeues and silently truncates a packet larger than the buffer, where XNA throws ArgumentException without dequeuing | Networking & gamer services | open | low | source-verified |
CNA-BUG-259 | Matrix::Decompose follows FNA's algorithm, not XNA 4.0's: a mirrored matrix decomposes to positive scales and a non-unit quaternion, and a sheared matrix reports success | Math & geometry | open | medium | source-verified |
CNA-BUG-260 | ExitingEventArgs is documented as the data of Game.Exiting but nothing delivers it, and this non-XNA type carries no CNAEXT marker | Core & runtime | open | low | source-verified |
CNA-BUG-261 | Comments and docs say GpuDrawParams::specularEnabled is read by no renderer and DIRECTX9's specular variants are blocked, but D3D9EffectDraw and Fna3dDraw read it | Documentation & release tooling | open | low | source-verified |
CNA-BUG-262 | CnaTests is linked with both -sJSPI=1 and -sASYNCIFY=1 on Emscripten; emcc lets the later flag win, so the JSPI its CMake comment relies on is silently replaced by Asyncify | Build & CI | open | low | inferred (strong) |
CNA-BUG-263 | TerminalMouse::SetPosition throws PlatformException although IPlatformMouse::SetPosition documents no exception, so XNA's Mouse.SetPosition throws on the terminal platform | Input | open | low | source-verified |
CNA-BUG-264 | Vulkan passes XNA's normalised RasterizerState.DepthBias to vkCmdSetDepthBias unscaled, so a realistic bias has no effect | Graphics & renderers | open | medium | source-verified |
CNA-BUG-265 | SignedInGamer::SignedIn does not replay already signed-in gamers to a late subscriber, unlike XNA 4.0 | Networking & gamer services | open | low | source-verified |
CNA-BUG-266 | GamerServicesDispatcher::Initialize re-initialises silently when gamer services are already initialised, where XNA 4.0 throws InvalidOperationException | Networking & gamer services | open | low | source-verified |
CNA-BUG-267 | A join beyond MaxGamers is not refused: the host sends ServerWelcome, AddRemoteGamer throws Session is full!, and the receive path's catch-all drops it, so SessionFull is never raised | Networking & gamer services | open | medium | source-verified |
CNA-BUG-268 | A NetworkSession BeginCreate, BeginFind or BeginJoin callback that calls the matching End* frees the action and the closure that is executing, and Begin* returns the freed pointer | Networking & gamer services | open | medium | source-verified |
CNA-BUG-269 | cna_validate_renderer_identity_selection says it checks the per-identity CNA_RENDERER_<X> switches, but only retired names are checked: a misspelled or unknown switch is never read and the platform's default renderer is configured silently | Build & CI | open | low | source-verified |
CNA-BUG-270 | The @param lines of cna_post_process_chain_add_owned_pass and cna_skybox_set_owned_environment say the consumed handle is invalid on return even when the call fails, but both routes release it only after every check that can fail | C API & bindings | open | low | source-verified |
CNA-BUG-271 | known_bugs.md still lists the FNA3D dangling-device use-after-free as OPEN and a lost repeated SpriteBatch Begin/End as a live symptom, although the source has fixed both | Documentation & release tooling | open | low | source-verified |
CNA-BUG-272 | misc/cnj.md's native-extension table omits .gltf and .glb, its sourceFile matrix omits Texture3D, AnimationClip and Curve, and one sentence says CNA has no JSON object type although Json.hpp defines JsonValue | Documentation & release tooling | open | low | source-verified |
CNA-BUG-273 | CLAUDE.md and AGENTS.md tell contributors to throw std::runtime_error after disposal, while the public layer throws System::ObjectDisposedException at 51 sites in the graphics module alone | Documentation & release tooling | open | low | source-verified |
CNA-BUG-274 | README.md calls the CNAEXT purity check "a dedicated CMake build option", but CNA_STRICT_XNA_API is a compile definition on two harness targets and no CMake option exists | Documentation & release tooling | open | low | source-verified |