Run x86-64 Windows PC games on jailed iOS via FEX-Emu + Wine + DXMT
This report summarizes scanner evidence for willfaust/Madeira, a C project with 2,108 GitHub stars. SynthScan examined 134,223 lines of code across 334 source files, recording 832 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 23.8 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 337 finding(s).
Are imports declared and package/API names verified? 494 finding(s).
Are wrappers, guards, and repeated structures necessary? 8 finding(s).
Which changes need focused human review? 832 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 832 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/host/check-onboarding.py | 220 | expect(R.revision == 3 && R.Step.wineMono.rawValue == "wine-mono" && R.Step.wineMono.introduced == 3 | CODE |
| HIGH | tests/host/check-onboarding.py | 221 | && R.Step.localDevVPN.introduced == 2 && R.Step.jit.introduced == 1, "revision 3 adds Wine Mono") | CODE |
| HIGH | tests/host/check-onboarding.py | 272 | expect(R.position(of: .welcome, in: full) == nil && R.position(of: .done, in: full) == nil, "no counter on welco | CODE |
| HIGH | tests/host/check-dock-contract.py | 77 | 'if dockLaunch.dock && SteamSignIn.flag("MADEIRA_DOCK_CLEAR_STEAM_ID", default: true) {' in content and | CODE |
| HIGH | tests/host/check-dock-contract.py | 151 | require(game.id == 4000 && game.name == "Fixture" && game.installed && game.customExecutables, "installed manife | CODE |
| HIGH | tests/host/check-dock-contract.py | 154 | require(updating.installed && !updating.customExecutables && updating.name == "App 4001", "installed plus update | CODE |
| HIGH | tests/host/check-dock-contract.py | 165 | require(MadeiraDock.libraryRelative("D:\\Games") == nil && MadeiraDock.libraryRelative("C:\\..\\x") == nil && | CODE |
| HIGH | tests/host/check-dock-contract.py | 224 | env("MADEIRA_STEAM_HOST_EXPECTED_INSTALL") == game.windowsInstallPath && env("MADEIRA_STEAM_HOST_LOG") = | CODE |
| HIGH | tests/host/check-dock-contract.py | 225 | require(env("MADEIRA_STEAM_HOST_ACCOUNT") == nil && env("MADEIRA_STEAM_HOST_STEAMID") == nil, "the cached-accoun | CODE |
| HIGH | tests/host/check-child-desktop.py | 98 | if (!d || server_refuses) return 0xc0000008; /* no desktop: STATUS_INVALID_HANDLE */ | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 137 | assert( !h && requests == 1 && !registrations && !winstation_inits ); | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 141 | assert( h == (HWND)0x10020 && thread_infos[1].msg_window == 0x10022 ); | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 142 | assert( requests == 2 && registrations == 1 && !winstation_inits && set_desktop_calls == 1 ); | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 146 | assert( get_desktop_window() == (HWND)0x10020 && requests == 1 && registrations == 1 ); | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 150 | assert( get_desktop_window() == (HWND)0x10020 && requests == 1 && registrations == 1 ); | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 155 | assert( get_desktop_window() == (HWND)0x10020 && winstation_inits == 1 && registrations == 2 && requests == 3 ); | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 160 | assert( !get_desktop_window() && requests == 1 && registrations == 2 && winstation_inits == 1 ); | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 164 | assert( !get_desktop_window() && requests == 2 && registrations == 3 ); | CODE |
| HIGH⚡ | tests/host/check-child-desktop.py | 166 | assert( !get_desktop_window() && requests == 1 && registrations == 3 && winstation_inits == 1 ); | CODE |
| HIGH⚡ | tests/host/check-wma-decoder.py | 39 | head = '} else if (match && strstr(match, "winegstreamer") && (wow || ios_wg_64bit_opted_in())) {' | CODE |
| HIGH⚡ | tests/host/check-wma-decoder.py | 39 | head = '} else if (match && strstr(match, "winegstreamer") && (wow || ios_wg_64bit_opted_in())) {' | CODE |
| HIGH⚡ | tests/host/check-wma-decoder.py | 41 | assert head in virtual, "the winegstreamer branch must be gated on wow || MADEIRA_WG_64BIT" | CODE |
| HIGH | tests/host/check-wma-decoder.py | 254 | CHECK( read.result == S_OK && sample.size, "read result %#x size %u", (unsigned)read.result, sample.size ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 535 | CHECK( mav_stream_count( p ) == 1 && mav_stream_info( p, 0, &info ) == MAV_OK, "one stream" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 537 | CHECK( mav_stream_info( p, 0, &info ) == MAV_OK && info.type == MAV_STREAM_AUDIO, "audio" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 538 | CHECK( !strcmp( info.container, "wav" ) && info.kind == MAV_CODEC_PCM && info.native.fmt == MAV_FMT_S16 | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 539 | && info.native.rate == 22050 && info.native.channels == 2 && info.native.channel_mask == 3, | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 548 | CHECK( d.first_pts == 0 && d.gaps == 0 && d.end_pts == 10000000 && d.discont == 1, "timeline %llu..%llu gaps %d disc | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 557 | CHECK( d.size / 4 >= 5512 && d.size / 4 <= 5513, "stop trimmed to %zu frames", d.size / 4 ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 630 | CHECK( mav_stream_info( p, 0, &info ) == MAV_OK && info.kind == MAV_CODEC_MPEG_AUDIO && (int)info.layer == expect_la | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 631 | && info.native.fmt == MAV_FMT_S16 && info.native.rate && info.native.channels, "%s: info layer %u", what, inf | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 632 | CHECK( mav_enable( p, 0, &info.native ) == MAV_OK && mav_seek( p, 0, 1, 0, 1, info.duration ) == MAV_OK, "%s: start" | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 640 | CHECK( d.gaps == 0 && d.first_pts < 1000000, "%s: continuous timeline (gaps %d, first %llu)", what, d.gaps, (unsigne | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 646 | CHECK( d.first_pts == target && d.discont == 1, "%s: first pts %llu after seek to %llu", what, | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 651 | CHECK( s.oversize == 0 && s.out_of_range == 0, "%s: requests within bounds", what ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 777 | CHECK( mav_stream_info( p, 0, &vi ) == MAV_OK && vi.type == MAV_STREAM_VIDEO && vi.kind == MAV_CODEC_H264 | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 779 | CHECK( vi.vnative.fmt == MAV_PIX_NV12 && vi.vnative.width == W && vi.vnative.height == H | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 780 | && vi.vnative.fps_n == FPS && vi.vnative.fps_d == 1, "native %s %dx%d %u/%u", mav_pix_name( vi.vnative.fmt ), | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 784 | CHECK( mav_stream_info( p, 1, &ai ) == MAV_OK && ai.type == MAV_STREAM_AUDIO && ai.kind == MAV_CODEC_AAC | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 785 | && ai.native.fmt == MAV_FMT_F32 && ai.native.rate == 44100 && ai.native.channels == 2 | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 791 | CHECK( mav_enable_video( p, 0, &vi.vnative ) == MAV_OK && mav_enable( p, 1, &ai.native ) == MAV_OK, "enable" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 823 | CHECK( dv.buffers == frames && dv.discont == 1, "%d pictures (discont %d)", dv.buffers, dv.discont ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 824 | CHECK( stub_vmapped == 0 && stub_vlive == 0, "every picture unmapped (%d) and released (%d)", stub_vmapped, stub_vli | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 827 | CHECK( da.first_pts == 0 && da.gaps == 0, "audio timeline first %llu gaps %d", (unsigned long long)da.first_pts, da. | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 829 | CHECK( rms > 0.2 && peak < 0.5, "audio rms %.3f peak %.3f (a 0.35 tone)", rms, peak ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 836 | CHECK( dv.buffers == frames && dv.gaps == 0 && dv.first_pts == 0, "video-first pass: %d pictures gaps %d", dv.buffer | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 839 | CHECK( da.first_pts == 0 && da.gaps == 0 && fabs( da.size / 8.0 / 44100 - seconds ) < 1024.0 / 44100 + 0.001, | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 849 | CHECK( mav_get_buffer( p, 0, &b ) == MAV_OK && b.discontinuity, "picture after seek" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 851 | CHECK( llabs( (long long)b.pts - 16000000 ) <= 1 && picture_index( pic, 0, MAV_PIX_NV12 ) == 48, | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 856 | CHECK( da.first_pts == 16000000 && da.discont == 1 && fabs( da.size / 8.0 / 44100 - (seconds - 1.6) ) < 1024.0 / 441 | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 867 | CHECK( dv.buffers == 30 && dv.end_pts <= 10000001, "stop: %d pictures to %llu", dv.buffers, (unsigned long long)dv.e | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 868 | CHECK( llabs( (long long)da.end_pts - 10000000 ) <= 1 && da.first_pts == 0, "stop: audio to %llu", (unsigned long lo | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 877 | CHECK( b.stream < 2 && b.pts + 1 >= last, "earliest: stream %u pts %llu after %llu", b.stream, (unsigned lon | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 881 | CHECK( r == MAV_NO_BUFFER && count[0] == frames && count[1] > 100, "earliest: %d pictures %d audio buffers", cou | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 888 | CHECK( dv.buffers == frames && mav_get_buffer( p, 1, &(struct mav_buffer){0} ) == MAV_NO_BUFFER, "video alone" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 890 | CHECK( s.oversize == 0 && s.out_of_range == 0, "requests within bounds" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 987 | CHECK( mav_connect( p, size ) == MAV_OK && mav_stream_count( p ) == 1, "pcm_s16be not exposed, video is" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 988 | CHECK( mav_stream_info( p, 0, &info ) == MAV_OK && info.type == MAV_STREAM_VIDEO, "stream 0 is the video" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 994 | CHECK( mav_connect( p, size ) == MAV_OK && mav_stream_count( p ) == 1, "m4a" ); | CODE |
| HIGH⚡ | tests/host/check-wg-parser.py | 995 | CHECK( mav_stream_info( p, 0, &info ) == MAV_OK && info.kind == MAV_CODEC_AAC, "m4a is aac" ); | CODE |
| 426 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | research/remote-metal/run-host.sh | 1 | #!/bin/sh | COMMENT |
| LOW | research/remote-metal/host/rmetald.m | 1 | /* Remote Metal host daemon -- runs on macOS, owns the real MTLDevice. | COMMENT |
| LOW | research/remote-metal/guest/rmtest.c | 1 | /* Remote Metal guest spike -- runs natively on the iOS guest, no FEX involved. | COMMENT |
| LOW | tools/check-prefix-template.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tools/deploy-vm.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tools/deploy-vm.sh | 101 | # it hands the next launch a fresh log written by the OLD binary, which reads | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 1 | #if 0 | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 21 | COMMENT | |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 41 | #include <string.h> | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 81 | typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 101 | # define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 121 | # if __has_attribute(noescape) | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 141 | #if !defined(SWIFT_NORETURN) | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 161 | # else | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 181 | #endif | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 201 | # else | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 221 | # endif | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 241 | #if !defined(SWIFT_DEPRECATED_MSG) | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 261 | # endif | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 281 | # if __has_attribute(always_inline) | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 301 | # define _Nonnull | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 321 | #pragma clang diagnostic ignored "-Wunknown-pragmas" | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 341 | #if __has_attribute(external_source_symbol) | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 361 | #pragma clang diagnostic ignored "-Wunsafe-buffer-usage" | COMMENT |
| LOW | …rk/ios-arm64/StikJIT.framework/Headers/StikJIT-Swift.h | 381 | #else | COMMENT |
| LOW | app/Madeira/PrefixExtractor.c | 1 | // Minimal gzip + ustar extractor. Handles the subset of tar produced by | COMMENT |
| LOW | app/Madeira/JITNetwork.swift | 1 | // SPDX-License-Identifier: GPL-3.0-or-later | COMMENT |
| LOW | app/Madeira/JITNetwork.swift | 21 | /// (the address StikDebug uses). Two steps, neither depending on what lockdownd says | COMMENT |
| LOW | app/Madeira/JITNetwork.swift | 161 | /// The Madeira JIT shortcut, two ways to add it. `iCloudLink` opens Shortcuts straight at | COMMENT |
| LOW | app/Madeira/JITNetwork.swift | 181 | } | COMMENT |
| LOW | app/Madeira/LogPattern.swift | 1 | import Foundation | COMMENT |
| LOW | app/Madeira/WineMono.swift | 1 | // SPDX-License-Identifier: GPL-3.0-or-later | COMMENT |
| LOW | app/Madeira/Library.swift | 1 | import SwiftUI | COMMENT |
| LOW | app/Madeira/Library.swift | 161 | /// A user-chosen cover in Documents/madeira-art/. | COMMENT |
| LOW | app/Madeira/Library.swift | 201 | // ml1163: how a game starts. All optional, so older library files decode and | COMMENT |
| LOW | app/Madeira/Library.swift | 221 | /// without controller support. Optional, so older files decode. | COMMENT |
| LOW | app/Madeira/Library.swift | 241 | var reportNVIDIA: Bool? | COMMENT |
| LOW | app/Madeira/Library.swift | 261 | /// cached (LibraryModel.refreshSteamMetadata); any change reads them again. | COMMENT |
| LOW | app/Madeira/Library.swift | 301 | /// game started as its own program) the target is that program. | COMMENT |
| LOW | app/Madeira/Library.swift | 501 | // "dinput": the host pad also as a DirectInput joystick (wine/dlls/dinput/joystick_ios.c, | COMMENT |
| LOW | app/Madeira/Library.swift | 3561 | /// budget (vram-mb), the file-backed swap tier (swap-mb, off by default, and | COMMENT |
| LOW | app/Madeira/FPSOverlay.swift | 1 | import SwiftUI | COMMENT |
| LOW | app/Madeira/FPSOverlay.swift | 101 | /// Small overlay shown over the Metal render view. Reads DXMT's present | COMMENT |
| LOW | app/Madeira/FPSOverlay.swift | 121 | /// Mirrors DXMT's g_madeira_vsync_mode (read per present, live-safe). | COMMENT |
| LOW | app/Madeira/FPSOverlay.swift | 221 | /// Pacing pill, cycles 60 → MAX(n) → RAW → 30 → 40 → 60. Shared by the wide | COMMENT |
| LOW | app/Madeira/SavesAndShortcuts.swift | 1 | // SPDX-License-Identifier: GPL-3.0-or-later | COMMENT |
| LOW | app/Madeira/LogStore.swift | 121 | COMMENT | |
| LOW | app/Madeira/PadOutput.m | 1 | // ml2106: a game's controller output applied to the physical pad. | COMMENT |
| LOW | app/Madeira/PadOutput.m | 21 | // the large, low-frequency motor; right = the small, high-frequency one) | COMMENT |
| LOW | app/Madeira/JITPairing.swift | 1 | // SPDX-License-Identifier: GPL-3.0-or-later | COMMENT |
| LOW | app/Madeira/JITPairing.swift | 21 | // Built-in StikJIT reads it. | COMMENT |
| LOW | app/Madeira/Madeira-Bridging-Header.h | 1 | #import "JITAllocator.h" | COMMENT |
| LOW | app/Madeira/Madeira-Bridging-Header.h | 41 | // via afterMinimumDuration, 0 = free-run to display max (120 ProMotion, | COMMENT |
| LOW | app/Madeira/DockStartScreen.swift | 1 | // SPDX-License-Identifier: GPL-3.0-or-later | COMMENT |
| LOW | app/Madeira/DockStartScreen.swift | 181 | revealed = true | COMMENT |
| LOW | app/Madeira/GuestDisplay.swift | 1 | import Foundation | COMMENT |
| LOW | app/Madeira/MadeiraConfig.swift | 1 | import Foundation | COMMENT |
| LOW | app/Madeira/PadKeyboardMouse.swift | 1 | import Foundation | COMMENT |
| LOW | app/Madeira/PadKeyboardMouse.swift | 21 | /// - Inputs neither of those bind take the built-in template below: WASD on | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 1 | // FEXBridge.mm - Bridge between iOS app and FEXCore | COMMENT |
| 190 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/Madeira/FEXBridge.mm | 125 | // Step 1: Ask debugger to allocate RX pages | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 134 | // Step 2: vm_remap to create RW view of the same pages | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 372 | // Step 1: Initialize JIT pool | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 378 | // Step 2: Install mmap hooks BEFORE FEXCore does any allocations | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 383 | // Step 3: Install FEX log handlers | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 469 | // Step 7: Set handlers | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 473 | // Step 8: Enable hardware TSO (Apple Silicon supports TSO mode) | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 476 | // Step 9: Initialize core (creates Dispatcher) | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 148 | // Step 3: Set the remapped view to RW | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 412 | // Step 4: Initialize FEXCore config | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 430 | // Step 5: Create HostFeatures for Apple A15 (iPhone 13 Pro) | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 454 | // Step 6: Create context | COMMENT |
| LOW⚡ | app/Madeira/ContentView.swift | 3143 | // Step 2: Start wineserver | COMMENT |
| LOW⚡ | app/Madeira/ContentView.swift | 3147 | // Step 3: Start Wine. | COMMENT |
| LOW⚡ | app/Madeira/ContentView.swift | 3232 | // Step 5: Resume UI + os_log, give main thread time to recover before detach | COMMENT |
| LOW⚡ | app/Madeira/ContentView.swift | 3239 | // Step 6: Detach debugger — main thread should have zero accumulated hang time | COMMENT |
| LOW | app/Madeira/ContentView.swift | 2618 | // Step 1: Allocate JIT pool (BRK suspends entire process) | COMMENT |
| LOW | app/Madeira/ContentView.swift | 3164 | // Step 4: Wait for Wine to finish instead of fixed timer | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 114 | // Step 1: Create a named memory entry | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 136 | // Step 2: Mark as no-footprint (MeloNX trick) | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 668 | // Step 1: Let StikDebug allocate RX pages via _M command (x0=0) | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 680 | // Step 2: Use vm_remap to create a second view of the same pages (MeloNX approach) | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 707 | // Step 3: Set the remapped view to RW (MeloNX does this) | COMMENT |
| LOW⚡ | app/Madeira/JITAllocator.c | 719 | // Step 4: Write code to RW view | COMMENT |
| LOW⚡ | app/Madeira/JITAllocator.c | 729 | // Step 5: Execute from debugger-allocated RX | COMMENT |
| LOW | app/Madeira/SwiftSteam/Auth/SteamCredentialAuth.swift | 50 | // Step 1: Get RSA public key for password encryption | COMMENT |
| LOW⚡ | app/Madeira/SwiftSteam/Auth/SteamCredentialAuth.swift | 62 | // Step 2: Encrypt password with Steam's RSA public key | COMMENT |
| LOW⚡ | app/Madeira/SwiftSteam/Auth/SteamCredentialAuth.swift | 69 | // Step 3: Begin auth session | COMMENT |
| LOW | app/Madeira/SwiftSteam/Auth/SteamCredentialAuth.swift | 87 | // Step 4: Steam Guard. k_EAuthSessionGuardType: 1 none, 2 email code, | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 27 | // Step 1: the license list (owned packages). | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 32 | // Step 2: PICS access tokens for the packages. | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 35 | // Step 3: package info, to extract the app IDs. | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 39 | // Step 4: PICS access tokens for the apps. | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 42 | // Step 5: app info (name, depots, platform support, ...). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/Madeira/FEXBridge.mm | 125 | // Step 1: Ask debugger to allocate RX pages | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 134 | // Step 2: vm_remap to create RW view of the same pages | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 372 | // Step 1: Initialize JIT pool | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 378 | // Step 2: Install mmap hooks BEFORE FEXCore does any allocations | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 383 | // Step 3: Install FEX log handlers | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 469 | // Step 7: Set handlers | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 473 | // Step 8: Enable hardware TSO (Apple Silicon supports TSO mode) | COMMENT |
| LOW⚡ | app/Madeira/FEXBridge.mm | 476 | // Step 9: Initialize core (creates Dispatcher) | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 148 | // Step 3: Set the remapped view to RW | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 412 | // Step 4: Initialize FEXCore config | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 430 | // Step 5: Create HostFeatures for Apple A15 (iPhone 13 Pro) | COMMENT |
| LOW | app/Madeira/FEXBridge.mm | 454 | // Step 6: Create context | COMMENT |
| LOW⚡ | app/Madeira/ContentView.swift | 3143 | // Step 2: Start wineserver | COMMENT |
| LOW⚡ | app/Madeira/ContentView.swift | 3147 | // Step 3: Start Wine. | COMMENT |
| LOW⚡ | app/Madeira/ContentView.swift | 3232 | // Step 5: Resume UI + os_log, give main thread time to recover before detach | COMMENT |
| LOW⚡ | app/Madeira/ContentView.swift | 3239 | // Step 6: Detach debugger — main thread should have zero accumulated hang time | COMMENT |
| LOW | app/Madeira/ContentView.swift | 2618 | // Step 1: Allocate JIT pool (BRK suspends entire process) | COMMENT |
| LOW | app/Madeira/ContentView.swift | 3164 | // Step 4: Wait for Wine to finish instead of fixed timer | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 114 | // Step 1: Create a named memory entry | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 136 | // Step 2: Mark as no-footprint (MeloNX trick) | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 668 | // Step 1: Let StikDebug allocate RX pages via _M command (x0=0) | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 680 | // Step 2: Use vm_remap to create a second view of the same pages (MeloNX approach) | COMMENT |
| LOW | app/Madeira/JITAllocator.c | 707 | // Step 3: Set the remapped view to RW (MeloNX does this) | COMMENT |
| LOW⚡ | app/Madeira/JITAllocator.c | 719 | // Step 4: Write code to RW view | COMMENT |
| LOW⚡ | app/Madeira/JITAllocator.c | 729 | // Step 5: Execute from debugger-allocated RX | COMMENT |
| LOW | app/Madeira/SwiftSteam/Auth/SteamCredentialAuth.swift | 50 | // Step 1: Get RSA public key for password encryption | COMMENT |
| LOW⚡ | app/Madeira/SwiftSteam/Auth/SteamCredentialAuth.swift | 62 | // Step 2: Encrypt password with Steam's RSA public key | COMMENT |
| LOW⚡ | app/Madeira/SwiftSteam/Auth/SteamCredentialAuth.swift | 69 | // Step 3: Begin auth session | COMMENT |
| LOW | app/Madeira/SwiftSteam/Auth/SteamCredentialAuth.swift | 87 | // Step 4: Steam Guard. k_EAuthSessionGuardType: 1 none, 2 email code, | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 27 | // Step 1: the license list (owned packages). | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 32 | // Step 2: PICS access tokens for the packages. | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 35 | // Step 3: package info, to extract the app IDs. | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 39 | // Step 4: PICS access tokens for the apps. | COMMENT |
| LOW⚡ | …p/Madeira/SwiftSteam/Library/SteamLibraryFetcher.swift | 42 | // Step 5: app info (name, depots, platform support, ...). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/Madeira/ContentView.swift | 156 | // robust correlate is present cadence: 60 FPS content always displays, | COMMENT |
| MEDIUM | app/Madeira/ContentView.swift | 853 | // it seamless: the diameter and the knob offset are plain animated | COMMENT |
| MEDIUM | tests/host/check-wma-decoder.py | 89 | # ------------------------------------------------------------------ harness | COMMENT |
| MEDIUM | tests/host/check-steam-library.py | 452 | # ---------------------------------------------------------------- Swift harness | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | research/remote-metal/schema/wire_schema.py | 181 | CODE | |
| LOW | tests/host/check-wg-parser.py | 33 | CODE | |
| LOW | tests/host/check-wow-cpu-area.py | 15 | CODE | |
| LOW | tests/host/check-jit-pairing.py | 17 | CODE | |
| LOW | tests/host/check-wine-mono.py | 21 | CODE | |
| LOW | tests/host/check-scene-batching.py | 2 | CODE | |
| LOW | tests/host/check-d9-upload-commit.py | 13 | CODE | |
| LOW | tests/x64/gen_asmconf.py | 37 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …kJIT.xcframework/ios-arm64/StikJIT.framework/legacy.js | 1 | function littleEndianHexStringToNumber(hexStr) { | CODE |
| LOW | …kJIT.xcframework/ios-arm64/StikJIT.framework/legacy.js | 13 | function numberToLittleEndianHexString(num) { | CODE |
| LOW | …T.xcframework/ios-arm64/StikJIT.framework/universal.js | 210 | function littleEndianHexStringToNumber(hexStr) { | CODE |
| LOW | …T.xcframework/ios-arm64/StikJIT.framework/universal.js | 222 | function numberToLittleEndianHexString(num) { | CODE |
| LOW | app/Madeira/madeira-jit.js | 18 | function littleEndianHexStringToNumber(hexStr) { | CODE |
| LOW | app/Madeira/madeira-jit.js | 30 | function numberToLittleEndianHexString(num) { | CODE |
| LOW | …/metal_irconverter_runtime/metal_irconverter_runtime.h | 308 | * Use function IRDescriptorTableSetBufferView() to bind an append/consume buffer to a descriptor table. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/host/check-swap-coverage.py | 48 | CODE | |
| LOW | tests/host/check-steam-signin-native.py | 40 | CODE | |
| LOW | tests/host/check-steam-library.py | 70 | CODE | |
| LOW | tests/host/check-steam-library.py | 409 | CODE | |
| LOW | tests/host/check-d3d12-tiled.py | 36 | CODE | |
| LOW | tests/host/check-dock-components.py | 94 | CODE | |
| LOW | tests/x64/gen_asmconf.py | 87 | CODE | |
| LOW | madeira-d3d12/src/pe/gen_vtables.py | 74 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/host/check-steam-library.py | 441 | except (ValueError, IndexError, KeyError): | CODE |