Files
psxrecomp/docs/ecosystem-watch.md
Matthew Stanley 55cec09acd docs: retire stale sljit references, attribute TinyCC
The sljit Tier-2 in-process JIT was replaced by the tcc tier in c2a3f6ad
(2026-06-25) and removed outright in 5b7e69b4 (2026-07-15). That removal
reworded the C-level comments but touched no markdown, so the prose still
described sljit as a live, default-on backend.

Backends today are static -> gcc -> tcc: gcc is the development default when
it is on PATH, tcc is the toolchain-free path for players. Both are external
compilers invoked as a subprocess that produce a DLL; neither is an in-process
JIT. docs/ARCHITECTURE.md, docs/BUILDING.md, docs/EXECUTION_MODEL.md,
docs/COMPILING_OVERLAYS.md and README.md already said this correctly and are
unchanged here.

- THIRD_PARTY_ATTRIBUTION.md: the sljit entry claimed code vendored at
  lib/sljit/ and compiled into the runtime. That directory does not exist.
  Replaced with a TinyCC entry, which was missing entirely despite tcc being
  the compiler intended to reach end users.
- docs/internal/SLJIT_PERSIST_CACHE.md: deleted. It documented the persisted
  shard cache of a subsystem that no longer exists, as "implemented" and
  "default-on". docs/internal/README.md updated to point at the current model
  instead of a dead link.
- docs/ASYNC_OVERLAY_COMPILE.md: superseded-in-part header. Deliberately NOT
  rewritten sljit->tcc: the passages about serializing .sljit blobs,
  overlay_sljit_deserialize and an in-memory JIT registry describe a mechanism
  tcc never used, so renaming it would trade one false claim for another. The
  async worker/file-handoff design and the CPS work remain accurate.
- docs/OVERLAY_CACHE_V2.md: sljit dropped from the dispatch priority chain.
- ISSUES.md: Issue #7 closed as superseded — the backend it reported against
  was deleted rather than fixed.
- docs/internal/COSIM_ORACLE.md: sljit_helpers left CPUState with the tier.
- Dated session logs (RECURSION_BUG.md 25.5, BACKDROP_PRELOAD.md,
  ecosystem-watch.md) keep their narrative and get a pointer to the removal.

One thing this does not fix: docs assert the tcc toolchain is "downloaded at
release-packaging time and bundled beside the game exe". runtime/src/main.cpp
does look for <exe_dir>/overlay_toolchain/, but no script in this repository
creates it. The attribution entry now states only what the code does and notes
that if packaging supplies the bundle, it happens outside this repo and must
carry the TinyCC notice. Flagged rather than papered over.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 18:16:34 -07:00

29 KiB

PSXRecomp ecosystem watch

This is a recurring upstream/fork audit, not a merge queue. It records the exact external state that was inspected, separates reusable framework work from title-specific work, and prevents an old fork from silently replacing newer framework fixes.

Note: entries evaluated on or before 2026-07-13 predate the removal of the sljit Tier-2 backend (5b7e69b4, 2026-07-15). Where an entry describes an external branch touching "SLJIT", that surface no longer exists here; the equivalent path today is the bundled tcc tier plus the dirty interpreter.

Audit baseline and rules

  • Evaluated through 2026-07-13T21:25:28-07:00 (America/Los_Angeles), against mstan/psxrecomp master at dde268dc0fb9daf8fe6529f4aebfe80995350334 (committed 2026-07-13T12:54:28-07:00).
  • Investigation worktree: audit/ecosystem-2026-07-13.
  • The initial audit inspected diffs and history without importing external code or reproducing the contributors' game builds. Focused follow-up ports are tracked below; the audit branch itself remains documentation-only.
  • A candidate must be game-agnostic or explicitly configured by the game repo, hardware-backed where it claims correctness, independently testable, and one focused PR. Hard-coded title behavior, generated output, local paths, and printf/log diagnostics do not belong in the framework.
  • Cherry-picking preserves the original author. If a change must be reconstructed, use the contributor's exact Co-authored-by trailer and cite the source PR and commit in the PR description.

