Add isolated upstream maintenance flow and document network and modding limits
This commit is contained in:
1 parent
54647b08ea
commit
f23448d216
10 files changed
+1425
-12
No files matched your search
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "1.4.2",
|
||||
"build": 7,
|
||||
"version": "1.4.3",
|
||||
"build": 8,
|
||||
"minimumMacOSMajor": 26
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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."
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
}
|
||||
@@ -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)
|
||||
@@ -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']))
|
||||
Reference in new issue
Block a user