Current bugs
Evidence basis: source-verified at the pinned commit. Claims on this page were checked by reading the CNA source at commit 3b43bd86; 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 3b43bd86; open an entry for its expected and actual behaviour, source locations, evidence and blast radius.
145 entries
| ID | Title | Subsystem | Status | Severity | Evidence basis |
|---|---|---|---|---|---|
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 | GraphicsDeviceCapabilityTest's catch-all expectations are still wrong for STUB and for Linux SDL_GPU builds without libshaderc | 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-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-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 | A copied Texture2D or TextureCube raises GraphicsDevice.ResourceDestroyed without a matching ResourceCreated, and a copy taken after its device died still reaches the device on disposal | Graphics & renderers | narrowed | low | source-verified |
CNA-BUG-035 | devices-tests.yml's exact-name gtest filters skip nine 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 | A relative ContentManager root still follows the working directory on the non-SDL3 platforms, and the loose tier cannot see Android packaged assets | Content & XNB/CNB/CNJ | narrowed | medium | source-verified |
CNA-BUG-045 | THIRD_PARTY_NOTICES.md still omits the vendored 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-050 | Guide message-box and keyboard-input results expose an AsyncWaitHandle that is already signalled while the answer is pending | 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 | CHANGELOG.md's v0.1.0-alpha.1 section says 49 renderer identities for a release that had 50 | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-056 | docs/c-api/README.md still presents the C ABI as its initial 0.1.0 library while abi.h declares 0.50.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 633 planned public C++ declarations and RELEASE_GATE.md still attributes 654 declarations to CBIND-117 | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-065 | Curve::Evaluate divides by a zero key span in the cyclic loop modes and converts the resulting infinity to int | Math & geometry | narrowed | 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(BoundingSphere) returns no hit for a ray that starts exactly on the sphere and points outward | Math & geometry | narrowed | low | reproduced |
CNA-BUG-071 | BoundingFrustum::Intersects(Plane) counts a corner lying on the plane as Intersecting, where XNA 4.0 answers Back | Math & geometry | narrowed | 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-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-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 | narrowed | 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-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-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-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-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-106 | PbrEffect, SkinnedPbrEffect and ColorMatrixEffect clone a disposed source instead of throwing ObjectDisposedException | Graphics & renderers | narrowed | low | source-verified |
CNA-BUG-107 | DIRECTX9 draws a 3D ShaderEffect with the stock BasicEffect shader or fails with a BasicEffect vertex-layout error instead of using or refusing the custom effect | 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-113 | An enabled zero-area ScissorRectangle draws unclipped on SDL_GPU, while every other rasterizing renderer clips everything | 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 Reset that rejects it leaves the device lost and retried every frame | 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-118 | GraphicsDevice::GetMaxTextureDimension() is documented as the renderer's real maximum, but every renderer returns an unqueried 16384 that the capability profile marks as known | Graphics & renderers | open | low | source-verified |
CNA-BUG-120 | ContentManager::LoadXnbAssetUntyped refuses LZ4, which LoadXnbAsset<T> decodes | Content & XNB/CNB/CNJ | narrowed | medium | source-verified |
CNA-BUG-122 | ContentManager::Load<SoundEffect> lets its loose tier's System::NotSupportedException escape instead of ContentLoadException | Content & XNB/CNB/CNJ | narrowed | 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 | DIRECTX9 implements the window-to-logical transform but never registers for its 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 the terminal platform | Input | open | low | source-verified |
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 (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-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::SubmitFloatBufferEXT accepts empty and non-frame-aligned float buffers | Audio & media | narrowed | 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 caches the process-wide storage root in unsynchronised statics | Storage | open | low | 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-156 | HttpNotificationChannel answers length-less and chunked pushes with 200 and reads request bodies of unbounded size | Networking & gamer services | narrowed | 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 or link ws2_32, so on Windows they work only if something else did | Networking & gamer services | narrowed | medium | inferred (strong) |
CNA-BUG-164 | HttpNotificationChannel's listener spins without backoff on a persistent accept error | Networking & gamer services | narrowed | 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, so Find lists the session once per member | Networking & gamer services | narrowed | medium | source-verified |
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-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-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-197 | cmake/toolchains/mingw-w64.cmake falls back to the i686 compiler but keeps CMAKE_SYSTEM_PROCESSOR x86_64, so 32-bit and 64-bit trees share one persistent SDL install directory | Build & CI | narrowed | low | source-verified |
CNA-BUG-198 | Link-closure tests pass --build-dir ${CMAKE_BINARY_DIR}, so when CNA is added as a subproject of a Makefiles build they look for link.txt in the consumer's build root and always skip | Build & CI | narrowed | 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-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 and SoundEffectReader's WAV route | Documentation & release tooling | narrowed | 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 | A GraphicsDevice maintainer comment still says only DIRECTX9 drives the device status, although WEBGPU raises device events too | Documentation & release tooling | narrowed | 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 | plans/plan_xnb.md still says 'Nothing here is implemented yet - every row starts ⬜' beneath a status banner that records every XNB reader phase but H and I complete | Documentation & release tooling | narrowed | low | source-verified |
CNA-BUG-229 | docs/graphics-renderer-feature-matrix.md calls itself up to date but still lists EasyGL's ReferenceStencil 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-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-237 | A comment in Sdl3Platform.cpp refers to a Game::UpdateInput() that does not exist | 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-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 | PacketWriter::Write(Color)'s doc comment still says ReadColor reads four floats and is not the inverse of Write(Color) | Documentation & release tooling | narrowed | 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-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-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-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 the joiner never sees SessionFull | 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-273 | CLAUDE.md and AGENTS.md tell contributors to throw std::runtime_error after disposal, while the public layer throws System::ObjectDisposedException at 50 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 |
CNA-BUG-276 | SoundEffect::Play(volume, pitch, pan) clamps pitch, does not check volume and returns false when disposed, where XNA 4.0 throws | Audio & media | open | low | source-verified |
CNA-BUG-277 | The glTF importer still refuses a file that requires KHR_materials_specular, although its own registry note says every PBR renderer samples both specular maps | Models & glTF | narrowed | low | source-verified |
CNA-BUG-278 | An XNB BoundingSphere or Model mesh sphere with a negative radius fails to load, although XNA and CNA's own XNB writer accept it | Content & XNB/CNB/CNJ | open | low | source-verified |
CNA-BUG-279 | The sibling version check accepts sharp-runtime's v0.1.0 tag, but this snapshot needs sharp-runtime APIs added after it (a FileStream constructor and XmlSerializer property members), so such a build fails to compile instead of failing configuration | Build & CI | open | low | source-verified |
CNA-BUG-280 | On FNA3D's SDL_GPU driver a TextureCube, Texture3D or mipmapped Texture2D changed between two draws of one frame shows its new contents in the earlier draw too | Graphics & renderers | narrowed | low | recorded by CNA |
CNA-BUG-281 | FNA3D's Direct3D 11 driver cannot build some valid compiled effects: a ps_3_0 shader that reads two vertex outputs packed in one register fails to compile, and the integer input-layout rewrite can retype the wrong semantic | Graphics & renderers | open | low | recorded by CNA |
CNA-BUG-282 | RendererFeature::MultiSampleMask misreports EasyGL without glSampleMaski (OPENGLES3 on an OpenGL ES 3.0 context, WEBGL2) and WEBGPU over wgpu-native's Metal driver | Graphics & renderers | open | low | source-verified |