Evaluation ledger

Update a row whenever its source head changes. Metadata only means the source was discovered but its diff was not evaluated.

Source Owner Evaluated ref and commit Commit time Last evaluated State
PR #13: stb launcher and accumulated runtime work NyperYuhgard feat/launcher-stb-revamp 812ce6f50c52c5c0fe86adf74ad302f3063b4f7f 2026-07-13T16:47:04-05:00 2026-07-13 Fully inspected; split required
PR #14: WebAssembly and compatibility Kareem Olim (kem0x) agent/add-web-runtime-and-compatibility-fixes a99a8fc14e26be3c48806ca85f15068a2c6801ae 2026-07-14T04:30:04+03:00 2026-07-13 Fully inspected; split required
PR #15: config-driven game tweaks douglasjv agent/game-tweak-framework 31cdfb4f4dac305e98661dfdbf8e685533fd7ca4 2026-07-11T15:56:20Z 2026-07-13 Fully inspected; see Douglas section
PR #16: SmackDown 2 framework changes Martin Penkava (shaneomac1337) smackdown2-fixes d05d14bb11caafad2963abe824f249249a80cb11 2026-07-12T19:16:19+02:00 2026-07-13 Fully inspected; split required
douglasjv/mm8 douglasjv main 4eae0f952df9a527d18ff1916d373619fbb1a391 2026-07-13T21:28:50Z 2026-07-13 Fully inspected; see Douglas section
douglasjv/r4 douglasjv main e4262718269879ef2e9b11e2fa428301082117b8 2026-07-13T15:22:57Z 2026-07-13 Fully inspected; see Douglas section
douglasjv/psxrecomp-tweaks douglasjv PR branch above; fork default master is 0cb2a77bff02e90f25d2791072a94b6ce73039f4 2026-07-09T20:50:09Z 2026-07-13 Fully inspected; default branch is 59 commits behind baseline
wowjinxy/psxrecomp wowjinxy master 46c664713c12cf719b3b5e44aa18eea63dca13af 2026-06-17T23:32:22Z 2026-07-13 Metadata only; 8 ahead / 402 behind
seedlord/psxrecomp seedlord master 4ea9ecd2a2d9db60d23e39091a53f12a2b2e751b 2026-06-12T22:29:02Z 2026-07-13 Metadata only; 467 behind, no unique commits
chrisking1981/psxrecomp_kula_world chrisking1981 master 80c33a8903c36df44d331b8a38ad64e591fd7b0a 2026-06-26T21:03:42Z 2026-07-13 Metadata only; merged contribution branches already tracked in upstream PRs
Creesic/psxrecomp Creesic master 3c2b87cb883d67db984fcabed30c5195f39ee3cd 2026-03-28T02:33:18Z 2026-07-13 Metadata only; legacy history has no common ancestor with v4

The fork comparison counts above are snapshots, not quality judgments. Old game repos are expected to pin old framework commits; the point is to avoid copying their whole framework back over current master.

Consolidated ecosystem gaps

The strongest missing shared capabilities found in this pass are:

  1. Faithful CD-DA playback and CUE pregap/index behavior. Current master already has multi-file CUE support, but not the complete Red Book playback path in PR #14.
  2. A supported WebAssembly target: reproducible Emscripten toolchain, browser audio, persistence/input shell, hosting requirements, and a diagnostic story.
  3. Declarative, opcode-verified game enhancement patches and typed widescreen extension points, so title repos stop editing framework source.
  4. Cross-platform, source-only game-repo scaffolding with an exact framework pin and repeatable extraction/regeneration steps.
  5. Renderer and SPU accuracy work that is presently being discovered during individual game bring-up: exclusive triangle edges, complete primitive-size rejection, SPU end/mute behavior, Gaussian interpolation, and reverb.
  6. A first-class downstream compatibility signal. A game repo currently pins a commit, but there is no automated report saying how far behind it is, which framework capabilities it carries locally, or whether its pin has a known security/correctness supersession.

NyperYuhgard branch / PR #13

