{
 "features": {
  "domains": [
   {
    "coverage": 1.0,
    "items": {
     "impl": 13,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "cpu_rewrite",
    "points": 14.0,
    "title": "CPU: AOT A64 rewrite",
    "weight": 14
   },
   {
    "coverage": 1.0,
    "items": {
     "impl": 5,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "loader",
    "points": 5.0,
    "title": "Loader: NSO/NRO/modules/relocs",
    "weight": 5
   },
   {
    "coverage": 1.0,
    "items": {
     "impl": 64,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "kernel",
    "points": 10.0,
    "title": "Kernel: Horizon svcs + scheduling",
    "weight": 10
   },
   {
    "coverage": 1.0,
    "items": {
     "impl": 53,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "ipc",
    "points": 10.0,
    "title": "IPC: HLE services (coverage)",
    "weight": 10
   },
   {
    "coverage": 0.9067,
    "items": {
     "impl": 0,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "ipc_depth",
    "points": 4.53,
    "title": "IPC: command depth (impl vs stub)",
    "weight": 5
   },
   {
    "coverage": 0.9902,
    "items": {
     "impl": 518,
     "missing": 0,
     "partial": 17,
     "stub": 2
    },
    "key": "nvn",
    "points": 11.88,
    "title": "GPU: NVN API surface",
    "weight": 12
   },
   {
    "coverage": 1.0,
    "items": {
     "impl": 151,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "shader",
    "points": 12.0,
    "title": "GPU: Maxwell shader ISA",
    "weight": 12
   },
   {
    "coverage": 0.9762,
    "items": {
     "impl": 15,
     "missing": 0,
     "partial": 2,
     "stub": 0
    },
    "key": "gpu_fixed",
    "points": 7.81,
    "title": "GPU: formats + pipeline features",
    "weight": 8
   },
   {
    "coverage": 0.89,
    "items": {
     "impl": 2,
     "missing": 0,
     "partial": 3,
     "stub": 0
    },
    "key": "nvdrv",
    "points": 1.78,
    "title": "GPU: nvdrv / host1x devices",
    "weight": 2
   },
   {
    "coverage": 1.0,
    "items": {
     "impl": 16,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "audio",
    "points": 7.0,
    "title": "Audio: audren/audout/opus",
    "weight": 7
   },
   {
    "coverage": 0.99,
    "items": {
     "impl": 10,
     "missing": 0,
     "partial": 1,
     "stub": 0
    },
    "key": "input",
    "points": 4.95,
    "title": "Input: hid / npad",
    "weight": 5
   },
   {
    "coverage": 0.9929,
    "items": {
     "impl": 13,
     "missing": 0,
     "partial": 1,
     "stub": 0
    },
    "key": "content",
    "points": 4.96,
    "title": "Content: containers, crypto, updates, DLC",
    "weight": 5
   },
   {
    "coverage": 1.0,
    "items": {
     "impl": 7,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "fs_runtime",
    "points": 2.0,
    "title": "FS: saves + storage",
    "weight": 2
   },
   {
    "coverage": 0.99,
    "items": {
     "impl": 7,
     "missing": 0,
     "partial": 0,
     "stub": 0
    },
    "key": "applets",
    "points": 1.98,
    "title": "Library applets",
    "weight": 2
   },
   {
    "coverage": 0.9672,
    "items": {
     "impl": 3,
     "missing": 0,
     "partial": 1,
     "stub": 0
    },
    "key": "media",
    "points": 0.97,
    "title": "Video / media decode",
    "weight": 1
   }
  ],
  "final_percent": 98.9,
  "missing": [
   {
    "domain": "content",
    "item": "NCA2 / NCA0",
    "status": "partial"
   },
   {
    "domain": "gpu_fixed",
    "item": "tessellation",
    "status": "partial"
   },
   {
    "domain": "gpu_fixed",
    "item": "transform feedback",
    "status": "partial"
   },
   {
    "domain": "input",
    "item": "IR camera (irs)",
    "status": "partial"
   },
   {
    "domain": "media",
    "item": "JPEG (nvjpg / caps)",
    "status": "partial"
   },
   {
    "domain": "nvdrv",
    "item": "/dev/nvdisp-disp0",
    "status": "partial"
   },
   {
    "domain": "nvdrv",
    "item": "/dev/nvhost-gpu, as-gpu, ctrl-gpu (only if NVN is bypassed)",
    "status": "partial"
   },
   {
    "domain": "nvdrv",
    "item": "/dev/nvhost-nvdec, vic, nvjpg, msenc",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindImagesDeferred",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindSeparateSampler",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindSeparateSamplers",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindSeparateSamplersDeferred",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindSeparateTexture",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindSeparateTextures",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindSeparateTexturesDeferred",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindStorageBuffersDeferred",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindTexturesDeferred",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferBindUniformBuffersDeferred",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferSetConservativeRasterDilate",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferSetConservativeRasterEnable",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferSetProgramSubroutines",
    "status": "stub"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferSetProvokingVertexMode",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnCommandBufferSetViewportSwizzles",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnDeviceWaitForError",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnProgramGetSubtileSize",
    "status": "partial"
   },
   {
    "domain": "nvn",
    "item": "nvnProgramSetSubroutineLinkage",
    "status": "stub"
   },
   {
    "domain": "nvn",
    "item": "nvnTextureBuilderGetViewOffset",
    "status": "partial"
   }
  ],
  "priorities": [
   {
    "domain": "cpu_rewrite",
    "effort": "S",
    "gain_pts": null,
    "importance": 1,
    "item": "A32 interpreter lda/stl ordering + alignment fault",
    "rank": 1,
    "where": "runtime/src/a32/a32_exec.c, runtime/tests/a32jit/difftest.c",
    "why": "debug-only interpreter uses fences around plain accesses (not RCsc) and no alignment fault; the shipped runtime has no interpreter; difftest skips those samples"
   },
   {
    "domain": "nvn",
    "effort": "S",
    "gain_pts": 0.01,
    "importance": 1,
    "item": "nvnCommandBufferSetProvokingVertexMode",
    "rank": 2,
    "where": "gfx/src/mtl_replay.m OP_PROVOKING, api_cmd.c; evidence: title NVN driver method writes",
    "why": "0=first/1=last mapping is a hypothesis; if NVN's default were LAST every title's flat inputs would differ; indirect/GS/tess draws keep first"
   },
   {
    "domain": "nvn",
    "effort": "S",
    "gain_pts": 0.01,
    "importance": 1,
    "item": "nvnCommandBufferSetViewportSwizzles",
    "rank": 3,
    "where": "gfx/src/shader/maxwell_translate.c vertex epilogue, mtl_replay.m vp_swizzle_key",
    "why": "per-viewport swizzles: viewports 1-15 take viewport 0's (single-pass layered/cube rendering uses several)"
   },
   {
    "domain": "nvn",
    "effort": "S",
    "gain_pts": 0.01,
    "importance": 1,
    "item": "nvnCommandBufferBindSeparateTexture",
    "rank": 4,
    "where": "gfx/src/shader/maxwell.h SEP_*_C2_BASE",
    "why": "c2 table offsets 0x120/0x520 are a hypothesis (6 BindSeparate* items); confirm from a GLSLC program or the title NVN driver"
   },
   {
    "domain": "nvn",
    "effort": "S",
    "gain_pts": 0.01,
    "importance": 1,
    "item": "nvnCommandBufferBindTexturesDeferred",
    "rank": 5,
    "where": "gfx/src/nvnapi/nvn_protos_ext.h",
    "why": "7 entry points with inferred signatures never called by a title; a driver disassembly would fix them"
   },
   {
    "domain": "ipc_depth",
    "effort": "S",
    "gain_pts": null,
    "importance": 2,
    "item": "nifm IRequest Cancel + NetConnect output (offline network-error flow)",
    "rank": 6,
    "where": "runtime/src/services/offline_core.c:120-127, offline.c GetAppletInfo, applet_lib_core.c:341-351; evidence: sdk NSO nn::nifm::HandleNetworkRequestResult, firmware 22.1.0 netConnect applet 0100000000001006",
    "why": "every title's online entry point goes through nn::nifm::HandleNetworkRequestResult; offline it must land once on the console's NetConnect / error UI and return; today Cancel wipes the rejection (no applet), and with that fixed the applet output makes the SDK retry 20x"
   },
   {
    "domain": "gpu_fixed",
    "effort": "M",
    "gain_pts": 0.1,
    "importance": 2,
    "item": "transform feedback",
    "rank": 7,
    "where": "gfx/src/mtl_stages.inc, shader/control.c",
    "why": "XFB layouts self-authored; needs a title or real GLSLC program with XFB (none in the material)"
   },
   {
    "domain": "gpu_fixed",
    "effort": "M",
    "gain_pts": 0.1,
    "importance": 2,
    "item": "tessellation",
    "rank": 8,
    "where": "gfx/src/mtl_stages.inc",
    "why": "tess parameters self-authored; needs a real tess program (none in the material)"
   },
   {
    "domain": "ipc_depth",
    "effort": "S",
    "gain_pts": null,
    "importance": 1,
    "item": "local documented-default stubs (fs QueryEntry / GetFileSystemAttribute / GetProgramId / GetRightsId, vi ConvertScalingMode)",
    "rank": 9,
    "where": "runtime/src/services/fs.c:894-2190, vi.c:355",
    "why": "a handful of local rows have documented behaviour; the rest are correct no-ops (no game card, no transfer, one application per runtime)"
   },
   {
    "domain": "content",
    "effort": "S",
    "gain_pts": 0.04,
    "importance": 1,
    "item": "NCA2 / NCA0",
    "rank": 10,
    "where": "crates/napple-core nca.rs",
    "why": "pre-release container versions; all retail NCAs in the material are NCA3"
   },
   {
    "domain": "nvn",
    "effort": "M",
    "gain_pts": 0.01,
    "importance": 1,
    "item": "nvnCommandBufferSetProgramSubroutines",
    "rank": 11,
    "where": "gfx/src/api_cmd.c, api_program.c",
    "why": "subroutine uniforms and linkage dropped (with nvnProgramSetSubroutineLinkage); no title in the material uses them"
   },
   {
    "domain": "nvdrv",
    "effort": "S",
    "gain_pts": 0.1,
    "importance": 2,
    "item": "/dev/nvhost-nvdec, vic, nvjpg, msenc",
    "rank": 12,
    "where": "runtime/src/services/nvdrv_media_core.c",
    "why": "NVJPG/MSENC/VP9-on-NVDEC tested only; no title opens them"
   },
   {
    "domain": "nvdrv",
    "effort": "S",
    "gain_pts": 0.05,
    "importance": 1,
    "item": "/dev/nvhost-gpu, as-gpu, ctrl-gpu (only if NVN is bypassed)",
    "rank": 13,
    "where": "runtime/src/services/nvdrv_nodes_core.c",
    "why": "proposed layouts; need hardware traces"
   },
   {
    "domain": "nvdrv",
    "effort": "S",
    "gain_pts": 0.05,
    "importance": 1,
    "item": "/dev/nvdisp-disp0",
    "rank": 14,
    "where": "nvdrv_media_core.c",
    "why": "unit-tested only; no title opens it"
   },
   {
    "domain": "input",
    "effort": "M",
    "gain_pts": 0.05,
    "importance": 1,
    "item": "IR camera (irs)",
    "rank": 15,
    "where": "runtime/src/services/irs.c",
    "why": "processor layouts need a real Joy-Con IR trace (unreachable on the Mac)"
   },
   {
    "domain": "nvn",
    "effort": "L",
    "gain_pts": 0.01,
    "importance": 1,
    "item": "nvnCommandBufferSetConservativeRasterEnable",
    "rank": 16,
    "where": "gfx/src/api_cmd.c:829",
    "why": "Metal on Apple GPUs has no conservative rasterization (platform limit)"
   },
   {
    "domain": "media",
    "effort": "S",
    "gain_pts": 0.03,
    "importance": 1,
    "item": "JPEG (nvjpg / caps)",
    "rank": 17,
    "where": "runtime/src/services/jpeg_core.c",
    "why": "NVJPG register path synthetic only"
   },
   {
    "domain": "ipc_depth",
    "effort": "L",
    "gain_pts": null,
    "importance": 1,
    "item": "offline network service stubs (friend, nifm, ssl, bsd, nsd, npns, bcat, ldn)",
    "rank": 18,
    "where": "runtime/src/services/offline.c, sys_default.h",
    "why": "~200 documented offline defaults; real host networking is a design decision (Nintendo services and LDN peers unreachable), not a gap to close blindly"
   }
  ],
  "range": [
   98.9,
   98.9
  ]
 },
 "generator": "tools/support/gen_support.py",
 "matrix_last_run": "2026-10-28T10:44:44Z",
 "schema": 1,
 "snapshot": {
  "commit": "8389280",
  "date": "2026-11-02"
 },
 "titles": [
  {
   "build_id": "3ca12dfaaf9c82da",
   "in_matrix": true,
   "ios": "start menu; abort on A (48-byte colour attachments)",
   "known_issues": [
    "graphics: boot UI and Assist Mode screens render",
    "audio: audren REV3: 0 underruns/overruns over 70 s on Core Audio",
    "input: A and Plus reach the game through the shared HID path (Assist Mode select, demo skip)",
    "saves: File1.bin and Common.bin created and committed after Start",
    "Exploded geometry after a long idle (parrot after ~2 min): command lists now live as long as their command memory (no idle or budget release, gfx-correctness, `t_cmdlife`)",
    "A 400x228 mipmapped pass is not scale-unified on purpose.",
    "A phantom MFi pad showed the settings sheet once on the Simulator (not reproduced)."
   ],
   "macos": {
    "audio": "partial",
    "boot": "pass",
    "graphics": "partial",
    "input": "partial",
    "saves": "partial",
    "state": "plays on macOS (intro, menus, Cascade Kingdom); start menu on the iOS Simulator (a touch A did not visibly advance)."
   },
   "matrix_name": "SUPER MARIO ODYSSEY",
   "name": "Super Mario Odyssey",
   "note": "docs/titles/0100000000010000.md",
   "performance": "Live play: steady 60 fps, GPU 6-12 ms, 4 of 51 five-second windows stalled (worst 990 ms at the scene change, 656 pipelines built in one window).",
   "title_id": "0100000000010000",
   "version": "1.0.0"
  },
  {
   "build_id": "b5c39b5b7c62a88e",
   "in_matrix": true,
   "ios": "3.0.5 aborts at ~2 s (48-byte colour attachments; time:u fixed)",
   "known_issues": [
    "graphics: menus and the preview video render (nvdec/VIC path on the update)",
    "input: scripted menu input reaches the game",
    "The ~45 fps ceiling is gfx: guest blocked ~21 ms per present in SyncWait, per-submit commit to complete ~21 ms, present GPU <= 8 ms, replay CPU 0.7 ms (LAS runs 58 fps with the same code).",
    "Resolved 2026-10-26 (gfx-correctness): stale command handles (lists now live as long as their command memory), the compressed render-target shadow is copied back, a vertex stream outside every pool binds zeros (and ...",
    "iOS Simulator: the G-buffer pass needs 48 bytes of colour attachment, the Simulator allows 32 (base, AArch32)",
    "Binary archive load time (2026-10-26): a 59 MB `cache/pipelines-v8.metalar` left in the default save root by earlier runs took 65.5 s to load in `mtl_shader_init`",
    "A32: 4,818,607 of 4,867,102 instructions are lifted inline (VFP and NEON included), 48,495 (mostly undecodable pool/table words) run as build-time decoded out-of-line operations, zero interpreter fallbacks and zero \"no ...",
    "Both the ios-sim and mk8d-64 branches add `time:u` cmd 300 (conflict in `services/time.c` at integration)."
   ],
   "macos": {
    "audio": "untested",
    "boot": "pass",
    "graphics": "partial",
    "input": "partial",
    "saves": "untested",
    "state": "v3.0.5 (update v1376256 + Booster Course Pass DLC) boots and races headless on the normal 64-bit path at 40-47 fps (title, menus, cup select, races). The base 1.0 build is AArch32 and runs through the lifted `a32jit.dylib` (written by `napple build`) at 52-60 fps in headless menus and the attract race; the runtime has no interpreter (2026-10-26, a32-full)."
   },
   "matrix_name": "Mario Kart 8 Deluxe",
   "name": "Mario Kart 8 Deluxe",
   "note": "docs/titles/0100152000022000.md",
   "performance": "",
   "title_id": "0100152000022000",
   "version": "1.0.0"
  },
  {
   "build_id": "ae16f71e002af8cb",
   "in_matrix": true,
   "ios": "title screen (2026-10-26 re-run)",
   "known_issues": [
    "audio: Core Audio output verified clean: 0 underruns/overruns over 95 s (frames requested = wall time x 48 kHz)",
    "input: keyboard verified end to end in the packaged app (real HID key events, window key, title L+R -> game)",
    "First-use pipeline/shader build stutter (170-1300 ms when entering a new area)",
    "A sustained ~30 fps state reported once did not reproduce in 5 live runs.",
    "iOS device: the memory cap above (decision: trim the low gap or require the increased-memory entitlement)."
   ],
   "macos": {
    "audio": "partial",
    "boot": "pass",
    "graphics": "pass",
    "input": "partial",
    "saves": "pass",
    "state": "plays on macOS (the most mature title); reaches its title screen on the iOS Simulator."
   },
   "matrix_name": "The Legend of Zelda: Link's Awakening",
   "name": "Link's Awakening",
   "note": "docs/titles/01006BB00C6F0000.md",
   "performance": "60 fps live windowed in a 3-6 minute play (perf-las-live), GPU 6-12 ms",
   "title_id": "01006BB00C6F0000",
   "version": "1.0.0"
  },
  {
   "build_id": "7fc1baff976aeca4",
   "in_matrix": true,
   "ios": "abort at ~2 s (48-byte colour attachments)",
   "known_issues": [
    "boot: boots into the main loop and renders (1400+ frames in 50 s headless)",
    "graphics: title screen and island scene render",
    "input: scripted A presses at the airport counter reach the game",
    "iOS Simulator: 100 s, no crash, no first frame.",
    "v0 was not re-run after the clock/olsc/prepo/pool-race changes (its data was deleted).",
    "Thread 0x56 is created but never started in every boot (harmless)."
   ],
   "macos": {
    "audio": "untested",
    "boot": "partial",
    "graphics": "partial",
    "input": "partial",
    "saves": "untested",
    "state": "version 3.0.3 (+3 DLC) boots through the whole opening (Timmy's dialogue, the Nook Inc. counter, the name-entry keyboard) and shows its picture through the game's own window pass (2026-10-26: `nvnProgramSetShaders` with pool-offset code addresses is accepted, see the gfx-correctness note; the stopgap present is gone; Timmy and Tommy and other skinned meshes appeared once the translator read ..."
   },
   "matrix_name": "Animal Crossing: New Horizons",
   "name": "Animal Crossing: New Horizons",
   "note": "docs/titles/01006F8002326000.md",
   "performance": "~30 fps windowed (240 s run), 1738 frames in 70 s headless with input.",
   "title_id": "01006F8002326000",
   "version": "1.0.0"
  }
 ]
}
