Releases: mattias800/prosper
Releases · mattias800/prosper
Release list
prosper v0.2.2
What's Changed
- vblank pump: recover the dropped-tick signal the grid snap hides (#3075) by @mattias800 in #3170
- recompiler: keep [mimg-unresolved] visible under PROSPER_MIMG_SOFT (#3143) by @mattias800 in #3171
- tools/snapshot: pin all three min_structural_similarity threshold routes by @mattias800 in #3172
- docs: correct the stale readback-only present-path claim (#1270 falsified it) by @mattias800 in #3173
- docs: fix both sides of check_merge_result's checker-invocation locale decode by @mattias800 in #3169
- recompiler: give flat-shaded fragment varyings SPIR-V Flat (#3051) by @mattias800 in #3175
- tools/perf: fix audio_delivery_report's +1/(N-1) drift bias and burst-clustering wording by @mattias800 in #3177
- PROSPER_TEXCOMMIT: scan the source extent, not the decoded byte count by @mattias800 in #3176
- host: give Win32SleepFallback the same deadline post-condition as its sibling (#3074) by @mattias800 in #3182
- test(#3057): bind dmem caller-chain attribution to the alloc_dmem call site by @mattias800 in #3178
- hle: scePthreadSemInit forwards sem_init's real error instead of discarding it by @mattias800 in #3179
- tests(gpu/compute): mutation-verified regression arm for the compare-flag readback stride by @mattias800 in #3183
- tools/shader_conformance: make scan.py's MIMG walk length-aware (#3040) by @mattias800 in #3185
- render_runner: check vkCreateImage's result before using the image handle by @mattias800 in #3181
- perf(compute): cut CPU cost in the compute writeback path (+2.7% on Astro Bot) by @mattias800 in #3162
- docs: instrument trap 240 —
gh pr view --commentsfails here and prints nothing by @mattias800 in #3190 - Extract sem_timedwait's deadline/slice arithmetic to clock-free helpers (#3069) by @mattias800 in #3188
- perf(render): take getenv off 44 per-draw guards, screened against runtime arming by @mattias800 in #3192
- ci: fail the Linux job when the spirv-tools-gated control check is not registered (#2960) by @mattias800 in #3186
- hle(systemservice): log a guest reporting its OWN abnormal termination (#3119) by @mattias800 in #3120
- fix(perf): warn about harness readback whenever it is a material share, not only when it wins classification by @mattias800 in #3187
- feat(gpu): PROSPER_SKIP_DRAW_PROGRAM — decline graphics draws by shader program identity by @mattias800 in #3194
- fix(gpu): distinguish an announced index size from a never-announced one (#3009) by @mattias800 in #3189
- perf(compute): measure seed/writeback aliasing between dispatches (#3157) by @mattias800 in #3160
- docs: instrument traps 242 and 243 — conflicting PRs get no CI; shared build dirs corrupt silently by @mattias800 in #3200
- recompiler: name the failing provenance step on a vertex-fetch reject (#3137) by @mattias800 in #3191
- recompiler: name the vertex-stage cross-lane MBCNT reject (and record vertex rejects at all) by @mattias800 in #3199
- Derive the advertised display mode from the host instead of hardcoding 1080p59.94 (#3017) by @mattias800 in #3198
- gpu: compute images carry the T#-declared mip chain, so image_load_mip is implemented (#3048) by @mattias800 in #3197
- feat(gpu): name dumped shaders by guest address, and filter the dump to one (#3196) by @mattias800 in #3201
- recompiler: a shader that reads M0 before writing it no longer fails the stage (#3133) by @mattias800 in #3136
- fix(gpu): mip-chain provenance is image identity only when a chain exists (#3205) by @mattias800 in #3206
Full Changelog: v0.2.1...v0.2.2
prosper v0.2.1
What's Changed
- fix(hle): select/pselect must honour their timeout — a no-op sleep was burning a core at 9M calls/s by @mattias800 in #1663
- fix(diag): label guest addresses from the mapped base, not a relocated literal (#1659) by @mattias800 in #1661
- diag(agc): make a substituted stream address, a short fold, and submit ordering fail-visible by @mattias800 in #1665
- fix(hle): name the Videodec2 AVC entry point, and make its rejections self-identifying (#1658) by @mattias800 in #1668
- diag(agc): PROSPER_AGC_SPLIT_FINAL_STATE — a falsified A/B for #305, retained off by @mattias800 in #1671
- fix(loader): report duplicate exports instead of aliasing them silently (#1635) by @mattias800 in #1670
- fix(hle): deliver the APR completion event for a zero-tag binding (#1666) by @mattias800 in #1667
- docs(orchestration): two cross-title colour-state results, a number for "sustained all-clear", and a boot_trace Astro route by @mattias800 in #1679
- docs: record two merge-time traps (worktree --delete-branch, SHA-pinned asset URLs) by @mattias800 in #1680
- docs: record the before/after peer-count blind spot, and scope the GPU discipline to timing claims by @mattias800 in #1682
- ci: run the GPU suite, and make a skipped test say so (#1675) by @mattias800 in #1678
- docs: a guard keyed on a threshold expires silently by @mattias800 in #1683
- test(snapshot): committed routes and gameplay guards for Joe & Mac, Asterix and Summer Sports by @mattias800 in #1676
- docs(astro): the zero colour write mask is CB_COLOR_CONTROL.MODE=DISABLE — Lane A's question answered, frontier moves upstream by @mattias800 in #1685
- docs(astro): close the fold bound — Astro never uses the variant submit path and every submit folds completely by @mattias800 in #1686
- test(gpu): resolve the four lavapipe exclusions — both were assertion defects (#1681) by @mattias800 in #1689
- fix(videodec2): the sizing query must not require a compute queue the guest cannot yet have by @mattias800 in #1687
- docs(dq7): localize the flashing white screen and UI noise block to CB_COLOR_CONTROL.MODE=2 (#1588) by @mattias800 in #1695
- test(snapshot): guard GRIS, Cobra and Worms at rung 6 — and one route that cannot carry a guard by @mattias800 in #1696
- fix(app): bind every F9 capture artifact to one stamped, exclusively claimed name by @mattias800 in #1694
- test(gpu): the 3D storage-volume fixture never encoded DIM=3D — restore game_compute_exec to CI by @mattias800 in #1698
- feat(audio): PROSPER_AUDIO_FLOW — separate "no PCM" from "silent PCM" from "we dropped it" (#1692) by @mattias800 in #1699
- ci(docs): fail when a numbered doc table is broken, and repair a live break by @mattias800 in #1701
- feat(gpu): make the unmodeled CB_COLOR_CONTROL.MODE report countable by @mattias800 in #1708
- docs: record two silent-failure idioms as instrument-traps 40 and 41 by @mattias800 in #1723
- ci(gpu): run the Vulkan validation layer, and gate on it (#1704) by @mattias800 in #1719
- fix(audio): fold AudioOut2 MAIN beds wider than 7.1 instead of discarding them (#1700) by @mattias800 in #1722
- fix(gpu): CB_COLOR_CONTROL.MODE must not override the guest's explicit colour write mask by @mattias800 in #1728
- perf(render): scope the texture decode identity map to the submit (#1691) by @mattias800 in #1703
- fix(gpu): stop emitting invalid SPIR-V, and make the gate that missed it able to see the path (#1711) by @mattias800 in #1726
- docs(astro): Astro Bot enters COMPATIBILITY.md at rung 2 — the title screen renders by @mattias800 in #1736
- docs(compat): boot sweep of fourteen titles — corrected rungs, four new rows, and a frame-rate census by @mattias800 in #1740
- feat(loader): real runtime PRX loading for sceKernelLoadStartModule (#639) by @mattias800 in #1745
- feat(diag): PROSPER_DMEM_CALLER — attribute a direct-memory allocation to the guest code that asked for it by @mattias800 in #1749
- perf(compute): roll up the compute decomposition, and find Astro Bot's unbounded dispatch (#1732) by @mattias800 in #1747
- perf(render): size the backend host-buffer pool from host RAM and evict LRU (#1284) by @mattias800 in #1734
- diag(gpu): PROSPER_PROVENANCE_ADDR, and a dispatch cap that proves Astro Bot's device loss is caused by dispatch size by @mattias800 in #1752
- feat(talesgraces): routes to the title screen and the new-game Options screen (PPSA19991 rung 2) by @mattias800 in #1759
- diag(gpu): PROSPER_SHARPLOG — separate "the shader never declared it" from "we dropped it" by @mattias800 in #1758
- diag(gpu): close the #1226 fence-forge chain and stop the tripwire quoting its own cap by @mattias800 in #1754
- fix(agc): size the end-of-pipe packet to hardware so a guest reservation is not overrun (#1748) by @mattias800 in #1760
- feat(videoout): implement sceVideoOutWaitVblank instead of returning immediately by @mattias800 in #1757
- docs(orchestration): instrument trap 52 — a counter-arm that makes tests SKIP rather than fail by @mattias800 in #1766
- review: PROSPER_SHARPLOG follow-up — identity on every line, reason-keyed dedupe, correct EUD predicate by @mattias800 in #1762
- feat(input): name the touch-pad button so a route can press it by @mattias800 in #1764
- diag(gpu): the #1226 init is NOT the first half — measure block ownership at both writes by @mattias800 in #1767
- test(videoout): make the WaitVblank PHASE check measurable, not a coin flip by @mattias800 in #1771
- diag(gpu): name the mapping behind residue in a rejected descriptor, and correct the #1590 diagnosis by @mattias800 in #1772
- feat(earthion): route past the intro — rung 2, and the "missing picture" was a black text page by @mattias800 in #1775
- feat(agc): audit every builder's packet size, answer 22 more GetSize, and land the probe that finds the rest (#1756) by @mattias800 in #1769
- fix(gpu): DMA_DATA with a GDS destination selector was silently discarded (#1750) by @mattias800 in #1751
- fix(docs-check): a fence between a table and more rows is not a split (#1709) by @mattias800 in #1777
- fix(hle): bound PROSPER_DMEM_CALLER's stack walk to mapped memory by @mattias800 in #1778
- chore: ignore the local per-game launch scripts by @mattias800 in #1779
- test(hle): fix flaky dmem_caller_walk and make its stack-query check discriminate by @mattias800 in #1780
- fix(gpu): give every capped fence diagnostic an ordinal and a sparse tail by @mattias800 in #1781
- ci: publish Linux desktop release artifacts (AppImage + tarball) by @mattias800 in #1783
- fix(packaging): repair the dead glibc-ABI gate and harden the Linux release checks by @mattias800 in #1786
- fix(compute): stop submitting after Vulkan device loss by @mattias800 in #1787
- test(videoout): make vblank phase check deterministic by @mattias800 in #1795
- test(gpu): pin submit provenance identity contract by @mattias800 in #1794
- fix(tools): make periodic frame dumps opt-in by @mattias800 in #1789
- test(ampr): replace timing sleeps with causal event fences by @mattias800 in #1796
- fix(gpu-replay): register seed writers before raw replay by @mattias800 in #1797
- fix(recompiler): restore Syberia profile scene by @mattias800 in #1791
- test(snapshot): stabilize phase-variable content guards by @mattias800 in https://github.com/mattias800/p...
prosper v0.2.0
What's Changed
- gpu: advance UE scene resource and interpolant semantics by @mattias800 in #718
- diag(rtt): PROSPER_DUMP_SAMPLED_RTT — dump RTT-layer pixels a draw samples (#710/#320) by @mattias800 in #721
- tooling: add reviewed multi-frame gameplay guards by @mattias800 in #722
- gpu: execute UE4 volume-lighting compute chain by @mattias800 in #725
- Handoff: B2 macOS crash = render-path stray write to host g_eq_mx (latent on Linux) + diagnostics by @mattias800 in #724
- fix(host): correct AH/CH/DH/BH byte-register decode in the macOS fs-emu (testable core) by @mattias800 in #728
- fix(gpu): guard synchronous PM4 label writes with guest_readable by @mattias800 in #730
- fix(renderer): bound viewport-derived depth extents by @mattias800 in #731
- Initialize RDNA2 fragment position inputs by @mattias800 in #732
- perf(renderer): share repeated texture uploads per graphics span by @mattias800 in #733
- fix(hle): recover callback guest FS from saved stub slot by @mattias800 in #734
- perf(renderer): retain exact-validated texture images by @mattias800 in #735
- perf(gpu): retain validated guest mapping ranges by @mattias800 in #737
- perf(win): demand-page aligned direct memory by @mattias800 in #738
- perf(win): cache committed sparse direct pages by @mattias800 in #739
- perf(frontend): share rendered frame ownership by @mattias800 in #741
- fix(gpu_replay): read shared ordered frame by @mattias800 in #745
- perf(renderer): transfer persistent decode ownership by @mattias800 in #746
- perf(renderer): reuse same-submit texture validation by @mattias800 in #747
- tools(renderer): align backend timing to submits by @mattias800 in #748
- tools(renderer): add lightweight target timing by @mattias800 in #749
- tools(renderer): filter target timing by workload by @mattias800 in #751
- Fix recycled UE fence generations beyond thread caches by @mattias800 in #750
- perf(renderer): persist graphics pipelines by @mattias800 in #754
- Fix pixel-stage dynamic buffer resources by @mattias800 in #756
- perf(win): track guest writes for cross-submit texture reuse by @mattias800 in #758
- Fix pixel structured-buffer addressing by @mattias800 in #760
- tools(renderer): attribute target timing without log distortion by @mattias800 in #761
- Fix bound scalar fallback buffers by @mattias800 in #762
- Persist GPU color targets across render passes by @mattias800 in #764
- renderer: support paired MRT1 color output by @mattias800 in #765
- renderer: retain PC-relative shader tables in the cache by @mattias800 in #767
- renderer: resolve nested scalar buffers after lane spills by @mattias800 in #769
- hle: unblock Dead Cells level progression by @mattias800 in #766
- docs: record Dead Cells full-render progression by @mattias800 in #770
- Fix packed texture conversion with reused renderer scratch by @mattias800 in #771
- gpu: preserve DCC state for compressed Unreal textures by @mattias800 in #774
- gpu: capture DCC metadata surfaces by @mattias800 in #776
- renderer: preserve native FP16 render targets by @mattias800 in #778
- feat(shader): lower s_not_b64 wave masks by @mattias800 in #779
- renderer: invalidate stale CPU RTTs on guest GPU writes by @mattias800 in #782
- feat(shader): execute UE4 volume-lighting compute producer by @mattias800 in #783
- tools(gpu): add temporal lighting diagnostics by @mattias800 in #784
- feat(renderer): bridge live RTT snapshots into compute by @mattias800 in #785
- diag(gpu): PPSA02664 black-world method/diagnostics (FS_SPV_MATCH + RTGROUPS_RGBA) by @mattias800 in #757
- tools(gpu): isolate captured compute dispatches by @mattias800 in #786
- fix(gpu): emulate RDNA compute wave votes by @mattias800 in #788
- fix(renderer): publish uncompressed DCC storage writes by @mattias800 in #790
- fix(renderer): tolerate UE4 reverse-Z prepass drift by @mattias800 in #792
- fix(windows): deliver guest GC stops cooperatively by @mattias800 in #793
- fix(gpu): preserve recycled UE4 spill lanes by @mattias800 in #794
- fix(gpu): expose UE4 mixed sharp buffers by @mattias800 in #795
- fix(posix): preserve native static mutex behavior by @mattias800 in #801
- fix(gpu): preserve DCC refs in capture bundles by @mattias800 in #802
- fix(windows): preserve short reads into sparse guest buffers by @mattias800 in #805
- fix(gpu): complete forced ordered captures by @mattias800 in #809
- fix(windows): guard service-log pointer dumps by @mattias800 in #807
- feat(gpu): sample Float32 compute images by @mattias800 in #811
- fix(gpu): capture packed image DCC metadata by @mattias800 in #813
- fix(gpu): materialize RGB DCC fast clears by @mattias800 in #816
- fix(compute): enable cached tiled image writeback by @mattias800 in #798
- docs: require independent agent PR review by @mattias800 in #814
- fix(service): fault-contain pointer logging by @mattias800 in #815
- fix(windows): register frontend init stacks by @mattias800 in #820
- fix(windows): preserve pthread key destructor semantics by @mattias800 in #818
- tools(hle): attribute unresolved Windows callers by @mattias800 in #804
- tools(sync): attribute delayed Windows traces by @mattias800 in #803
- test: harden route-aware gameplay snapshot guards by @mattias800 in #822
- fix: bring Evergate to gameplay on Linux and Windows by @mattias800 in #808
- docs: clarify independent verification policy by @mattias800 in #824
- fix(gpu): honor AGC dispatch dimension mode by @mattias800 in #796
- fix(service): preserve 64-bit diagnostic words by @mattias800 in #826
- fix(service): preserve 64-bit diagnostic arguments by @mattias800 in #828
- tools(app): add timed Windows guest-thread checkpoints by @mattias800 in #797
- docs: keep review approval across base sync by @mattias800 in #829
- docs: add AMD RDNA 2 ISA reference by @mattias800 in #830
- docs: link RDNA 2 ISA PDF directly by @mattias800 in #831
- fix(gpu): execute address-backed DMA_DATA copies by @mattias800 in #832
- fix(snapshot): terminate game when harness dies by @mattias800 in #834
- fix(gpu_replay): use selected draw output extent by @mattias800 in #835
- fix(recompiler): avoid signed float conversion on Metal by @mattias800 in #836
- feat(gpu_capture): replay ordered DMA operations by @mattias800 in #838
- Boot Astro Bot to its loading screen (#825) by @mattias800 in #837
- Advance Astro Bot through title and world-map flow (#825) by @mattias800 in #842
- feat(avplayer): add native Windows video decoding by @mattias800 in https://github.com/...
prosper v0.1.0
What's Changed
- agc: break the graphics boot blocker — real sceAgcCreateShader + shader-derived pipeline state by @mattias800 in #1
- agc: first real command buffer executes — SubmitDcb → CommandProcessor by @mattias800 in #2
- diag: PROSPER_PEEK fault-time field dump + pin the next frontier by @mattias800 in #3
- test: lock in the AGC submit milestone (Dcb → SubmitDcb → GpuState) by @mattias800 in #4
- Fix AGC/SPIR-V review findings by @mattias800 in #5
- diag(RE): 0xba6e08 is a Unity pipeline object — resource-creation premise needs revisiting by @mattias800 in #6
- Improve MinGW Windows portability by @mattias800 in #7
- diag(RE): bounded trace answer — 0xba6e08 pipeline object is Unity-internal (no HLE hook) by @mattias800 in #8
- gpu: resolve_pipeline_state — RenderState (RDNA2) -> Vulkan-ready pipeline state by @mattias800 in #10
- fix: reject graphics cmpx without export predication by @mattias800 in #12
- Add Linux and Windows CI by @mattias800 in #9
- videoout: real 1080p60 display + swapchain scaffolding (+ hypothesis: not the [+0x140] gate) by @mattias800 in #11
- RE: [+0x140] companion writer chain → pipeline-reflection predicate (root cause narrowed) by @mattias800 in #13
- RE probe: shader semantics surfaced correctly — mis-relocation bet rejected (raw blob evidence) by @mattias800 in #14
- diag: trace shader user-data bindings by @mattias800 in #15
- diag: skip-null-companion probe — systemic (residency pass never ran), stop per-object writer hunt by @mattias800 in #16
- recompiler: reject unsafe forward scalar branches by @mattias800 in #17
- diag: null-chain probe — GfxDevice subsystem systematically dead (option b), not a narrow gap by @mattias800 in #18
- videoout: preserve submitted flip and buffer state by @mattias800 in #19
- diag: preserve companion watchpoint result by @mattias800 in #21
- videoout: flip→present path over the display-buffer registry (headless scanout) by @mattias800 in #22
- hle: reduce startup stubs — UserService getters + libkernel no-ops (audit) by @mattias800 in #23
- videoout: present receiving side — present_write_frame closes render→present→readback by @mattias800 in #24
- gpu: build_shader_resources — V# decode + constant-buffer table (resource-binding stage 1) by @mattias800 in #25
- gpu: build_shader_resources stage 2 — vertex buffers (DIRECT sgpr_base provenance) by @mattias800 in #26
- Audio support: headless sceAudioOut HLE + optional SDL3 frontend by @mattias800 in #28
- feat(pad): real game-controller input (libScePad) via Linux evdev by @mattias800 in #27
- feat(gpu): real game frames — The Messenger's title renders with the game's own shaders by @mattias800 in #33
- Unblock cutscene-scene loading: ParamGetString + %fs stack-smash fixes (+ map the remaining GC-race wall) by @mattias800 in #35
- fix(gpu): loading screen rendered upside down — honor the guest viewport (PA_CL_VPORT) by @mattias800 in #38
- fix(hle): full pread/read (asset-stream corruption) + deepened cutscene-wall findings by @mattias800 in #39
- Fix %fs stack-smash in fault_handler + pin the cutscene wall to incremental-GC live-object collection by @mattias800 in #36
- diag: cutscene blocker pinned to IL2CPP GC "Unexpected state" abort (findings + tooling) by @mattias800 in #37
- feat(gpu): multi-draw executor + backend (opt-in), on the per-draw snapshot foundation by @mattias800 in #34
- Fix the level1 (cutscene) load crash — GC allocation lock never locked by @mattias800 in #42
- diag: PROSPER_GUEST_ENV (guest GC env knobs) + GC-collection-is-not-the-sole-blocker finding by @mattias800 in #40
- diag(cutscene): pinned to a null System.Diagnostics.Stopwatch in Unity's async-load WorkerThread by @mattias800 in #43
- fix(gc-suspend): guest-%fs cancellation-point landmine + post-#43 cutscene findings by @mattias800 in #44
- docs(cutscene): tested-and-eliminated hypotheses for the WorkerThread.+0x40 Stopwatch crash by @mattias800 in #45
- diag(cutscene): crash → streams 80% of the cutscene; final blocker = block-966 deser deadlock by @mattias800 in #46
- feat(ue4): PPSA17942 boots deep into UE4 engine init — SELF variant, real direct-memory model, sceKernelBatchMap, boot API surface by @mattias800 in #47
- diag(cutscene): block-966 deadlock = type-tree-less il2cpp MonoBehaviour deser (InventoryItemDefinition) by @mattias800 in #48
- feat(ue4): allocator pool-view aliasing SOLVED + fault-handler raw-write fix + libSceAmpr trio — UE error handling now runs by @mattias800 in #49
- diag(cutscene): refine the block-966 wall to a deterministic 3-object deser loop by @mattias800 in #50
- diag(cutscene): map both remaining blockers — uncaptured color render-state + variable deser/threading by @mattias800 in #51
- fix(diag): bound PREADLOG/DEEPTRACE stack walk to the thread stack (was faulting worker threads) by @mattias800 in #52
- fix(gpu): render the color state — absent CB_TARGET_MASK defaults to write-all (fixes the blue screen) by @mattias800 in #53
- Load PSN.prx so the async worker pool runs — cutscene load/threading wall solved by @mattias800 in #54
- fix(gpu/recompiler): handle forward s_cbranch_scc0 early-out — unblocks in-game scene shaders by @mattias800 in #55
- feat(ue4): APR/IoStore read pipeline — engine reads and parses its asset TOC by @mattias800 in #57
- diag(cutscene): SCENE REACHED (level0-5 boot-through); final blocker = scene-content render-target by @mattias800 in #56
- fix(gpu/recompiler): recompile the in-game scene shaders (alpha-test discard PS + NGG vccnz VS + v_dot2c) by @mattias800 in #58
- fix(render): bound texture/buffer copies to committed backing — render no longer crashes reaching the scene by @mattias800 in #59
- fix(gpu/exec): render the mesh's real vertex count (draws were a degenerate sliver) by @mattias800 in #60
- Full-history bug hunt: 18 verified fixes from a 405-commit review by @mattias800 in #61
- docs(claude): GitHub-issues workflow — file found-but-unfixed bugs immediately by @mattias800 in #74
- docs: cutscene render frontier — status, traced root cause, next step by @mattias800 in #73
- fix(gpu): RELEASE_MEM stops guess-writing on unknown data_sel; WaitRegMem carries and verifies its real wait parameters by @mattias800 in #75
- fix(hle/apr): safe size-keyed APR reads — refuse ambiguous/chunk reads loudly by @mattias800 in #76
- fix(hle/kernel): purge __tls_get_addr DTV on thread exit (stale TLS on recycled ids + leak) by @mattias800 in #77
- fix(gpu): decode R_DRAW_INDEX so sceAgcDcbDrawIndex draws reach the draw list by @mattias800 in #80
- fix(hle/equeue): shared-ptr lifetime, real timeout semantics, kqueue coalescing, cancellable timers by @mattias800 in #81
- fix(hle/videoout): flip-status race, time-based vblank counter, loud GetOutputStatus gap by @mattias800 in #84
- feat(ue4): IoStore bring-up — pak containers mount, GEngineLoop.PreInit passes, engine reaches RHI init by @mattias800 in #78
- docs(claude): issue-claim protocol for concurrent agents; Kyty reference calibration by @mattias800 in #85
- fix(hle/kernel): scePthreadOnce serializes per control (global lock could cross-deadlock) by @mattias800 in #86
- fix(gpu): decode the T#'s real Gen5 IMG_FMT — texture format/size no longer hardcoded RGBA8 by @mattias800 in #87
- Real indexed draws in the executor; retire the quad-fan heuristic (Fixes #64) by @...