Snapshot: 13 branch commits, 35 changed files, +8,631/-1,914; six current master commits are absent, the PR conflicts, and it has no checks. The PR body describes a three-commit launcher replacement, but the branch has since accumulated CD, SPU, overlay, recompiler, tooling, documentation, FPS, traps, and Crash Bash diagnostics.

Keep under review

  • The older in-tree launcher replacement remains blocked by missing GL loader and visual/layout review prerequisites. Do not use its runtime changes to justify merging launcher code.
  • a39ab37 contains Linux shared-library overlay discovery, ABI preflight, and cache loading work. Re-derive the smallest useful parts on top of master's newer exact overlay dispatch (b39387e) and test save/load plus stale-cache behavior.
  • b49548e adds an FPS counter and overlay status. Keep only product-facing telemetry that uses the normal UI/debug surfaces.
  • b24d685 adds runtime flag and debug-command indexes. Regenerate or verify them against current master before a docs-only PR.
  • The dirty-text write path in b07cb79 also marks the page dirty, closing a plausible gap where native dispatch is blocked but interpreter dispatch never activates. Isolate and oracle-test that few-line behavior.

Do not upstream as written

  • The branch's CD/multi-file reader is older than and superseded by master's 5a2c6fd implementation.
  • The simplified floating-point reverb is not a faithful PS1 SPU model.
  • Hard-coded Crash Bash write addresses, large stderr crash dumps, and local log/watchpoint behavior conflict with the framework's game-agnostic and TCP observability rules.
  • The recompiler additions accept branch-likely and MOVN/MOVZ instructions that are not part of the PS1's MIPS I CPU, risking data being classified as code. Its BC2T decoding also treats rs=9 as BC2T; COP2 branches use the BC format under rs=8 with the condition in rt. This code needs a new ISA-led design, not a transplant.
  • The shell build helpers are thin local conveniences rather than the cross-platform documented build workflow.

Kem0x branch / PR #14

Snapshot: 12 branch commits (10 feature commits and two upstream merges), 34 files, +1,991/-395, clean against the audit baseline, but no reviews, CI checks, or added regression tests.

High-value isolated fixes

  • dd9e5c6: CD interrupt matching should test the encoded low interrupt bits with irq_enable & irq_flag. This is a small hardware-backed correctness PR.
  • Generic subset of b2597df: an ADPCM END without REPEAT jumps to the repeat address, sets ENDX/Release, and immediately mutes the envelope. Exclude the Pepsiman duplicate-effect timing guard.
  • 91a654f: exclusive bottom/right software-rasterizer edge coverage. Add renderer regressions for winding, clipping, adjacent triangles, semitransparency, and flat top/bottom cases.
  • CD-DA/pregap subset of 0e9df70: layer 2,352-byte audio sector streaming, track transitions, Play/GetlocP/autopause/DataEnd, and save-state coverage on top of master's reader. The PR currently omits cdda_data_end_pending from the serialized CD state.

Larger capabilities

  • 78128bf, 9d8550c, and 67207b4 establish an Emscripten pthread runtime, WebAudio bridge, stable key mapping, and vblank-safe pause. Before calling it supported, pin the toolchain, document a reproducible build and cross-origin-isolated hosting, supply the browser persistence shell, revisit the fixed 384 MiB/1 GiB memory policy, and retain useful diagnostics.
  • Generic portions of ec889d6 explore subpixel projection provenance, perspective-correct software texturing, and duplicate-frame presentation. They instrument generated code and hot stores and must be separated into experiments with performance and image-quality evidence.

Already superseded or title-specific

  • 01155a6 exact compiled ranges are absorbed and broadened by master's b39387e; the head also drops a newer Crash Bash clean-text fallback. Never merge the branch wholesale.
  • Hard-coded Pepsiman/SLPS-01762 RAM addresses, menu chord injection, lives, level restart, and track-based controls belong in its game repo. The PEPSIMAN_SFX_RETRIGGER_GUARD masks a timing issue and does not belong in the shared SPU.

Martin Penkava branch / PR #16

Snapshot: seven commits, 18 files, +1,129/-96, and six master commits behind. The game build was reported successful, but there are no checks and the generic BIOS-only framework link is reported failing.

