Add isolated upstream maintenance flow and document network and modding limits

This commit is contained in:
Erick Sanchez committed 2026-10-26 19:44:16 -06:00
1 parent 54647b08ea
commit f23448d216
10 files changed
+1425 -12

No files matched your search

+6
View File
@@ -46,6 +46,12 @@ Partimos de [seedds/nxnative](https://github.com/seedds/nxnative): el motor, los
Entregamos **código, una interfaz de preparación y herramientas de compilación**. El resultado es una app local para Mac o una IPA para iPhone/iPad sin firmar, que firmas e instalas con Sideloadly. No ofrecemos juegos, llaves, firma de Apple ni compatibilidad garantizada con cualquier juego.
## Actualizaciones del motor y multijugador
Registramos las mejoras del original en el [informe y flujo de mantenimiento](docs/personal-pr-review.md): detección de .NET, empaquetado de pipelines para Mac, reutilización de cachés y detección de regresiones de shaders. Evaluamos por separado los cambios de gráficos y del motor para conservar los juegos que funcionan.
El motor actual funciona **sin conexión**. No admite los servicios en línea de Nintendo, LAN/netplay ni Windows. Una suscripción a Nintendo Switch Online no los activa aquí. Usar varios controles en un mismo Mac es una función distinta. [Cómo funcionan el código, los mods y la red](docs/development.md#game-binaries-mods-and-networking).
## Idioma
La app inicia en **English**. Cambia a **Español** con el selector de la esquina superior; la elección se guarda en este Mac. Cambia el idioma de la interfaz, no el del juego. Los detalles técnicos se muestran en su idioma original.
+6
View File
@@ -46,6 +46,12 @@ Built on [seedds/nxnative](https://github.com/seedds/nxnative). The original pro
We provide **source code, a preparation interface and build tools**. The output is a local Mac game app, or an unsigned iPhone/iPad IPA that you sign and install yourself with Sideloadly. Games, console keys, Apple signing and universal game compatibility are not provided.
## Engine updates and multiplayer
Selected upstream build improvements are recorded in the [review and maintenance flow](docs/personal-pr-review.md): .NET discovery, Mac pipeline packaging, cache reuse and shader regression checks. Graphics/runtime upgrades are evaluated separately to preserve working games.
The current runtime plays **offline**. Nintendo online services, LAN/netplay and Windows are not supported. A Nintendo Switch Online subscription does not enable them here. Local controllers on one Mac are a separate feature. [How the game code, mods and networking work](docs/development.md#game-binaries-mods-and-networking).
## Language
The app starts in **English**. Choose **Español** using the selector at the top; your selection is remembered on this Mac. This changes the interface language, not the game's language. Build diagnostics keep their original language.
+2 -2
View File
@@ -1,5 +1,5 @@
{
"version": "1.4.2",
"build": 7,
"version": "1.4.3",
"build": 8,
"minimumMacOSMajor": 26
}
+39
View File
@@ -439,3 +439,42 @@ Each game's notes are in its profile folder, `dm/games/<id>/README.md`: what the
| `nro_collect.py` | The NRO modules a game registers in its NRRs, found as loose files, among an indexed archive's current files (`data.arc`) or by a scan, written out for the rewriter with `nro.tsv`; online SDKs are listed as refused |
| `nvn_slots_got.py` | Builds the NVN fetch table and call sites (GOT-indirect loaders) |
| `loader_census.py` | Which of the functions a name loader fetches (glad's GL loader over `eglGetProcAddress`, NVN's C proc loader) the code really calls: the GOT slots or globals the loader stores, loaded by other code (followed through registers, relocated GOT entries and `csel`, for LÖVE's glad) |
## Game binaries, mods and networking
The builder does not recover a game's original source project. `patch_nso.py`
rewrites ARM64 NSO images and emits `*.patched.bin` plus fixup/cut tables; the host
loads those images, implements Horizon services and sends graphics through Metal.
The host, launchers, tools and shader translator are editable source. The game
modules remain compiled machine code; identifying Unity, Unreal or another engine
in the survey does not reconstruct its editor project, C# classes, C++ sources,
scene hierarchy or original authoring assets. Unity IL2CPP also compiles game
logic to native code; see the per-game engine table in [dm/games](../dm/games/README.md#games).
Mods can replace data in formats the game understands or patch instructions for
a verified build ID. `hle_fs.c` already supports `DM_ROMFS_OVERLAY`, searching
overlay roots before the base RomFS; `t_fs.c` exercises that mechanism. This is
a low-level mechanism, not a desktop mod installer or a universal Unity/DLC editor.
Metroid Dread uses MercurySteam's engine and Lua 5.1 bytecode `.lc` scripts, as
recorded in [its game note](../dm/games/010093801237C000/README.md). A custom level,
character or mechanic needs its own asset/script format work and game-version
testing. Existing official DLC packing from the user's files is different from
a user-authored mod; this tool does not publish official DLC or grant source access.
Networking in this branch and upstream main at `15805ef` is offline: `hle_net.c`
reports no available network and fails socket/SSL service operations;
`hle_offline.c` fails LDN local-wireless initialization; `hle_account.c` provides
a local user but no Nintendo Account/network-service authentication. A Nintendo
Switch Online subscription alone does not implement these missing services.
Mac local multiplayer controllers do not provide LAN, netplay or internet play.
No Jamboree profile exists at that snapshot. Nintendo's [Jamboree multiplayer
guide](https://www.nintendo.com/en-gb/Support/Purchases-Subscriptions/Games/How-to-Start-a-Multiplayer-Game-Super-Mario-Party-Jamboree--2681702.html)
documents offline play on one console and its Nintendo online modes; do not infer
a generic LAN workaround for it. Windows is not a runtime target of this project.
Future private-room networking would require a deliberate transport/service
implementation, a game supporting that mode, compatible peers, synchronization
and device testing. Remote shared play could instead stream one host's screen
and inputs for supported local-multiplayer games; that is a different project,
not implemented here and not two independently running games joining Nintendo.
Neither route is promised as an upcoming release.
+12 -9
View File
@@ -9,22 +9,25 @@ reported by upstream game notes, not detected from a build or device by this app
# Desktop interface
For daily use, open `nxnative.app`, choose a game folder and press **Preparar para iPhone**.
The native macOS interface uses generic SF Symbols instead of game artwork and shows progress and provides buttons for the lightweight IPA,
RomFS folder and Sideloadly. First-time setup still needs full Xcode, Homebrew and the
user's game/key files. It never signs, installs or enters an Apple account.
For daily use, open `~/Applications/nxnative Easy.app`, choose iPhone/iPad or Mac,
select your own game and key folders, and press Prepare game. Cards use existing
repository screenshots. The interface shows progress, cancellation and the output
steps appropriate to the selected target.
To create it on another Mac, double-click `scripts/Abrir-interfaz.command` from the
checkout. Build outputs stay beside the repository, under `nxnative-easy/`; the local
app points back to this checkout, so recreate it if the checkout is moved. The existing
CLI remains available below. Cancellation signals the entire build process group.
On another Mac, run the root `START-HERE.command` or the README's single-command
installer. It keeps an independent checkout and prepared tools in Application
Support, builds the launcher locally with ad-hoc signing and opens it. Full Xcode
must already be installed and opened once. No Apple account is used for these
builds. Source ZIPs can be deleted after setup; games and keys remain external.
Cancellation signals the entire build process group.
# Personal iOS builds
This branch retains nxnative's MIT license and attribution. It starts from
upstream `ecbeae164c0b419d1ba1031248fe1402050a3eb0`, includes the shared iOS touch
editor and the tested #277 extraction-space fix, and keeps the working Dread shader
chain. Upstream changes are reviewed in [the PR review](personal-pr-review.md).
chain. Selective upstream packaging/.NET/cache/regression-check imports are tracked
in [the PR review and repeatable sync flow](personal-pr-review.md).
## One command, including lightweight export
+962 -1
View File
@@ -737,5 +737,966 @@
}
],
"reviewed_at": "2026-10-26T16:51:35.630645+00:00",
"upstream_head": "40b643bbe68861d171cb1a2733a953aa739f9ac1"
"upstream_head": "40b643bbe68861d171cb1a2733a953aa739f9ac1",
"latest_review": {
"reviewed_at": "2026-10-27T01:39:02.543504+00:00",
"upstream_head": "15805ef52578afe54196504e3f98e15a22221664",
"commits_since_base": 38,
"integrated": [
{
"upstream_sha": "4639c5114cbb8a8f250645941fa3a25c1ba08cc6",
"title": "Pack shader pairs and the offline pipeline archive into Mac apps (#241, #260)"
},
{
"upstream_sha": "b117c913172120520f01028bd42e3b2d55d9f7af",
"title": "Check translation chain changes on games their author does not own (#272)"
},
{
"upstream_sha": "89744da75364ba1847dfbd25f5a82a57d8f1ccb1",
"title": "Discover Homebrew .NET runtimes for standalone build tools"
},
{
"upstream_sha": "09f3778c366fabc2b02b3bf4ae340bb7ce40c2d9",
"title": "Make repeated IPA and Mac app builds incremental (#279)"
}
],
"open_prs": [
{
"number": 357,
"head": "07448091977ae1f365b7d896aef78d7ad22ac987",
"title": "launcher: a Picture section, so Game is about the game again",
"url": "https://github.com/seedds/nxnative/pull/357",
"draft": false,
"changed_files": 4,
"changed_since_previous": true,
"assessment": "Launcher UI restructuring overlaps our simplified interface; do not replace our frontend wholesale.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 356,
"head": "4dba64a0ec73606303656f6777714e6a5439649a",
"title": "Mac: DM_ARROWS=camera puts the right stick on the arrow keys",
"url": "https://github.com/seedds/nxnative/pull/356",
"draft": false,
"changed_files": 2,
"changed_since_previous": true,
"assessment": "Optional Mac keyboard camera; test focus loss and simultaneous controller input before adoption.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 355,
"head": "a2e9bf7803d9d0688348db38da170e8efa0796af",
"title": "launcher: sub-settings that appear only when they can do anything (needs column)",
"url": "https://github.com/seedds/nxnative/pull/355",
"draft": false,
"changed_files": 6,
"changed_since_previous": true,
"assessment": "Conditional settings overlap our simpler UI. Evaluate backend settings independently.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 354,
"head": "27a31b57b4292a10ea96b785514da30d88bc6b4d",
"title": "render scale: a per-game ceiling (render_scale_max) instead of a fixed 1.0",
"url": "https://github.com/seedds/nxnative/pull/354",
"draft": false,
"changed_files": 7,
"changed_since_previous": true,
"assessment": "Per-game render scale ceilings affect GPU memory and image quality; need device comparisons.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 352,
"head": "576947788c585d8a8f6ab4251b5558d7b20ce8f7",
"title": "Mac app carries the launcher settings; shader_split.py reports its progress",
"url": "https://github.com/seedds/nxnative/pull/352",
"draft": false,
"changed_files": 12,
"changed_since_previous": true,
"assessment": "Mac launcher configuration and shader progress are useful next tooling candidates; reconcile our app and progress parser.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 351,
"head": "f9dc8b4bb24c35f98a1e54ec378b8034e3891b9b",
"title": "Controller gyro: live six-axis sensor from GameController and the iPhone",
"url": "https://github.com/seedds/nxnative/pull/351",
"draft": false,
"changed_files": 18,
"changed_since_previous": true,
"assessment": "Motion control is relevant for future games; reconcile competing gyro proposals and test real Xbox/PlayStation/Nintendo/device sensors.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 345,
"head": "c37381120a8f8b7aef26fd22db8853dae37d0349",
"title": "present: supersampled upscaling output (DM_PRESENT_UPSCALE_OUT) and sharpening (DM_SHARPEN)",
"url": "https://github.com/seedds/nxnative/pull/345",
"draft": false,
"changed_files": 4,
"changed_since_previous": true,
"assessment": "Optional presentation scaling and sharpening change GPU work and image quality; device validation required.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 344,
"head": "379f147fedad92ffdfcd7e9d228855c4ec391ad0",
"title": "Pipeline prebuild: a compile budget, so one base Apple's compiler never finishes no longer stalls everything (#294)",
"url": "https://github.com/seedds/nxnative/pull/344",
"draft": false,
"changed_files": 9,
"changed_since_previous": true,
"assessment": "Pipeline compiler time budgets can help stalls; verify fallback behavior and archive completeness first.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 343,
"head": "b8afb5b78c1b27e79164e2acae8e8ab22c828135",
"title": "Speed up shader builds and the pipeline prewarm",
"url": "https://github.com/seedds/nxnative/pull/343",
"draft": false,
"changed_files": 13,
"changed_since_previous": true,
"assessment": "Build/prewarm speed candidate with shader cache and pipeline dependencies; keep the chain coherent.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 341,
"head": "21870dcc5b5a022765fe129196d3ee68cdd90247",
"title": "Register Mario Kart 8 Deluxe update 4.0.1",
"url": "https://github.com/seedds/nxnative/pull/341",
"draft": false,
"changed_files": 6,
"changed_since_previous": true,
"assessment": "Exact Mario Kart update profile; needs matching game files and shaders, not an automatic compatibility promise.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 340,
"head": "4d676160f85cf60a135cafd9d5906f43b61bb2b6",
"title": "Batman: Arkham Knight: profile and note (in bring-up; needs #319, #321, #339)",
"url": "https://github.com/seedds/nxnative/pull/340",
"draft": false,
"changed_files": 27,
"changed_since_previous": true,
"assessment": "Batman bring-up depends on other open rendering/UE3 proposals; not ready as an independent game profile.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 339,
"head": "14e5d32fe0514b69b14970c215fb1669586e80da",
"title": "Unreal Engine 3 support: shader caches in the split, shader_key_skip, the UE3 allocator, its frame-rate cap",
"url": "https://github.com/seedds/nxnative/pull/339",
"draft": false,
"changed_files": 15,
"changed_since_previous": true,
"assessment": "UE3 support spans extraction, allocation and timing; needs its own game and malformed-input regression checks.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 337,
"head": "c990da26aed311974e19cb11e4e8eb1753a3a2e7",
"title": "Pin spirv-cross with the translation chain",
"url": "https://github.com/seedds/nxnative/pull/337",
"draft": false,
"changed_files": 24,
"changed_since_previous": true,
"assessment": "Pinning spirv-cross is a reproducibility priority; select binaries matching our retained translation chain.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 336,
"head": "e188fe98c55f07f7d05bea31840d1d50ff3126e3",
"title": "Fix NieR FPS pacing and dynamic resolution controls",
"url": "https://github.com/seedds/nxnative/pull/336",
"draft": true,
"changed_files": 15,
"changed_since_previous": true,
"assessment": "NieR pacing and dynamic resolution require exact-version gameplay and timing checks.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 335,
"head": "af3e3a4fb96cf2ddc65d0b7b2e939b663a666c29",
"title": "samplers: optional anisotropic and trilinear filtering (DM_ANISO, DM_TRILINEAR)",
"url": "https://github.com/seedds/nxnative/pull/335",
"draft": false,
"changed_files": 4,
"changed_since_previous": true,
"assessment": "Optional sampler filtering requires rendering and performance comparison.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 333,
"head": "cee9b90e1ef97614d4fe1436f981a7d8d8a9e878",
"title": "Require the Metal compiler the shaders were tested with",
"url": "https://github.com/seedds/nxnative/pull/333",
"draft": false,
"changed_files": 9,
"changed_since_previous": true,
"assessment": "Pinning the tested Metal compiler is a reproducibility priority; coordinate with Xcode/chain requirements.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 330,
"head": "d7a95500248e5aa5964228335a872d4abf71aaa2",
"title": "Mac: Keyboard and mouse controls for Tears of the Kingdom ",
"url": "https://github.com/seedds/nxnative/pull/330",
"draft": false,
"changed_files": 13,
"changed_since_previous": true,
"assessment": "Game-specific keyboard/mouse aiming; prefer a coherent input policy with real hardware checks.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 327,
"head": "76eb68f887073e0542e36fcdf133d35e5f4d8bd2",
"title": "NSP script: convert NSZ / XCZ with a standalone nsz 5 executable when Python has no nsz",
"url": "https://github.com/seedds/nxnative/pull/327",
"draft": false,
"changed_files": 3,
"changed_since_previous": true,
"assessment": "Standalone NSZ/XCZ converter fallback is a useful next dependency-installation candidate.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 325,
"head": "4a4769e0e4b3bb4cce98e5fae40e11325edc2758",
"title": "Thread dump: the guest callers and registers of a thread waiting in an SVC",
"url": "https://github.com/seedds/nxnative/pull/325",
"draft": false,
"changed_files": 2,
"changed_since_previous": true,
"assessment": "Diagnostic thread dumps can help debugging; assess signal/thread safety before importing runtime code.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 322,
"head": "639e2a97c9e8bd18260aeaeee58703e9e8dfd27a",
"title": "Add Brewfile, requirements.txt, global.json, dependabot, translator l\u2026",
"url": "https://github.com/seedds/nxnative/pull/322",
"draft": false,
"changed_files": 7,
"changed_since_previous": true,
"assessment": "Dependency manifests and pinning are useful, but must match our installer and current translator.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 321,
"head": "0e171b9b1472d3796052122b1d826705ea78fb9a",
"title": "Keep CPU-written textures in the host's hash table, not a CFSet hashed by serial",
"url": "https://github.com/seedds/nxnative/pull/321",
"draft": false,
"changed_files": 8,
"changed_since_previous": true,
"assessment": "Texture tracking changes are core runtime work; run graphics and dirty-resource regressions first.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 320,
"head": "63e294e709a77f3bde5dbdb9272147527bc72658",
"title": "Add Mario + Rabbids Sparks of Hope support with Snowdrop shader extraction and rendering fixes",
"url": "https://github.com/seedds/nxnative/pull/320",
"draft": false,
"changed_files": 32,
"changed_since_previous": true,
"assessment": "Overlaps the already integrated upstream Sparks of Hope port; prefer the coherent upstream main series.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 319,
"head": "833c56641b177dc66dcc5dd15fba19708034e870",
"title": "Copy vertex streams at addresses that are not 4-byte aligned",
"url": "https://github.com/seedds/nxnative/pull/319",
"draft": false,
"changed_files": 6,
"changed_since_previous": true,
"assessment": "Unaligned vertex streams affect general rendering; validate buffer lifetime, bounds and visual output.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 317,
"head": "acdd6e8ff45fad4b782e85eb5f38c5b41de71fc8",
"title": "Wait for the restarted AudioUnit in the audio device-stall test",
"url": "https://github.com/seedds/nxnative/pull/317",
"draft": false,
"changed_files": 1,
"changed_since_previous": true,
"assessment": "Audio-device regression fixture depends on a newer host; import with that audio series.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 314,
"head": "adedb5f535d2bc930cd831ef031bcd510c863654",
"title": "frame step: give a probe 2 s for the GPU clock to come back up",
"url": "https://github.com/seedds/nxnative/pull/314",
"draft": false,
"changed_files": 2,
"changed_since_previous": true,
"assessment": "Frame-step probe timing changes a performance/latency tradeoff; test affected iPhone/iPad models.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 311,
"head": "38915ee7e1f9f3b1e8cf64112b1777cfb8008373",
"title": "Pick the base game's Program NCA, not its update's, from a cartridge dump that carries the update",
"url": "https://github.com/seedds/nxnative/pull/311",
"draft": false,
"changed_files": 4,
"changed_since_previous": true,
"assessment": "Base Program NCA selection in cartridge dumps is an important next extraction candidate; exercise mixed base/update fixtures.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 310,
"head": "c5bf5061bf5798a074de959e604fe4beb198d57e",
"title": "Add iOS 16.1/17 compatibility and tvOS support for Pok\u00e9mon Legends: Z-A",
"url": "https://github.com/seedds/nxnative/pull/310",
"draft": true,
"changed_files": 151,
"changed_since_previous": true,
"assessment": "Older iOS/tvOS support is a separate platform effort; compilation is insufficient to claim device support.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 307,
"head": "15763f525640a9b6a45f3b8924470b5e584bf93c",
"title": "Take the gfx tests' run list and .gitignore from the test sources",
"url": "https://github.com/seedds/nxnative/pull/307",
"draft": false,
"changed_files": 3,
"changed_since_previous": true,
"assessment": "Graphics test discovery is useful maintenance; keep CI without GPU and local GPU tests distinct.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 306,
"head": "a957e6b7368975430e32fe4ab0d4176eaa126386",
"title": "Add issue forms, a pull request template and CONTRIBUTING.md",
"url": "https://github.com/seedds/nxnative/pull/306",
"draft": false,
"changed_files": 6,
"changed_since_previous": true,
"assessment": "Contribution templates are optional repository maintenance, independent of game support.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 304,
"head": "3b32d7d6c3bd06909037e594aecf39d8d6488bb5",
"title": "Add the Hong Kong release of FINAL FANTASY RESONANCE as a game profile",
"url": "https://github.com/seedds/nxnative/pull/304",
"draft": false,
"changed_files": 22,
"changed_since_previous": false,
"assessment": "Newer FFR regional profile includes translator/host defects and claimed iPhone evidence. Avoid stacking #126/#289; chain binaries and tables require full reproducible regression builds.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 303,
"head": "dbf0ab920f7d0e247d13f78cc0b0adbdef36e2ee",
"title": "DM_NVN_POOLPEAK: how full a game's render target pool gets",
"url": "https://github.com/seedds/nxnative/pull/303",
"draft": false,
"changed_files": 7,
"changed_since_previous": true,
"assessment": "Pool high-water tracking can guide memory sizing. Static pool-pointer tracking needs concurrency/lifetime checks; it measures pages ever used, not current live allocations or FPS.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 302,
"head": "ff9727c980c1f51a9f313eb2d3a34f307bcb04ab",
"title": "Pack a Mac app into a disk image with a ready-made window",
"url": "https://github.com/seedds/nxnative/pull/302",
"draft": false,
"changed_files": 3,
"changed_since_previous": false,
"assessment": "DMG window/background automation is useful for Mac distribution, not IPA installation. Finder automation permissions and fallback need testing if Mac delivery becomes a goal.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 301,
"head": "9a0563ccafd4e9d007e3c10d06a84d81d13f7dea",
"title": "Mac: MetalFX frame interpolation (30+30), adapted from MacNativeGames; profile keys scene_upscale / camera_block",
"url": "https://github.com/seedds/nxnative/pull/301",
"draft": false,
"changed_files": 12,
"changed_since_previous": true,
"assessment": "BotW MetalFX interpolation is opt-in and adds latency, frame hooks and game assumptions. Not an iPhone FPS fix; isolate and compare UI/motion artifacts on supported hardware.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 300,
"head": "04d16458249bfa6dd971935d5b6297bfe6fe53a9",
"title": "Keep the automatic block height for sparse textures smaller than a tile",
"url": "https://github.com/seedds/nxnative/pull/300",
"draft": false,
"changed_files": 5,
"changed_since_previous": false,
"assessment": "Sub-tile sparse textures must keep automatic block height. Has synthetic layout tests and a concrete Yoshi symptom; apply with the related sparse-layout series and cross-format tests.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 299,
"head": "28fbf0af4f988bf8eae41292fae5e56805e0b07c",
"title": "Port Good Job! to native Mac",
"url": "https://github.com/seedds/nxnative/pull/299",
"draft": false,
"changed_files": 16,
"changed_since_previous": false,
"assessment": "Good Job combines profile, Unity timing and Mac launcher/window changes. Separate reusable UI from title-specific frame-step patches; Mac metrics do not validate iPhone.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 297,
"head": "7d8cfcee455ee4e4d26292198a0b2f27e66a8357",
"title": "pso_offline: leave pairs metal-tt cannot link to the device",
"url": "https://github.com/seedds/nxnative/pull/297",
"draft": false,
"changed_files": 2,
"changed_since_previous": false,
"assessment": "Leaving unlinkable pairs out can salvage an archive but does not restore missing vertex outputs. Prefer #298's padding fix; also verify cache stamp sensitivity to --leave changes.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 296,
"head": "f1a254912389ad272e93e5b3c5278eb603661325",
"title": "Mac: controller motion (Switch Pro Controller gyro over HID)",
"url": "https://github.com/seedds/nxnative/pull/296",
"draft": false,
"changed_files": 7,
"changed_since_previous": false,
"assessment": "Pro Controller HID supplies motion when GameController reports zero. Reconcile with #221/#286 instead of stacking alternate motion APIs; test calibration, axes, drift and ownership.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 295,
"head": "9a9500bbcb13ac6251d603a5d6b5aa3218bb258b",
"title": "Mac: map a Nintendo controller's face buttons by label",
"url": "https://github.com/seedds/nxnative/pull/295",
"draft": false,
"changed_files": 2,
"changed_since_previous": false,
"assessment": "Nintendo label detection plus override overlaps #180. Candidate for a unified mapping helper; reported Mac Pro Controller test does not validate iOS.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 289,
"head": "7cc835f996f24a5b708cab7d97aad483b9055dc6",
"title": "FINAL FANTASY RESONANCE (Korean release, 0100B8A026F14000): the game's own profile and the full shader table",
"url": "https://github.com/seedds/nxnative/pull/289",
"draft": false,
"changed_files": 31,
"changed_since_previous": true,
"assessment": "Large FFR regional series overlaps #126/#304 and changes common extraction/allocator paths. Compare exact title/build IDs rather than relying on conflicting region labels.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 286,
"head": "0cd0e1658246ecffd79f696aff5583ce430c47eb",
"title": "iOS: six-axis gyro aiming from the controller (and the device in handheld)",
"url": "https://github.com/seedds/nxnative/pull/286",
"draft": false,
"changed_files": 4,
"changed_since_previous": false,
"assessment": "dm_motion_set writes g_mot_t under g_mot_mu, while mot_fresh reads it without that lock. Fix synchronized snapshots and run race/focus/disconnect tests before gyro adoption.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 285,
"head": "e79692b58fa14278c7dc99374c802e0f6364d786",
"title": "Add FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition (1.0.3)",
"url": "https://github.com/seedds/nxnative/pull/285",
"draft": false,
"changed_files": 16,
"changed_since_previous": false,
"assessment": "Crystal Chronicles profile uses build-gated Unity memory-order cuts. Verify registered instruction bytes, worker stress and iPhone behavior; newer Unity TextAsset scanner changes are separately upstream.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 282,
"head": "48192496c8295a971ff92942e3917f1a34858fe2",
"title": "shader_split: one unreadable archive no longer stops the split; retry a crashed Metal compiler",
"url": "https://github.com/seedds/nxnative/pull/282",
"draft": false,
"changed_files": 2,
"changed_since_previous": false,
"assessment": "scan_file catches every Exception and returns an empty shader set, so a build may succeed with omitted shaders. Separate compiler-signal retry from scanner policy; require explicit incomplete-build reporting.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 280,
"head": "05715be61396b8a8b1368212cbeac8b21c1812e5",
"title": "Add native macOS app for building ports and installing on paired iOS devices",
"url": "https://github.com/seedds/nxnative/pull/280",
"draft": false,
"changed_files": 33,
"changed_since_previous": false,
"assessment": "Spanish GUI also includes scheduler, extraction and shader changes and device signing/install. Extract independent fixes; keep unsigned automation and editor base rather than import the whole application.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 278,
"head": "62d2085018f0ba2cfe786e04fccaeec7adc2dbec",
"title": "build_ipa_from_nsp: --platform takes a list, so one run builds the IPA and the Mac app",
"url": "https://github.com/seedds/nxnative/pull/278",
"draft": false,
"changed_files": 4,
"changed_since_previous": true,
"assessment": "Multi-platform CLI is stacked on #275 and carries its target-selection changes. Repair and validate target-specific cache restoration first, then test each platform combination.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 277,
"head": "841684012800327d6d6fa6b6fd79d3ab689c9751",
"title": "Fix NSP extraction space estimates",
"url": "https://github.com/seedds/nxnative/pull/277",
"draft": false,
"changed_files": 2,
"changed_since_previous": false,
"assessment": "Count unique archive paths instead of unique byte sizes. Exact source patch and three synthetic regressions adopted; no shader, game profile or runtime change.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 275,
"head": "f0f966fecba34e941ee43feb643edb7c2e195fec",
"title": "dmsh_build: build only the metallibs a target needs (an iPhone build skips the macOS half)",
"url": "https://github.com/seedds/nxnative/pull/275",
"draft": false,
"changed_files": 4,
"changed_since_previous": true,
"assessment": "cache_outputs gates the entire mac group, including _b.json/_b.metal, when selecting ios only; downstream analysis still consumes those products. Reproduce clean-output cache-hit restoration and fix metadata caching first.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 273,
"head": "028f8b248add4c46de26e02e93110ac5e068fe06",
"title": "Mac host: unrolled-switch jump tables, multi-output transform feedback, MGFX reader tolerance (Silksong, Tale of Immortal, Pokk\u00e9n DX, Stardew Valley)",
"url": "https://github.com/seedds/nxnative/pull/273",
"draft": false,
"changed_files": 23,
"changed_since_previous": false,
"assessment": "Jump-table reach, transform-feedback layout and MGFX tolerance can help several titles. Broad translator/binary changes require chain regeneration and cross-game regression comparisons.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 269,
"head": "0214c68bd3d11abc82bbc4cc9a2305ed56f27603",
"title": "Pok\u00e9mon Violet: profile, Bluetooth LE takeover, ConservativeRasterDilate stub",
"url": "https://github.com/seedds/nxnative/pull/269",
"draft": false,
"changed_files": 20,
"changed_since_previous": true,
"assessment": "Violet profile includes Bluetooth service and rasterization stub. Mac opening evidence plus an acknowledged image-atomic warning does not establish correct iPhone gameplay.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 268,
"head": "c84153fbbbc3625c5a1c0cd7345948bf26cde43f",
"title": "Cheats: an Atmosph\u00e8re-format engine, build-time baking and an in-game menu",
"url": "https://github.com/seedds/nxnative/pull/268",
"draft": false,
"changed_files": 17,
"changed_since_previous": false,
"assessment": "Adds memory writes, executable baking and a runtime menu. Separate from automated builds and compatibility; requires opcode bounds, build matching and pause/thread testing before opt-in adoption.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 265,
"head": "633816faa76f5d4e5350c10ccd8ddeedafc8e2b4",
"title": "Add an opt-in performance overlay to the Mac game window",
"url": "https://github.com/seedds/nxnative/pull/265",
"draft": false,
"changed_files": 17,
"changed_since_previous": false,
"assessment": "HUD counters and system load can help measurements; overlap game profile and host state. Check sampling overhead and thread safety; no demonstrated iPhone FPS gain.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 263,
"head": "46b6aa45112b9f568152dce2bf9be42d68f33e8a",
"title": "Image atomics on buffer images: declared as buffers, and an unbound one gets a buffer placeholder and an atomic scratch of its own (general, from SHIN MEGAMI TENSEI V)",
"url": "https://github.com/seedds/nxnative/pull/263",
"draft": false,
"changed_files": 9,
"changed_since_previous": false,
"assessment": "Buffer-image type and unbound atomic scratch address concrete admission failures. Related fixes now also exist in later upstream commits; compare first to avoid duplicate or older implementations.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 258,
"head": "27339e1e3d4ba82b02dd8f8192e29cdfbba5ed74",
"title": "iOS: add optional swipe camera and touch-control settings",
"url": "https://github.com/seedds/nxnative/pull/258",
"draft": false,
"changed_files": 13,
"changed_since_previous": false,
"assessment": "Swipe camera/deadzone helpers have useful tests but the PR remains draft pending integrated device testing. Reconcile DmGamepad changes with our editor before any merge.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 255,
"head": "988d765d4dbd151c6c4e54ab823c81880e9999aa",
"title": "Save sync through a cloud folder for the Mac and iOS apps (DM_SAVE_SYNC)",
"url": "https://github.com/seedds/nxnative/pull/255",
"draft": false,
"changed_files": 18,
"changed_since_previous": true,
"assessment": "Single-file archives and transaction hooks are a stronger starting point than mixing with #210. Still require interrupted-copy, rollback, conflict and unavailable-cloud tests on disposable saves.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 252,
"head": "ebc3bc409d47379281be1d72e3ed54e948b57112",
"title": "Decode Oodle GFPAKs, fit Arceus's and Z-A 1.0.0's address space, add NVN dual-source blending",
"url": "https://github.com/seedds/nxnative/pull/252",
"draft": false,
"changed_files": 16,
"changed_since_previous": false,
"assessment": "Oodle GFPAKs, address-space cuts and dual-source blending may unlock Arceus/Z-A builds. Requires chain rebuild, precise build gates and visual/gameplay validation.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 239,
"head": "11e1ea58337699e874581ac4b11c19085e47a7bd",
"title": "Mac: default the game language to the Mac's own",
"url": "https://github.com/seedds/nxnative/pull/239",
"draft": false,
"changed_files": 16,
"changed_since_previous": false,
"assessment": "Preferred-language discovery is Mac-only and explicit language wins. Our iOS wrapper persists the selected language already; no iOS benefit from importing this series.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 236,
"head": "dffb26f608f42322bc477c664a5c922213a3ed5b",
"title": "Bring up 30XX: SDK in subsdk modules, GL 4.5 / ES probe, GLSL 1.20, sampler slots",
"url": "https://github.com/seedds/nxnative/pull/236",
"draft": false,
"changed_files": 25,
"changed_since_previous": false,
"assessment": "30XX generalizes SDK discovery to subsdk modules and adds GL/EGL and sampler handling. Run GL shader, SDK discovery and existing NVN/Vulkan regressions before adoption.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 234,
"head": "75fd1b28b8ea798b6642c881e4ecebd28ae7e87e",
"title": "nvn: capture runtime shaders at ProgramSetShaders",
"url": "https://github.com/seedds/nxnative/pull/234",
"draft": false,
"changed_files": 1,
"changed_since_previous": false,
"assessment": "Runtime shader dumping can recover variants missed offline. Validate guest control/code bounds and capture deduplication; keep captured game shaders outside Git.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 233,
"head": "36fc9b37baf8719ee7fbf23d2297877eeefd0f80",
"title": "games: fix War in the North job worker wake",
"url": "https://github.com/seedds/nxnative/pull/233",
"draft": false,
"changed_files": 1,
"changed_since_previous": false,
"assessment": "War in the North changes an event clear-mode instruction. Keep exact build-ID gate; verify worker wake behavior and absence of lost work in that title.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 231,
"head": "69531352b9ee27969d083b187ea2da20d7bc5dee",
"title": "audren: drive a concurrent secondary renderer",
"url": "https://github.com/seedds/nxnative/pull/231",
"draft": false,
"changed_files": 1,
"changed_since_previous": false,
"assessment": "Secondary renderer advances at about 5 ms but its DeviceSink PCM is discarded. Verify this is intended for each game, and test close/join races before general use.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 227,
"head": "2e835c72451da7fc2d9591f065a183b1db6e9efc",
"title": "docs: record Persona 5 Royal Mac build and iPhone installation checkpoint",
"url": "https://github.com/seedds/nxnative/pull/227",
"draft": false,
"changed_files": 1,
"changed_since_previous": false,
"assessment": "Persona 5 note explicitly distinguishes install acceptance from gameplay. Useful evidence, no runtime improvement and no reason to replace the existing recipe.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 221,
"head": "f7c2f2f1054310e5776b1f33cbb401abdcb2b485",
"title": "Add Steam Controller (2026) support on macOS",
"url": "https://github.com/seedds/nxnative/pull/221",
"draft": false,
"changed_files": 21,
"changed_since_previous": false,
"assessment": "Steam controller adds HID, haptics, motion and player ownership. Requires the actual hardware plus multi-controller, reconnect and focus tests; no direct touch-editor benefit.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 218,
"head": "c5923f0ef378e2d39035ad0724a14743c34345f8",
"title": "Yoshi's Crafted World: profile, sparse texture layout, GPU copies into texture storage",
"url": "https://github.com/seedds/nxnative/pull/218",
"draft": false,
"changed_files": 27,
"changed_since_previous": true,
"assessment": "Yoshi needs sparse layouts and GPU writes into texture storage, with Mac evidence. Combine carefully with #300 and rebuild/test shader dependencies before iPhone use.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 216,
"head": "d70e4ac1ad3ef320bcc2f0aec2968d6f5a0163b8",
"title": "Diagnostics: texraw by level, A2C pass-dump fields, probe filter comparisons",
"url": "https://github.com/seedds/nxnative/pull/216",
"draft": false,
"changed_files": 6,
"changed_since_previous": true,
"assessment": "Texture-level dumps, A2C fields and probe comparisons help bring-up. Not a speed feature; check dump boundaries and packaged-resource resolution.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 210,
"head": "acf21eee2fb720d8e3b947f8dfb89c5aa4120b33",
"title": "Save Folder Sync",
"url": "https://github.com/seedds/nxnative/pull/210",
"draft": false,
"changed_files": 11,
"changed_since_previous": true,
"assessment": "Folder import is asynchronous around gameplay startup. Require proof that mounting/game writes cannot race import, plus fault injection and recovery on disposable saves.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 209,
"head": "acdd8dc6c8732409b92a6270b65c33d833984cd2",
"title": "Add NxNative Converter, a native Mac app over the NSP script's mac-app build",
"url": "https://github.com/seedds/nxnative/pull/209",
"draft": false,
"changed_files": 21,
"changed_since_previous": false,
"assessment": "Converter manages dependencies and builds but also signing and engine selection. Preserve this private source checkout and unsigned-only policy if adopting any frontend.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 194,
"head": "e20c2a5f4dc3469c8623a32095c742edab827c1f",
"title": "Mac fullscreen: present without the display link, so 60 fps games no longer drop to 30",
"url": "https://github.com/seedds/nxnative/pull/194",
"draft": false,
"changed_files": 6,
"changed_since_previous": false,
"assessment": "Fullscreen display-link workaround addresses Mac 60-to-30 drops, not demonstrated iPhone behavior. Test fullscreen, variable refresh and pacing regressions.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 193,
"head": "2c859258934dc786f35f4d6c03ffcbca538c664f",
"title": "Super Mario 3D All-Stars: multi-program applications, nn::jit served on iOS, and an opt-in in-process program switch",
"url": "https://github.com/seedds/nxnative/pull/193",
"draft": false,
"changed_files": 106,
"changed_since_previous": false,
"assessment": "3D All-Stars combines multi-program packaging, JIT, services and program switching. Major lifecycle and iOS changes; validate separately, including rejected 32-bit Galaxy path.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 192,
"head": "2d5fd5b29e1e06d03dbe050a104fadbab7729f57",
"title": "Snapshot Mario Wonder's two same-pass feedback draws",
"url": "https://github.com/seedds/nxnative/pull/192",
"draft": false,
"changed_files": 4,
"changed_since_previous": false,
"assessment": "Wonder's two feedback snapshots can address flicker; only affects that profile. Compare affected scenes and GPU/attachment cost on the actual version.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 189,
"head": "e7d470c15244ccaf6f7485dff4e88a03c34a0167",
"title": "Intel Mac: build the shader translator for x86_64 and document the pipeline",
"url": "https://github.com/seedds/nxnative/pull/189",
"draft": false,
"changed_files": 4,
"changed_since_previous": false,
"assessment": "Intel translator launcher can help Intel build hosts, while runtime shader/Oodle capture still needs a native decoder. Do not treat universal launcher as universal game execution.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 188,
"head": "603a60b780c9ab6277ebbf1aac1e0c830884d203",
"title": "Port Blasphemous and Blasphemous 2",
"url": "https://github.com/seedds/nxnative/pull/188",
"draft": false,
"changed_files": 24,
"changed_since_previous": false,
"assessment": "Blasphemous offset-table fallback must remain uniquely bounded; Blasphemous 2 relies on the framed tail-call fix already in the base lineage. Run ambiguity regressions before import.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 186,
"head": "bb517566f820d3bbb809e987081b3b1c1537dc41",
"title": "Add NINJA GAIDEN Sigma profile (0100E2F014F46000)",
"url": "https://github.com/seedds/nxnative/pull/186",
"draft": false,
"changed_files": 16,
"changed_since_previous": false,
"assessment": "Ninja Gaiden adds indexed Team Ninja archive parsing and ReadFile hook. Validate malformed archives, decompressed sizes and SDK ABI along with target-game playback.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 181,
"head": "691dd43ef6d37ce080f0b92c4bc5fccb11f30d05",
"title": "Unicorn Overlord, Asian release (010054B01AD92000, 1.05): game profile",
"url": "https://github.com/seedds/nxnative/pull/181",
"draft": false,
"changed_files": 9,
"changed_since_previous": false,
"assessment": "Asian Unicorn Overlord has independent title/build IDs and reportedly identical shader data. Import only for that release, verify build registration and profile tests.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 180,
"head": "fccf98362334b51d0935d4c443b7d1f354ce0f71",
"title": "Map Nintendo controller face buttons by label on macOS and iOS",
"url": "https://github.com/seedds/nxnative/pull/180",
"draft": false,
"changed_files": 2,
"changed_since_previous": false,
"assessment": "Nintendo label detection is small and relevant on iOS, but overlaps #295 on Mac. Test Pro/Joy-Con and Xbox/PlayStation hardware before changing mappings.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 179,
"head": "f661323a779d545e76aab50e62fc3f2914e68ec5",
"title": "Add physical keyboard support on iOS",
"url": "https://github.com/seedds/nxnative/pull/179",
"draft": false,
"changed_files": 1,
"changed_since_previous": false,
"assessment": "Physical keyboard support changes control visibility and focus cleanup. Must retain editor access and test keyboard/controller connect, disconnect and stale callbacks together.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 176,
"head": "887a4f058ebfe72e950d6701e5971cb2a9f4cdea",
"title": "Trails in the Sky 1st Chapter (01001E9023920000, update 1.0.6.1): game profile, plus general fixes to the rewriter, the GLSLC split, the shader build and the NVN layer",
"url": "https://github.com/seedds/nxnative/pull/176",
"draft": false,
"changed_files": 23,
"changed_since_previous": false,
"assessment": "Trails adds rewriter, scanner and NVN changes as well as a region-specific profile. Rebuild shader chain and check exact regional build; IPA build alone is not gameplay validation.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 173,
"head": "f5e632cf5f89fb94d000ebe843a75209dc282eff",
"title": "SHIN MEGAMI TENSEI V (010063B012DC6000, 1.0.0): game profile, version 8 Unreal paks, sparse virtual pools, 60 fps and an iOS Screen setting",
"url": "https://github.com/seedds/nxnative/pull/173",
"draft": false,
"changed_files": 40,
"changed_since_previous": false,
"assessment": "SMT V combines profile, sparse pools and iOS aspect modes; depends on #263. The aspect changes also touch the editor's coordinate assumptions and need device testing.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 171,
"head": "52c5daa90308ece5b1420625520d62bc7c02b759",
"title": "Add native SM and CSRNG IPC transport",
"url": "https://github.com/seedds/nxnative/pull/171",
"draft": false,
"changed_files": 14,
"changed_since_previous": false,
"assessment": "Native SM/CSRNG transport can reduce SDK symbol interceptions. Large service-memory and handle-lifetime surface; run adversarial IPC and thread-safety tests before replacing working paths.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 167,
"head": "e4dc169c7662685677b47d5a067ebcd6c9647223",
"title": "Textures: upload CPU-written linear and unflushed sampled textures",
"url": "https://github.com/seedds/nxnative/pull/167",
"draft": false,
"changed_files": 2,
"changed_since_previous": false,
"assessment": "CPU-written linear and unflushed sampled texture upload paths can help several games. Requires dirty-page, alias and CPU/GPU synchronization regressions before adoption.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 160,
"head": "bdbf8eb2c8542cd7851690ff7224bd27221d1d56",
"title": "Xenoblade Chronicles 2 (0100F3400332C000, JP 3.0.0, SDK 3.5) on the Mac host, with Torna",
"url": "https://github.com/seedds/nxnative/pull/160",
"draft": false,
"changed_files": 20,
"changed_since_previous": false,
"assessment": "Xenoblade 2/Torna adds SDK 3.5, audio, movie and frame-step behavior. Mac evidence does not validate iOS memory or frame timing.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 126,
"head": "309722488d994df048b5750f82ad13e451a0cac5",
"title": "FINAL FANTASY RESONANCE HK 1.0.1 (0100B8A026F14000): the game profile",
"url": "https://github.com/seedds/nxnative/pull/126",
"draft": false,
"changed_files": 9,
"changed_since_previous": false,
"assessment": "Same title ID overlaps #289/#304; compare builds and regenerated tables. Prefer the newer, smaller validated profile series rather than stacking all three.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 104,
"head": "48c615d25dd4b23202a884eb948acbf1878cf3bd",
"title": "Mac: native AppKit app bundle, preferences, and controller mapping",
"url": "https://github.com/seedds/nxnative/pull/104",
"draft": false,
"changed_files": 9,
"changed_since_previous": false,
"assessment": "Mac app packaging, save locations and preferences overlap already-existing upstream Mac packaging. Reconcile save migration and current packer before considering it.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 102,
"head": "36afdfa288937333cc467463db32267f79cc1d2d",
"title": "Mac: add optional Xbox letter-based controller mapping",
"url": "https://github.com/seedds/nxnative/pull/102",
"draft": false,
"changed_files": 2,
"changed_since_previous": false,
"assessment": "Xbox label preference is opt-in and overlaps Nintendo detection proposals #180/#295. Choose one mapping policy, then test real controllers.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 76,
"head": "40460d2d49725ee9f28fd1613bb54ddbc3184159",
"title": "Breath of the Wild above 60 fps and above 1080p (reworked from #62)",
"url": "https://github.com/seedds/nxnative/pull/76",
"draft": false,
"changed_files": 26,
"changed_since_previous": true,
"assessment": "BotW variable frame step and resolution changes require exact registered builds and timing tests. No established Dread benefit; higher caps also need thermal validation.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 32,
"head": "0c0d8f3d1709a906c980576e6b75ef50327f4cea",
"title": "NVN: alpha test through a fragment variant; parallel prewarm; alpha-tested pipelines built in the background",
"url": "https://github.com/seedds/nxnative/pull/32",
"draft": false,
"changed_files": 4,
"changed_since_previous": false,
"assessment": "Alpha-test variants can fix foliage, but first-use draws are deliberately skipped while compilation runs. Requires scene comparisons and cold/warm cache tests before adoption.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
},
{
"number": 29,
"head": "c117972a2513fe2819779965954a47e06bd6fcef",
"title": "Rhythm Heaven Groove: A16 legacy support, touch pad and ambient bars",
"url": "https://github.com/seedds/nxnative/pull/29",
"draft": false,
"changed_files": 28,
"changed_since_previous": false,
"assessment": "A16 BC decoding and rhythm-specific controls are bundled together; retain generic editor and separate bundle identity deliberately. Requires older iPhone texture, memory and touch testing.",
"scope": "Static metadata and changed-file inventory; archived patch is not approval or device testing."
}
],
"scope": "Source review and synthetic checks for four selected tooling commits; other commits and open PRs remain applicability triage."
}
}
+189
View File
@@ -1,3 +1,192 @@
# Upstream maintenance: latest selective integration
Snapshot captured on 2026-10-26 (America/Mexico_City), pinned to upstream
`15805ef52578afe54196504e3f98e15a22221664`: 38 commits since our base and 85 open
PRs. Commit inventories were compared and the four tooling changes below received
source review and synthetic tests. Open PR metadata and file inventories are
archived; this is not a line-by-line audit of all 85 proposals or their generated
tables. The historical review below retains its original snapshot and limitations.
The machine-readable latest review is in [personal-pr-review.json](personal-pr-review.json).
## Integrated tooling
| Upstream commit | Result |
|---|---|
| `4639c5114cbb` (#241/#260) | Pack shader/pipeline pair tables and optional GPU pipeline archive into complete Mac apps. |
| `b117c9131721` (#272) | Compare shader build reports and stop when previously translated shaders regress. |
| `89744da75364` (#284) | Discover Homebrew .NET runtimes correctly for standalone build tools. |
| `09f3778c366f` (#279) | Incremental IPA and Mac packaging and derived-profile cache reuse, with atomic publication checks. |
The runtime, shared touch editor, game profiles and translator/chain header remain
at our working base. The current chain is `8393d85a4eae`. The two cherry-pick
conflicts preserved our README and the existing FINAL FANTASY RESONANCE note:
that note's later graphics claim depends on changes we did not import.
No game files, keys, installed game identities or saves were changed.
Incremental final packaging needs the same output path. Our simple wrappers still
produce separate dated outputs to preserve previous builds; their intermediate
profile/shader caches benefit, but do not promise that the final app/IPA is reused
across those different names. Direct core builds with the same output reuse it.
The upstream IPA index trusts unchanged APFS metadata; `--no-reuse` on the packer
forces a fresh archive. It does not detect old archive corruption during reuse.
Our lightweight export retains its CRC verification.
## Validation of this batch
The 100 focused .NET, Mac packaging, incremental IPA and shader-regression tests
passed before integration. The final candidate passed 48 Python test files
(352 test cases, 16 skipped for unavailable optional fixtures), using the prepared
build environment. The production iOS project compiled and linked unsigned with
synthetic Metroid Dread-profile modules; this exercises the shared touch editor
and host linkage, not gameplay. The updated Mac launcher compiled with the macOS
SDK. No prepared game was rebuilt, launched or installed during this audit.
The fork owner's successful iPhone and Mac gameplay report preceded this batch;
it is user-reported evidence, not a new automated device test.
## Deferred work
- Runtime changes: startup notification deadlock (`0963959`), save transaction
isolation (`a0841d6`), audio/device/layout (`40b643b`, `15805ef`), scripted versus
controller input (`583ae42`). Useful, but require the associated host tests and
fresh gameplay checks; not mixed into the validated engine automatically.
- Graphics and new game series: image atomics, texture aliasing, display pacing,
pipeline padding, Unity/HAL extraction and eight new profiles. Those share a
translation chain and need coherent imports plus cross-game rendering checks.
- Developer tooling: upstream regression/impact harness (#328/#329), compiler
pinning (#333/#337), base-NCA selection (#311), NSZ fallback (#327), faster
builds (#343/#344). Evaluate as separate batches with their dependencies.
- Optional features: controller gyro (#351/#286/#296), cheats (#268), save sync
(#210/#255). Gyro needs hardware checks; cheats need exact-build/code-page
safeguards; sync needs destructive failure/conflict/recovery tests. Not enabled.
- Networking remains offline in both our runtime and the reviewed upstream main;
no Jamboree profile was found. Local multiplayer controllers are different from
LAN/netplay or Nintendo's online service.
## Repeatable flow
Use the repository's existing installer once to prepare tools, then:
```sh
python3 scripts/sync_upstream.py --output "/Volumes/Games/review-next"
```
This fetches upstream, freezes its head SHA and writes a commit/file/risk report.
It distinguishes the reviewed head from the actually integrated commits recorded
in [upstream-sync.json](upstream-sync.json). It never merges the active branch.
To test explicitly selected SHAs, in dependency order:
```sh
python3 scripts/sync_upstream.py --output "/Volumes/Games/candidate-next" --stage FULL_SHA [ANOTHER_SHA]
```
The second command rejects dirty source checkouts, integrated/non-upstream commits
and creates a detached candidate worktree. Conflicts remain there for inspection;
the active checkout stays intact. It finds the prepared Python environment and
runs all synthetic personal, tool, iOS and graphics Python checks into `checks/`.
Missing dependencies or failed checks stop the flow. Review logs, compile affected
targets and test games/devices before integrating. A passed synthetic test suite
is not a claim of gameplay compatibility or approval to publish a release.
Register newly accepted upstream SHAs in the policy, then bump the desktop release
manifest when distributing changed functionality through the in-app updater.
For a separate archive of every open PR and its pinned patch, use:
```sh
python3 scripts/review_upstream.py --output "/Volumes/Games/pr-review-next"
```
## Latest open PR inventory
| PR | Pinned head | Applicability |
|---|---|---|
| [#29](https://github.com/seedds/nxnative/pull/29) | `c117972a2513` | A16 BC decoding and rhythm-specific controls are bundled together; retain generic editor and separate bundle identity deliberately. Requires older iPhone texture, memory and touch testing. |
| [#32](https://github.com/seedds/nxnative/pull/32) | `0c0d8f3d1709` | Alpha-test variants can fix foliage, but first-use draws are deliberately skipped while compilation runs. Requires scene comparisons and cold/warm cache tests before adoption. |
| [#76](https://github.com/seedds/nxnative/pull/76) | `40460d2d4972` | BotW variable frame step and resolution changes require exact registered builds and timing tests. No established Dread benefit; higher caps also need thermal validation. |
| [#102](https://github.com/seedds/nxnative/pull/102) | `36afdfa28893` | Xbox label preference is opt-in and overlaps Nintendo detection proposals #180/#295. Choose one mapping policy, then test real controllers. |
| [#104](https://github.com/seedds/nxnative/pull/104) | `48c615d25dd4` | Mac app packaging, save locations and preferences overlap already-existing upstream Mac packaging. Reconcile save migration and current packer before considering it. |
| [#126](https://github.com/seedds/nxnative/pull/126) | `309722488d99` | Same title ID overlaps #289/#304; compare builds and regenerated tables. Prefer the newer, smaller validated profile series rather than stacking all three. |
| [#160](https://github.com/seedds/nxnative/pull/160) | `bdbf8eb2c854` | Xenoblade 2/Torna adds SDK 3.5, audio, movie and frame-step behavior. Mac evidence does not validate iOS memory or frame timing. |
| [#167](https://github.com/seedds/nxnative/pull/167) | `e4dc169c7662` | CPU-written linear and unflushed sampled texture upload paths can help several games. Requires dirty-page, alias and CPU/GPU synchronization regressions before adoption. |
| [#171](https://github.com/seedds/nxnative/pull/171) | `52c5daa90308` | Native SM/CSRNG transport can reduce SDK symbol interceptions. Large service-memory and handle-lifetime surface; run adversarial IPC and thread-safety tests before replacing working paths. |
| [#173](https://github.com/seedds/nxnative/pull/173) | `f5e632cf5f89` | SMT V combines profile, sparse pools and iOS aspect modes; depends on #263. The aspect changes also touch the editor's coordinate assumptions and need device testing. |
| [#176](https://github.com/seedds/nxnative/pull/176) | `887a4f058ebf` | Trails adds rewriter, scanner and NVN changes as well as a region-specific profile. Rebuild shader chain and check exact regional build; IPA build alone is not gameplay validation. |
| [#179](https://github.com/seedds/nxnative/pull/179) | `f661323a779d` | Physical keyboard support changes control visibility and focus cleanup. Must retain editor access and test keyboard/controller connect, disconnect and stale callbacks together. |
| [#180](https://github.com/seedds/nxnative/pull/180) | `fccf98362334` | Nintendo label detection is small and relevant on iOS, but overlaps #295 on Mac. Test Pro/Joy-Con and Xbox/PlayStation hardware before changing mappings. |
| [#181](https://github.com/seedds/nxnative/pull/181) | `691dd43ef6d3` | Asian Unicorn Overlord has independent title/build IDs and reportedly identical shader data. Import only for that release, verify build registration and profile tests. |
| [#186](https://github.com/seedds/nxnative/pull/186) | `bb517566f820` | Ninja Gaiden adds indexed Team Ninja archive parsing and ReadFile hook. Validate malformed archives, decompressed sizes and SDK ABI along with target-game playback. |
| [#188](https://github.com/seedds/nxnative/pull/188) | `603a60b780c9` | Blasphemous offset-table fallback must remain uniquely bounded; Blasphemous 2 relies on the framed tail-call fix already in the base lineage. Run ambiguity regressions before import. |
| [#189](https://github.com/seedds/nxnative/pull/189) | `e7d470c15244` | Intel translator launcher can help Intel build hosts, while runtime shader/Oodle capture still needs a native decoder. Do not treat universal launcher as universal game execution. |
| [#192](https://github.com/seedds/nxnative/pull/192) | `2d5fd5b29e1e` | Wonder's two feedback snapshots can address flicker; only affects that profile. Compare affected scenes and GPU/attachment cost on the actual version. |
| [#193](https://github.com/seedds/nxnative/pull/193) | `2c859258934d` | 3D All-Stars combines multi-program packaging, JIT, services and program switching. Major lifecycle and iOS changes; validate separately, including rejected 32-bit Galaxy path. |
| [#194](https://github.com/seedds/nxnative/pull/194) | `e20c2a5f4dc3` | Fullscreen display-link workaround addresses Mac 60-to-30 drops, not demonstrated iPhone behavior. Test fullscreen, variable refresh and pacing regressions. |
| [#209](https://github.com/seedds/nxnative/pull/209) | `acdd8dc6c873` | Converter manages dependencies and builds but also signing and engine selection. Preserve this private source checkout and unsigned-only policy if adopting any frontend. |
| [#210](https://github.com/seedds/nxnative/pull/210) | `acf21eee2fb7` | Folder import is asynchronous around gameplay startup. Require proof that mounting/game writes cannot race import, plus fault injection and recovery on disposable saves. |
| [#216](https://github.com/seedds/nxnative/pull/216) | `d70e4ac1ad3e` | Texture-level dumps, A2C fields and probe comparisons help bring-up. Not a speed feature; check dump boundaries and packaged-resource resolution. |
| [#218](https://github.com/seedds/nxnative/pull/218) | `c5923f0ef378` | Yoshi needs sparse layouts and GPU writes into texture storage, with Mac evidence. Combine carefully with #300 and rebuild/test shader dependencies before iPhone use. |
| [#221](https://github.com/seedds/nxnative/pull/221) | `f7c2f2f10543` | Steam controller adds HID, haptics, motion and player ownership. Requires the actual hardware plus multi-controller, reconnect and focus tests; no direct touch-editor benefit. |
| [#227](https://github.com/seedds/nxnative/pull/227) | `2e835c72451d` | Persona 5 note explicitly distinguishes install acceptance from gameplay. Useful evidence, no runtime improvement and no reason to replace the existing recipe. |
| [#231](https://github.com/seedds/nxnative/pull/231) | `69531352b9ee` | Secondary renderer advances at about 5 ms but its DeviceSink PCM is discarded. Verify this is intended for each game, and test close/join races before general use. |
| [#233](https://github.com/seedds/nxnative/pull/233) | `36fc9b37baf8` | War in the North changes an event clear-mode instruction. Keep exact build-ID gate; verify worker wake behavior and absence of lost work in that title. |
| [#234](https://github.com/seedds/nxnative/pull/234) | `75fd1b28b8ea` | Runtime shader dumping can recover variants missed offline. Validate guest control/code bounds and capture deduplication; keep captured game shaders outside Git. |
| [#236](https://github.com/seedds/nxnative/pull/236) | `dffb26f608f4` | 30XX generalizes SDK discovery to subsdk modules and adds GL/EGL and sampler handling. Run GL shader, SDK discovery and existing NVN/Vulkan regressions before adoption. |
| [#239](https://github.com/seedds/nxnative/pull/239) | `11e1ea583376` | Preferred-language discovery is Mac-only and explicit language wins. Our iOS wrapper persists the selected language already; no iOS benefit from importing this series. |
| [#252](https://github.com/seedds/nxnative/pull/252) | `ebc3bc409d47` | Oodle GFPAKs, address-space cuts and dual-source blending may unlock Arceus/Z-A builds. Requires chain rebuild, precise build gates and visual/gameplay validation. |
| [#255](https://github.com/seedds/nxnative/pull/255) | `988d765d4dbd` | Single-file archives and transaction hooks are a stronger starting point than mixing with #210. Still require interrupted-copy, rollback, conflict and unavailable-cloud tests on disposable saves. |
| [#258](https://github.com/seedds/nxnative/pull/258) | `27339e1e3d4b` | Swipe camera/deadzone helpers have useful tests but the PR remains draft pending integrated device testing. Reconcile DmGamepad changes with our editor before any merge. |
| [#263](https://github.com/seedds/nxnative/pull/263) | `46b6aa45112b` | Buffer-image type and unbound atomic scratch address concrete admission failures. Related fixes now also exist in later upstream commits; compare first to avoid duplicate or older implementations. |
| [#265](https://github.com/seedds/nxnative/pull/265) | `633816faa76f` | HUD counters and system load can help measurements; overlap game profile and host state. Check sampling overhead and thread safety; no demonstrated iPhone FPS gain. |
| [#268](https://github.com/seedds/nxnative/pull/268) | `c84153fbbbc3` | Adds memory writes, executable baking and a runtime menu. Separate from automated builds and compatibility; requires opcode bounds, build matching and pause/thread testing before opt-in adoption. |
| [#269](https://github.com/seedds/nxnative/pull/269) | `0214c68bd3d1` | Violet profile includes Bluetooth service and rasterization stub. Mac opening evidence plus an acknowledged image-atomic warning does not establish correct iPhone gameplay. |
| [#273](https://github.com/seedds/nxnative/pull/273) | `028f8b248add` | Jump-table reach, transform-feedback layout and MGFX tolerance can help several titles. Broad translator/binary changes require chain regeneration and cross-game regression comparisons. |
| [#275](https://github.com/seedds/nxnative/pull/275) | `f0f966fecba3` | cache_outputs gates the entire mac group, including _b.json/_b.metal, when selecting ios only; downstream analysis still consumes those products. Reproduce clean-output cache-hit restoration and fix metadata caching first. |
| [#277](https://github.com/seedds/nxnative/pull/277) | `841684012800` | Count unique archive paths instead of unique byte sizes. Exact source patch and three synthetic regressions adopted; no shader, game profile or runtime change. |
| [#278](https://github.com/seedds/nxnative/pull/278) | `62d2085018f0` | Multi-platform CLI is stacked on #275 and carries its target-selection changes. Repair and validate target-specific cache restoration first, then test each platform combination. |
| [#280](https://github.com/seedds/nxnative/pull/280) | `05715be61396` | Spanish GUI also includes scheduler, extraction and shader changes and device signing/install. Extract independent fixes; keep unsigned automation and editor base rather than import the whole application. |
| [#282](https://github.com/seedds/nxnative/pull/282) | `48192496c829` | scan_file catches every Exception and returns an empty shader set, so a build may succeed with omitted shaders. Separate compiler-signal retry from scanner policy; require explicit incomplete-build reporting. |
| [#285](https://github.com/seedds/nxnative/pull/285) | `e79692b58fa1` | Crystal Chronicles profile uses build-gated Unity memory-order cuts. Verify registered instruction bytes, worker stress and iPhone behavior; newer Unity TextAsset scanner changes are separately upstream. |
| [#286](https://github.com/seedds/nxnative/pull/286) | `0cd0e1658246` | dm_motion_set writes g_mot_t under g_mot_mu, while mot_fresh reads it without that lock. Fix synchronized snapshots and run race/focus/disconnect tests before gyro adoption. |
| [#289](https://github.com/seedds/nxnative/pull/289) | `7cc835f996f2` | Large FFR regional series overlaps #126/#304 and changes common extraction/allocator paths. Compare exact title/build IDs rather than relying on conflicting region labels. |
| [#295](https://github.com/seedds/nxnative/pull/295) | `9a9500bbcb13` | Nintendo label detection plus override overlaps #180. Candidate for a unified mapping helper; reported Mac Pro Controller test does not validate iOS. |
| [#296](https://github.com/seedds/nxnative/pull/296) | `f1a254912389` | Pro Controller HID supplies motion when GameController reports zero. Reconcile with #221/#286 instead of stacking alternate motion APIs; test calibration, axes, drift and ownership. |
| [#297](https://github.com/seedds/nxnative/pull/297) | `7d8cfcee455e` | Leaving unlinkable pairs out can salvage an archive but does not restore missing vertex outputs. Prefer #298's padding fix; also verify cache stamp sensitivity to --leave changes. |
| [#299](https://github.com/seedds/nxnative/pull/299) | `28fbf0af4f98` | Good Job combines profile, Unity timing and Mac launcher/window changes. Separate reusable UI from title-specific frame-step patches; Mac metrics do not validate iPhone. |
| [#300](https://github.com/seedds/nxnative/pull/300) | `04d16458249b` | Sub-tile sparse textures must keep automatic block height. Has synthetic layout tests and a concrete Yoshi symptom; apply with the related sparse-layout series and cross-format tests. |
| [#301](https://github.com/seedds/nxnative/pull/301) | `9a0563ccafd4` | BotW MetalFX interpolation is opt-in and adds latency, frame hooks and game assumptions. Not an iPhone FPS fix; isolate and compare UI/motion artifacts on supported hardware. |
| [#302](https://github.com/seedds/nxnative/pull/302) | `ff9727c980c1` | DMG window/background automation is useful for Mac distribution, not IPA installation. Finder automation permissions and fallback need testing if Mac delivery becomes a goal. |
| [#303](https://github.com/seedds/nxnative/pull/303) | `dbf0ab920f7d` | Pool high-water tracking can guide memory sizing. Static pool-pointer tracking needs concurrency/lifetime checks; it measures pages ever used, not current live allocations or FPS. |
| [#304](https://github.com/seedds/nxnative/pull/304) | `3b32d7d6c3bd` | Newer FFR regional profile includes translator/host defects and claimed iPhone evidence. Avoid stacking #126/#289; chain binaries and tables require full reproducible regression builds. |
| [#306](https://github.com/seedds/nxnative/pull/306) | `a957e6b73689` | Contribution templates are optional repository maintenance, independent of game support. |
| [#307](https://github.com/seedds/nxnative/pull/307) | `15763f525640` | Graphics test discovery is useful maintenance; keep CI without GPU and local GPU tests distinct. |
| [#310](https://github.com/seedds/nxnative/pull/310) | `c5bf5061bf57` | Older iOS/tvOS support is a separate platform effort; compilation is insufficient to claim device support. |
| [#311](https://github.com/seedds/nxnative/pull/311) | `38915ee7e1f9` | Base Program NCA selection in cartridge dumps is an important next extraction candidate; exercise mixed base/update fixtures. |
| [#314](https://github.com/seedds/nxnative/pull/314) | `adedb5f535d2` | Frame-step probe timing changes a performance/latency tradeoff; test affected iPhone/iPad models. |
| [#317](https://github.com/seedds/nxnative/pull/317) | `acdd6e8ff45f` | Audio-device regression fixture depends on a newer host; import with that audio series. |
| [#319](https://github.com/seedds/nxnative/pull/319) | `833c56641b17` | Unaligned vertex streams affect general rendering; validate buffer lifetime, bounds and visual output. |
| [#320](https://github.com/seedds/nxnative/pull/320) | `63e294e709a7` | Overlaps the already integrated upstream Sparks of Hope port; prefer the coherent upstream main series. |
| [#321](https://github.com/seedds/nxnative/pull/321) | `0e171b9b1472` | Texture tracking changes are core runtime work; run graphics and dirty-resource regressions first. |
| [#322](https://github.com/seedds/nxnative/pull/322) | `639e2a97c9e8` | Dependency manifests and pinning are useful, but must match our installer and current translator. |
| [#325](https://github.com/seedds/nxnative/pull/325) | `4a4769e0e4b3` | Diagnostic thread dumps can help debugging; assess signal/thread safety before importing runtime code. |
| [#327](https://github.com/seedds/nxnative/pull/327) | `76eb68f88707` | Standalone NSZ/XCZ converter fallback is a useful next dependency-installation candidate. |
| [#330](https://github.com/seedds/nxnative/pull/330) | `d7a95500248e` | Game-specific keyboard/mouse aiming; prefer a coherent input policy with real hardware checks. |
| [#333](https://github.com/seedds/nxnative/pull/333) | `cee9b90e1ef9` | Pinning the tested Metal compiler is a reproducibility priority; coordinate with Xcode/chain requirements. |
| [#335](https://github.com/seedds/nxnative/pull/335) | `af3e3a4fb96c` | Optional sampler filtering requires rendering and performance comparison. |
| [#336](https://github.com/seedds/nxnative/pull/336) | `e188fe98c55f` | NieR pacing and dynamic resolution require exact-version gameplay and timing checks. |
| [#337](https://github.com/seedds/nxnative/pull/337) | `c990da26aed3` | Pinning spirv-cross is a reproducibility priority; select binaries matching our retained translation chain. |
| [#339](https://github.com/seedds/nxnative/pull/339) | `14e5d32fe051` | UE3 support spans extraction, allocation and timing; needs its own game and malformed-input regression checks. |
| [#340](https://github.com/seedds/nxnative/pull/340) | `4d676160f85c` | Batman bring-up depends on other open rendering/UE3 proposals; not ready as an independent game profile. |
| [#341](https://github.com/seedds/nxnative/pull/341) | `21870dcc5b5a` | Exact Mario Kart update profile; needs matching game files and shaders, not an automatic compatibility promise. |
| [#343](https://github.com/seedds/nxnative/pull/343) | `b8afb5b78c1b` | Build/prewarm speed candidate with shader cache and pipeline dependencies; keep the chain coherent. |
| [#344](https://github.com/seedds/nxnative/pull/344) | `379f147fedad` | Pipeline compiler time budgets can help stalls; verify fallback behavior and archive completeness first. |
| [#345](https://github.com/seedds/nxnative/pull/345) | `c37381120a8f` | Optional presentation scaling and sharpening change GPU work and image quality; device validation required. |
| [#351](https://github.com/seedds/nxnative/pull/351) | `f9dc8b4bb24c` | Motion control is relevant for future games; reconcile competing gyro proposals and test real Xbox/PlayStation/Nintendo/device sensors. |
| [#352](https://github.com/seedds/nxnative/pull/352) | `576947788c58` | Mac launcher configuration and shader progress are useful next tooling candidates; reconcile our app and progress parser. |
| [#354](https://github.com/seedds/nxnative/pull/354) | `27a31b57b429` | Per-game render scale ceilings affect GPU memory and image quality; need device comparisons. |
| [#355](https://github.com/seedds/nxnative/pull/355) | `a2e9bf7803d9` | Conditional settings overlap our simpler UI. Evaluate backend settings independently. |
| [#356](https://github.com/seedds/nxnative/pull/356) | `4dba64a0ec73` | Optional Mac keyboard camera; test focus loss and simultaneous controller input before adoption. |
| [#357](https://github.com/seedds/nxnative/pull/357) | `07448091977a` | Launcher UI restructuring overlaps our simplified interface; do not replace our frontend wholesale. |
---
# Personal iOS branch: upstream review, 2026-10-26
Scope: all 57 PRs open at the captured snapshot, plus the 20 upstream commits after
+25
View File
@@ -0,0 +1,25 @@
{
"schema": 1,
"repository": "seedds/nxnative",
"baseline": "ecbeae164c0b419d1ba1031248fe1402050a3eb0",
"reviewed_head": "15805ef52578afe54196504e3f98e15a22221664",
"integrated": [
{
"upstream_sha": "4639c5114cbb8a8f250645941fa3a25c1ba08cc6",
"title": "Pack shader pairs and the offline pipeline archive into Mac apps (#241, #260)"
},
{
"upstream_sha": "b117c913172120520f01028bd42e3b2d55d9f7af",
"title": "Check translation chain changes on games their author does not own (#272)"
},
{
"upstream_sha": "89744da75364ba1847dfbd25f5a82a57d8f1ccb1",
"title": "Discover Homebrew .NET runtimes for standalone build tools"
},
{
"upstream_sha": "09f3778c366fabc2b02b3bf4ae340bb7ce40c2d9",
"title": "Make repeated IPA and Mac app builds incremental (#279)"
}
],
"note": "Selective tooling imports, not a merge of all upstream history. Runtime and translation chain remain at the baseline."
}
+124
View File
@@ -0,0 +1,124 @@
#!/usr/bin/env python3
"""Review upstream or test selected commits in a separate checkout; never merge the active branch."""
import argparse
from datetime import datetime, timezone
import json
from pathlib import Path
import subprocess
import sys
ROOT=Path(__file__).resolve().parents[1]
POLICY=ROOT/'docs/upstream-sync.json'
def git(root,*args):
return subprocess.check_output(['git','-C',str(root),*args],text=True).strip()
def areas(files):
groups=[]
for label,prefixes in [('graphics',('dm/gfx/',)),('runtime/saves/input',('dm/host/','dm/ios/Dm','dm/ios/Game')),
('game profiles',('dm/games/',)),('build tooling',('scripts/','dm/mac/','dm/ios/tools/','dm/tools/'))]:
if any(f.startswith(prefixes) for f in files):groups.append(label)
return groups or ['documentation/tests/CI']
def commits(root,base,head,integrated):
result=[]
for line in git(root,'log','--reverse','--format=%H\t%s',base+'..'+head).splitlines():
sha,title=line.split('\t',1)
files=git(root,'diff-tree','--root','--no-commit-id','--name-only','-r',sha).splitlines()
result.append(dict(sha=sha,title=title,areas=areas(files),files=files,
status='integrated' if sha in integrated else 'needs review'))
return result
def stage(root,destination,head,selected,integrated):
# Resolve and validate every request before creating or cherry-picking anything.
if git(root,'status','--porcelain'):raise ValueError('Commit or stash local edits before staging; nothing was changed.')
resolved=[]
for revision in selected:
if revision.startswith('-'):raise ValueError('Expected an upstream commit SHA.')
sha=git(root,'rev-parse','--verify',revision+'^{commit}')
if sha in integrated:raise ValueError('This upstream commit is already recorded as integrated: '+sha)
if subprocess.run(['git','-C',str(root),'merge-base','--is-ancestor',sha,head]).returncode:
raise ValueError('Requested commit is not in the pinned upstream history: '+sha)
if sha in resolved:raise ValueError('Duplicate commit: '+sha)
resolved.append(sha)
git(root,'worktree','add','--detach',str(destination),'HEAD')
# On conflict leave the candidate and Git's conflict state for inspection. The active checkout is untouched.
subprocess.run(['git','-C',str(destination),'cherry-pick','-x',*resolved],check=True)
def build_python():
candidates=[Path(sys.executable),ROOT.parent/'venv/bin/python',
Path.home()/'Library/Application Support/nxnative Easy/Tools/nxnative-tools/venv/bin/python']
for python in candidates:
if python.is_file() and subprocess.run([str(python),'-c','import capstone, lz4, fontTools'],
stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL).returncode==0:
return str(python)
raise ValueError('Build-test packages are missing. Run START-HERE.command once, then retry this command.')
def validate(candidate,output,python):
env=__import__('os').environ.copy();env.setdefault('DM_GAME','010015100B514000')
logs=output/'checks';logs.mkdir()
suites=['scripts/tests','dm/tools/tests','dm/ios/tests','dm/gfx/tests']
for suite in suites:
for test in sorted((candidate/suite).glob('test_*.py')):
relative=test.relative_to(candidate)
with (logs/str(relative).replace('/','_')).with_suffix('.log').open('w') as log:
subprocess.run([python,'-m','unittest',str(relative)],cwd=candidate,env=env,
stdout=log,stderr=subprocess.STDOUT,check=True)
# Passing synthetic checks is not gameplay validation or permission to publish a release.
def main(argv=None):
parser=argparse.ArgumentParser(description=__doc__)
parser.add_argument('--output',required=True,type=Path,help='new directory outside this checkout')
parser.add_argument('--stage',nargs='+',metavar='SHA',help='explicitly reviewed commits, in dependency order; stage and run synthetic checks')
args=parser.parse_args(argv)
output=args.output.expanduser().resolve()
if output==ROOT or ROOT in output.parents or output.exists():parser.error('Choose a new folder outside the source checkout.')
policy=json.loads(POLICY.read_text())
remote=git(ROOT,'remote','get-url','upstream').removesuffix('.git')
if remote not in ('https://github.com/seedds/nxnative','git@github.com:seedds/nxnative'):
parser.error('The upstream remote does not point to seedds/nxnative; no files changed.')
git(ROOT,'fetch','upstream','main')
head=git(ROOT,'rev-parse','FETCH_HEAD')
integrated={item['upstream_sha'] for item in policy['integrated']}
rows=commits(ROOT,policy['baseline'],head,integrated)
output.mkdir(parents=True)
report=dict(reviewed_at=datetime.now(timezone.utc).isoformat(),upstream_head=head,baseline=policy['baseline'],
local_head=git(ROOT,'rev-parse','HEAD'),commits=rows,candidate_status='not staged')
report_path=output/'report.json'
def save():report_path.write_text(json.dumps(report,indent=2)+'\n')
save()
lines=['# Upstream review','','Pinned upstream: `'+head+'`. No active branch or game files changed.','',
'| Commit | Status | Areas | Change |','|---|---|---|---|']
for row in rows:
title=row['title'].replace('|','/').replace('\n',' ')
lines.append(f"| `{row['sha'][:12]}` | {row['status']} | {', '.join(row['areas'])} | {title} |")
(output/'report.md').write_text('\n'.join(lines)+'\n')
print('Review:',output/'report.md',flush=True)
if args.stage:
report['requested_commits']=args.stage;report['candidate_status']='staging';save()
try:
python=build_python()
stage(ROOT,output/'candidate',head,args.stage,integrated)
report['candidate_status']='checking';save()
validate(output/'candidate',output)
report['candidate_status']='synthetic checks passed; gameplay and release review still required';save()
except Exception:
report['candidate_status']='failed; inspect candidate and checks, active checkout preserved';save();raise
print('Candidate:',output/'candidate')
print('Inspect changes, compile affected targets and test games before integration.')
else:
print('To evaluate selected commits, run again with a new --output folder and --stage SHA [SHA ...].')
return 0
if __name__=='__main__':
try:sys.exit(main())
except (ValueError,OSError,subprocess.SubprocessError) as error:
print('Error:',error,file=sys.stderr);sys.exit(1)
+60
View File
@@ -0,0 +1,60 @@
"""Selected upstream changes stay isolated from the active checkout, even on conflicts."""
import importlib.util
from pathlib import Path
import subprocess
import tempfile
import unittest
ROOT=Path(__file__).resolve().parents[2]
spec=importlib.util.spec_from_file_location('sync_upstream',ROOT/'scripts/sync_upstream.py')
sync=importlib.util.module_from_spec(spec);spec.loader.exec_module(sync)
class UpstreamSync(unittest.TestCase):
def setUp(self):
self.temp=tempfile.TemporaryDirectory();self.addCleanup(self.temp.cleanup)
self.root=Path(self.temp.name)/'repo';self.root.mkdir()
sync.git(self.root,'init','-b','main')
sync.git(self.root,'config','user.name','Test')
sync.git(self.root,'config','user.email','test@example.invalid')
(self.root/'file').write_text('base\n');self.commit('base');self.base=sync.git(self.root,'rev-parse','HEAD')
sync.git(self.root,'switch','-c','upstream')
(self.root/'file').write_text('upstream\n');self.commit('upstream');self.upstream=sync.git(self.root,'rev-parse','HEAD')
sync.git(self.root,'switch','main')
self.candidate=Path(self.temp.name)/'candidate'
def commit(self,message):
sync.git(self.root,'add','.');sync.git(self.root,'commit','-m',message)
def test_stage_preserves_active_checkout(self):
sync.stage(self.root,self.candidate,self.upstream,[self.upstream],set())
self.assertEqual((self.candidate/'file').read_text(),'upstream\n')
self.assertEqual((self.root/'file').read_text(),'base\n')
self.assertEqual(sync.git(self.root,'rev-parse','HEAD'),self.base)
self.assertIn(self.upstream,sync.git(self.candidate,'log','-1','--format=%B'))
def test_dirty_checkout_is_preserved(self):
(self.root/'file').write_text('local edits\n')
with self.assertRaises(ValueError):sync.stage(self.root,self.candidate,self.upstream,[self.upstream],set())
self.assertFalse(self.candidate.exists())
self.assertEqual((self.root/'file').read_text(),'local edits\n')
def test_conflict_stays_in_candidate(self):
(self.root/'file').write_text('fork\n');self.commit('fork')
with self.assertRaises(subprocess.CalledProcessError):sync.stage(self.root,self.candidate,self.upstream,[self.upstream],set())
self.assertEqual((self.root/'file').read_text(),'fork\n')
self.assertEqual(sync.git(self.root,'status','--porcelain'),'')
self.assertIn('UU file',sync.git(self.candidate,'status','--porcelain'))
def test_rejects_integrated_and_non_upstream_requests_before_staging(self):
(self.root/'local').write_text('fork');self.commit('fork');local=sync.git(self.root,'rev-parse','HEAD')
for revision,integrated in ((self.upstream,{self.upstream}),(local,set()),('--help',set())):
with self.subTest(revision=revision),self.assertRaises(ValueError):
sync.stage(self.root,self.candidate,self.upstream,[revision],integrated)
self.assertFalse(self.candidate.exists())
def test_report_keeps_review_separate_from_integration(self):
rows=sync.commits(self.root,self.base,self.upstream,set())
self.assertEqual(rows[0]['status'],'needs review')
self.assertEqual(sync.commits(self.root,self.base,self.upstream,{self.upstream})[0]['status'],'integrated')
self.assertIn('graphics',sync.areas(['dm/gfx/nvn/file.c']))
self.assertIn('runtime/saves/input',sync.areas(['dm/host/hle_fs.c']))