Candidate work

  • df4cc5c: MSVC portability for bit scans, C linkage, and generated static initializers. Validate generated BIOS and game units with MSVC plus the existing GCC/Clang matrix.
  • The s_active guards from e6809cc are a small overlay-loader lifecycle fix. The same commit's "decodable word above overlay floor" discovery fallback is much riskier and needs independent proof; it can classify data as executable.
  • cfc5d0e: extend the PS1 1023x511 primitive-size rejection to every polygon, quad half, line, and polyline path. Master has a partial triangle reject, so port and test the missing coverage rather than replacing gpu.c wholesale.
  • Split Gaussian interpolation from reverb in e069c8a. Verify the 512-entry table's provenance/licensing and compare both output and state transitions with the in-tree Beetle oracle before import.
  • The Vulkan synchronization, staging-buffer reuse, coalesced submission, and presentation work may be useful after the known AMD corruption is resolved. Keep performance/synchronization fixes separate from CRT shaders and debug environment flags.

Follow-up credit

PR #61 reconstructed the reusable Vulkan synchronization, staging-buffer, command batching, present-mode, and timing work from Martin Penkava's PR #16 branch onto current master while leaving Vulkan experimental and hidden by default. Martin Penkava (shaneomac1337) is the source developer for that Vulkan work.

Reject or relocate

  • 4517bd5 labels the AMD corruption unresolved and carries temporary Vulkan diagnostics; it is not merge-ready.
  • The three batch scripts hard-code one contributor's Visual Studio and D:\tools layout, and two directly regenerate SmackDown 2. They belong in a game repo or should be replaced by parameterized build documentation.
  • The new shader describes itself as "CRT-Royale-inspired" while master already has attributed CRT/composite/Trinitron color models. Establish exact provenance and license, then evaluate a shader as a separate presentation feature.

Douglas game repos and tweak framework

Revision shape

Both game repos pin Douglas's framework fork as a submodule, and both pins are based on upstream c94fcd5 rather than current master:

Game Game head Framework pin Compared with audit baseline
Mega Man 8 4eae0f952df9a527d18ff1916d373619fbb1a391 3c316fc781ba645cca60125211299de0e879d770 Pin has 16 unique commits; master has 6 absent commits
R4: Ridge Racer Type 4 e4262718269879ef2e9b11e2fa428301082117b8 19233f496fe810fb57afc226b4ff4509c812bc8f Pin has 10 unique commits; master has 6 absent commits

Those six master commits include multi-file CUE support, exact native/static overlay dispatch, audio reserve/catch-up hardening, release hygiene, and analog stick/D-pad decoupling. Every port must start from dde268dc; neither game pin is a safe integration base.

Reusable game-project pattern

The repos are good source-only title skeletons: top-level CMake using psxrecomp_add_runtime_target, a minimal seed, typed game.toml, exact framework pin, CHD/PS-X EXE extraction, macOS prerequisites/build helpers, research notes, and aggressive ignores for discs, BIOS, generated output, caches, and runtime state. Neither has CI.

That repeated structure is evidence for an official game-project template or scaffolder with standardized extract, configure, build, pin-status, and smoke test jobs. Reimplement the workflow in a licensed upstream template; do not copy the standalone repos' unlicensed scripts.

Mega Man 8 findings

  • The source-only project targets SLUS-00453. Its title-owned config uses reachable discovery, a verified smaller analysis bound, full-2D native wide, a scene-word gate, packet-proven HUD range, three background-2D sites, and a ring-refill option. Addresses, hashes, state gates, and policy stay in mm8.
  • Its baseline notes report that whole-image discovery grew from 1,975 candidates to 6,815 entries, 5.4 million C lines, and 176 MiB of generated C, while reachable discovery produced 132 entries and roughly 87,000 lines. That is strong motivation for a bounded/reachable discovery API.
  • The documented real-disc/headless Debug run reached controllable opening-stage play for 17,425 consecutive frames with no unknown dispatch; Release linked. The repo correctly rejected a guessed 60 FPS patch after motion/timing evidence contradicted it. This is useful integration evidence, but no CI reproduces it.
  • Framework pin 3c316fc extends existing background-2D support with a gameplay RAM gate, ring-refill/signed-column behavior, interpreter parity, and SLJIT decline for affected fragments. Upstream only generic typed pieces and test 4:3 identity plus mutated opcodes; do not import the MM8 addresses.

R4 findings

  • The source-only project targets SLUS-00797. Its title config owns race callback split addresses, projection squash, cull widening, hybrid analog, and exact polygon/HUD packet sources. game-android.toml selects a reduced software rendering profile.
  • The repo records 2,982 strict functions, Apple Silicon Release linking, real LLE boot/attract, GL 4.1, 60 simulation steps and 60 unique frames in two seconds, correct wall-clock timers, and live analog bytes. Fourteen HUD evidence PNGs are tracked. Android build/install material exists, but there is no documented device result.
  • Commit 0f10098 adds configurable polygon/line HUD regions guarded by packet source, bounds, and pivot. It is inert unless configured and has unusually concrete visual evidence; it is a good standalone typed extension after parser, bounds, and default-identity tests.
  • Commit 7abbfdf mixes a generic frame-split callback mechanism with POSIX overlay loading, interpreter-page controls, and SPU CD-capture/IRQ changes. The frame split is promising but high-risk: review save/reset state, nested callbacks, interrupts, cycles, audio, and replay before a design branch.
  • The same ancestry supplies the missing POSIX cache scan and manifest-driven dlsym(func_%08X) registration. Current master still logs that POSIX export scanning is TODO. Rebase this narrowly onto the current loader, validate both address and CRC, ABI cleanup, rescan, and handle lifetime on Linux and macOS.
  • Android support adds an arm64 SDLActivity target, app-private paths, software renderer stubs, AArch64 fiber context switching, and raw SDK/NDK packaging. It is API-26/arm64/debug-only, clones SDL during build, exports the activity, and lacks controller/audio/suspend/device evidence. Treat it as an experiment, splitting runtime portability from APK tooling.

PR #15 findings

PR #15 is six commits, 23 files, +644/-25; current master has nine unique commits not in it. A synthetic merge was clean, but the PR has no checks or automated tests. It introduces three useful inert-by-default configuration families:

  1. [[recompiler.patch]]: named address/expected/replacement patches with duplicate checks, fatal main-EXE mismatch, and guarded overlay variants.
  2. [[widescreen.signed_x_bound]]: signed Q16 gameplay bounds wired through static generation, captured overlays, SLJIT, and the interpreter.
  3. Typed textured-edge expansion/full mirror options for finite arena and background geometry.

It also bundles macOS GL 3.3 core context setup, CPU-copied overlay discovery, analog debug injection/observability, client commands, and a thorough GAME_TWEAKS.md. The overall architectural direction is strong: exact guest instruction changes remain game data, typed framework behavior is off by default, and the shared code contains no title addresses.

Fix these before proposing merge:

  • Software rendering treats the textured-edge return code as a boolean and stretches the whole primitive, unlike the GL-specific outside-edge meaning.
  • Runtime signed-bound registration silently truncates after 64 sites while codegen accepts more, allowing backend divergence.
  • Signed-bound scaling includes cull-guard pixels through psx_ws_x_margin(), coupling a gameplay bound to renderer safety margin.
  • Treating every dispatch above g_overlay_region_floor as dirty is broad and can turn data targets into interpreter candidates.
  • Loading the same config through --config and --ws-config can append duplicates without cross-source validation; address alias semantics and the linear per-instruction patch lookup also need definition.
  • Split patches, signed bounds, textured edges, platform GL, overlay discovery, debug input, and final docs into focused reviews.

PR #15's public body reports AppleClang/Ninja, Tobal generation/runtime link, Einhander regeneration/frame tests, and Mega Man Legends generation/link/boot. No attached checks or artifacts independently reproduce those claims. MM8 and R4 descend from the PR but do not currently consume its guarded-patch, signed-bound, or textured-edge entries; they instead demonstrate that the typed profile pattern is continuing to grow.

First-wave implementation branches

The first wave was rebuilt in isolated worktrees from current master, reviewed through 2026-07-13T22:00:00-07:00, and initially published as draft PRs. Each branch has an in-tree docs/internal/upstream/ record linking its exact source, preserving human credit, and listing related material deliberately excluded.

PR / branch Implementation commit Evaluated source Last evaluated Validation / state
#20 fix/cdrom-encoded-interrupts-kem0x 52eb8e8a PR #14 dd9e5c6 2026-07-13 Focused mask test and standalone compile pass; Kareem co-author
#17 fix/spu-end-mute-kem0x 76ddcc00 PR #14 b2597df 2026-07-13 Runtime behavior already on master; new END/REPEAT regression passes; Kareem co-author
#23 fix/overlay-init-guard-shaneomac 5b8098a9 PR #16 e6809cc 2026-07-13 Pre-init regression and standalone compile pass; source co-authors preserved
#21 fix/msvc-generated-init-shaneomac 05d4f35b PR #16 df4cc5c 2026-07-13 MSVC game/BIOS/test builds, 44/44 L2, and 63 runtime objects; original author preserved
#18 fix/posix-overlay-export-scan-douglas c0fa9b1e df7d1fa, 7abbfdf 2026-07-13 Real Linux shared-library fixture and Windows compile pass; merged with author approval
#22 feat/config-guarded-mips-patches-douglas 5f62deda PR #15 19001c0 2026-07-13 Patch CTest 2/2 (including C++17 public-header coverage), L2 44/44, combined game builds; merged with author approval
#19 feat/reachable-main-discovery-douglas bd705bfc MM8 8415f3a 2026-07-13 Parser/codegen tests, L2 44/44, overlay/static guard pass; merged with author approval

The Douglas-derived changes were merged with author approval.

Disposable combined regression exercise

The PR branches were combined only in the unpushed local branch test/ecosystem-wave-integration at bed0c08048b954f7f76d6a44bd97ce1eb40688f8. This is a test fixture based on unchanged master dde268dc; it is not a merge proposal. The exercise was evaluated through 2026-07-13T23:53:52-07:00 (America/Los_Angeles).

Game repository / test ref Framework under test Last evaluated Regeneration/build Runtime acceptance
Tomba 1 05e058f local combined fixture bed0c080 2026-07-13 External local disc located, SCUS_942.36 freshly extracted, 6,245-entry regeneration and launcher-free Debug runtime build passed Visible manual pass reported: attract, gameplay, and save loading
Tomba 2 3562540 local combined fixture bed0c080 2026-07-13 Fresh regeneration and Debug runtime build passed 328 s, 4,477 frames, 4,477 VBlanks raised, 22,898 IRQs; no fatal heartbeat, crash report, or error-pattern log hit; follow-up framebuffer showed active gameplay/tutorial content
Mega Man X6 66d0f16 local combined fixture bed0c080 2026-07-13 Fresh regeneration and launcher-free Debug runtime build passed 328 s, 4,400 frames, 4,401 VBlanks raised, 59,918 IRQs; no fatal heartbeat, crash report, or error-pattern log hit; follow-up framebuffer showed the active intro sequence
Ape Escape 3367eb1 local combined fixture bed0c080 2026-07-13 Fresh regeneration and launcher-free Debug runtime build passed Initial parallel run: 328 s, 5,231 frames, 5,231 VBlanks raised, 25,405 IRQs, clean. Isolated follow-up: 4,418 frames, clean, framebuffer showed active intro/demo content

The user additionally completed visible manual attract, gameplay, and save-load smoke checks across all four games. The simultaneous three-game pass was subjectively sluggish under host contention, so it is compatibility evidence, not a performance comparison.

The soaks used --headless --no-launcher --renderer software, isolated working directories, and distinct debug ports. They cover guest execution, disc/CD, SPU timing, interrupts, overlay loading, and unattended title/attract progression, but are not visual-renderer or audible-output acceptance tests. The game worktrees contain only temporary path/junction wiring and regenerated output for this exercise; no game-repository change is proposed.

A second three-process framebuffer-check run exposed one load-sensitive test harness anomaly: Ape Escape's wall-clock starvation watchdog aborted at frame 268 after the process received no heartbeat opportunity for 6.59 seconds. It had completed the earlier parallel soak, and it immediately passed the isolated 4,418-frame rerun above. Treat this as host-contention evidence when scheduling parallel soaks, not as a reproducible guest or PR-branch failure; retain the crash report and starvation dump in the temporary Ape test worktree.

Remaining upstream branch queue

The completed first-wave branches are recorded above. The remaining queue is kept narrow so each source and exclusion decision receives its own review.

Priority Proposed branch Source credit Scope / gate
2 fix/sw-raster-exclusive-edges-kem0x Kareem Olim, 91a654f Edge rules; image/oracle suite
2 fix/gpu-primitive-size-reject-shaneomac Martin Penkava, cfc5d0e Complete existing partial hardware rule
2 fix/dirty-text-page-mark-nyper NyperYuhgard, subset of b07cb79 Dirty/native dispatch invariant; no Crash Bash logging
2 feat/cdda-playback-kem0x Kareem Olim, subset of 0e9df70 Extend master's CUE reader; save-state and track tests
2 feat/widescreen-hud-regions-douglas Douglas, 0f10098 Typed polygon/line HUD regions; GL/SW identity tests
2 feat/widescreen-signed-bounds-douglas Douglas, f44f365 Remove 64-site/cull-margin hazards; all backend tests
2 fix/macos-core-gl-context-douglas Douglas, subset of df7d1fa Context setup only; macOS launcher/game smoke tests
3 feat/web-runtime-core-kem0x Kareem Olim, 78128bf Reproducible platform target, no title hooks
3 feat/web-runtime-controls-kem0x Kareem Olim, generic web-control commits Keybind/pause API and persistence contract
3 feat/game-project-template Douglas-inspired workflow New licensed template/scaffolder; pin-status + CI
Hold Existing feat/launcher-stb-revamp NyperYuhgard First solve GL loading and visual acceptance
Hold exp/vulkan-frame-delivery-shaneomac Martin Penkava Only after AMD corruption and provenance gates
Design design/runtime-frame-split-douglas Douglas, generic subset of 7abbfdf State/cycle/audio/replay design before code PR
Experiment exp/android-runtime-douglas Douglas, 19233f4/6238330 Separate runtime from packaging; on-device gates

Attribution and licensing checklist

Contributor Exact author identity to preserve
NyperYuhgard NyperYuhgard <93950153+NyperYuhgard@users.noreply.github.com>
Kareem Olim Kareem Olim <kareemolim@gmail.com>
Martin Penkava Martin Penkava <mpenkava1337@gmail.com>
Douglas douglasjv <vanderveerdouglas@gmail.com>
  • Prefer a clean cherry-pick when a whole source commit is acceptable. For a subset/reimplementation, add the exact human contributor as co-author and cite the original commit/PR. Preserve any existing co-author trailers too.
  • The contribution guide says submitted contributions use PSXRecomp's PolyForm Noncommercial license. Standalone mm8 and r4 currently declare no repository license, so do not copy fork-only material from them without an upstream PR or explicit permission/licensing confirmation from Douglas.
  • Resolve third-party provenance before moving tables, shaders, emulator-derived algorithms, or copied constants. Attribution is required even when the final implementation is license-compatible.

Repeat-audit procedure

  1. Record the current upstream baseline SHA and local audit time.
  2. Resolve each tracked ref's current SHA. If unchanged, update nothing except an explicit recheck date when needed.
  3. Compare from the fork's true merge base and separately compare its pinned framework commit with current master. Do not treat a submodule as local game code.
  4. Classify deltas as shared correctness, opt-in framework capability, game-owned configuration/tooling, generated/artifact content, superseded work, or policy/provenance risk.
  5. Verify claimed correctness against PSX-SPX, in-tree Beetle, hardware tests, or another independent source. A successful game build is integration evidence, not hardware proof.
  6. Update this ledger before proposing or creating focused branches.