737 KiB
Eden Encore — Project Memory
Continuity file for work on
niakw/Prospero.Eden-Encore. Read this file before changing architecture, UX, build/release behaviour or performance policy. Keep it concise but authoritative. Update it whenever a project-level decision changes.
Latest verified status — 14 October 2026 (pre-test source audit)
Pre-test diagnostics and FPS policy (14 October, follow-up)
-
The visible FPS overlay defaults OFF in both runtime preference models, and the persisted override remains user-owned;
tools/check-encore-ux.pyasserts the fresh-install/default and saved-setting contracts. -
Opt-in network audit now records
epoch,utc=YYYY-MM-DDTHH:MM:SS.mmmZ, andmono_nsfor each stored event and every grouped DNS-denied summary; summarycountdescribes events skipped but does not timestamp them separately. -
Legacy audit compatibility tested against
network-accepted(6).log: 3,624/3,624 valid rows, 1,291 historical summaries previously misclassified as malformed, representing 17,564 bundled denial attempts. No DNS block/allow behavior or traffic payload handling changed. -
Each title session records a source-SHA and UTC↔monotonic
EDEN_TIME_ANCHOR, and each five-second detailed GPU diagnostic window refreshes the anchor. Routine third-party driver log lines are not all individually clock-stamped; claims of universal per-line timestamps would be inaccurate. This avoids syscall/format overhead per draw and preserves bounded asynchronous sink behavior. -
Re-run source preflight and native All-On package on a single SHA after the new audit changes before inviting the next hardware test. Neither source tests nor the new log timestamps establish FC27 frame pacing or end-of-match stability. See
docs/PRETEST_AUDIT_2026-10-14.md. -
Only active remote branch:
dev/ps5-sparse-jit(verified via GitHub branches API). The historical release branch mentioned below is no longer a remote branch; all historical sections are retained for audit only. The local Mac worktree was not inspected in this pass. -
Latest qualified native test package: Actions 38587429272, SHA
b5f0301a31cef17f70a8c4e19484d2fb638daa17, success; package ZIP and debug-symbol artifact uploaded and archive layout rechecked. Not the current branch tip after new UI/diagnostic commits. -
Source preflight: 38587774361 succeeded on
4e4a3cd2; new changes need separate gates before their next test package. -
Original device evidence:
2efd8b3c, cache cleared. Saccades, delayed HUD/texture updates, a guest jump to an unmapped address, and a long end-of-match candidate application-progression stall remain unresolved. Do not say a successful package fixes them. -
Current diagnostic improvements: per-session source SHA; offline analyzer splits multi-session logs; fatal guest invalid-branch records PC/LR/SP/FP; bounded asynchronous log segments and optional detailed profiling. They still do not provide a consistent wait-owner stack snapshot for every live thread or a pixel hash on a visual freeze.
-
Important unported upstream: original source #156 guest lazy backing and incremental executable-cache commitment are not shipping equivalents in Encore. Shared cross-core JIT remains deliberately OFF. Never equate
vendor/sourcesinventory with compiled feature parity. -
Read-first audit for next tester: docs/PRETEST_AUDIT_2026-10-14.md. The READMEs, SECURITY, third-party notices and LICENSES bundle exist. Retain every present
*.first.log,*.prev.log, and the native crash/symbol artifacts when collecting evidence. -
Remote GitHub is not the Mac: do not claim an audited local working-tree cleanup without access to that machine. Do not clear game save/shader caches in an unrequested cleanup.
The dated notes below describe historical work and may contain obsolete “current” status, old branch names, settings experiments or run conclusions. This section and the dedicated pre-test audit take precedence.
Repository / branch
- Repository:
niakw/Prospero.Eden-Encore - Remote release line:
fix/0.40-zbic-13.60(untouched); active GitHub-only PS5 test branch:dev/ps5-sparse-jit. Old local audit branches mentioned below are historical, not the current edit target. - PS5 title ID:
PPSA99008 - Current release line: Encore R1 / package
01.000.041 - Active Mac worktree:
/Users/admin/Downloads/Prospero.Eden-Encore-work(the former...-legal-passpath is no longer present). - Do not trigger a new CI run until the current local pass has been fully reviewed and all intended changes are covered by gates.
Working rules
- Execution-first: fix the repo, do not only describe changes.
- Do not restart a long native build unnecessarily.
- Do not claim a true Ninja resume unless the restored tree really preserves dependency timestamps/state.
- Before a push that triggers CI, inspect the full local diff, run all relevant gates, and scan for release
-Werrorissues such as dead constants/functions. - One coherent pass is preferred to repeated 30+ minute red builds.
- Keep
main/shipping branches clean; no automatic Brain-style proposal PR behaviour applies here. - Never silently change a user-visible profile name or established UX contract.
Latest CI history
-
#180 — run
37615269357— GREEN and last hardware-bootable reference before the #182 regression. -
#181 — run
37631564579— RED near the end of native compilation (~1591/1601).- Failure:
hero_coverbecame unused after the new hero design and release uses-Werror. - Fixed in the following release pass.
- Failure:
-
#182 — run
37660484879— CI GREEN on200db3485e85a14234e21973933865cf6f042ae4, but HARDWARE BROKEN.- PS5 FW 13.60 crash before the launcher/KStuff pause:
0xa002030aSYSTEM_ILLEGAL_FUNCTION_CALL- thread
eboot.bin
- Reinstall + console reboot did not help.
- Root cause isolated with high confidence to the new startup
statfs("/user")path inPs5ConsoleStorage().
- PS5 FW 13.60 crash before the launcher/KStuff pause:
-
#183 — run
37669275608— FAILED EARLY before compilation on hotfix commit97e92f01396545ecff8f7f4a55154dfa9894844f.- The actual startup/filesystem/storage/legacy/video gates all passed.
check-encore-ux.pythen false-positive failed because it searched the literal textstatfs(in comments as well as executable code.- No native compile started; the run did not waste another full build.
- The full ~2.86 GB cache from #182 restored successfully from key
...-37660484879. - Local fix strips C/C++ comments before asserting that executable
eden_services.cppcontains no directstatfs/statvfscalls. - The underlying boot hotfix remains unchanged: direct PS5
statfs/statvfswas removed and the previously boot-provenstd::filesystem::space(Eden::AssetsDir(), error)path restored.
-
CI-green is not sufficient for startup-sensitive PS5 changes: a hardware boot on FW 13.60 is a mandatory release gate.
-
#184 — run
37670172143— FAILED EARLY before compilation onf5d2015337eb5fd7fbf3895133926f9819120f58.- Metadata preflight passed.
- License/SFX gate rejected the historical continuity file because it contained the literal name of the removed audio service.
- This was documentary only; no package/audio regression and no native compile started.
- The #182 ~2.86 GB cache restored successfully again.
Build / cache policy
The old workflow restored caches but still appeared to rebuild from 1/N because:
tools/build-headless-native.shtouched every fork-owned launcher source on every run.- Git checkout mtimes make restored Ninja trees look stale.
- GitHub Actions rejects cache paths containing
../....
Local WIP replaces the global touch with a content-hash + mtime manifest:
- unchanged tracked headless sources recover their cached mtime;
- changed sources keep their fresh mtime;
- Ninja decides incrementally as intended.
Current local cache fix:
- all invalid
../...entries are removed fromactions/cache; - the five heavy sibling repositories live physically under cacheable
.deps/repos/; tools/ci/link-sibling-deps.shrecreates the historical../repo-namepaths as symlinks for existing scripts;- the native build replaces the old global source
touchwith a content-hash/mtime manifest so unchanged fork files retain cached timestamps; - staged-app resume remains available when a staged app artifact exists.
The first run after introducing the mtime manifest cannot recover timestamps from a manifest that did not exist yet, but the expensive sibling repository/build outputs are immediately cacheable through .deps.
Release / FTP
Canonical release keeps legal material:
- full ZIP
- FFPFSC
LICENSES/legal/
A separate manual FTP archive is generated:
Prospero.Eden-Encore-R1-FTP.zip- contains runtime
PPSA99008/only - omits installed
legal/and ShadowMount-onlyui/lang/*.txt - canonical
.pocatalogs remain - FileZilla should use Binary transfer mode because the PS5 FTP server rejects ASCII
STOR.
Launcher UX direction
Target: clean modern console UI, inspired by a hypothetical next-generation console shell without branding it as Switch.
Top navigation
Global top tabs:
- Home
- Library
- Recently played
- Settings
Expected navigation:
- from Library / Settings, Up can focus the top navigation;
- Left/Right moves between top tabs;
- Down or Circle returns to screen content;
- Cross opens the selected tab.
- Do not require Circle just to move back into the global menu when arrows should naturally work.
Home quick settings
Important distinction:
- Cross to enter Quick Settings is intentional and should remain.
- While only highlighting the Quick Settings tile (not entered), Left must return to the neighbouring hero actions.
- Do not make the highlighted Quick Settings tile a horizontal navigation trap.
Hero
The current shipped/green design was not acceptable:
- old square game cover looked like a legacy icon pasted into the hero;
- a dark rectangular plate was visually obvious.
Desired hero:
- real 16:9 banner first;
- gameplay screenshot fallback second;
- never promote the square ROM icon to the large TV hero;
- if no rich media exists, keep the shared backdrop + soft readability gradient rather than a giant cover block;
- text overlays the hero with a natural fade, not a dark card rectangle.
Media fallback order:
Nlib banner -> Nlib gameplay screenshot -> neutral/shared backdrop.
Nlib media
Observed on PS5 logs before the local fix:
icon=0 hero=0 screens=0 players=0for Zelda, FC27 and another title.- Nlib itself is healthy from the Mac.
- Cloudflare returns 403 to an anonymous/default client but succeeds with an explicit User-Agent.
- PS5 homebrew also has no normal Unix CA store.
Current local network solution:
- explicit
User-Agent: Prospero.Eden-Encore/1; Accept: */*;- keep TLS certificate verification enabled;
- enable Eden's existing
YUZU_BUNDLED_OPENSSLpath on PS5; - reconstruct Eden's own complete pinned OpenSSL CA bundle from
.patch/openssl/0001-add-bundled-cert.patchinto the native OpenSSL include tree. - local materializer test produced 147 CA certificates from the exact pinned Eden patch.
Do not replace this with a service-specific certificate or disable TLS verification.
Storage
The original UX problem remains: std::filesystem::space(Eden::AssetsDir()) may expose only the selected Encore filesystem view (for example ~64 GB), so it must not be labelled as the physical PS5 SSD.
The attempted replacement in #182 was not safe:
Ps5ConsoleStorage()called libcstatfs("/user"), then/system_dataand/system_ex;Launcher::Launcher() -> read_home() -> services_.diagnostics()executes this synchronously before the first UI frame;- on real FW 13.60 hardware, #182 immediately crashed with
0xa002030a SYSTEM_ILLEGAL_FUNCTION_CALL.
Current safety rule:
- do not call direct libc
statfs/statvfson the startup path unless independently proven on FW 13.60 hardware; - hotfix #183 deliberately falls back to the already boot-proven
std::filesystem::space(Eden::AssetsDir(), error); - UI wording must describe this as the selected/storage-root capacity, not as the physical console SSD;
- if real console-wide capacity is reintroduced later, use a PS5-specific API/path that has been isolated and hardware-proven first;
- keep used / total consistent with a used-capacity bar and keep free space available in Diagnostics.
Video profiles
User-facing profiles:
- Minimum
- Recommended
- High
- Ultra
- Custom (derived, not authored)
Profiles are title-aware through the generated Encore overrides database. Manual edits produce Custom.
Current generated FC27 title ID:
0100C49025D3E000
Important:
- a Custom profile must not silently force a heavy hidden runtime policy.
- Runtime policy should be derived from the effective settings/tier when Custom.
Performance settings — automatic policy
ProsperoEden master exposes seven real runtime performance switches:
block_list— compile aheadasync_shadersfast_gpuunsafe_cpuunsafe_dmareactive_flushingskip_invalidation
Encore must account for all seven.
Critical rule
There is no manual “validated game” requirement. There are far too many games. The system must work generically.
Use:
- authored tier/profile;
- effective video/runtime cost;
- runtime telemetry/history when safe and available;
- optional title-specific database exceptions as hints, not as a prerequisite.
A game without a special database entry must still receive a complete automatic performance policy.
Safety philosophy
The profile system owns complexity; the normal user should not need to understand seven emulator internals.
Suggested generic policy direction:
- Recommended: conservative stability-first defaults, with low-risk stutter improvements where supported.
- Minimum: favour speed more aggressively.
- High / Ultra: favour correctness/image quality over risky speed hacks.
- Custom: derive an appropriate runtime tier from effective settings rather than becoming implicitly “High”.
Riskier flags must have a generic policy; do not require hand-testing every title.
Current generic hidden policy:
- Minimum: async shaders ON, fast GPU ON; unsafe CPU/DMA OFF; reactive flushing ON; skip invalidation OFF.
- Recommended: async shaders ON, fast GPU OFF; unsafe CPU/DMA OFF; reactive flushing ON; skip invalidation OFF.
- High: async shaders OFF, fast GPU OFF; unsafe CPU/DMA OFF; reactive flushing ON; skip invalidation OFF.
- Ultra: async shaders OFF, fast GPU OFF; unsafe CPU/DMA OFF; reactive flushing ON; skip invalidation OFF.
- Compile ahead is owned by the policy but remains OFF in shipping because the current shipping architecture does not compile the shared-JIT path it requires.
- Safe Launch uses the conservative Recommended hidden policy even though it lowers visible render cost.
Compile ahead / FC27
FC27 previously showed JIT pressure with saved-block compile-ahead:
- saved block list occupied a large part of JIT regions at boot;
EDEN_JIT_PRESSUREand long stalls followed.
Current Encore shipping policy had therefore forced compile-ahead off. Do not re-enable it blindly.
If compile-ahead becomes automatic, use a generic adaptive rule based on saved-list/JIT pressure/history and disable it automatically when pressure thresholds are exceeded. No manual title validation.
FC27 performance / freezes
Observed on PS5:
- FPS presentation can remain at exactly ~30 while the visible game is frozen.
- Vulkan continues submitting/presenting.
- no clear RADV crash;
- no demonstrated OOM for the latest freeze;
- guest cores spend substantial time in synchronization/IPC waits such as:
WaitProcessWideKeyAtomic (0x1C)SendSyncRequest (0x21)SleepThread (0x0B)
Conclusion:
- large FC27 freeze is not fixed yet;
- do not claim it is fixed by graphics-profile tuning;
- low-cost Custom runtime policy can reduce stutters but is a separate issue.
Do not add an automatic game-kill/restart on the current signal alone: a legitimate paused/loading game could look similar. Need a stronger progress signal before recovery logic.
FC27 PlayStation glyphs
Current state:
- physical DualSense mapping can be PlayStation-style and function correctly;
- the Switch build of FC27 still renders Switch A/B/X/Y graphics.
Reason:
- the guest sees an emulated Switch Npad/Pro Controller;
- the button images are game UI assets, not generated by the host controller mapping.
Therefore:
- mapping alone cannot turn A/B/X/Y art into Cross/Circle/Square/Triangle;
- a true fix needs a game/UI texture replacement or patch path.
- Do not claim controller-type remapping alone solves visual glyphs.
Controller profiles
Desired global modes:
- PlayStation (default)
- Switch
- Custom PS5
- Custom Switch
PlayStation mode:
- native-feeling DualSense semantics;
- visual launcher glyphs are PlayStation;
- game-internal glyph replacement is separate.
Keep support for game-requested controller/grip semantics without changing how the user physically holds the DualSense. Local WIP includes horizontal single-Joy-Con logical rotation tests; review before next push.
PS5 system overlay artwork
Observed on the #182 package:
- Encore's icon/logo is visible in the normal PS5 app/library list;
- the PlayStation system overlay for the running application does not show the expected Encore logo.
Treat this as a separate package/presentation issue from the boot crash.
Investigate sce_sys / package metadata and overlay-specific artwork requirements only after the eboot is hardware-bootable again.
Do not mix an unproven artwork/package experiment into a startup hotfix.
Legal / SFX
Release has been hardened:
- original deterministic procedural launcher SFX, no external generated-audio service dependency;
- legal bundle / third-party notices included;
- exact license gate exists;
- do not claim absolute legal certainty; say materially hardened / notices bundled.
Current local / remote state after #182
- Local Mac repo:
/Users/admin/Downloads/Prospero.Eden-Encore-legal-pass. - Local branch and GitHub branch are both at hotfix commit
97e92f01396545ecff8f7f4a55154dfa9894844f. - The pre-#182 WIP set (cache layout, bundled CA, performance policy, hero cleanup, CI gates, etc.) is already part of the pushed history; it is no longer hidden local WIP.
- Local working tree is clean except this richer
MEMORY.mdcontinuity file while #183 is running. - #182 saved ~2.86 GB of compatible GitHub Actions cache data after staging. #183 is expected to restore that cache through the workflow prefix restore key rather than intentionally starting from a clean native tree.
- Do not create extra pushes while #183 is running unless a new defect is certain; the workflow concurrency policy can cancel useful work.
Deliberately excluded from this release lot:
- experimental horizontal single-Joy-Con rotation;
- connected-controller count as a fake fallback for a game's maximum player count.
Gates before the next CI run
At minimum:
git diff --check- launcher/string catalogs check
- language runtime contract
- video preset contract
- Encore UX/media/profile contract
- JIT stability contract
- performance-policy contract covering all seven master settings
- controller/device checks
- storage/startup/filesystem contracts
- legal/license/SFX gate
- release metadata gate
- shell syntax for modified build/backport scripts
- scan modified C/C++ files for unused local constants/functions likely to fail under
-Werror - validate every patch applies to the pinned upstream commit
Only then push and allow CI to run.
For startup/runtime-affecting changes, add one more release gate after CI: boot the produced artifact on real PS5 FW 13.60 and reach the launcher before calling the release validated.
2026-10-08 Eden Encore post-#186 no-build audit checkpoint
User requirement: NO application build, no GitHub push, no CI dispatch until explicit user OK. Current shipping PS5 build is #186 at HEAD 149df7a (it boots, FC27 still stalls/freezes, Home/overlay metadata defects remain). Local work only on local/no-build-polish at /Users/admin/Downloads/Prospero.Eden-Encore-work.
Changes prepared locally but not compiled into a PS5 binary or hardware-tested:
- Home rebuilt to follow the approved wide-cinematic TV mockup with violet/rose branding, full-width banner, recently played rail, four utility cards, quick settings as overlay, corrected per-game player capacity vs connected DualSense count, opaque neutral fallback when Nlib has no game art, and no invented console-wide SSD capacity. Cached game list is local and Nlib fetch is targeted; per-title cache writes serialized.
- Native host networking: explicit
sceNetInit, a sceNetResolver-based IPv4getaddrinfoand friends (SDK imports can point to unloaded libScePosixForWebKit), dropped Mihawk RADV DNS EAI_FAIL stubs, socketfcntlwrapper using PS5 SO_NBIO, bundled CA + TLS verification intact, observable HTTP errors. Ref: ps5-native-app-boilerplate console_curl.c and docs/CURL.md. FC27 Nlib Mac returns 16:9 banner, 5 screenshots, 4 players; PS5 #186 returns zero media. PS5 network fix is unproven pending next hardware test. - Log policy: global detailed Debug disabled for normal release; circular Eden logs bounded at 8 MiB segments; stderr/heap rotated to 8 MiB and previous-session files pruned. User explicitly requests max size and automatic cleanup.
- Release Dynarmic entry/exit CPU sampling and release watchdog removed from hot path; diagnostic mode retains probes. Test
check-performance.pynow expects 0 release SampleCpu calls, but its generated cached source predates this change and cannot be validated until user authorizes regeneration/build. - Worker topology probe forces a scheduling point before x2APIC, resets old state, supports fallback and verified pinning. FC27 #186 logs
ready=0 distinct_cores=1, all workers allowed on 13 CPUs; correction hardware unproven. - Candidate HLE patches: dummy host-thread queue safety, ServiceManager host-wait / lazy audio initialization matched to Citron commits (f07609c..., c5b716..., 21813e8...), Dynarmic cross-core I-cache invalidation. All patches dry-run on exact pinned Eden; causal tie to FC27 soft-freeze unproven. Requalify separately in hardware A/B.
- Logo overlay: current /user/appmeta/PPSA99008 has icon0.png but not icon0.dds, while PS5 installed apps have icon0.dds size 262292. Local icon0.dds matches size and DDS header of observed asset. This is stronger evidence, not a guaranteed overlay fix.
- FC27 #186 actual hardware: Minimum/Vulkan/1080p/0.75x/FSR/AA off; significant 1.38s frame gap, median ~30 FPS, guest cores wait in SleepThread/WaitProcessWideKeyAtomic/IPC while Vulkan presents; raw RADV submit costs relatively small, so suspect CPU/HLE scheduling path; no demonstrated definitive root cause, GPU not ruled out. 30->60 via frame-gen should be separate later; Eden LSFG code depends on proprietary Lossless.dll shaders and is not redistributable as-is.
- RADV/Mesa pinned commit 0b2d6d... has same tree hash as later 504adad...: major shader cache/threaded recording gains already present, cannot promise performance from updating pin. OpenGL remains A/B alternative.
Local static contracts confirmed PASS: check-network-runtime, check-home-media, check-bounded-logs, check-release-hotpath, check-sm-host-wait, check-dummy-thread-waits, check-dynarmic-icache, check-exclusive-monitor (200k contention), check-worker-topology, check-worker-affinity (native C++ sanitizer harness with SDKROOT=MacOSX26.5.sdk), check-gpu-producer-stop (same SDKROOT), check-performance-policy, check-video-presets, check-encore-ux, check-startup-contract, check-licenses (64/20), check-release-metadata, git diff --check, bash -n all modified shell scripts. Four new backports apply to pinned Eden in patch --dry-run.
Broad 45-script sweep produced 11 failures: some require unavailable clang++-18 / llvm-nm-18 on Mac, two standalone data analyzers require input paths, one GPU producer harness needed SDKROOT=MacOSX26.5.sdk (subsequently PASS), check-game-capture-shutdown.py was obsolete and updated (PASS), and check-performance.py references stale generated code from #186 so cannot pass until regeneration; it now expects no release instrumentation. Distinguish tooling/unrun gates from actual source failures. Do not claim all 45 tests PASS.
Remaining before asking approval for one incremental CI build: finish code review of all WIP C/C++ and overlay packaging, restore reliable test coverage without masking true errors, run all feasible non-app-build gates, verify no unintentional branch/commit/push, consolidate release-vs-experimental fixes (keep inline exclusives and RADV threaded recording OFF initially), give honest final audit with unverified items and exact hardware test matrix. A GREEN CI build will still not be called PS5 validated until user boots it on firmware 13.60 and tests Nlib/artwork + FC27 long soak.
2026-10-08 follow-on static integration review (no application build)
- Mac connection transiently timed out, recovered. Repo remains
local/no-build-polish, HEAD149df7a; no commits pushed, workflows triggered or app builds run. - Found a real compiler error in
headless/ps5_net_compat.c:getnameinfo()usedsize_tfor the output lengths where the platform headers declaresocklen_t. Corrected signature. Localclang -std=c11 -Wall -Wextra -Werror -fsyntax-onlynow PASS with SDKROOT MacOSX26.5. - Added host-only C sanitizer harness
tools/check-ps5-net-unit.pyexercising the actual compatibility implementation with mockedsceNetResolver: IPv4 DNS, numeric addresses, service port, invalid/unsupported names, cleanup andSO_NBIOF_SETFL/F_GETFL via wrapped fcntl. AddressSanitizer/UBSan PASS. This is NOT proof of PS5 internet connectivity or TLS handshake. - Fixed known
fcntlvarargs UB for F_SETFL/F_SETFD by reading the promotedintargument, instead ofintptr_t. - Native PS5 linking invokes
tools/link-headless-native.shin two passes. Added explicit--wrap=fcntlthere rather than trusting the CMake link flag alone. Contracttools/check-network-runtime.pynow guards both first/final native link passes and required flag. - The
eden-dummy-thread-waits.patchchangesKLightLockwait-queue lifetime. Audit discoveredClearWaitQueue()can occur withThreadState::Waiting, whileKThread::NotifyAvailable()andCancelWait()can dereferencem_wait_queuewithout a null guard. Therefore it is UNQUALIFIED and is now optional only withEDEN_EXPERIMENTAL_DUMMY_THREAD_WAITS=ON; default OFF. - Separate Dynarmic cross-core I-cache coherence patch remains behind
EDEN_EXPERIMENTAL_ICACHE_COHERENCE=ON(default OFF), as it is not proven to cause FC27 freeze. - Added
tools/check-ps5-backport-policy.pyverifying both experimental defaults stay OFF. Static patch-application tests alone are not proof of runtime correctness. - Rechecked real local
assets/icon0.dds: 262,292 bytes, DDS DX10, 512x512 BC7. Packaging copies it intosce_sys/icon0.dds, release metadata and staged-app gates require matching bytes. Presence/format are proven locally; PS5 overlay behavior still needs hardware. - Latest quick checks PASS: net compatibility C syntax, host sanitizer DNS+SO_NBIO harness, network link contract, experimental policy, Home media, log policy, Encore UX, release metadata, legal/SFX, modified shell syntax and
git diff --check. - No build or hardware results obtained. User approval remains necessary before any compiling/staging of PS5 application or CI push.
2026-10-08 resumed integration pass on active Mac worktree
- Confirmed real repo is
/Users/admin/Downloads/Prospero.Eden-Encore-work, branchlocal/no-build-polish, HEAD149df7a97ffb200841eb3f680ed61a5384c26a39. The earlier...-legal-passdirectory no longer exists. All existing 48 modified/untracked files retained. NO app build, push, commit, merge or CI dispatch. - Detected a real Home compile regression:
draw_home()still calledmeasure(chip, 18.0f)after the localmeasurelambda had been deleted. Replaced it with existingtext_width(c, chip, 18.0f); verified its signature inwidgets.hpp. This is a static source correction, not a PS5 compilation result. - Home navigation: first utility (Quick Settings) now returns Left to hero/details instead of wrapping to the last utility. Adjusted legacy controller-artwork coordinates so they would not overlap the 506px player-capacity chip if that auxiliary draw routine is wired in later; currently
draw_controllers()has no call sites, so do not claim visible icon changes. Strengthened UX contract checks. - Native PS5
__wrap_fcntlwas still readingF_DUPFD's promoted int asintptr_tviava_arg; this is undefined behavior andLogPipe::Attach()usesfcntl(fd, F_DUPFD, 3). Fixed and added a host sanitizer pass-through regression. This supplements the earlier F_SETFL/F_SETFD varargs fix. - DNS shim now rejects malformed/negative/overflowing/out-of-range service ports instead of silently making them port 0; explicitly supports standard
http/httpsservice names unlessAI_NUMERICSERV; rejects both node and service NULL; numeric getnameinfo now rejects undersized host/port buffers with EAI_OVERFLOW rather than returning silently truncated output. Added mocked ASAN/UBSAN cases including very long port numbers. - New local validation: clang C11
-Wall -Wextra -Werror -fsyntax-onlyfor ps5_net_compat.c PASS on Mac SDK;check-ps5-net-unit.pyPASS with ASAN/UBSAN (mocked native PS5 resolver, NOT hardware proof);check-encore-ux.py,check-home-media.py,check-network-runtime.py,check-ps5-backport-policy.py,check-bounded-logs.py,check-sm-host-wait.py,check-release-hotpath.py, modified shellbash -nandgit diff --checkPASS. - Expanded no-app-build gate sweep: 27 PASS out of 31 attempted; remaining 4 (
check-filesystem-probe,check-legacy-migration,check-storage-contract,check-tsc-fallback) did not execute becauseclang++-18is unavailable on this Mac. Do not report source-test failures for those, or assume that their Linux equivalent passes. Other gates still require dedicated inputs/Linux LLVM/native PS5 linker. - Hard outstanding release gates: audit/qualify default-on service-manager HLE backport against real PS5, native PS5 compilation/link, Nlib HTTPS/certificates/media on console, overlay icon0.dds behavior, image UI and controller interactions, 30fps frame pacing and FC27 stability/long soak. FC27 freeze cause still unproven; frame generation separate feature, not a freeze remedy. Explicit user OK is required before any PS5 app build/push/CI.
2026-10-08 log-rotation fault-injection and future CI gate
- Additional bounded-logging audit found
LogPipe::Drain()ignored a failedRotate(). If a native PS5ftruncate/seek or filesystem operation failed, it could keep appending beyond the cap. Corrected retry behavior: second segment falls back toopen(O_TRUNC)ifftruncate/seek fails; when rotation genuinely fails the pipe keeps draining without writing unbounded data, and the next chunk retries rotation. The initial rotation now restores the original log path if reopening the new segment fails. Runtime PS5 behavior unverified. - Added
tools/check-log-pipe-unit.py, a host-only C++ harness that forces ftruncate to return EINVAL and verifies two segment files stay bounded, earliest entries survive, most recent entries survive, andLogPipe::Detach()completes. PASS on Apple Clang with the macOS SDK. tools/check-ps5-net-unit.pyenhanced with boundary/overflow/error cases and portable Linux guards forsockaddr_in.sin_lenin the C shim; CI now calls both network sanitizer and log-pipe host micro-tests before native build. Clang selection uses Apple Clang on macOS (Homebrew clang-18/ASAN timed out once), clang-18 first on Linux. Linux execution is not proven until CI is authorized.- Re-ran unit tests and static gates: network ASAN/UBSAN PASS, bounded logging host fault-injection PASS, Home UX/media PASS, network contract PASS, logging contracts PASS, shell syntax PASS,
git diff --checkPASS. Latest local working set is 49 modified+untracked paths due to the new log unit test. No PS5 app build, Git commit, push or CI run.
2026-10-08 log-pipe handoff race follow-up
- A repeat of the real host log-pipe regression intermittently aborted on
fclose()afterDetach(). Review exposed an unsynchronized sharedfile_fd: the worker could close/replace it whileDetach()used it indup2. Added a mutex around worker rotation/write and the descriptor handoff.Detach()now first redirects the pipe writer under the lock (allowing EOF) and, after worker join, redirects to the final log segment. This is a source-level race repair; PS5 release remains untested. - Repeated the fault-injected host test 5 consecutive times: 5/5 PASS, preserving bounded first/recent segments and the final entry. Network ASAN/UBSAN test PASS and
git diff --checkPASS. More stress and the actual PS5 runtime are still pending. Forwarding through__real_fcntlnow preserves the promotedintargument type forF_DUPFD/F_SETFL/F_SETFDboth when decoding and when invoking.
2026-10-08 resumed post-#186 audit (second pass; pending release)
- User authorized conditional merge/CI only if confidence is complete after review/cleanup. Continue local checks; never interpret source-only success as PS5 validation. Active Mac repo still
Prospero.Eden-Encore-work, branchlocal/no-build-polish, base149df7a; no push/CI/app build triggered at this checkpoint. - Targeted actual PS5 Clang C++
-fsyntax-only -Werrorusing the cached native compile_commands discovered another real Home compile error:tr("Video") + " · "wasconst char* + const char[]. Corrected withstd::string{tr("Video")}. Target syntax then PASS: Home, Library, Launcher, Settings,eden_services.cpp,main.cpp,performance.cpp. The cached compile database pointed at an old/tmp/encore-audittree; prepended the current source include paths so tests examined current headers instead of silently testing old ones. - Targeted x86_64-sie-ps5 C syntax discovered the previous Mac-tested
getnameinfodeclaration still mismatched the PS5 Payload SDK: PS5 expectssize_t(vs Darwinsocklen_t) for host/service output sizes. Added conditional prototype matching the target; actual cross-targetclang-18 -fsyntax-only -Werrornow PASS. Mocked host resolver ASan/UBSan still PASS. - Applied the three new Eden patches to isolated temporary source copies from the exact cached Eden pin and verified PS5-targeted C++ syntax for patched
logging.cpp,audio_controller.cpp/SM header, andnet.cpp: all PASS. No source cache was modified. This does not prove final link/runtime behavior. - Identified potential self-recursive logging when
FS::IOFile::Flush,Open,SetSizelog a filesystem error duringFileBackend::RotatePs5(). Patched candidate now temporarily setsenabled=falsethroughout filesystem rotation and restores it after reopening/writing; patch regenerated with valid unified diff; dry-run applies; static guard added tocheck-bounded-logs.py. No hardware storage-failure injection yet. - Changed
eden-sm-host-wait.patchfrom default-on to optional only viaEDEN_EXPERIMENTAL_SM_HOST_WAIT=ON(default OFF). Dummy-thread-wait and Dynarmic I-cache proposals remain OFF. All 3 excluded from baseline until controlled A/B. Updated policy gate accordingly. - Updated Markdown sources README.md, SETTINGS.md, docs/BUILDING.md, docs/FORK_NOTES.md, MEMORY.md. New sections explicitly distinguish shipped hardware-tested #186 vs unbuilt local candidate, correct formerly overstated SSD capacity and detailed Debug logging descriptions, record test gaps and provisional observations. Release Notes section
## Changes in Encore R1left intact to preserve packaging extraction. - Outstanding: full Linux LLVM/preflight (especially clang++-18-specific harnesses), native PS5 link/package and real console startup, Nlib HTTPS, UI image/overlay and FC27 soak. FC27 freeze is not fixed and FPS presentation ≠ guest progress. No merge/CI should occur just because source-only syntax is green.
2026-10-08 FPS, freeze-triage and human attribution continuation
- User stressed that a significant FPS increase is valuable, and asked that authors/maintainers be named for every upstream repository in credits (including passion/open-source projects). Continue CPU/HLE freeze mitigation and performance research as independent tasks. No performance gain or frame interpolation is claimed to exist yet.
- Confirmed
headless/graphics.cppalready counts presented output frames and optional dev profiling logs GPU/JIT/HLE andEDEN_PERF_CPU_POINT. Host present FPS can remain 30 while FC27 guest is frozen, so do not use FPS alone to claim progress.headless/display_refresh.hcontrols presentation/requested refresh; 120 Hz is not native game 120 FPS. Existingheadless/dynarmic/jit_links.incperforms optional halt_reason checks for backward/self JIT links in wall-clock timing; it remains a hardware-unproven candidate, not evidence of a successful FC27 repair. - Created
docs/PERFORMANCE_ROADMAP.md: Stage A solve FC27 freeze by correlated guest-PC/CPU/GPU/HLE timing and single-variable A/B of three OFF-by-default experimental backports; Stage B measure and optimize native frame latency, only opt-in game-specific 60 FPS patches with validated physics; Stage C research Vulkan AMD FSR 3.1 / standalone optical-flow 30 genuine → 60 presented FPS, fully separate from emulation FPS and with strict VRAM, latency, HUD artifact and per-title fallback gates. No generation engine currently integrated into PS5 app. FSR 3 demands frame history/optical-flow/queue/pacing and UI handling and AMD recommends a faster-than-30-FPS input for low-latency results. - Added offline
tools/analyze-fc27-trace.pyparser ofEDEN_GAME_FRAME,EDEN_DEV_FRAME,EDEN_PERF_CPU_POINT,EDEN_DEV_HLE,EDEN_DEV_QUEUE; emits JSON or readable clues for long present gaps, hypothesized repeated PC spans, CPU-time delta and HLE costs. It explicitly refuses to claim gameplay liveness from FPS. Addedtools/check-fc27-trace.pysynthetic healthy/busy-loop/wait tests and installed gate into existing CI preflight; all PASS locally. No real PS5 trace analyzed in this continuation. - Verified upstream repo owners/maintainer identities via GitHub app. Updated all 28 README repository credits with author or maintainer/team identification, e.g., BlackBearReloaded, Mihawk, John Törnblom, Mitsunari Shigeo, Sean T. Barrett, Victor Zverovich, Behdad Esfahbod, Jean-loup Gailly, Mark Adler and Fabrice Bellard; organization/team entries remain collective; Citron HLE reference commits authored by
@HopeSuffers. Mirrored all 28 attributions intoTHIRD_PARTY_NOTICES.mdfor package-side legal text. Addedtools/check-credit-attribution.pyto validate perfect README/notices parity, wired into CI, andCONTRIBUTING.mdpolicy requiring source author identification on future integrations. Automated attributions and license checks PASS. Names are attribution, not sole-authorship assertions. - Updated README, SETTINGS.md, docs/FORK_NOTES.md, docs/BUILDING.md, docs/PERFORMANCE_ROADMAP.md, THIRD_PARTY_NOTICES.md, CONTRIBUTING.md and MEMORY.md; release notes
## Changes in Encore R1preserved. Source-gate sweep 30/30 PASS, legal/SFX metadata PASS, CI YAML PASS,git diff --checkPASS, checks include FC27 parser and credit parity. All controls local/source-only; graphics frame generation remains prospective. - The 2026-10-08 audited branch remains
local/no-build-polishrooted at149df7a, 61 modified/untracked paths currently, no native PS5 full app build, push, GitHub merge, CI run, or hardware PS5 test. User authorized merge/run only after exceptional confidence and cleanup; must not publish this as 100% qualified without real build/link and firmware 13.60 smoke/FC27 soak. Preserve local diffs and caches.
2026-10-08 CI red #37709145188 and staged-gate fix
- Local audited 61-file changes committed as
9c56ae2and fast-forward merged/pushed to default branchfix/0.40-zbic-13.60(notmain); first pushed workflow #37709145188 FAILED in Validate startup, elevation and storage contracts, before native compile. Previous startup/storage/network/JIT/log gates passed. - Error: new
tools/check-dummy-thread-waits.pyaccessed.local/headless-cachebefore GitHub runner ranmake prepare. The companioncheck-dynarmic-icache.pyhad identical assumption and would fail next. This is a fixture lifecycle bug, not PS5 code compilation. - Changed both checkers to always enforce source-patch invariants at early preflight, then defer exact source patch applicability when local
.local/headless-cacheis not present.--require-pinned-sourceexplicitly refuses deferred behavior. Added strict second-stage checks intools/build-headless-native.shafter pinned source is prepared and before native CMake/compile. Verified by temporarily hiding local cache record: both early policies PASS, strict missing source deliberately FAILS, restored pinned source strict checks PASS. - Restored the
.local/headless-cacherecord after the simulation. Do not rerun build #37709145188; commit/push the targeted fix and use new triggered run.
2026-10-08 CI red #37709504223: changed HTTP patch vs restored source cache
- Run #37709504223 at
d4a2b30FAILED inPrepare native build inputs(make prepare), before native compilation. Error:Backport changed; reset the Eden source cache: eden-ps5-net-user-agent.patch. Cached Eden source had receipt for initial network patch SHA-2567117c1c3...(UA+Accept only); revised patch added error reason to LOG_ERROR. - Added strictly gated migration for that exact old receipt in
tools/apply-eden-backports.sh. Newtools/migrate-net-user-agent-cache.pychanges only the verifiedsrc/common/net/net.cpperror log statement, checks UA/Accept, is idempotent and fails closed on unexpected source. Does not delete cached Eden, FFmpeg, CMake, or compiled objects. - Added four-case migration unit
tools/check-net-cache-migration.pyto full CI preflight. Tested old upgrade/retry/pristine mismatch/unexpected source, all PASS. New and logging patch git-apply dry-runs against local pinned source PASS. This is a build-environment fix, not gameplay freeze repair.
2026-10-08 CI red #37710086280 (full native compile success; late stale validation)
- Run #37710086280 on
f44843fsuccessfully compiled PS5 app;headless/check_package.py --checksaidNative package inventory, fixture, alignment and imports PASS. UploadProspero.Eden-Encore-staged-appartifact id 11521966412 (~37 MB) succeeded; latetools/ci/check-staged-app.pyfailed because it asserted obsoletekHomeCachepresent in Home source. Actual Home haskHomeQuickPanel,kHomeQuickFirst,kHomeStorage,kHomeControllers, andkHomeFullSettings. - Replaced stale source marker in checker with real four-action navigation markers, added early check to
tools/check-encore-ux.pyfor consistency. Downloaded actual artifact onto authorized Mac at gitignored.local/resume-artifacts/PPSA99008; full 162-file staged validator PASS, early Encore UX and CI-cache gates PASS. No new native compilation required; resume prior staged app withworkflow_dispatchand inputresume_run_id=37710086280,publish=false. Commit message[publish-existing]avoids redundant automatically triggered push build; release remains test-only.
2026-10-08 — Eden Encore post-approval work (GitHub only; UI render frozen by user)
- Authoritative UI reference:
maquetteunique.png. User accepted native C++ launcher visuals from preview run #37720713295; DO NOT rerun launcher-preview workflow for this icon-only follow-up. The approved violet/pink logo, Home COVER background with dark left/bottom scrims, seven recent covers, 4 utilities, focus gradients and user-facingJoueurs max./Cacheremain. - User requested only two last icon refinements: an unmistakable eight-tooth gear for Settings in tab/card and a more recognizable PlayStation DualSense-style controller outline for Home utility and players badge. Implemented once in shared
pe/ui/widgets.cppvector functionssettings_gearanddualsense_icon; existing controller overlays now share this geometry. Not native-rendered since the user forbade new GUI runs. - Universal GPU/renderer hot paths: when FPS overlay is hidden, neither OpenGL nor Vulkan formats HUD glyphs/queries-reset system performance stats every frame/second; presentation counters remain. The PS5
sceSystemServiceHideSplashScreenfailure path now attempts once per GraphicsWindow, instead of potentially repeating a kernel call + log line every presented frame. - Nlib launcher I/O:
Textures::pumpnow decrements the per-frame load budget even for missing files (the previouscontinueskipped the decrement and could probe many missing images in a single frame). Retries for new image arrivals use 450 ms initial / 1.5 s / 3 s backoff, without a per-frame stat. All-game eager Nlib concurrent banner/icon/screens fetching remains. - CI: fixed source-contract tests that still asserted obsolete per-game Home-only media and fixed 3-second texture retry. Added
tools/check-runtime-frame-budget.pyand lightweight.github/workflows/encore-core-preflight.yml(no native renderer, no PS5 build). - Latest source preflight: GitHub Actions #37721799353 SUCCESS, including all-game HLE/DNS isolation, render hotpath, bounded logging, Nlib I/O, 7-profile performance policy, French UX contracts and full feature branch
git diff --check. No PS5 firmware/gameplay runtime test; neither FC27 freezing nor increased FPS has been proven resolved. All post-preview commits are onlocal/fc27-offline-no-build, NOT merged into defaultfix/0.40-zbic-13.60and NOT published as PS5 package. - Next gate: when core review is complete, build PS5 app once from the feature branch and check linker/asset/package checks; then only hardware can validate gameplay/VRAM and real Nlib loading. Avoid premature repeat full builds or claims about solved freezes.
2026-10-08 — Follow-up to four real PS5 screenshots (no runs)
- User supplied four real PS5 screenshots: FC27 blank Home/Library covers/screenshots, Zelda beautiful cover but clipped long title/intro and white sky reducing top-nav readability, Fire Emblem working with genuine screenshots. Only
maquetteunique.pngremains the approved composition; no image generation, no local Mac, no GitHub run at user's explicit request. - Branch:
local/fc27-offline-no-build. All code changes are unbuilt and untested on console. Do not interpret source-only checks as native build success and do not reuse prior green artifact as containing these edits. - UI: Home long titles now wrap up to 2 lines; hero captions wrap to 2, metadata adjusted to clear button row; added top dark gradient over bright backgrounds; player count label centred within the region after the DualSense icon; navbar shortens to
Récents; Home storage now saysJeux · Cacheor real usage instead of exposing/data/prosperoeden. - Nlib: validate cached uncompressed BGRA/TGA header, dimensions and payload length rather than trusting file existence; bad files can be re-fetched; accept JPEG or PNG from image endpoints; expose aggregate missing-media diagnostics; refresh sparse cached metadata to discover newly available artwork; bounded network retries of missing Home media (2 min), all installed games (5 min), and metadata (5/30 min) with a lightweight 8-second launcher check. Game network is still never required.
- Visual fallbacks: Library prefers Nlib/ROM square icon over panoramic banner for cards, uses contain for icon-only detail image, shows human-readable loading/unavailable states, hides invalid thumbnail slots. Home recent tiles also show status, no fake media. New French translations in fr-FR and fr-CA, with prior malformed literal newline entries repaired.
- New source guard
tools/check-nlib-ui-recovery.py. No workflow run started, no PS5 build or merge; must compile/test before distributing another installable build. FC27 artwork depends on actual ROM extraction and Nlib availability; no hardcoded replacement is promised.
2026-10-08 — FC27 Nlib artwork cache audit (source only; no build)
- User reports that FC27 media exists on Nlib. Old complete schema-v2 metadata could persist indefinitely, including outdated artwork absence. Nlib schema v3 adds weekly persisted metadata refresh and monthly refresh of valid image files; retain existing files if downloads fail.
- A screenshot fallback must not count as an already-cached real banner.
- When an atomic download replaces a file under the same path, the launcher now invalidates its affected in-memory GL texture, instead of retaining stale artwork until restart.
- Source-contract guard updated. No native PS5 compilation, workflow dispatch, preview, or hardware validation. Never claim this is in the previously shipped package.
2026-10-08 — User-provided FC27 PS5 stutter logs; source-only fixes
- Current heap.log includes a 70.3-minute Vulkan session (29.58 mean present FPS,
13/840 five-second windows below 20 FPS, 148 present gaps >100ms, worst 2641ms).
Late
EDEN_JIT_PRESSUREon cores 0/1/2 recurs near stutters; worker topology is still not proven (ready=0 distinct_cores=1). Shader/JIT caches were cleared from Diagnostics, some launches show 0 pipelines. Causality unproven. - stderr.log and stderr.prev.log contain 32 PlayStation Auto context flips and 1826 per-button event logs; user reports actual button layout reverting.
- Fixed launcher activation: PlayStation mapping now remains fixed across UI and gameplay (no automatic Nintendo-position switchover); raw button-event printf restricted to diagnostic builds. Added bounded Vulkan frame gap/streak counters to release frame summaries for next hardware investigation.
- Updated stale UX source contract left by prior Nlib cache-schema v3 change.
- FSR 3.1/ML, logical-core pinning, JIT pressure-aware reuse are investigation only; nothing experimental enabled in shipping without exact PS5 tests.
- Feature branch
local/fc27-offline-no-build; no CI, PS5 build or preview, and no claim that new stutter fixes are installed on hardware.
2026-10-08 — Source-only opt-in runtime experiments
Feature branch local/fc27-offline-no-build has experimental A64 JIT
cache tiers (normal/256-224-224/320-256-256 MiB), guarded fallback to
distinct logical OS CPUs if PS5 topology is unreliable, passive Vulkan
frame-pacing histogram, and CPU affinity restoration on game return/failure.
Only explicit /data/prosperoeden/config/experiments.json per-title
settings activate them; Safe Launch always disables them. Stable mapping fix
and shipping GPU/CPU policies remain intact. Source-check script:
tools/check-experimental-performance.py; instructions:
docs/FC27_EXPERIMENTS.md. No compile, workflow run, real frame generation,
or PS5 hardware performance validation.
2026-10-08 — PS5-first global performance architecture (authoritative current checkpoint)
- Branch / scope:
dev/ps5-sparse-jit, based onlocal/fc27-offline-no-build; isolated developer source changes, not merged, compiled or qualified on PS5 FW 13.60. No new launcher/UI build, CI native build, package or release has been launched from this branch. The old installed binary does not contain these changes. - FC27 A/B/C/D diagnostic campaign complete, no further user experiments: A: 27.89 FPS / 17.7 >100ms gaps/min / 3.26 JIT pressure/min; B: 28.48 / 7.34 / 1.43; C: 28.63 / 5.26 / 0.71; D: 27.95 / 8.29 / 2.09. Different durations/scenes, so directional not controlled. C gave best observed pacing; D logical pinning not beneficial enough. FC27 hang remains unresolved. Do not ship FC27-only hacks or assume GPU/CPU unused based on PS5 temperature.
- Universal emulation policy: ALL titles share CPU worker and Vulkan pipeline scheduling policy and JIT memory management; ROM/title ID only identifies dev-log context or independently sourced exceptions for other concerns. Legacy A/B/C tier selection (including FC27-specific auto-C) removed from the actual normal app code. Former
experiments.jsonis developer-only for CPU affinity tracing, frame histogram and, behindEDEN_SPARSE_JIT_DEV, sparse-mapping investigation; it no longer chooses A/B/C sizes. - Global JIT sizing now implemented for A64 and A32, in
headless/experimental_performance.h, launch pathheadless/main.cppand generated Dynarmic wrappersheadless/CMakeLists.txt: a one-time PS5 direct-memory query computes a continuous per-guest-core code budget based on free contiguous direct memory, retaining 3 GiB for other guest/GPU/system allocations and committing at most half of the pool beyond that as initially dense JIT. Allocate only active ISA and preserve core3 at 16 MiB; baseline A64=256/192/192, A32=512/64/64 MiB if unavailable/low memory or Safe Launch. Expanded sizes are not limited by 320/256/256 C; there is no 4 GiB global arbitrary cap. A per Xbyak arena safety bound of 1536 MiB remains due to x64 RIP-relative encoding; lifting it requires multi-segment JIT trampolines and code-pointer handling. IMPORTANT: today's allocated capacities are still physically eager/dense, not lazy on-demand; no auto-growth during gameplay yet. Shipping on PS5 not tested. - Developer-only sparse JIT groundwork in
src/memory_pages.cpp,headless/jit-allocator.hand code-generator rewrite: two stable RW/RX reservations, 2 MiB physical chunk commits, mapping/permission startup probe with dense fallback, accounting and teardown. Still not production safe: mid-session physical mapping/commit failure can abort instead of gracefully evicting; multi-arena expansion not implemented. Do not enable sparse for release; build optionEDEN_SPARSE_JIT_DEV=OFFby default. - Vulkan pipeline concurrency global PS5 policy:
tools/prepare-vulkan-port.pyuses actual OS-allowed CPU-affinity mask rather than desktop hardware_concurrency()-1; smaller background pool reserves resources for guest/GPU worker progress. Count logged once; no hardware-validated speedup claim. More parallel worker threads != more useful GPU throughput. - Shared GPU/CPU memory: current port still uses biggest contiguous free direct memory block for conservative GPU cache budgeting; largest block != total free.
headless/performance.cppnow contains lifecycle-only bounded memory region enumeration at realcore_initializedandcore_shutdown, plus virtual vs actually committed sparse JIT counters. Any change relaxing Vulkan texture/VRAM eviction must be based on actual usage, fragmentation and driver behavior, not guessed 16 GiB free. GPU budget and sync stalls remain to optimize. - Diagnostics and docs:
docs/PS5_NATIVE_ARCHITECTURE.md,docs/FC27_EXPERIMENTS.md, README andtools/check-ps5-architecture.py/tools/check-experimental-performance.pyupdated along this branch. No separate user-facing settings or visual rework. Confirm precise source gates and host C++ policy fixture before native promotion. - Outstanding architectural work (DO NOT CLAIM DONE): (1) demand-committed JIT that survives real PS5 W^X/aliasing and OOM; (2) multi-segment growth past single-arena addressing, safe pointer retargeting; (3) memory coordination between guest JIT and Vulkan renderer; (4) measured guest-liveness/CPU/GPU scheduling and synchronization freezes; (5) separate image quality/upscaling optimisation; (6) native compile + 13.60 hardware tests and rollback. This checkpoint is current project memory, superseding older stale A/B/C-only instructions above without rewriting the historical experiment evidence.
2026-10-08 — Universal shader persistence / disk-pressure optimization
- New global shader-cache policy, source-only on
dev/ps5-sparse-jit: RADV/Mesa no longer gets an arbitrary fixed 256 MiB disk cache limit whenstd::filesystem::space(Eden::AssetsDir())is available. Cache size scales with one eighth of available writable space on the actual RADV cache filesystem, expressed asMESA_SHADER_CACHE_MAX_SIZE, with fallback 256 MiB if thespacequery fails. This uses C++std::filesystem::space(cache)(the same filesystem API family as the boot-proven assets-root query), NOT direct PS5 libcstatfs("/user"). The cache path itself has not yet been hardware-tested. - Native OpenGL shader cache no longer prunes every session at an arbitrary 64 MiB total.
headless/cache_budget.hnow keeps compiler records until filesystem free storage is low, then deletes the oldest valid3-4 hex chars .binrecords just enough to restore a free-space floor (32 MiB minimum for small sandboxes, up to 1 GiB on a full filesystem). Non-cache files are not deleted. A failedspacequery causes NO speculative deletion. This cleanup is between game sessions, never on frame path. - Added host-source fixtures
tools/check-jit-memory-policy.pyandtools/check-shader-cache-pressure.py; these compile small C++20 policy tests but no native PS5 app build or firmware 13.60 run has happened. Small equivalent host C++20 algorithm fixtures were run separately and passed, but the repo scripts and the full native app still require dedicated verification. - This optimizes persistent shader compilation, which is distinct from GPU/VRAM/guest CPU throughput. Do not claim it solves FC27 freezing or is hardware-qualified. Keep
MEMORY.mdcurrent on every major architecture decision.
2026-10-08 — Resource-budget accounting clarification
- The launch log
EDEN_PS5_JIT_POLICYnow labelsadmission_budget_mibseparately from per-ISAa64=...anda32=...arena sizes; an admission budget is not the number of bytes actually resident. Dense JIT allocations still commit physical RAM upfront; developer sparse JIT emitsEDEN_JIT_SPARSE_MEMORY reserved / committedat lifecycle boundaries only. Never infer spare PS5 RAM from capacity alone. - Host C++20 equivalents of the universal JIT policy and disk-pressure trimming were compiled/run separately; both passed their tested invariants. Full repository scripts and the native PS5 application have not been run/validated yet. Both new host gates are now wired into the lightweight source workflow and the normal release preflight, but this feature branch is excluded from automatic PS5 builds.
2026-10-08 — Sparse JIT constructor safety, physical-memory reuse, dense telemetry
- Repository branch remains
dev/ps5-sparse-jit, not compiled, hardware-tested, merged or released. User-approved launcher unchanged. No extra A/B/C/D modes or title whitelist. These source changes apply to all guest A64/A32 architectures, sparse implementation remainsEDEN_SPARSE_JIT_DEV=OFFin regular builds. - Constructor ordering bug fixed: upstream Dynarmic initializes a ~2 MiB constant pool in its member constructor, before its
BlockOfCodeconstructor body invokesEnsureMemoryCommitted. Reserving two unbacked virtual code mappings and waiting for the latter call would fault immediately.ReserveSparseJitCodenow commits a 4 MiB physical bootstrap before returning RW/RX addresses; if this initial physical commitment fails, it releases the sparse reservation and the allocator attempts its existing dense backend. - Sparse vs dense alias ownership: an explicit
IsSparseJitCodemap check ensuresEnsureMemoryCommittedrequests physical pages only on actual sparse-owned regions. Sparse reservation failure must not attempt sparse commits into a dense fallback. - Physical memory pressure: native
CommitSparseJitCodereturns false for direct-memory allocation failure before mapping. The derivedBlockOfCode::EnsureMemoryCommittedraisesstd::bad_alloc; derived A64/A32 guest interfaces catch it once, call the existing cache-invalidation protocol (which rewinds the code cursor), then retry within already committed pages. This is a targeted opportunity to survive a recoverable growth failure; a second failure or an error after partial RW/RX mapping still cannot recover safely. Do not claim full OOM resilience or activate sparse in shipping without a real PS5/native test. - Measuring real native RAM: dense JIT allocations now increment a global physical
dense_jit_direct_bytescounter (including allocation header/alignment) and decrement it on corresponding frees / partial-failure paths.EDEN_JIT_DENSE_MEMORY phase=... physically_owned=...alongside sparse reserved/committed counters is emitted only at lifecycle snapshots, not each frame. This fixes the previous blind spot where only the experimental sparse cache had physical accounting. - The offline
tools/check-ps5-architecture.pysource contract asserts constructor bootstrap, ownership query, dense allocation/free, A64/A32 one-shot recovery hooks and diagnostics. It has not been run as a full GitHub runner/PS5 build, so compiler/linker correctness and hardware success remain unproven. - Still required: PS5 executable-alias hardware qualification, graceful handling of partial mapping errors, multi-arena executable JIT expansion and safe branch trampoline ownership, total CPU/GPU memory coordination, real host/guest GPU wait measurements, a successful native compile + firmware 13.60 smoke/soak test. No statement of full PS5 resource utilization is justified by temperature.
2026-10-08 — Host sparse-memory regression fixture and destruction snapshot
- Added
tools/check-jit-sparse-host.pyusing the realsrc/memory_pages.cppcompiled withPS5_NATIVEand seven Linux mocks for the SDK direct-memory calls; validates fixed RW/RX virtual maps and alias visibility, 4 MiB early bootstrap, 2 MiB physical growth, deliberate pre-map OOM retaining prior bytes, release and cleanup after failed bootstrap. Wired it into.github/workflows/encore-core-preflight.ymland the release preflight without enabling a full PS5 build; test script not executed in this session. - Extended existing
tools/check-jit-allocator.pynative host fixture to assert that dense JIT direct-memory accounting rises while compiled code exists, then returns to zero after cache destruction and native partial-error branches. - Lifecycle direct-memory diagnostic now also reports at
core_destroyed, after guest CPU teardown, to catch actual resource leakage.tools/check-ps5-architecture.pyupdated to require that emitted phase. - Sparse physical-commit OOM fallback currently attempts one JIT cache evacuation/reuse for A64 and A32. Do not claim full OOM resilience: another allocation failure, mid-map failure, firmware protection mismatch and dynamic multi-arena growth are still open; normal PS5 builds still use dense allocation.
2026-10-08 — Audit cross-dependency PS5-first: Dynarmic, Xbyak and Vulkan persistent workers
- Upstream status clarified: Dynarmic is not universally dormant since 2024. The
azahar-emu/dynarmicfork has Git commits on 2026-06-24 and 2026-09-26; a more recent upstream commit does not automatically make the fork's ABI or memory ownership compatible with Eden Encore. The pinned emulator source inUPSTREAM.jsonis Eden commit5f142c7926d0c7fcbbd0ce30794d72f638a43b2aand itssrc/dynarmicis a vendored directory, not a standalone Git submodule that can simply be updated. Compare/fix per source unit, keep author/license notices; do not blindly replace all vendor code or imply a full upgrade happened. - Dynarmic/Xbyak actual startup bug class: global A64/A32 JIT capacities may exceed small contiguous free physical blocks and fail before any guest execution. Added
headless/jit-startup-retry.hplus generated core-wrapper call inheadless/CMakeLists.txt: onlyXbyak::ERR_CANT_ALLOCandstd::bad_alloctrigger halving the requested code arena until its original per-core A64/A32 baseline. Other Xbyak errors propagate without retries; 8 MiB null-JIT instances are not artificially grown. Bounded one-shot per-failure retry logsEDEN_JIT_STARTUP_RETRYonly on actual memory errors, not per frame. Source-only; PS5 native constructor/link qualification pending. Added host fixturetools/check-jit-startup-retry.pywith a minimal Xbyak exception shim (no vendor download) for retry and error-propagation tests. - Important Vulkan worker cancellation trap: pinned Eden
Common::StatefulThreadWorker::WaitForRequests(stop_token)attaches a stop callback that invokesthread.request_stop()on each persistent shader compiler thread, so naïvely passing a cancellable preload timeout would permanently stop later on-demand compiler workers. Do not add that. Fixed PS5 lazy pipeline-cache initialization intools/prepare-vulkan-port.py: for an already-requested stop token,Vulkan::PipelineCache::LoadDiskResourcesfirst sets the game's shader pipeline filename and optionally loads the Vulkan driver pipeline cache, then returns before scheduling or cancelling the worker pool. Main'sEDEN_PS5_VULKANpath calls the initialization once per game after GPU ready, enablesuse_disk_shader_cacheanduse_vulkan_driver_pipeline_cachefor real games, and printsEDEN_VULKAN_SHADER_CACHE ... mode=lazy-persistent. This restores serializing newly generated guest pipelines across sessions without forcing full old-cache precompilation at game startup. Earlier stored guest pipeline entries are not proactively loaded by this lazy path; this is not an FPS fix proven on console. - Global design: foreground console gameplay has one demanding guest; the launcher may still do OS/background work, and the PS5 OS/driver continue running. Do not forcibly claim mono-CPU occupancy or assume all eight CPU cores or all 16 GiB accessible to the app. The Vulkan pipeline worker pool is limited based on process CPU affinity as previously coded. Keep native GPU/CPU frame pacing, liveness, RAM pressure and per-game metadata separate.
- Preflight tests: new
tools/check-vulkan-pipeline-persistence.py(static non-destructive worker and cache initialization assertions) andtools/check-jit-startup-retry.py(host C++20 fixture) added to both lightweight and release CI preflight definitions. No PS5 build or hardware test executed for this developer branch and new scripts have not been run. The approved launcher and memory documentation remain intact. - Next execution gates: check generated CMake wrappers for both architectures, pinned driver behavior of native Vulkan driver-pipeline cache data, shader serialization on launch-exit-relaunch, native 13.60 physical JIT memory recovery, and complete GPU/CPU bottleneck instrumentation before claiming stutter-free play.
2026-10-08 — Pin-anchored source checks and driver cache compatibility follow-up
- Added PS5-specific
LoadVulkanPipelineCachefallback in the Vulkan source transformation: an incompatible RADV Vulkan pipeline cache blob now logs an incompatibility and retriesCreatePipelineCachewith no initial blob. If empty cache construction itself fails, error still propagates. The valid guest shader serialized cache remains separate from the Vulkan driver's binary cache. This preserves launch after potential driver updates without claiming driver-cache data remains binary compatible. - Extended
tools/check-vulkan-pipeline-persistence.pyto assert the exact pinned loader anchor, empty-data fallback, no worker-pool cancellation and true lazy startup. Not executed on PS5. - Direct comparison against the pinned vendored Eden source
5f142c79yielded 8/8 structural checks: one A64 and one A32m_jit.emplace(config)constructor injection site; one Vulkan lazy and one driver-cache loader insertion site; persistent worker stop-token behavior; and the guarded transformations. These checks are only source-contract evidence, not a native CMake compile, renderer startup, guest shader serialization success or FPS measurement.
2026-10-08 — Core↔Xbyak CMake linkage and source-only CI attempt
- The pinned Dynarmic CMake links
xbyak::xbyakPRIVATE. The new PS5core-side typed constructor retry includes<xbyak/xbyak.h>, so CMake now also linkscore PRIVATE xbyak::xbyakon PS5. This reuses the same pinned Xbyak rather than importing another revision.tools/check-ps5-architecture.pychecks the exact target link and bounded retry behavior. - The lightweight
.github/workflows/encore-core-preflight.ymlis now allowed ondev/ps5-sparse-jit; push commit6765fabfwith[core-ready]was made to request a host-only source CI run, no PS5 application build and no launcher/UI render. GitHub app workflow enumeration exposes only PR-triggered runs; push-run logs/status could not be confirmed during this conversation. DO NOT CLAIM THE HOST CI RUN PASSED. New commits after that trigger change the HEAD, so earlier run would not validate all subsequent Xbyak/driver-cache fixes anyway. - Before a release, all new host scripts (
check-jit-startup-retry.py,check-vulkan-pipeline-persistence.py,check-jit-sparse-host.py), generated derivatives, and native PS5 compile/firmware 13.60 soak must be run on the final candidate HEAD. The existing branch still contains unqualified developer sparse JIT disabled by default.
2026-10-08 — PS5 JIT executable alias failure, macro compilation, Vulkan cache atomicity
- Production-risk bug fixed in native dense Xbyak allocator: if the executable RX alias failed to map or to gain PROT_EXEC, the native allocator previously returned the writable RW/NX direct-memory pointer as if it were executable JIT code. This violates PS5 dual-view W^X expectations and can cause guest CPU crashes/faults. `headless/jit-allocator.h` now logs alias failure, decrements physical JIT ownership, frees the dense direct-memory block and returns nullptr, letting Xbyak report `ERR_CANT_ALLOC` to the already implemented per-core constructor-size retry. `tools/check-jit-allocator.py` was corrected: all five fault-injection allocation stages MUST return nullptr; the old harness incorrectly accepted executing the unsafe RW-only fallback. This change applies to all games.
- Macro wiring bug fixed: PS5 native main executable and common library define `PS5_NATIVE`, but privately built Dynarmic code did not inherit it. As a result, the derived `BlockOfCode::EnsureMemoryCommitted` sparse branch (guarded with `#ifdef PS5_NATIVE`) could compile out even in developer sparse builds. CMake now attaches `PS5_NATIVE=1` to the single generated `block_of_code.cpp` translation unit, not the entire Dynarmic library. Existing Vulkan-specific CMake already declares `PS5_NATIVE=1` for `video_core` in `headless/vulkan.cmake`; do not duplicate it globally.
- Vulkan shader persistence hardening for all titles: upstream pinned Eden directly truncated `vulkan_pipelines.bin` when writing a driver cache, risking loss of the previous valid cache when the foreground PS5 process stops mid-save. `tools/prepare-vulkan-port.py` now generates a PS5-only transactional cache serializer that writes `.new` in the same directory, flushes and closes the stream, then renames over the prior cache; failures clean only the staging file, never the prior valid driver cache. A static mutex serializes concurrent save requests (background flush vs game exit). This is atomic replacement against typical process interruption, not guaranteed power-loss durability without firmware-verified fsync.
- Source regressions/tests: updated `tools/check-ps5-architecture.py` to require native translation-unit compile flags and reject RW/NX code pointers; updated `tools/check-vulkan-pipeline-persistence.py` for transactional save; added `tools/check-vulkan-cache-atomic.py`, a host-compiled fixture which extracts the actual generated serializer and tests replacement, failure preserving the old blob and competing saves. Both lightweight and release preflights invoke the new gate. These full repository checks and PS5 firmware tests have not been verified on the final HEAD.
- Host smoke test done locally in this chat: a small C++20 reproduction of the current `jit-startup-retry.h` was compiled and run with an Xbyak exception shim; A64/A32 OOM retries and exception passthrough passed. It is an intentionally reconstructed counterpart, not the exact repository fixture and not a PS5 build. No performance/FPS improvement measured yet.
- Open major tasks: production-safe sparse JIT with recoverable mid-map failures; growing beyond a single x64 arena with safe trampolines; dynamic JIT/GPU memory coordination; definitive PS5 CPU/GPU liveness and waiting metrics; native build and game-soak tests; no new frontend design or trial profile UX.
2026-10-08 — Continuity after the JIT/Vulkan correctness pass (host preflight)
- Recovered authoritative remote branch
dev/ps5-sparse-jitatad3d829513bcbefore further edits. Prior run core-only #37825080703 FAILED ontools/check-experimental-performance.py:55: the script demanded the retired phrasedeveloper-build onlyindocs/FC27_EXPERIMENTS.md. All later JIT/Vulkan checks were skipped; do not count this run as a JIT or Vulkan failure or success. - Commit
4e4827b70225replaces that stale text assertion with the actual source/documentation safeguards:EDEN_SPARSE_JIT_DEV=ON,EDEN_DEV_PROFILEand the prohibition against enabling unqualified flags on PS5. Commit8f58294e5d6updates the historical FC27 guidance, removes the suggestion to reapply retired tiers, and documents 4 MiB bootstrap before subsequent 2 MiB sparse code commits. - This is a source/test/documentation fix only. The production dense JIT RX-alias failure fix and PS5 driver-cache transactional save remain unproven by PS5 native compilation and firmware 13.60 hardware; FC27 guest soft-freeze is still open. Sparse JIT remains disabled by default; no new A/B/C/D modes, game whitelist, UI redesign, or full console build.
- MacBook-Pro-de-ADMIN.local Desktop Commander device was reported offline during this recovery. The Mac's local worktree, uncommitted files and builds cannot be attested from GitHub. Run the host-only feature-branch preflight at the final HEAD before recording any green result; the last red preflight predates the RX-alias/Vulkan serializer changes.
2026-10-08 — Green source CI; dedicated dense RX-alias guard
-
Host-only source run #37828047337 SUCCESS on
7f97987f038d: architecture contracts, universal A64/A32 memory plan, bounded constructor fallback, sparse PS5 direct-memory mock, exact generated Vulkan atomic cache saver, shader-disk pressure, approved unchanged UX, and full feature-branch diff check passed. No PS5 native app build/firmware test was executed; those claims are forbidden. -
Added
tools/check-jit-dense-alias-host.pyat60d349d4d229. Unlike the prior native JIT allocator regression that needs generated Dynarmic/Xbyak, this source-only host fixture compiles the actualheadless/jit-allocator.hdense PS5 branch with a minimal Xbyak interface shim and explicitly injected allocation/alias failures, asserting that a failed RX alias never returns the RW/NX pointer and that all accounting/owned allocations are released. It is an ownership and fail-closed test, not real sceKernelMapDirectMemory/RX firmware qualification. Wired into host-only and full release preflight in38dfcff0e582andc65b32330c30. -
Pending at the moment of this entry: execute the new dense-alias gate on the final HEAD via source-only CI. No application build or console test approved/performed for this feature branch.
-
First run of the new dense-alias host fixture, #37828438442, FAILED in the test mock, not in the production allocator. Its
CountDenseJitDirectmock wrongly asserted fornullptrafterallocator->free(nullptr); the real production function has an explicit null no-op. Fixed mock semantics in79e683233be3. Re-run the host-only workflow to qualify the corrected fixture; never label the first red run a production JIT regression.
2026-10-08 — Final source-only gate after RX-alias mock fix
- Core source preflight #37828535877 SUCCESS on tested commit
e76a14451a82859365024930361055216aa04f57. The log containsPASS real PS5 dense JIT allocator: alias failure is fatal-to-attempt, no RW/NX fallback or owned-memory leakandCORE_PREFLIGHT_ALL_PASS; other JIT/Vulkan and approved UX source gates are also green. - This proves the current lightweight host checks, not native PS5 SDK compilation, true direct-memory alias permission mapping, Vulkan driver cache durability on console, full CPU/GPU/RAM utilization or FC27 freeze resolution. Keep sparse JIT disabled in release until those hardware/native qualifications.
- The only commit after the tested source SHA is this
MEMORY.mdstatus entry, tagged[skip ci]to avoid redundant source CI and any native or UI build.
2026-10-08 — Follow-up sparse rollback, branch/PR cleanup audit
- Repo default branch is
fix/0.40-zbic-13.60, the shipping/release line (not a literalmain). Preserve that and developer branchdev/ps5-sparse-jit. The latter is ahead of default and remains not merged/not firmware-tested. Do not silently rename the default branch. - GitHub REST inventory found 0 open PRs. The only PRs #2–#6 are closed/unmerged Dependabot GitHub Actions bumps; the shipping default CI already uses the corresponding SHA-pinned versions (checkout v7.0.1, cache/save and cache/restore v6.1.0, download-artifact v8.0.1, upload-artifact v7.0.1). Do not resurrect or force-merge these stale PRs.
- Five remote branches before cleanup: shipping
fix/0.40-zbic-13.60; activedev/ps5-sparse-jit; obsolete ancestorslocal/fc27-offline-no-build(0 ahead/141 behind developer branch) andwip/final-ui-freeze-audit(0 ahead/333 behind); and divergent historical>0.50-bug_13.60(49 commits ahead/784 behind relative to developer branch). The obsolete ancestors can be deleted once a branch-delete capable authenticated GitHub client is available; do not delete the divergent branch until its unique commits are reviewed/archived. No remote branch has been deleted by the GitHub connector in this pass: its available operations cannot delete refs, and Desktop Commander Mac was offline. - Removed superseded
local/fc27-offline-no-buildtrigger from feature-branch lightweight source workflow and native build workflow. Native release CI on the shipping branch is unchanged. Developer branch still cannot trigger a native build via push. - Prototype sparse JIT recovered a previously fatal partial map case in
src/memory_pages.cpp: after a failed RW map, RX map, or RX permission change before publishing the new page, restore both corresponding virtual chunks toPROT_NONEvia fixed anonymous remap; release the uncommitted physical allocation, preserve prior live code and unchanged accounting, return failure for the already bounded code-cache reuse path. Unexpected mapping addresses or unsuccessful guard restoration still abort (fail-closed); PS5 firmware semantics are unqualified. - Extended real-source Linux kernel mocks with fault injection for RW mapping failure, an RW/RX syscall failure after mapping, execute-permission failure, preserved old executable bytes/owned counts and failed bootstrap cleanup. Source architecture gate asserts rollback branches. Tests and PS5 firmware still require qualification; normal dense JIT remains unchanged, and sparse stays developer-only/off.
- Next gates after source CI: native SDK compile of the generated Dynarmic CMake derivative; real fixed-page guard restoration and executing RX alias on FW 13.60; Vulkan driver actual persistence across crashes/relaunch; multi-segment code / branch trampoline design; precise CPU scheduler and unified-memory metrics before performance claims. Continue to avoid new GUI builds and unapproved native full builds.
2026-10-08 — Sparse rollback host CI green; dense alias tail audit
- Host source run #37829448377 SUCCESS, including real-source kernel mocks for sparse partial RW, RX, mprotect fault injection, 4 MiB startup bootstrap and physical backing cleanup;
CORE_PREFLIGHT_ALL_PASSemitted. This is NOT a PS5 SDK or firmware test. - Extra audit identified dense RX alias teardown ambiguity for non-2-MiB-aligned requests. Native
MapExecutableAliasmapsheader.total-header.lead(large-page rounded), while the allocator's mapping table previously recorded only 16 KiB-page-rounded Xbyaksize. A 3 MiB request could map 4 MiB but unmap only 3 MiB on destruction. Fixed byCommon::ExecutableAliasSpanand using the physical-header-derived actual span in successful mapping ownership and failed insertion cleanup. Extended real-header host fixture with 3 MiB -> 4 MiB mapping and amincoreunmap test. The very old generated-node native test is not a substitute for firmware qualification. - Sparse map error diagnostic now emits a real newline. Updated architecture source contracts, documentation and issue #8 to remove obsolete experimental 4 GiB "elastic" cache wording, and mark only host/source validation checks complete.
- PRs remain 0 open; all five closed/unmerged Dependabot PRs correspond to SHA-pinned action versions already present on the default shipping branch. The Mac remains offline; no branch deletion is possible via available GitHub connector action, and no risky force-ref rewrite has been attempted.
- Run host-source tests again after this exact dense alias source change. No full native PS5 app, firmware game run, frontend render or release merge authorized/claimed.
2026-10-08 — Dense JIT actual RX span and full ISA admission-budget audit
- Host-only CI #37829868820 SUCCESS at
0029330cc908: real header dense-alias injection tests, 3 MiB -> 4 MiB RX alias full unmap, sparse RW/RX/PROT_EXEC mid-map injected failures with inaccessible-guard rollback, universal performance and approved UX gates. This was not native firmware/SDK qualification. - The global
ChooseJitMemoryPlanfloor used 640 MiB, while actual per-ISA four-core baselines A64/A32 are 656 MiB (256/192/192/16 and 512/64/64/16). This could overshootadmission_budget_bytesby up to 16 MiB, even before dense allocator overhead. Source policy now computes the exact four-core floor;check-jit-memory-policy.pychecks both A64 and A32 total capacities against the admitted limit. This remains a sizing plan, not evidence the host/GPU can actually commit each allocation under fragmentation, and header/alignment overhead remains separately counted in the dense physical counter. - Pending source-only CI after the precise floor change; keep PS5 native build, hardware FW 13.60, release promotion and UI rebuild disabled pending explicit user OK. Active branch remains
dev/ps5-sparse-jit; default release branchfix/0.40-zbic-13.60untouched.
2026-10-08 — Final host-only PS5-first preflight green
- The final source candidate
569eabb4fc72e632aaec068e9538ad82f4f31d8ccompleted GitHub Actions #37830087702 SUCCESS. Workflow logs confirm all-title four-core A64/A32 budget fixture, bounded JIT construction retries, real dense allocator 3 MiB/4 MiB alias cleanup, sparse partial RW/RX/PROT_EXEC rollback host injections, exact derived Vulkan cache saving, andCORE_PREFLIGHT_ALL_PASS. - This proves source/host test coverage ONLY. It is not evidence of native PS5 SDK compilation or actual firmware mapping, shader cache durability, multi-arena trampoline safety, dynamic CPU/GPU RAM rebalancing, FC27 unfreeze, or FPS uplift. The release branch was not touched; no new PS5 app/UI build or hardware execution occurred.
- Following this status-only
[skip ci]commit, only documentation differs from that green source SHA. PR count 0 open, two obsolete ancestor branch refs remain pending deletion by a ref-delete capable client, and divergent>0.50-bug_13.60must first have its 49 unique commits reviewed/backed up. Do not force-update any refs to simulate deletion.
2026-10-08 — Latest continuation: only two branches, physical JIT budget and controller Issue #7
- Authoritative GitHub branch check now shows exactly two remote branches: default shipping
fix/0.40-zbic-13.60and developerdev/ps5-sparse-jit.local/fc27-offline-no-builddisappeared from remote during the audit. One-time tightly SHA/ancestry-gated GitHub Actions cleanup attempted to resolve that ref but GitHub answered 404 because it had already disappeared; it did not delete anything. The temporary workflow was subsequently deleted from the dev branch. No open PRs; do not recreate superseded branches. - Removed the stale
local/fc27-offline-no-buildpush trigger from developer launcher preview workflow. Its manualworkflow_dispatchremains available but was not invoked, respecting approved unchanged launcher. - Dense JIT per-ISA baseline is 656 MiB for four cores but four dense direct-memory allocations additionally commit 8 MiB (4 × 2 MiB) of physical allocator header/alignment overhead. Corrected global A64/A32 admission formula to deduct those physical bytes from growth, so actual planned code capacity plus overhead fits admitted resources.
tools/check-jit-memory-policy.pynow includes all four cores, the four physical headers and near-threshold scenarios. This is an allocation-accounting correction, not a speed gain claim or sparse-JIT shipping authorization. - Issue #8: strengthened
tools/check-jit-sparse-host.pyso a failed RW, RX or executable-permission mapping leaves the new uncommitted chunk inaccessible on both RW/RX aliases (fork/SIGSEGV assertions) while retaining earlier live code and physical ownership. Real PS5 MAP_FIXED/permission behavior remains unqualified. - Issue #7: added
tools/check-controller-semantic-mapping.py, compiling actualheadless/button_mapping.hwith PS5/Switch defaults, swapped/custom mappings, invertibility and invalid-key regression. Added to host-only and release source preflights. No in-game PlayStation artwork/glyph swapping is implemented or claimed; actual FC27 menu-vs-match behavior remains a separate hardware/game test. - Updated
docs/PS5_NATIVE_ARCHITECTURE.mdand simplified workflows. Sparse dev option stays disabled by default; no PS5 native app build, UI render, release merge, or firmware 13.60 test performed. - Pending as of this entry: run all host-source gates on current HEAD; only call them green after inspecting that run, then update Issues #7/#8 with specific results and remaining requirements. Preserve user instruction to keep
MEMORY.mdauthoritative.
2026-10-08 — Host core preflight success and final branch/issue cleanup
- Source-only CI #37831190524 SUCCESS on
2128fc85a78c. Logs show passing actual PlayStation/Switch button mapping contract, four-core A64/A32 JIT physical budget including 8 MiB dense allocation headers, real-source sparse RW/RX inaccessible-guard rollback tests, Vulkan serializer and UX-invariant checks;CORE_PREFLIGHT_ALL_PASS. No native PS5 app build or firmware test was triggered. - Both tracked GitHub Issues were updated with exact results and remaining requirements: #7 controller input mapping vs in-game glyph artwork remains OPEN, and #8 sparse executable JIT/PS5 hardware qualification remains OPEN. No issue was marked completely solved without console evidence.
- The branch inventory after cleanup contains only
fix/0.40-zbic-13.60(default release) anddev/ps5-sparse-jit(work branch). The one-time cleanup workflow did not deletelocal/fc27-offline-no-build: it saw 404 because the branch had already disappeared. The temporary workflow was subsequently removed. Native build workflow and preview workflow no longer push-trigger off that obsolete branch; the latter retains manual dispatch only. Zero PRs open. - Further
tools/check-jit-sparse-host.pyfault injection now covers failure of the second physical 2 MiB bootstrap allocation, after the first was already mapped, requiring full cleanup and zero owned direct chunks. This test is not claimed green until the next source-only CI run. - Do not promote sparse JIT, multi-arena claims, FC27 freeze fixes or full GPU/CPU resource utilization without PS5 native compilation and actual FW 13.60 testing. The approved launcher interface is unchanged, and no full build was authorized.
2026-10-08 — User correction: in-game PlayStation glyph art, not input remapping
- User clarified: the sought #7 feature is visual replacement of Switch A/B/X/Y glyphs INSIDE the emulated games with PlayStation Cross/Circle/Square/Triangle artwork. The DualSense-to-Switch BUTTON MAPPING was already addressed. Previous mapping-only regression tests are not implementation evidence for glyph visuals, and no mapping was modified in this pass.
- Existing
headless/mods.handmain.cppalready provide a usable LayeredFS/RomFS game-file replacement path per title ID, including a per-mod disable switch. Game-controlled prompts need game-specific texture atlas, font, layout or shader files; no universal symbol injection is defensible. - Added source-only tooling
tools/ps-glyph-pack.pyfor manifest-verified, legally supplied, per-title in-game graphical resource packs, with strict supplied title+40/64-digit build ID, RomFS source SHA-256 and replacement SHA-256, path/symlink/duplicate/size rejection, staged non-destructive installation intomods/<TITLE>/Eden Encore PS Glyphs/romfs/. Installer leaves original Nintendo content untouched and does not overwrite existing packs or change controller mapping.tools/check-ps-glyph-packs.pyincludes synthetic host fixtures for successful staging and incompatible/malicious rejection; wired into host-only and release source preflights. - Important LIMIT: verification currently requires a trusted original RomFS dump plus caller-supplied running build ID. It does NOT determine build ID from the actual active game or auto-disable already-installed packs after updates. No real game's PlayStation atlas is distributed/installed. Thus the all-games visual feature, native integration and per-title display evidence remain open.
docs/PS5_INGAME_GLYPHS.mddescribes the staged path and explicit remaining gates. Do not claim in-game glyph replacement has occurred. - No native PS5 app compilation, GUI re-render or game FPS test was requested/performed. #8 JIT feature branch remains developer-only with sparse JIT OFF by default. PR count zero, branches remain only shipping default and developer.
- The new glyph pack tool and its regression checks have not passed source CI yet as of this entry. Re-run on this HEAD before declaring test success.
2026-10-08 — Verified in-game artwork pack follow-up and Issue #7 correction
- First source preflight #37832229876 SUCCESS at
b8dd34afae2e, including synthetic legal PS-glyph RomFS pack verification/install, controller input regression (unchanged), previous JIT/Vulkan gates and approved UX contracts. It does not contain real in-game prompt changes or native PS5 qualification. - The user explicitly corrected scope: #7 is about changing button glyph DESIGN INSIDE GAMES, not controller INPUT MAPPING. Updated Issue #7 title and priority wording accordingly; mapping regressions remain ancillary tests, not progress toward visible prompt replacement.
- A second audit of the new glyph-pack installer caught a real compatibility problem: the pinned
Mods::TitleFolderresolves title directories case-insensitively. The installer must reuse an existing lowercase/uppercase title directory, and refuse duplicate/colliding mod names, otherwise a legitimate pack may be installed in a second directory which the game never loads. Fixedtools/ps-glyph-pack.pyand added fixtures for existing lowercase title folder, case-colliding title variants, and conflicting glyph mod names. Test of THIS refinement awaits the next source preflight. docs/PS5_INGAME_GLYPHS.mddocuments manifests, legal requirements, actual LayeredFS install and hard limits. The tool stages legally supplied per-title graphical resources but cannot recognize the running title's build ID independently, nor synthesize game-specific textures. No legitimate per-title replacements are bundled. Automatic safe game/version selection, actual PlayStation artwork in games, delivery, and firmware 13.60 tests remain OPEN in #7.- Issue #8 remains OPEN for hardware validation of JIT, multi-arena branch trampolines and CPU/GPU unified memory; its source-only checks stay in the preflight. The only two branches are developer and default delivery, with zero PRs open. No native PS5 build, UI preview or merge was launched.
2026-10-08 — Verified final glyph pack source gate / issue receipts
- Host-only CI #37832402204 SUCCESS on candidate HEAD
198efe7781e0, includingPASS legal PS glyph pack manifest, checked SHA-256 matched original/replacements, mod-directory capitalization/collision handling and existing JIT/Vulkan/UX regressions, endingCORE_PREFLIGHT_ALL_PASS. - Updated Issue #7 to make in-game visual button glyph ART, NOT the previously corrected button mapping, the explicit priority. The verified game-specific RomFS pack installer/test are a real infrastructure step, but neither a real glyph pack nor automatic runtime build-ID selection exists yet. Do not mark the feature complete; no PlayStation icons have been demonstrated inside FC27 or other running games.
- Issue #8 remains OPEN for PS5 JIT firmware qualification, safe multi-arena expansion, unified RAM and CPU/GPU bottleneck measurements. The latest shared source CI checks did not introduce or qualify an SDK firmware build.
- No new renderer UI build, main/release branch merge, game binary delivery, or hardware FPS test. Only final documentation and issue status changed after the green tested candidate.
2026-10-08 — Encore-overrides-style visual-button catalogue (user-requested simplification)
- Instead of forcing the user through per-game manual graphic pack selection, the visual glyph pipeline now uses niakw/encore-overrides/glyphs/manifest.json as a curated, revisioned title/update/build rule list, beside the existing video profile JSON. This shared catalogue deliberately has zero falsely supported titles until real legally supplied and compatible assets exist. Added
tools/sync-glyph-overrides.py,data/glyph-overrides.json, and generatedheadless/glyph_overrides_generated.hsnapshot with optional newerConfigFile("encore-glyph-overrides.json")runtime overlay (rejects stale revisions). - New
headless/glyph_overrides_runtime.hparses bounded per-game rules and author-installed pack provenance, uses the existingmods/<title>/Eden Encore PS Glyphs/romfs/replacement mechanism and rejects absent, mismatched or unknown installed update versions. Embedded rules are tested at launch, not by scanning the GPU hot path. Inheadless/main.cpp, added explicit rule-based enabling/disabling of this one graphics mod beforesystem.Load, honoring Safe Launch, existing user-disabled mods and existing global Mods switch. A catalogue entry does NOT synthesize textures or change controller input mapping. - Added a separate JSON presentation style in
headless/settings_store.h: global/appearance/ingame_button_glyphswithplaystation(preferred/default) orswitchand a/games/TITLE/ingame_button_glyphsoverride. This is independent of the pre-existing physical DualSense mapping. No frontend layout or graphical settings screen changed. - Added
tools/check-glyph-overrides-runtime.pyto compile the actual C++ runtime selector on Linux with nlohmann, with unknown/mismatched versions, mod evidence damage, JSON preference persistence and no action remapping; wired lightweight and release source CI. Added offlinetools/sync-glyph-overrides.py --manifest data/glyph-overrides.json --checkreproducibility gate. The tests have not yet passed CI as of this entry. - Major remaining limitation #7: a game-specific legal PlayStation replacement atlas/font/layout is still required. The metadata bridge reports a scanned update display version, not independent actual loaded NSO build-ID verification; a catalogue-supplied build ID is a declaration, so real in-game behavior is unqualified. The workflow conservatively disables missing/unsupported graphics mods. Automatic pack distribution and native PS5 game screenshots are not complete.
- #8 PS5 sparse JIT firmware13.60 and GPU/CPU resource optimization still open; no PS5 app build, UI re-render or main/release branch merge. Respect original launcher design, all-games performance and memory policy. Two GitHub branches; zero PR open.
2026-10-08 — Glyph-source CI diagnostics
- The first integration host preflight #37833761194 failed in Python source generation syntax at
tools/sync-glyph-overrides.py:56, before it reached the actual compiled C++ selector. This is not a renderer or PS5 regression. Fixed the generator row construction to ordinary string concatenation atdd56394cbfd6; source-only CI must be rerun before declaring the new catalogue green.
2026-10-08 — Verified in-game art catalogue after syntax fix; unified Encore sync
- Host source CI #37833867119 SUCCESS at
183575dd8e6e: source snapshot reproducibility, actual C++20glyph_overrides_runtime.hselector (title/version match, user visual-style setting independent of DualSense input mapping, missing/corrupted mod, Nintendo fallback), synthetic legal RomFS asset staging, JIT/Vulkan checks, and approved UX contracts; log endsCORE_PREFLIGHT_ALL_PASS. - The user explicitly asked for simplicity equivalent to
encore-overrides. Addedniakw/encore-overrides/glyphs/manifest.json(curated revision 1, zero verified titles, do not invent supported games) and explanatory glyphs README. Added generatedheadless/glyph_overrides_generated.handdata/glyph-overrides.jsonplus a newer-revision runtime JSON override; the same existingtools/sync-encore-overrides.py --source ...command now refreshes the glyph catalogue when it syncs video profiles, so no separate required action. - In-game artwork policy is selected once at game launch in
headless/main.cpp, beforesystem.Load, via a verifiedmods/<title>/Eden Encore PS Glyphs/romfs/graphics mod. Unsupported version or absent rule is explicitly disabled; separateappearance/ingame_button_glyphsand per-game settings default to PlayStation preferred with Nintendo fallback. No new rendering subsystem or frame-time OCR, no mapping change, no frontend redesign. - This is NOT automatic generation of replacements: no game-specific PlayStation texture/font/layout is bundled or verified on hardware yet. The scanned update version is NOT an authenticated running NSO build ID. Runtime source layer and compiler source checks require real firmware qualification before claiming actual glyph changes in FC27 or any other game. Issue #7 remains OPEN; Issue #8 JIT still OPEN.
- The combined-sync tweak and docs/test guard after the green run require another host-only CI pass before their status can be declared green. No native PS5 app, package, UI preview, release merge or firmware 13.60 hardware test.
2026-10-08 — FINAL source gate for one-command Encore visual glyph overrides
- Final source-only GitHub Actions #37834142981 SUCCESS at code tested SHA
152d030cb541cd5bb5a5956a5feed00fa95ef6df. Logs explicitly containPASS glyph visual overrides(generated shared snapshot reproducibility),PASS real C++ in-game glyph override catalogue(actual policy and separate visual preferences),PASS legal PS glyph pack manifest, andCORE_PREFLIGHT_ALL_PASS. - The customary
python3 tools/sync-encore-overrides.py --source /path/to/encore-overridescommand now refreshes BOTH the existing video performance profiles and the curatedglyphs/manifest.jsonvisual-art catalogue when available. Optional targetedtools/sync-glyph-overrides.py --source ...retains a standalone path. Zero game rules are advertised without actual independently qualified replacement graphics. headless/main.cppselects graphic RomFS mod availability at boot, not input semantics or per-frame GPU changes. Unsupported or mismatched game/update version = Nintendo original; a PlayStation preference alone never implies the game's artwork is actually replaced. Visual choice lives in JSON preferences separate from controller mapping. Firmware 13.60, real NSO build attestation, actual prompt atlas assets, automatic delivery, and title-by-title screenshots still remain unverified and belong to open Issue #7.- Issue #8 remains OPEN for JIT resource architecture and PS5 firmware hardware testing; the final CI is host-source-only, no full PS5 build, UX render, release branch merge or real FPS qualification. Current shipping/default branch remains
fix/0.40-zbic-13.60and active work branch remainsdev/ps5-sparse-jit; no other branches or open PRs are intended. - Following this status-only
[skip ci]commit, the most recent source CI success still covers all code modifications.
2026-10-08 — Remove cheat Build ID dependency from visual glyph rules (pending CI)
- User rightly questioned requiring EdiZon / per-installation Build ID. Distinction: an NSO executable Build ID is associated with its executable build/version, not each player, and can change with updates; RomFS graphic compatibility should instead follow title/version and the original graphic file's fingerprint. No user should run EdiZon to enable game artwork.
- Promoted curated
niakw/encore-overrides/glyphs/manifest.jsonto schema 2, revision 2, keeping zero unverified game entries. Synced Edendata/glyph-overrides.jsonandheadless/glyph_overrides_generated.hto v2;tools/sync-glyph-overrides.pynow emitstitle_id + update_versiononly. The existing combinedsync-encore-overrides.pyworkflow remains. Updated shared source README anddocs/PS5_INGAME_GLYPHS.md. tools/ps-glyph-pack.pynow requires original/resource SHA-256, Title ID and author-selected update display version; no --build-id and no program/executable-specific assumptions. Staged provenance schema 2;headless/glyph_overrides_runtime.hmatches update rather than a declared NSO Build ID, still rejects unknown updates, malformed pack metadata and missing files. It additionally checks SHA-256 declaration format and rejects nested symlinks out of installed graphic directories. Synthetic installer and C++ runtime fixtures updated (version mismatch, bad update labels, symlink parents).- Native launch metadata now calls
eden_game_glyph_display_version, noteden_game_addonsalone: if an update was scanned use its known version; if none exists readRawNACP.version_stringfrom the selected base game's control.nacp. If the scanner did not finish, an installed update version is unreadable, the source file is missing, or the NACP version is invalid, the feature must fail closed to original Nintendo artwork. The actual pinnedRawNACP.version_stringfield was confirmed in the pinned Eden source. The game scan is initiated by EdenServices home/library and may be missing when setup is not ready; fail closed. Added source-integration assertions totools/check-glyph-overrides-runtime.py. - IMPORTANT UNFINISHED: These are mostly source/host tests. Native SDK compile on FW13.60 and active effective RomFS byte fingerprint comparison, game-specific legal graphic packs (currently none), and automatic asset distribution are not proven. The display version is not cryptographic proof of a loaded binary; ignore the program Build ID for this graphic use case, but revalidate original asset fingerprint at native load before making strong compatibility claims. Issue #7 remains OPEN; issue #8 JIT/FPS remains OPEN. No console app/GUI build or branch merge.
- All v2 changes above pending new
[core-ready]host-source preflight at this note; do not report green until log and job success confirmed.
2026-10-08 — v2 game-art host preflight green, all-title JIT cap redistribution next
- Source-only GitHub Actions #37835534460 SUCCESS on candidate
59e3c3c32eb1: visual glyph schema v2 without EdiZon/Build ID, original/replacement RomFS asset SHA test, title/update version and separate controls, native metadata source anchor, bounded shader/JIT checks,CORE_PREFLIGHT_ALL_PASS. This did not compile the PS5 native NACP reader or render in-game artwork. - Issue #7 now reflects v2, no user Build ID, automatic base-game NACP / scanned update display version detection, and absent legal per-game glyph atlases / no effective RomFS live-original fingerprint gate. Remains OPEN.
- Additional universal A64/A32 optimization for Issue #8: source planner
headless/experimental_performance.hnow reassigns only the large-page-aligned clamped surplus from any guest worker's 1536 MiB addressing ceiling to other active-ISA worker arenas, without increasing overall 4-core physical budget or reintroducing FC27-only tiers. Each cache remains immutable during a session, growth still uses bounded retries, and physical overhead 4 × 2 MiB remains counted. - Expanded
tools/check-jit-memory-policy.py: monotonicity and budget checks in every 2 MiB increment across up to 15 GiB available physical memory, plus A32 core0/1 and A64 multi-core cap regression. Host source tests are NOT the same as firmware performance qualification; real FC27 freezes/FPS still unproven. docs/PS5_NATIVE_ARCHITECTURE.mdrecords the change.tools/check-ps-glyph-packs.pyCI pass message corrected from obsoletetitle/buildwording totitle/update. Following this note, a new host-only[core-ready]CI run must validate the JIT surplus optimization and updated tests. No PS5 native full build, launcher re-render, release merge or PR cleanup required; active branches still shipping + development.
2026-10-08 — Capped JIT reallocation green; v2 native glyph base metadata parser host gate
- Host-only CI #37836045236 SUCCESS at tested source
1952686a4ed8. Logs includePASS shared JIT memory policy(all-title A64/A32, monotonic at 2 MiB granularity, cap surplus spread, 8 MiB physical header overhead),PASS glyph visual overrides,PASS real C++ in-game glyph override catalogue,PASS legal PS glyph pack manifest: verified title/update/original+replacement SHA256, andCORE_PREFLIGHT_ALL_PASS. No PS5 SDK/native or gameplay testing was performed. - Replaced the previous 11+ KiB chronologically contradictory issue #7 body with a current concise statement: user wants in-game ART, not controller remapping; shared schema v2 does not require a Build ID or EdiZon; zero real graphical packs are yet qualified. Issue #8 body similarly refreshed with latest JIT capped redistribution, remaining console and GPU/RAM/FC27 validation gates. Both remain OPEN, no false "fixed" declarations.
- Isolated
headless/glyph_version.h: source helper to decode the pinnedRawNACP.version_stringfor a base game's version, bounded 16-byte field, printable ASCII only, null-terminated or full length, fail closed on malformed input. Used byheadless/metadata_bridge.cppand covered in actual C++ source-host fixturetools/check-glyph-overrides-runtime.py; the new C++ byte fixture was normalized to'\\x01'rather than a multicharacter literal. Run CI again for this final helper; no PS5 SDK compile done. - Default release branch
fix/0.40-zbic-13.60still untouched; developer branchdev/ps5-sparse-jit. No full PS5 build, UX render or PR merge. Details in docs/PS5_INGAME_GLYPHS.md and docs/PS5_NATIVE_ARCHITECTURE.md.
2026-10-08 — FINAL source-only green gate (no Build ID and universal JIT budget)
- GitHub Actions #37836509250 SUCCESS, source-tested SHA
7329fa7c9bcb091dccef04fd3c4a42579654a19a. Job and logs showPASS glyph visual overrides,PASS real C++ in-game glyph override catalogue,PASS legal PS glyph pack manifest: verified title/update/original+replacement SHA256,PASS shared JIT memory policy,CORE_PREFLIGHT_ALL_PASS. - New
headless/glyph_version.his compiled and exercised by the C++ host fixture: valid/empty/invalid NACP control display versions, including a full 16-byte non-null-terminated field. Real nativemetadata_bridge.cppconsumes that same source helper; PS5 SDK/game compile remains untested. There is no user-supplied NSO Build ID or EdiZon dependency anywhere in the v2 glyph rule path. - Latest host policy suite covers 2 MiB granularity and redistribution of otherwise capped guest JIT capacity for both A64/A32 within same physical reserve. This is a source capacity improvement, NOT proven FPS gain or hardware unfreeze.
- Both GitHub Issues #7 visual game glyph artwork and #8 PS5 JIT/GPU/native qualification have been replaced with current readable authoritative checklists, free of obsolete/contradictory mandatory Build ID and stale feature claims; both remain OPEN.
- No PS5 native full build, GUI redesign, firmware 13.60 test, title artwork extraction/distribution, or release-branch promotion was attempted. This concluding
[skip ci]documentation commit differs from tested HEAD only in MEMORY.md.
2026-10-08 — Real glyph replacement asset digest verification (new source gate)
- Audit of Issue #7 found an actual correctness hole: runtime
GlyphOverrides::EvidenceMatchesverified pack metadata, path presence, SHA-256 string format and symlinks, but never hashed the installed replacement file at launch. A modified artwork file could still be enabled. This is now fixed with a bounded streaming SHA-256 over real installed bytes in newheadless/glyph_sha256.h; integration inheadless/glyph_overrides_runtime.hcompares each replacement file digest with the staged artist-packreplacement_sha256. No per-frame reads, 32 KiB I/O chunks, 128 MiB per-file ceiling, rejects partial reads and mismatches. - Expanded source-host C++
tools/check-glyph-overrides-runtime.pywith independent standard SHA-256 vectors for empty input, segmented 'abc' and one million 'a', a genuine installed-atlas digest and a post-install same-path file tampering test. Missing, too-large, mismatched artwork fails closed to original Nintendo visuals; the base RomFS's actual effective version/file digest after patch layering is still not attested, catalog signing/automatic distribution remains open, no real compatible PlayStation art yet. - This is an integrity improvement for genuine configured packs, not evidence that actual game glyph art is shipped. Source-only preflight still needs to validate newly added code. All build/firmware 13.60, screenshot and FC27 freeze/performance qualification remain unchanged and OPEN in issues #7/#8. Never imply the PS5 native launcher was built or tested.
2026-10-08 — Glyph art-integrity and ambiguous-mod collision audit (second source gate)
- First source-only #37837138796 SUCCESS, including real C++ SHA-256 known vectors and post-install texture tamper rejection. Earlier runtime only checked declared SHA-256 formatting and file presence; the code now reads and hashes the installed replacement bytes, once before loading a game, 32 KiB streaming buffers, no GPU hotpath or unbounded file buffering.
- Additional fail-closed hardening added after the first green source CI: limit cumulative verified pack bytes to 512 MiB and any asset to 128 MiB, matching the original installer and preventing gigabytes of read/hashing at launch due to a malicious edited manifest. Added constant-time C++ budget predicate and fixture validating boundary/overflow, plus a 1,000,000-byte real on-disk file hashing test against independent SHA-256 known vector.
- Another actual ambiguity: Eden's
Mods::TitleFolderresolves Title IDs case-insensitively and mod folders sort by case-sensitive name. Multiple case-colliding title folders or multiple differently capitalizedEden Encore PS Glyphsmods could apply graphics in an uncertain order. The selector now refuses duplicated title folders and mod names, and disallows title/mod symlinks; synthetic host tests cover these cases. - Scope: This secures the replacement file present in
mods/, but does not prove Nintendo's original RomFS bytes in the active game after updates, nor authenticate an unsigned external catalogue; a race to swap files between hash check and emulator overlay is still possible. No actual per-title PlayStation artwork has been published. Issue #7 remains OPEN. Issue #8 and native PS5 FW 13.60 performance/FC27 freezes remain OPEN. - This group of new changes is pending a fresh source-only
[core-ready]CI. No native SDK, full PS5 app build, UI redesign, release merge or hardware game tests performed.
2026-10-08 — FINAL source-only validation of installed in-game glyph artwork integrity
- Latest source-only GitHub Actions #37837534296 SUCCESS for all technical changes at
3adc1707d5a487990eba5a32d630b43db16d96b8. Host CI compiled the actual C++glyph_overrides_runtime.hand SHA-256 implementation (independent known vectors plus 1 MiB real file); verified bytes tampered after staging are rejected; checked 128 MiB per-file/512 MiB aggregate cap, filename/title collisions and symlink trees; existing JIT A64/A32 policy, sparse memory fault injection and UX contracts all passed. Log endsCORE_PREFLIGHT_ALL_PASS. - The once-per-game launch SHA-256 of the installed replacement graphics, not the true effective original game asset after update layering, is now sourced in
headless/glyph_sha256.h; docs/PS5_INGAME_GLYPHS.md and Issue #7 describe accurate trust boundaries (unsigned manifest may be rewritten; disk TOCTOU; PS5 SDK/final game asset validation pending). - Post-tested source changes consist only of documentation and GitHub Issue updates with
[skip ci]. There remains no PlayStation glyph artwork pack qualified for any actual game, no automatic remote pack delivery, no PS5 firmware13.60 build or FC27 menu/match screenshot. Sparse JIT OFF by default; Issue #8 remains OPEN on actual hardware RAM/GPU/JIT/FC27 freezes. No full PS5 native build, UI preview, release merge or branch creation.
2026-10-08 — Developer in-game GPU stall observation for FC27 (host gate pending)
- Specific Issue #8 diagnostic hole: the existing
headless/stall_watchdog.hwatchdog was disarmed immediately aftersystem.Run(), observing stalled boot stages but not FC27's in-game freeze. Added separateheadless/game_liveness.hpure C++Probe, sampled only on the existing once-per-second watchdog thread, never instrumenting JIT blocks/GPU frame hotpaths. Starts aftersystem.Run(), stops at game completion/teardown via explicit DisarmGame and scope guard. - Watch uses existing developer
Performance::gpu_dispatch.callsandrasterizer_draw.callscounters. It needs evidence of a counter change during this session before reporting; if counters are absent/unavailable, records nothing, avoiding false claims. After 30 seconds without new counted GPU work, emitsEDEN_GAME_GPU_STALL_SUSPECTincluding dispatch/draw counts, GPU queue-full, guest sync wait and each guest CPU phase; repeat every ~30 sec with max four reports total per game, resetting delay after resumed progress. Does not exit/restart the game; menu pause or suspended presentation may also look idle, so these are suspects, not proof of bug cause. - Only exists inside
EDEN_DEV_PROFILE && PS5_NATIVEguarded header, with no additional per-frame work or shipping change.tools/check-game-liveness.pycompiles actual portable policy on Linux and checks 30-second threshold, no GPU counters => no suspect, per-incident recovery, monotonic clock anomaly, cap four per session and source-side arming/disarming. Added lightweight and native release source preflights; no firmware build/test yet. - Existing rasterizer/GPU counters must be confirmed to advance on the selected Vulkan/OpenGL backend before trusting negative diagnosis; no GPU activity report ≠ confirmed freeze. Source-only test awaiting next
[core-ready]CI. No PS5 native build authorized and Issue #8 stays OPEN.
2026-10-08 — In-game GPU watchdog source gate green; strengthen native header check next
- Host source CI #37838362140 SUCCESS at
d3c28dadc8f9:PASS developer-only in-game GPU liveness, existing A64/A32 JIT, sparse/dense memory, glyph art SHA and UX regressions,CORE_PREFLIGHT_ALL_PASS. Device-only sessions are now excluded from the developer in-game watcher. - Instrumentation supports suspected GPU progress stalls only after at least one GPU draw/dispatch count changed during this game, then 30 seconds of still counters; max four reports per game, non-shipping and no automatic restarts. The existing boot watchdog used to stop at game start; this is a separate opt-in developer diagnostic for FC27 freezes after match start, not evidence of a fixed freeze.
- Added stronger second-level host test to
tools/check-game-liveness.py: compile the actualheadless/stall_watchdog.hunderPS5_NATIVE=1, EDEN_DEV_PROFILE=1, using realheadless/performance.hplus tiny upstream CPU clock header stub; avoids linking/running SDK functions. This test and updated main.cpp game-only arming are PENDING a fresh[core-ready]CI. Docs/PS5_NATIVE_ARCHITECTURE.md updated with limits and log format. - Firmware 13.60 native build/gameplay still NOT run. Actual vendor GPU counter instrumentation must be confirmed live; an alert can also be a deliberate pause, and absence of an alert is not evidence of no freeze. Issue #8 remains OPEN, #7 visual art/source compatibility still OPEN, release branch unchanged.
2026-10-08 — Final developer GPU stall host C++ compilation PASS
- Latest GitHub Actions source-only CI #37838676286 SUCCESS, tested source HEAD
aa92b5d91ffdbc200f72c0a52c6594c42c75253c. The logs explicitly sayPASS developer-only in-game GPU liveness: 30s threshold, four reports, no counters -> no false alert,PASS real PS5/DEV watchdog header compiles with host-only stub of pinned CPU clock, andCORE_PREFLIGHT_ALL_PASS. All existing glyph SHA, A64/A32 JIT allocator and source UX gates also completed green. - Unlike previous source-only regex coverage, the real
headless/stall_watchdog.his now compiled inEDEN_DEV_PROFILE=1,PS5_NATIVE=1mode on Linux, against the existingperformance.h, with ONLY an upstream missing clock-header stub. This is NOT a complete PS5 SDK native compilation or console runtime validation. - The actual in-game GPU counter monitor is armed only for game sessions, begins after
system.Run, is stopped before tearing down the guest and guarded by scope exit for exceptions. A healthy game increments GPU dispatch/draw counts; if counters never advance the monitor abstains, and if previously observed counters stall for 30 sec it emits bounded suspect-only diagnostics (max 4), no automatic title restart. - Remaining Issue #8 gates: actually build/run on PS5 FW13.60, confirm Vulkan/OpenGL GPU counters are instrumented and productive, capture real FC27 match freeze and determine guest CPU IPC/gpu queue root cause, fix and test. Issue #7 still needs real title-compatible PlayStation atlas packs and content authenticity. No full native app build or UI render attempted; shipping default branch untouched. The post-green commit updating MEMORY/issues is documentation only,
[skip ci].
2026-10-08 — Third-pass correctness: bounded glyph config, zero-overhead unsupported titles, watchdog session epochs (CI PENDING)
- Inspected the actual HEAD in
dev/ps5-sparse-jit, includingheadless/main.cpp,glyph_overrides_runtime.h,metadata_bridge.cpp,stall_watchdog.hand JIT memory policy. Found three real source-level correctness/efficiency problems overlooked by earlier green CI:GlyphOverrides::ReadBoundedchecked JSONfile_sizethen performed an unboundedstd::istreambuf_iteratorread. Under concurrent JSON growth/replacement it could allocate arbitrarily beyond the 128KiB input cap. Replaced with a 4KiB chunked read that refuses any bytes beyond the limit, rejects I/O error, and rechecks final size. New C++ fixture tests exact boundary, oversized, symlink, empty file.main.cppalways read the game's NACP/control RomFS for glyphs even when no title rules or files existed (currently the shared catalogue has ZERO qualified games). AddedGlyphOverrides::NeedsGameVersion: require an eligible installed graphics mod and curated title rule, with PlayStation visual mode requested, game mods enabled, not Safe Launch nor already manually disabled. Only then call the expensive NACP metadata bridge; source and actual C++ tests protect the absent-rule, absent-mod, disabled-style path. The catalogue remains install-only; no per-frame work or mapping changes.- In rapid back-to-back launches, the developer in-game GPU watcher could miss the
game_armed=falsewindow between its 1Hz samples and carry stale previous-title counters into the next title. Addedgame_session_epoch, incremented on everyArmGame, so Loop resetsGameLiveness::Probefor every new title regardless of missed disarm edge; upgraded host fixture to compile/link/execute real developer watchdog header using tiny upstream CPU clock stub.
- Also fixed
LoadCatalogueequal-revision ambiguity: local JSON now requires strictly higher revision than compiled snapshot, not>=, with a host regression for conflicting same-revision rules. - Docs/PS5_INGAME_GLYPHS.md updated. New source-only
[core-ready]CI must run before claiming PASS; no PS5 full native app build, UI re-render, release merge or real game artwork/FPS proof. Issues #7 and #8 both remain OPEN.
2026-10-08 — C++ glyph fast path/JSON cap CI retry after harness syntax mistake
- Source-only GitHub Actions #37839447937 FAILED ONLY due to a newly introduced Python syntax typo in
tools/check-glyph-overrides-runtime.pyline 36 (assert expression split across lines without parentheses).tools/check-game-liveness.pyPASSED, including host-link/execute of real DEV/PS5 watchdog header with session epoch. The core C++ glyph test did not execute in this failed run. Fixed the syntax in552d9687cf78; do not call this run green. - Further native metadata audit:
eden_scan_addons()leftUpdatesScanCompleted=falsewhenever theupdates/directory did not exist. For users with no updates directory, this wrongly blocked all base-game NACP glyph rules. Now treats an errno-free, verified ABSENT directory as an empty successful update scan; an unreadable/permission denied folder still fails closed. Also parses .xci case-insensitively for mixed-case extensions. Added guarded source invariants to the glyph host test. The C++ runtime no-rule NACP fast path and bounded JSON reading remain unchanged from previous note. - This latest code requires a new source-only
[core-ready]CI. No PS5 SDK build, console gameplay, JIT tuning, UI redraw or default branch merge was performed. Open issues #7, #8 remain active; avoid claiming actual glyph art rendered or frozen FC27 repaired.
2026-10-08 — THIRD PASS VALIDATED: no all-game NACP tax, bounded JSON, quick-switch liveness
- Final source-only GitHub Actions #37839664421 SUCCESS on tested code SHA
9f0f85d995b36708f8cf3de5f1915f50b95eaa60. Relevant logs:PASS developer-only in-game GPU liveness,PASS real PS5/DEV watchdog header host-links and runs session-epoch reset check,PASS real C++ in-game glyph override catalogue,PASS legal PS glyph pack manifest,PASS shared JIT memory policy, endingCORE_PREFLIGHT_ALL_PASS. The preceding CI #37839447937 had failed due to a Python syntax mistake in a new test, fixed before this green run. - Core correctness fixes proven in actual source-host C++: bounded
ReadBoundedexternal manifest reading (4KiB chunks) preventing file growth beyond stat-time size, input size boundary/symlink/empty fixture;NeedsGameVersionno-container-read fast path for unsupported/absent/disabled art (critical while zero games verified); strict newer-revision JSON policy;game_session_epochcorrectly resets developer 1Hz GPU progress probe across rapid consecutive launches. - Native
eden_scan_addonsmetadata recognizes truly absentupdates/folder as an empty successful scan (not as an unreadable installed update) and handles mixed-case.xciextension, with source contract checks; this part has source-only checks, NOT native SDK build or real firmware test. - GitHub Issues #7 and #8 updated with exact work, earlier failed preflight and new correct green source checks. Both remain OPEN: real game PlayStation texture atlases, effective RomFS integrity, native PS5 13.60 compilation/qualification, JIT/VRAM/CPU occupancy and FC27 freeze cause remain unresolved.
- No PS5 app build, home UI redesign/run, main/delivery branch merge, game artwork pack distribution or true frame-rate measurement performed. Documentation-only
[skip ci]commit after tested code preserves last CI code SHA.
2026-10-08 — Strict pre-native-build audit with user-authorized Mac tests
- User asked whether the emulator was truly ready before a build and authorized access to their ARM64 Mac for TESTING ONLY, no commits on Mac. Connected Desktop Commander online Mac, created a disposable shallow test checkout at
/tmp/eden-prebuild-audit.M6cSGy/repo, never touched the owner's active project files and never committed/pushed on Mac. Git status stayed 100% clean; all GitHub source edits separately used the connected GitHub connector ondev/ps5-sparse-jit. User-facing UI and shipping branch unchanged. - Critical source race found and corrected:
headless/metadata_bridge.cpphad globally sharedScannedAddOns() std::mapand completion boolean mutated ineden_scan_addonswhileeden_game_addons,eden_game_language,eden_game_glyph_display_versionread them with no lock. Concurrent library scan + game launch was UB/crash-risk. AddedScannedAddOnsMutex()for short snapshot read/publication, build local std::map off-lock thenswaponce successful; the readers copy under lock, and unreadable scan fails closed. Added independentScanAddOnsJobMutex()to serialize concurrent scan jobs, preventing stale scan superseding newer. Actual registry source declarations extracted and compiled by newtools/check-addon-snapshot-host.py, stress-tested on Mac with 3 readers + 3000 successive published update versions. Source review still needed on pinned native compiler, as this is only a host gate. - Mac discovered default filesystem was case-insensitive APFS: old Python/C++ glyph collision tests falsely assumed one could create a second uppercase Title ID directory and might delete the genuine alias. Fixed test-only case-sensitive vs case-insensitive branches in
tools/check-ps-glyph-packs.pyandtools/check-glyph-overrides-runtime.py. Mac also revealed that its installed default macOS27 SDK had a newer.tbdformat than its linker supports. Process-localSDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX26.5.sdkallowed host C++ tests without any SDK installation/change. - Mac ARM64 cannot execute x86
__builtin_ia32_pauseDEV watchdog tests and lacks Linux-only sparse JIT mockmemfd_createandMAP_FIXED_NOREPLACE.tools/check-game-liveness.pyexecutes portable liveness on Mac, cross-compiles real PS5 watchdog header for x86_64, and continues link+execute on Linux/x86 host.tools/check-jit-dense-alias-host.pymocks the REAL host VM page size (16KiB on Mac vs 4KiB Linux) and keeps Linux-onlymincoreRX unmapped-tail check; portable mock JIT alias ownership/executable map failure passed on Mac. Source tests on Linux still necessary for sparse kernel fault injection. - Independent Mac regression sweep 9/9 PASS at GitHub source commit
1a8f4171ab738e1d2fbaca825306aad703288a96:check-addon-snapshot-host.py,check-glyph-overrides-runtime.py,check-ps-glyph-packs.py,check-game-liveness.py,check-jit-memory-policy.py,check-jit-dense-alias-host.py,check-jit-startup-retry.py,check-vulkan-cache-atomic.py,check-controller-semantic-mapping.py. MAC_TEST_FAILURES:0, TEMP_REPO_STATUS:0. - Both light
encore-core-preflight.ymland deliberate nativebuild-040-zbic.ymlsource gates now execute the new concurrency stress check. The final combined GitHub source-only CI on these new changes was not yet run when this entry was written; require green[core-ready]CI and inspect logs before declaring readiness for a controlled native compile attempt. No native PS5 SDK/CMake build, console tests, FC27 freeze reproduction, shader physical performance, image/art replacement in any actual game or release merge were done. Issue #7 (glyph assets) and #8 (JIT/PS5 qualification) OPEN. Mac 9/9 PASS is NOT a warranty of PS5 native build success.
2026-10-08 — FINAL pre-native-build gate: Mac 9/9 + Linux source CI SUCCESS
- Authoritative tested code SHA
836bf7fc8d8045478bcf9f62128621b5456ea901ondev/ps5-sparse-jit. GitHub Actions source preflight #37841938131 SUCCESS. Logs include:PASS real C++ update registry: lock protected readers, serial scans, snapshot publication under 3 concurrent readersPASS real C++ in-game glyph override cataloguePASS real PS5 dense JIT allocator: alias failure is fatal-to-attempt, no RW/NX fallback or owned-memory leakPASS sparse PS5 direct-memory mocks: alias/bootstrap/growth/OOM/partial-map rollback/cleanupPASS shared JIT memory policy: all-title A64/A32 monotonicity, guard, alignment, resetCORE_PREFLIGHT_ALL_PASS, including existing UX and source-diff checks.
- Independent ARM64 Mac host regression suite: 9/9 PASS, including metadata snapshot concurrency, graphic glyph selector + pack, developer GPU liveness, A64/A32 JIT memory, dense alias with host page-size correctness, JIT startup retries, Vulkan cache atomicity and DualSense/Switch controller mapping. Temp test checkout under
/tmpunchanged and clean; no commit/push whatsoever on the Mac; source commits exclusively via GitHub connector. Test environment only selected an already installed macOS26.5 SDK withSDKROOTbecause default macOS27.0 linker/SDK mismatch. Mac watchdog native header x86 cross-compiled, not executed on ARM; sparse PS5 Linux-only mock run validated in Linux CI. - Real source crash hazard removed: concurrent read/write on global
ScannedAddOns std::mapwhile a library update scan overlaps title launch. Fixed serial scanner lock, local snapshot build and short atomically published map under reader lock, protectededen_game_language/eden_game_addons/eden_game_glyph_display_version. This path is source+host-tested; full native SDK compilation still to be attempted. No PS5 SDK workflow dispatch/full compile has been run here. - Issues #7 and #8 updated with the pre-build gate and remaining native/hardware work. Readiness judgment: all AVAILABLE source and independent Mac host gates PASS; acceptable to initiate a monitored native build attempt only when user requests it, with cache/stage-resume and no publication. Cannot guarantee native PS5 SDK compilation or runtime, nor assert FC27 freeze resolved, visual glyph replacements ready, or actual FPS gains. Approval of UI preserved; default shipping branch untouched.
2026-10-08 — Controlled PS5 native run launched; first pre-build gate failed; repaired and retrying
- User explicitly approved running the GitHub PS5 native build, no GitHub Release or shipping branch changes, no Mac-originated commits. GitHub connector does not offer
workflow_dispatch, so dev branch was explicitly added to the native workflow's push branch filter and a[full-build]commit was used for a one-shot developer build. The workflow's build-job guard still ignores ordinary commits; the release job now additionally requires the shipping ref, so a dev build cannot publish a Release even if a future marker or dispatch is wrong. - First native workflow #37842678825 on
f1c3e0d3fe69FAILED DURING SOURCE PREFLIGHT, beforemake prepare, native C++ or app staging. Compiler/toolchain/Meson/install+cache/dependency metadata checks passed, as did glyph asset SHA/JSON catalogue, update-registry concurrency host, A64/A32 JIT memory, dense alias, sparse fault mocks, Vulkan, network, logs and UX. Exact failing script:tools/check-release-hotpath.pyasserted'if(PS5_NATIVE)' not in sectionover a CMake segment that now legitimately contains an all-game, productionif(PS5_NATIVE)JIT allocation retry AFTER theif(EDEN_DEV_PROFILE)sampling block. This was an overbroad test, not evidence that release JIT profiling was enabled. - Corrected
check-release-hotpath.pyto split that section at the specifically marked# Do not silently lose a gameall-game JIT fallback, reject PS5-native code inside the earlier DEV-only profiling region, and assert the realJitStartup::ConstructWithCapacityFallbackis still present in the later native section. Retains shipping hot-path protection while accepting legitimate native memory correctness changes. - Following this note a new
[full-build]commit starts the next controlled native job withpublish=falsesemantics. Avoid touchingdev/ps5-sparse-jitwhile the workflow is running: its concurrency group iscancel-in-progress:true; new dev commits, even skipped jobs, can cancel the active native job. No executable/PS5 artifact exists from the failed first attempt.
2026-10-08 — Second native build failed in Vulkan CMake derived-source generator; fixed for retry
- User correctly flagged RED status in GitHub and requested active reaction. Native build #37843116788 on
9f20665fa1d5completed all source validations, packaging preflight,make prepare, PS5 OpenGL/mesa SDK preparation and substantial dependencies, then FAILED while staging native app at CMake configureheadless/vulkan.cmake:4:tools/prepare-vulkan-port.py:1020 RuntimeError: Shader pipeline anchor changed: u32 cache_version) try {. This was not a console binary compilation or user UI failure: the same generator had already rewritten the pinned cache serializer fromu32 cache_version) try {to a transactionalu32 cache_version) {\n#ifdef PS5_NATIVEabove in the same script, so the latershader_costsinstrumentation wrongly looked for the original signature after it had been eliminated. - Fixed
tools/prepare-vulkan-port.pyto insertEden::Performance::VulkanTimer(18)at the post-rewrite final serializer signature, preserving transactional .new flush/rename+rollback. Added an independent AST/real literal transformation-order test insidetools/check-vulkan-pipeline-persistence.pythat reproduces the rewrite and fails if the later timer anchor does not appear exactly once; catches this before an expensive CMake/configure. Old Vulkan pipeline cache atomic C++ test retained. - The failed run's ~2.86 GiB dependency/ccache snapshot was saved with key
prospero-eden-encore-040-Linux-09d8585e66f81caae8fb4809ac86b7972d1a50db98350d71e530ca2e086f9039-37843116788; use normal restore-key prefix for the next controlled full build. No staged app artifact exists from this run. No native binary was produced. No UI changes, no shipping branch merge, no published release, no Mac-side commits. - Mac testing is currently unavailable (remote desktop device offline). Require the Linux source-only gate testing the new Vulkan patch-order regression before the next
[full-build]controlled developer run; once green, follow native compilation to the next REAL failed stage and correct precisely rather than guessing. Keep Issues #7 and #8 open until hardware/gameplay qualification.
2026-10-08 — Third controlled PS5 build, Vulkan generator-order source gate GREEN
- Core source CI #37843933337 SUCCESS after adjusting
prepare-vulkan-port.pyVulkan cache serializer timer to use the generated transactional function signature. Newcheck-vulkan-pipeline-persistence.pytest statically evaluates the real AST literalvulkan_cache_save_replacementandshader_costsand confirms the timer anchor is present exactly once after the earlier rewrite, that the timer is injected before the PS5 branch, and that atomic rename persists. This addresses exact generator mismatch from native build #37843116788 without weakening fail-fast anchors. - Launch next GitHub native PS5 workflow using this
[full-build]commit ondev/ps5-sparse-jit, without publishing a Release and without touching shipping default. Restore already-saved dependencies/build caches; do not rename working artefacts or restart native build manually outside CI. Follow the native stages and fix first observed generator/SDK errors. This records launch intent only; do NOT claim a compiled app until native job and artifact are actually confirmed.
2026-10-08 23:48 PS5 real FC27 crash: dense JIT memory starvation + PlayStation Auto in-match mapping regression
- User ran the ACTUAL native GitHub-successful build #37844050191 on FW13.60 and uploaded
boot-trace.prev(1).txt,boot-trace.sandbox-prev(1).txt,boot-trace(1).txt,crash-20261008-234818*.txtandstderr(5).log. FC27 reached the main menu in ~1 min and matches load in ~10-20sec. It displayed about 30 FPS, felt stuttery and crashed a few minutes into the match; the old in-match button mapping also changed and game-provided Nintendo glyphs remain. - AUTHORITATIVE CRASH:
crash-20261008-234818.txtsays app stopped itself on CPUCore_1 fromstd::bad_alloc261 seconds after app launch, largest free contiguous direct-memory block 38MiB of 12GiB available pool, heap 1280MiB and 1016MiB in 5 large blocks.crash-20261008-234818-stderr.logsaysDirect allocation failed: rc=80020023 bytes=461373440(440MiB) beforeoperator new: heap exhausted.*-heap.logshowsEDEN_PS5_JIT_POLICY free_mib=11826 admission_budget_mib=4376 a64=1536,1508,1304 a32=1536,1536,1280 sparse=0, and eagerly maps the large dense A64 RX/RW JIT aliases. The previous HALF-of-post-3GiB global pool policy consumed ~4.3GiB physically committed before guest gameplay could allocate later buffers. Dense JIT has no safe online reclaim; the startup budget badly missed late guest/GPU direct memory needs. It is very likely contributory, although crash symbolization still needed to identify direct failed allocator call. - Hardware reality:
EDEN_VULKAN_FRAMEtelemetry includes five-second windows 22.562 FPS, 23.761 FPS, 24.717 FPS and max frame times 200-480ms despite superficially often showing constant 30FPS. Other logged compatibility clues includeInstruction PRMT (imm) is not implementedin Vulkan pipeline creation and hundreds offermi_2d.cpp:67: Source depth is not onereports near 141 seconds in the guest log. Not proven causally related to OOM and must be debugged as separate GPU topics. - FC27 release logs:
[ProsperoEden] glyphs: In-game button art: Nintendo original (rule=unsupported)— no FC27 legal/verified graphics pack; mapping alone cannot alter source title textures.Controller profile PlayStation, map {}was the new fixed behavior. Compared actual shipping branchfix/0.40-zbic-13.60which callspad->SetAdaptivePlayStation(effective_layout == 0 && !custom_mapping), whereas new dev mistakenly calledfalse. RESTORED the exact previous conditional PlayStation Auto (in-match Switch-position physical face buttons, menu PS mapping by the existing heuristic) and log label; explicit Custom/Switch layouts unchanged. Added assert totools/check-controller-semantic-mapping.py. This is the previous user-qualified behavior; still requires hardware retest. - SOURCE FIX CANDIDATE FOR ALL GAMES: in
headless/experimental_performance.h, change dense JIT launch-time admission from one half to one quarter of the post-3GiB direct contiguous pool, keeping three quarters after host reserve available for guest GPU and late runtime allocations. Not a FC27 whitelist, profile cap or total JIT hardcoded ceiling; per-worker 1536MiB Xbyak guard, 2MiB alignment, two independent guest ISAs and 8MiB dense headers remain. With observed 11826MiB at launch, this reduces eager physical JIT admission to 2188MiB, returning ~2188MiB to late allocations vs faulty 4376MiB budget. The C++check-jit-memory-policy.pynow includes this exact real-hardware crash input and synthetic saturation at 20GiB. No claim crash cured until native build + console test. - Updated
docs/FC27_EXPERIMENTS.md,docs/PS5_NATIVE_ARCHITECTURE.mdand Issues #7, #8. Artwork still requires qualified game-specific RomFS assets; do not conflate gameplay DualSense A/B mapping with texture glyphs. No UI redesign or changes to shipping branch. - CI PENDING at this checkpoint. Trigger lightweight
[core-ready]source preflight, inspect test results, THEN native PS5 build if source green, preserving cache and disabling Release. The user MUST receive actual outcome and follow-up PS5 same-match A/B requirements. Avoid reporting improved FPS or fixed OOM based on host tests alone.
2026-10-08 — PS5 crash-source regression green; candidate native validation run requested
- Core source CI #37850414513 SUCCESS at source SHA
3a7bec87984f, after two transient failures in obsolete guards, not code:check-ps5-architecture.pystill expected old JIT/2admission, andcheck-encore-ux.pyerroneously prohibited restoration of the previously qualified gameplayPlayStation Automapping. Both source tests now explicitly protect the new, hardware-evidenced quarter-pool memory admission and the restored old FC27 user-qualified input behavior. All host C++ A32/A64 policy, dense/sparse JIT mocks, glyph integrity, controller semantics, cache and approved nonmodified UI source gates passed. - NEXT: trigger controlled
[full-build]PS5 SDK/CMake GitHub job using preserved dependencies/ccache; keep Release publishing barred to shipping branch. Test in real FC27 13.60 with no cache deletion. Must monitor run through packaged PS5 app artifact, not declare crash fixed until actual hardware retest. GPU PRMT shader instruction and Fermi2D 2D source-depth warnings remain open and unproven cause of crash.
2026-10-09 — User demands no eager physical JIT reservation; unresolved GPU and glyphs audit
- User correctly objected that reducing the dense JIT upfront budget from 4376 to 2188 MiB is NOT the promised no-upfront-physical-commit memory architecture. Explicit distinction: reserving stable RX/RW virtual address ranges for Dynarmic is necessary to keep generated x64 branch targets valid; claiming entire physical 2–4GiB direct-memory backing at launch is the bad behavior. The current shipping path is still dense and eagerly allocates. Quarter-pool is an interim OOM reduction only.
- Existing
src/memory_pages.cpphas a developer-only sparse code allocator (two stable RX/RW VA reservations, real 4MiB initial direct-memory bootstrap, 2MiB explicit on-demand chunk commits onBlockOfCode::EnsureMemoryCommitted, rollback and free; PS5sceKernelReserveVirtualRange/sceKernelMapDirectMemory/mprotect). Runtimeheadless/main.cppactivates it only withEDEN_DEV_PROFILEandEDEN_SPARSE_JIT_DEVplus per-titleexperiments.json, afterProbeSparseJitAlias(). Normal native release binaries DO NOT use it. Firmware 13.60 exec mapping and real code execution have NOT been validated; do not simply flip on by default. - Strengthened
tools/check-jit-sparse-host.pyto compile the realheadless/jit-allocator.hnative branch together with realsrc/memory_pages.cppagainst a strict mocked PS5 VM/kernel + lightweight Xbyak shim. A 64-MiB virtual JIT arena must use 4 MiB physically committed at creation, then only 10 MiB after explicit code emission growth, then release all owned physical memory when JIT frees. This addresses the missing end-to-end allocator-to-mapper host contract. Test still requires CI before claiming PASS, then a firmware developer-only probe. The existing sparse split-brain code/path should NOT be enabled in shipping before the real console test. - Other FC27 non-solutions identified at pinned Eden source:
PRMT (imm)triggersThrowNotImplementedinsrc/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp(not RADV-specific).fermi_2d.cpp:67 Source depth is not oneisUNIMPLEMENTED_IF_MSG(regs.src.depth != 1)in pinned upstream; over 20 repeated reports were captured just before crash. The missing Maxwell opcode and nontrivial layer/depth blit must be implemented after verifying exact field encoding/semantics, NEVER silenced or assumed fixed by JIT. Frame logs reveal nominal 30FPS can mask 22–27FPS multi-second drops and >300ms long frames. No GPU/FPS fix claimed this turn. - FC27 graphic symbols remain Nintendo despite PS5 input mapping: actual release report
Nintendo original (rule=unsupported). No verified FC27 RomFS atlas replacement currently exists; specific art assets and hashes are necessary. Never claim otherwise. No new UI design/run. - Previous controlled native #37850528993 SUCCESS, including native stage, app validation, cache save and artifact uploads. This is the older dense quarter-pool candidate: its success is not evidence of new sparse qualification, visual glyphs, PRMT or Fermi fixes. User may independently test that binary; no source commits while it was compiling or uploading. Source testing of new allocator integration is queued next. Issues #7 and #8 updated, shipping branch untouched.
2026-10-09 — Critical sparse JIT fallback defect removed; allocator/physical-demand host gate
- During actual
headless/jit-allocator.hreview, developer-only sparse branch silently fell back toCommon::AllocateMemoryPages(size)(FULL dense direct-memory allocation) wheneverReserveSparseJitCode(size)failed to reserve VA or its 4-MiB bootstrap. This recreates the user-observed delayedstd::bad_allocmemory pressure and violates explicitly selected demand-backed code-cache semantics. Removed fallback-to-dense when sparse was explicitly selected. It now logsEDEN_JIT_SPARSE_RESERVE_FAILED ... fallback=smaller_virtual_arenaand returns null; existing DynarmicConstructWithCapacityFallbacktries smaller capacities from all A64/A32 guest cores and fails startup visibly if even the baseline sparse map cannot be established. Normal release sparse OFF => dense unchanged; no user-facing profile or UI changes. - Host mocked VM test
tools/check-jit-sparse-host.pynow compiles ACTUAL PS5jit-allocator.hadapter with ACTUAL PS5memory_pages.cpp; asserts 64-MiB virtual JIT arena commits physical memory 4-MiB initially, 10 MiB after explicit code growth, zero on free. Added forced failure of first AND second physical bootstrap page: sparseallocreturns null, no fallback allocation of full 64-MiB dense block, no dangling pages. - The source regression earlier #37851656248 SUCCESS on earlier sparse integration test before the strict fallback change; new code needs a fresh source CI run now. Do not declare full PS5 sparse working: FW13.60 mapping and executable code still unqualified, sparse remains explicitly dev-only/disabled in the successful PS5 app #37850528993. User may test that already built quarter-pool candidate; it does NOT include these later sparse source fixes. For GPU PRMT/Fermi2D and FC27 artwork see Issues #8 and #7.
2026-10-09 — Verified corrected demand-backed sparse JIT host integration CI
- GitHub Actions core source CI #37851990849 SUCCESS /
CORE_PREFLIGHT_ALL_PASSfor strict sparse allocator, after modifying outdatedtools/check-ps5-architecture.pythat mistakenly required an unsafe fallback-to-dense (same correction to previous tests, now contract checks no eager physical fallback). Logs prove ACTUAL C++jit-allocator.hXbyak adapter +src/memory_pages.cppintegration:64MiB virtual / 4MiB physical at boot, 10MiB after growth, zero after free, plus first and second 2-MiB chunk failure pathsEDEN_JIT_SPARSE_RESERVE_FAILED ... fallback=smaller_virtual_arena. No ownership leaks. - GPU follow-up PINNED code audit:
src/video_core/texture_cache/image_info.cppexplicitly supports only one 3D Fermi source slice, constructssize.depth=1even for block-linear inputs, while software blitter calculates unswizzle sizes from originalsurface.depth. Cannot just deletefermi_2d.cpp:67warning when FC27 requests depth !=1: real semantics, layer selection and correct GPU-vs-software path unqualified. Pinned shaderTranslatorVisitor::PRMT_immthrows not implemented. Need bounded raw instruction capture and verified Maxwell bitfield decode/golden shader tests before implementing. These remain open, not fixed by memory policy or source CI. - The user-installed native #37850528993 is a successful dense quarter-pool build and predates strict sparse adapter changes. This latest pass is source-only, NOT a new PS5 binary and NOT proof sparse W^X execution or FC27 crash stability. Do NOT mislabel progress or enable sparse by default before real developer FW13.60 mapping/execute validation. All shared updates in Issue #8, graphical pack Issue #7 still open.
2026-10-09 — FC27 user reproduced regression: pause/popups re-enter Nintendo/PS input semantics unexpectedly
- User testing PS5 FC27 with new successful quarter-pool native binary #37850528993 confirmed that in-match face buttons seem normal, but dialogs/modal overlays, pause screens and match menus switch to unwanted Switch-style behavior. Previously reported fixed; merely restoring PlayStation Auto from old shipping branch proved insufficient. Distinguish PHYSICAL controller mapping from FC27-rendered Nintendo artwork: the real FC27 glyph pack remains absent, so no input change can fix graphic letter/button images.
- AUTHORITATIVE SOURCE ROOT CAUSE from Git history: commit
ce43050765a8implemented motion-derivedPad::ConsumeUI↔gameplay heuristic. It drivesmenu_evidenceon Options/Touchpad or D-pad when sticks briefly quiet (250 polls/sec), settingmapping_context=uias if the title left gameplay, although FIFA/FC modal overlays use all those buttons mid-match. The last fix switchedSetAdaptivePlayStationback on without changing that wrong heuristic. No generic game/scene flag exists in raw DualSense buttons. - Fix source on
dev/ps5-sparse-jit: new pure C++headless/playstation_auto_context.htracks title-sessionMode::menuuntil sustained controller movement, then latchesMode::gameplayacross all quiet periods, D-pad, Options and touchpad.headless/pad.cppuses this context for BOTH face buttons and touchpad. It never flips mapping while face button is physically down; logs a singleEDEN_PAD_CONTEXT mode=gameplay reason=sustained_activity sticky=1. New title constructs new Pad, resetting to menu. Explicit custom PS/Switch maps still bypass Auto. Realheadless/devices.hintegrates state. No UI visual code changed. - Important limitation: this solves false gameplay→UI transitions while the same title stays in match/popups, but doesn't know when an actual title goes back to its main menu later. The gameplay selection stays latched until the next title session. A true generic menu/context discriminator needs game UI state (not inferred from user input); do not claim every in-game menu is automatically PS semantics or graphic PlayStation glyphs appear. The underlying physical mapping still uses
kSwitchMappingwhen internalgameplaycontext is active, as on previously user-tested branch. - New host-compiled test
tools/check-ps5-autocontrol-context.pycovers 10,000 (40s) no-motion overlay polls, face-button transition while held, subsequent gameplay, fresh title reset, and source glue static contract. Added to both CI source-only and native workflows. Updated oldcheck-controller-semantic-mapping.pyandcheck-encore-ux.pyinvariants for the new state. Issue #8 updated. Full source CI to be triggered by[core-ready]and must be examined for real compiled errors before suggesting a PS5-native rerun.
2026-10-09 — PlayStation Auto popup source CI GREEN; bounded GPU native evidence generation
- Controller regression actual host CI #37852952724: SUCCESS. Independently compiled C++
playstation_auto_context.htests persistent in-match mapping during 10,000 fake pause/menu polls (40 s), after Options/touchpad/D-pad navigation, no mid-held-face remapping, normal title reset and custom/explicit Switch policy. Engine source integration tests and approved UI invariants passed. This is not yet an installed native game test: post-match actual main menu cannot be detected generically using only input motion, so sticky gameplay requires an explicit scene signal or manual selection for perfect cross-scene auto mapping. This is a deliberate bounded fix for false modal flips, not a universal main-menu solution. - Added
headless/gpu_native_observability.cmake, included fromheadless/CMakeLists.txtfor PS5_NATIVE only. At CMake generation, read exact pinned originalshader_recompiler/.../not_implemented.cppandvideo_core/engines/fermi_2d.cpp, replace the precise functions by instrumented code, exclude original source from its compilation target, compile derived file instead. RealPRMT_imm(u64 insn): first 8 raw instruction wordsEDEN_GPU_PRMT_IMM raw=%016llx sample=%u, still callThrowNotImplemented(no fake implementation). Real Fermi2D depth!=1: first 8 diagnostic records with src/dst depth, layer, block_depth and raw address, no modification of src depth or blit route. Prevent potentially high-frequency generic warning spam. Audit code generation withtools/check-gpu-native-diagnostics.pyin both light and native CI. - Added these diagnostics purely to support true shader decode and correct 3D/multi-slice Fermi2D implementation later; neither problem is solved by adding detailed logs. NVIDIA PTX docs show prmt generic selector byte semantics but do NOT establish bitfield encoding for MAXWELL
PRMT_immfrom an Eden guest instruction. Do not claim arbitrary PTX translation is identical or throw is fixed; request opcode raw from next instrumented binary and golden-host verification. - Fresh source CI needed now after native generator wiring, then a controlled PS5 SDK build if green. User testing earlier quarter-pool native build #37850528993; do not confuse that binary with later source changes. Firmware FW13.60 sparse JIT remains disabled by default and not hardware qualified. Issues #7 and #8 remain open, UI approved and shipping branch unchanged.
2026-10-09 — Controller modal + native GPU observability host source gate GREEN; controlled native build pending
- Core source CI #37853227887 SUCCESS on HEAD
eac45663313b0c7ebe75c3640b0c8fcc067fd48e: includes host C++ PlayStation Auto popup test, existing physical button semantics, A64/A32 JIT and dense/sparse mocks, shader source policy and the newcheck-gpu-native-diagnostics.pyCMake source contract. - Next controlled
[full-build]PS5 SDK run required to compile and stage the nativegpu_native_observability.cmakegeneratedshader_recompilerandvideo_corereplacements. Native includes bounded raw PRMT and unsupported layered Fermi2D logs; it does NOT implement their missing shader/blit functionality. Do not publish a Release, change accepted Home UI or shipping branch, or claim firmware/hardware test. This controlled build's app contains the new modal-controller candidate which needs user FC27 PS5 retest.
2026-10-09 — STOP all GitHub runs until full source audit; FC27/Ultra BOTW + PS5 menu/hero user hardware report
USER GATE (authoritative): no further GitHub Actions run, CI, PS5 build, UI preview, release or compile request while the source work is incomplete. Do not trigger [core-ready] or [full-build] and do not commit messages carrying any workflow marker. Source edits on dev/ps5-sparse-jit use [skip ci] only. Resume native qualification only with explicit user authorization after reporting what is genuinely finished and what still needs runtime verification. Do not claim “parfait” without actual PS5 qualification.
- User tested real native build #37850528993 on FW 13.60 with new direct-memory JIT policy; multiple FC27 launches, nominal 30 FPS, NO freeze/crash, some visible reductions to ~18-24 FPS and many delayed 100-496 ms present frames; subjective 50 FPS after a few minutes but game visibly stutters. Second launch not noticeably better. BOTW under Ultra generally runs smoothly with a few FPS drops. The 50FPS indication is NOT the actual five-second 30-FPS present rate.
heap(5).logprovesEDEN_PS5_JIT_POLICY free_mib=11824 admission_budget_mib=2188 ... sparse=0: native release is still physically dense, NOT demand-committed JIT. No new crash evidence from this session; extended robustness must be confirmed later. - PS5 Home is visibly jerky during held-up/down menu navigation; release
stderr(6).logreportsslow frame: update 122 ms/175 ms, draw 0, present 1, often adjacent to Nlib enrichment; the exact causality is not proven from release logs. Source audit found synchronousTextures::pumpfile I/O and TGA/JPEG decode/downsample ON UI update thread every time it loaded a visible hero/card texture. Refactored to a single backgroundstd::asyncCPU image worker + nonblockingwait_for(0)polling + GL texture upload only on owner/UI thread (at most one result/frame), unique generation tokens to reject stale work after path invalidation, exception/backoff handling and wait before services destruction. Important caveat: GL uploads and other UI synchronous operations can still stutter; PS5 measurements pending, NO proof of full smoothness yet. - User reported Hero description after returning from a title becomes wrong/short English copy ("The world games…"). Before patch, Home used Nlib
intro(marketing teaser) in preference to its realdescription, even when the full title description existed; in warning cases promo intro could even hide the actual reason. IntroducedHome::last_descriptionandRecent::descriptionpropagated from same game/title ID both when initially reading Nlib and after async enrichment/library refresh; hero caption now prefers actual titledescriptionto teaser, with real setup/language warning higher precedence. This is a source candidate, not verified against user's exact cached FC27 Nlib record; no hardcoded title text or UI image changes. - Controller: logs show repeated
EDEN_PAD_CONTEXT mode=gameplay↔mode=ui reason=navigationduring FC27 popups/Options/D-pad. Developer branch now containsplaystation_auto_context.hsticky match context after sustained game input and future host C++ regression test (40 seconds of mock pause UI), without redefining face mapping on each modal. This fixes the provable heuristic flip but does not detect a real transition back to an entirely separate title menu, nor convert Nintendo textures into actual PS glyphs. Explicit custom/Switch remain fixed. No fabricated universal scene detector. - Historical latest GitHub native build #37853342541 FAILED only at
Validate freshly built staged app: the C++ app was compiled/staged and uploaded resumable, buttools/ci/check-staged-app.pystill expectedEDEN_PAD_CONTEXT mode=ui(old unsafe transition no longer emitted by new sticky controller). Removed obsolete binary assertion, now checksEDEN_PAD_CONTEXT mode=gameplay reason=sustained_activity sticky=1; updated earlycheck-encore-ux.pyguard to catch any package/code drift before the next expensive native run, which user currently FORBIDS. This failure is not a new PS5 firmware regression. - Source tests added or changed:
tools/check-nlib-ui-recovery.pyguards same-game Hero description, warning priority and asynchronous image worker;tools/check-ps5-autocontrol-context.py,tools/check-controller-semantic-mapping.pyandtools/check-encore-ux.pyguard sticky PlayStation Auto and prior qualified in-match keys. NOT RERUN SINCE USER GATE; changed source is uncompiled/unverified, even though old source CI #37853227887 was green before these newer edits. Do not claim new CI green. - Earlier GPU work
headless/gpu_native_observability.cmakeexists already for developer-only bounded rawPRMT_imm(Maxwell) and unsupported Fermi2D layer register diagnostics. Those preserve original shader rejection and Fermi incomplete operations; do not claim compatibility fixed. Correct implementation needs decoding/known-game register evidence. PS5 sparse JIT host mappers previously passed but FW13.60 executable aliasing not qualified; keep sparse opt-in/dev-only. The in-game PS glyph catalogue has no qualified FC27 textures, so game graphics remain Nintendo even if controller semantics are fixed. All remain open, user forbids further run until fully reviewed.
2026-10-09 — Further source-only PS5 launcher hotspot attribution; NO runs
- Preserved requested no-run gate. The launcher animation problem is a combination of known synchronous decoded-artwork work (now moved to one asynchronous worker, source uncompiled), occasional synchronous glTexImage on owner thread, Nlib async merge into GPU texture cache and polling filesystem game presence every 2 seconds. Do not assume the background decoder resolves every stall.
- Added a bounded diagnostic
EDEN_UI_HOTSPOT phase={texture_upload|media_merge|game_presence_scan} elapsed_ms=NinLauncher::update(): a record only for update sections exceeding 24 ms, throttled to 1 message/2sec, so the NEXT explicitly authorized PS5 test can isolate a remaining bottleneck without noisy per-frame logging or timing guesses. Covered by static source contract intools/check-nlib-ui-recovery.py. Existing driverslow frame: update/draw/presentstill available. No real performance improvement is claimed until repeat hardware test. tools/ci/check-staged-app.pyupdated after investigating FAILED native #37853342541: exact failing assertion wasAssertionError: stale launcher binary: missing b'EDEN_PAD_CONTEXT mode=ui'atValidate freshly built staged app. The new native binary had already deleted the old UI-mode diagnostic deliberately, hence binary was correctly more recent than stale assertion. New guard requiresEDEN_PAD_CONTEXT mode=gameplay reason=sustained_activity sticky=1andtools/check-encore-ux.pychecks that the actualheadless/pad.cpphas matching source literal before ever starting an expensive native pipeline again. Unverified since user stopped runs, do not conflate source correction with a now-green native job.
2026-10-09 — Follow-up Fermi2D diagnostic integrity (NO RUNS)
- On
dev/ps5-sparse-jit, native-onlyheadless/gpu_native_observability.cmakenow preserves the originalUNIMPLEMENTED_IF_MSGsoft assertion viaAssertFailSoftImpl()for every unsupported Fermi2D source-depth event. First eight incidents emit bounded detailedLOG_CRITICAL(Debug, ...)traces; subsequent incidents still invoke the soft assertion without unbounded console log spam. No depth clamp and no false implementation.tools/check-gpu-native-diagnostics.pynow checks the critical log and preserved assertion contract. - Source-only edits:
5baf19369784(instrumentation) and1a1694c2742b(test), both[skip ci]. Uncompiled / no new CI, console run, native validation or claimed FC27 fix. Continue respecting the user STOP-GitHub-RUNS gate, do not touch approved Home design or shipping branch. - Remaining: verify host source contract locally if available, then qualified PS5 SDK compilation and actual instrumented Maxwell PRMT/Fermi observations only after explicit user authorization; UI frame pacing, A64/A32 JIT resource utilization, sparse aliasing and in-game PS glyphs remain unresolved.
2026-10-09 — Seven user hardware logs re-supplied; source implementation NOT COMPLETE
User supplied fresh raw boot traces (current and two prev), heap(6).log, heap.prev(2).log, stderr(7).log, stderr.prev(2).log from PS5 firmware 13.60, native build Oct 8 2026 21:12:38. These are hardware observations from an earlier binary and DO NOT qualify current dev sources.
heap(6).log:EDEN_WORKER_TOPOLOGY ready=0 distinct_cores=1 cpus=0,0,0,0,0means affinity/topology reporting is not ready; DO NOT falsely interpret it as proven actual game-thread physical core placement. Investigate native scheduler and worker affinity implementation, and obtain true per-worker CPU placement when test is authorized.EDEN_PS5_JIT_POLICY free_mib=11824 admission_budget_mib=2188 ... sparse=0: dense JIT; optional sparse implementation unqualified, zero claims of fully adaptive memory.- FC27 Vulkan present intervals include 18.043 FPS, 19.341 FPS, late frame maxima 496.263 ms. Periods near 30 FPS are real but not sufficient for global fluidity. Second run was not subjectively better. Keep distinguish present FPS vs overlay FPS.
- Launcher
slow frame: update 122 / 175 / 168 mswith draw 0 / present 1ms; synchronous filesystem presence scans and artwork decoder were candidates. Source-only improvement moved periodic presence path checks into a single asynchronous snapshot task inlibrary.cpp, declared inlauncher.hpp, joined inlauncher.cpp;check-nlib-ui-recovery.pystatically guards this. Some rare missing-path recheck still synchronous; no measured improvement yet. - FC27
EDEN_PAD_CONTEXT mode=ui reason=navigation/ gameplay oscillations confirm the old binary problem; candidate source sticky gameplay logic is not hardware-qualified and does not modify Nintendo in-game glyph textures. stderrhas no current boundedEDEN_GPU_PRMT_IMM/ Fermi instrumentation because these logs are from older native source. Unsupported PRMT/Fermi work remains functional implementation gap.- User requires implementation work across all games, including experimental options where supportable, before any closure or promotion. No new Actions workflow, CI or PS5 build until explicit authorization. Do not declare tasks implemented if only diagnostic. No premature final signoff.
- Local Mac Desktop Commander device observed offline. Therefore source changes via GitHub are uncompiled and untested locally; do not say all gates passed.
- Async game-presence implementation commits:
7e75cf2a8cc2,248a4ae350fb,b73e256b38f1,5d4753e91603, all[skip ci]. Investigate remaining synchronousdrop_missing_games()paths and full UI responsiveness in native build when allowed.
2026-10-09 — Physical topology failure source root clarified
headless/performance.cppPlatformChecks()reportsEDEN_WORKER_TOPOLOGY ready=0 distinct_cores=1 cpus=0,0,0,0,0when x2APIC-derived physical topology discovery cannot establish five distinct cores. This signal does not measure actual guest scheduling, and zeros are empty candidate placements, not OS binding proof.- Actual experimental fallback already exists:
EnableExperimentalLogicalPlacementImpl()picks five allowed logical CPUs, avoiding false claims about physical SMT topology. It is deliberately activated only inheadless/main.cppwhenPS5_NATIVE && EDEN_DEV_PROFILEand the per-titleexperiments.jsonexperimental flag is selected; therefore the user's shipping-build logs do not exercise it. Do not promote it blindly to default placement before native A/B testing. - Required implementation gate remains: inspect worker startup/thread-affinity application and establish physical vs logical CPU occupancy/counters with a PS5-dev trace; then tune placement based on real latency not arbitrary static distribution. FC27 runtime and menu responsiveness still unvalidated.
2026-10-09 — Fix duplicated UI filesystem checks in async presence pass; open work
- Following the earlier async routine presence poll,
check_games_present()still invokeddrop_missing_games()whose predicate synchronously re-statted every library game on the UI thread. This defeated part of the offload in missing-game cases.drop_missing_games(const std::vector<std::string>* known_missing = nullptr)now consumes the worker's already-checked filename snapshot for periodic polls, avoiding those duplicate UI-thread filesystem reads. Direct launch/removal paths retain original explicit check behavior.check-nlib-ui-recovery.pyguards the snapshot call and predicate. Commits542911898d76,2886e702508e,b472c172714b, all[skip ci]. - Open:
read_home()can still perform synchronous I/O when disappearance is detected; the snapshot may become stale if files appear between sampling and UI application. Reconciliation via the existing fresh library scan still needs confirmation. This is a source candidate, uncompiled and not hardware-qualified. UI latency and game-level frame pacing remain unresolved; no end-of-work declaration.
2026-10-09 — Consolidated no-build source repairs (still incomplete)
Authoritative no-run gate remains active. Do not run GitHub Actions, PS5 compilation, previews or release jobs; commits below used [skip ci]. The Mac remote developer machine was unavailable; none of the new code is compiled/PS5-qualified. Do not sign off the project as finished or equate instrumentation with implementation.
Launcher responsiveness candidate work on dev/ps5-sparse-jit:
- Library entry now calls
finish_scan(false), not blockingfinish_scan(true), and does not enumerate the filesystem synchronously on every navigation. Initial listings can appear once the background scan completes; opening title settings directly from an uninitialized list may still synchronously wait and needs further work. start_scan()collects per-title mod counts/disabled state on the same background snapshot worker asservices_.games();apply_games()no longer traverses mod directories during the UI update. Corrupt/inaccessible per-title mod data is isolated whilestd::bad_allocstill propagates, with no more than three recorded mod-scan errors. Home mod totals come from the cached game snapshot. This is a source candidate, not measured PS5 fluidity.- Routine two-second ROM-presence checks are asynchronous; the UI consumes the sorted worker result rather than doing a second full synchronous
statsweep. A potentially stale absence must now appear in two independent background scans before UI pruning. The old immediate explicit launch missing-ROM check remains intact. Some rareread_home()and explicit settings/library actions can still perform synchronous I/O; audit further before any claim of fully nonblocking UI. - Guard negative selection index during
apply_games(), and add source contracts/modelled missing-file convergence intools/check-nlib-ui-recovery.py. - Commits include
d2f6bd0a16be,f7394d25bd75,cde94bd52eeb,371347022856,c678ea820db3,b4ed5ffc7e0b,254fcaafe9bf,3a4f8cf2da7b,2c38f888684c,80b7abe53a11.
Global experimental policy, developer-only:
headless/main.cppacceptsexperiments.json.defaultsfor CPU logical placement, sparse JIT (onlyEDEN_SPARSE_JIT_DEVbuilds) and Vulkan trace for all titles, including missing/unknown IDs, while per-game fields override global defaults and Safe Launch disables experiments. Missing config leaves all switches off. This is not an automatic PS5 speed gain and not shipping-enabled. Documented indocs/FC27_EXPERIMENTS.mdand guarded bytools/check-experimental-performance.py. Commits4f92fc7c4186,4d70a4f8ca66,25d23048b483.- Sparse JIT
src/memory_pages.cppcomment corrected: failed fixed alias reservation does not silently allocate a dense full arena when sparse mode was explicitly chosen. This path remains unqualified on FW13.60.
Read-only GitHub source contract check confirmed key strings/structure for async presence, worker teardown, nonblocking entry, mod enumeration, global experiment defaults and Fermi soft-assert. This is not a compiler, not runtime validation and not full functional proof.
Implementation unfinished: FC27 real frame pacing, GPU/CPU queue attribution, physical topology correctness, dynamic RAM/VRAM pressure, non-throwing sparse mapping under FW13.60, multi-region JIT/trampolines, missing Maxwell PRMT instruction, layered Fermi2D blits, actual PS5 glyph textures and real automatic scene state for controller prompts. Preserve approved UI/UX and shipping branch. No unwarranted successful-build claims.
2026-10-09 — Home game-options action no longer waits for library scan; no-build checkpoint
- Home Triangle ->
Launcher::open_game_settings_at_fileformerly calledfinish_scan(true), which blocked the UI until first library enumeration + metadata/mod loading completed. Nowfinish_scan(false)is used: when data is still pending,pending_settings_file_stores the requested ROM andLauncher::update()completes the action once a scan finishes. Any subsequent key press clears the pending request; the update path also checks that Home is still active and no modal/launch is underway. When scanning is impossible, the pending request is refused instead of hanging indefinitely. - Source commits:
0efd38edad91,5f9acaffdd5e,380f68fbc520,cd8577698a14,ba7cefbd43ab([skip ci]). Added static regression guard totools/check-nlib-ui-recovery.py. No UI artwork/layout changes and no GitHub runs. - Fresh read-only connector audit checked eight source invariants: background game/mod scan, memory exception handling, two-poll presence confirmation, nonblocking library entry, deferred settings, universal developer experiments, Fermi soft assertion and test gates. All eight source-presence checks were true. Not compiled, not executed on PS5 and does not certify functional correctness.
- Remaining synchronous UI work includes initial
read_home()and selected-title settings reads; full frame pacing remains separate and unimplemented. PS5 CPU core placement, sparse mapping, GPU PRMT/Fermi, true PlayStation glyph texture integration and freeze root cause still open. No completed-project signoff.
2026-10-09 — Display-scaled artwork uploads and launch-time scan cancellation; source-only
New source changes, not compiled, all on dev/ps5-sparse-jit with [skip ci]:
Textures::cover(path,size)inheadless/prosperoeden/pe/ui/textures.cppnow chooses a 64..2048px power-of-two bucket for the requested physical display footprint, rather than assuming every image is a 256px cover. The background worker usesgfx::halveuntil decoded Nlib art is reasonably close to its target size. This prevents a 300-512px Library card from uploading an unnecessary 1920x1080 RGBA texture on the PS5 UI/GL thread, while preserving original 1920px art for the 1920px Home Hero.Entry::levelreplaced bytarget_pixelsand image-cache keys now include the bucket to prevent collisions. Commits98956d65f5e1,597290d9a4e1.- Large cached-texture eviction is now capped at two GL deletes per frame, rather than deleting every stale texture during a single D-pad update;
kMaxTextureReclaimsPerFrameintextures.cpp(e14a0f9a3092).tools/check-nlib-ui-recovery.pynow guards the artwork sizing/upload/reclaim contracts (3f33caadc354). - Launcher library scans now expose a cooperative
scan_cancel_atomic: after game launch or during Launcher destruction, the worker finishes the current enumeration, skips outstanding per-title mod inspection, and does not apply obsolete results after game selection. It still joins before Services destruction; no detached background work. Commits21c1b35a3f01,f2618ba3b053,5dfad30fef6a,5f625f433be9.services_.games()itself is not cancellable yet; the destructor may still wait for its completion, do not claim launch stalls solved. - These target universal launcher responsiveness, not FC27 in-game FPS. Source regression scripts were edited but not executed and no build or CI was started. Need compile on PS5 SDK and measure
EDEN_UI_HOTSPOTafter explicit user authorization. All GPU compatibility and frame pacing gates remain open, as do sparse JIT and in-game PS controller glyphs.
2026-10-09 — First library-scan exception handling corrected (source-only)
- After moving Library scans and per-title mod enumeration onto a worker,
finish_scan(false)still had a legacy catch handler that unconditionally setgames_loaded_ = trueeven when the first worker raised an exception and returned no games. This would resolve a deferred Home Triangle/settings request against a falsely 'valid empty Library' and misreport that a ROM was missing. finish_scannow preserves the previousgames_loaded_flag on failure; for a pending Home settings request it clears the pending action and reportsCould not load game list. Please try again.while retaining the ability to retry enumeration when the user next enters the library. Existing loaded entries remain available after a refresh failure. Static contract added intools/check-nlib-ui-recovery.py.- Commits
9cf6bf863f8dand9c308d05752e,[skip ci], no GitHub Actions, no build or console test. - Remaining: a currently active Nlib/media worker can still hold teardown while in a network or image operation; cancelling the optional mods phase does not cancel
services_.games()or an active network request. This must not be reported as an entirely nonblocking transition.
2026-10-09 — Native ROM enumeration cancellation + Home settings caching, NO BUILD
- The UI now caches per-title
HomeGameSettings and docked state inhome_settings_cache_rather than re-reading the same settings file repeatedly on recent-card navigation. Home quick-setting saves immediately update the cached entry beforerefresh_home_hero(); the cache is invalidated after editing a game's settings dialog or saving global preferences. This eliminates redundant I/O for reselected titles; a first uncached visit may still load synchronously and remains a responsiveness risk. Commits2ea20983211c,3711547e0ca0,ea8fa3003610,d0a6d707be92. - The previously added
Launcher::scan_cancel_now propagates intoServices::games(const std::atomic<bool>*); the overload has a default fallback to the original virtualgames()for host/preview mocks.EdenServicesoverrides the new overload and checks cancellation before native enumeration, after directory and add-on scanning, between ROMs, and after a ROM's metadata extraction before title-ID/Nlib/add-on processing. It returns an empty discarded snapshot and releasesbridge_via RAII;finish_scanignores results after cancellation. Commitsec40561393c5,983a2eab0808,7b55c46f5dc2,7cdf0a4148c1,0da779adfb89,89fbfb7c7801,80e593dd99f9. - This is cooperative, not preemptive: the kernel read of the directory,
eden_scan_addons, and a single in-flighteden_extract_game_metadataremain uncancellable while running. Existing Nlib media workers may also prolong Launcher destruction. Avoid claim that all launch waits or frontend stutters are solved. tools/check-nlib-ui-recovery.pysource-contract assertions updated, but not run on the PS5 SDK; all above commits have[skip ci]. Preserve approved UI visuals and PS5 release branch. Still open: real GPU/CPU bottleneck fixes, PRMT, Fermi2D depth slices, physical CPU topology, sparse JIT qualification and automated in-game PS glyphs.
2026-10-09 — First real Fermi2D base-layer compatibility candidate; NO BUILD
- The upstream software blitter in
eden-emulator/mirrorsrc/video_core/engines/sw_blitter/blitter.cppalready callsUnswizzleSubrectwith the originalsrc.depthand block-depth, andSwizzleSubrectfor destination.textures/decoders.cppexplicitly hardcodesorigin_z = 0; the subrectangle decoder processes the first z slice only when given one plane's worth of lines. - A PS5-native-only CMake-derived Fermi implementation in
headless/gpu_native_observability.cmakenow handlesregs.src.depth > 1only forsrc.layer=0,dst.layer=0,dst.depth>=1,Operation::SrcCopy, andclip_enable=0. It bypasses the unverified accelerated 3D path and calls the pinned software blitter using temporary source/destination surface descriptors withdepth=1(while preserving originalblock_depth/layout), so unrelated 3D slices are not read into temporary buffers. Original guest descriptors and addresses are never modified. The first eight successful base-layer copies emit boundedEDEN_GPU_FERMI2D_Z0_SOFTWAREevidence. - All other source-depth anomalies continue the bounded
EDEN_GPU_FERMI2D_UNSUPPORTEDtrace and originalAssertFailSoftImpl()contract. Nonzero z/layer copies are not implemented; no fake normalized depth or silently ignored operation. MaxwellPRMT_immremains unimplemented with bounded raw traces. - CMake now fails closed if pinned software
src.depth,dst.depthandorigin_z=0anchors change.tools/check-gpu-native-diagnostics.pyverifies source contract. Source commits043ac5a858bbandc50b2fa6f365,[skip ci]; a read-only connector comparison against current public Eden mirror found all 6 expected source anchors. Not an SDK build, not proof pinned source matches, and not a console validation. - Native qualification gates: proper 3D-to-2D slice pixels and no GPU regression, worst frame latency from software fallback, clipping/format/stride constraints, leak/teardown and FW13.60 crash resilience. If pinned blitter/decoder semantics differ, build must fail rather than introduce wrong pixels. All Fermi layers beyond z=0 and PRMT remain open.
2026-10-09 — Maxwell PRMT Index compatibility code (source candidate; NOT BUILD-QUALIFIED)
- Replaced the prior diagnostic-only
PRMT_imm(u64)wrapper inheadless/gpu_native_observability.cmakewith genuine Eden IR translation for NVIDIA Maxwell PRMT Index mode 0. Decoder uses SM50 immediate opcode0x36c0register A bits 8..15, B bits 39..46, immediate 16-bit selector bits 20..35, destination bits 0..7, mode bits 48..50. Each 4-bit selector nibble chooses A/B, byte number 0..3 and sign-bit replication (0xff if selected byte MSB is 1, 0 otherwise). Implemented viaBitFieldExtract, logical shifts, bitwise masks/OR; no fake zero result. Mode 1..6/7 stillThrowNotImplementedwith boundedEDEN_GPU_PRMT_IMMlog. Supported mode emits at most eightEDEN_GPU_PRMT_IMM_INDEXlines. Commit81d83e3a50cd. - Also replaced
PRMT_reg(u64)diagnostic-only stub with genuine dynamic register-selector Index mode 0 translation, using selector register bits 20..27, A/B registers and runtime IR shift/select/mask/sign-replication. Other modes throw with boundedEDEN_GPU_PRMT_REG_UNSUPPORTEDlog; supported variant emits boundedEDEN_GPU_PRMT_REG_INDEX. Commit57583029970e. - Source encoding cross-checked against Nouveau Mesa
sm50.rsimpl SM50Op for OpPrmt(reg opcode0x5bc0, imm0x36c0, selector and mode bit ranges), andir.rsPrmtSelBytenibble sign-bit semantics; Eden mirrorbitfield_extract.cpp,integer_shift_right.cpp,common_funcs.cppconfirm intended IR emitter ops exist. Read-only reference check, not proof the pinned local dependency builds. - Source contract
tools/check-gpu-native-diagnostics.pyextended with exact decoder predicates and pure-model representative byte permutation/sign-replication cases, plus explicit unsupported-mode throw retention. Commits2e3e44b19d2f,c7dbb95a030dand header docsf99ef28925ed.[skip ci], no CI, SDK build or PS5 run; do not claim PRMT compatibility confirmed in games yet. - Still unsupported:
PRMT_rc,PRMT_crand non-Index modes, plus multi-layer Fermi2D beyond z=0. The user demanded all actual implementations; this is an incremental functional subset, not a final signoff. Continue implementation/compatibility work and preserve no-GitHub-run gate.
2026-10-09 — Additional guarded Fermi2D pitch-linear layer compatibility (SOURCE ONLY)
- Fermi2D GPU compatibility derived from the pinned source now also accepts nonzero source/destination layer IDs for pitch-linear images when:
source.linear==Pitch,destination.linear==Pitch, bothlayer<depth, formats identical,Operation::SrcCopy, clipping disabled, dimensions nonzero, pitch nonzero and >= width*bytes/block. It computes the appropriate plane addressoriginal_GPU_address + pitch * height * layerin u64, rejects overflow and invalid geometry, creates temporary one-plane descriptors withdepth=1andlayer=0, and runs the original software copy. Original GPU register state remains untouched. Block-linear z>0 is not implemented; non-Index PRMT modes not implemented. Absent preflight conditions retain the originalUNIMPLEMENTED_IF_MSGsoft asserts. - The original Fermi
src.layer/dst.layerexceptions are replaced only under that narrow predicate, and thesrc.depth!=1check likewise exempts only the already-guarded z0 and pitch cases. CMake aborts at configure time if pinned layer/source-depth/copy anchors have drifted.tools/check-gpu-native-diagnostics.pyincludes conditions, overflow model and layer-index examples. Source commitsb6f6f591ed52,43407cb873bd,8a5f1c846af6,fc751ec36440,7b57294c3e9f, all[skip ci]. - Important qualification: Not compiled or tested on PS5, no empirical validation of texture colors, Fermi layout semantics or speed, no new release or build. Software pitch copies could be expensive; remain an experimental source candidate until a source-gated native build and instrumented real-game output test are explicitly authorized. Do NOT claim the entire Fermi2D 3D-layer problem is solved; block-linear nonzero z, incompatible formats and clipping remain unsupported.
2026-10-09 — PRMT compile-time golden oracle (NO BUILD OR RUN)
- Native CMake-generated
maxwell_prmt_observed.cppnow embeds a smallconstexpr EdenPrmtIndexReference(a,b,selector)implementation and fourstatic_assertfixtures for identity, selecting B register, MSB sign replication and zero sign replication. This creates a compile-time invariant when a user-authorized SDK build eventually runs, with zero emulator runtime overhead. It does not prove the emitted shader IR faithfully matches the oracle until shader pixels can be checked on hardware. - Source-contract
tools/check-gpu-native-diagnostics.pynow requires the generated oracle and its static assertions. Commitsd399b36db7a2and793bf7e5537f,[skip ci]. No Actions/CI/native compilation executed. - The user requires complete runtime implementations, not a final source-only signoff. Continue preserving release branch and approved UI, and keep the open areas explicit (PRMT non-Index, non-pitch Fermi z>0, sparse JIT runtime, guest CPU topology, FC27 pacing and PS in-game glyphs).
2026-10-09 — Reject invalid Fermi experimental copy rectangles
- Both new software-only routes (3D base z0 and pitch-linear nonzero layers) now validate the actual
Configrectangle inFermi2D::Blit: nonnegative origins, strictly positive source/destination dimensions, ends <= surface widths/heights. Invalid rectangles log at most eightEDEN_GPU_FERMI2D_SOFTWARE_RECT_INVALIDsamples, preserveAssertFailSoftImpl(), andreturnwithout invokingsw_blitterwith a negative-to-unsigned or OOB rectangle. The historical normal-depth accelerated path is unchanged. Static gate intools/check-gpu-native-diagnostics.pyenforces the guard before the software call. - Source-only commits
45c430c710ca,913abaff6e09,[skip ci]. No Actions or native builds. This guards the experimental scope; it does not qualify complete Fermi compatibility, render speed or FC27 fixes. Work remains open.
2026-10-09 — Frame-loop artwork cache CPU cleanup + robust uneven sparse JIT reservation (NO BUILDS)
Source-only commits on dev/ps5-sparse-jit, with [skip ci]; approved UI/branding and fix/0.40-zbic-13.60 untouched.
- UI texture-frame CPU cost:
headless/prosperoeden/pe/ui/textures.cpppreviously allocated and sorted astd::vector<pair<last_used, key>>on every frame while the cover cache exceeded 160 entries. Its pending decode queue was avectorwith front erasure O(n), another scroll-sensitive hot-path cost. Now the cache scans for the oldest eligible completed cover with no temporary sort/vector and deletes at most two textures per frame, keeping the protection for covers used within the last two frames. The decode queue is astd::dequewith O(1)pop_front; no media decoding/upload is moved onto the UI thread.tools/check-nlib-ui-recovery.pyhas source-contract guards for this. Commits7926a7273501,4242c78257c5,e4ff60c28021. - Sparse JIT uneven arena sizes:
headless/jit-allocator.hrequestedCommon::ReserveSparseJitCode(size)with the raw Xbyak size, but the native reserve API deliberately rejects sizes not divisible by 2 MiB. It now rounds up the virtual reservation only to 2 MiB, with overflow guard and correct ownership/logged capacity. The current 4 MiB constant-pool bootstrap still commits only two 2 MiB chunks; backing remains demand-driven rather than dense. A newtools/check-jit-sparse-host.pyregression case requests 5 MiB + 4096 bytes, asserts 6 MiB virtual vs 4 MiB physical initially, grows to 6 MiB, verifies RW/RX alias and full cleanup. Commitsc830d38d9214,99d4544323d6. - These are real source edits but not yet compiled or executed. The native PS5 sparse JIT remains developer-only behind
EDEN_SPARSE_JIT_DEV, real firmware RW/RX mapping/pinning not qualified. This fix does not change the current dense FC27 memory admission (2188 MiB) or claim an FPS uplift. Need a separately approved, instrumented native qualification before enabling globally. - Still OPEN: guest CPU/HLE freeze and frame pacing, block-linear Fermi layers >0, PRMT other modes, JIT runtime growth/OOM, controller glyph texture integration. Do not close project or launch Github Actions prematurely.
2026-10-09 — Incremental Nlib Home sync + Fermi2D fail-closed and z0 destination (NO BUILD)
finish_selected_media()enriches one game per worker result, but previously calledname_home_games(), which iterated the entire installed library and all Home recents for every individual Nlib completion on the UI frame. NewLauncher::sync_home_game(const Game&)updates only that title's Last Played / Recent fields;finish_selected_media()invokes it on the updated entry. The original fullname_home_games()is retained after the initial/refresh ROM scan and loops via the shared helper. Guard intools/check-nlib-ui-recovery.py. Commits80281eff59e4,5586640dd93d,ef29f793b6fb.- Experimental Fermi2D unsupported source/destination layers and depth now soft-assert and return before issuing an invalid copy, with at most eight diagnostic messages per category. The prior native-derived override maintained the original
AssertFailSoftImpl()but then continued into a copy, risking incorrect pixels. Compatibility remains restricted to guarded base z0 and explicitly pitched layer copies; no silent dimension normalization or false success. Commits01435df3b947,9a831b0bed46. - The legitimate 3D z0 software route now also covers 3D destination depth >1 when the source is depth1, as well as the previously covered depth>1 source. Both original surfaces have valid depth and zero layer; temporary descriptors with depth1 still execute the pinned decoder's origin_z=0. This covers a missing symmetric case without pretending arbitrary z>0 swizzling is supported. Source guard updated. Commits
7874290bb17b,90ce402f968e. - New console performance remains not verified. No PS5 SDK compilation, CI, firmware test or GH run. Static read-only source checks only. Keep shader correctness, performance and all unqualified paths open.
2026-10-09 — Nlib media cancellation end-to-end when starting a game (NO BUILD)
Launcher::launchandLauncher::~Launchernow setmedia_cancel_in addition to the previousscan_cancel_, before waiting for existing workers. Both Home and Librarystd::asyncworkers pass a pointer to that atomic intoServices::enrich_game_media(game, cancel).start_home_mediaandstart_selected_mediarefuse to enqueue new media jobs after launch.Servicesgained a backward-compatible virtual overload with a default fallback toenrich_game_media(Game)for host mocks.EdenServicesimplements it and passes the cancellation token intoEnsureNlibEnrichment. Native code checks it before expensive cache/network work, before a localized metadata HTTPS request, after metadata, and before each screenshot/banner/icon worker is launched.CacheNlibJpegreceives the same token and skips an HTTP request if canceled before it starts, or skips expensive JPEG/PNG-to-TGA conversion if canceled while the request was in flight. All already-started Nlib childstd::futuredownloads are still joined before the parent returns, and all Launcher-owned workers are joined before the atomic/Services are destroyed. An already in-flightCommon::Net::MakeRequestis NOT preemptible; the transition can still wait for a network timeout. This is honest cooperative cancellation, not a claimed instant HTTP abort.- Commits
e4c9acb6f47b,593dc55248e0,77e7dfe27402,b5b73efea07f,9171f1583f16,175fdaa60de4,f6451036f9de,aec393350440,a6baa0397119with[skip ci].tools/check-nlib-ui-recovery.pynow guards token propagation and joins. Read-only source inspection found all 12 expected contracts; not executed or compiled. No GitHub Actions, no PS5 build. - Still open: in-flight HTTP cancellation/timeouts, startup synchronous
TreeBytesdiagnostics, residualEDEN_UI_HOTSPOTframes, FC27 in-game GPU/CPU freezes, sparse JIT runtime and native GPU compatibility. User requested no build until comprehensive source fixes and audit are complete.
2026-10-09 — Last source pass: diagnostics render I/O removed, cancellable scans, GL invalidation amortized (NO BUILD)
- Critical UI-stutter source removed: Both
Launcher::draw_settingsand the Diagnostics modal calledservices_.diagnostics()every draw frame. NativeEdenServices::diagnosticsrecursively walks shader/RADV/OpenGL/JIT cache and logs viaTreeBytes. Both draw call sites now useconst DiagnosticsInfo& info = home_diagnostics_; zero recursive inventory calls during draw. First-launchLauncher::read_home()also no longer waits for this inventory:start_diagnostics(bool force=false)creates astd::future<DiagnosticsInfo>worker,finish_diagnostics()polls completion without waiting and applies one snapshot on the UI owner thread. Settings category/overlay entry schedules a refresh; cache-clear maintenance schedules a forced refresh. An already running pre-clear snapshot is discarded, and a new scan runs afterward, without duplicate same-state scans on navigation. Destruction joins the worker before Services lifetime ends. - Cooperative console exit: The additional
diagnostics_cancel_atomic is set on game launch and destruction.Services::diagnostics(cancel)is backward-compatible for preview implementations, with a nativeEdenServicesoverload.TreeBytes(root,cancel)checks the token between directory entries and returns early when the UI/game launches. The completed cancelled result cannot become displayed normal cache totals. Native direct libc statfs/statvfs remains banned (FW13.60). Not an immediate cancellation of a single blocking filesystem operation. - Redundant Home mods:
read_home()no longer callsservices_.modsandservices_.mods_enabledsynchronously before the first menu frame. The existing async ROM scan already enumerates per-title mods andname_home_games()copies their counters to the visible Home. When reloading Home after game removal, existing scanned game metadata is used.services_.home()itself is still synchronous with recent-ROM metadata, addon and filesystem queries, so first-frame work has not been fully eliminated. - GL invalidation:
Textures::invalidate(path)previously synchronously invokedbatch_.delete_texturefor every variation of each replaced banner/screenshot on the UI update thread. It now detaches stale cache entries and queues nonzero texture IDs inpending_deletes_.Textures::pumpfrees at most two total textures per UI frame, shared between Nlib invalidation and LRU eviction, while keeping GL operations on their owning UI thread.Textures::releasedrains all remaining IDs with the context still alive. No stale textures are drawn after invalidation; fresh paths are queued via normalcover(). Source gates intools/check-nlib-ui-recovery.pyprotect this. - Source commits:
b9a94353eea7(render removal),7f17dceb8d5c,adcc2c64efcb,10f2fbbca14c,683b74c243b9,19ae6f6038fb,79d10219440e,7b8315f45c95,ca29c6e3aaf1,1b23d28a0400,265d65760769,630b0f6aa3b4(async snapshots/coalesced refresh),a8f7bf605122,f4842c9fa329,f686403e5a34,14683b3917ba,efa5012d6a77,66c70151889f,f8aeb4f1a2e7(cancellable native inventory),1e28f87f2b85,cd4a65e62954(Home mod reuse),b03c477a1b8c,73bad71107ac,9aa9b6668f5e(deferred GL deletes). All with[skip ci]ondev/ps5-sparse-jit; no GH Actions, no source Python tests executed, no SDK compile, no PS5 FPS evidence. - Remaining: FW13.60 source/SDK build gate and hardware measures,
services_.home()synchronous work, Nlib HTTP in-flight waits, Dynarmic sparse runtime, FC27 guest CPU/HLE freezes and 18-24 FPS, PRMT modes other than Index, Fermi2D unsupported block-linear z>0, real in-game PlayStation glyphs. DO NOT sign off or enable shipping branch/CI without explicit user approval.
2026-10-09 — Asynchronous cancellable Home startup, Recent identity preserved (SOURCE ONLY)
- Remaining main-thread startup I/O moved: The constructor
Launcher::Launcherpreviously didread_home() -> services_.home()synchronously before its first UI frame. NativeEdenServices::homereads last-played ROM, cached cover/Nlib metadata, title ID, language, DLC/updates, all seven recents, and installed-game count, potentially doing filesystem/network work. Now constructor creates a display-only Home loading placeholder, startsread_home()as astd::asyncsnapshot, and defers native ROM-list scan and initial welcome/recovery cue untilfinish_home_scan()polls completion withwait_for(0). The owner thread applies the whole snapshot atomically, updates focus, callsrefresh_home_hero(), then starts library scan only if needed. Until first snapshot is available, Home button actions are gated; the UI shell can render without exposing fake title state. - Correctness under concurrent reload: If ROM-missing handling requests a fresh Home while its previous worker is active,
home_reload_pending_marks the old result stale, consumes and discards it, and queues a new scan. Once a fresh snapshot is applied, a selected Recent card is matched by its file, not old numerical index.home_focus_follows the matched file or falls back to the valid Hero/Setup item. Per-title mod counters still reuse the already-scanned library rather than synchronously reopening mod folders. Failed first scans show a non-crashing recovery status with Settings still usable. There is no claim that source Home metadata is itself cheap. - Cancellation:
Services::home(cancel)added as a backward-compatible default for existing mocks. NativeEdenServices::home(cancel)checks the atomic before acquiringbridge_work and before recent-title and addon/installed-count loops.home_cancel_is set on launch/destructor; future is joined before Services destruction; results arriving after launch are not applied. Already started individual filesystem operations are not preemptible; this remains cooperative cancellation. - Relevant
[skip ci]commits:d9ef0f6386e6(Home future/state),b55de6b82c12(constructor shell/input gate),c47461dfdc44(async Home apply),ae8a32fadc55(source tests),2ca74b0cff1fand0f42fa05fe6b(Services/native overload),06365f38022a,72151428aead,ed4ab36d58bf,9c284cbb6455(native cancellation),953e4582bfa4(source gate),461ff17e2adcandf07703ad9f3f(unused latch cleanup),7166c5d59d41(source cleanup),12d92ed6c7d1and8f591439eae1(Recent focus identity). - Read-only cross-file string inspection reported 15/15 expected source/lifecycle contracts before the last Recent-focus patch; this is NOT a host/native compiled test or console qualification. No PS5 SDK build, no GitHub Actions, no workflow run and no modification of release branch
fix/0.40-zbic-13.60. The approved UI design/assets remain untouched. - Still open: specific FC27 JIT/HLE freeze diagnosis and 18-24 FPS drops; native physical CPU topology; sparse JIT long-session memory growth and 2 MiB mapping on FW13.60; GPU PRMT non-Index/Fermi block-linear z>0 correctness; in-game PS glyph injection; Nlib cancellation of in-flight HTTPS and performance effects; native build gate and actual gameplay validation. DO NOT sign off as finished or trigger a build without user permission.
2026-10-09 — AMD Zen-family 17h physical topology fallback for PS5 (NO BUILD)
- Real firmware FC27 log:
EDEN_WORKER_TOPOLOGY ready=0 distinct_cores=1 cpus=0,0,0,0,0. Originalheadless/performance.cpp::CheckWorkerTopologyused only x2APIC CPUID leaf0xBand returned immediately if absent, even if the PS5's AMD family 17h+ CPU advertisesTopologyExtensions. That log is a FAILED topology probe, not proof game code executes on only one physical CPU. - Added AMD-vendor and family >=0x17 detection with extended-leaf availability
0x8000001Eand feature flagCPUID 0x80000001 ECX[22]. When available, read physicalCoreIdfrom0x8000001E EBX[7:0], threads per core fromEBX[15:8]+1(reject >8), node fromECX[7:0], key node+CoreId; prioritize this documented AMD path before falling back to valid x2APIC leaf0xBSMT shift. Only accept each pinned CPU aftercpuset_getaffinityreads back exactly its one-CPU mask; no assumption that logical CPU numbering uniquely identifies physical cores. If insufficient distinct reported cores,worker_topology_readyremains false; the existing user-selected logical-only trial still logsphysical_verified=0. The new topology log includesamd_ext/x2apiccapability flags. Could allow automatic physical worker pinning when evidence becomes available, but has NOT been PS5-qualified. - Important multi-title safety: reset
worker_topology_ready,secondary_cpus,worker_cpus,cpu_core,topology_allowed_validbefore any affinity/cpuid early failure. Never keep physical placement from previous title after a later probe fails. - Architectural source reference: Linux kernel AMD topology specification for family >=0x17: https://www.kernel.org/doc/html/latest/arch/x86/topology.html and Linux
arch/x86/kernel/cpu/topology_amd.c. This is reference for bit encoding, not firmware verification. Regenerated source-contract intools/check-experimental-performance.pychecks AMD detection, SMT-vs-physical key, OS affinity readback, fallback and early reset; host model verifies two logical siblings share a physical CoreId and separate nodes do not. - Source commits
95ec912cc721,24307bd346ee,99622068bb1f,4c8e19a5a6e4,e2a24e4f7a00, all[skip ci]. NO build, CI, GH Action, actual hardware trace or FPS uplift claimed. Keep FW13.60 physical affinity behavior open until explicit authorized compilation + logs. Untouchedfix/0.40-zbic-13.60.
2026-10-09 — JIT memory telemetry: correct lifecycle instead of misleading early zeros (NO BUILD)
- Real 2026-10-08 FC27
EDEN_JIT_SPARSE_MEMORY phase=core_initialized reserved=0 committed=0andEDEN_JIT_DENSE_MEMORY phase=core_initialized physically_owned=0were logged atpassed("core_initialized")directly aftersystem.Initialize(), before the titlesystem.Load,system.GetCpuManager().OnGpuReady, or guest JIT startup. The zero is therefore not evidence that Dynarmic was using no RAM, nor proof that 2188 MiB JIT physical memory allocation failed; the separateEDEN_JIT_ALIASrecords show successful allocator creation later. No increase to physical JIT budget is justified by that misleading stage. - Added
Eden::Performance::ReportJitCodeState(phase), which reads exactCommon::SparseJitUsage(reserved VA vs committed direct physical) andCommon::DenseJitDirectBytes(actual owning direct-memory allocation), prints one shortEDEN_JIT_MEMORY phase=... sparse_reserved=... sparse_committed=... dense_direct=...receipt. UnlikeReportDirectMemoryState, it performs no 8192-region kernel memory walk and is never called in the GPU frame loop.headless/main.cppinvokes it atgame_loaded/nro_loaded,cpu_manager_ready,core_shutdownlifecycle marks. This will let next authorized hardware build prove whether JIT memory exists when CPU workers are ready. tools/check-experimental-performance.pygained guards for stage placement, zero per-frame kernel VA scans and source counter usage. Commitsd9a454079ab0,9257104d0a0b,17649e55dcbc,58afc100fb11,[skip ci]. Read-only cross-file check with topology/Home/JIT reported 12/12 source predicates; not executed on host/PS5.- No compile, PS5 runs or Actions triggered. Still need actual stage counts and real frame/guest-progress telemetry to explain FC27 18–24 FPS / freezes; no hardware FPS improvement claimed.
2026-10-09 — Native PS5 log rotation ownership and recovery hardening (NO BUILDS)
headless/log_pipe.halready implements two 8 MiB log segments per stream (stderr.log/stderr.first.logandheap.log/heap.first.log), with a background pipe drain rather than ~25ms synchronous SSD writes. No new rotation design needed. Fixed an actual failure path inLogPipe::Attach: after redirectingstdout/stderrinto a pipe, failure to start the drainingstd::threadwould otherwise leave the stream writing into a pipe without a consumer, eventually blocking game/launcher logging. Newtry/catchrestores the stream's file descriptor viadup2, closes pipe/old duplicate, clears ownership, and returns false.- Second log segment recycling no longer relies on
ftruncate+lseek(inconsistently available on native FW runtimes) or risk continuing at an old file offset. It reopens the existing tail withO_WRONLY|O_CREAT|O_TRUNCbefore closing the former descriptor, resetting offset and staying within limit. Original first segment remains preserved; rotation failure continues draining the pipe without growing SSD data. Rotation marker updated from obsoleteEden 0.40 ImprovedtoEden Encore. - Added
tools/check-log-pipe-rotation-source.pyrequiring the 8MiB dual segment policy, thread failure descriptor restoration, fail-closed recycle and background drain behavior. Code7c487917491b; source gate1d3ac8fc3aa1both[skip ci]. Read-only cross-file inspection reports 9/9 guards; script not executed, no fault injection/native tests. This is a defensive source change, NOT a confirmed runtime crash fix. - Remaining native log question: whether underlying firmware
open/rename/dup2semantics satisfy source assumptions; verify only when explicitly authorized. No CI/Actions/native build, delivery branch remains untouched.
2026-10-09 — In-game PlayStation glyphs: audited limitation, NOT implemented universally
headless/glyph_overrides_runtime.hcontains a narrow, actual RomFS graphic-pack override engine for a title/update-version with local hash/evidence checks; it is not general real-time replacement of arbitrary Switch texture atlases.headless/main.cppcorrectly selects it only when PlayStation glyph art is requested, mod pack present/enabled, game version matches and evidence passes, otherwise it retains Nintendo artwork and logsrule=unsupportedor a more specific reason.- Critical source fact:
headless/glyph_overrides_generated.hcurrently declaresinline constexpr std::array<Rule, 0> kRules, i.e. zero embedded supported game/update pairs. Thus the in-game PS glyph feature CANNOT claim any out-of-box title coverage (FC27 menu art included), even though DualSense mapping and launcher PlayStation icons work. A verified separateencore-glyph-overrides.jsonplus rights-cleared packaged game/version assets can add support, but cannot be invented without real artwork/layout hashes. No GPU OCR/image-faking route has been implemented or falsely advertised. - Keep open until a concrete supported game's actual decrypted RomFS atlas, original/replacement SHA, edition/update version and legal right to distribute the replacement art are proven on PS5. Do not equate mapping Switch A→DualSense Cross with a game-rendered PlayStation glyph.
2026-10-09 — Source audit: software Fermi blitter overflow, high-FPS frame-skip atomics, shader workers (NO BUILD)
- Shared GPU software blitter arithmetic, real defect. Inspected the upstream Eden
video_core/engines/sw_blitter/blitter.cppimplementation used by the native pinned source. Its pitch-linear plane length,static_cast<size_t>(surface.pitch * surface.height), and itssrc_copy_size = src_extent_x * src_extent_y * src_bytes_per_pixel/ equivalent destination expression multiply as 32-bit integers BEFORE promotion tosize_t, risking truncated GPU guest-memory reads/writes and incorrectly sized buffers. The fork does not version the pinnedsrc/video_coresubtree directly.headless/gpu_native_observability.cmaketherefore now fail-closed verifies three exact upstream arithmetic anchors and generatessw_blitter_sized.cppreplacing the original video_core compilation unit with versions which promote the FIRST factor tosize_t. This affects all PS5 native software-blit fallback calls, not only FC27 or z0. Added strict source admission for new Fermi2D software routes: nonzero src/dst bytes-per-pixel, pitch*height products within u32 so no old staging assumption, and source/destination rectangle byte counts within u32, plus existing bounds checks. Unsupported candidates soft-assert and return with boundedEDEN_GPU_FERMI2D_SOFTWARE_BOUNDS_INVALIDevidence rather than passing malformed sizes to the blitter.tools/check-gpu-native-diagnostics.pyupdated with source contracts and pure mathematical boundary examples. Commits3e2d90b81d8c,8bb5324d744f,b733e26ac1ff,c95291ca1cf4,0cc33cd0a750, all[skip ci]. No hardware-render evidence or speed claim. - Global high-FPS presentation correctness.
headless/display_refresh.h::SkipFrame()used a static non-atomiclong long last_shown_nsacross ALL game sessions, resulting in a stale first-frame decision and potential cross-renderer data race. Newinline std::atomic<long long> last_shown_frame_nsuses a CAS loop: discard too-soon frames, do not roll back a newer timestamp, preserve real gameplay frames when game rate <= output. NewResetSkipFrameTracking()clears both last-show timestamp and skipped-frame count, called byheadless/main.cppbetween sessions.tools/check-runtime-frame-budget.pyguards it. Commits9030c826d347,b456582399cd,9f6e1a74a871,[skip ci]. This only affects source rendering faster than screen refresh; it DOES NOT synthesize 60 FPS for a 30 FPS game or resolve FC27's 18-24 FPS drops. - Physical CPU topology source-regression gate. New AMD-family-17h
__cpuidprobe had made existing hosttools/check-worker-affinity.pymock uncompilable: mock lacked__cpuidand extended CPUID feature detection. Fixture now implements both Intel x2APIC and AMD extended0x8000001Evendor/family/topology leaves and adds Zen SMT sibling + missing-extension fallback cases while retaining affinity restoration tests. Commit25b16b4adac4,[skip ci]. Not executed. - Shader build concurrency was double-conservative. Found the actual
EDEN_PS5_SHADER_WORKERS reported=16 available=13 workers=3policy insidetools/prepare-vulkan-port.py. It reserved six logical slots for guest/GPU, then divided the remaining seven logical slots by two as an SMT heuristic. One pipeline compilation worker actually occupies one OS-logical scheduler slot; doubling the reserve can leave parallel shader backlog unnecessarily serialized. New general PS5 Vulkan policy reserves six slots for guest cores/GPU plus one slot for audio/services, then uses up to SIX workers across actual allowed logical slots, with a six-worker hard cap; the observed 13 available produces six workers (6+1+6=13). Missing affinity information retains one worker.tools/check-vulkan-shader-workers.pychecks policy and representative 13/16/10/8/unknown CPU counts. Commits302b2e4dabe7,6dc3dfb5721e,[skip ci]. This is a potentially useful but UNQUALIFIED scheduling experiment: sustained compilation can compete with game cores and might reduce FPS; do not claim improvement without 13.60 gameplay timing on PS5. - This entire checkpoint contains SOURCE EDITS and read-only source confirmations only. No source checker executed, no CMake configure, no SDK compilation, no GitHub Actions, no PS5 runtime. Release branch
fix/0.40-zbic-13.60and user-approved purple Eden Encore design left untouched. Open: non-Index Maxwell PRMT, multi-layer 3D Fermi swizzle, sparse Dynarmic long-session mapping, FC27 guest freeze/root cause, real FPS/frame pacing, PlayStation glyph packs (zero embedded verified rules), log/cleanup native fault qualification.
2026-10-09 — Follow-up source audit: AMD test harness repaired + Home refresh starvation prevented
tools/check-worker-affinity.pyhad become outdated after the AMD physical core probing addition: its C++ injected hardware mock only supplied__cpuid_countand__get_cpuid_max, not the new__cpuidvendor/family/feature leaves. This would fail its next host test compile before any worker topology assertion. Refreshed the mock with Intel and AMD vendor signatures, family 17h/ext-family semantics,TopologyExtensionsECX[22] and0x8000001ESMT sibling core IDs, retaining all old x2APIC, scheduler, OS affinity and restoration cases. Added new case: 13 logical CPUs with SMT siblings and unsupported leaf 0xB can still detect >=5 distinct AMD physical cores; removing the feature flag must fail closed withtopology_allowed_valid=1for opt-in logical experiment butworker_topology_ready=0. Commit25b16b4adac4,[skip ci]. Test source rewritten, NOT executed on host or PS5.Launcher::check_games_present()returned a confirmed missing ROM list every ~2-4 sec. If a full nativehome()query takes longer than that, each identical missing list repeatedly calledread_home()and marked the activehome_scan_stale.finish_home_scan()then discarded another valid snapshot and repeated the scan: possible async Home refresh starvation on slow media. Addedhome_missing_refresh_recording the sorted Home-related confirmed missing files; only a changed set schedules a new Home refresh. Repeated identical absent files leave current scan finishable, while a new disappearance or recovered/absent transition resets the guard. Existing two-independent-presence-scans confirmation, stale-snapshot validation, media cancellation, library pruning and correct Recent selection remain.tools/check-nlib-ui-recovery.pygot structural and pure logic guards. Commitse8dc3101a2bb,d86e35210493,ba2120d4db64,[skip ci].- Read-only cross-file source inspection saw 12/12 requested predicates spanning global software blitter u64 promotion, PRMT/Fermi guards, atomic frame skipping, six Vulkan worker admission, AMD host mock and Home refresh debounce. These are NOT compiler passes, behavioral tests, native render pixel checks or performance measurements.
- Keep work OPEN; user requested no builds/Actions/compilation yet. No edits to
fix/0.40-zbic-13.60or approved purple Home UI visuals. Need test JIT sparse firmware stability, sustained Vulkan pipeline worker contention, actual FC27 guest freezes and frame pacing, non-Index PRMT, Fermi z>0 copies, real in-game PlayStation assets.
2026-10-09 — JIT capacity recovery / sparse hot-path mutex / Fermi overflow closeout (SOURCE ONLY, NO BUILD)
- Native A64/A32 JIT memory admission improvement:
headless/jit-startup-retry.h::NextCapacitypreviously cut any rejected contiguous code arena by 50% immediately. That often discards hundreds of MiB of usable code capacity when the native reservation barely misses its requested size; replace with geometric 25% reduction (rounded down to 2 MiB) and strict baseline floor. Example A64 failed 1024 MiB request now retries 768→576→432→324→256 MiB rather than 512→256, retaining larger caches whenever they fit. Fully successful allocations unchanged; only catchesXbyak::ERR_CANT_ALLOC/std::bad_alloc, never non-memory/JIT correctness exceptions. No infinite retry: next capacity must be strictly smaller. Host fixturetools/check-jit-startup-retry.pyupdated for exact A64/A32 retry sequences and near-floor behavior, not run. - Actionable per-core telemetry: Retry logs now identify
reason=xbyak_allocvsreason=host_allocandattempt; on recovered allocation they emitEDEN_JIT_STARTUP_RECOVERED bits=... core=... bytes=... retries=.... Emitted only on startup failures/recovery, not per-frame or per compiled block. Source commit837832f395e5,9a95b7c8fb1e,c83011673cbb. - Sparse compile hot path: In the generated Dynarmic
BlockOfCode::EnsureMemoryCommittedinjection, a selectedsparse_jit_cacheused to callIsSparseJitCode(getCode())under global mutex, thenCommitSparseJitCodewhich takes the same mutex and revalidates owner/capacity, for each JIT emission. The native allocator in explicit sparse mode is strictly sparse-or-fail (never falls back to dense), so remove the redundant first lookup/mutex. The singleCommitSparseJitCodecall still checks that the actual code pointer is an owned registered sparse region and that growth is inside reserved capacity; otherwise reports failure. Keep one mutex for actual chunk growth and accounting.tools/check-experimental-performance.pysource contract protects this and strict sparse selection. Commits9cfbbe602ae9,9a595833c48a. - Dense alias uniqueness:
headless/jit-allocator.hpreviously ignoredunordered_map::emplaceduplicate result in the dense path while the sparse path already aborted on a duplicate live RX VA. Both now fail closed: a duplicate live RX pointer can never silently overwrite/lose the second mapping's ownership. Commitbf6c21d2db2f. - Fermi2D overflow check on extreme guest dimensions: Initial native overlay
copy_sizes_validmultiplied 64-bit width × height × BPP before comparing to 32-bit allocation bound; in malformed 2^31-scale guest rectangles this u64 multiplication can wrap. Newvalid_byte_countvalidates positive coordinates and BPP, then checks width ≤UINT32_MAX/bppand height ≤UINT32_MAX/(width*bpp). Thus neither the checker itself nor the pinned software blitter can process a wrapped size along newly enabled 3D/pitch-layer paths. Regression modeltools/check-gpu-native-diagnostics.pycovers valid 1080p and malicious dimensions, zero/huge pixel width. Commitsc8e34c85bbea,01d6056d44ae. - Read-only cross-file source inspection found 11/11 new predicates; NOT executed test scripts, not a compiled ABI check, no native firmware results. All commits
[skip ci],dev/ps5-sparse-jitonly.fix/0.40-zbic-13.60preserved; approved purple Home UI preserved; no workflow/CI invoked. - Still open: verify sparse fixed RX/RW alias behavior and memory pressure in long-session FW13.60, actual allocation-retry effects, Vulkan six-worker scheduling impact, guest HLE deadlock and FC27 frame pacing, PRMT non-Index / Fermi block-linear z>0, PlayStation glyph pack compatibility. Do not claim performance uplift or freezes solved until real hardware qualification.
2026-10-09 — PS5 DualSense InputEngine callback pressure removed (SOURCE ONLY; NO BUILD)
- Compared real PS5
headless/pad.cppwith Eden upstreamsrc/input_common/input_engine.cpp:InputEngine::SetButtonandSetAxisunconditionally lockmutex, update a map and callTriggerOnButtonChange/TriggerOnAxisChangeon every call, even if the state is identical. In a native PS5 4 ms input poll loop,Pad::Consumeforwarded up to 22+ digital states and four axes for each connected controller every time; this creates repeated downstream HID callback/lock work unrelated to real physical input changes. - Added a per-player/per-virtual-button state cache (
std::array<array<uint8_t,22>,10>, with initial sentinel 2), plus four exact-value analog axis caches and known flags inPadEngine.SetButtonStatenow forwards first report / genuine edges including release, but skips repeats.SetStickPositionemits only changed axis values. Previously unused/future out-of-cache-range buttons are still forwarded rather than lost. Initial neutral state, disconnect neutralizationCloseSlot::Consume, andResetControllerscontinue to publish required transitions. Gyro/motionSetMotionpath is unchanged (timestamp and accelerations must continue to propagate). Mapping validationValidMappingalready enforces all custom indexes in [0,kPadButtons), therefore the earlier suspectedkPad[pad]out-of-range access is not triggered by valid settings; not falsely reported as a repaired bug. - New source gate
tools/check-dualsense-input-hotpath.pychecks initial-state emission, equality checks, transitions, release, physical controls and no motion elision. Code commitsb939df4dceed,2b0595826b48and source guardb4b749ef1000, all[skip ci]ondev/ps5-sparse-jit. - This is a global guest input-poll CPU/lock/callback reduction for any game with static or steady analog inputs, not a proven FC27 FPS improvement. PS5 firmware gameplay, individual button transitions, custom layouts and full compile remain to be tested when user authorizes build. No GH run/CI, release
fix/0.40-zbic-13.60and approved UI untouched.
2026-10-09 — DualSense rumble mutex avoided on unchanged HID output (SOURCE ONLY)
- The PS5 input loop calls
PadEngine::TakeRumbleon every poll for each connected player, previously acquiring a sharedrumble_mutexeven when the guest has not changed its vibration request. The guest'sSetVibrationuses the same mutex to write separate virtual Joy-Con amplitudes, so repeat lock contention is unnecessary. - Added per-player
rumble_pendingstd::atomic<bool>hints. The guest writer sets the hint with release semantics inside its existing mutex after updating rumble payload andsides.changed; the PS5 poller first acquire-loads and returns immediately if false. If true, it locks and consumes the payload as before, clearing the hint inside the same mutex, so a concurrent writer cannot be accidentally erased. Normal vibration amplitude calculation, motor output and disconnected shutdown remain unchanged. - The
tools/check-dualsense-input-hotpath.pysource gate now protects hint memory order, mutex serialization and button/axis transition dedup. Commitsd603771a3556,a2ee52267b21,d1cd159e4f02, all[skip ci]ondev/ps5-sparse-jit. Read-only cross-file inspection found 10/10 expected source predicates. No host or native compilation, PS5 motion/rumble device test or FC27 FPS measurement. - The optimization is globally relevant to controller/input lock pressure, not a claim to solve the still-open FC27 graphics pacing or guest CPU freeze. Retain no-build gate until user approval; delivery branch/design unchanged.
2026-10-09 — User-supplied Zacksly DualSense icons integrated (SOURCE ONLY; NO BUILD)
- User uploaded
PS5 Button Icons and Controls.zip(956 non-directory entries):Buttons Full Solid,Buttons Outline,Buttons Solidin white/black PNG 128/256/512 + SVG; separate full DualSenseController Imagesand control layout diagrams. Original archiveLICENSE.txtexpressly grants CC BY 3.0 redistribution and modification with visible credit to Zacksly, sourcehttps://zacksly.itch.io, credit link and modification notice. Do not upload/distribute all 5.4 MB just for two small launcher icons. - Selected actual provided
Controller Images/Outline/Outline White 4k.pngas source artwork, preserving the recognizable DualSense shape. Adaptation: resized/padded to 144×100 pixels, 2-bit-alpha quantization and RLE encoded (1328 bytes; 14,400 decoded pixels). Embedded inheadless/prosperoeden/pe/ui/dualsense_mask_asset.hppwith CC BY 3.0/SPDX and attribution. Source byte SHA-256 of compressed RLE:525f74a57a26b06d51b3dea9ccf361037bef04900567ff0aa3db5209171dee6f. The header alone is now sufficient to reconstruct the licensed picture at runtime; no additional ZIP asset, network request, SVG decoder, or new runtime dependency required. headless/prosperoeden/pe/ui/textures.cpp::load_art()decodes RLE into an opaque-white/tintable transparentgfx::Imageonce on launcher startup; checks count/level/decoded length beforeGlBatch::create_texture, falls back to the pre-existingart/controller.tgawhen unusable.headless/prosperoeden/pe/ui/widgets.cpp::dualsense_iconusesCanvas::textures.controller()with its existing rect, alpha, animation and theme tint; retains prior hand-drawn DualSense geometry when texture missing. Existing Home's four connected-controller badges, controller settings icon and maximum-players info glyph use the same widget and therefore acquire the new art without repositioning/changing the approved purple interface. Launcher releases this GL texture on game launch as before: it does not consume gameplay VRAM.- New attribution file
headless/prosperoeden/ui/art/PS5_ICONS_ATTRIBUTION.mdpreserves CC BY 3.0 attribution and adaptation, and a compact legal creditDualSense icon: Zacksly (CC BY 3.0) - zacksly.itch.ioadded unobtrusively to the existing About / Credits pane inbrowse.cpp. No suggestion the creator endorses Eden. - New
tools/check-dualsense-artwork.pycan later validate size, run length, SHA-256, runtime wiring, original vector fallback and visible license credit. Read-only source consistency inspection found 8/8 corresponding predicates; the checker itself was not executed. Commits088fddbc2dcd,813b22409ff8,51db0ae1866b,76a53ca8536d,c511480f9d05,1162608db29f, all[skip ci]ondev/ps5-sparse-jit. - IMPORTANT LIMITATION: These are launcher-controller icons only, not an in-game FC27/Nintendo-button glyph pack.
headless/glyph_overrides_generated.hstill haskRulesarray size 0. Replacing game-native sprite atlases requires exact original RomFS textures, update-version fingerprints, compatible converted image assets, rights and real PS5 validation. The supplied generic button PNGs do not establish per-game replacements. Do not falsely mark the in-game glyph task complete. - No GitHub Actions, no native compilation, no PS5 frame capture/test and no unapproved UI redesign. Release branch
fix/0.40-zbic-13.60untouched.
2026-10-09 — USER CORRECTION: supplied PS5 icons are primarily for IN-GAME glyph replacement across titles
Intent correction: User explicitly clarified PS5 Button Icons and Controls.zip is principally a common PlayStation glyph source for all games, not just launcher decoration. The earlier full-controller picture integration in the launcher was secondary. Do not mistake UI DualSense icons, controller input mapping, or standalone HUD glyphs for successful replacement of Nintendo glyphs displayed BY each title.
What the supplied archive supports: The local 5.7 MB ZIP contains multiple white/black outline, solid, full-solid sets at 128/256/512 and SVG, with Cross/Circle/Square/Triangle, L1/L2/R1/R2, left/right sticks, D-pad, Touch Pad etc. It provides PS artwork, not any game's original Nintendo sprite sheet/atlas data nor a generic mapping from graphics to emulated guest buttons. Zacksly art is CC BY 3.0; preserve source URL, attribution, adapted-art notice (including in installed pack), and never ship game-owned texture bytes without separate rights.
Concrete new shared per-game artwork toolchain:
tools/ps-glyph-atlas.pydiscover --original-romfs <local-dir>lists likely button-art PNG/TGA candidates (now including RGBA image dimension and exact original SHA-256) and reports BNTX/BFRES/DDS/SZS proprietary candidates that need verified decoders/encoders; it does not falsely claim those formats are editable.render --icons-zip <user-ZIP> --original-romfs <game-RomFS> --spec <JSON> --out <NEW-pack-dir>applies Zacksly PS icons to explicit game-owned transparent RGBA atlas rectangles, validates exact original source SHA/version/title + nonoverlap, resource sizes and supported image formats, and atomically emits replacement PNG/TGA graphics + existing v2ps-glyph-pack.pycompatible manifest with source/replacement SHA256 and CC BY attribution. Every sprite maps to an explicitly chosen PlayStation icon; no arbitrary guess from Nintendo A/B/X/Y.tools/ps-glyph-pack.pyinstaller now retainsARTWORK_ATTRIBUTION.txtoutsideromfsalongsideeden-glyph-pack.json, while preserving all previous title/version/original/replacement SHA and safe path gates.tools/ps-glyph-catalogue.pymerges any number of verified local game/version pack manifests with an optional existingencore-glyph-overrides.json, preserves existing rules, rejects duplicate title/version, checks every replacement resource SHA and size, caps at 256 rules, emits a NEW revision strictly newer than currently embedded revision 2 and never overwrites an existing destination. Copy the generated file to Eden's config directory soGlyphOverrides::LoadCataloguecan activate these installed packs at game launch; no source recompilation per title required.docs/IN_GAME_PLAYSTATION_GLYPHS.mdrecords the entire user workflow, input JSON spec, expected switch/PS face-button physical-vs-menu mappings, and why static RomFS art cannot track automatic mapping transitions without separately verified menu/gameplay resources.tools/check-ps-glyph-atlas.pyadds synthetic test fixtures covering generation, original file immutability, first/updated catalogue revisions, installer+attribution, and rejection of wrong hashes/overlaps/unsupported formats. No actual game assets or copyrighted graphics shipped.- Source commits:
ed256be0d1abatlas conversion/discovery,ef9093c41da6catalogue merger,d26e8fdede89installer attribution,4b805b78d179docs,dceb7fc97687discovery SHA/fail-closed output size,096f545bdd56manifest replacement hash guard,c71c1c6c3e83synthetic source fixtures, all[skip ci], branchdev/ps5-sparse-jit.
HARD LIMITS / DO NOT MISREPRESENT: The embedded catalogue remains std::array<Rule,0> — ZERO real game/version art packs verified or enabled out of the box. A game can display prompts drawn procedurally, in fonts, in compressed BNTX/BFRES/DDS/SZS or in highly customized atlas formats. The ZIP alone cannot universally identify those. This toolchain reduces per-game implementation work, but each title/update still requires legally obtained original resource fingerprint, sprite coordinates, correct PS mapping and console visual confirmation. Full universal in-game glyph replacement is NOT DONE. For FC27 specifically, existing PlayStation Auto switches between a menu confirmation mapping (A->Cross) and gameplay physical mapping (A->Circle) so one static texture translation cannot be assumed correct for all screens. A future high-confidence format-aware extraction/repacking and scene/context-aware mapping layer needs measured test cases before global enablement. Original art remains whenever verification fails.
Validation: 13/13 READ-ONLY SOURCE CONTRACT PRESENCE checks were seen across generated Python tools, evidence/runtime selector and guide. Neither the synthetic checker nor any host/native tests, SDK compilation, PS5 builds/CI/GitHub workflows were run, per user's explicit gate. Release branch fix/0.40-zbic-13.60 and approved launcher layouts untouched.
2026-10-09 — IN-GAME glyph automation: geometry scan, BNTX read-only inventory, exact-hash shared atlas reuse (NO BUILDS)
Priority remains USER REQUIREMENT: PlayStation glyph artwork INSIDE EVERY GAME, not just launcher controls. User-supplied licensed PS5 Button Icons and Controls.zip remains the common CC BY 3.0 PS art source. Do not invent in-game compatibility from a controller silhouette or claim globally supported games. Current native builtin headless/glyph_overrides_generated.h still has ZERO actual verified title/update rules; unknown formats fail closed.
- New
tools/ps-glyph-scan.py: offline, read-only discovery of separated transparent button-like sprite rectangles in RGBA PNG/TGA atlases. Uses bounded Pillow alpha projections in BOTH row-first/column-first directions; supports at most 4M pixels/image, 64 images, 512 rectangles, 2px transparent padding. Reports original atlas SHA and candidate coordinates without guessing semantic button names. Optional--spec-outoutputs a schema-1 renderer draft withbutton:nullfor every candidate;ps-glyph-atlas.py renderrefuses unresolved icons. Prevents draft/report same-path collision and validates both destinations and title/version before writing either. Fonts, opaque sprite sheets, compressed layouts may yield no candidates and must remain unsupported. This is an aid to human/AI-assisted title mapping, NOT a magic auto-replacement. - New
tools/ps-glyph-bntx-inspect.py: offline, bounded READ-ONLY BNTX/NX texture-container inspection grounded in public 3DSkit BNTX header/BRTI documentation and BNTX-Injector source. Validates BNTX magic/BOM/reported size, 256-max texture pointer table, each BRTI offset/size, width/height/depth, mip count, format, tile mode and length-bounded texture name; presents candidate internal texture names.ps-glyph-scan.pyincludes up to 32 BNTX inventory records and at most 32 named likely controller/UI textures per container. Does NOT unswizzle/decompress/repack ASTC/BC/linear block memory or change the game. Real proprietary BNTX and BFRES in-game glyph replacement remains OPEN. Docs: https://github.com/Tyulis/3DSkit/blob/master/doc/BNTX.md and https://github.com/aboood40091/BNTX-Injector/blob/master/bntx.py ; documented layouts must still be console-verified. tools/ps-glyph-atlas.py::discoverranking: replaced first-200-filesystem-entries stop with a deterministic full RomFS name enumeration, scoring button/controller/prompt/UI/atlas/textures, then opening/hash-checking up to 200 highest-ranked candidates. No per-title import of irrelevant first 200 generic textures; image SHA/dimensions only if viable. This is offline code (NOT in PS5 frame/game hotpath).- New
tools/ps-glyph-reuse.py: finds original game PNG/TGA atlases with byte-identical SHA-256 in target titles/versions, copies pixel coordinates into a new per-title spec; by default clears all symbol labels tonullfor manual semantic verification. Only explicit--approve-same-semanticsreuses previously verified icon names after user checks that menu/gameplay mappings agree. Duplicate/ambiguous atlas matches, edited bytes, unsafe paths, malformed types fail closed. Supports repeated art layouts without promising same behavioral mapping across Nintendo title contexts. - Safer
render: old acceptance only required one transparent pixel in an arbitrary chosen sprite rectangle, potentially clearing neighbors/solid artwork. Now requires nonempty original alpha and at least one fully transparent pixel perimeter between the actual glyph alpha bounding box and EVERY boundary of its chosen rectangle. Also validates explicit string type before icon variant/button membership, refusing unknown/unassigned values. - Source fixture updates
tools/check-ps-glyph-atlas.py: synthetic Nx/BNTX table with one BRTI for a named RGBA8 icon, rejected out-of-file BRTI pointer, RGBA projection candidates with null mappings, identical-hash cross-title reuse with/without approval, original source immutability, newly required sprite perimeter and deliberately unresolved draft. Fixture created/updated only; NOT RUN. Initial fake BNTX fixture byte-escape error corrected in source before any test execution. - Guide refreshed
docs/IN_GAME_PLAYSTATION_GLYPHS.md: runnable CLI examples for scanner/spec draft, direct BNTX inspect and safe atlas reuse, transparent border requirements, explicit limits and why PlayStation Auto menu mapping differs from game physical-button mapping. Licence still Zacksly CC BY 3.0 with mandatory acknowledgement. - Commits
b9aa0d31955dscanner,d24705eddfc4scanner host fixtures,357f2c310739BNTX inspector,faaa338fcfdaBNTX scanner integration,82a8b6bf41cbsynthetic NX fixture,6905c9847c32binary fixture escape correction,634354adc24aranked discovery,2af2b7d361b9unapproved spec draft,a008de981116SHA-only reuse,c6d77b450a00sprite alpha bounds,112040092abfnew fixtures,3518d80daeebreuse type check,f52c305d7f88guide,4840b5471303safe output paths,561fac58ecdunresolved/opaque image fixtures. ALL[skip ci]ondev/ps5-sparse-jit. - Source inspection only. NO Python fixture executed, NO Python-based model benchmark, NO C++/PS5 build, NO Actions/CI, NO PS5 gameplay verification; preserve approved UI and release
fix/0.40-zbic-13.60. Remaining real blockers to all games: actual title ROMFS/media fingerprints, BNTX/BFRES/ASTC/BC decoder/repacker with roundtrip/mips/swizzle preservation, reliable Nintendo glyph identity classification per scene, scene-dependent mapping vs PlayStation Auto, per-title regression/screenshots and reversible rollback. Never mark universal in-game replacement complete from icon ZIP alone.
2026-10-09 — Community in-game PS glyph sources audited (NO BUILD)
- Added
docs/PS_GLYPH_COMMUNITY_SOURCES.mdon development branch, commit5a69701fcfa63ebe04cba05194c323370620dd54, to catalogue external PlayStation button replacements as links with legal and compatibility gates, not as purported verified in-game packs. Grounded entries: StavaasEVG TotK DualSense UI 1.4.1 (game versions cited 1.1.0–1.1.2, CC BY-NC-ND 4.0), Metroid Dread PS5 layout v3 (CC BY-NC-ND 4.0, unspecified game update), Metroid Dread PS4 variant (explicit Title ID 010093801237C000), archived Switch Toolbox and community bugfix fork. Neither community-mod game data nor textures were copied into repo. - Mod pages supply useful format/layout work to learn from, not universal glyph conversion, verified console functionality or authorization to redistribute/rewrite those mods. Required gate: title/update fingerprints, original/replacement hashes, exact semantics per UI scene and mapping, legal right, format-aware repack and physical console verification.
- Original Zacksly PS source icon archive is artwork CC BY 3.0, not a recognized set of Nintendo in-game atlas coordinates; maintain attribution in eventual legally generated local packs. Builtin per-title game artwork remains 0 verified rules; issue #7 remains OPEN.
- Documentation-only
[skip ci]commit. No new tests, GitHub Actions, builds or PS5 gameplay tests. Release branch and user-approved UI untouched. Issue #8 GPU/JIT/FC27 hardware/performance gates also remain OPEN.
2026-10-09 — Glyph catalogue unsafe RomFS path hardening (NO BUILD)
- Audited
tools/ps-glyph-catalogue.py: replacement asset paths were checked butfiles[].romfs_path(original game resource path) was not independently sanitized before the catalogue was marked valid. Added fail-closed validation for nonempty POSIX relative paths, max 240 characters, no absolute path, backslash, colon, empty/dot/dotdot/hidden segments. Commits76d5cd54b0d596f62b934118591266443937a286andf10335f48fa33ee4a7a1c2778e0a2b74765cc08c(correct single-backslash rejection). - Added a synthetic regression fixture to
tools/check-ps-glyph-atlas.py: a valid replacement pack is temporarily modified with traversal, absolute, Windows-style and empty-segment original paths, each required to fail catalogue build; original manifest restored and valid catalogue rebuild asserted. Commita26f879f10838ce5ad428a4666bef76975f27fa7. - Source text was read back from GitHub to confirm committed escaping and test predicates. Regression test script not executed, no CI/Actions, compilation, native build or PS5 run, per user no-build gate. Real in-game packs still 0; keep issue #7 OPEN. CPU/GPU/JIT runtime gates issue #8 OPEN. Shipping branch and approved UI untouched.
2026-10-09 — Further glyph catalogue collision / NUL hardening (SOURCE ONLY)
- In
tools/ps-glyph-catalogue.py, added case-insensitive dedup ofromfs_path, matching the installer semantics and refusing multiple rules targeting one original game file. Added NUL detection and kept traversal, absolute, hidden and Windows separators forbidden. Commits8ec984bda4e178bfeff1fe955c27010d590a40ea,c1060502a01438a6091b186a744ae12d7957d071(corrected Python literal to detect actual NUL, not the textual\\x00). - Extended synthetic source fixture to reject embedded NUL and two case-colliding original path entries, commit
80133d4ae0168202baae1627808243ac82880e33. - GitHub source readback completed; new fixtures not executed and no CI/PS5 build/run. User's no-build instruction stays in force, shipping branch/UI unchanged, hardware/asset qualification and issues #7/#8 remain OPEN.
2026-10-09 — Broader community glyph reverse-engineering reference catalogue (NO BUILD)
- Added
docs/PS_GLYPH_MOD_TECHNICAL_ATLAS.md, commit2b09e4eab1c263940a0520a479596252702d9052, documenting public technical mod observations for BOTW (PS4/Xbox), TOTK (DualSense/Xbox), Metroid Dread (PS4/PS5), Paper Mario TTYD (PS5/GameCube), Echoes of Wisdom (DualSense), Link's Awakening (Xbox), Super Mario 3D World + Bowser's Fury (PS5), Shin Megami Tensei V (PS4/PS5). Twelve public mod references are recorded with stated action mapping, scene scope, layout variants, version evidence and exact next extraction task. - Critically: BOTW Western mod author's fix for interaction prompts shows menu/tutorial vs world-specific UI divergence; TOTK Xbox author describes seven special-action screens and FontForge/bfttfutil/astcenc/Switch Toolbox + Python tooling; Dread PS5 v3 corrected Triangle/Square swap; SM3DW v1.4 exposes D-pad, hold powerup, Bowser's Fury, capture/create, minus/touchpad slots. These are functional findings, not measured pixel coordinates.
- The survey DID NOT download or unpack mod archives or Nintendo RomFS, so all original paths/atlas rectangles/verified replacement bytes remain UNKNOWN. Document requires exact original SHA, game-version, scene mapping and source/replacement diff for each before compatibility is claimed. Existing zero verified embedded per-title rules unchanged. Community mod licenses remain relevant for redistributing or adapting files even if technical concepts can be studied without copying files.
- Research/docs only,
[skip ci], no tests or builds, no Actions; production branch/interface preserved. Issues #7 and #8 remain OPEN.
2026-10-09 — Local community mod ZIP structural inspection, source only
- Added
tools/ps-glyph-mod-inventory.py, commitsd9e126de005e24c8c0dc88e8a1770feb03623af5andb83db6b539930f904babf7360f4ded4c767cf65c. The tool inventories locally available authorized ZIP archives without extraction or execution: bounded member count/size and total sizes, canonical/non-symlink nonencrypted paths, duplicate/case collision refusal, archive SHA-256, file listing,romfs-relative file paths if present, candidate UI filenames and ZIP CRC. The second commit corrects Python escapes to check an actual NUL and a lone backslash. - This supports future actual file path and format discovery from community mods without pretending public mod descriptions include atlas XYWH. ZIP CRC is not a SHA-256 of individual graphic data or original-versus-patch hash evidence; report deliberately sets pixel coordinates and button semantics null.
- Research/implementation source only. No community mod archives actually downloaded/extracted, no Python script executed, no CI/Actions, build or PS5 gameplay test. User no-build requirement maintained. Issues #7/#8 still open, release branch and approved interface untouched.
2026-10-09 — Community PS glyph atlas R&D expanded to 24 leads / 16 games (SOURCE ONLY, NO BUILD)
User priority: study as many already-made Switch prompt replacement mods as possible for exact game resource structure, texture/atlas positions and UI action semantics, not launcher controller illustrations. Public pages identify leads only. Do not equate source text to extracted pixel positions or effective PS5 support. Do not launch GitHub CI/build, compile, push shipping, redesign the approved UI or close unresolved issues.
Machine-readable research: docs/PS_GLYPH_SOURCE_INDEX.json now contains 24 separate community mod references across 16 games, explicit title_id and game_update_reported only where stated, format/tool/context hints, and null original/replacement SHA and rect_xywh until binary inspection. Commits 598f945885fba952757d7d45305370c33e1ff0f5 (initial 23/15) and fede451f0e67c80b12fa2e5a592d8a4efc1b08f2 (BALL x PIT 24/16). Gate tools/check-ps-glyph-community-index.py (edb737ea7eee1ca0700a4326ab21bae0e72c4023) is SOURCE-ADDED and NOT EXECUTED: prevents marking geometry verified without inspected real mod archive, game/version and matching original/replacement hashes; PS5 qualification must cite hardware test evidence.
High-value exact game format leads:
- BALL x PIT Switch, author repo
https://github.com/mircowuffwuff/ball-x-pit-nsw-ver-playstation-button-prompts: original Title ID010086A022444000, game version 1.251; modified RomFSData/resources.assets, Unity Texture2Dcontroller_btns_outlined, export via AssetStudioMod, edit/import via UABEA, RGB32/RGBA texture conversion. Includes face/shoulder/trigger/D-pad PS replacements, ZL/ZR icon made 1 pixel shorter, plus/minus Start/Share skipped due to incompatible rect sizes. Author tested Eden Android 0.1.1 only; not PS5. Author says game already bundled PS4 icon art. Public README identified paths/behavior, NOT extracted file bytes/XYWH or console performance. Unity asset reimport remains unimplemented in our pipeline. - Zelda TOTK, source https://gamebanana.com/mods/443260 community comment points to
UI/LayoutArchive/Common.Product.110.Nin_NX_NVN.blarc.zs→__Combined.bntx→Nt_KeyTexA_00^d.bftex(B/X/Y icon region). This is unverified community-reported path, not byte-level proof. TotK research says dictionary-aware Zstandard tools use dictionaries inPack/ZsDic.pack.zs; related toolhttps://github.com/TotkMods/TkZstd. Scene/canvas/font vs texture interactions must be separately verified. - Other relevant source cases: Pokémon Legends Arceus BFLYT overlay/color behavior, Xenoblade Chronicles 3 custom
xcnx-file-loaderandxc3_lib, TOTK special hints/layout/fonts, Metroid Dread Triangle/Square corrections, Link's Awakening multiple ABXY layouts, PLA Z-A .dds/Trinity and update breakage. Source list records separate game/version concerns.
New read-only technical tools (all commits [skip ci]):
tools/ps-glyph-mod-diff.pycompares local ZIP mod PNG/TGA resources against exact relative original RomFS files, records SHA-256 of each byte stream, alpha-aware visible-pixel connected-component XYWH regions, unsupported proprietary files and size/path guards. Commits4c2cc77f31d4c44679c47c34b369a8bd5ec3c537,2663918038ba6954377d4444cb332972bce5ced3(correct adjacent-run pixel geometry),865160ad6533f17759fb00d1bd104ea3cd2a416c(ignore invisible RGB under alpha0). Diff rectangles are NOT necessarily safe sprite slots or named buttons.tools/ps-glyph-mod-folder-diff.py,9bc2f854bd305e52f6211b89d1fddd1e1add952b, reads authorized already-extracted .7z/.rar mod folder trees, rejects symlinks/unsafe filenames, reuses pixel difference engine. No extraction performed by tool.tools/ps-glyph-sarc-inspect.py,7f75f286629cec478762127902d3b0ecea0844c8, read-only bounded SARC v0x100 SFAT/SFNT internal member names, absolute byte offsets and lengths; accepts only already-decompressed archive. Synthetic LE/BE fixturetools/check-ps-glyph-sarc-inspect.pycommit3721a7a011e8b45cdd10dc9f4d1e554e3bb59367, fixture not executed.tools/ps-glyph-bntx-inspect.pyadditionally exposes BRTI byte offset, mip data pointer table and candidate level offsets, commitca49bf628d8004819f4890a61197566792f03c71. Synthetic mip fixture intools/check-ps-glyph-atlas.pycommita193c1d8d340bd9d1a2c6cd2e03d6b9362f61a8b, not executed. BNTX textures are not untiled/decoded/rebuilt.tools/ps-glyph-exported-texture-diff.py,6423ab100add0812a4f57be62ca44bd154b529f6, compares separately exported original/modded Unity Texture2D PNG/TGA pairs (or externally decoded other formats), recording source-image hashes and visual changed-pixel regions; it does NOT verify or rewrite the parent container.- Synthetic fixture
tools/check-ps-glyph-mod-diff.pyaddeddfcad97509151af3b22df80f75c0a52858ee8eb9, updated with extracted-folder test654a6001d3eb35ec83854aef8d958f20633a0c44and fully-transparent RGB-noise testccf4455d83e1e5a4c7000ef64819cf39819ccaaf. Fixtures are NOT RUN.
Documentation: docs/PS_GLYPH_REVERSE_ENGINEERING_PIPELINE.md (901214f1b00f7491272f4e4e26bb70981cbaf65d, 919f434659178e424616ed71582a611af5863ffd) explains exact commands, source fingerprint/scene/semantic qualification, dictionary decompression and Unity Texture2D workflow. docs/PS_GLYPH_MOD_TECHNICAL_ATLAS.md appended with BALL x PIT and TOTK real leads (7c64ab591623439bc5373a47931de693c3ec7697); docs/IN_GAME_PLAYSTATION_GLYPHS.md cross-links (1b45f354bc746aa444af471f28fd397a600efa1d).
Hard stop: No downloaded/unpacked community mod ZIP, no original Nintendo resource bytes, no actual matching converted glyph resource validated. Every research index rectangle remains null, builtin headless/glyph_overrides_generated.h still has ZERO verified in-game art rules. No new Python tests/CI/native SDK build/PS5 firmware run. Unresolved format-specific BNTX/BFRES/Unity editing, BFLYT context font/layout, ZSTD dictionary, title-by-title visual testing and general FC27 GPU/JIT issues remain OPEN. Preserve branches dev/ps5-sparse-jit (changes) and fix/0.40-zbic-13.60 (release), approved purple interface unchanged, issue #7 and #8 still OPEN.
2026-10-09 — Direct SARC→BNTX texture chain without extracted member files (SOURCE ONLY)
- Extended
tools/ps-glyph-bntx-inspect.py::inspectto accept a bounded in-memorybytesBNTX as well as filesystem Path, so a parent archive parser can pass actual embedded payloads directly; commit1f0b00964251db3409cb7044527d05b93bb32b9b. It remains read-only, no unswizzle/injection. - Added
tools/ps-glyph-sarc-bntx-chain.py, commit85e2496d90bad7cfced49b4850fd2bda5be68c97: inspect a locally authorized already decompressed SARC/BLARC, find up to 32 bounded.bntxmember records, parse their BRTI texture names/sizes/formats and map their BRTI/mip byte offsets into outer SARC absolute byte offsets. Even a full nested chain does NOT prove a PlayStation button identity or XYWH pixels. - Extended synthetic
tools/check-ps-glyph-sarc-inspect.pyfixture with one nested BNTX, exact expected parent byte offsets and fail-closed invalid SARC byte ranges; commits2a7c6a50ffb0d3b2d750e986e2576a431b97a556,d980ebd02eb54e717b47dba3a44c3bc7d5c8999c(corrected literal NUL in synthetic BNTX magic). Fixtures NOT EXECUTED. - Added
tools/ps-glyph-exported-texture-diff.pysynthetic Unity Texture2D diff fixture totools/check-ps-glyph-mod-diff.py, commite26040dedf7962c0471485af41ed7a687b9ad41c; not executed. - Documented nested scan in
docs/PS_GLYPH_REVERSE_ENGINEERING_PIPELINE.md, commit358c0e245a5b6ddfe830d41dd08e6bb0db5b65df. - User no-build gate holds: no Github Actions, host Python fixtures, PS5 SDK compile or hardware runs. Do not update shipping branch
fix/0.40-zbic-13.60or modify the approved violet UI. Issues #7 and #8 remain OPEN; compatible in-game glyph packs remain zero until real sources and hardware visuals are qualified.
2026-10-09 — Expanded to 26 public mod references / 18 games; non-texture limitations
- Further community mod source pages uncovered Persona 3 Portable (Switch) at https://gamebanana.com/mods/461733 and Tokyo Mirage Sessions #FE Encore at https://gamebanana.com/mods/367516. The technical index now has 26 sources across 18 games, commit
a7c1e4a9342f9638ae525016fb4b0ae864b4da5b; all real atlas rectangles still NULL/unverified. - Persona 3 Portable Switch published actual proprietary nesting: Title ID 0100DCD01525A000,
romfs/data_EN/umd0.cpk→init_free.bin→init/camp.bin→pc_button.spr, using CPK File Builder and Amicitia. Its author's STANDARD PS mapping is Nintendo A→Circle, B→Cross. A native PNG/TGA sprite swap cannot rebuild CPK/SPR without a verified decoder/repacker. - Tokyo Mirage Sessions author says ABXY and L/R/ZL/ZR art replaced, but Start/Select/PS art has incompatible sprite bounds and in-world
Checkprompt is NOT texture-backed. This is a positive example of an unsupported procedural/text/layout glyph category, so claiming universal runtime replacement from an atlas alone would be false. - Guide and technical atlas updated with these requirements, commits
d01d0e1985100247f48fe27a31b6a7edba8daa3c,47be49459f6b52031e48cf29c150c188cb8aa7df,67045dc75dd07f1a8af4bcf7f1c07780910a6ede,974711f071cd45caa7c9b7713be3cdf99fcaa471. - All source-only
[skip ci], no tests/host scripts actually run, no mod archive or user game files fetched, no native PS5 compile/hardware runs. Approved UI and shipping branch intact. Issue #7 graphical assets and #8 JIT/GPU/FC27 remain OPEN until their actual hardware and content gates are met.
2026-10-09 — USER-APPROVED MULTIPLATFORM EXPANSION: Switch 1 → PC/Wii U/PSP glyph mods, archives and built-in art (SOURCE ONLY, NO BUILDS)
User request: broaden the discovery of exact glyph position/engine/asset structures beyond Switch-only mods. Start with the already indexed Switch 1 titles, trace source games on Steam/PC/Game Pass/Wii U/PSP/PlayStation/Xbox, existing mods, GitHub tools and title-specific asset packaging. Extract technical paths and behavior, not pretend public screenshots provide binary XYWH or automatically distribute community-owned bytes. Retain PlayStation graphical prompts inside games, not launcher controls, as priority.
Added docs/PS_GLYPH_CROSS_PLATFORM_INDEX.json (commit 324f45ccbcbcffbbd17003c1a72d63ef9db53406; corrected cross-only provenance and the unproven PC source asset path in 583a1aa05fa13c60fc538e0d257f6f17eec3c804): 10 technical sources matched to six of the 18 existing Switch-corpus games. They are additional to 26 Switch mod leads / 18 games; zero verified cross-platform Switch XYWH rectangles, zero binary archive comparisons and zero PS5 proofs. The index distinguishes same title/different platform from related but NOT identical titles/editions (SMT V versus Vengeance). Cross-platform source data:
- BOTW Wii U PS4 UI: GameBanana 33531 exposes three controller binding variants Standard A→B/B→A/X→Y/Y→X, Western A→A/B→B/X→Y/Y→X, PE identity, plus pause/controller, tutorial prompts. Mapping statements are not atlas coordinates or safe Wii U→Switch byte equivalents.
- P3P Switch ↔ PC/PSP: Switch port author explicitly credits the PC Controller UI Overhaul at gamebanana 423178; PSP prompt suite 354109 supports PS/Switch/Xbox/keyboard and L1/R1 vs L/R variants. Switch known
data_EN/umd0.cpk → init_free.bin → init/camp.bin → pc_button.spr; PC file path not assumed without inspection. - P4AU PC: GameBanana 385908 controller UI v2.1 has PS4/Xbox/Switch/Arcade and training-menu/ABXY variants, relevant to Switch prompt atlas semantics; direct PC Reloaded-II mod package cannot be layered onto Switch.
- P5R PC Game Pass: GameBanana 408074 PS4 prompt mod changelog specifically fixes L3/R3 sprite bounding boxes. GameBanana 408571 documents PS/Xbox/Switch colored face icons. ShrineFox P5R PC mod support documents
BASE.CPK/EN.CPKplus Reloaded-II/Persona Essentials/AWB/SPD/PAK/BF/BMD file hooks. PC archive layouts/XYWH not proven on Switch. - Bravely Default II PC: Nexus mod 14 distributes Unreal
.pakPlayStation icons with five Start/Select / touchpad variants (arrow, L/R, Options/Share); requires identifying actual UTexture/package names, then matching Switch cooked platform data before any use. - SMT V: Vengeance Steam-derived localization mod to Switch yields mixed Xbox/Nintendo prompts (GameBanana 533409); engine-family NEGATIVE case, not evidence that original Switch SMT V shares offsets.
- P3P PC Colorful Skills+ (GameBanana 423473) conflicts with Controller UI Overhaul in parent
init_free.bin, even if sub-sprites differ: archive merge/scene conflicts need safeguarding.
New code [skip ci], not run: tools/check-ps-glyph-cross-platform-index.py (50607ef6c81bfcc654d2c61d5e78e9eee8ed33ac) refuses missing Switch source, mismatched title relation, unsupported geometry/PS5 claims. tools/ps-glyph-cross-platform-image.py (983ed834c4bf4214aa0c341df4374af96aabe32c) takes three legally decoded PNG/TGA inputs (other-platform ORIGINAL, other-platform MOD, Switch ORIGINAL) and proposes changed-pixel XYWH only if the originals share dimensions and exact visible premultiplied RGBA. If any rendered pixels/dimensions differ, it emits null transferable rectangles; even a match is still unapproved pending filename, container SHA, version, screen/action semantic and PS5 test. Synthetic fixture tools/check-ps-glyph-cross-platform-image.py (0d9995d2975823ee5e351338ff0e8bd8a3dfa12b) added only.
Universal index progression: tools/ps-glyph-platform-coverage.py (8ae0a94a4271d19e4e628ff09bcde0f15fe8b0fe) produces explicit research worklist for all existing 18 Switch titles, linking cross-platform leads, known ROMFS hints, unresolved original SHA and scene-gates. Synthetic source gate tools/check-ps-glyph-platform-coverage.py (fea4b1a6ec98646604f5164f1134dc54c7f75a5b) added only. tools/ps-glyph-mod-inventory.py extended to label probable extracted ZIP member formats for Unity resources.assets, Unreal .pak/uasset, CRI .cpk, Atlus .spr, Nintendo BNTX/SARC and BCML BNP, --platform label: ff49af21035897c0d1cbbdc233d38b7e22e9eb55, d33e3ac8b434df061f1da1d06a4d6b24caae158a (proper NUL/newline escaping); synthetic fixtures a3407ac11e5eda103b1ecd6d1db03aa9b2fd47f2, NOT executed. Names and extensions are hints ONLY.
New possible low-cost win — artwork already present in Switch title: tools/ps-glyph-builtin-platform-assets.py (c3f6fc9b4f5425c7404f7e19d3d1e9747dc80293) read-only inventory of local RomFS filename families such as controller_buttons_ps4/switch/xbox; matches normalized controller-art names with exact platform tokens while refusing symlinks and capping 100k files. May reveal shipped native PS visuals without third-party mods. Does not decode BNTX/Unity/Unreal interiors, determine drawn sprites, semantics or whether game loads the file. Synthetic fixture tools/check-ps-glyph-builtin-platform-assets.py (42cbbeb669eb458d67165009c04bf91cee2d1f0e) added only.
Docs linked: docs/PS_GLYPH_MULTIPLATFORM_RESEARCH.md (f575e57eb15c2b5d5a9d856661a82605574bc44f, 407be2afc8109caa02664b2e8c68a4c0fe4d4c49), core docs/IN_GAME_PLAYSTATION_GLYPHS.md (5a9f25348d0d8d9cf50e1fc94cdd127504b5959d, 6888700730f69e645f7018bd473b3777bf8fd042), reverse engineering guide docs/PS_GLYPH_REVERSE_ENGINEERING_PIPELINE.md (5fcc64cf9684fa77f3c997e13d7c804f9ee99323). Index is research-only; no included cross-platform assets or original game bytes.
Hard state: No local archive downloaded/unpacked; no real matching original cross-platform textures; no source script executed, Github Actions, PS5 SDK compilation or PS5 runtime tests. 0 verified in-game glyph replacements; headless/glyph_overrides_generated.h built-in still std::array<Rule,0>. User-approved purple UI unchanged and fix/0.40-zbic-13.60 shipping branch never altered. Issues #7 PlayStation glyph art and #8 FC27 frame pacing/sparse JIT/GPU remain OPEN. Do not claim cross-platform sources fix gameplay icon graphics or FC27 freeze without hardware evidence.
2026-10-09 — Continued multiplatform glyph R&D: six Nintendo-verified Switch 1 seeds, 17 external references, robust relocated sprites (SOURCE ONLY)
Intent: User instructed to continue broadening existing Switch 1 glyph work by mining mods/releases on PC/Wii U/PSP for actual asset formats, positioning and UI action semantics, while preserving game-original hashes and rejecting unproven runtime compatibility. No new GitHub Actions, native PS5 build or public release; user-approved purple Home layout and shipping fix/0.40-zbic-13.60 unchanged.
Six NEW Nintendo-confirmed Switch 1 game seeds (separate from existing 26 direct Switch mod references for 18 games): docs/PS_GLYPH_SWITCH1_GAME_SEEDS.json commit ae9f04329b2932a92f13a884aed4d89d307627c0 uses actual Nintendo store pages and release dates for Sonic Frontiers, Sonic Superstars, Overcooked! 2, Atelier Ryza: Ever Darkness & the Secret Hideout, NieR:Automata The End of YoRHa Edition, Enter the Gungeon. No Nintendo title ID, update, ROMFS path, atlas hash or actual Switch glyph mod invented for these six. Combined distinct research target scope now 24 Switch 1 titles.
External sources increased from 10 to 17 for 12 Switch targets, update docs/PS_GLYPH_CROSS_PLATFORM_INDEX.json commit d8355c67371218da23fe28b9a2bc9918cf91657d. New grounded technical leads:
- Overcooked! 2 PC Nexus 8: author says UnityPy replaces 35 Xbox texture entries using original PlayStation textures already shipped with PC installation, keeping names/dimensions, with 847 others preserved, backups and exact readback. This proves an in-place PC strategy, not that Switch build contains same original textures. Nexus 9 has BepInEx UI dynamically choosing Xbox/PS/Nintendo/generic by player, scene and shared prompt.
- Sonic Frontiers PC GameBanana 412767: controller UI mod v1.5.1 fixed inverted A/B,X/Y and v1.5 added icon-edge padding to avoid shader sampling color bleeding. Useful mapping/texture regression fixtures.
- Sonic Superstars PC GameBanana 474430: PS5/PS4/Nintendo/Steam icons, controller contrast/transparency, stick legend, explicitly PC-only.
- Atelier Ryza PC public
Skyyblaze/Atelier-Ryza-PS4-Switch-Button-Replacement: Special K .dds replacements for PS/Switch art; actual touchpad/share command behavior can require input remapping independent of textures. - NieR Automata PC Steam community guide 1368483795: Switch-letter artwork in
data/ui, custom sizing for Xbox texture/UI, Switch edition container equivalence still unverified. - Enter the Gungeon PC ModWorkshop 25536: Nintendo prompt icon art resized/cropped to match Xbox UI bounds,
sprites&dfspritesfolders; SREM/DFSprite plugin dependency.
Critical cross-platform false-positive bug FIXED source-only: tools/ps-glyph-mod-diff.py now implements shared visible_change_mask using exact per-channel RGB disagreement WHERE either pixel has alpha > 0, plus exact alpha difference. Previous 8-bit pre-multiplication could round small RGB differences at alpha=1 to zero and incorrectly conclude an original cross-platform sprite matched. tools/ps-glyph-cross-platform-image.py now invokes this shared exact comparator. Commits 81d25a098a8dd71bef5c69d191e6bdbe4043b9ec, a5b0bfa69364481f943046285f309afef12a5d61, with added source fixtures for alpha=1 changed channels abd68b7f8aedf7eb413f81e98168efe010b8a76d, 36b19c1e183d43aed960ad0a2cc94aafa40960c9. Fully transparent RGB remains ignored.
New research-capable strict sprite relocation: tools/ps-glyph-relocated-sprite.py commit 71afd7db6d11d5aa7ffa3163ceba402128431c38 accepts explicit x,y,w,h from an other-platform original+modified atlas, verifies the region contains visible differences, and scans a separately extracted Switch original atlas with a different size/layout for ONE pixel-identical original icon. Requires exact visible RGBA and alpha; transparent RGB ignored. If no match, more than one match, weak anchors, empty sprite, no mod pixel difference, or excessive scan burden, it fails closed with NO proposed position. This is geometry-only and never re-injects/activates art. Synthetic future fixture tools/check-ps-glyph-relocated-sprite.py commit 2cae52961ba33bc8e5498551d719281937bc8d5c models unique relocated, duplicate, changed and unmodified images; fixture NOT RUN.
Corpus and source gates extended: tools/check-ps-glyph-cross-platform-index.py commit 3bd1ec1f164560e691bbe0e608e97389ca9a1401 admits independently Nintendo-verified seed titles from PS_GLYPH_SWITCH1_GAME_SEEDS.json, requires official Nintendo URL and rejects duplicates. tools/ps-glyph-platform-coverage.py commit cc50e215f345784c56b65283fd136954eb9bef76 now includes ALL 18 direct mod titles + six official title seeds, without inventing Switch mods. Synthetic gate tools/check-ps-glyph-platform-coverage.py updated for 17/12/24 counts in commit 99e06d40284dd5568acab8e65b8e168d0a183ab2. Source fixtures remain unexecuted.
- Docs updated:
docs/PS_GLYPH_MULTIPLATFORM_RESEARCH.md(f5aa447e2bcffd4313839e105cff8e352042f3b3),docs/IN_GAME_PLAYSTATION_GLYPHS.md(9e625c199c0da54b4c4c25999062768dad851d3e), anddocs/PS_GLYPH_REVERSE_ENGINEERING_PIPELINE.md(7c8d49842885c4dd508d6bfeb3f161757e602acf).
Read-only live GitHub audit: index has 26 Switch references/18 games, six non-overlapping official seeds = 24 researched titles, 17 cross-platform source records/12 matched games, no orphan or duplicate IDs, cross-platform statistics self-consistent, exact comparator and relocated matcher in source, and headless/glyph_overrides_generated.h STILL std::array<Rule,0>. This is source data consistency review ONLY, not a Python regression run or physical firmware test. No mod binaries or original Switch atlas hashes were inspected; no verified real-world XYWH or compatible title pack can be claimed. Open issues #7 (glyph art) and #8 (JIT/GPU/FC27) MUST remain open.
2026-10-09 — Unity serialized Sprite coordinates / original multi-platform assets (SOURCE ONLY)
- Continued from the 24-title Switch 1/17 cross-platform source checkpoint. Critical observation from Overcooked! 2 PC PlayStation Layout author: PC build allegedly embeds 35 original PS assets selected to replace Xbox 1:1, with exact names/dimensions preserved; this remains a finding about PC, NOT proof identical assets ship in Switch build.
- Consulted official upstream UnityPy
K0lb3/UnityPydocumentation: Unity serializedTexture2Dobjects expose names and dimensions;Spriteobjects can exposem_Rectand render texture metadata. These are better paths to real in-engine glyph position hypotheses than mod text or image guesses, but still require proof of coordinates' origin, packing and runtime sprite binding. - New
tools/ps-glyph-unity-inventory.pysource commit0805897bb1d13a50c1c601a95ef7dfd7f0e29ba4: bounded read-only inspection of locally supplied Unity .assets/.bundle with optional UnityPy. Records parent asset SHA-256, Texture2D names/width/height and, for likely UI Sprite objects,Sprite.m_Rectandm_RD.textureRectmetadata when present. No texture bytes exported, encoded/modded art generated or package modified. Source compatibility for old/new UnityPy APIs is best-effort and NOT exercised against actual game resources. - New
tools/ps-glyph-unity-pair.pycommits3e80e34c5326f59f7a42de7e842c1d2d4cb7c81aand fail-closed JSON/platform-type fix4db78cbc7e1a0d0bf8f5eaf877d504ed3b54c338: aligns separate PC/Switch Unity inventory reports by exact object type/name, tracks differing serialized sprite textureRect coordinates, exposes PlayStation-named PC-only assets, rejects duplicate ambiguous names, but NEVER asserts same drawn pixels, identical package versions, actual Switch art availability or PS5 compatibility. - Synthetic optional fixtures:
tools/check-ps-glyph-unity-inventory.pycommit131667764f7d483fa4810152a663c9a0a9a01365mocks new UnityPy object API, andtools/check-ps-glyph-unity-pair.pycommitdd5470559a805eb96401b3c9ae3369b1d5dabc2amodels matching/differing Sprite textureRect metadata. Added source but NOT EXECUTED. - Docs:
docs/PS_GLYPH_MULTIPLATFORM_RESEARCH.mdcommitc0d23156036ee759cae84e3e3ec15996a1f7768aincludes optional UnityPy workflow and exact PC vs Switch metadata comparison;docs/IN_GAME_PLAYSTATION_GLYPHS.mdcommitb01e86ea7af35177381d875ff9c134546fc6cb62links the new approach. - Remaining hard block: no extracted original PC or Switch Unity .assets files supplied/inspected; no source ZIP binary comparison, no decoder/repacker roundtrip, no actual Unity sprite rect from a real game, no PS5 visual verification and no enabled PlayStation in-game art rules (header still
std::array<Rule,0>). Issue #7 remains OPEN; #8 JIT/FC27 remains OPEN. All commits[skip ci], no GitHub Actions, SDK build or hardware execution, no changes to shipping branch or user-approved UI.
2026-10-09 — Further Switch 1 expansion: Sonic Mania and Stardew Valley (SOURCE ONLY)
- Official Nintendo Switch 1 product pages confirmed two more games: Sonic Mania (2017-08-15) and Stardew Valley (2017-10-05). Added to non-modded title seeds in
docs/PS_GLYPH_SWITCH1_GAME_SEEDS.json, commit07b7c81dcfed6765295f46e8e396430a23a690ac. Total eight separately confirmed seed titles; combined with 18 titles carrying direct Switch mod references, there are now 26 unique Switch 1 research targets. - Added other-platform PC sources to
docs/PS_GLYPH_CROSS_PLATFORM_INDEX.json, commit5bba508313d09e2d0b6ff42f7f678ff85324eeb3: Sonic Mania PC GameBanana 31279 states unused built-in PlayStation buttons in original PC data, keyboard/context prompt caveats; Stardew Valley PC Nexus 25148 uses SMAPI/Content Patcher PS/Xbox/Switch icon variants, Nexus 40470 CustomisationPlus v1.1.7 adds hot-reloadable PS prompt sprite sheet. These describe PC implementation strategies only, NOT Switch ROMFS fingerprints or valid native scripts. - Current source counts: 26 direct Switch mod references for 18 games + 20 multiplatform research records touching 14 games, plus eight Nintendo-confirmed game seeds: 26 distinct researched Switch 1 titles. All exact per-game source/modified binary atlas positions still unknown, zero confirmed native PS5 title graphic packs.
- Updated source-only metadata contract
tools/check-ps-glyph-platform-coverage.pyto expect 20/14/8/26 sources/covered/seeded/total counts, commit5cc98e1774d1750d1793e45ccd19c739dba76ee3. Relevant guides synced, commitsb5cc47ef928d8bb008d7d7d2d490f2f7ed8d41e2,47e5373faeb5025daa08e3aff9c81233da641767,b7604d7169973c7c955477bde902aaa1beeb6e5b. - Source only,
[skip ci]: NO host tests executed, no GitHub Actions, no build or PS5 game tests.dev/ps5-sparse-jitchanges only;fix/0.40-zbic-13.60shipping and approved UI unchanged. Issues #7 (glyphs) and #8 (FC27/GPU/JIT) stay OPEN. Continue real binary/Unity/BNTX asset evidence and per-game/update semantic mapping before claiming compatibility.
2026-10-09 — Full Switch 1 Title ID catalog discovery without introducing false glyph support (SOURCE ONLY)
- Found public metadata-only Nintendo Switch TitleDB repositories
blawar/titledbandch0c01dxyz/nsw-titledb, with regional title metadata, base Title IDs and version-history datasets. These repositories are NOT game binaries or a catalog of button texture glyph positions. - New source-only tool
tools/ps-glyph-switch1-titledb.py, commit42697b758980c215479c3bf399d728e0e85a33af, accepts a user-supplied local JSON TitleDB or SwitchBrew-like game-title JSON. It conservatively resolves names from both 26-game Switch 1 research registries to candidate base Title IDs, and optionally generates a backlog across the locally provided Switch 1 TitleDB (--all-base-games). It never fetches/downloads assets automatically, never modifies native glyph catalogue, and never labels any game supported. - Match rules: exact punctuation-normalized game names only, no fuzzy/edition guessing; base-application-shaped 0100...000 IDs only; exclude update/DLC and Switch 2 prefix 0400; any duplicate title name with distinct candidate Title IDs becomes ambiguous/null, no selection. Source JSON SHA-256 recorded, but game update, actual installed title ID and original RomFS still require live evidence.
- Follow-up deduplicated multi-region TitleDB backlog by identical base Title ID (commit
3a7abe598ab28dccb93e8886ca5cd284aa0e18fe). Added synthetic test guardtools/check-ps-glyph-switch1-titledb.py(commit4917910ca854edb7742cd732efa383dd965c5987) for ambiguity, regional duplicates, genuine update/Switch 2 exclusion; fixture not executed. - Documentation
docs/PS_GLYPH_MULTIPLATFORM_RESEARCH.mdcommited928b798d9cd63c13c06dc3280f6f6e2dbb890dand core guidedocs/IN_GAME_PLAYSTATION_GLYPHS.mdcommit87c7155f49ca78ec5ec7a7b37cca4d35d6856db9include usage. - Status unchanged: 26 distinct researched Switch 1 titles (26 Switch mod references/18 titles + eight official seeds), 20 additional cross-platform research sources touching 14 titles, zero real extracted source-vs-mod sprite positions validated, zero active in-game PS graphical art rules and no FW13.60 per-title visual proof. No executed tests/CI/build, no modifications to shipping/UI; keep issues #7/#8 OPEN.
2026-10-09 — Verified GitHub mod-release metadata, offline ZIP digest gate (NO ACTUAL ARCHIVE BYTES)
- Using GitHub's authorized public release API, obtained exact release metadata for BALL x PIT author
mircowuffwuff/ball-x-pit-nsw-ver-playstation-button-prompts, tag 2:ball-x-pit-nsw-ver-playstation-prompts-2-1.251.zip, 3,131,472 bytes, published digest SHA-25644a99655acdccbef885fa25568dcc6c462264ae007653baa24095c2d83f0b9f5. Game compatibility declared by author: BALL x PIT base v1.251, Title ID010086A022444000, runtime tested Eden Android, not PS5. Readme names UnityData/resources.assets/controller_btns_outlined. - Same public GitHub API confirmed Atelier Ryza mod
Skyyblaze/Atelier-Ryza-PS4-Switch-Button-Replacementtag 1.6 release ZIPAtelier.Ryza.PS4.-.Switch.Icon.Mod.v1.6.SK.zip, 118,893,347 bytes, digest not supplied. Both stored as metadata leads only in newdocs/PS_GLYPH_OFFICIAL_MOD_RELEASES.jsoncommit3f8a84b1e18f7750fb58043d871c01970792ed34withasset_downloaded_or_inspected:false. - Attempted read-only download of official BALL x PIT ZIP to inspect real archive entries, but available environment disallowed web-based binary download and had no direct GitHub network DNS connectivity. NO ZIP bytes downloaded, hashed or unpacked; no real graphic offsets discovered or claimed. This is an environmental blocker, not evidence of unsupported game assets.
- Extended
tools/ps-glyph-mod-inventory.pywith optional--expect-sha256to fail closed when a user-supplied local ZIP doesn't match exact release digest (single ZIP only), commitba5e7a7b38488c2e3153d2fc4370cc42393fcb34. Documented exact local read-only command, official asset source and current download limitation indocs/PS_GLYPH_MULTIPLATFORM_RESEARCH.mdcommitfadf8d99de8bc4512d1e9d33f9b6b00d5eebfc9d. - Still
[skip ci], no source fixtures executed, no Actions/native builds/PS5 gameplay. Maintain 26 researched Switch 1 titles (26 Switch mods/18 titles + 8 official-only seeds), 20 other-platform leads/14 covered games, ZERO installed verified in-game PlayStation glyph rules. Keep #7 and #8 OPEN, shipping/UI intact.
2026-10-09 — Continued source evidence: DST real Lua menu coordinates, Klei XML UV parser, Balatro runtime selector (NO BUILD)
-
Latest scope: 26 direct Switch mod references covering 18 titles + 10 individually confirmed official Nintendo Switch 1 seed titles = 28 distinct Switch 1 games researched. Additional cross-platform sources 22 across 16 titles; zero verified binary in-game art packs, zero enabled
headless/glyph_overrides_generated.hrules, issue #7/#8 remain OPEN. This is research scope, not emulator graphic compatibility. -
Added 2 official Switch 1 seeds (Nintendo FR): Balatro, original Switch 1 release 2024-02-20 (keep separate from 2026 Switch 2 edition); Don't Starve Together, Switch 1 release 2022-04-12. Source
docs/PS_GLYPH_SWITCH1_GAME_SEEDS.jsoncommitb750b42f9455e91b274dd99346026f5178112b62. DO NOT infer actual game Title ID/update from store page. -
Added two actual code cross-platform sources
docs/PS_GLYPH_CROSS_PLATFORM_INDEX.jsoncommitd12f9430da9d315d97519fe1c00f0434ed87ce87: Balatro PC modNopoTheGamer/BalatroControllerGlyphs/ControllerGlyphs.luaoverridesG.CONTROLLER.get_console_from_gamepad()to returnPlaystation, and comments mention Nintendo/Xbox modes plusG.F_PS4_PLAYSTATION_GLYPHS; DST Lua script dumptaichunmin/dont-starve-together-game-scripts/prefabs/frontend.luaconditionally references artimages/ps4_controllers.xml|.tex,images/nx_controllers.xml|.tex,images/xb1_controllers.xml|.tex. These describe source-side functions, not proof runtime selector or original PS glyph art exists in Switch binary/ROMFS. -
New genuine source-code positions (NOT game texture pixel XYWH): GitHub file
taichunmin/dont-starve-together-game-scripts/screens/redux/optionsscreen.luadefines 17 DualShock4 and 17 Switch controller-help labels with x/y anchor coords, semantic string identifiers and layout constantsLEFT_SIDE=-415,RIGHT_SIDE=415,LABEL_WIDTH=320,LABEL_HEIGHT=50. The per-label local widget X position computed from exact code: if ANCHOR_RIGHTv.x - LABEL_WIDTH/2 - 8, elsev.x + LABEL_WIDTH/2; both controller layouts have position[65,-50,0], scale0.6. Stored SHA-locked public script-derived metadata indocs/PS_GLYPH_DST_CONTROL_UI_POSITIONS.json, commitsc9bc4fbe2d072c9bdd40f9d73fa50c7ce2b96b80and31ccf6750249823bdd87b27384fbeade1ea8f6ef. Example PS4 TOUCHPAD anchor(20,275), local widget(-148,275). The units are controller menu Lua layout coordinates, not texture sprite atlas XYWH nor validated on a particular Switch update. Do not feed into native glyph replacement engine. -
Balatro selector hook/source blob provenance in
docs/PS_GLYPH_BALATRO_RUNTIME_SELECTOR.json, commit091da8d0720dc94772324a08fdecb763d94592e9. Its PC Steamodded hook may not be in a particular Switch build; do not claim executable support. -
Klei normalized atlas parser
tools/ps-glyph-klei-atlas.pycommitfb90908d13b390c10a7c7a5e6ebeabf33d231258: bounded read-onlyAtlas/Texture/Elements/ElementXML, reports REAL UV attribute values for each named sprite and, given genuinely measured.texwidth/height, distinct pixel rectangles for top/bottom origin if texel-aligned. DTD, entity, malformed/out-of-bounds values and duplicate names rejected. Neither XML,.texoriginal game bytes nor coordinate origin have actually been supplied/verified; source only. Added synthetic fixturetools/check-ps-glyph-klei-atlas.pycommitfe1f637e6500646005453b6b6d43a8b0db388d9c, NOT EXECUTED. -
Klei PS4-vs-NX atlas name pairing
tools/ps-glyph-klei-atlas-pair.pycommita622c71c28936471deed7af3b786446da2974a92: joins separately inspected PS and Nintendo XML names, UV and top/bottom-origin coords but keeps game content SHA, sprite semantics and PS5 compatibility explicitly unverified. Source fixturetools/check-ps-glyph-klei-atlas-pair.pycommite34588e87face2083bc69f49c3c66577d0ca4368, not executed. -
Generic ZIP inventory
tools/ps-glyph-mod-inventory.pynow additionally reports probable XML/TEX Klei controller resource formats based on paths, commitccd9f21f34e00f0a531bf69a2b80edbb92ad0281(filename heuristic only, not binary check).tools/check-ps-glyph-platform-coverage.pyexpected counts updated to 22 sources /16 cross games /10 seeds /28 total, commit5e5d611f765c03c8edf9861c7838f386a35d2517. -
Updated core docs:
docs/PS_GLYPH_MULTIPLATFORM_RESEARCH.mdcommitsbe097fc04f19aa22d67a827cf41d4ac00c1b240c,84c8603344a35c15dabd2c191055a5113b62a8bf;docs/IN_GAME_PLAYSTATION_GLYPHS.mdcommit620ba330a030f4febd3f23b5dab37ced23a9e35b;docs/PS_GLYPH_REVERSE_ENGINEERING_PIPELINE.mdcommit924943360bd51ffa515544a289f3b2b3b44c4096. -
NO actual Klei XML/TEX / game ZIP binary acquired or decompressed, no source/modified real game texture diff, no full sprite atlas patch, no executed synthetic tests or CI, no PS5 FW13.60 SDK build/hardware QA. Remote Desktop Commander authorized Mac connection was OFFLINE; public ZIP download also unavailable via current isolated container network. Source-only GitHub changes
[skip ci]ondev/ps5-sparse-jit; shippingfix/0.40-zbic-13.60and approved purple launcher UI remain untouched. -
Follow-up Klei atlas inspector hardening:
tools/ps-glyph-klei-atlas.pynow rejects texture references with directory traversal, absolute/Windows-style paths, invalid extension or hidden/empty path elements (commit7039663e6ba9e23a90c053fd4e56d80696c6ef3d). Synthetic rejection fixtures updated intools/check-ps-glyph-klei-atlas.pycommit29d20cff7b1128c7456be464213cda7016001abf; fixtures not run. These are defensive source changes, not native PS5 execution. -
Added read-only, bounded, heuristic Lua source inspector
tools/ps-glyph-lua-source-inspect.py, commitecb0a0d0819462e79274ea2c934c7b214008bffc: scans authorized local Lua text for literalAsset("ATLAS"/"IMAGE", "...")paths,IsPS4/IsSWITCHplatform branches (as explicitly uncertain nearest-branch hints), and controller help label(x,y)rows plus code-defined widget X formula. It does not evaluate Lua, resolve dynamic paths, decode images, decide actual loaded content, or claim Switch/PS5 runtime support. Source-only synthetic fixturetools/check-ps-glyph-lua-source-inspect.pycommit68a369bdd9ca7d6d0caee5cf209caef184a85265, not run. Documented atdocs/PS_GLYPH_MULTIPLATFORM_RESEARCH.mdcommit1c441f1738b0b57651186922627905ee17c085ff. No CI/SDK compilation/hardware runs.
2026-10-09 — User requires genuine closure of ALL remaining Eden Encore pillars
MANDATORY scope for eventual release signoff (not currently achieved):
- FC27 real gameplay stutter/frame times, first-run versus warm-cache, physical memory/bad_alloc pressure, Home/Library held-navigation hitch, and in-match popup controller remapping.
- Sparse JIT and Dynarmic A64/A32 on PS5 firmware 13.60: actual executable dual RW/RX mapping and 2 MiB incremental physical commitment, 4-core and multi-game test, correct fallback and rollback. Host proof of 64 MiB virtual/4 MiB physical bootstrap is NOT firmware proof. Last native playable #37850528993 uses dense quarter-pool, not sparse.
- GPU: PRMT immediate/register Index implementations and limited Fermi2D z0/pitch software paths are source candidates; require real SDK compile, golden shader/copy visuals and frame timing. Remaining modes cannot be swept under the carpet.
- Actual PlayStation ART inside games: first FC27 menu/match/HUD with real approved RomFS asset/version/SHA, second title, reversible delivery, rights and authentic package integrity. DualSense controls are not a graphical art replacement; source catalog rule count remains zero.
- Approved purple Home/Library visual design unchanged; protected shipping branch fix/0.40-zbic-13.60 unchanged until firmware/rights/release review.
New permanent closeout tracking on development branch, [skip ci]:
- docs/PS5_CLOSURE_MATRIX.json commit
b66543051a: 5 workstreams and 26 distinct required acceptance checks, none currently marked passed or assigned fabricated evidence. - tools/check-ps5-closure.py commits
c46a7d2076andd17a09c302: fail-closed source-only local audit, pins exact 26 acceptance IDs and requires evidence for any claimed pass; --require-ready exits nonzero until all have been reviewed. No CI or release automation triggered by this script. Not executed yet. - docs/PS5_CLOSURE_CRITERIA.md commit
e50ad9cddddocuments full technical/firmware verification and no fake closure.
Verified latest native workflow status: run #37853342541 build job completed with FAILURE at Validate freshly built staged app; release skipped. According to #8, an obsolete EDEN_PAD_CONTEXT mode=ui checker was corrected afterward but no native rerun has verified it. No new build on this turn under the explicit user STOP BUILDS gate.
Hard blocked in session: Mac remote connection OFFLINE; public GitHub release download unavailable due DNS; no PS5 native hardware runtime or fresh FC27 frame captures. Thus the issues #7 and #8 must remain OPEN and no FPS improvement, real JIT performance, GPU compatibility or graphic glyph replacements can be claimed verified.
User directive: do not end with partial research as if feature complete; when hardware access and explicit native build authorization are available, actually implement/review/verify all four areas and only then close administrative tracking. Avoid further launcher redesign, keep shipping branch intact. Do not ask to repeat already known log/test symptoms.
2026-10-09 — Continue implementation, no CI/build: PS5 evidence dedupe, UI cover-queue hotpath, GPU diagnostic cap, glyph safety
User reiterated CONTINUE ALL unfinished areas (FC27 stutter/navigation, JIT sparse, GPU, in-game PlayStation art) WITHOUT new GitHub Actions/native PS5 build unless explicitly authorized. Prior dev state preserved, shipping fix/0.40-zbic-13.60 and approved purple UX untouched. Issues #7 and #8 remain OPEN.
Existing user logs recovered from ChatGPT Library for forensic read-only analysis: stderr(6).log and stderr(7).log are exactly identical content, NOT independent runs: each 361 lines/36149 visible characters; 12 old controller context events (7 mode=gameplay, 5 mode=ui reason=navigation), proving actual oscillation; 4 launcher slow frames of update 122,175,168,122 ms with draw 0/present 1 ms. Three graphic status lines show Nintendo original rule=unsupported. The current sticky-control source candidate and async cover decode changes postdate those older examples and require real console tests.
Old FC27 PS5 crash trace from 2026-10-08 has 45 EDEN_VULKAN_FRAME windows (6534 frames, 225.778088 sec, weighted 28.94 fps), minimum 5-second-window fps 22.562, max individual reported worst frame 481.612 ms, sum late38=309, late50=102, late100=26, late200=7, late500=0. These cumulative threshold bins overlap, NEVER sum the bins. No per-frame raw distribution, so cannot claim true p95/p99. Legacy build trace explicitly JIT free_mib=11826 admission_budget_mib=4376 sparse=0; late std::bad_alloc after a 440 MiB allocation request with only 38 MiB largest free chunk. These are PRE-SPARSE metrics. No private raw user logs committed to public GitHub. Aggregate report: docs/FC27_LOG_FORENSIC_2026-10-09.md commit b1458fa57b.
New source fix - native glyph staging correctness: headless/glyph_overrides_runtime.h commit c65ff39106 now rejects normalized-path aliases, duplicate paths that differ only in case and a RomFS file declared as its own parent directory; source C++ mock test added cases in tools/check-glyph-overrides-runtime.py commit 734cbe0d89. Installer tools/ps-glyph-pack.py also rejects RomFS AND replacement asset file/directory overlapping paths before staging, commit c00dd314e9, and companion synthetic tests in tools/check-ps-glyph-packs.py commit e6deccdf5f. These are infrastructure hardening, NOT a real PS atlas delivered.
New global UI responsiveness fix candidate: headless/prosperoeden/pe/ui/textures.cpp commit 8b3326d6f2 bounds stale Nlib cover/decode FIFO key lookups to 24 per UI update, rather than draining a possibly unbounded backlog of outdated filenames after media refreshes and blocking held navigation. Existing single-worker image decoding and max 2 GL texture deletions per frame remain unchanged. Source fixture tools/check-nlib-ui-recovery.py commit bd0dec0fff. Existing measured UI hitches are in UPDATE (draw/present 0/1), not proof this specific FIFO was their only cause.
New GPU diagnostic hotpath correction candidate: headless/gpu_native_observability.cmake commit c75b566a66 changes 8 previously UNBOUNDED atomic fetch_add sampling counters (shader PRMT-imm/PRMT-reg translation and Fermi2D exceptional software operations) to a shared bounded atomic CAS helper that stops RMW after 8 samples. Distinct PRMT modes and Fermi2D compatibility semantics are unchanged; no invalid paths hidden. Updated test source tools/check-gpu-native-diagnostics.py commit 47c1c098e8. No actual performance gain/hardware correctness claimed before native compilation and FC27 real retest.
New offline log analyzer tools/analyze-ps5-logs.py commit 3bfe7d503b parses existing PS5 logs and SHA-256 deduplicates copies to prevent false A/B counts; reports 5-second Vulkan FPS/worst/thresholds, launcher update stalls, PAD context flips, JIT policy, GPU errors and OOM. No PS5 runtime or network calls. Synthetic fixture tools/check-ps5-log-analysis.py commit b9396f561d (SOURCE ADDED, NOT EXECUTED). Library raw-byte materialization denied, so actual forensic calculations were made over Files.read indexed full text rather than a container copy; available source is original user-uploaded logs.
Still unverified: source patches require host tests/native link, SDK13.60 executable sparse RW/RX, shader golden pixels and Fermi2D 3D cases, real FC27 first/warm 2nd launch and UI smoothness, and legal per-game graphics atlas with exact original and replacement hashes. 26 closure-matrix gates remain FALSE until hardware evidence, do not close #7/#8. No Actions, SDK compile or hardware run started.
2026-10-09 — Final source verification of this continue-pass (NOT release ready)
- Corrected read-time size limit for offline
tools/analyze-ps5-logs.pyto avoid unbounded allocation if a file grows betweenstatandread(commitc35b4e8a8ab5aa9227e9165635b81084d9ea9e2a). This is OFFLINE utility hardening only. docs/PS5_CLOSURE_MATRIX.jsonupdated commitf9dde8387c87a1d00e9f59db48cd5e56173cee98: enumerates six actual source-code changes from this pass across launcher/FC27 logs, JIT evidence blocker, GPU diagnostics, glyph runtime and installer, all explicitlynative_ps5_verified:false. Exactly 26 hardware/release acceptance checkboxes remain false, no fake closure or support.- Remote GitHub READBACK only (not regression execution): verified runtime path guard and installer overlap checks, their unexecuted source fixtures, 24-item cover queue bound and regression source, GPU generated-source 8 bounded counter sites and zero remaining
fetch_add(1, relaxed)sites in that file, bounded log read and source fixture. Issues #7 and #8 still OPEN. DO NOT treat source readback as compiled/native validation. - Aggregated forensic report
docs/FC27_LOG_FORENSIC_2026-10-09.mdand issue #8 comment document old run stderr duplicates plus actual 45 window GPU results, including outliers and heap OOM. No personally supplied raw logs published. Future native tests only after explicit user approval; shipping branch and approved purple launcher UI untouched.
2026-10-09 — USER APPROVED PS5 ALL-ON TEST PROFILE + BUILD RUN (NOT RELEASE)
User clarified: Eden Encore is already a test app; enable available improvements by default, without any end-user 'Experimental' setting. Previous STOP BUILDS mandate now relaxed specifically for an isolated all-on dev/test run, NOT for publishing, shipping branch changes or claims of firmware qualification.
Changes physically in dev repository, source-only until CI and hardware report:
- tools/build-headless-native.sh commit
7d3cd2d78ef3162650f8c734d25813c54a928dab: transmits EDEN_SPARSE_JIT_DEV CMake cache boolean (previously silently omitted, which meant sparse could never compile on PS5 using normal script). - tools/build-package.sh commits
85638dbbd754a2931103aa1a20c04f85db0d62bd,65547f8f9e28233cc59d529ac68cbf4928af91fb: force EDEN_SPARSE_JIT_DEV=OFF for production/release-stage, set ON for dev TITLE_ID build with profile and native RADV Vulkan. - headless/main.cpp commits
7ce0de23c7e52cad9b2f9f81d929dc41feffd30e,96c4e1ff343b742d098bfb7236e3cbdd69c697d7: DEV profile on non-Safe Launch defaults sparse (if compiled), logical CPU placement and frame pacing diagnostics TRUE for ALL titles. Removed old experiments.json read/overrides entirely to prevent historical per-game 'off' entries silently disabling the test. Runtime ProbeSparseJitAlias may disable sparse if unsupported; still use native dense fallback, never partial executable map. - tools/check-experimental-performance.py commit
8d61223721edc3340c6b4cf3dd533f6af80f2ddc: source contracts adjusted to always-on dev, no stale per-game JSON. tools/check-ps5-architecture.py commit79f709500feaa111d57bd24161ddbfc35954fe6f: stale per-block IsSparseJitCode lookup test fixed to match current lock-free dispatch guarded by actual mapping owner CommitSparseJitCode. - tools/check-gpu-native-diagnostics.py commit
2e9946bf741bd0eaa1e32027734879b284f65563: fixed previous stale assert for generated bounded GPU sampler inclusion; actual PRMT Index/Fermi paths still need firmware/pixel validation. - .github/workflows/build-040-zbic.yml multiple commits through
f3a13b145dd336c80ee4874ac7f19a87a78fc060:workflow_dispatch test_all_on=true, test_title_id=0100C49025D3E000, publish=false, build_only=falsenow builds isolatedtools/build-package.sh devwith all three default-on source profile paths, validates stages and CMakeCache, then uploadsProspero.Eden-Encore-PS5-all-on-testONLY AFTER validations. Nomake-dist, no GitHub Release, no shipping branch touch. Push trigger[full-build] [test-all-on]on dev also supported, for this explicitly authorized test run. IMPORTANT GitHub concurrencycancel-in-progress:true; avoid further dev commits while its native run is active. - New tools/ci/check-all-on-test-binary.py commit
27ba67b6da8b557a92c62651730fec24c3260316: after compile verify EDEN_DEV_PROFILE=ON, SPARSE=ON, VULKAN=ON/RADV, ID=FC27, executable/artifact, all with hardware_qualified:false. Updated workflow call to pass actual FC27 title ID commit44322478ee6c795ba44bad13140f97058b462b52. - New tools/check-ps5-all-on-contract.py commits
b77a75ea232d9941f2f94cd802441732db513ff9,dd5d8d8460a9bdb6b50aba15a253b1a5b23345a1,4267faa10d39f40927b52c64519c1ee0ee8aa2c7,a3f84b1559ccddf822dcbcf698830d9901d150e7: source-only preflight checks dev-only branch, release/artifact isolation, disabled legacy JSON, real native sparse CMake flag, hardware probe; included in existing build workflow preflight commite52bced5ce25b5020f79136856acef06f017f71b. Additional build preflight runstools/check-nlib-ui-recovery.pyandtools/check-ps5-log-analysis.pyvia commitb88b653bfd92954745a7e6eeca18f3f051bed8bc. - docs/FC27_EXPERIMENTS.md commit
c220d2c247fa91e6a3722a642f42139b7535b672supersedes historical opt-in; docs/PS5_ALL_ON_TEST_BUILD.md commitf0d65636071c455de87a5769fc62d7b67015031b; docs/PS5_CLOSURE_MATRIX.json commitd942c73089909061f1b0e099ccd5c60e79a9984crecords 26 gates STILL false, no actual firmware validation; docs/PS5_CLOSURE_CRITERIA.md commitd2c009723ec73e5998aad93a998e6782f0671697now reflects user's explicit approval of isolated dev test run.
What 'all on' does NOT mean: cannot enable missing FC27 Nintendo→PlayStation graphical pixel mod art (0 real qualified packs), unimplemented GPU PRMT modes, external AI frame generation that doesn't exist, or safely combine unqualified shared-A64-JIT/compile batching switches into the sparse-JIT firmware qualification at first pass. Those remain OFF in the TEST dev profile but their code paths are available for separate validation if desired. Open issues #7 (game ART) and #8 (FC27/JIT/GPU), preserve approved purple design, shipping fix/0.40-zbic-13.60 branch unchanged.
Run path: one deliberately marked dev commit [full-build] [test-all-on] starts the native workflow after all source checks (no [skip ci] on that ONE trigger commit), OR manual GitHub Actions dispatch. Any running CI run does NOT count as success; check real native artifact, shader branch and PS5 FW13.60 logs, compare first/warm FC27, and don't administratively close remaining 26 checks before hardware proof.
2026-10-09 — Explicit PS5 test build dispatch marker
This checkpoint commit deliberately contains [full-build] [test-all-on] without [skip ci] to request exactly one GitHub native dev-profile run with FC27 autoboot, JIT sparse ON, RADV, logical CPU and frame diagnostics; full preflights and staged binary assertions apply. Artifact is test-only, no publication. Do not push another commit while Actions concurrency is in progress. Run success/hardware results are unknown until verified.
2026-10-09 — All-on PS5 CI run #37877104436 failed in runner setup, fixed without recompilation
- Deliberate
[full-build] [test-all-on]push commit41fa38af74b5e25261359739da177b5f00a6e0e4triggered Actions run 37877104436 at 2026-10-09T02:58:32Z. - FAILED at
Set up jobbefore ANY source tests/toolchain/native compilation: newly insertedactions/upload-artifact@043fb46d1a93c77aae656e7c1c64a8751fc6a0ahad 39 instead of 40 hex characters (missingd). Job log explicitly:Unable to resolve action ... unable to find version. - Workflow fixed to the same pinned valid 40-hex SHA used by existing upload steps (
043fb46d1a93c77aae656e7c1c64a875d1fc6a0a), commitf634c57ed25574c666615e5dd5ef5bb0331d7a11[skip ci]. Verified all eight workflowusesrefs are 40 hex. This fix alone has NOT compiled anything. - User-approved all-on test run remains the objective; no shipping, publish, UI edits, or PS5 claims. If retry is triggered from a new dev commit, wait for actual logs before qualification; don't touch dev branch midrun due cancel-in-progress.
2026-10-09 — Retry all-on test after runner-action SHA fix
This commit deliberately triggers exactly one new dev/ps5-sparse-jit native workflow using [full-build] [test-all-on], after verifying the pinned GitHub Action references. This is a TEST build; no release. Its native result and firmware qualification remain unknown until independently checked.
2026-10-09 — Unified PS5 all-on run #37877295311 blocked by four French locale gaps
- After correcting 40-hex pinned upload-artifact SHA, native dev workflow #37877295311 started and passed runner setup / guard / checkout / toolchain. It FAILED at
Validate launcher translations and locale runtime, before dependency build or PS5 compile. - GitHub job #113648696823 logs:
fr-FR.po: 370 texts, 4 problems, 8 warnings, 4 fatal untranslated message keys:Loading game library...,Could not load game list. Please try again.,Could not load game library. Reopen Encore to retry.,Game library unavailable. 29 catalogs total; other locales reported warnings only. French translation failure was unrelated to sparse JIT/experimental settings. - Added four faithful FR strings in
headless/prosperoeden/ui/lang/fr-FR.po, commit696f10227b3c5da2e53b1b89e7a3f91ea1d281db[skip ci]. Did NOT modify UI design, shell art or protected delivery branch. Next retry can reach subsequent source checks. - Run was FAILURE, not a compiled native test and not firmware qualified. 26 hardware checks and in-game glyph source artwork remain OPEN.
2026-10-09 — Third isolated all-on CI attempt
Push with [full-build] [test-all-on] after correcting exactly four missing French locale keys. Await real workflow status. No other dev commits while native run active due cancel-in-progress.
2026-10-09 — Third unified test run #37877447555: embedded FR catalog out of sync
- Native all-on workflow run 37877447555 reached translations and failed before source validation/native build. The four newly added fr-FR strings are now present (
fr-FR.po: 374 texts, 0 problems), but GitHub log explicitly showedfr_fr_embedded.h is stale; run tools/launcher/strings.py embed-fr, hence29 catalogs FAILeven though the locale catalogs themselves had zero problems. - Regenerated
headless/prosperoeden/fr_fr_embedded.hbyte-for-byte from the currentheadless/prosperoeden/ui/lang/fr-FR.pousing the exact documentedwrite_embedded_frcode template; commit0fe70afd0867e7c898dbcabc0603231550caac09[skip ci]. Valid raw delimiter)FRPO"cannot collide with the PO content. UI design and localization format unchanged. - No native PS5 code compilation had occurred at this point. 26 hardware criteria, FC27 JIT, GPU and real in-game glyph artwork still unqualified. Any subsequent action must be re-evaluated from the new commit without confusing older setup/translation failures with hardware issues.
2026-10-09 — Native PS5 all-on CI retry after embedded FR catalog sync
Explicit source-only compile+stage reattempt requested through [full-build] [test-all-on]; real Actions status must be read back. Preserve dev branch unchanged during run to prevent concurrency cancellation.
2026-10-09 — Fourth all-on run #37877625109 reaches architecture preflight, stopped by obsolete launcher checker
- Actions run 37877625109 passed valid launcher translations, toolchain, version/legal package checks, storage startup, migration and video presets, then FAILED at
Validate startup, elevation and storage contractsdue source contracttools/check-encore-ux.py:63 assert '0xa002030a SYSTEM_ILLEGAL_FUNCTION_CALL' in services. headless/prosperoeden/eden_services.cppnow correctly uses cancelable asynchronous directoryTreeBytes(...)for storage/logs and deliberately avoids dangerous native libc statfs/statvfs on firmware 13.60. Old numeric error string was removed; checker out of date. No evidence of regression in that storage code from this fail.- Fixed checker to verify actual
previously raised SYSTEM_ILLEGAL_FUNCTION_CALLsafety comment, exact storage root call andTreeBytes(cache / "shader", cancel)+TreeBytes(Eden::LogsDir(), cancel). Commit111abcc344d4f519fddf633515753829a57e45f3[skip ci]. A separate JS source readback found no other simple missing literal in samecheck-encore-ux.pyafter correction. - NO native PS5 SDK compilation yet. Test run remains failed and all 26 hardware qualification checks open; shipping branch/approved UI unchanged. CI retry needs a new authorized dev marker and no midrun writes.
2026-10-09 — Fifth native all-on test attempt
Trigger [full-build] [test-all-on] on dev after correcting the obsolete storage contract. The CI test remains isolated from shipping and publication; verify real result before claiming success.
2026-10-09 — All-on run #37877876185 failure diagnosed and source gate fixed
- Run #37877876185, source commit
6bbeea53ec, FAILED on Validate startup, elevation and storage contracts, in tools/check-ps5-architecture.py line 37, assertionWrong memory snapshot stages. Prior stages incl. translation, storage migration, launch UX, graphic branding, perf policy, and all-on contract PASSED. No native SDK build yet. - Actual app source
headless/main.cppreports direct memory ONLY oncore_initialized,core_shutdown,core_destroyed, and JIT ownership ongame_loaded,nro_loaded,cpu_manager_ready,core_shutdown. Old checker incorrectly required ALL six combinedstd::string_view{name}test expressions to equal only three. - Fixed checker to extract + verify direct and JIT lifecycle hooks independently, and recognize the actual conditional
passed(game ? "game_loaded" : "nro_loaded")stages. Source commitf8487286a22fab31fddbae3af1d0ccbd8a5dc5ed[skip ci]. GitHub source readback independently confirmed exact stage sets, their call sites and both guest paths. Additional JS literal-assert scan across nine live contract inputs found zero obvious stalein/not inexpressions; NOT equivalent to executing all host regressions. - No release/ship branch changes, user-approved purple UI unchanged, sparse JIT/FC27/GPU/actual PS button art still not firmware-qualified. The first failing run is red for a stale host source assertion, not native code compilation.
2026-10-09 — CI retest after fixing split direct/JIT memory stage contract
This commit triggers one isolated PS5 all-on native test pipeline using [full-build] [test-all-on]. No publish, protected shipping branch change, source UI redesign or firmware-success claim. Do not push other dev commits while test running.
2026-10-09 — All-on run #37878158308 architecture gate passed assertions; summary-print variable fixed
- Run #37878158308 FAILED at the same "Validate startup, elevation and storage contracts" CI stage, but printed
PASS PS5_NATIVE_ARCHITECTURE_CONTRACTSbefore failure. Actual failure:NameError: name 'memory_stages' is not definedin final print line oftools/check-ps5-architecture.py. The preceding source gate was refactored intodirect_stagesandjit_stages, but its informationalprintstill used deletedmemory_stages. - Updated both summary lines to independently print defined
direct_stages/jit_stagesin commit0a5919a25088cd363c3a46a03287cd316df17f25[skip ci]. Source readback confirmsmemory_stagesno longer appears; prior CI run proved all substantive assertions pass. No native SDK compile occurred in red run. - Protected release branch unchanged; approved purple launcher UI unchanged, no real game art packs have been validated. GitHub runs are tests only; 26 hardware criteria still pending.
2026-10-09 — Isolated all-on native test reattempt after source-gate NameError fix
This commit deliberately requests one dev/ps5-sparse-jit all-on PS5 build [full-build] [test-all-on], with release publishing prohibited and source-based tests first. Actual result is not known at trigger time.
2026-10-09 — All-on run #37878355536 passed architecture/glyphs; failed stale GPU generated-unit count
- Run #37878355536 progressed past
PASS PS5_NATIVE_ARCHITECTURE_CONTRACTS, real C++ update registry host check, legal glyph pack manifest/sandbox test, controller mapping bijection, and PlayStation Auto C++ test; all reported PASS. No native PS5 app built yet (still inside pre-build host checks). - Blocker in
tools/check-gpu-native-diagnostics.pyline 241: stalecmake.count("write_derived(") == 2assertion; liveheadless/gpu_native_observability.cmakeactually creates THREE derived TUs:maxwell_prmt_observed.cpp,sw_blitter_sized.cpp,fermi_2d_observed.cpp. The extra widened software blitter is a legitimate GPU compatibility correction, not duplicated output. - Source contract fixed to require count=3 AND all three names in commit
78eb1305bdf746c0f9a2ee94b9a3839f020de14b[skip ci]. Existing semantic PRMT/Fermi assertions retained. Source readback matched all three generated unit output paths; GPU rendered pixels/actual PS5 native compile NOT yet verified. - No launch UI visual changes, shipping branch/publishing untouched; 26 full hardware qualification criteria remain open. More host regression gates still follow this failure point before native compilation.
2026-10-09 — PS5 all-on native CI after GPU generated-unit assertion fix
Explicit, isolated dev/test retry [full-build] [test-all-on]. No release publish, no design changes; current run status to be verified separately. While running, avoid commits on the same dev branch because GitHub cancels prior work.
2026-10-09 — All-on CI #37878603774 passed GPU/glyph/controller host checks, A32 JIT fixture falsely assumed 128 MiB
- Run #37878603774 progressed beyond PS5 architecture/PRMT-Fermi GPU source contract and real glyph installer/PlayStation Auto mapping C++ host checks; FAILED in
tools/check-jit-startup-retry.pyC++ host mock, within "Validate startup, elevation and storage contracts". - Header
headless/jit-startup-retry.hintentionally reduces failed JIT arena by 25% each iteration, 2MiB-aligned, converging to baseline. Observed A32 mock startup attempts: 512 → 384 → 288 → 216 → 162 → 120 MiB, with 5 retries, 6 construction attempts, threshold at most 128 MiB. Prior fixture incorrectly asserted final capacity ==128 MiB, which cannot occur under that geometric strategy, and C++ abort was its erroneous assert; not an actual PS5 runtime crash. - Fixed test
tools/check-jit-startup-retry.pyto assert complete six-element capacity trajectory and bound 64 MiB <=120 MiB <=128 MiB, n==6, commit94797ca939f3a7fe019cde5d4c3d4f6d552f9a33[skip ci]. Did NOT suppress native allocator failure and did NOT modify correct alloc algorithm to game-specific magic target. Requires fresh CI verification. - No PS5 SDK-native compile or FW13.60 proof yet. All-on dev branch only, launcher design unchanged, protected shipping branch unchanged, GitHub issue #7/#8 and 26 firmware acceptance gates remain open.
2026-10-09 — All-on PS5 test retry after exact A32 JIT mock contract correction
Explicit one-shot [full-build] [test-all-on] on the dev branch, full preflights, isolated test artifact, no release/ship branch/UI changes. Build outcome unverified at trigger time.
2026-10-09 — All-on run #37878821069 passed sparse JIT host-native mocks; obsolete Nlib function signature checker fixed
- Run #37878821069 FAILED later in "Validate startup, elevation and storage contracts" at
tools/check-guest-network-isolation.py:31. Before failing, CI explicitly passed actual Xbyak sparse JIT host mock, alias dual mapping/bootstrap/physical 2MiB page growth/rollback/OOM/cleanup, shader cache pressure, performance policy and native HTTPS/CA/DNS test. These are HOST mocks and checks, NOT firmware 13.60 confirmation. No PS5 native SDK build in this run. - Obsolete checker expected two-argument
NlibEnrichment EnsureNlibEnrichment(std::uint64_t title_id, int language_choice). Actual current function addsconst std::atomic<bool>* cancel = nullptr, andcancelled()guard to stop expensive Nlib work when the screen/session is ending. Changed only source checker to assert exact cancellation-aware signature, acquire-load cancellation test and call siteEnsureNlibEnrichment(game.title_id, language_choice, cancel), commita73e92785189915521a6ae5a4ba384bd8375ef70[skip ci]. Guest sockets/DNS/NIFM remain offline, while the launcher uses native HTTPS independently. - Remote Desktop Commander MacBook Pro is currently OFFLINE (last seen ~7h ago), cannot execute local host fixtures there. Container DNS also lacks GitHub; GitHub CI is current usable test runner. No source/vendor files, launcher design, or protected shipping branch modified in this fix; 26 firmware hardware gates still open.
2026-10-09 — PS5 all-on CI retry after cancellable Nlib contract update
One explicitly authorized test compilation attempt [full-build] [test-all-on] on development branch, no shipping changes or publish. Check actual run result before declaring qualification.
2026-10-09 — Latest PS5 all-on red runs and Nlib UI validator repair
- Run #37878821069 failed in host source preflight on stale
check-guest-network-isolation.pyNlib API signature (already updated in separate commits by the time of this checkpoint). - Run #37879082535 later passed source GPU and JIT memory mocks, shader pressure, guest networking, and full Nlib media-safety checks, but failed at
tools/check-nlib-ui-recovery.pyexpecting obsolete literalif (!ValidNlibTga(path)). - Current
headless/prosperoeden/eden_services.cppvalidates TGA header, dimensions and full byte length usingValidNlibTga, rejects damaged cached Hero and Icon via ternary, omits invalid screenshot viaif (ValidNlibTga(path)), and correctly allows scheduled refresh withif (!ValidNlibTga(path) || refresh_existing_artwork). The old source assertion was false despite correct behavior. Replaced it with positive exact assertions on all these safety behaviors intools/check-nlib-ui-recovery.py, commit6afa12a363e02bb3788aacce114bea6f3453b2d7[skip ci]. - A GitHub source readback crosschecked simple literal contracts for the other Nlib/UI source strings and found no obvious mismatches; this is NOT a substitute for executing the remaining multi-stage host tests.
- At this point NO native PS5 SDK compile yet because CI stopped at host preflight. 26 hardware acceptance checks pending. No approved launcher style or delivery branch edits. Issues #7 (graphic art) and #8 (FC27/JIT/GPU) remain open.
2026-10-09 — Next isolated all-on PS5 preflight/build attempt
This commit deliberately triggers ONE test-only GitHub Actions run via [full-build] [test-all-on] after repairing the obsolete Nlib TGA source check. Publishing and shipping branch changes remain forbidden; observed CI result must be fetched before any success assertion.
2026-10-09 — Current red CI #37891159708 Nlib test NameError fixed; trigger isolated recheck
- User reported red latest full all-on PS5 dev run #37891159708 on commit
a100724ab4c5. Last job failure:tools/check-nlib-ui-recovery.pyline 194NameError: name 'native_hdr' is not defined; native source verifications up to this point, including real hosted sparse-mapping allocator mocks, shader cache policy, network/Nlib read tests, PASSED; native PS5 compilation was not reached. - Root cause: script already had
native_svc = src(...eden_services.cpp)/native_hdr = src(...eden_services.h)at lines 286-287, after first usage at line 194. The fix commit3faebcedfe72501bbb2e84fae29c624bdfcb72d2moved both definitions directly afterhero_typesat lines 41-42, retaining all existing assertions. - Static inspection (NOT executing Python) evaluated 221 source-string
assert 'literal' in/not in variablechecks against the live correct source and extracted function slices; 221/221 matched. The other paired function-split delimiters also exist in their proper files; actual CI and PS5 runtime validation remain pending. - This follow-up commit deliberately triggers one
[full-build] [test-all-on]PS5 dev CI reattempt; no GitHub Release, no protected delivery-branch changes, no approved purple UI redesign. Test JIT sparse/PRMT-Fermi/FC27 glyph ART remains hardware/unverified; issue #7/#8 OPEN, the 26 final gates unpassed. Do not push further dev commits while CI is running because workflow cancels earlier runs on that branch.
2026-10-09 — Correct async frame budget source gate; all-on PS5 validation
- CI run #37891763127, commit
c43127e9, FAILED attools/check-runtime-frame-budget.py:39,ValueError: substring not foundin legacy literal--budget;assertion. Native PS5 compilation and hardware runtime were NOT reached. Prior host-side JIT sparse allocator, shader persistence, Nlib and networking checks passed but do not establish FW13.60 compatibility. - Actual
Textures::pump()had already switched to a nonblockingstd::futurecompletion check, single async image decode worker and bounded frame queue/GL upload. The old per-attempt decrement no longer exists. Commit533870cfupdates only the source contract test to the async pipeline. It does NOT modify actual emulation/runtime code or prove the fix by CI. - Subsequent push run #37892826584 was SKIPPED: dev build job requires
[full-build]in commit message, so this is neither green nor red test evidence. - This memory-only checkpoint deliberately requests ONE dev test-only CI run via
[full-build] [test-all-on]with no publishing/shipping branch changes. Observe preflight and compilation outcome before further pushes; workflow auto-cancels earlier jobs. Do not describe experiment-only glyph resources, sparse JIT host mocks or GPU code as hardware-qualified. The approved launcher artwork/UI must remain unchanged.
2026-10-09 — #227 Home media cancellation-aware source gate (CI blocker, not PS5 runtime defect)
- All-on run #37894060774, SHA
a467c0d3, FAILED in the source preflighttools/check-home-media.py:20. The older checker assertedservices_.enrich_game_media(std::move(request)), but both Home and library requests now deliberately pass&media_cancel_to stop work when a session ends. Existing concrete implementation andServicesoverload support this cancellation token. The previouscheck-runtime-frame-budget.pyfix passed in this run, as did all earlier JIT/GPU/Nlib/networking source/host mocks. PS5 SDK native compilation and FW 13.60 hardware validation still NOT REACHED. - Commit
9f76271e[skip ci] updates the test only: assert the cancellation-aware call for bothrequestandcopyplus the cancellation guard; no Nlib, launcher artwork, shipping branch or other runtime changes. All other literal contracts incheck-home-media.pycompared with the repository source and matched. - Static review of remaining preflight script/source markers covered bounded log policy, log budget, release hotpath, SM experimental backport, watchdog liveness, cache/linking and CI build-order; no further obvious stale marker found. This is not execution of all their host fixtures or a PS5 build.
- This continuity commit requests ONE isolated all-on PS5 dev CI validation via
[full-build] [test-all-on]; follow exact run results. No publication; keep issue #7/#8 and 26 hardware gates open, including actual glyph artwork qualification, sparse firmware memory mapping and GPU/FC27 tests.
2026-10-09 — #228 preflight green, native Maxwell PRMT union-type compile failure
- Run #37894527272, source HEAD
326c5b94: startup/storage/glyph/JIT sparse host tests, all source preflights, andpackage-image.sh --preparePASSED.Prepare native build inputsPASSED. Native Ninja compilation FAILED at [8/331] on the CMake-generatednative-local/headless/maxwell_prmt_observed.cpp, lines 264 and 315, with Clang-18 ambiguous ternaries between IR::U32 and IR::U32|IR::U64 in PRMT_reg and PRMT_imm. No completed PS5 app/artifact, no firmware qualification. - Actual source of generation:
headless/gpu_native_observability.cmake; never patch ephemeral generated build file. Commit9322a43awraps both IR ShiftLeftLogical results in explicitIR::U32{...}only inside the ternary shifted branches, preserving zero-shift fast path, Index mode semantics and unsupported-mode handling. - Commit
3eeffa87adds the three CMake-derived unitsmaxwell_prmt_observed.cpp,fermi_2d_observed.cpp,sw_blitter_sized.cppto early PS5 compiler-fsyntax-onlygate (11 total translation units), catching generated shader IR and Fermi failures before a full Ninja pass. Commit8c88492bextends PRMT source regression assertions for the exact typed conversions. - All three edits were committed [skip ci], source content and test markers read back via GitHub. Native compiler verification of fixes is pending (Mac local device offline, remote runner is authorized compilation environment); next ONE isolated dev
[full-build] [test-all-on]run must prove the compile before any claimed success. - The failed run saved ~2.87 GB native/cache inputs for incremental recovery. Shipping branch, approved purple launcher UI, canonical release, legal bundle and hardware acceptance gates unchanged. GPU PRMT/FERMI correctness on real FW 13.60 and actual in-game glyph overlays remain OPEN.
2026-10-09 — #37895178126 native PS5 launcher compile failure and dev syntax gate repair
- All-on run #37895178126 on
8c35a9bdFAILED in actual PS5 Clang-18 native compilation at [317/326]:headless/prosperoeden/pe/ui/launcher.cpp:304:13: error: use of undeclared identifier 'sys'. This is a missing direct include ofpe/core/log.hppfor existingsys::loghotspot telemetry, NOT a launcher design or graphics failure. Prior preflights and 316/326 compile steps had progressed; no complete package or PS5 FW13.60 hardware evidence. - Corrected only the missing logging header include, leaving the approved launcher layout, drawing, interactions and assets unchanged. A native compiler regression now catches the actual translation unit.
- CI gap:
build-package.sh devdeliberately setsEDEN_SKIP_SOURCE_CHECKS=1for release-only contracts, but this had also bypassedcheck-native-source-syntax.py. Moved just the PS5 Clang syntax preflight after CMake and outside that release-only block; it runs when graphics=ON regardless ofEDEN_SKIP_SOURCE_CHECKS, and is still disabled byEDEN_SKIP_PREBUILD_SOURCE_CHECKS=1. Other release-only checks stay gated. - Extended
check-ps5-all-on-contract.pywith a Bash-executed mock gate matrix (dev/release/prebuild-bypass/non-graphics) and a logging include contract; no native package or hardware claims from the mock. One[full-build] [test-all-on]dev-only CI attempt requested by this commit, no publishing, no protected shipping branch changes. Verify the new run before declaring success.
2026-10-09 — #37899025569 preflight failure: regression harness escape corrected
- All-on run #37899025569 on
7f292b49FAILED before native compile attools/check-ps5-all-on-contract.py:83: Bash received literal\\nseparators in the new fake-python harness and rejectedpython3()as a syntax error. This was a regression-test quoting defect introduced with the CI gap fix, NOT evidence of a PS5 launcher/native compile error. - Corrected the Python string escapes to generate actual shell newlines and a valid
printf '%s\\n'stub. The originalpe/core/log.hpplauncher include and isolated native syntax gate remain intact. This correction uses[skip ci]to avoid a second full-build in the same recovery pass; next explicit all-on build must verify the test and native compiler. Shipping/UI unchanged, hardware FW13.60 unproven.
2026-10-09 — #231 native syntax warning-option gate fixed (not an emulator runtime defect)
- Run #37901599259, source
c6a5afdb, FAILED in native pre-Ninja syntax checking after the 8 fork-owned PS5 native translation units PASSED. The 3 new generated shader/Fermi objects failed witherror: unknown -Werror warning specifier: '-Wno-error-all'. This is an invalid Clang 18 flag copied from pinned Eden's CMake compile database that became fatal only because the source-only check added-Werror; it does not demonstrate a PRMT/Fermi semantic failure or a PS5 runtime crash. No verified package, no real FW13.60 evidence. - Fixed
tools/check-native-source-syntax.py: the isolatedsyntax_check_flags(argv, generated)removes only-Wno-error-all, preserves the actual-fsyntax-onlyClang error checking and fork-Werror, and mirrors non-Werror severity of generated upstream shader/Fermi objects. The real Ninja compile commands and binaries are unchanged. Commitsb977b2e2,9c9eb6bc[skip ci]. - Added executable argument-matrix regression in
tools/check-ps5-all-on-contract.py, using runpy to load the actual helper and confirm the invalid option is removed, substantive flags remain, no input mutation and fork/generated Werror behavior is correct. Commit70019ec5[skip ci]. The full CI suite/PS5 native compile must still validate these edits. - Historical run #37895178126 had passed generated PRMT files but failed at C++ launcher log include; subsequent commits fixed that, and #231's launcher PS5 syntax check passed. #230 #37899025569 failed a Bash regression harness escape issue, subsequently fixed and its preflight passed in #231.
- This checkpoint triggers ONE dev-only
[full-build] [test-all-on]run after the last red CI; do not publish or touch protected shipping branch/approved launcher design. Preserve 26 hardware acceptance gaps including actual sparse JIT FW13.60 alias mapping, GPU/FC27 behavior, real in-game PS5 glyph art.
2026-10-09 — ALL-ON PS5 native build #232 GREEN; hardware acceptance remains OPEN
- GitHub Actions run #37926886141 on tested source SHA
e5d39849e7a0ea09b5336d262e76b0eab80df55bcompleted SUCCESS at 2026-10-09T12:02:58Z. All source preflight,make prepare, PS5 native build+stage, staged app validation, full all-on profile binary check and GitHub artifact upload passed. Do not re-run just to obtain the same result. - Earlier #231 Clang option incompatibility fixed by typed flag normalization: 11/11 genuine PS5 C/C++ syntax tests now PASS including generated
maxwell_prmt_observed.cpp,fermi_2d_observed.cpp,sw_blitter_sized.cpp. No release branch modification and no public release. - Uploaded, NOT EXPIRED artifact
Prospero.Eden-Encore-PS5-all-on-testID 11613889781, URL download, ZIP archive 37,129,317 bytes, GitHub artifact digestsha256:b4382a18003735c8ca8317ed1c7933005613f64d5fbc0657c96e6700452c1231, expiration 2026-10-23T12:02:52Z. Staged bundle has 163 files,build/dev/PPSA99008/eboot.bingenerated; binary SHA25639482b03b7c475e064082bacbf8477872ccb221efe74c0fe9c4083157bbbf698. - Artifact check output:
EDEN_PS5_TEST_BUILD {\"dev_frame_diagnostics_compiled\":true,\"gpu_shader_pixels_verified\":false,\"jit_sparse_compiled\":true,\"native_ps5_execution_verified\":false,\"playstation_game_art_verified\":false,\"shipping_branch_changed\":false,\"sparse_alias_probe_result\":null,\"status\":\"compiled_test_artifact_flags_verified\",\"title_id\":\"0100C49025D3E000\"}. Do not reinterpret CI green as PS5 firmware/game compatibility proof. Run FC27 + library menu on the actual console, collect logs and frame diagnostics; firmware sparse memory alias, GPU correctness, in-game PS glyph packs, FC27 stutter, and hardware acceptance remain OPEN. Approved launcher design must remain unchanged. - This is a documentary continuity checkpoint [skip ci] after the green run; the validated executable remains tied to source SHA
e5d39849and is unchanged by this MEMORY-only commit.
2026-10-09 — PS5 firmware 13.60 field failure from all-on #232: deterministic 16 MiB sparse precommit overflow
- User tested installable folder created from all-on #232, artifacts from source SHA
e5d39849, on real firmware0x13600007. Evidence files:boot-trace(4).txt,heap(7).log,stderr(8).log. Elevation, writable persistent root, Vulkan launcher, Nlib and game selection worked. Two successive game-launch attempts failed withEDEN_JIT_SPARSE_COMMIT_FAILED used=2113536 next=16777216 capacity=16777216,Game load failed: std::bad_alloc; game UI was reopened afterward. The JIT sparse probe and RX/RW reservations SUCCEEDED. Critical interpretation: the 16 MiB failure is the static over-capacity precommit request, BEFORE PS5 direct physical mapping was attempted (no associated EDEN_JIT_SPARSE_OOM/MAP_FAILED). Earlier speculation that 12 GiB physical RAM was exhausted was wrong. Four A64 worker arenas were reserved (three large, final core 16 MiB); the final 16 MiB core necessarily fails when Dynarmic's 16 MiB PRELUDE_COMMIT_SIZE hint is added to ~2 MiB already written by its constant pool. Host CI mocks missed this edge despite all-on #232 going green. - Fixed all-title sparse JIT precommit via
headless/jit-sparse-commit.hand derived DynarmicBlockOfCode::EnsureMemoryCommittedinheadless/CMakeLists.txt: request up to the available virtual bytes without overflow; do not alter Xbyak's actual code-emission bounds, do not silently fall back to dense, and never treat virtual bytes as physically committed until native mapping succeeds. EmitsEDEN_JIT_SPARSE_PRECOMMIT_CLAMPEDonly on a clipped hint. No FC27-specific branch, no experimental profile toggle, no approved UI changes, no protected shipping-branch change. - Strengthened executable
tools/check-jit-sparse-host.pyto replay exact2113536 + 16777216 > 16777216values with a real host-mockedCommon::ReserveSparseJitCode16 MiB arena, commit to full boundary, byte alias and full cleanup; also checks invalid written positions, no unsigned overflow, and ordinary non-clamped growth. Updated architecture source gate. - Separately reported symptom FC27 not present in Library cannot be proven from these three logs; no ROM filename inventory, directory listing or FC27 scan failure is captured. Existing
EdenServices::games()did silently skip non-regular/stat-failed NSP/XCI and could publish an empty list on a native directory I/O error. Added single worker-threadEDEN_ROM_SCANinventory diagnostics and first three failing stat filenames; on an enumeration error throwstd::system_errorsoLauncher::finish_scanretains its prior list instead of emptying the UI. No files deleted or migrated.tools/check-home-media.pyasserts these contracts. - PENDING native build/CI for corrected source, and actual PS5 game-boot proof. No claim FC27 was restored or Zelda boots yet. Next run is one dev
[full-build] [test-all-on]compilation/package validation. Once tested on hardware, collectEDEN_JIT_SPARSE_PRECOMMIT_CLAMPED, first gameplay progress andEDEN_ROM_SCANreceipts; if FC27 still absent, verify its physical NSP/XCI path under selected root without deleting/data/prosperoeden.
2026-10-09 — All-on #233 red on obsolete host source assertion, not PS5 JIT code
- Run #37929914428, dev SHA
e891786d, FAILED in preflight attools/check-experimental-performance.py:47: script still required the literalCommitSparseJitCode(... written + codesize)despite code now correctly usingEden::Jit::PlanSparseCommit(written, codesize, maxSize_)andtarget.bytes. No real native PS5 build in this red run. This is a stale source-string check, not evidence that the new sparse physical commit failed. - Updated
tools/check-experimental-performance.pyto check exact bounded-target integration and ensure the previous over-capacity predicate has not returned; commit6e13b37e[skip ci]. Confirmed accompanyingtools/check-ps5-architecture.pyhad already been changed to the new contract; the extended sparse host mock is still pending execution. - Trigger one further test-only
[full-build] [test-all-on]run, on dev only. Never update protected shipping or publish; do not claim ROM visibility or PS5 console behavior fixed without field replay.
2026-10-09 — All-on PS5 run #234 GREEN; corrected JIT sparse test app ready for FW 13.60 replay
- Build #37930284889, tested source commit
91502fce6c8e3a689986866c474399b0a9a39519, completed SUCCESS. Preflight includes native-memory sparse host mock replay of the actual 16 MiB/fourth-core over-precommit incident. 11/11 native PS5 C/C++ early syntax checks, actual native build+stage, 163-file staged check, all-on binary profile validation and artifact upload PASS. These are build/host tests only; no new hardware PS5 gameplay qualification. - GitHub artifact Prospero.Eden-Encore-PS5-all-on-test #11616205351 uploaded with ZIP SHA256
1cdf05ce013e47c1bffcb7d3814cffd5b861e465f1c8de8714c26d117d456f3e, 37,129,134 bytes, expiration 2026-10-23T12:34:34Z. This GitHub artifact ZIP places app runtime files at the ZIP ROOT, not insidePPSA99008/. - Repacked installation-ready FTP ZIP
Eden-Encore-PS5-ALL-ON-R234-INSTALL-FTP.zipwith 163 verified files underPPSA99008/, checksummed in the conversation: 36,541,427 bytes, ZIP SHA256a49dcbb092ade48b1de6dda2f29c6dabcd71739b97965da23c4d9f1df7f7410d. Exact sourcePPSA99008/eboot.bin71,367,913 bytes SHA256b223582e0bb4822633f5428823758fa296b3fb6483f6dc248d657a0f39b25724matches run's native build receipt. This is a folder/FTP install, not .pkg nor .ffpfsc. InstallPPSA99008/into/data/homebrew/PPSA99008/without deleting persistent/data/prosperoeden/. - Acceptance NOT PROVEN: physical console boot and both title launch outcomes must be replayed. For the 2026-10-09
std::bad_allocreproduction on BOTW/second title expect absence ofEDEN_JIT_SPARSE_COMMIT_FAILED used=2113536 next=16777216 capacity=16777216and optionally seeEDEN_JIT_SPARSE_PRECOMMIT_CLAMPED. If later true kernel physical direct OOM/MAP errors appear, diagnose separately; never confuse with this deterministic virtual bound failure. FC27 disappeared from Library without sufficient evidence of cause; newEDEN_ROM_SCAN entries/candidates/visible/stat_failures/non_regularand directory failure receipts allow distinguishing actual missing file vs intermittent access. Never delete or migrate user's ROMs/keys/config. Approved UI and protected release branch unchanged. Source commit after this MEMORY-only [skip ci] remains behavior-identical to tested SHA.
2026-10-09 — Real PS5 FC27 R234 input hijack identified (read-only Mac FTP)
- Accessed authorized Mac
MacBook-Pro-de-ADMIN.localvia Desktop Commander in read-only mode. Used Pythonftplibfrom the Mac to read PS5 FTP at port 2121,/data/prosperoeden/logs/{stderr.log,stderr.prev.log,heap.log,heap.prev.log,boot-trace.txt}and list/data/prosperoeden/roms. No Mac files changed, no PS5 FTP upload/delete. PS5 game title0100C49025D3E000exists underroms/EA Sports FC 27 [...].nsp(~14 GB) alongside BOTW and Fire Emblem. - Actual R234 console FW
0x13600007showedEDEN_JIT_SPARSE_PRECOMMIT_CLAMPED used=2113536 hint=16777216 target=16777216 capacity=16777216, succeeded in guest and Vulkan game load, 501 shader pipelines restored in ~2.9 s; earlierstd::bad_allocis no longer the blocker. Intro fluctuated 20.8–24.7 FPS at the worst five-second windows with individual frame worst 732 ms; after that many 30-FPS present windows. These are presentation, not guest-scene progress proof. Memory/fragmentation not conclusively diagnosed. Game menu reportedly frozen and player cannot exit via touchpad+L1, does not see PlayStation face-button glyph artwork. - Root cause of ignored DualSense discovered in source: the PS5 all-on build has
EDEN_DEV_PROFILE=ON, its defaultEDEN_DEV_PROFILE_TITLE=0100C49025D3E000(FC27), and main.cpp previously settimed_replay = development_id == EDEN_DEV_PROFILE_TITLE && !replay_off. With nodev-settings.txt replay=off,if (!timed_replay)suppressespad->Poll(); after 45 s injects L/R and after 50/200 s injects A. Thus BOTH physical game controller and Touchpad+L1 quit chord are not seen for FC27 by default. This explains reported unresponsive inputs independent of GPU/CPU performance. Not a DualSense driver failure. - Fixed in GitHub dev branch only, never on the user's Mac:
headless/main.cppdefaultsreplay_requested=false; only explicitreplay=onenables timed replay for matching dev-profile title;replay=offdisables it. Source uses pureheadless/dev_replay_policy.hwith host C++ regressions intools/check-ps5-live-input.py(absence/settings/foreign-title/replay toggle), integrated into CI workflow's all-on preflight. Once per title, emitsEDEN_PAD_INPUT mode=dualsense replay_requested=0 title=.... The original touchpad+L1 quit and touchpad+R1 HUD commands are preserved. Tests and firmware replay pending until next GitHub run. - Glyphs remain NOT replaced: console log
[ProsperoEden] glyphs: In-game button art: Nintendo original (rule=unsupported);data/glyph-overrides.jsonis explicitlytitles: []. No validated FC27 RomFS art assets/texture fingerprints, so no honest universal PS5 in-game glyph replacement claim can be made. Input mapping and artwork are entirely separate. Do not fabricate a graphic pack or revert already approved launcher visuals. - All observed Mac and PS5 files remain unmodified. Do not trigger script replay by default; FC27 must permit live navigation and quitting in next test before diagnosing any residual guest-menu freeze. Protected shipping branch unchanged.
2026-10-09 14:54+02:00 — PS button exit restarts FC27 rather than launcher: dev-only autoboot root cause fixed in source
- User verified R234 installation defaults to launching FC27 again every time Eden Encore starts after closing through the PS system UI. Read-only FTP inspection found NO
/data/prosperoeden/user/dev-settings.txtnor rootdev-settings.txt, so this is not due to persisted opt-in settings. Main.cpp hadbool autoboot_pending = trueunderEDEN_DEV_PROFILE || EDEN_DEV_ROM_ID, where the ALL-ON artifact has both flags with FC27 ID. Also EDEN_DEV_VULKAN backend recovery previously forcedautoboot_pending = truewhen a launch_error existed. This is distinct from the timed replay input-hijack bug already fixed by run #235. - Fixed in GitHub only
headless/main.cpp: defaultautoboot_pending = falseandEden::DevLaunch::BootIntentparser ofheadless/dev_launch_policy.h. Onlydev-settings.txt autoboot=onexplicitly requests a ONE-SHOT dev startup;launcher=first,autoboot=off, or a crash notice always force the normal library even if the opt-in is present. Therom=...token selects the target for a separately requested autoboot, never launches it alone. EDEN_DEV_VULKAN recovery branch no longer changes a manual/launcher startup to autoboot; it may only switch GPU backend for an already explicitly requested dev autoboot. - Added host-compiled C++ regression
tools/check-ps5-interactive-boot.py: first launch, restart after PS button, crash notice, Vulkan recovery, launcher override, explicit dev token, replay token, and no-dev-settings scenarios. Integrated into all-on GitHub workflow preflight.EDEN_DEV_BOOT mode=launcher title=...logs once per new process so the hardware replay can prove which path was taken. No Mac local files modified and no PS5 FTP writes. - #235 run SUCCESS confirms earlier input fix compiles but is NOT suitable as final user deliverable, because its source predates this launcher correction. Next single [full-build] [test-all-on] must compile both fixes, validate artifact and package installable
PPSA99008/ZIP. Hardware still needed to demonstrate live DualSense, Touchpad+L1 menu escape, FC27 interactive UI progress, and in-game PS glyphs (currently unsupported / no verified pack). FC27 intro heavy stutter 20.8 FPS worst 732 ms remains open and is a separate performance issue. Never imply it is fixed by input or startup changes. - User's instruction: the connected Mac may be used to READ PS5 FTP logs, no modifications to the Mac local file system; do not write to PS5 over FTP or delete games/saves.
2026-10-09 15:09+02:00 — PS5 ALL-ON #236 full CI GREEN; default interactive startup + live DualSense package
- Run #37934000963, tested SHA
e8e138c7a94d16940d9c0a23cc5d489a7bc18495, completed SUCCESS. New host-compiled real policy testcheck-ps5-interactive-boot.pyPASS (first launch, restart after PS button, crash notice and recovery open the launcher,autoboot=ononly). Newcheck-ps5-live-input.pyPASS (real DualSense by default; only explicitreplay=onallows automated test input); 11/11 PS5 native syntax PASS; actual PS5 native executable build and 163-file stage checks, imports, all-on binary flags and artifact upload PASS. This is not a PS5 console user-input or performance certification. - GitHub artifact
Prospero.Eden-Encore-PS5-all-on-testID11618610175, 37,129,128 bytes, digestsha256:222fb5aef5202b71c9959d77df27c336b55a0e9fd77bfe877f6720b058327cb0, expires 2026-10-23T13:08:30Z. Raw GitHub ZIP has files at ZIP root (not direct FTP installation layout). - Created separate user-ready folder/FTP ZIP
Eden-Encore-PS5-ALL-ON-R236-INSTALL-FTP.zipon ChatGPT container ONLY, with 163 files prefixedPPSA99008/and verified no directory traversal, correct archive CRC and all expected files. FTP ZIP 36,538,526 bytes SHA25669da3e1cafd3a184712da79f2e88b10dbc71e96f56d130339b698cbf51a84a2c.PPSA99008/eboot.binSHA2569b90d879af8088d09416610e979d85d4b0925ed7ca6d35beb7b7406b15a97c95matches run #236 binary log exactly; 71,368,169 bytes. - Install/update: copy
PPSA99008/into/data/homebrew/PPSA99008/(homebrew folder), preserve/data/prosperoedenincluding all ROMs, saves, cache, settings. Must use the user's authorized PS5 installation/launch workflow; this is not a retail PKG. Do not perform Mac changes; user requested read-only Mac access. - On firmware 13.60, verify start logs
EDEN_DEV_BOOT mode=launcher title=..., manual library selection, once in FC27EDEN_PAD_INPUT mode=dualsense replay_requested=0, and Touchpad + L1 returns to launcher. Remaining OPEN: FC27 intro massive frame stalls (20.8–24.7 FPS 5s windows; worst 732 ms), scene progression vs compositor-only output, controls physical runtime, game PlayStation glyph art still unsupported because no real fingerprinted FC27 mod/texture pack, GPU correctness and JIT sparse continued hardware qualification. Do not claim these are solved by one CI GREEN. - This doc-only [skip ci] commit does not modify the executable corresponding to validated source SHA
e8e138c7; approved UI and protected shipping branch unchanged.
2026-10-09 — PS5 R236 FC27 full-match 13-minute read-only FTP telemetry: CPU-bound stalls, mixed-context controller art open
- User confirmed R236 gameplay in a full FC27 match works with PlayStation-feeling controls, but menu/cutscene/dialog prompts still show Switch artwork/semantics; performance saccades are severe in-game and modest even in launcher/menus. Retrieved real PS5 live
/data/prosperoeden/logs/stderr.log,heap.log, andboot-trace.txtREAD-ONLY over FTP from authorized Mac usingftplibwithBytesIO: no modifications, downloads written to local Mac files, PS5 uploads, migrations or deletes. stderr.log:EDEN_DEV_BOOT mode=launcher title=0100C49025D3E000,EDEN_ROM_SCAN entries=3 candidates=3 visible=3 stat_failures=0 non_regular=0,EDEN_PAD_INPUT mode=dualsense replay_requested=0 title=...;EDEN_PAD_CONTEXT mode=gameplay reason=sustained_activity sticky=1. At game load[ProsperoEden] glyphs: In-game button art: Nintendo original (rule=unsupported),Mods: none; sourcedata/glyph-overrides.jsonstilltitles: []. This distinguishes functional DualSense input vs absent verified in-game PlayStation RomFS glyph override. Inheadless/pad.cppprofile "PlayStation Auto" changes the effective virtual button mapping from preferredkPlayStationMappingbefore observed gameplay tokSwitchMappingafter sustained activity, then stays sticky. Do not silently change the user's correct-feeling full-match controls; need targeted menu/cutscene vs in-match evidence for physical-button semantic mismatch and verified game-art pack. Artwork replacements require actual FC27 asset/version proof, not claims of global emulator support.- Real rendered-frame telemetry: 158 five-second windows, 792.999751 s, 26.6066 weighted presented FPS, median five-second FPS 28.9605; 39 windows under 25, 24 under 20, 4 under 15 FPS; worst window 12.175 FPS; maximum present interval 760.480 ms; total 2,109 intervals above 50 ms, 71 above 100 ms, 31 above 200 ms and 6 above 500 ms. Many lows persist deep into match: windows #89/#90 12.18/12.54 FPS with 591/576 ms worst, window #92 15.37 and #93 16.54; even near last windows #152/#153 16.4 FPS. Not solely introduction/shader warm-up. Screenshots of actual game progress not captured; present FPS is not guest simulation speed proof.
- At #89/#90, per-window sampled owner thread CPU time for core0/core1/core2 each ~5,000 ms per 5s wall; GPU worker own CPU time ~0.8–0.9 s and its queue-wait
idle_ns~4.0–4.1 s per 5s.EDEN_PERF_CPU_CLOCK_CHECK valid=0means cross-thread/process CPU clock telemetry invalid (EDEN_PERF_WORKER cpu_ns=-45), so NEVER infer total device CPU percent, butEDEN_PERF_OWNER_CLOCK_CHECK valid=1,EDEN_PERF_CPU_POINTare owner-read and do advance ~5 s/5s. 4th guestCPUCore_3has no guest work. This supports guest CPU emulation saturation as a leading hypothesis, not blanket GPU underuse. GPU hardware utilization was not measured. Need profiling hot PC/JIT/kernel scheduler and HLE IPC. - At #89/#90 JIT new block compiles only 2,424 / 848 across all 3 active cores per 5 s; sparse JIT physical committed steady ~1408 MiB. So sustained 12 FPS cannot be explained solely by first-time JIT compilation or a new physical memory allocation. Final
EDEN_JIT_SPARSE_MEMORY~1.535 GB and releases to zero on shutdown; no new bad_alloc in stderr. RADV texture-budget usage ~4.49 GB (<expected ~4.724GB),memory_short=0throughout; no demonstrated texture GC thrash. GPU queue-full wait at #89/#90 adds ~51/58 ms total per five seconds (not enough alone to explain 12 FPS); guest dequeue waiting near zero in those intervals. Shader PRMT imm warning appears only early in stderr and needs compatibility separate from performance attribution. - HLE cumulative high-cost suspects as of near end:
IHOSBinderDriver cmd=3~63,309 calls/82.50s (~1.3 ms average),IHardwareOpusDecoder cmd=9~81,609/9.76s,IStorage cmd=0~8,064/5.57s. IPC cumulative ~186 s but overlapping threads, do not add to wall time. Global allocator stress microbenchmarkEDEN_PERF_ALLOC: 1 thread 45.1 ns/pair, 4 threads 387.9 ns/pair, 8 threads 755.5 ns/pair; indicates multicore allocation contention in benchmark, not direct causal proof of FC27 FPS dips. Inspect HLE binder waiting/synchronization, guest CPU thread busy paths and allocator locks before any speculative resource changes. - Launcher independently logged one
slow frame: update 0 ms, draw 130 ms, present 1 msplus twoEDEN_UI_HOTSPOT phase=texture_upload elapsed_ms=33samples. Keep approved purple launcher design unchanged; investigate GL rendering hot spot/texture preupload as a separate menu-performance issue. heap.logfinalEDEN_STAGE backend=Vulkan phase=shortcut_return_to_menu, thencore_shutdownandcore_destroyedwith sparse JIT memory zero. Thus Touchpad+L1 to launcher works on this R236 test, confirming prior real DualSense polling fix, but does not prove all menu prompts correct.- Outcome: diagnostic only, no GPU/CPU algorithmic patch nor CI run triggered by these logs. Priority order: (1) preserve gameplay controls and instrument/verify physical menu mapping and glyph versioned assets, (2) profile guest CPU/hot HLE BinderDriver and allocation/lock hotspots + frame pacing under actual FC27 action with minimum log overhead, (3) reduce launcher slow GL draw/texture upload without UI redesign, (4) keep GPU PRMT and game compatibility separately OPEN. Do not call completed or claim 60 FPS possible without real PS5 test.
2026-10-09 — After R236 FC27 13-minute audit: first executable UI + bounded-cache contention changes (NOT hardware-qualified)
- Continued actual repo code work instead of treating the earlier diagnostic as a fix. Branch
dev/ps5-sparse-jit; no direct Mac or PS5 writes, no shipping/approved launcher-art modifications. - Launcher GL stream root candidate: actual
headless/prosperoeden/pe/gfx/gl_batch.cppcalledglBufferData(GL_STREAM_DRAW)on the SAME VBO every draw frame even if there were no changes to required capacity. Real PS5 launcher log showed 130 ms draw and two 33 ms texture uploads, but cause attribution to this VBO is a hypothesis until console A/B. Implemented 3 independent GL VBOs and associated VAOs with round-robin reuse, capacity growth only on demand (power-of-two, minimum 512Instance), no per-frame same-sizeglBufferData. RetainsglBufferSubDataupdates and the same draw calls, shaders, art and layout. GL driver synchronization still serializes reuse if GPU is >3 frames behind; correctness preserved.GlBatch::releasedeletes all 3 correctly. Newstream_ring_policy.hppand host C++ regressiontools/check-ps5-ui-stream-buffer.pycovering 18 frame sizes: 6 real allocations vs 18 previously, all 3 buffers reuse, overflow check. Tests wired into all-on workflow. - FC27 cache mutex contention: read-only PS5 R236 had
cache_lock_contended=cache_lock_blocked≈460373after ~13m; upstreamGuestCacheLocktries once then blocks (default cache_lock_spins=0). For PS5 dev profile only, at the beginning of every game session, apply 8 bounded PAUSE/try_lock retries before normal blocking mutex; every failed retry still invokesmutex.lock(). Release build stays 0; no removal/bypass of locks or output correctness. Dev-settings manual override (if supplied) now clamped to ≤32 to avoid starvation. New source+model regressiontools/check-ps5-dev-cache-contention.pywired into workflow. No proven FC27 FPS gain or soft-hang qualification yet. CompareEDEN_DEV_GUEST cache_lock_contendedvscache_lock_blockedand frame tails on next PS5 test. - HLE bottleneck ruled out as main late-match FPS cause: read-only per-5s correlation of real HLE cumulative
IHOSBinderDriver cmd=3(TransactParcelAuto) showed only ~1.14ms at severe ~12.54 FPS window #90 and ~1.5ms at ~16.54 FPS window #93, while early frames sometimes spent 2.8 seconds in this service and still ~30 FPS. It is incorrect to broadly attribute late match severe stuttering to the ~82.5 seconds cumulative binder time; no blind Binder/guest synchronization rewrite performed. Three active emulated guest CPU cores were busy ~5s CPU/5s elapsed during dips, GPU dispatch thread own CPU time ~0.8–0.9s/5s and largely waiting; direct GPU hardware utilization still unknown;EDEN_PERF_CPU_CLOCK_CHECK valid=0cross-thread clock limitation persists. ExistingEDEN_VULKAN_TEXTURE_BUDGET memory_short=0disproves simple VRAM pressure. - Controller/glyph unchanged in this iteration intentionally: R236
EDEN_PAD_CONTEXT mode=gameplay sticky=1and user confirmed real PlayStation-like commands in match; changing live A/B/X/Y map blindly would regress that. Switch-style prompts in title menus/cinematics/dialogs remain becauseglyph-overrides.jsonhas no verified FC27 RomFS replacement andrule=unsupported. Looked for FC27 Switch-compatible mod/fingerprints; no directly compatible verified asset found. PC EA FC25/26 PS5-button mods exist but are not Nintendo Switch RomFS layouts, and their texture assets cannot responsibly be copied without permissions. Existing approved launcher UI untouched. - Source code staging complete. Needed: single GitHub native dev preflight/build with [full-build] [test-all-on], correct any compile failures, package FTP
PPSA99008/ZIP only after successful run. Hardware validation: menu held-scroll responsiveness, FC27 gameplay frame tail vs R236 baseline (26.61 weighted FPS, 39 five-second windows <25, 24 <20, six >500ms intervals in 793s) and cache blocked-to-contended ratio. No reason to claim all gameplay perf or glyph work is done before verified source/asset evidence.
2026-10-09 — Run #237 PASS, packaged PS5 FTP app for UI-stall/cache-lock comparison
- One and only one dev [full-build] [test-all-on] run #37940361757 at executable source SHA
de7f800ab1c9b7d7c6b620301977f4ca45bca80acompleted SUCCESS. PS5 11-file native syntax, real cross-compiled PS5 executable build and staged inventory PASS. New host test console assertionsPASS: rotating 3 renderer VBO/VAO pairs with allocation only on growthandPASS: 8 limited GPU cache-lock retries in PS5 test build only; blocking mutex preserved. No public shipping release; release job skipped. All-on profile gate still explicitly says hardware rendering and PlayStation game-art verification FALSE. - GitHub artifact
Prospero.Eden-Encore-PS5-all-on-testID11620873543, raw GitHub root ZIP 37,129,463 bytes SHA25686058dfd5b2c728771b5ba4eb036a33bd0efc0ec2581c1cc01f4c46f65dceeca, expiry 2026-10-23T14:02:13Z. - Repacked in ChatGPT sandbox not user's Mac to
Eden-Encore-PS5-ALL-ON-R237-INSTALL-FTP.zip, 36,538,675 bytes SHA256b87c62edfb9f3e3a6a6af775b93439d8a8a9cbf1e654ddb6a7830ad1852f39d8. All 163 files underPPSA99008/; ZIP CRC passes and originaleboot.binbytes identical to native run (71,369,001 bytes, SHA256dc563a2e1fec7d93cb3cf6d885c57cbdaaa3f8058afe6e183cd6c885fe2a88fe), no archive traversal. Install via FTP by copyingPPSA99008/to/data/homebrew/PPSA99008/when user chooses, preserving/data/prosperoedensaves/ROMs/cache. No local Mac writes, no automatic PS5 FTP modifications. - Testing required, no FPS or glyph claims: compare R236's 158 windows/793 seconds weighted 26.61 FPS, worst window 12.175 FPS, 2,109 late50, 71 late100, 6 late500. Also inspect launcher draw stalls under held scrolling,
EDEN_DEV_GUEST cache_lock_contended/cache_lock_blockedfraction and any soft hang. R237 changes launcher GL VBO streaming and bounded dev-only lock acquisition, not guest CPU internals/HLE Binder or unsupported FC27 RomFS art. On R236 guest CPU dominated match dips while GPU rendering worker waited; 8-spin hypothesis might prove neutral or worse and should be evaluated before keeping. - Games' PlayStation graphics still unresolved, with
rule=unsupported; correct in-match controller semantics preserved. Need verified FC27 Switch-specific RomFS asset identities/version to replace menus, cinematics, dialogs (PC FIFA glyph mods insufficient). Approved launcher appearance unchanged; protected release branch unchanged.
2026-10-09 — Static PC-emulator-style controller mapping + R236/R237 CPU/GPU/VRAM/RAM audit; NO RUN AUTHORIZED
- User's decisive input: Desktop emulators select/map controller buttons before starting a game and keep that mapping throughout; Eden Encore must do the same, not infer "menu" and "match" from sticks, D-pad, or controller motion. The user explicitly prohibited any new GitHub Actions run, native build/compile or test without prior agreement. All changes here are source-only
[skip ci]commits, no CI run, no changes to authorized Mac or PS5 storage. Last native executable remains R237, with its old auto-swap bug. - Removed faulty automatic mapping from
headless/pad.cpp+headless/devices.h: nomapping_context,adaptive_playstation, runtime A/B/X/Y swap, no Touchpad+Square auto/manual flip. Physical face and touchpad guest buttons always use the fixedButtonMapping mappingloaded beforePad::Open;Pad::SetMappingignores changes while a device is open. Native shortcuts Touchpad+L1 (exit game) and Touchpad+R1 (HUD) remain. Deleted no-longer-usedheadless/playstation_auto_context.h. - One resolver for whole app: added
ResolveSessionButtonMapping(global_layout, global_map, game_layout, game_custom, game_map)toheadless/button_mapping.h.headless/main.cpppicks it once when launching a guest;headless/prosperoeden/pe/ui/mapping.cppnow displays and edits the same effective game mapping. Previously if a game overrode controller_layout withoutown_mapping, launch used that layout's base while the Mapping Editor still displayed/modifiedprefs_.mapping. Launch log now reportsEDEN_PAD_MAPPING_LOCKED scope=session mode=staticandController profile PlayStation/Custom/Switched.... Global and per-game settings persist through the existing settings file. - Important tradeoff: R236/R237 mode
PlayStation Autobegan menu withkPlayStationMapping(guest A=Cross) and after sustained gameplay switched tokSwitchMapping(guest A=Circle), which the user called correct in-match. A single fixed map cannot by itself replicate TWO different guest-to-physical maps. Player may select fixed Switch-position mapping per-game to match previous in-match physical behavior, or fixed PlayStation mapping to match earlier menus; the PS5 needs to verify their title-specific preference. Separate in-game FC27 PS glyph textures for Nintendo menus/cinematics remain unimplemented (glyph rule=unsupported, no compatible verified FC27 RomFS pack). Do not claim mapping fixes the on-screen Nintendo artwork. - Updated existing
tools/check-ps5-autocontrol-context.pyto stage host C++ tests for immutable global/title layout, no runtime swap, UI policy parity, triggers/shortcuts preserved. Updatedtools/check-controller-semantic-mapping.pyto reject old auto semantics. Prepared ONLY; DO NOT execute until user permits a run. - Read real R236
heap.prev.logand R237heap.login memory over authorized Mac→PS5 read-only FTP, no uploads or Mac file writes. At ~R237 window 333, 1671s measured; R236 full 793s. Equal first-83-window rendered FPS R236 28.13, R237 28.04, late50 497→586, meaning R237 cache-lock spin trial recovered ~20% short waits but did NOT improve FC27 frame pacing, so removed automatic 8-spin in dev source (optional capped test-onlycache_spin=Nremains). Launcher first slow draw was ~130ms R236 and ~131ms R237, so R237 triple VBO improvement did NOT eliminate that first-draw stall. - CPU 3 emulated guest worker owner clocks ~5s CPU per 5s window at both 12–16 and 30 FPS; topology qualified 5 distinct host cores
cpus=0,1,2,3,4. Cross-thread/process CPU clocks invalidEDEN_PERF_CPU_CLOCK_CHECK valid=0, so NEVER infer total host/PS5 CPU utilization. In R236 #90 12.54 FPS, JIT compile only 26ms across cores / 5s, GPU queue-full wait 58ms, GPU worker CPU 881ms and idle/wait 3993ms, IPC 470ms, each guest owner ~5s. In R237 #69 15.28FPS JIT compile69ms, GPU worker own CPU975ms and wait3894ms; three guest core owner clocks each ~5s. Guest execution critical path needs native hot PC profiling, not generic unused CPU/GPU memory overclock. At R236 #30, JIT compilation WAS ~1220ms/5s, so initial phases can have a separate JIT cost. Important to distinguish. - GPU worker idle is NOT proof that GPU hardware is idle. Needs safe PS5 Vulkan GPU timestamp/AGC usage measurements; no fully quantified hardware GPU use or saturation in current logs. Native GPU worker is not continuously busy; no GPU device occupancy claim. Shader cache ~505 pipelines warm,
GPU_PRMT_IMM_INDEXcompatibility notice still open. Driver modeAsync shader ON,High GPU accuracy,1x internal, 1440p output at 59.94Hz. No evidence a simple VRAM or output resolution setting resolves the late drops. - RAM:
EDEN_DEV_MEMORY direct_memory=12884901888= 12GiB shared direct-memory pool. Vulkan texture cache ~4.49GB decimal end R236 vs expected mark ~4.72GB and critical ~5.58GB,memory_short=0over sampled period. Sparse JIT real committed ~1.535GB end R236/~1.56GB at later R237 with virtual 2.28GB reserved, no new bad_alloc. These are overlapping counters / not entire physical memory; growing RAM/VRAM/JIT allocations blindly can reintroduce instability and does not solve 12FPS with only 26ms compilation. Guest 4GB address layout isn't a host memory availability switch. - Added source-only portable
tools/analyze-ps5-frame-windows.pyto reproduce same-interval comparisons, CPU owner/JIT/GPU queue/IPC/cache/memory snapshots on existingheap.logfiles. Added detailed evidence/ranked hypothesis auditdocs/FC27_R236_R237_RESOURCE_AUDIT.md. Neither executed. Next approved diagnostic should verify PS5 FW13.60 native hot PCs on 30-vs-12-FPS periods, hardware GPU timestamps, and scene-aligned reproducible frame tracing before any aggressive CPU/GPU/VRAM retuning. No more generic blind resource increases. - Branch
dev/ps5-sparse-jitsource edited only; shipping/approved UI design untouched. DO NOT trigger[full-build]or[test-all-on], workflow dispatch, local code execution, or FTP writes without user explicitly saying GO/RUN.
Source audit epilogue (NO RUN)
headless/playstation_auto_context.hdeleted (dead sticky state machine, no compiled references in Pad).pe/ui/mapping.cppexplicitly callsEden::ResolveSessionButtonMappingfrom its ownpe::uinamespace. This avoids an unqualified-name compiler error.main.cppnow emitsEDEN_PAD_MAPPING_FIXED title=... layout=... a=... b=... x=... y=... title_override=...once before the PS5 pad opens, allowing the next consented console test to establish exactly which fixed guest semantics were selected, distinct from unsupported Nintendo/PS glyph textures.- These source changes plus mapping regression test rewrites are not built or tested. All commits
[skip ci]; do not interpret them as R237 executable updates. User explicitly requires authorization before any new run.
2026-10-09 — R237 4-session resource reclaim audit, shader-worker under-utilization, BOTW icon candidate, launcher/per-game controls; NO RUN
- User insists maximize the useful PS5 CPU/GPU/VRAM/RAM throughput and requests a true bounded, recyclable JIT. User explicitly prohibits build/compile/tests/GitHub Actions run without prior approval. Every commit in this continuation uses
[skip ci]. Onlydev/ps5-sparse-jitsource was edited;fix/0.40-zbic-13.60and approved general UI design remain untouched. Mac via authorized Remote Desktop Commander used PS5 FTP for read-only streaming logs in BytesIO, no Mac file writes or PS5 FTP modification. - Most significant new finding — PS5 native heap retention: R237
heap.loghas FOUR sessions in one process.[ps5-opengl-heap] phase=core_destroyedreports live allocations 5,077,110 / 6,171,019 / 6,865,599 / 7,371,513 bytes after each session. MeanwhileEDEN_PERF_HEAP pieces=1476395008shows ~1.375 GiB physical committed heap held after game despite just ~5–7 MiB live.headless/heap_arenas.incexplicitly keeps 128 MiB pieces forever until app exit, except independent large blocks >=32 MiB return on free. Thread arenas 29; cache blocks and mspaces remain. Direct-memory largest contiguous extent at launch falls 11,824 MiB -> 4,128 MiB after first game;EDEN_MEMORY_LAYOUT free_upper=-1 scan_valid=0shows kernel range-enumeration incomplete, so do not claim all lost extent is due to heap or claim total physical memory leaked. This is still concrete inefficient retention. No automatic release code installed because destroying live mspaces/TLS tcache/secondary allocations would crash. A safe trim implementation needs proven PS5 mspace stats/heap-empty/destroy ABI, live per-piece ownership, all-thread quiescence, physically owned direct-memory piece accounting and atomically reversible VA mappings. - JIT limits and bug fixed in dev source: R237 first
EDEN_PS5_JIT_POLICY free_mib=11824 a64=864,648,648(plus 16 MiB guest core3 = 2176 MiB virtual); all subsequent runs largest free 4128 MiB, a64 256,192,192 (+16 = 656 MiB virtual), despite sparse JIT previous physical chunks completely released toremaining=0on each shutdown. Last full session JIT physical peak ~1.43–1.45 GiB; RX/RW dual aliases map same pages, not doubled. CodeChooseSparseVirtualJitPlaninexperimental_performance.hremembers verified peak largest extent for sparse virtual code capacity after firmware probe (only dev, not dense).main.cpplogsEDEN_JIT_SPARSE_VA_PLANwhen used. Physical 2 MiB commits still happen on demand; present per-core virtual cap but NO independent recoverable global physical cap. A hard physical cap without all-JIT safe quiescence/clear/code-link invalidation would simply reintroducebad_alloc/crashes. Existing sparse-region implementation explicitly forbids decommitting partial pages while code is executable. Detailed safe reclaimer architecture indocs/PS5_RESOURCE_RECLAIM_AND_GPU_CPU_SCALE_DESIGN.md; all not implemented beyond virtual plan.tools/check-ps5-sparse-jit-va-lifetime.pyhost regression and workflow preflight staged, not executed. - Shader CPU utilization measurable bottleneck: native
EDEN_WORKER_TOPOLOGY ready=1 distinct_cores=5 cpus=0,1,2,3,4,EDEN_WORKER_SECONDARY mask=1fe0,VulkanWorker mask=1fe0; shader threads observedEDEN_PS5_SHADER_WORKERS reported=16 available=8 workers=1 reserved=7.tools/prepare-vulkan-port.pycounted seven guest/GPU reservations AGAIN inside the already-filtered secondary worker mask. AddedEden::Performance::PinnedWorkerMask()inperformance.h/.cppand shader admission intersection of actual thread allowed slots with the verified primary mask; reserve actual overlapping primary slots + 2 secondary slots for services, max six pipeline workers. Target 8 secondary slots -> 6 builders instead of 1. Fallback original 7 reserve when topology unverified. Source and testtools/check-vulkan-shader-workers.pystaged; no native compilation or hardware gain proven, and more workers can increase temporary CPU contention. Guest 4 cores are Nintendo Switch VCPUs, not physical PS5 cores. - GPU not just a compute utilization slider: R237 main PS5 GPU worker often waits ~4s/5s, but this measures host dispatcher not RDNA GPU device occupation. Vulkan caches grow under
memory_short=0texture budget ~4.4GB, not entire 12GiB system memory use. Ultra logs internal 2x scaling, output 2160p 3840x2160, async shaders OFF (Recommended ON), so Ultra may legitimately induce shader/pixel stalls, particularly BOTW. Need actual BOTW title-bound steady frame logs to attribute. Real hardware GPU timeline/counters not yet verified. - User launcher fixes staged: Home
controllercard now larger white DualSense (~44x30 pre-transform, 1.65x canvas), Home max players white ~45x30 and label recentered, Library player badge larger white ~42x29. Library title shadowgradient_rectformerly ended at 96% of tile; now gradient from 43% through 100% oftile_artheight. Colors/design purple style and cog unchanged. In Library per-game settingsButton mapping: Left/Right cycles Global (-1) / PlayStation fixed (0) / Switch fixed (1) and persists for selected title only; Cross still opens advanced per-button editor. Effective label displays title selection rather than alwaysGlobal (PlayStation). Staged source testtools/check-ps5-ui-controls-per-game.pyand preflight, not run. - BOTW Nintendo prompts: relevant actual Nintendo Switch RomFS community asset exists, BOTW DS4 UI Mod v2 — Western Layout, GameBanana, specifically for Switch/Yuzu/Citron, unlike Wii U mod. GameBanana release licensed CC BY-NC-ND4.0 and distributed original art, cannot silently remix or bundle. User may separately install permitted source pack under per-game mods path after title/update-version and SHA verifying; none installed, neither BOTW nor FC27
data/glyph-overrides.jsonhas a validated title rule (titles: []). Mapping does not alter RomFS glyphs. More candidatesdocs/SWITCH1_PS_BUTTON_MOD_CANDIDATES.md. - New docs:
docs/PS5_RESOURCE_RECLAIM_AND_GPU_CPU_SCALE_DESIGN.mddetails true safe heap/JIT recycler barriers, resource pressure adaptation, shader pool fix and test gates;docs/SWITCH1_PS_BUTTON_MOD_CANDIDATES.mdrights and Switch-specific art.MEMORY.mdcheckpoint here. Do not claim heap trimming, JIT physical cap or game glyphs done. - Staged preflight in
.github/workflows/build-040-zbic.yml: per-game UI test, corrected shader worker test, sparse virtual JIT lifetime test. No tests, CI runs or new FTP ZIP created, last compiled native is R237 and reflects older code.
2026-10-09 — Verified physical worker-mask publication + hero title threshold (SOURCE ONLY)
- Work strictly on GitHub branch
dev/ps5-sparse-jit, not Mac/FTP or shippingfix/0.40-zbic-13.60. User still forbids new build, test or Actions run without explicit approval; source-only commit uses[skip ci]. - CPU/Vulkan correctness: previously
PinnedWorkerMask()read non-atomicworker_topology_readyandworker_cpuswhileCheckWorkerTopology()resets and repopulates them each title. Worse, logical-only experimental placement setworker_topology_ready=trueand could be mislabeled physical proof by the pipeline worker admission. It now reads an atomicverified_physical_worker_mask, reset before probing and published only after all five physically qualified slots are known. Unknown / unverified logical topology retains conservative shader-worker fallback; six-worker secondary-mask plan still needs PS5 validation. Updated source-only shader-policy guard; not executed. - Small UI follow-up: hero title wrapping now decides at the actual 76px single-line font width (was comparing 64px), so long BOTW-style title picks two lines before a forced ellipsis. Updated Home geometry source guard; not rendered or tested. Approved artwork/visual layout unchanged.
- JIT physical cap and native heap safe reclamation remain unimplemented; never advertise completed reclamation from this CPU correctness patch. No tests or build run.
2026-10-09 — Clarification du partage PS5 16 SMT / 8 shader slots [skip ci]
- Sony PS5: 8 Zen 2 physical cores, 16 SMT threads. R237
reported=16 available=8inEDEN_PS5_SHADER_WORKERSdescribes 16 reported hardware threads versus the shader thread's narrowed secondary affinity 0x1fe0. It is false to infer that Sony blocked 8 hardware threads. The 5 primary worker CPUs are scheduled separately; the hot guest 0–2 SMT siblings are deliberately protected from background contention. Previous trace does not establish actual OS-accessible thread count for main/probe thread. - GitHub dev source-only: instrument
EDEN_PS5_CPU_ACCESSfor unrestricted probe-thread affinity vs hardware report,EDEN_PS5_CPU_PHYSICAL_SUMMARYand per-physical-core mask grouping,EDEN_PS5_CPU_SPLITfor primary/secondary/guest protected SMT/other; Vulkan pipeline workers now log their exact allowed mask. Reject physically impossible >8 distinct physical core IDs from the CPUID mapping before pinning/publishing. - Existing fix to shader worker double reservation remains: 8 secondary logical slots no longer subtract 7 already excluded primary cores; with a qualified worker mask, up to 6 shader builders, 2 secondary slots for services. No build, source tests, Actions runs or Mac/FTP access. FPS, runtime affinity and allocation gains not yet field-qualified. No edits to protected shipping branch/design. FC27/BOTW slow frametimes, real GPU timestamps, 1.375 GiB retained heap, sparse JIT reclamation and Switch-origin glyphs remain OPEN.
2026-10-09 — Bounded private PS5 heap caches, source-only [skip ci]
- In
headless/heap_arenas.inc, each thread previously retained up to 64 blocks in each of 127 size bins (up to around 8 MiB total per thread), making freed objects unavailable to other mspaces until that thread exits. This can promote unnecessary 128 MiB backing-piece growth across long-running games; it does NOT itself prove a leak of the ~1.375 GiB process-lifetime committed heap. - Staged 1 MiB tcache cap per thread; keep per-bin 64 cap and the 2 KiB cutoff. Free over cap returns directly to owning mspace, preserving ownership and malloc/free semantics. Track per-thread cached bytes with owner-write relaxed atomics (no shared counter on allocation hotpath) and expose approximate
EDEN_PERF_HEAP tcache_bytesin existing snapshot. TLS destructor drains/free-lists and zeros held bytes. Host 8-thread heap harness includes multi-bin pressure, post-free and post-worker-join upper bounds; test script edited not executed. - Physical 128 MiB backing pieces cannot safely be unmapped without firmware-verified mspace emptiness + child arena/TLS teardown + direct-memory PA metadata and proper virtual-range preservation. Not implemented. No Mac/FTP/build/test/Actions, no protected shipping branch change, no unqualified FPS improvement claim. User explicitly approves a run before qualification; FC27/BOTW performance/glyph issues still OPEN.
2026-10-09 — Native allocator overflow guards [skip ci]
- Following bounded tcache work,
headless/heap_arenas.incnow guards BOTH bytes+1MiB metadata and rounded(need+128MiB-1)computations against size_t overflow, rejects 0-sized piece counts, and prevents a corruptpieces_used > PIECESfrom underflowing remaining capacity.eden_heap_mainnow rejects alignedalignment+sizeand calloccount*sizeoverflow before probing/growing mspaces. Maintains existing normal-size hot allocation path; no added per-block atomics on ordinary malloc. tools/check-heap-growth.pynow includes near-SIZE_MAX rounding and extreme alignment cases. All harness invocations NOT EXECUTED absent user run authorization. No Mac/FTP/build/Actions, no protected release changes, no measured FPS claims. Heap physical reclamation and FC27/BOTW performance remain OPEN.
2026-10-09 — All-tier Vulkan async shader scheduling + GPU timer lifetime [skip ci]
- Identified a generic all-title avoidable stall:
headless/encore_performance_policy.henabled async Vulkan shaders in Minimum/Recommended but disabled them in High/Ultra, despite Ultra user reports of BOTW new-effect spikes. Changed all four quality tiers to async shaders ON for Vulkan while retaining High/Ultra accuracy/resolution and leaving CPU/DMA unsafe switches OFF. Async compilation can temporarily delay an effect; hardware A/B required, no claim it solves FC27 steady 12–16 FPS or no missing visuals. - Native development GPU timestamp recorder in
tools/prepare-vulkan-port.pykept a process-globalvk::QueryPooland failure state across games while PS5VkDeviceis rebuilt every session: an opt-ingpu_time=onprobe could reuse the old device's invalid query handle. AddedDevVulkan::gpu_time_sessionatomic epoch advanced once per title in main.cpp, resets dev opt-ingpu_time=falsebefore per-title settings parse, and resets the pool handle/counters/failure state on the GPU worker's first Begin of each new epoch before any invalid handle use. Old query pool is owned and reclaimed by prior VkDevice teardown. Source-only test contracts added to existingtools/check-performance-policy.py(not run). - No build, test, GitHub Actions, release, Mac or FTP operations. Results must be compiled, linked and tested on native FW13.60 after explicit user approval. Retained mspace backing / real JIT eviction / GPU steady state / FC27 PS glyph art are still open.
2026-10-09 — PS5 native heap backing: alloc/map/zeroing latency [skip ci]
- New heap growth commits are 128MiB direct-memory allocations mapped fixed and cleared synchronously. Instrument existing EDEN_HEAP_PIECE log with CLOCK_MONOTONIC alloc_ns/map_ns/zero_ns, preserving zeroed memory and owner lifetime. Only on growth, no malloc/frame hotpath measurement cost; no assumption that a few commits explain FC27 sustained 12 FPS. Static architecture contract extended; not run. No build/Actions/Mac/FTP, user approval required before runtime verification. Memory physical reclaim and FC27/BOTW performance remain open.
2026-10-09 — Library held-D-pad highlight latency + 5s launcher frame diagnostics [skip ci]
- Root distinction for the reported PS5 menu 'image not following' lag: native
ListView::updateused critically damped spring omega=16 for scrolling, 26 for focus; by design a single row can take ~300ms / 180ms to approach 95%, so many fast D-pad repeats make highlight visibly chase even with 60Hz perfect presents. New adaptive speedup ONLY when spring is >1.25 row pitches behind: scroll 2x, cursor 1.5x; default single-step motion/approved purple design unchanged, no teleport, no selection semantics altered. Needs physical observation before declaring fixed. - Source native
frontend.cppfor dev ALL-ON only: once per five secondsEDEN_UI_FRAMESprints frames, >=20/33/50ms, max update/draw/egl swap duration; screenshots excluded. No per-frame string formatting, no production code logs. Existing >100ms named hotspot remains. New assertions in existingtools/check-runtime-frame-budget.py(not run). No build/Actions/Mac/FTP or protected branch change. FC27, BOTW, GPU & physical heap reclamation still OPEN.
2026-10-09 — Native UI histogram C++ counter type hardening [skip ci]
- Source review after UI timing instrumentation identified a C++ overload mismatch: chrono microseconds::count() is long on x86_64 while the aggregation maxima use long long; std::max requires same type. Declare update_us, draw_us, present_us and whole_us explicitly long long before comparisons/aggregation. Added source contract, no build/tests/Actions. This is an uncompiled correction to the immediately preceding dev-only instrumentation, not proof of hardware behavior.
2026-10-09 — Development GPU timestamp query-pool explicit destruction [skip ci]
- Corrected an API lifecycle overstatement in previous checkpoint: Vulkan VkQueryPool is a device child that must be explicitly destroyed before its VkDevice. Generator now substitutes Scheduler::~Scheduler() only for this dev probe cleanup: if a timestamp pool exists, requests worker stop, wakes it, joins the jthread, waits on device idle and invokes vkDestroyQueryPool while Device remains live, then clears process-global probe. Ordinary probe-OFF path retains standard jthread destructor behavior. Per-title epoch remains to reject stale device state.
- Added static source assertions (NOT executed). Needs full native PS5 compile/link and explicit FW13.60 cross-title probe before qualifying actual GPU timestamps, user has not authorized a run. No builds, tests, Actions, PS5/Mac/FTP writes or protected branch updates.
2026-10-09 — Fix native Vulkan GPU timestamp destructor data race [skip ci]
- Immediate source-review correction of previous GPU timing cleanup: testing process-global
gpu_time.poolbefore requesting stop/join raced the Vulkan GPU worker creating that pool. The generated Scheduler::~Scheduler now ALWAYS requests worker stop, notifies, and joins before examining/destroying any query pool; inactive probe still requires normal scheduler jthread termination and does not change per-frame path. Native generator test assertion strengthened. No tests/build/Actions or Mac/FTP access. GPU native timing remains UNQUALIFIED.
2026-10-09 — Native heap first-piece OOM unreserves VA [skip ci]
ps5_heap_ready: previously reserving 3 GiB VA successfully but failing physical commit of first 128 MiB retried impossible dense 3 GiB memory while leaving the VA behind. Fixed: munmap unused reserved VA and set failed heap init for existing libc fallback; dense 3 GiB fallback remains if firmware's reserve syscall itself fails.tools/check-heap-growth.pynow models failed first commit and asserts mincore says original VA unmapped with zero dense retry. Test NOT run; no build/Actions/Mac/FTP, no performance claim. Still need real JIT/mspace physical reclaim and native multi-game qualification.
2026-10-09 — User PS quit wins over racing guest fault / retry [skip ci]
- Live game shortcut
pad->TakeReturnToMenu()sets completion->return_to_menu; if a guest fault is simultaneously reported before shutdown, oldif (!completion->guest_fault.empty())could schedule immediate automatic same-title retry even as user exited to Library. Now guest-fault retry/exception handling runs ONLY when!return_to_menu; user-initiated exit always wins and reaches existingif (return_to_menu) continue. Other early-boot fault retries remain as before. Static check-ps5-live-input contract extended, not executed. This is NOT a blanket auto-restart disable and must be tested on device. No builds/Actions/Mac/FTP.
2026-10-09 — PS5 direct-memory map rollback ownership hardening [skip ci]
Common::CommitMemoryRangeused MAP_FIXED for each heap piece. On unexpected success at a different VA it previously calledsceKernelReleaseDirectMemorywithout first unmapping the newly created foreign VA, risking stale mapping/PA lifetime violation. Now return code is captured, successful but unexpected alias is munmapped before physically releasing its direct memory, and physical release failure is fatal (ownership cannot be safely continued). Existing correct fixed-map path and full zeroing preserved. Source assertion added to architecture checker, not executed; firmware behavior is still unverified. No build/test/Actions/Mac/FTP.
2026-10-09 — Lifecycle heap physical-retention receipts [skip ci]
- ReportDirectMemoryState already runs only at core_initialized, core_shutdown, core_destroyed; now also emits EDEN_HEAP_LIFETIME phase=... pieces=... large=... large_blocks=... tcache=... there, using existing weak native heap counters. This allows comparing heap's physically retained 128MiB pieces vs live / cached and separately freed >=32MiB blocks across successive games. Does not enumerate GPU memory per frame or reclaim invalid live mspaces. Added source assertion; no build/test/Actions/Mac/FTP.
2026-10-09 — Sparse JIT per-thread positive-page hint replaces needless global lock [skip ci]
- Pinned Dynarmic A64 CompileBlock checks BlockOfCode::EnsureMemoryCommitted(MINIMUM_REMAINING_CODESIZE) once per block, while actual PS5 2MiB RX/RW direct-memory commit happens only at page-growth boundaries. Before this patch, every CompileBlock entered process-global sparse_jit_mutex/map lookup, contending across guest cores even when no physical commit required. Added trivial thread_local CachedCommit{executable,committed,generation}; atomic sparse_jit_generation epoch increments on both reservation and release. Only when pointer/epoch match AND requested<=previously committed does it return lock-free. Genuine page growth still uses original mutex, ownership, memset, W^X mapping, and allocator; success updates TLS positive record. No extra heap allocation in hot path; requires guest workers quiescent before destructor (existing contract). Tools/check-ps5-architecture.py source assertions added, tests/PS5 native validation NOT RUN. Potential positive hotpath improvement, not proven FPS.
2026-10-09 — Native std::bad_alloc actionable recoverable launcher error [skip ci]
- Native per-game session now specifically catches std::bad_alloc before generic std::exception, restores CPU worker placement and returns to interactive launcher rather than surfacing the opaque
std::bad_alloc. Exact message advises full app exit/restart, because process-lifetime mspace backing and virtual maps can remain after game teardown; never asserts GPU vs JIT vs VA as proven cause. Added translatable known launch reason and French FR/CA strings, plus static architecture source assertion. No automatic quality downgrades, no hidden retry or background mutation. No native build, tests, Actions, Mac/FTP; does not itself fix OOM.
2026-10-09 — Game-library tiles survive transient ROM mount/storage failures [skip ci]
- Launcher check_games_present previously regarded every false game_exists result as deleted ROM after two polls. When the entire configured roms/ folder became unreadable for >4 seconds, FC27/other titles could all vanish from the library after a game crash. A new Services::game_storage_available (default true for mock services), overridden by EdenServices using error_code is_directory(AssetsPath('roms')), is checked on existing background filesystem worker BEFORE individual file checks. Missing root yields empty missing results, resetting prior confirmation without touching installed tiles; individual genuinely absent ROMs still require two independent checks. No main-thread disk IO, no storage mutation. Source test contracts added but NOT run, no build/Actions/Mac/FTP. This is plausible contributor to reported FC27 disappearance, not verified hardware root.
2026-10-09 — ROM storage presence scanner race closure [skip ci]
- The ROM directory can unmount AFTER the worker's initial
game_storage_available()check but before all per-game exists probes finish. Check root availability again before delivering results; if lost, discard the partially missing batch. Same asynchronous worker; no per-frame stat, no ROM deletion, no UI design change. Source check requires both guards (not executed); hardware root-loss simulation pending approval.
2026-10-09 — Sync built-in French catalogue for native bad_alloc recovery [skip ci]
- Source audit found
fr-FR.potranslated the new all-title native PS5 bad_alloc recovery message but the bundledfr_fr_embedded.hstill held the prior catalog. Without synchronization,tools/launcher/strings.py checkfails and installed French UI lacks this message. Regenerated exact raw-string wrapper from current fr-FR.po (same deterministic layout as strings.py embed-fr), with byte-identical embedded content. No script execution, test, build, Actions, Mac or FTP. Final all-on package still requires native CI and hardware validation.
2026-10-09 — Preserve rendering worker bad_alloc exception category [skip ci]
- The native all-game outer session catch already presents a localizable, actionable PS5 memory error for
std::bad_alloc, but GPU/renderer worker exceptions travel viacompletion->failure: itscatch (const std::exception&)previously wrapped bad_alloc intoruntime_error("Rendering failed: std::bad_alloc..."), so they bypassed the new recovery message. Catchstd::bad_allocFIRST at this rethrow site andthrow;intact; device/host Vulkan OOM handling and ordinary exceptions unchanged. Static source assertion staged, no build or tests, no Mac/FTP. FW13.60 testing required.
2026-10-09 — Last contiguous direct-memory size at actual bad_alloc [skip ci]
- In native per-title std::bad_alloc recovery, call the preexisting bounded one-shot sceKernelAvailableDirectMemorySize wrapper (QueryLargestDirectMemoryBlock) and emit EDEN_PS5_OOM largest_query_ok=... largest_free_mib=... before launcher recovery. This is largest contiguous PA, not total unused RAM; don't infer direct cause solely from it. No allocation, full region scan or per-frame work on the failure path. Regression source assertion staged, no tests/build/Actions/Mac/FTP; FW13.60 qualification needed.
2026-10-09 — Distinguish per-ROM I/O errors from deleted games [skip ci]
- Native
EdenServices::game_existspreviously delegated to IsFile and treated all lstat failures (EIO, intermittent external storage, permissions) as missing ROM. With two periodic background scans, even one intact FC27 file could vanish from library despite the roms root still existing. Now validate filename, use lstat directly, preserve prior regular-file/symlink behavior for denied lstat via stat, and return ABSENT only for ENOENT/ENOTDIR or a known nonregular file; indeterminate per-file errors return 'assume existing' to defer UI deletion.game_storage_availableprotects entire root before and after the batch. This is a presence-display resilience rule, not permission bypass or executable file verification. Source tests added, not run; no build/Actions/Mac/FTP.
2026-10-09 — Reset cross-title dev Vulkan and performance option leakage [skip ci]
- Major second-game configuration bug: most globals in dev_vulkan.h (sync_submissions, hcr_mode, compute_barriers, custom_border, nullDescriptor, sparse, multirange, robustness2, feature disables, trace flags) persisted after a game despite dev-settings absent/changed on next title. Only gpu_time reset. Added
DevVulkan::ResetForTitle()to restore every default before parsing dev settings and before new device creation, alongside existing GPU session epoch advance. Also reset Performance dev-only globals at per-title start: graphics_usage_from_pool, gc_keep_dirty, dispatch_mask 7, idle_spin_iterations 5000, jit_duplicates, pc_sample_core/fast, capture_early, firmware_applets, trace_fs_callers. Helps keep FC27 vs BOTW and first-vs-second comparisons honest; cannot prove FPS until native A/B. Added static source policy checks; no build/test/Actions/Mac/FTP. Note dev-settings environment overrides (RADV_DEBUG/env=) may also need per-title restoration; not modified in this commit.
2026-10-09 — Direct-memory graphics GC transient-query failure suppression [skip ci]
- Correctness/perf interaction found in headless/performance.cpp RefreshFreeMemory: one unsuccessful sceKernelAvailableDirectMemorySize used to report graphics_memory_short=true and largest_free=0, causing instant dirty-texture GC writeback even if previous verified pool headroom was ample. New two-failure policy: one isolated unavailable kernel query after a confirmed result retains previous largest-free/short flags; first-ever miss or second consecutive miss conservatively marks short as before. A bounded diagnostic EDEN_PS5_DMEM_PROBE_FAILED reports last_confirmed vs conservative. Does not alter confirmed low-memory handling (384MiB threshold) or direct allocation policies. Static check in tools/check-performance-policy.py added; not run; no build/tests/Actions/Mac/FTP. Hypothesized jitter cause remains UNVERIFIED without PS5 logs.
2026-10-09 — Reclaim first heap physical 128MiB + reserved 3GiB VA on mspace-create failure [skip ci]
- Source audit found another real first-startup allocation failure: ReserveMemoryRange(3GiB) and CommitMemoryRange(128MiB) can both succeed, but sceLibcMspaceCreate(first piece) can fail. Existing branch skipped direct free in growable mode while setting init failed, permanently stranding 128MiB physical PA and 3GiB VA. Fixed with optional committed physical PA output to heap's one-thread startup; headless/heap_pages.cpp stores only first successful mapping and adds eden_heap_abandon_initial. When initial mspace create fails, Common::AbandonInitialHeapReservation unmaps full unused VA, releases precisely the first committed physical allocation (PS5) before marking init failed. No allocations/mspaces live; fail-hard on ownership mismatch, regular heap growth unaffected. Host mock
first-mspace-failchecks entire VA unmapped, committed account zero, libc fallback; not executed. No runtime memory reclaim of initialized mspaces, build/tests/Actions/PS5/Mac/FTP not run.
2026-10-09 — At most one kernel largest-free direct-memory query per 100 ms [skip ci]
- Follow-up to new one-miss graphics-memory policy: the original RefreshFreeMemory performed atomic load/check then unconditional
checked_ns.store(now), so multiple GPU/texture-cache callers arriving together on refresh boundary could each synchronously invoke costly sceKernelAvailableDirectMemorySize AND incorrectly count both failures as two separate 100ms misses (forcing dirty GC). Changed to single-owner compare_exchange_strong timestamp claim with monotonic/backward guard, preserving no kernel calls for losers. No per-frame mutex or blocking. Source-only static assertions added, not executed; PS5 native 5s FPS/GC logging required before claiming improvement.
2026-10-09 — Prevent >100ms direct-memory query overlap and capture slow kernel calls [skip ci]
- Follow-up to CAS-protected 100 ms GPU memory-pressure refresh: CAS prevents concurrent claims inside one window, but an OS query delayed >100ms can still overlap with a next-window owner, and old results can overwrite newer RAM evidence. Added nonblocking query_in_flight atomic claim after timestamp CAS; if another query is in progress, return previous known data without blocking renderer; owner releases after handling known/unavailable state. Dev profile only collects up to 16
EDEN_PS5_DMEM_PROBE_SLOW latency_ns=... known=...when kernel request + update >=2ms using CLOCK_MONOTONIC; shipping no extra clock reads. Added static contracts, no host tests, native build or PS5 run, and no Mac/FTP access. FC27 root cause unproven.
2026-10-09 — Sparse JIT qualification probe unexpected alias ownership [skip ci]
- Audited
ProbeSparseJitAlias(disposable 2MiB RW/RX mapping before each selected sparse game).sceKernelMapDirectMemorycan theoretically succeed but return a different VA; earlier probe broke out and released physical pages after unmapping only originally reserved RW/RX addresses, leaving the unexpected alias mapped to released PA. Source now captures successful displaced RW/RX results, unmaps them before the reserved addresses and direct physical allocation, and aborts for unresolvable partial/overlapping mapping states. No impact to normal fast path, no persistent JIT release changes. Static source assertion added but NOT EXECUTED. No build/Actions/Mac/FTP; native 13.60 validation pending.
2026-10-09 — Require the native heap multi-thread host harness on full PS5 build preflight [skip ci]
- Audited GitHub
.github/workflows/build-040-zbic.yml: the existing heavy native allocator host harnesstools/check-heap-growth.pywas NOT invoked, even after numerous heap changes, thus full build could pass source-only assertions while 8-thread allocations, dense fallback, overflow and first-commit/first-mspace OOM rollbacks were never exercised. Added it to mandatory full-build preflight immediately after source architecture check, after clang-18 installation. The script executes UBSan and TSan host mock, with 4 modes in checked build, and is intentionally NOT put in 12-minute quickencore-core-preflight.ymldue to timeout/resource envelope. No Actions/build/tests run by this source commit. Build may now correctly fail early if allocator behavior is broken; this is desired for one eventual complete experimental run.
2026-10-09 — Remove excessive dev harness file probes during normal DualSense menu use [skip ci]
- Found synchronous /app0 filesystem checks in native
frontend.cppevery 10 menu frames (~6Hz at 60 FPS) in EDEN_DEV_ROM_ID builds, including normal interactive user tests with NO scripted replay: compat-input.txt stream open, quit-app.txt remove, crash-app.txt probe. These are unnecessary potential menu frame stalls on slow PS5 storage. Changed to one check every 60 frames whileDevelopmentInput.activeis false (one per second at 60 FPS); automatically restores original every-10-frame cadence once a scripted replay is active. The startup of an unattended replay can be delayed by up to ~1s; once active its cadence remains the original. Never disables physical radio_input_poll in manual mode and never modifies approved artwork, input mappings or screen logic. Regression source assertion added to tools/check-runtime-frame-budget.py; not run. Requires real menuEDEN_UI_FRAMESstatistics before attributing user's scrolling judder.
2026-10-09 — BLOCKING generator Python syntax fixed before unified PS5 build [skip ci]
- Real build blocker discovered in
tools/prepare-vulkan-port.py: two literal C++//comments had been inserted at Python indentation insideadapt(...,[...]), outside a triple-quoted C++ replacement. Python raises SyntaxError when importing/running that generator, so Vulkan patch generation and every PS5 compilation would fail immediately. Converted those to Python#comments without changing emitted C++ destructor code. Addedast.parse(port, filename=...)to mandatory full-buildtools/check-vulkan-shader-workers.pypreflight to catch future syntax regressions before invoking generator. No tests/build/Actions/Mac/FTP run; syntax change reviewed in source, not an assertion of CI pass.
2026-10-09 — All authored Python generators get a no-execution syntax preflight [skip ci]
- Previous real Vulkan build blocker: Python
//comment outside C++ triple-quoted source. Addedtools/check-python-source-syntax.py, a bounded AST-only parse of in-treetools/**/*.pyandheadless/**/*.py(no imports or execution of generators, no pyc writes). This now gates direct native build in tools/build-headless-native.sh immediately before native Clang syntax check, full build-040-zbic workflow, and opt-in core preflight. Does not alter the all-on/release binary matrix, native compile flags, CI trigger policy, user Mac/FTP or plugin access. No test, build or workflow executed on this turn; actual syntax audit result remains unknown until authorization.
2026-10-09 — Development launcher command polling uses wall-clock, not menu FPS [skip ci]
- Refined prior dev-script disk probe throttle: counting 60 UI frames at 20FPS delayed script quit/replay discovery to 3s, and 10 frames during active replay also slowed as launcher FPS fell. Now
next_development_pollfrom Clock::now gates one filesystem sweep per real second for manual DualSense sessions or one every ~160ms during active scripted replay; no catch-up burst after long EGL swap. Input radio polling remains every frame with identical controller mapping; no change to approved art. Existingtools/check-runtime-frame-budget.pystatic assertions updated. No test/build/Actions or Mac/FTP writes. Native menu 5s frame-stage receipts still required to verify smoother scrolling.
2026-10-09 — Prebuild code review: lower menu connection-state polling [skip ci]
- Current GitHub test branch audited after
0c911e7. Latest green workflow on an older commit does not validate new source. No Actions build, CI, SDK test, firmware measurement, Mac or PS5 file edit, or FTP modification executed. - Found live
scePadReadeach menu frame plus a redundantscePadReadStatefor each connected player on every frame insidepoll_players(). Limited cosmetic connection-status checks to 100 ms intervals, leaving real DualSense button reads unchanged on every frame, 500 ms signed-in-user discovery, and existing glyph/mapping logic untouched. Added a static source hot-path regression contract. PS5 frame-time benefit and reconnect latency must be verified after explicit build permission. - Updated all-on test instructions: test_title_id denotes the FC27 diagnostic title, not mandatory autoboot. Interactive launcher remains the default;
autoboot=onis explicit opt-in. - Important outstanding features: safe reclaim of retained 128 MiB native heap pieces (~1.375 GiB committed at game shutdown in previous PS5 traces), in-game sparse JIT physical decommit at whole-JIT safe points, PS5 physical/SMT CPU load verification, GPU queue/synchronization and shader frame-time profiling, outstanding PRMT/Fermi2D modes, and genuinely qualified per-game PlayStation glyph artwork. Do not fake memory free, suppress diagnostics, change approved purple UI or claim native qualification before PS5 proof.
2026-10-09 — Stop repeat heap piece leaks on growth mspace failure [skip ci]
- Found a real OOM escalation in
headless/heap_arenas.inc: when a new physical 128 MiB backing commit succeeded but SonysceLibcMspaceCreatefailed, the piece became an orphan. Each subsequent allocation that did not fit an existing mspace could commit another whole physical piece and fail again. This could exhaust direct memory without increasing usable heap capacity. - Source now latches a growth-lock-owned failure state after the first post-startup mspace creation failure. Successful earlier mspaces remain usable. No subsequent physical piece is committed for that error in the same process. Failed piece is not unmapped or freed because physical ownership and mspace-failure cleanup semantics are not proven, and no normal heap reclaim is claimed. Extends
tools/check-heap-growth.pywith a deterministicgrowth-mspace-failmock and memory accounting checks. - No tests, GitHub Actions, firmware execution, compilation, Mac/FTP writes or release changes performed. New source still requires native preflight/8-thread harness and hardware replay before test build confidence.
2026-10-09 — Remove per-title JSON I/O from held-D-pad Library selection [skip ci]
- Concrete launcher
update/inputstall discovered inLauncher::refresh_selected_game(): every newly highlighted Library title calledservices_.docked(id), which synchronously performsLoadGameSettings(id)plusLoadPreferences()filesystem reads on PS5. The same flow runs on every D-pad/shoulder navigation repeat, matching a known source of selection-lag, though the measured 122-175ms samples were not attributed to this function alone. Game::dockedis now calculated on the existing async ROM/mod scan worker.refresh_selected_game()reads the immutable in-memory effective flag, never storage. Same-file rescan now refreshes selected mode instead of waiting for a changed ROM list.- After a saved per-title setting, Home or Library updates the cached effective mode. Global preferences saves schedule an asynchronous refresh; if a scan is in flight a one-time repeat is scheduled after completion so old values cannot silently persist. Existing immediate Home hero cache invalidation remains.
- Added source-only
check-runtime-frame-budget.pyregression contracts. No SDK build, tests, GitHub Actions, PS5 playback or claimed frame-time gain; confirm under held D-pad and compareEDEN_UI_HOTSPOT/EDEN_UI_FRAMESat authorized hardware test.
2026-10-09 — Worker-scan settings consistency and bounded PS5 direct-total queries [skip ci]
- Strengthened the async docked-mode optimization: when per-title mode/settings change in Home or Library while a prior game-list scan is in flight, mark one mandatory later refresh. This prevents stale worker results from overwriting newly saved
Game::dockedvalues. Current UI cache updates are immediate; refresh remains off the input/render thread. RefreshFreeMemory()previously invoked bothsceKernelGetDirectMemorySize()andsceKernelAvailableDirectMemorySize()every 100 ms while running the texture collector. The total direct-memory span is fixed for the process and now caches only a positive successful result under the existing single-flight owner; transient initial failures still retry. The availability/contiguity probe continues at its prior cadence, all OOM and confirmed low-memory thresholds are unchanged. Source-only performance-policy contract extended.- No CI/source checks/SDK compile/hardware benchmark executed: reductions in stall rate, kernel syscall cost or FC27 FPS are hypotheses until a matched PS5 test.
2026-10-09 — C++ Game aggregate compatibility before first compile [skip ci]
- Moved the new
Game::dockedcached flag to the end of existing data fields instead of inserting it among the artwork strings. This preserves the order/types of all pre-existing aggregate-initializer positions in derived PS5 host code, while retaining the same default and async update semantics. Source readback checked, still no native build/test run.
2026-10-09 — Correct deterministic heap failure harness arithmetic [skip ci]
- Corrected staged
growth-mspace-failhost harness precondition: the very first 100-byte allocation had already created an aligned 8 MiB per-thread arena inside the initial 128 MiB mspace, so four retained 30 MiB blocks could not fit without growing prematurely. The fixture now retains three 30 MiB blocks, then injects the mock mspace failure on the fourth, asserting no subsequent physical commit after repeated failures and continued availability of the first mspace. Source-only change; run remains unexecuted.
2026-10-09 — Complete mapped-VA extent check before PS5 JIT and CPU direct backing [skip ci]
src/memory_pages.cppalready declared a checked CPU mapping windowcpu_mapping_range(base, size), butAllocateMemoryPagesand the dense JIT'sMapExecutableAliasvalidated only the first address withcpu_mapping_address(). A positive kernel mapping that starts inside the allowed region yet extends into the high GPU/device VA range was accepted. Now validate the whole span, unmap any successful out-of-window alias before releasing owned physical direct RAM, and return allocation failure cleanly. The sparse page-table zero-block scratch alias also validates the complete 2 MiB extent before zeroing, with explicit ordered cleanup on rejected success.- Added source contracts to the existing JIT/VA preflight. This narrows anomalous PS5 kernel mapping acceptance; it is not evidence that an actual address collision occurred in FC27, nor an FPS optimization. No build/CI/SDK/runtime performed.
2026-10-09 — Protect sparse page-table remaps from unexpected fixed-map aliases [skip ci]
MapSlot()formerly returned false ifsceKernelMapDirectMemory(..., MAP_FIXED)returned a different virtual address, but did not unmap that successful foreign alias before the caller released or reused its backing physical page. This could leave an orphan physical alias under unusual kernel behavior. Now a successful unexpected alias is explicitly unmapped before the caller receives failure; an error with a mutated address aborts rather than guessing mapping ownership. Ordinary successful fixed maps and regular failures (unchanged address) retain prior behavior. Source preflight contract added; native firmware semantics still unqualified.
2026-10-09 — Remove global dev HLE profiler mutex/map from every guest IPC request [skip ci]
- The all-on PS5 test build instruments every guest
InvokeRequest/InvokeRequestTipc. The priorRecordHleacquired a single mutex and performedstd::maplookup on every service command across guest cores, injecting profiler contention and allocator pressure directly into FC27's workload. Its map also retained non-owned service-name pointers across title lifetimes. - Introduced
headless/hle_counters.h: 4,096 bounded preallocated service-name/command slots; stable text-content FNV-1a hash instead of pointer identity; owned 80-byte diagnostic name per slot; lock only while first registering a new pair, then atomic call/ns totals with no lock or map allocation for normal requests. Snapshots iterate atomics without contending with guest HLE dispatch. An overflow aggregate preserves total accounting when all slots are occupied. No change to game HLE behavior or IPC sequencing, only diagnostic aggregation. - Integrated a dedicated C++20 eight-thread host stress/recycled-service-name/fixed-table-overflow fixture
tools/check-hle-counter-contention.pyinto the explicit GitHub all-on preflight. This reduces expected diagnostic overhead but does not establish actual FC27 FPS improvement until a compiled native build and paired console logs. No CI/build/test launched in this edit.
2026-10-09 — HLE first-registration race closed before native compile [skip ci]
- Review identified a publication race in the new fixed HLE profiler: if two workers first saw the same empty hash slot, the second waited for the registration mutex; after the first published the same service/command, the second could skip that slot and insert a duplicate farther in the table. Corrected the under-lock recheck to merge into the newly published same entry, not skip it. Host eight-thread fixture now explicitly requires all 35 unique service/command identities, each reported once, with unchanged exact aggregate counts and no overflow for the normal stress case. No CI/test execution.
2026-10-09 — Keep HLE telemetry allocation entirely out of shipping builds [skip ci]
- The new ~400 KiB fixed HLE counters table is now compiled into
performance.cpponly underEDEN_DEV_PROFILE, with the service-hook symbol staying a no-op in shipping. Diagnostic report traversal is likewise development-only. The all-on PS5 test still gets the bounded concurrent counters; normal release has no new profiler memory overhead. Extended source gate. No build/tests/actions performed.
2026-10-09 — Hard bound per-command HLE diagnostic probe depth [skip ci]
- Prevented a diagnostic self-inflicted worst-case: with 4,096 hash slots, a game with thousands of distinct service/command pairs could make every subsequent hot HLE call scan thousands of slots before incrementing its overflow counter. Each call now probes at most 64 consecutive slots; collisions/near-full clusters spill into atomic aggregate overflow. The source host fixture explicitly accepts overflow before complete table occupancy but requires
attributed_calls + overflow_calls == total_callsand matching nanoseconds, and retains exact 35-key multithread attribution at normal occupancy. Bounded runtime overhead takes priority over per-command detail when saturated. No test run.
2026-10-09 — Fail-closed on mutated output pointer from failed PS5 direct map syscall [skip ci]
- Audited four low-level PS5 ownership paths: dense CPU direct map, dense JIT executable alias map, sparse table shared-zero-page scratch map, and 128 MiB heap piece MAP_FIXED. A failed
sceKernelMapDirectMemoryreturning a different output pointer was previously treated like an ordinary failure: the caller released physical backing despite uncertain VA alias ownership. Now each of these paths aborts on an error-mutated output rather than risk releasing a still-mapped physical page. Ordinary errors with unchanged pointer still return gracefully, and successful but out-of-window aliases still unmap before direct-memory release. Source contracts staged; no hardware incident attributed to this case and no runtime test performed.
2026-10-09 — Remove up-to-8192 PS5 kernel region queries from periodic GPU frame reporting [skip ci]
- Identified a direct development-only frame-time hazard:
graphics.cppcallsReportGpuThread(frame_total)on the GPU render thread each reporting interval. That calledReportDirectMemoryState("dev-profile"), which loops up to 8192sceKernelDirectMemoryQuerysyscalls to enumerate direct memory, even though lifetime checkpoints already enumerate at game initialization/shutdown/destruction. - Removed the full enumeration from the periodic GPU path. Periodic
EDEN_MEMORY_LIVEnow reads just the last knownlargest_free_blockand pressure flag atomically (no syscalls); lifecycleEDEN_MEMORY_LAYOUTand fullEDEN_HEAP_LIFETIMEevidence are retained. Added a hot-path source assertion. Likely removes diagnostic-induced hitch potential but native frame-time improvement NOT measured; no build/action triggered.
2026-10-09 — Bound HLE diagnostic output work on the live GPU thread [skip ci]
- The new fixed-size HLE counters removed per-request mutex/map allocations, but
ReportGpuThread()still traversed up to 4096 counters and could print thousands of EDEN_DEV_HLE lines per report interval on the native render thread once enough services each crossed 1ms total. That risks profiler-induced stalls like the removed full direct-memory enumeration. - Reporting now scans bounded atomic slots without locking or dynamic allocation, retains the 32 cumulative-heaviest service/command lines, and emits
EDEN_DEV_HLE_SUMMARYwith exact per-snapshot attributed aggregate calls/ns and key counts. All priorEDEN_DEV_HLEline format remains, so frame analysis can inspect hot services;EDEN_DEV_HLE_OVERFLOWcontinues to distinguish capacity loss. Worst-case per-frame-report printf calls from this section are bounded (32+2) instead of 4096+. - Source preflight asserts bounded reporting. No gameplay/build/benchmark or profiler impact measurement performed.
2026-10-09 — Preserve sparse JIT five-second telemetry without render-thread locking [skip ci]
- After removing the
ReportDirectMemoryState("dev-profile")full kernel walk from the GPU thread, discoveredtools/analyze-ps5-frame-windows.pyconsumes itsEDEN_JIT_SPARSE_MEMORY phase=dev-profileline. Omitting that measurement would cripple per-window JIT capacity/physical-commit correlation. - Added
SparseJitUsageFast()backed by two process atomics for reserved virtual JIT and committed direct pages. They update only under the already-existing sparse JIT mutex at reservation, physical 2 MiB commit and teardown, and are read with no lock or kernel calls in the GPU report. Restores the unchanged parser-compatibleEDEN_JIT_SPARSE_MEMORY phase=dev-profile reserved=… committed=…line. LifecycleSparseJitUsage()retains its synchronized exact ownership walk, while live atomics are an approximate concurrent snapshot. Source gates extended. No compile or hardware run.
2026-10-09 — Extend PS5 five-second analyzer for lock-free direct-memory evidence [skip ci]
- Updated
tools/analyze-ps5-frame-windows.pyto parse new low-overheadEDEN_MEMORY_LIVEsamples and preservedEDEN_JIT_SPARSE_MEMORY phase=dev-profilereceipts, display the smallest confirmed largest-free direct-memory extent and last confirmed headroom, and attach available per-window direct-memory pressure to slow/fast FPS windows. Missing/zero measurements remain explicitly unknown rather than fabricated zero MiB free. - Added
tools/check-ps5-frame-window-analysis.pysynthetic host regression covering old logs (no new measurements) and the extended 5-second log format (JIT, GPU, HLE/guest IPC and pressure flags), wired to the next explicit build preflight. No native performance or build validated.
2026-10-09 — Sync next-test observability checklist to new no-stall telemetry [skip ci]
- Updated
docs/PS5_ALL_ON_TEST_BUILD.mdwith the exact intended five-second HLE, GPU worker, direct-memory and sparse JIT receipts, the backward-compatible parser, and comparison requirements for FC27/Zelda. Distinguishes unknown largest-free samples from zero RAM and live atomic estimates from exact stopped-title kernel ownership scans. No GitHub Actions/test/build initiated; shipping branch and local PS5/Mac untouched.
2026-10-09 — Roll back a failed post-startup heap physical growth piece [skip ci]
- Corrected the remaining actual orphaned direct-memory backing case at heap growth: previously a successful 128 MiB
eden_heap_commitfollowed bysceLibcMspaceCreate("Eden-heap") == NULLleft a committed physical block without an mspace, with a permanent one-way allocation-failure latch and an incorrecteden_heap_pieces_usedincrease. It is now possible to return these pages safely before they have any published owner or live allocations. - New owned-growth entry returns the exact physical handle from
Common::CommitMemoryRangeto the growth-lock owner; failed mspace creation restores a PROT_NONE guard at the same VA (using the pre-existing JIT fallback pattern) before releasing direct physical backing. The piece count and piece→mspace ownership are published only after success. Growth failure latch remains to prevent repeated synchronous 128 MiB zero+rollback cycles on a guest core. - Extended
tools/check-heap-growth.pymock with rollback/residency/lifetime assertions; fail scenario now requires committed bytes = one 128 MiB healthy initial piece, no repeat growth, no stale published mspace and small allocations still working. No tests/SDK build/CI or console run executed. This does not reclaim any active or ordinary retained mspaces between game launches; that remains a separate high-risk design requiring native ABI+quiescence proof.
2026-10-09 — Real C++ failed-growth physical ownership regression added to preflight [skip ci]
- Added
tools/check-heap-growth-rollback-host.pyto extract and compile the actualCommon::RollbackUnpublishedHeapGrowthimplementation against a Linux C++20 test double (2 MiB direct-owned span, 6 MiB surrounding reservation), proving the guard is restored before the mocked physical owner is released and the surrounding virtual reservations persist. Complementary 8-thread C allocator fixture checks 128 MiB accounting after mspace-creation failure. The new native-source host regression is wired into the next explicit GitHub Actions source preflight; neither test nor PS5 compilation has been run yet.
2026-10-09 — Cache PS5 constant direct-memory extent across JIT/heap physical commits [skip ci]
src/memory_pages.cpprepeatedly calledsceKernelGetDirectMemorySize()during physical allocation of every new sparse 2 MiB JIT chunk, the 2 MiB zero-table scratch, alias qualification and heap growth (including large-page allocs). This reports the process's fixed direct-memory EXTENT, not free headroom; repeatedly querying it adds avoidable kernel work on code compilation and heap growth.DirectMemoryExtent()caches only a positive answer in one process-wide atomic; unknown/failed boot queries remain retryable and fail closed without issuing a physical allocation with a nonpositive range.AllocateDirectOwned()reuses it for owned physical chunks. Does NOT replace the separate largest-free query, memory pressure budgeting, alignment or full ownership checks. Source preflight extended. No compiled native FPS/CPU measurement or CI action triggered.
2026-10-09 — Harden rollback host fixture C++ source portability [skip ci]
- Static review before the first run: guard
_GNU_SOURCEin the new extracted C++ rollback fixture (GCC may predefine it;-Werrorotherwise rejects a macro redefinition), explicitly include<initializer_list>for the guard-page loop, and normalize the native heap bridge comment. No production semantics changed. CI/native compile still not run.
2026-10-09 — Concurrent host preflight for positive-only direct-memory extent cache [skip ci]
- Added
tools/check-ps5-direct-limit-host.pyextracting and compiling the realDirectMemoryExtent()/AllocateDirectOwned()helper fromsrc/memory_pages.cpp. C++20 test injects a first failed kernel-size query (must not allocate), verifies the next success, then issues 160,000 owned physical-allocation mock requests from eight threads while asserting total-size syscall count stays at two. Wired into next explicit GitHub source preflight. No Actions, host test, SDK build or console execution run yet.
2026-10-09 — Fast negative ownership filter for direct large malloc/free [skip ci]
- Audited the heap's per-call ownership dispatch: when any >=32 MiB direct-owned allocation was alive,
eden_heap_large_find()previously scanned up to 256 atomic address slots for every foreignfree,realloc, ormalloc_usable_size, even though almost all libc pointers have never belonged to an owned direct block. This is avoidable guest CPU cache/memory contention. - Added a 4 KiB monotonic two-hash Bloom filter in
headless/heap_arenas.inc, populated before publishing each successfully allocated large block. The lookup skips all 256 slots when either membership bit is absent; positive pointers still use the exact original address comparison, and past bits never clear (so stale positives may cost work but may NEVER wrongly route an owned block to libc). No new dynamic allocation, mutex, physical backing or change to direct ownership/free semantics. - Host growth fixture now keeps a real large block live while it exercises foreign libc allocation → wrap realloc → wrap free 1000 times, asserting the owned block remains Bloom-positive and at least one foreign pointer is filtered. Not run, not native-qualified, no claimed FC27 FPS boost.
2026-10-09 — Eliminate per-ROM global preferences JSON rereads on async catalog scan [skip ci]
- Earlier library D-pad fix moved
services_.docked(title_id)off the UI event loop into the asynchronous library worker, but nativeEdenServices::dockedstill callsEden::LoadPreferences()for every title without an explicit console-mode override. With many installed ROMs this repeats identical filesystem/JSON parsing while the library updates. - Added optional virtual
Services::docked_for_scan(title_id, const Preferences&)defaulting to the originaldocked()for host previews. The native override uses a single global preferences snapshot taken by the worker, reads the same per-titleLoadGameSettings, and preserves explicit console-mode and authored-profile precedence exactly. Existing modaldocked()remains unchanged and re-evaluates live settings. The in-flight-scan refresh flag continues to handle concurrent preference saves. - Extended
tools/check-runtime-frame-budget.pywith source guards for one worker snapshot and no global preferences reread inside per-title native resolution. Compilations and PS5 frame/hardware tests remain unexecuted.
2026-10-09 — Share one effective docked-mode precedence implementation [skip ci]
- After adding one global preferences snapshot per catalog scan, consolidated the native per-title mode logic into one
EffectiveDockedMode(title_id, game_settings, global_profile)helper used by both liveEdenServices::dockedand worker-onlydocked_for_scan. Explicitconsole_modestill wins, followed by valid per-title authored profile, valid global profile, then default docked. Live modal reads retain their no-global-read fastpath on explicit per-title overrides. - Added a source-extracted C++20 regression
tools/check-library-docked-snapshot-host.pywith explicit handheld/docked, game-authored, global snapshot and invalid-profile cases. Wired into next GitHub source preflight, not executed. Source-level guards incheck-runtime-frame-budget.pynow require both methods to delegate to the same helper. No CI/build started.
2026-10-09 — Remove thousands of snprintf and reallocations from live GPU PC block dumps [skip ci]
Performance::Snapshot(), called byReportGpuThread()every 5 seconds on the native GPU worker, dumps up to six new JIT guest+host blocks. Each prior 4096-byte host dump used 4096std::snprintfcalls andstd::string +=with repeated growth; with six blocks this could make >24,000 formatted conversions during a single report interval, while holdingworkers_mutexand executing on the render thread.- Replaced block-hex generation with fixed-size stack
std::array<char>buffers and direct nibble encoding; preserves byte-for-byte lowercase hex,EDEN_PERF_BLOCK_GUESTandEDEN_PERF_BLOCK_HOSTline syntax, full capped 4 KiB host sample and 256-byte guest sample. No dynamic string allocation/byte-level printf in those dump loops. Source assertions staged intools/check-runtime-frame-budget.py. The remainder ofSnapshot()still performs maps/sorts and can introduce reporting pauses; native FPS impact unmeasured. No build/CI/tests invoked.
2026-10-09 — Isolate heavy development PC snapshot from guest CPU workers [skip ci]
Performance::Snapshot()runs every five seconds from the PS5 render thread and from optional host captures. Its original singlestd::lock_guard(workers_mutex)covered all host-PC histogram maps, native/guest block hex dumps, sorting, scheduler/clock syscalls andstd::fflush, so guest cores callingSampleCpu()and the frontendPollGpuPc()could be blocked by the profiler itself during a potentially very expensive GPU-thread report.- Split synchronization: new
snapshot_mutexserializes only independent snapshot/report consumers and their PC cursors, whileworkers_mutexnow protects exclusively an immutable copy ofworkersandcpu_samples. The snapshot's syscalls, print loops and block dumps use those local copies after unlocking. AddedEDEN_DEV_SNAPSHOT_COST mono_ns=… elapsed_ns=…in development to expose the report's own wall-time disturbance. The GPU render thread can still stall running the report, but guest worker publication and PC polling do not wait for its heavy formatting. - Source static guards added; no host tests, SDK native build or console FPS measurements run.
2026-10-09 — Guard asynchronous library selection and same-list refresh bounds [skip ci]
- Static review found the library's
refresh_selected_game()andpress_library()dereferencedgames_[static_cast<size_t>(library_.selected)]based solely on a nonempty list;apply_games()same-order settings refresh made the same assumption. If asynchronous initial scan/removed title transitions left an index at -1 or out of range, the cast could index a huge offset and crash the shell while scrolling. - Added explicit
0 <= selected < games_.size()guards in all three paths. Absent selection now defaults to docked/no mods UI until the current valid index is established; otherwise unchanged. Does not alter approved design, library animation or disk I/O behavior. Source assertion staged; no compile/test/PS5 validation.
2026-10-09 — Show profiler observer effect alongside FC27 frame windows [skip ci]
- Updated the backward-compatible read-only
tools/analyze-ps5-frame-windows.pyto parseEDEN_DEV_SNAPSHOT_COSTand display its sample count, worst and median wall-clock milliseconds as a separate diagnostic line. Do not align the cost by ordinal frame index: manual captures can add snapshots and their duration is not proof that one measured game frame suffered that exact latency. - Extended the synthetic old/new frame log fixture to accept missing old telemetry and check new 3.5/7ms sample costs. The future test can now distinguish costly diagnostics from measured render frame intervals without losing GPU/JIT/IPC/pressure evidence. Preflight remains unexecuted.
2026-10-09 — Rolling PC profiler samples and bounded guest sampler thread lifetime [skip ci]
- In development
pc_fast=on, a detached 500 Hz guest-core signal thread previously ran until the fixed 65,536-sample array filled, then profiling silently stopped (~131 s after fast sampling began); the native GPU sample buffer similarly stopped at 8192 samples (~16 s at 500 Hz). That breaks FC27 profiling later in the same match or after an in-process relaunch, and a detached sampler can outlive the guest thread. - For normal PC-only mode, sample slots now use lock-free atomic uintptr_t circular buffers (8192 GPU, 65536 guest). The single-owner signal handler stores its PC before release-publishing the monotonically increasing sequence number; Snapshot reads with acquire, clamps to the last capacity entries, and explicitly logs
EDEN_PERF_PC_SAMPLES_LOST source=gpu|guest count=Nwhen consumer lag drops older PCs. Concurrent wrap accesses use atomic slots. SpecialEDEN_DEV_WAIT_CALLERSremains GPU-bounded because its eight-word caller chains are not atomic. - Replaced the detached 500 Hz generator with a thread-local
std::jthreadon the owner guest CPU thread. Its 45-second boot delay is chunked into 200ms stop-aware sleeps; teardown requests stop and joins instead of leaking sampler workers across games. Guest sampler TLS registration clearscore_sample_readyon exit. The sampler is placed on verified secondary slots where available. Source guards staged; no native compile, signal ABI validation, or firmware timing test yet.
2026-10-09 — Real signal-handler host wraparound test staged [skip ci]
- Added
tools/check-ps5-pc-ring-host.pyto extract the actualPcSignalC++ implementation fromheadless/performance.cpp, compile it under C++20 against synthetic register contexts and fake Pthreads, and verify 10,000 GPU and 90,000 guest samples wrap the atomic 8192/65536 rings while retaining the most recent PC sequence. Special non-atomic caller-chain mode remains source-guarded and excluded from this PC-only host replay. - Wired the test to the next explicit GitHub Actions source preflight. No tests or Actions triggered. Native firmware signal-handler ABI and guest lifetime behavior untested; test executable existence is not evidence of production performance.
2026-10-09 — Sync all-on long-session PC sampler and own-profiler cost test [skip ci]
- Updated
docs/PS5_ALL_ON_TEST_BUILD.mdfor next authorized console validation:EDEN_DEV_SNAPSHOT_COSTobserver effect, GPU/guest circular PC buffer overwrite counters, 45-second delayed fast sampler with owner-threadjthreadteardown, special bounded caller-chain capture, and a required second-title in-process relaunch check for stale thread IDs. Lists new source-extracted host regression gates, all still unexecuted; neither local Mac nor release branch touched.
2026-10-09 — Keep sampling pthread_kill out of guest CPU publication mutex [skip ci]
PollGpuPc()was still holdingworkers_mutexthroughoutpthread_kill(workers[4].thread, SIGUSR2)andpthread_kill(core_sample_thread, SIGUSR2).SampleCpu()uses this mutex to publish guest core progress; kernel signal delivery under the lock creates avoidable contention and can contribute to profile-induced stutters.- The poller now returns immediately when PC sampling is off, snapshots the registered GPU
pthread_tinside a shortworkers_mutexcritical section, and issues both signals after unlocking. Caller-chain mode retains its GPU capacity gate; normal PC-only mode remains a ring. This does not change the fact that a stale thread ID is an external lifecycle race needing native stop-order validation; merely holding the old mutex did not protect thread teardown. Extended source-only hotpath contracts. No compilation, CI or console profiling was run.
2026-10-09 — Fix hotpath static assertion extraction around conditional #endif [skip ci]
- Corrected the new
PollGpuPc()source guard: splitting on the two nearby#endiftokens discarded the very function body being tested and could falsely fail a later preflight. Now extract from the function signature to the next exported heap declaration, retaining both conditional branches for lock-release assertions. No functional C++ source change and no build/CI run.
2026-10-09 — Clear stale GPU/CPU thread registrations at owner exit [skip ci]
- An in-process return to Library followed by another title destroys/recreates native GPU and guest CPU workers. Previous
RegisterWorker()wroteworkers[i].registered=truebut never cleared it on thread exit;PollGpuPc()could target an exited/recycled GPUpthread_t, and periodic worker snapshots could report stale CPU clocks/affinity as current. - Added a tiny
thread_local WorkerRegistrationowner hook that locksworkers_mutexonly on thread exit, verifies the recordedpthread_tstill matches the slot and marks the slot unregistered. TLS hook is touched before the PC sampler objects so C++ reverse destruction joins the faststd::jthreadfirst, then clears core readiness, then unregisters the worker. No new GPU/guest hotpath lock and no false claim that a kill begun before teardown can be canceled retroactively. - Existing
PollGpuPc()now copies the registered GPU target under the mutex and sends only after unlock. Source contract checks identity, registration and construction order. No native execution, thread lifecycle test or GitHub Actions triggered.
2026-10-09 — Prove stale worker-slot teardown with extracted C++ host test [skip ci]
- Added
tools/check-ps5-worker-lifetime-host.py, extracting productionWorkerRegistrationand replaying real thread-local C++ destruction with std::threads. Scenario A exits and clears its registered GPU slot; scenario B registers a new GPU thread over the slot while old owner A is still alive, and A's destructor must not clear the newer owner. B then exits and clears itself. Added to the next explicit GitHub Actions source preflight. This is NOT a PS5 native signal/kernel lifetime qualification; no CI or executable run initiated.
2026-10-09 — Unify PS5 virtual reservation VA ownership for heap, sparse tables and JIT [skip ci]
- Five native paths independently called
sceKernelReserveVirtualRangewith a mutable output pointer: sparse-JIT alias probe RW+RX, long-lived RW+RX JIT reservations, sparse zero-table reservation and growing 3 GiB heap. Several returned after syscall failure without checking a changed output VA, and sparse/heap out-of-window cleanup ignoredmunmaperrors, potentially losing ownership and hiding a VA leak across title relaunches. - Added
ReserveCpuVirtualRange(bytes,alignment)with one exact contract: zero-size fails; unsuccessful unmodified hint returns null; error mutating the hint aborts rather than silently abandon an uncertain reservation; success must fit the full CPU VA window or be fully unmapped (abort if cleanup cannot be proven). Wired all five reservation families to the same helper. Existing caller rollback still owns already successful RW reservations when RX fails, and sparse-table partial alias failure now checksmunmapreturn. This is a hardening of exceptional paths, not proof the firmware uses this ABI or the memory OOM is fixed. - Source contracts staged in
tools/check-ps5-sparse-jit-va-lifetime.py; no C++ compile, CI, test or console run.
2026-10-09 — Correct VA reservation single-owner source assertion [skip ci]
- Fixed
tools/check-ps5-sparse-jit-va-lifetime.pyto require onesceKernelReserveVirtualRange(&call (the shared wrapper). The extern declaration takesvoid**and has no ampersand, so counting it as a second call would falsely reject the next CI preflight. No native code changed; still unexecuted.
2026-10-09 — Source-extracted PS5 virtual-range ownership fixture staged [skip ci]
- Added
tools/check-ps5-virtual-reservation-host.pyto compile productionReserveCpuVirtualRange()against a host mock ofsceKernelReserveVirtualRange: tests successful owned VA, ordinary unchanged-hint rejection, successful out-of-window reservation followed by exactmunmap, andfork-isolated abort on an error with mutated output pointer. Uses real anonymous hostmmap, no PS5 ABI claims. - Wired into the next explicitly authorized GitHub source preflight. No test/compiler invoked in this conversation. The fixture demonstrates exception-path behavior only, not firmware allocation performance or FPS.
2026-10-09 — Reprise du build all-on après préflight de traductions bloquant [full-build] [test-all-on]
- Le run #37991618191 de compilation complète all-on sur
0c488552a32107d95f55db5050f49b1be2e5d707a échoué avant compilation native, à l'étapeValidate launcher translations and locale runtime. Les logs donnent fr-FR.po : 1 problème (chaîneLeft/right: Global, PlayStation or Switch for this game; Cross: edit individual buttons.manquante); les autres catalogues affichent des avertissements de textes non traduits, mais zéro problème. - Ajout de sa traduction FR sans changement au texte source ni au design, et synchronisation à l'identique de
headless/prosperoeden/fr_fr_embedded.hà partir du nouveaufr-FR.po. Le commit[full-build] [test-all-on]déclenche le job surdev/ps5-sparse-jitpour compiler la version complète de test, sans publication/release. - Aucun changement local Mac/FTP. L'état de compilation sera considéré inconnu jusqu'à preuve d'un nouveau run GitHub vert ; un ancien CI vert n'est pas la preuve de cette branche.
2026-10-09 — Repair two stale controller validators blocking all-on CI [full-build] [test-all-on]
- Run #37992450044 on
9ec4b0c3b6ea3ba35e485ce04fb196edf32a8db7passed strict launcher translations, toolchain, release metadata and startup/storage contracts; it failed attools/check-encore-ux.py:149because that preflight still demandedSetAdaptivePlayStation(bool enabled), removed in the now-active static, session-locked PS5/guest mapping. Native compile was not reached. - Reconciled two contradictory test expectations: the UX test required old auto-context switching at lines 145–154 while its final staged check also demanded removed
EDEN_PAD_CONTEXT mode=gameplay…; shippingheadless/devices.h,headless/pad.cpp, andheadless/main.cppinstead resolve global/title mapping once, lock it beforePad::Open, preserve custom button mapping and writeEDEN_PAD_MAPPING_FIXED+EDEN_PAD_MAPPING_LOCKED scope=session mode=static. Updatedtools/check-encore-ux.pyto assert those exact production invariants and forbidden mid-session auto swaps, andtools/ci/check-staged-app.pyto require those real compiled binary markers rather than the obsolete auto-mode strings. - This is a CI test-contract correction only, no change to user-approved launcher art, no physical PS5 input glyph replacement, and no modification of controller runtime. New
[full-build] [test-all-on]commit starts a fresh compilation attempt without release publication; old failed run cannot be restarted on newer source by re-running the old SHA.
2026-10-10 — All-On FC27 PS5 emergency regression
- Green CI #37996073674 did not demonstrate playable output. On-console FC27 test: black menus/missing textures, near-0 FPS. Launcher SIGSEGV 19 seconds after boot (crash-20261010-001622). UI draw spikes 126-134 ms, texture upload ~34-36 ms.
- Existing PS5 stderr demonstrates guest Job0 jumping to unmapped address and automatic relaunch of FC27. Immediate auto-retry was removed in source, the error now returns to the launcher.
- Unqualified Fermi2D 3D/pitch software blit is disabled by default; pinned GPU transfer path remains. Root cause of all missing textures is not yet established.
- Retest native PS5 compile, FC27 visuals, gameplay and launcher stability before declaring repaired. No local console/Mac files edited.
2026-10-10 — Glyph reconstructor: real source-diff bridge + BOTW Yaz0 inventory
-
Priority: PS5 Cross=A physical-input semantics and actual in-game PlayStation UI in Zelda BOTW and all reusable Switch-1 game families, without copying other authors' copyright game asset bytes. Related public reference o0Zz/sys-con separates physical HID button/pin, normalized Switch guest action and game-owned artwork; it does not itself fix glyphs.
-
Working corpus: 26 community Switch mod references plus 22 cross-platform sources covering 28 indexed Switch game families; none has yet produced a console-qualified per-title game graphics pack. Public gameplay mod descriptions do not establish genuine Switch sprite pixel XYWH or game update SHA.
-
New tool
tools/ps-glyph-diff-to-evidence.pyturns realps-glyph-mod-diff.py/ps-glyph-mod-folder-diff.pyoutput into unapproved original-RomFS alpha-isolated sprite candidate evidence. It verifies original Switch atlas SHA and file safety, groups changed components by safe isolated sprite, refuses ambiguous/unmatched regions, and requires later semantic review. No automatic A/B/X/Y or position guessing. CI synthetic testtools/check-ps-glyph-diff-to-evidence.py. -
BOTW compressed UI:
tools/ps-glyph-botw-yaz0.pyadds in-memory, bounded Yaz0 decompression (128 MiB cap, overlapping backreferences, header checks) and SARC+embedded BNTX member-offset inventories.tools/ps-glyph-sarc-inspect.pyandtools/ps-glyph-sarc-bntx-chain.pynow support safe in-memory bytes. BYTE offsets are not texture pixel coordinates, and true BNTX ASTC/swizzle decoding/repack and game-specific original assets still missing. Testtools/check-ps-glyph-botw-yaz0.py. -
Host GitHub run 38001395449 GREEN, all reconstructor, mod-diff, Yaz0/SARC and fixed PS5 mapping gates pass. No PS5 emulator compilation triggered, no user Mac/PS5 modifications and no actual Zelda glyph feature is yet qualified. Full plan in
docs/PS_GLYPH_REVERSE_ENGINEERING_PIPELINE.md. -
Extra BOTW source-diff bridge:
tools/ps-glyph-botw-archive-diff.pycompares authorized original vs modded Yaz0/SARC archives and fingerprints changed SARC member names plus named encoded BNTX texture ranges when structurally bounded. No actual sprite XYWH or game payloads are emitted; teststools/check-ps-glyph-botw-archive-diff.pyand host GitHub Actions #38001615664 GREEN. Usage documented indocs/PS_GLYPH_REVERSE_ENGINEERING_PIPELINE.md. Next true blocker remains original matching BOTW Switch BNTX texture decode/repack and semantic glyph visual validation; do not certify the 28 indexed games from metadata alone. -
User correction 2026-10-10: SAME GAME often preserves UI/control prompt placements between Switch, PS4, Wii U and PC; do not require pixel-identical art just to reuse layout anchors. Implemented
tools/ps-glyph-scene-positions.pyfor normalized viewports and documented 17 DST Lua UI anchors (PS4/Switch share parent transform but individual label offsets sometimes differ).tools/ps-glyph-cross-platform-image.pynow proposes matching Switch alpha-isolated sprite regions by normalized placement despite differing original art/resolution, marks candidate as layout-prior-only, rejects ambiguous matches.tools/ps-glyph-reconstruct.pyaccepts these ONLY after independent explicit Switch game scene+update+original SHA+semantic approval. Added host tests. BOTW PS5 Cross=A action versus spatial right-hand Circle remains distinct, and actual ASTC/BNTX pack/repack still unqualified. Full implementation summarydocs/PS_GLYPH_MULTIPLATFORM_RESEARCH.md. -
Cross-console same-title placement correction validated: GitHub host glyph CI #38002374918 green on commit
e4bbda3af8. Earlier two failures #38002155241/#38002323491 were a synthetic test fixture failing to restore its prior source image, corrected; no runtime code crash. Scene coordinate transfer, differing-color/resolution normalized alpha-candidate matching, explicit Switch scene/semantic review, Yaz0/SARC/BNTX source comparison all pass. Still no confirmed BOTW per-title LayeredFS PlayStation glyph pack or native PS5 retest; latest native PS5 build is earlier commit, not these glyph edits.
2026-10-10 — Actual Switch mod ZIP → glyph sprite positions → offline ASTC PS5 art pipeline
-
User correctly points out Switch/PS/Wii U UI mods already provide modified textures and their positions; avoid re-inventing per-game coordinates. In
dev/ps5-sparse-jittools now extract true in-image XYWH from authorized matching original Switch versus modded Switch ASTC BNTX, not just external mod screenshots. -
New
tools/ps-glyph-botw-mod-texture-positions.pyreads original/modified Yaz0/SARC as files or in-memory bytes, decompresses BNTX ASTC via astcenc, pixel-diffs the artwork, and matches changed components to original alpha-isolated sprites. Unknown semantics are deliberately unapproved, but actual mod source locations are reused. -
tools/ps-glyph-mod-zip-positions.pydiscovers RomFS paths in authorized Switch mods' ZIP files, matches exact local original RomFS resources, handles contained SARC/Yaz0 ASTC directly without extraction, and reports changed sprite regions; unsupported/unknown formats are retained in unresolved, not silently considered solved. Source formats include standalone Switch RomFS; UKMM's processed ZIP metadata and non-SARC game engines are not guaranteed handled. -
tools/ps-glyph-mod-auto-plan.pyuses these exact real mod XYWH regions to build title/update/hash-specific assembly plans automatically. A single explicitly namedcontrol_a_promptcan suggest guest action A→Cross; ambiguous sheets/controller silhouettes remain unlabeled. Explicitly reviewed per-scene controller/action bindings yield strictps-glyph-botw-auto-pack.pyinput with no manually retyped coordinates; unknown binding keys are rejected. -
tools/ps-glyph-botw-auto-pack.pygenerates independently licensed PlayStation icons into only bounded BNTX ASTC blocks, rewraps same-layout Yaz0/SARC;tools/ps-glyph-botw-stage-pack.pybuilds a checksummed, local-only LayeredFS pack with original game/update receipt and avoids installation. End-to-end tests synthetic and green GitHub host-only #38004008306. No modified Nintendo game art distributed, no user Mac or PS5 touched. -
docs/PS_GLYPH_REVERSE_ENGINEERING_PIPELINE.mdhas exact commands for ZIP positions → unapproved plan → approved per-texture plan → ASTC/Yaz0 rebuilt archive → local pack. Public BOTW DS4 UI v2 Western Layout offers Switch standalone RomFS/UKMM, CC BY-NC-ND. The real ZIP and user's matching original BOTW ROMFS are NOT present/verified in repo, so no actual Zelda PS icons displayed or native game rule activated; generated header still has zero supported games. -
Do NOT relabel synthetic CI as on-console gameplay/performance/texture correctness or claim all 28 source game families fully supported. Pending: actual original/mod input, visual action vs spatial semantics by scene, BNTX ASTC variants, multiple embedded textures/packs and on-console artwork, FPS/renderer stability independent.
-
Final supplementary host validation for mod-inherited UI locations #38004211889 GREEN (head
2820847398): external mod ZIP may contain 100+ RomFS layout/language assets; ZIP scanner now budgets only expensive native SARC decoding, not all resources, and tests multiple companion files without dropping the target ASTC UI archive. Strict manually reviewed action/physical-position bindings can emit auto-pack exact input manifests directly from mod-derived rects via--emit-approved-index(test pass).MEMORY.mdentry is docs-only [skip ci] after that green run. No physical PS5 BOTW asset was installed/validated and no full native build started.
2026-10-10 — Full Switch 1 / multiplatform PS glyph mod discovery automation
- User explicitly requests automated discovery across ALL Switch 1 games, including mods from same-game PC/PS4/Wii U/Xbox/PSP ports, via well-known mod sites, DuckDuckGo and Yandex. User accepts eventual physical gameplay test rather than blocking research due each scene review; never equate metadata to console support.
- Branch
dev/ps5-sparse-jit:tools/ps-glyph-switch1-corpus.pyjoins four public TitleDB regional JSON files and deduplicates Switch 1 base title IDs. GH Actions #38005808352 successfully inventoried 24,205 title IDs (public source snapshot, not guaranteed exhaustive Nintendo official catalog). tools/ps-glyph-switch1-search-queue.pycreated 96,820 research queries across those 24,205 titles (Switch + PC/WiiU/PS/Xbox + GameBanana + Russian-language); all queries are prepared URLs, NOT 96,820 executed searches.tools/ps-glyph-mod-discovery.py: bounded incremental real GitHub search, DuckDuckGo public HTML (stop on 403/captcha/rate-limit), and official optional paid Yandex Search API (credentials required, never billed by default). Tracks per Title ID and provider and search variant; state survives regional catalog updates and repeated passes.tools/ps-glyph-mod-results-merge.pyaccumulates links in cache, no downloads, no duplication.tools/ps-glyph-multiplatform-adapt.pynow joins all catalogued Switch title IDs to same-game cross-console source leads with explicit aliases (BOTW/Zelda, etc) and routes resource families (Switch BNTX/ASTC, BFRES, Unity, Unreal, Atlus CPK/SPR, Klei Lua/TEX). Adapter is not a general codec; some engine-specific export/repack missing.tools/ps-glyph-multiplatform-image-port.pyimplemented and tested same-game PC/Wii U original/modded to independently decoded Switch alpha sprite normalized-position mapping even when textures/colors/resolutions differ, no third-party graphical bytes copied.- Host glyph validation #38005391494 green. Full metadata/discovery CI #38005808352 GREEN: 24,205 base games, 96,820 query URLs, initial live 5 GitHub source leads (unverified, 15 titles in cumulative search reports), 28 known source-backed game families including 18 with matched cross-platform leads, zero native PS5 glyph packs automatically activated. DuckDuckGo returned rate-limit/block on CI runner; recorded warnings, zero DDG links. Yandex not run, requires billed API credentials.
.github/workflows/discover-switch1-glyph-mods.ymltriggers limited actual GitHub + DDG searches on dev-branch pushes, stores progress via GitHub Actions cache and publishes source reports, all-title queue and cross-platform adaptation-plan artifact. GitHub cron only runs from default branch; default isfix/0.40-zbic-13.60, so no autonomous nightly run while workflow remains on dev. Do not silently edit release/default branch. Full instructionsdocs/PS_GLYPH_SWITCH1_MULTIPLATFORM_AUTOMATION.md.- Crucial still open: real original game/update assets and platform-specific shader/UI archive formats to render/correct glyphs; on-console BOTW visuals and PS5 FC27 performance/VRAM/JIT not validated by metadata discovery. No PS5 native full build run, no user Mac/PS5 files changed.
2026-10-10 — Search curl Firefox-UA + durable Zelda/BOTW research storage
- User corrected discovery method: prefer simple
curlwith Firefox User-Agent for public DuckDuckGo/Yandex; actual Playwright Firefox is an optional renderer, not necessary for regular HTML. We do NOT claim user-agent spoof equals genuine Firefox nor bypass CAPTCHA/403/429. Implementedtools/ps-glyph-curl-search.py,tools/ps-glyph-firefox-search.py, wired both intools/ps-glyph-mod-discovery.py; no paid Yandex official Search API usage unless credentials selected. Host regression scripts cover both. - Explicit answer to "où stocker": GitHub repo
niakw/Prospero.Eden-Encorebranchdev/ps5-sparse-jit,data/glyph-research/.games/01007EF00011E000.jsonalready committed with BOTW native Switch DS4 UI v2 Western GameBanana #659253, Switch Xbox #33340, Wii U PS4 UI Complete #33531, scenes and still-missing Switch original texture hashes, original mod ZIP and XYWH.data/glyph-overrides.jsonremainstitles: [](NO runtime Zelda glyph mod yet). - Stable aggregation:
data/glyph-research/discovery/leads.json,progress.jsonand compressedcatalog/switch1-titles.json.gz,catalog/source-queries.json.gzon dev. First successful actual GitHub bot push on GH run #38006530674, commitcb68b30, created these four files; 24,205 distinct public-catalog game IDs, 96,820 prepared multi-platform searches, 15 source links within 25 searched-title metadata entries. DuckDuckGo/Yandex denied GitHub datacenter curl searches, failed tasks are not marked complete. - GitHub workflow
.github/workflows/discover-switch1-glyph-mods.ymlnow includes merge+retry on a concurrently modified dev branch usingtools/ps-glyph-store-research.py; avoids losing earlier leads or provider-scoped cursors; temporary Actions artifacts are fallback, NOT primary store.data/glyph-research/README.mddefines storage and limits. - No user Mac change, no full native PS5 build, no real BOTW glyph patch installed/tested. Research mod links/assets still require exact original Switch game update and binary payload analysis.
2026-10-10 — Strict Nintendo Switch 1 software scope
- User requires Switch 1 games only, including those ALSO available on Switch 2 (upgraded/cross-generation), but never Switch 2 exclusives. Never use a guessed 4k/8k cap. Native Switch 1 application Title IDs are
0100…000; Switch 2 native software IDs0400…excluded. Zelda BOTW Switch 101007EF00011E000remains in catalog despite Switch 2 Edition; Mario Kart World Switch2-only0400C3F00006E000excluded. - The existing raw four-region TitleDB corpus 24,205 is candidate base TitleIDs, NOT 24,205 proven unique retail games. The
blawar/titledbsource officially describes itself as Switch1 metadata, though regional listings may contain demo/cloud/variant entries. - Updated
tools/ps-glyph-switch1-corpus.pyto encode this scope explicitly;tools/check-ps-glyph-switch1-corpus.pytests dual-release preservation, native Switch2 removal, updates and regional duplicate titleIDs;tools/ps-glyph-store-research.pyemitsdata/glyph-research/catalog/scope-audit.jsonand rejects 0400 IDs, with non-destructive suspected-demo/cloud/name-duplicate reporting.tools/check-ps-glyph-store-research.pyenforces gates. Discovery workflow tests and commits audit; no PS5 game shaders or gameplay files touched. docs/PS_GLYPH_SWITCH1_MULTIPLATFORM_AUTOMATION.mdexplains rules and counts. Crawler run #38007742303 remained in progress at the most recent inspection, with prepare green and first serial crawl shard active, not complete. Do NOT report full crawl finished or every queried game compatible. No native build or Mac edits in this step.
2026-10-10 — User clarifies glyph scope = Switch 1 ONLY, cross-released games INCLUDED
- Hard requirement: enumerate native Nintendo Switch 1 releases; INCLUDE games also released on Switch 2, PC, PS4, Wii U, etc. EXCLUDE games exclusively Switch 2. Mods from other platforms remain useful as source adaptation candidates only if an actual Switch 1 edition exists. NEVER use Switch 2-only graphics/executable assets as Switch 1 originals.
- User cited estimate 4,000–8,000 official Switch games; neither impose that as arbitrary cap nor keep calling 24,205 TitleDB
0100...entries24k official Switch1 games. Community TitleDB base-application-shaped IDs are not independently verified released games; secondary Switch game lists differ (e.g. MobyGames indexed ~13.8k titles in October 2026, including future announcements). - New
tools/ps-glyph-switch1-eligibility.pyand updatedtools/ps-glyph-switch1-corpus.pyclassify NX1 application IDs, reject0400...Switch 2-exclusive IDs, demos/trials, known cloud-only editions, typed non-games/addons, defer known future release dates; explicitly preserve combined platform metadataSwitch2, Switch. All survivors remainswitch1_metadata_candidate_not_verifiedandofficially_verified_switch1_game_count=0: real independent platform verification is still pending. - Dedicated audit GH Actions run #38008270773 SUCCESS: 24,205 NX1-shaped IDs -> 23,997 unverified candidates, 208 excluded (153 named demos, 17 cloud-only, 38 future titles), 95 Switch2-only raw regional rows excluded. These are NOT counts of officially released Switch1 games.
.github/workflows/check-switch1-eligibility.ymlperforms synthetic plus live four-regions evidence audit.tools/ps-glyph-long-crawl.pynow refuses legacyscope=switch1_metadata_all_supplied_regionssnapshots until recompiledscope=switch1_base_game_research_candidates_onlyexists. The source metadata discovery job may be pending due concurrent Actions; do not claim a new strict snapshot committed to repository until verifying newcatalog/contents. Existing source links/checkpoint remain untouched. No PS5 native build, no local Mac modification.
2026-10-10 — strict Switch1 discovery/crawl recovery
-
Current long GitHub-only glyph search: workflow run
38007742303, prepared successfully, serial shard active at verification; never relaunch it or trigger PS5 compilation just to refresh its status. -
Current durable metadata checkpoint observed: 418 completed provider+variant+TitleID queries and 188 source leads; zero per-game glyph packs validated. The stored catalog
switch1-titles.json.gzstill needs replacement by strictswitch1_base_game_research_candidates_onlymetadata, from the discovery workflow. -
The separate discovery workflow run
38008270749failed early on an outdatedcheck-ps-glyph-switch1-corpus.pyscope string (not a search failure). Fix that gate; require strict catalog when persisting and accept stale numeric cursors across catalog shrinkage without ever treating an unqueried ID as finished. -
Keep Switch 1 versions shared with Switch 2, exclude Switch 2-only/DLC/demo/cloud-only, defer future releases; 23,997 remains candidate IDs, not official verified game count. Source-lead evidence is NOT installed or game-patch-ready.
-
Do not change release branch, purple launcher design, or launch PS5 native build in response to metadata-only adjustments.
-
2026-10-10 additional metadata repair: classify EACH regional alias with its own title/platform/date/type, not a single arbitrarily chosen display name; recognize punctuation and CJK demo/playtest suffixes while preserving a genuine full Switch1 edition when a regional demo alias coexists. Regression fixtures for both cases added. Crawl queries remain candidates, never per-game compatibility proof.
-
Offline native-log triage extended (no PS5 build):
tools/analyze-ps5-logs.pynow captures boundedEDEN_HEAP_PIECE,EDEN_HEAP_LIFETIME,EDEN_PS5_DMEM_PROBE_FAILED,EDEN_PS5_DMEM_PROBE_SLOW,EDEN_MEMORY_LIVE, andEDEN_WORKER_TOPOLOGYsamples. The new fixture intools/check-ps5-log-analysis.pychecks 24ms heap growth, retained heap vs live memory, failed kernel probes and unverified CPU topology. These are diagnostic evidence only, not FPS gains, proof of a leak, or total VRAM measurements. -
2026-10-10 allocator consistency: developer branch
headless/heap_arenas.incnow explicitly frees Eden-ownedrealloc(ptr,0)via__wrap_free(including large direct buffers) instead of relying on ambiguous native zero-size behavior. Foreign libc pointers retain libc semantics.tools/check-heap-growth.pynow covers small/medium/40MiB-direct size-zero realloc, direct-owner release and zero ambiguous counters on the default mock run. Tests are source-staged and NOT hardware-qualified or run in this checkpoint.encore-core-preflight.ymlnow includes the offline PS5-log telemetry fixture when next authorized source preflight executes; no PS5 build or new workflow dispatch initiated. -
2026-10-10 long-crawl failure #38007742303 fully diagnosed: source worker made 284 successful GitHub queries / 151 newly observed leads before HTTP 403 stop (5 failed attempts); its subsequent recovery checkout ABORTED because untracked
data/glyph-research/discovery/metrics.jsonwould be overwritten by the current tracked one. Therefore those 284 searches did not reach durable Git; do not add them to the completion count. Second latent blocker:--run-metricswas passed a cumulativemetrics.jsonwhilepersist()accepted only a per-run summary. Corrected safe named-pathgit clean -fAFTER copying source files to /tmp; resolve latest per-run stats from cumulative metrics; attach fallback artifact on every shard attempt; explicitly dispatch only (do not auto-restart on push after provider throttle). Regression guards added. Current strict persisted corpus contains 23,883 Switch1 metadata candidates, 614 search keys and 237 unverified leads. Do not promise automatic continuation past GitHub 403 or silently treat unpersisted queries as finished. No build, no release merge. -
2026-10-10 launch-gate correction: repo default branch is
fix/0.40-zbic-13.60, which does not contain the glyph full-crawl workflow, so GitHub manualworkflow_dispatchalone would strand the dev-only workflow. Safe push trigger ondev/ps5-sparse-jitis retained BUT jobprepareruns only for an explicitly annotated commit containing[glyph-crawl-run](or a supported dispatch). Routine patch pushes,[skip ci]checkpoints and post-403 recovery commits do not start a new crawl. The current run is failed on 403 and requires deliberate restart after provider allows searches. -
2026-10-10 dev GPU CPU-use improvement candidate:
performance.cppnow atomically publishes the kernel-confirmed secondary logical affinity mask only afterSetSecondaryPlacement(true)setaffinity+getaffinity exact verification, resets it before each placement/topology refresh and exposesVerifiedSecondaryPlacementMask(). Vulkan shader-worker sizing inprepare-vulkan-port.pyavoids subtracting all seven primary services a second time when the shader thread's allowed affinity is an observed subset of that secondary-only mask. In that case (8 available secondary logical slots), up to 6 shader workers can be used, retaining 2 logical slots for services; partial overlap or unverified mask preserves 1-worker fallback. This is logical nonoverlap evidence only, NOT physical core/SMT proof or an FPS gain; all changes remain on dev, require native PS5 test and add new source fixture cases. No native build/test triggered. -
2026-10-10 latest uploaded PS5 native R1 Oct 9 22:00:57 crash/FC27/BOTW analysis: full cross-file audit in
docs/PS5_R238_CRASH_GPU_MEMORY_AUDIT_2026-10-10.md. Two launcher SIGSEGVs 00:16:22/00:20:39 same RIP0x8000a878dand data address0x46dfd5b0, first has 11800 MiB contiguous free so NOT proven OOM. FC27Job0prefetch abort @0x0 first session with old R1 automatic retry; dev main.cpp had already removed auto retry, not compiled. FC27 log 31025 GPU unmapped Read/WriteBlock, 7242 memory mapping table asserts; Vulkan 170.8s weighted 16.77fps, 0.342fps min with 3033ms gap, and 1.25GiB retained heap. Separate heap(8) Zelda Ultra 100s 28.36fps, FC27 OpenGL guest fault, subsequent FC Vulkan 0.104fps min / 9627ms max gap. Proven 13 logical affinity slots, CPUID erroneously claims 13 physical (rejected). Source-only bounded logging backport mitigates per-error disk flush storms while preserving first/critical event durability and all messages; not a GPU guest memory fix. All new files and tests not executed; no build, Actions, Mac/FTP edits. -
2026-10-10: Continued the exact former conversation user screen-black/missing-texture/0-FPS FC27 R1, BOTW Ultra stutters. Verified pinned upstream Eden code:
src/core/device_memory_manager.incleftcontinuity_trackerstale across remap/unmap and GPU ReadBlock/Unsafe used unprotected four-entry sharedt_slotcache; staged real pinned source fixbaef555aand exact fault counting1685c98b. Also stagedab27dbe0bounded Critical guest MapPages/null-pointer diagnostics with host backing/guest/physical offset to distinguish root; 5120+2122 assertions before graphics invalid 31025. Source patch replay on pinned mirror verified, but NOT console validated. Cached bounded logging migration guard and future source-check workflow staged. Current branch still never hardware-qualified. User insists build only when source consolidated; no GitHub run, no Mac/PS5 FTP, no launcher visual changes. -
2026-10-10 final source perf review:
WalkBlockphysical-adjacency validation was corrected to boundnext_pagesby the requested read/write span as well as the cached hint and table capacity, avoiding O(huge hinted mapping) scanning on a 16-byte read. Commit466831b68685, patch replayed again against exact pinned Eden5f142c79, all 14 unified hunks match. Host/native tests and GPU FPS still not executed. NewEDEN_GUEST_MAP_POINTER_ZEROemits guest VA, physical target, host delta, backing address on sampled failures; allows identifying why a valid page resolves to null in next authorized PS5 test rather than claiming a speculative repair. The FC27 0fps/black textures / BOTW Ultra regressions remain OPEN for PS5 hardware verification. -
2026-10-10 next pinned core fix (without build): upstream Eden
src/core/memory.cpp::Impl::WalkBlockeagerly committed every guest page-table slot in read-only walks; the PS5 sparse table backed each changed 2 MiB region with real direct physical RAM, amplifying FC27 mapping-miss and pressure. Source-onlyeden-ps5-guest-walk.patchremoves the unnecessary CommitRegion on PS5 only (retains upstream PC path; mapping writes still commit via MapPages), allowing reads of shared zero slots. It also avoids accessing host pointer 0 when PageType::Memory but pointer missing: reports guest unmapped, uses zero-fill on reads and skips writes. Root cause of the earlier guest-pointer-null events remains not identified. Pinned backport source guard added, no build/CI/PS5 test. -
2026-10-10 source-only compile guard discovery:
PS5_NATIVE=1is PRIVATE only oncommonandeden-headless(and Dynarmic's one block_of_code.cpp); not automatically inherited by pinnedcore/memory.cpporvideo_core/host1x/gpu_device_memory_manager.cpp. Without targeted definitions new GPU/guest mapping fixes compile out! Scopedset_property(SOURCE ... TARGET_DIRECTORY ... COMPILE_DEFINITIONS "PS5_NATIVE=1")to exact core original/derived memory.cpp and host1x GPU manager translation units, avoiding whole-engine #ifdef changes. Pinned PS5 source-check now asserts both flags. No build or runtime confirmation. -
2026-10-10 potential legitimate pointer-delta-zero recovery: pinned Eden
PageEntryData::Pointer()treats zero as "missing"; MapPages stores host-minus-guest page base, so coincident host and guest VAs produce a ZERO delta across a contiguous mapping. In source,GetPointerImplincorrectly rejects this, preventing GPU DeviceMemoryManager Map from seeing a valid backing page and producing missing-texture/unmapped-read symptoms. New pinnededen-ps5-guest-zero-alias.patchdetects it ONLY if entire read/write address lies within real DeviceMemory backing (base + KSystemControl::Init::GetIntendedMemorySize), restores direct host pointer in CPU GetPointerImpl and WalkBlock, and records guest_alias_mapped/guest_alias_access counts. All other invalid pages still fail closed. Strong source-level candidate for FC27 black backgrounds/5120 map asserts, not verified on hardware. No build/CI/native tests run. -
2026-10-10 guest CPU direct-span correctness source-only: pinned Eden
Memory::Impl::GetSpanchecks(addr+size)>>12even though the final touched byte isaddr+size-1, so page-aligned spans check a spurious next page (and can index outside max AS). Same initial/final block number does not guarantee intermediate pages are still mapped. Addededen-ps5-guest-span.patch: PS5-only range bounds, correct final page, O(1) single-page fast path, validate intervening page pointer deltas/types/blocks for multi-page spans, const/nonconst share one algorithm. This may prevent malformed texture/CPU buffer direct access; uncompiled and untested on PS5. Source test and backport validator included. -
2026-10-10 PS5 per-title mapping counters: the six inline atomic GPU + guest fault counters were process-cumulative, making FC27/BOTW and repeated title sessions ambiguous after a launcher return. Added
Eden::GpuFault::ResetTitleCounters()for all 6 once per new title, beforesystem.Loadand only after prior owners' full teardown. NextEDEN_GPU_UNMAPPED_COUNTERSsnapshots refer to the current title, not previous title’s error storm; no heavy per-frame cost. Source-only guard added; no native test/compile. -
2026-10-10 PS5 GPU reverse-map replacement lifecycle: pinned Eden
DeviceMemoryManager::Mapoverwrotetracked_entries[gpu_page].compressed_physical_ptrwithout unregistering an existing reversecompressed_device_addr[old_phys]; remapping the same backing registered an additional MultiAddressContainer member, retaining stale aliases and making later invalidation unreliable. New pinned incremental backporteden-ps5-gpu-remap-reverse.patch(aftereden-ps5-gpu-memory-mapping.patch) detects old/replacement physical pages under existingmapping_guard, skips duplicate reverse re-registration for same physical mapping while refreshing CPU page backing, and removes previous reverse page from single/multi associations before installing new; on a mismatched single-reverse value it records sampled warning and leaves unrelated reverse entry untouched. Two countersremap_replacedandremap_mismatchadded to per-title GPU snapshot and reset. Source-only, no native build, shader rendering or heap-reclamation validation. Distinct from direct physical heap issue; unsafe wholesale mspace free remains explicitly prohibited. -
2026-10-10 GPU Unmap inverse-map correction: pinned device memory manager clears
compressed_device_addr[old_phys]even when its direct reverse mapping refers to a DIFFERENT GPU page. A repeated/overwritten guest mapping can therefore erase a valid texture cache alias. New minimal incrementaleden-ps5-gpu-unmap-reverse-guard.patchafter remap cleanup checksbase_dev == retiring_pagebefore clearing direct inverse reference, logs sampledEDEN_GPU_UNMAP_REVERSE_MISMATCHotherwise and preserves the unrelated reverse entry.MapandUnmapreverse ownership now consistent for single direct mapping without corrupting other pages. Source-only, not native-compiled or hardware-verified. -
2026-10-10 PS5 reverse multi-mapping defensive fix: pinned
MultiAddressContainer::Unregisteriterates storage by next_entry without missing-value / cycle bounds. A stale multi-reverse mapping from remaps (or corrupted guest mapping metadata) can dereferencestorage[-1]and crash. New incremental pinnededen-ps5-gpu-multi-missing-guard.patchadds PS5-only boundedContains(value,head)(checks invalid index and cycle) and calls it ONLY before multi-list unlink in Map/Unmap, not on the hot one-page GPU read path; invalid link logs sampledEDEN_GPU_REMAP_MULTI_MISSINGorEDEN_GPU_UNMAP_MULTI_MISSINGand retains unrelated reverse state rather than dereferencing invalid storage. No compiler/console run; strict source replay and validators pending. -
2026-10-10 GPU Map/Unmap bounds preflight
cdafa83band countersf6914578: pinned upstream GPU DeviceMemoryManager called sparse-table CommitRegion/driver InvalidateRegion without validating device virtual range; Map also lacked guest virtual span bound. Added PS5-only incrementaleden-ps5-gpu-map-bounds.patchafter other reverse fixes; size0 is silent no-op, malformed nonzero range rejected via subtraction-safeaddress>=device_as_size || size > device_as_size-addressand guest-as-size guards BEFORE allocation/invalidation. Countersbad_map_range,bad_unmap_rangeexact per title; power-of-two sampled logs. Source check and pinned receipt integrated. No PS5 build/CI/hardware validation; no claims FC27 black textures or 0 FPS solved. -
2026-10-10 safe per-title heap cache handoff: Sony heap 128MiB mspaces remain process-owned; freeing them without enumerating surviving allocations is forbidden. Extracted
eden_heap_drain_thread_cachefrom TLS destructor inheadless/heap_arenas.incand addededen_heap_release_current_tcachecallable only by owner thread; aftercore_destroyedon return to launcher it frees ONLY blocks already in that thread's bounded 1MiB small-object cache to their owning mspace, leaving all live blocks and physical memory untouched. EmitsEDEN_HEAP_TITLE_CACHE_DRAIN bytes=...once per game, no per-frame overhead. Extendedtools/check-heap-growth.pyhost contract: after joined workers the TLS drain empties cache, does not change committed heap pieces, and allocator accepts next-title allocation. No tests were RUN and retained 1.25GiB physical mspaces are still open; this is safe cross-game allocator reuse, not physical release. -
2026-10-10 crash symbol proof correction: fetched GitHub Actions symbol artifact #11648369225 (
llvm-pie.elf,link.map) from run #37999170813 and both actual R1 launcher crash reports (00:16:22 and 00:20:39). Actual crash reports say app code size0x231fe50; fetched ELF.textsize is0x231f390— different native build. Both report native RIP0x00000008000a878doutside app text; 23/28 scanner stack values are marked unverified?.pe::fillandLauncher::draw_gamefrom the wrong ELF were NON-call machine-code offsets and not valid evidence for the fault cause; a local replica of the repo's AfterCall filter retained only two ambiguousKConditionVariable::SignalImplcandidates, still unusable because ELF mismatch. Do NOT patch launcher strings from this ungrounded symbolization. Hardenedtools/symbolize-crash.pyto REFUSE mismatched.textsizes (previously warned but generated misleading names); host crash-report regression adds mismatched ELF test. Need original exactllvm-pie.elforlink.mapfrom PS5 run #37996073674 / SHA953b2f3a, or next expressly authorized build with symbols. This does NOT solve native launcher SIGSEGV or FC27 rendering. No PS5 CI/build triggered. -
2026-10-10 source-only sparse-vector one-past-end fix: pinned upstream
src/common/sparse_large_vector.hhas THREEif (index > alloc_size / sizeof(T))guards in GetAndFault, Set and IsCommittedPage; index == count improperly accesses base_ptr[count] or the next sparse 2 MiB slot, potentially causing table corruption/crash. Added exact-count CMakeeden_sparse_replaceto change all three guards to >= only for the derived PS5 sparse header, plus lightweight future preflighttools/check-sparse-index-boundary.py. Does not alter upstream source, GPU rendering settings, or launcher design. No PS5 native build/tests run in this change. Heap main-thread tcache purge already exists in headless/heap_arenas.inc and main.cpp; it does NOT reclaim physically retained 1.25 GiB Sony mspace pieces. -
2026-10-10 continuation after user "ok go": existing heap title-boundary tcache drain in
headless/heap_arenas.incandheadless/main.cppalready present (verified), and host heap testtools/check-heap-growth.pyincludes owner-thread drain assertions; do not claim this new or confuse with 1.25 GiB physically retained Sony mspace backing. Source-only fix5be473e5updates PS5-derivedSparseLargeVector3 instances ofindex > counttoindex >= countto prevent one-past-end read/write and spurious 2-MiB sparse commits; new preflighttools/check-sparse-index-boundary.py. Actual pinned upstream GPU reverse table was sized 4GiB for Memory_4Gb and just 8GiB for ALL other profiles, whileKSystemControl::Init::GetIntendedMemorySize()supports 4/6/8/10/12GiB. PS5 pinned backporteden-ps5-gpu-physical-capacity.patch(c8ababa3) uses exactly configured guest DRAM physical pages (sparse virtual table, not dense allocation), rejects Map pointers outside DRAM, out-of-range reverse physical lookup and typed reads;a79eb248activates validator + sampled exactbad_physicalcounter reset per title;7643bab3exposes counter in profile. All 29 hunks across six ordered GPU source backports replayed without mismatch on exact Eden5f142c7926d0c7fcbbd0ce30794d72f638a43b2a; no native compilation, console test, FPS gain or glyph swap verified. FC27 black backgrounds/0FPS and launcher SIGSEGV remain open. Work confined todev/ps5-sparse-jit, launcher design/release branch untouched. -
2026-10-10 mapping cache final continuation: pinned GPU Map originally overwrote existing physical backing without invalidating renderer textures/buffers (Unmap did). PS5-only incremental
eden-ps5-gpu-remap-cache-invalidate.patch[d08a837c] tracks ONLY physical changes on an already mapped device page, usesstd::unique_lock(mapping_guard), callslk.unlock()BEFOREdevice_inter->InvalidateRegion(address,size)so callback cannot deadlock on nested GPU translation and avoids initial-map/same-physical cache flushes. Wired byc15b4418; per-title exactremap_cache_evictionssnapshot by5cd67ff7. All seven ordered GPU backports replayed on pinned5f142c79(32 hunks, complete) with safety checks including the 4/6/8/10/12GiB DRAM table. Auditdocs/PS5_R238_CRASH_GPU_MEMORY_AUDIT_2026-10-10.mdsection 8 + issue #8 comment updated. NO native PS5 compilation, CI source preflight, hardware FPS validation; physical 1.25 GiB heap retention, FC27 texture black/0 FPS, launcher SIGSEGV, glyph atlas coverage still OPEN. Approved launcher design and release branch unchanged. -
2026-10-10 sparse table physical-slot commit vs decommit interleaving:
ZeroRegionclears host-page bitmap entries and decommits a 2 MiB private slot when the bitmap looks empty.CommitPagepreviously raced the final scan so a new writer could publish a page then have the entire slot remapped read-only/shared zero (lost data and potential fault). Native generated sparse header now uses per SparseLargeVectorstd::mutexheld byZeroRegionacross bitmap + decommit and byCommitPageacross CommitSparsePage + bitmap publication; double-checkIsCommittedPageafter locking.GetOrDefaultand already committed accesses retain lock-free fast paths. The testtools/check-sparse-index-boundary.pychecks CMake injected locking alongside prior one-past-end fix. This is source-only, not compiled on PS5; externally concurrent logical remap vs an actual write still requires caller sync. -
2026-10-10 native SparseRange lifetime hardening:
src/memory_pages.cpp::CommitSparsePagepreviously readSparseRangeOf(page)and dereferencedrange->owned[slot]beforesparse_mutex. ConcurrentFreeSparsePagesunder the mutex can deallocate that bitmap or reuse the range record -> use-after-free/wrong physical slot mapping. Moved the sparse mutex acquisition to the beginning ofCommitSparsePageand performed range lookup, bitmap check andOwnSlotall under the same lock. Only a first-commit slow path takes this lock; ordinary sparse-table hot reads stay lock-free. Added a strict order check totools/check-sparse-index-boundary.py. Works together with per-vector ZeroRegion/CommitPage synchronization, but cannot legalize accessing a SparseLargeVector object after its destructor. No PS5 build/hardware validation. -
2026-10-10 PS5 sparse table stale-page contents: generated
SparseLargeVector::DecommitPagepreviously cleared the HostPageSize commit bitmap and, when any OTHER page in the same 2 MiB physical slot remained committed, simply returned without zeroing the retired host page. Re-committing that host page calledCommitSparsePage, which found slot already owned and did not remap/zero; old guest/GPU page translations could silently resurrect. Dense-fallback ZeroRegion was broken similarly because DecommitSparsePage is a no-op for dense allocation. Fixed in derivedsparse_private_replacement: memset the retiring known-committed host page to zero before clearing its bitmap/deciding whether to return or reclaim entire slot. Uses existing per-vector ZeroRegion/CommitPage mutation lock, no extra per-frame work. New source order/model regression intools/check-sparse-index-boundary.py. No host compiler or PS5 binary test yet. -
2026-10-10 CPU→GPU reverse-map inline callback hardening: pinned
src/core/device_memory_manager.h::ApplyOpOnPAddrreadcompressed_device_addr[physical_page]without validatingphysical_page, and treated reverse value 0 (no GPU mapping) as GPU VA 0, causing unrelated invalidation.ApplyOpOnPointersubtractedphysical_basewithout checking p was inside actual backing, andGetPhysicalRawAddressFromDAddrindexed the GPU table without checking virtual page range. Added pinned header backporteden-ps5-gpu-reverse-inline-bounds.patch(three hunks), zero-mapping fast return, DRAM and GPU VA bounds. No global mapping lock added on per-texture hot reads. Header implementation works on both host/PS5 for consistent inline definitions across translation units. Source validator wired; no host compiler/native PS5 FPS validation. -
2026-10-10 further GPU multi-reverse safety: pinned
MultiAddressContainer::Unregistercan return zero new head when it removed a last remaining node from a corrupted/degenerate "multi" reverse list, but Map and Unmap previously calledReleaseEntry(0)and dereferencedstorage[-1]. Addededen-ps5-gpu-empty-multi-head.patchas pinned post-remap source backport to return reverse sentinel zero on empty head, leaving ordinary two-node transitions unchanged. Applied in both remap and unmap, source validator guards both. This is fail-closed defense for malformed reverse state, not a claim of renderer/FPS repair; no PS5 compile/test. -
2026-10-10 host-executable regression for sparse zeroing:
tools/check-sparse-slot-reuse-host.pyextracts the actual generated PS5 DecommitPage C++ body fromheadless/CMakeLists.txt, builds/runs host C++20 with a 16KiB page/2MiB slot fixture, verifies clearing A while B remains active, zero bytes on A reuse, last-page slot release and dense fallback. Wired to native-build future source preflight and explicitly host-onlyencore-core-preflight.yml; not run through CI or PS5 native compiler yet. -
2026-10-10 source-only qualification gate requested after sparse-slot zeroing and GPU reverse-map safety: use the explicit dev-branch
[core-ready]marker for.github/workflows/encore-core-preflight.yml(host Linux regressions ONLY). Native PS5 workflow remains guarded by[full-build]and is intentionally NOT requested; no claim of native success or FC27 FPS improvement until independent real build and console retest. -
2026-10-10 host-only core preflight status: run #38032003725 initial failure was only the new host fixture missing
using T/HostPageBits; fixed in07f5f85b. Run #38032116478 passed the entire generic graphics/JIT/sparse real extracted-C++ suite and approved UX checks; finalgit diff --checkflagged six preexisting Markdown double-space hard breaks in attribution. Converted those credit lines to explicit list formatting (same author, link, license, no art or launcher layout changes) and re-requested [core-ready] host-only CI. Native PS5 build remains skipped. -
2026-10-10 GREEN HOST CORE PREFLIGHT #38032224808 (commit
2b5cfba1): C++ extracted PS5 sparse DecommitPage reuse test passed with 16 KiB pages / 2 MiB slots, JIT and UX checks passed and git diff --check passed; PS5 native build and release intentionally skipped (no full-build marker). Strict pinned Eden 5f142c79 backport replay: 34 GPU manager, 2 GPU header, 11 guest core-memory hunks = 47, all matched. R238 FC27 heap log at core_destroyed: 1,342,177,280 bytes (1280 MiB) retained physical Sony mspaces vs 3,655,646 bytes (3.49 MiB) live allocator request bytes, 186,450 live blocks, JIT sparse and dense physically owned 0: 367-fold backing vs live bytes. Do not release physical heap without per-piece/mspace owner proof and worker quiescence. Host checks do not validate native PS5 FPS, rendering or launcher SIGSEGV. Evidence also in PS5_R238_CRASH_GPU_MEMORY_AUDIT_2026-10-10.md section 9. -
2026-10-10 R239 / Eden Encore — source-only ownership groundwork, not a heap release: branch
dev/ps5-sparse-jit, starting point03ea7196; commitsfec15ed4,6e6248cd,c8b1d4b4,5eadd152,4a3e0298,75a797d9,6bb8f4bd(all[skip ci]). Added physically held per-root mspace block/usable-byte ledger with TLS batching (no extra shared atomic each malloc); explicit 8-MiB child-arena parent pins; each 128-MiB piece's root and the exact direct PA owner captured after successful growth, first-piece direct owner exposed byheap_pages.cpp; host fallback marked owner absent. Tcache free-list entries remain physically held until drained, distinct from logically live allocations. Launcher emits per-root diagnosticEDEN_HEAP_ROOToncore_destroyed; host allocator regression now checks eventual physical-block balance and preserved arena pins. This does NOT destroy/release an existing mspace; inactive worker TLS may have flushed but unrelated concurrent threads are not quiesced, and counts cannot authorize direct-memory release. Next: verify root ownership on host/PS5, then design Sony mspace retirement only with quiescence, child-arena lifetime proof and exact VA/PA unmap order. User still requires no premature native PS5 build. Prior R238 heap trace 1,280 MiB physical vs 3.49 MiB live is not an OOM proof. Keep issue #8 open; FC27 frame pacing, guest GPU remaps, launcher SIGSEGV and full in-game PlayStation glyph qualification remain open. No new CI/job/native or PS5 gameplay validation for these commits. -
R239 follow-up (same date, [skip ci]):
a1960d72shares the existing TLS lookup for physically held and logical allocation counters on the common uncached malloc/free path, reducing the instrumentation overhead versus two separate TLS lookups;65c8e6f6adds a host fixture assertion that a thread's cached usable bytes remain charged to its physical root until the cache drain exactly debits them;a7eb94beadds a dedicated hostroot-spanmode where a 192-MiB fallback allocation creates one 256-MiB root spanning two 128-MiB pieces, verifies both piece→root mappings, root credits/debits, absence of host direct PA, and continued backing retention without unsafe unmap. Prepared tests, not executed. No new native PS5 build, title launch or GitHub Actions run; do not mistake an earlier green host preflight for validation of this code. -
2026-10-10 R240 / post-R239 memory-safe source follow-up:
a0d9a766converts the mspace root-span and PA provenance fields to atomics so title diagnostics racing concurrent growth do not read non-atomic metadata;a6744281publishes the root span only after the complete piece→root mapping and mspace slot have been initialized.5d222a7creplaces a 24-root scan at each 64-operation TLS counter flush with a 32-bit dirty-root bitmap, touching only physical roots actually used by that thread (_Static_assertbounds supported piece count).886f8e82resets the small-request mspace hint after title-boundary owner-cache drain to prefer reusing earlier warm mspaces on the next title rather than promoting unnecessary growth.33765f9awires the actual eight-thread UBSan/TSan heap-growth regression and extracted C++ growth-rollback test into host-onlyencore-core-preflight.yml(with clang-18 and a sufficient timeout); the normal native PS5 build gate is unchanged. All are committed[skip ci], and none has run in Actions yet. No physical mspace reclaim, PS5 native build or PS5 FC27 retest claimed. Sony mspace destroy/empty ABI still unproven for firmware 13.60. Keep issue #8 open, and preserve user prohibition on premature native compilation. -
2026-10-10 R241 / heap triage and TLS cleanup (source-only):
a21a557bextends the read-only PS5 log triage with boundedEDEN_HEAP_ROOTsnapshots, per-root span/held bytes/blocks/pinned child arenas/physical-owner flag and explicitly disabled reclamation;978fd1d8adds synthetic classification and invalid-root rejection intools/check-ps5-log-analysis.py.b6bf92acremoves duplicate/attempted TLS registration when physically accounting a movedrealloc: single resolved owner record is shared between debit/credit and existing logical count. The host-only core-preflight workflow (not yet invoked) now covers both the root ledger's UBSan/TSan C fixtures and log-analysis synthetic classifications. Static source-invariant inspection confirms root-atomic publication, 24-piece dirty-root fast path, single-TLS realloc, native report hook and no direct release call. This is NOT C/C++ compilation, sanitized execution, native PS5 qualification or proof of reclaimed physical bytes. Do not dispatch native/full build without explicit authorization, keep issue #8 open. -
2026-10-10 R242 / persistent heap retention root-cause instrumentation ([skip ci]; no builds):
d361d4f4ensures the title transition resets the main-mspace warm allocation hint even when the surviving launcher thread has no TLS allocation cache;607be568adds a host fixture that detaches/restores the current TLS record to check this path.ca184df4andd02862f7classify negative or internally inconsistent per-root snapshot fields as unsafe transient/ledger inconsistencies, not reclaimable roots.9deda89b/cdce218cadd a one-per-successful-growth kernel debug line with the initiating request size, root, span, number of mspaces and physically committed MiB (not a hot frame path);67f0ee1a/682bc8e0parse and verify growth events in the read-only log analyzer;05e67adc/2a9f001badd a host mock decoder checking source emission of valid multi-piece growth records, and4360ecabadds a post-drain heap snapshot to distinguish live logical counters from retained physical mspaces at the same title boundary. No source code here destroys any live mspace or maps/reclaims physical backing. The source-only milestone remains diagnostic; no host fixture, Actions run, native build, or PS5 console validation has been executed on these commits. Former clean host preflight run #38032224808 covers older code only. Before any actual Sony mspace destroy use, verify matching FW13.60 SDK import and evidence of empty root/zero child arenas + allocator exclusion. The analogous PS4sceLibcMspaceDestroypattern alone does not prove PS5 safety. Never mark FC27 FPS, textures or native SIGSEGV resolved from this telemetry. -
2026-10-10 R243 — allocator growth-lock/I/O hardening:
9285d934replacedsnprintfunder the Sony heap-growth lock with bounded stack-only decimal formatting;34a654f9adds a fixture that extracts the actual two formatter functions and compiles/runs them with host UBSan, testing exact 192-MiB→256-MiB growth log, SIZE_MAX and truncation.a34c1655/0f7aed15integrate it into host-only core and native-workflow source preflights (all commits[skip ci]; NO GitHub run).d2e7f5de/1e4ec3f1harden/test capacity=0 and invalid pointer/length edge cases.fea4f460moves the actualsceKernelDebugOutTextcall outsideeden_heap_grow_lockto prevent kernel-log I/O extending allocation serialization;9eb97196enforces this ordering in the host heap harness. A separate isolated C reproduction of the formatter passed clang with UBSan, then clang AddressSanitizer+UBSan including the new bounds guards. This is NOT a run of the entire GitHub source-extracted heap fixture, nor a console test. Native PS5 build remains prohibited pending user permission. Physical root mspace destruction is NOT implemented; the PS4 symbolsceLibcMspaceDestroybeing documented/exported in PS4 is not proof of compatibility or safety for PS5 FW 13.60. Continue prior R238 crash/JIT/GPU/fps gates independently. -
2026-10-10 R244 — future crash-symbol provenance and final growth-logging lock exclusion:
6e78ebecdefers also refused-growth kernel debug messages until aftereden_heap_grow_lockis released;2561018aadds an explicit source-order gate. R243 host formatter remained non-allocating, passed isolated ASan+UBSan in a scratch C reproduction, and native build/CI remains unrun. Independent launcher crash RCA: two old R1 nativeSIGSEGVs share RIP0x8000a878dand fault address0x46dfd5b0, but no matching R1 symbol ELF (old ELF .text size mismatch0xac0); no function identified.ba02e5bdadds a next-build-onlytools/ci/write-crash-provenance.pybound to exactbuild/dev/PPSA99008/eboot.bin, same-runbuild/headless-native/llvm-pie.elfandlink.map: SHA256 digests, sizes,.textcode size, commit/run/title.953299f2gates the manifest generation after successful all-on stage validation and includes the file in the unstripped symbol artifact;d6e8336aplusf479db45/b9a2c714test the isolated ELF parser, malformed sections, and negative symbol-receipt cases.32e1bce8/3b0ce0beadd these host checks to the preflight paths (no new CI jobs dispatched).97b86ced/532eae83optionally require a valid matching receipt withtools/symbolize-crash.py REPORT ELF [CRASH_PROVENANCE_JSON]and reject wrong hashes/.text/malformed structure while retaining backward-compatible 2-argument invocation; receipt alone is not proof ELF matches a particular previously installed SELF. A scratch host Python reproduction of the parser and receipt checks passed; this was not a repo checkout/CI/native build. No PS5 build, no game console test, no physical mspace reclamation, no framebuffer/FPS cure. Keep issue #8 OPEN. -
2026-10-10 R245 / GPU physical-page read safety: pinned Eden mirror
5f142c7926d0c7fcbbd0ce30794d72f638a43b2aGPUDeviceMemoryManagersource had a fastpathphys_addr!=0but no backing-capacity check prior to physical read; a stale compressed page can therefore index past the configured DRAM. Neweden-ps5-gpu-physical-read-bounds.patch(6e40ea9a, 4 hunks) guards bothReadBlockandReadBlockUnsafe, capsWalkBlockphysical continuity to DRAM and safely reports/zero-fills or drops invalid physical pages.eden-ps5-gpu-block-flush-bounds.patch(55b649c7, 2 hunks) avoids issuing rendererFlushRegion/InvalidateRegionon rejected virtual address ranges. Integrated sequentially intotools/apply-eden-backports.shwith hard failure validators (f18d07e9/133888cd), source policy tests (7267908b/b2017b32), and host boundary math fixture (b710acce) wired into both preflight workflows (8567dc8a/1903c53e). Replayed 34 earlier GPU manager patch hunks + 4 + 2 new hunks on pinned source in exact order, no conflicts. An isolated Python model passed 4,875 deterministic cases; full host preflight, native C++ build and PS5 console remain UNTESTED. No claim FC27 textures, GPU hangs, FPS, native SIGSEGV, 1,280-MiB memory return are fixed. Preserve issue #8 OPEN, branchdev/ps5-sparse-jit, no PS5 builds until user authorizes. -
2026-10-10 R246 / final GPU multi-page physical-span bounds: An additional overlooked fast pointer path, mutable/const
DeviceMemoryManager::GetSpan, previously checked consecutivecompressed_physical_ptrvalues but did NOT verify that the final physical page remained inside configured physical DRAM.3f7b0198adds a PS5-only guard to both versions: reject zero or out-of-range first page, then use subtraction-safepage_count > compressed_device_addr.size() - first_physbefore physical page continuity inspection.d5b45fdeintegrates/validates the patch after the block flush/read bounds guards;e9dad903adds the source policy.2997b00aextends the host-only numeric model with const/mutable GetSpan full-backing tests;719b4df2corrects its initial source-token contract typo before executable CI. In-memory replay of the 11 manager patches on exact pinned upstream source5f142c7926d0c7fcbbd0ce30794d72f638a43b2avalidated 42 ordered hunks without conflicts; 9 compiled-source invariants hold. Two isolated deterministic Python reference models passed 4,875 block cases and 4,875 direct-span cases; not the complete committed repo fixture and not native PS5. Host-only preflight is wired but still NOT dispatched; hardware FPS, FC27 texture rendering, GPU mapping synchronization, native SIGSEGV, retained 1,280-MiB Sony heap remain OPEN. No user-approved launcher UI modification and no native build. -
2026-10-10 R247 / actual host C++ and PS5 GPU forward-table atomic publication:
9a11f15d/f151bb96add a checked-in deterministic 24,500-case C++20 GPU copy/span model and ASan/UBSan runner, wired to host-only and future build preflight by6533fec4/5a555f4c. A separate scratch C++20 host reproduction executed with clang ASan+UBSan and PASSED 24,500 cases. Source audit found read/write accesses toTrackedEntry::compressed_physical_ptr,continuity_trackerandcpu_backing_addressracing betweenMap/Unmapand GPU readers.f53761cbintroduces the pinned, source-leveleden-ps5-gpu-atomic-forward-table.patchfor all 26 manager and 3 inline-header field accesses, using C++20std::atomic_refon unchanged trivially copyable 16-byte entries instead of adding a hot read-side mutex.66f03ederemovesconstexprfrom the runtime CPU backing publisher (needed for non-constexpr atomic calls). Crucial TU fix95964fec: the atomic helpers are unconditional in the pinned PS5 Eden source, becausePS5_NATIVEis only defined on selected TUs but header inline functions are also compiled in other video/core TUs; a conditional fallback would retain a C++ data race.d8c9ea5fcorrects documentation in the patch.b9cd2555adds the atomic patch last in the pinned GPU backport chain with fail-closed field-access validator.dea50cb2/d3c76d15add source-level contracts.bdf1853c/d00cd42eadd a new host C++ fixture extracting the actual six patched accessor methods for eight-thread ASan+UBSan and Linux TSan;1db5da8b/546d39a8wire it into both preflights. Independent sandbox reproductions of the six C++ method shapes PASSED clang ASan+UBSan and GCC ThreadSanitizer: 8 threads x 60,000 operations; these are not the complete repository's actual extracted runner nor a firmware-native test. Current GPU source replays 64 manager/header hunks against pinned Eden5f142c7926d0c7fcbbd0ce30794d72f638a43b2a. The atomic patch's 20 unified-diff hunks were also individually checked for valid old/new line counts. Reverse physical→GPU mapping and MultiAddressContainer synchronization are NOT fully addressed by forward table atomics; do not claim cross-subsystem data race freedom or fixed black textures. No new GitHub Action, native PS5 build, console FPS test or 1,280-MiB physical heap release. -
2026-10-10 R248 / physical→GPU reverse slot atomicity: After R247 forward
TrackedEntrypublication, the header-inlineApplyOpOnPAddrstill readcompressed_device_addr[page]withoutmapping_guard, whileMapandUnmapwrote the same u32 under that lock. That is a distinct C++ data race;InnerGatherDeviceAddressesalready holdsmapping_guardwhile accessingMultiAddressContainer, but the scalar inline fast path did not.4566625daddseden-ps5-gpu-atomic-reverse-table.patchwith unconditional C++20std::atomic_refread/write helpers (AtomicLoadReverse,AtomicStoreReverse) across the header, and converts 24 manager code lines involving reverse physical lookup and updates.7e5d1076removes accidental comment-only edits while leaving logic intact.c35ae6c3installs the reverse patch after the forward-table patch with fail-closed source validator, and5009cea2adds source-order/invariant gates.57bf37adextends the host C++ sanitizer runner to extract the actual two reverse helpers alongside the six forward helpers; the same eight-thread stress fixture now exercises reverse slots. An independent temporary C++20 reproduction of all eight helper method shapes PASSED clang ASan+UBSan and GCC TSan (8 threads × 60,000 iterations each). Exact pinned Eden mirror reconstruction applies 71 manager/header patch hunks including both atomic overlays, seven relevant invariants hold; the new seven-hunk reverse diff also has matching old/new declared line counts. This is NOT whole native GPU transaction synchronization: stale-but-atomic scalar snapshots remain possible across remaps, though multi-address container accesses are protected by their existing mutex. No Github workflow, native PS5 build, FPS/pixel test or Sony heap reclaim; keep issue #8 open. -
2026-10-10 R249 / GPU process ASID lifetime and non-reuse: The pinned Eden
DeviceMemoryManager::MapandTrackContinuityImplreadregistered_processes[asid.id]without a range check or protection against concurrentUnregisterProcess, andUpdatePagesCachedCountNoLockcould read an absent ASID or callMarkRegionCachingwith a null pointer. Additionally,id_poolrecycled deregistered IDs, allowing a delayed GPU lookup to address a different newly registered guest process (ASID ABA).e93d55d2introduces shared registry lifetime locking for Map/continuity/cache count, exclusive registration/unregistration, invalid/out-of-range ASID early return, null-safe cached-page update, idempotent unregister and zero/bound-checked GPU cache regions.a0139100also refuses a zero-size batch item whose start address exceeds the GPU address space.444b77bfretires ASIDs as permanent null tombstones per manager instead of recycling them; bounded by the available64-guest_max_as_bits=25ASID bits, so registration safely refuses after the domain is exhausted. This trades one pointer-sized deque element per process over the manager lifetime for eliminating stale ASID reuse.6de21608/0030f66cwire ordered patches and fail-closed reconstructed-source validators,e19e9e97adds static source contracts.56b742d0/36e879caadd a deterministic C++20 host test for ASID tombstones, concurrent map/cache access, repeated unregister and invalid GPU ranges;7823230c/8001ce52put it in existing host gates without dispatching jobs. An independent scratch ASID C++ model PASSED Clang ASan+UBSan and GCC TSan on Linux (six threads, 2,500 process registrations; the committed 3,500-registration test was not run). Exact pinned upstream source reconstruction applies 87/87 GPU manager/header patch hunks and passes 11 targeted source invariants; no PS5 ABI/native linker/console testing, no proven FPS/FC27 texture fix, no Sony mspace physical reclamation. Non-atomic cross-object GPU snapshot/renderer lifetime, crash RIP0x8000a878d, and issue #8 remain open. No launcher UI change. -
2026-10-10 R250 — CPU 16 hardware vs 13 affinity vs eight secondary threads clarified; shader-pool underutilization fix: User correctly asked whether prior "8 threads × 60,000 operations" implied PS5 Encore only uses 8 CPUs. No: it was solely an ASan/TSan contention fixture. The R237 probe-thread telemetry reported
hardware_reported=16andaffinity_allowed=13with mask0x1fff, topology5prioritized logical CPU slots (four Switch guest cores and GPU) and8isolated secondary logical slots (0x1fe0). These are distinct workload/affinity categories, not 8 maximum PS5 threads or proof that all 16 SMT contexts are available to this process/firmware.9ad8e724fixes another real shader worker throttle intools/prepare-vulkan-port.py: when the OS returns an actual non-empty affinity mask,schedulableis its cardinality, notmin(affinity_allowed, std::thread::hardware_concurrency());hardware_concurrency()is only a hint and could underreport granted CPUs, falsely producing one builder. Retains two secondary service/headroom slots and a six-shader-builder pool cap, NOT a whole-emulator thread cap, plus previous primary mask subtraction correction.7bce84destrengthens source/model regressions withreported=2/4and permitted 8/13.828429c2adds host C++20 ASan+UBSan fixture extracting actual generated Vulkan worker policy from Python AST, compilingPS5_NATIVEbranch with mocked 16/13/8 CPU masks;b15b52b6,472b4626,0504f37eensure matching enclosing non-Android guard, native compile branch and Linux CPU_ISSET macro compatibility.a65a75a7/cc8e5246wire source+compiled shader policy into host-only/native preflight;b42a8643/f9aef3c9wire existing full topology and physical affinity host tests (no new workflows launched).84654948expands GPU atomic forward/reverse regression from only 8-thread testing to both 8- and 16-thread stress modes. Executed an isolated scratch C++20 policy-equivalent mock under clang ASan+UBSan: 16 reported/13 allowed→6 shader builders, 16/8 secondary→6, underreported 4/8→6 and 2/8→6, missing verification→conservative 1, mask with 2 primary slots→4. An isolated scratch C++20 GPU atomic helper model under clang ASan+UBSan passed both 8 and 16 threads × 60,000 iterations. These scratch runs are NOT execution of the exact checked-in extracted-policy script or full git checkout, GitHub Actions, PS5 native build, or console measurements. 13/13 selected source-contract checks passed. No claim 16 OS-allowed CPU contexts, all CPU threads busy, fixed FC27 FPS/textures, Sony heap release or resolved issue #8. -
2026-10-10 R251 / host-only preflight request: CPU affinity confirmed-source shader admission was previously refined; before any native PS5 work, the standalone
.github/workflows/encore-core-preflight.ymlnow includes the pinnedtools/check-gpu-memory-mapping-source.pyverifier in addition to the C++/Python GPU bounds, ASID lifetime, shader-worker, heap and UX host fixtures. This checkpoint marks only the[core-ready]source-validation request. The PS5-nativebuild-040-zbic.ymljob explicitly does not start for this marker; no firmware build, deployment, or local Mac modification is authorized. Log actual Actions verdict separately when known; do not mark tests green just because a job was requested. -
2026-10-10 R251 host preflight #38044951686 first real regression: the host-only workflow successfully completed CPU shader selector/model and topology/affinity tests; newly enabled
check-gpu-memory-mapping-source.pyfailed at a valid invariant:headless/main.cppcalled::Eden::GpuFault::ResetTitleCounters()without including its defining headergpu_fault_rate_limit.h.c63557e4fixes this native compile-time undeclared-namespace risk with an explicit PS5-only include. No PS5 binary was compiled; the native workflow was skipped. Re-run the standalone host-only preflight to evaluate downstream tests; earlier tests after GPU mapping were skipped due fail-fast. -
2026-10-10 R252 / host CI proof, failed final whitespace-only gate: Host-only core workflow
#38045061932on32da5c89completed the entire generic CPU/GPU/GPU-ASID, shader-policy, JIT, glyph/controller suite SUCCESS; it also completed Sony-mspace ownership test with 480,000 operations across eight threads, sanitizer PASS; the heap rollback, formatter, crash-provenance and approved launcher UX gates all PASS. The only failure wasgit diff --checkreporting one trailing-whitespace-only line intools/fixtures/gpu-asid-lifetime-host.cpp:90.ca34b4b4removes that trailing whitespace. The earlier#38044951686found an undeclared GPU fault-counter namespace inheadless/main.cpp, corrected by explicit header inclusionc63557e4. No native PS5 build was started:build-040-zbic.ymlis skipped on[core-ready]. Request the host-only preflight again on the corrected HEAD, and record the actual resulting conclusion; never mistake it for GPU FPS or firmware proof. -
2026-10-10 R253 — first FULL GREEN post-R250 standalone GitHub core preflight:
#38045197373on source SHAa2832b3ccbc24bad5a27e36d62bfb904964c38f6is SUCCESS. Every host-only step passed: CPU affinity/topology + actual generated Vulkan shader selector; GPU mapping source contracts, GPU DRAM/bounds host C++ + model, exact atomic_ref eight/sixteen-thread ASan+UBSan+TSan tests, GPU ASID lifetime host stress; generic JIT, glyph/controller/network/UI policy; Sony mspace thread-sanitized 480,000 operations on eight host threads, physical growth and rollback, diagnostic formatter and crash ELF provenance; UX/hero invariants; andgit diff --check FETCH_HEAD HEAD. This validates SOURCE/HOST behavior only, with no PS5-native compilation, deployment or controller/FC27 hardware qualification. The nativebuild-040-zbic.ymlwas skipped on all three[core-ready]pushes. Earlier host failures were actual missinggpu_fault_rate_limit.hdirect include inheadless/main.cpp, fixedc63557e4, and one trailing-whitespace line ingpu-asid-lifetime-host.cpp, fixedca34b4b4. Host-only#38044951686and#38045061932were FAIL until their identified issues corrected. No active PS5 build. GPU remap transactional lifetime, FC27 black textures and 0-FPS windows, launcher SIGSEGV and physically retained ~1,280 MiB Sony heap remain unverified and OPEN. This documentation-only [skip ci] record follows the green source SHA and does not claim a new runtime test for this docs commit. -
2026-10-10 R254 — avoid unsigned overflow in Vulkan texture residency/GC budgets: The pinned Eden
RunGarbageCollectorPS5 Vulkan prefetch usedu64 usage = total_used_memory; usage -= ReclaimedBytes(image);with no underflow protection. PS5 RADV/Vulkan may sample total driver allocations whileReclaimedBytessums logical texture cost, so deferred frees or alias counts can exceed projected remaining usage; u64 wrap yields enormous bogus pressure, over-prefetching GPU readbacks/runtime.Finishcalls rather than stopping.0690a951adds nonallocating constexprheadless/vulkan_gc_budget.hwith saturatingAfterProjectedEviction(used,reclaimed);177567dcuses it on the dirty-texture prefetch lookahead;b538bef5wires its include into the real generatedtexture_cache.h.d17dfb1f/c93ae503apply the same overflow protection to both actualDeleteImagetexture-cost decrements for Vulkan only, while leaving OpenGL's existing accounting untouched; corrected generated C++ escaped-newline handling before host CI.044a1f80/9df74881add a C++20 ASan+UBSan 200,000-case header regression, literal AST extraction of both actual Vulkan DeleteImage source transformations, and original OpenGL preservation assertions.a4f6ed83/02b16cdbadd it to existing host-only and future PS5 build preflights; NO native PS5 build. This prevents one possible repeated GC stall/false-pressure path, not proof that FC27 black textures/low FPS disappear, or of maximum PS5 CPU/GPU/RAM/GDDR6 hardware utilization. Old host test#38045197373was fully green before these R254 code changes; rerun host-only CI on R254 source and record actual outcome. -
R254 host-only CI request: Re-run
encore-core-preflight.ymlon the Vulkan saturating GC code. Nativebuild-040-zbic.ymlremains gated/skipped; do not mark PS5 hardware behavior verified based on this source test. -
R254 verified host CI: Encore core source regressions #38045810913 succeeded on code SHA
b32d59c0d3ab99b22000a5f986bea184099c5794. All host steps passed, including newcheck-vulkan-gc-budget-host.py(source-bound generator AST checks and 200,000 C++20 ASan/UBSan saturation cases), existing CPU/GPU/ASID/JIT/glyph checks, Sony heap UBSan/TSan, launcher UX and final git diff cleanliness. Paired native workflow was SKIPPED. This validates that the source transformation compiles in its isolated helper fixture; it does NOT compile the entire Vulkan C++ texture cache or run the PS5 GPU driver and does not demonstrate full CPU/GPU/RAM/VRAM utilization. All outstanding native renderer, FC27, heap physical release, exact SDK ABI and old SIGSEGV gates remain open. -
2026-10-10 R255 — avoid per-call heap allocation in Vulkan GPU texture readbacks:
7f1778d0replaces thestd::vector<std::pair<ImageId, Map>> pending; pending.reserve(16);inheadless/vulkan_download_batch.incwithboost::container::small_vector<std::pair<ImageId, Map>,16>. The upstream pinnedtexture_cache.halready includes Boost.Container and the very sameMap = decltype(runtime.DownloadStagingBuffer(size_t{}))type is used invulkan_gc_downloads.incwithsmall_vector. Per GPU readback no longer needs a reserve/allocation for up to 16 staging descriptors, reducing CPU heap churn during uploads/downloads without allocating more PS5 GDDR6 or changing 16-map/32-MiB submission fences.d01edf55adds a C++20 ASan+UBSan fixture with 1,000 × 16 move-only ownership checks; a scratch C++20 clang ASan/UBSan Boost.Container smoke test PASSED.b35fa2b5/c6d22488gate it in both host/native preflights. This is no promise of frame-time gain or PS5 runtime correctness. Host CI [#38045810913] was GREEN for R254 before this R255 change; run another host-only preflight to qualify R255. No native build requested. -
R255 host-only test request: run existing source regression workflow with 16-descriptor Vulkan staging small_vector test; PS5 native build is explicitly not requested and stays gated.
-
R255 host-only CI dependency correction: run #38046130254 failed during the newly introduced Boost.Container staging fixture because the GitHub Ubuntu host lacked
boost/container/small_vector.hpp. All preceding source/JIT/Vulkan projected GC sanitizer gates passed. The pinned Eden Vulkan source already uses that header;20376e28installslibboost-container-devin the host-only regression workflow. No native PS5 build started. Rerun to qualify source changes. -
R255 host-only CI VERIFIED: #38046240302 on SHA
06aa786d419cb13286a58a412bc8886062ff6daafinished SUCCESS in all steps, including Boost.Container move-only staging buffer batches, R254 Vulkan GC 200,000-case saturation test, CPU topology/shader admission, GPU physical/ASID atomic regressions, Sony mspace UBSan+TSan, JIT, glyph/controller and final Git diff/UX source gates. Initial R255 #38046130254 failed only because host runner lacked Boost.Container development headers (not because the source failed);20376e28installedlibboost-container-devin host preflight. Native PS5 workflow SKIPPED on each [core-ready] test. No native PS5 compile, console FPS, GPU occupancy, GDDR6 residency peak or memory mspace release proved. Keep issue #8 open. -
2026-10-10 R256 — integration-level Vulkan readback C++ host regression: Prior R255 C++ sanitizer fixture tested only Boost.Container
small_vectorbehavior. R256 addstools/check-vulkan-readback-batch-integration-host.py(7a09d766) that compiles the actualheadless/vulkan_download_batch.incsource in a minimal C++20 texture-cache runtime, with movable staging maps, actualruntime.Finishbarriers, byte-by-byte swizzle results and 16-texture/32-MiB/oversized/empty batch boundary cases. This seeks real ordering/lifetime errors without needing PS5 SDK or linking a driver. Both existing host/PS5 preflights now call it (1c910332,4d48d5aa). The prior R255 host source CI#38046240302was FULL GREEN on earlier SHA06aa786d; integration-level R256 has NOT yet passed, so do not claim it before Action execution. Native build workflow should remain SKIPPED for[core-ready]. No console FPS/texture proof or claims of full hardware saturation. -
2026-10-10 R256 — actual Vulkan readback C++ integration CI VERIFIED: On
dev/ps5-sparse-jitcommit960d5ebe07be02c6474ad87d5d28154bf5ada289, host-only #38046739718 is SUCCESS in all stages, including the newtools/check-vulkan-readback-batch-integration-host.py. This fixture compiles the literal contents ofheadless/vulkan_download_batch.incin a C++20 mock Vulkan runtime under ASan+UBSan, asserting original in-order guest memory writes afterruntime.Finish, 16 independent staging-map slots, 32-MiB batch splitting, oversized one-at-a-time transfers and empty/zero-sized images. It supplements (does not replace) R255's 1,000 × 16 Boost move-only descriptor test, R254 texture-GC budget saturation and prior GPU ASID/JIT/CPU/heap sanitizer tests. Paired native PS5 release workflow was skipped. No real Vulkan driver, Sony PS5 ABI, GPU occupancy/VRAM saturation, FC27/BOtW FPS/texture tests or 1,280-MiB mspace reclamation were run; these remain gates. Correctness of a mocked transfer is not proof of native texture rendering. -
2026-10-10 R257 / PS5 Vulkan dev pipeline trace thread safety: Found a separate C++ UB/crash risk in the Vulkan generator
shader_costscode: its optional developertrace_pipelines=onfirst-use logging inserted pipeline pointers from concurrently building graphics/compute shader workers into mutable function-staticstd::unordered_set<const void*>without synchronization, then readtraced.size()during formatting. Besides the data race, this static set lived for the entire launcher process and could suppress traces when VkPipeline pointers were recycled by a new title, while accumulating unbounded allocations during many games.a32b1846addsheadless/pipeline_trace_registry.h, a per-title epoch-awareFirstUseRegistryguarded bystd::mutex, with fixed max 65,536 pipeline IDs per type, one graphics and one compute instance, using pre-existinggpu_time_sessionatomic title generation.9d1702b7refactors both generator sites to obtain insertion ordinal under the mutex but perform snprintf/kernel-log after the lock, with no work when tracing is off.fa953685adds C++20 ASan/UBSan and Linux TSan 16-worker test for unique first-use ordinals, duplicate suppression, title epoch reset, reused pointer attribution, separate shader classes and bound;a94b3ab6/b1bdce15wire it to existing host/native source preflights. Source/host test not yet run on these commits, so do not claim a green gate or a PS5 native fix. This removes a provable opt-in shader-trace data race but is NOT the normal Vulkan shader pipeline compilation hot path; no measured gameplay FPS/GDDR6 gain and no native PS5 build. -
2026-10-10 R257 host CI VERIFIED: #38047130227 on
cac4a015is SUCCESS across all host source tests, including 16-thread Vulkan first-use registry ASan/UBSan/TSan, title-epoch reset, bounded diagnostics and the earlier actual texture readback batching suite. Native PS5 build was SKIPPED. The trace-specificstd::unordered_setdata race fix is real but the instrumentation is disabled by default, and it does not qualify FC27, JIT physical memory or device GPU correctness. -
2026-10-10 R258 / Vulkan GC staging ownership correction (host gate requested): The prefetch path in
headless/vulkan_gc_downloads.incstored staging map descriptors by copy, before callingimage.DownloadMemory(map, copies), unlike the already validated normal Vulkan readback path that moves its descriptor into the deferred batch. This can duplicate ownership of RAII handles or break with a move-only map, and may let a temporary mapping disappear beforeruntime.Finish().ff683984records the GPU copy on the still-owned local map and then usesgc_downloads.emplace_back(id, std::move(map)), leaving a single deferred owner untilFinish/publication/release. Newtools/check-vulkan-gc-staging-lifetime-host.pyextracts and compiles those literal production statements against non-copyable C++20 maps under ASan+UBSan, checking 1 and 16 in-flight transfers and no destruction before the fence. Both host-only and native prebuild workflows call this fixture. This note marks a [core-ready] host-only preflight request, not a tested success or a PS5-native compilation. No proof yet of live driver transfer integrity, FC27/BOtW FPS, missing-texture elimination, 13.60 SDK compatibility, physical heap reclamation or full CPU/GPU/RAM/GDDR6 utilization. Keep issue #8 open; production release untouched. -
R258 HOST CI VERIFIED: #38048300958 completed SUCCESS on SHA
1146501565a5bd1cc5b4f03453067c888bf7a122. Entire source/host suite passed: actual move-only Vulkan GC staging+fence fixture, R256 Vulkan readback integration, R257 shader trace TSan, GPU bounds/atomic/ASID, CPU worker selection, JIT, Sony mspace host UBSan/TSan, controller glyphs, UX andgit diff --check. Paired native #38048300979 was SKIPPED. No PS5-native compiler, GPU driver, 13.60 firmware, FC27/BOtW framerate/texture or physical 1,280-MiB arena reclamation is qualified. This documentary [skip ci] commit follows the green source SHA. -
2026-10-10 R259 — pinned Vulkan staging audit corrects R258 premise, and fixes actual early-frame GC overflow: Inspection of the EXACT upstream Eden mirror at pinned commit
5f142c7926d0c7fcbbd0ce30794d72f638a43b2ashowsvk_staging_buffer_pool.h::StagingBufferRefis a trivially copyable, non-owning value descriptor (VkBuffer, span, offset, usage, level, index); the pool, not the descriptor destructor, owns its lifetime. Hence R258's claim that copying this handle caused a RAII double-release/UAF was incorrect, and its move-only host mock was not representative of production. Restored the original staging reference copy-before-recording ordering and removed the misleading mock from both CI gates. R258's prior host green result proves only that synthetic model, NOT a real Vulkan lifecycle fix. Independently verifiedtexture_cache_base.hinitializes unsignedu64 frame_tick = 0, while the pinnedRunGarbageCollectorpassesframe_tick - ticks_to_destroytolru_cache.ForEachItemBelowtwice, with ages 10/25/50. When immediate texture pressure enters GC during the first frames, unsigned subtraction wraps. The pinned LRU's signed comparison actually treats the wrapped number as a negative sentinel and normally skips, rather than evicts, new textures; the earlier claim that this alone explained startup texture loss was incorrect. We make that grace period explicit so it cannot regress when removing the wrap. Added nonallocating::Eden::VulkanMemory::OldestEvictionTick(frame_tick, min_age)toheadless/vulkan_gc_budget.h(clamps to 0). The pinned generator now fail-closed checks/replaces all three LRU cutoff expressions (one Vulkan lookahead and two common cleanup loops), and guards the lookahead and BOTH cleanup passes so an inclusive LRU cutoff of zero cannot accidentally evict textures touched at frame zero. The policy after age threshold is unchanged. Extended the existingtools/check-vulkan-gc-budget-host.pywith source transformation/age-guard checks and C++20 ASan/UBSan tests for 0..109 frames, all three GC age thresholds, boundary/UINT64_MAX and 200,000 randomized cases. HOST CI NOT YET DISPATCHED as of this note; request only[core-ready]preflight, no native build. This is a bounded correctness fix, not observed PS5 FPS/texture proof or CPU/GPU/GDDR6 saturation. Issue #8 remains open. -
R259 follow-up correction / host-only validation request: The pinned
common/lru_cache.h::ForEachItemBelowincludes its cutoff; replacing wrapped u64 with zero without an age gate would turn safe no-eviction at frame 0 into an early eviction. Addedframe_tick >= ticks_to_destroyguards for both generated GC cleanup loops andframe_tick < ticks_to_destroyearly return inside Vulkan prefetch. The newOldestEvictionTickhelper only runs after the age guard. Host tests now assert the 3 cutoff substitutions, 2 cleanup guards and early Vulkan prefetch exit. The R259 source diff remains unverified until this [core-ready] run completes; no PS5-native build or hardware performance claim. -
R259 CI/header correction and second host-only gate request: #38048951680 was RED only at the modified Vulkan budget C++ fixture's missing
<initializer_list>header; earlier CPU/GPU/JIT/texture source tests passed, downstream heap/UX were skipped on fail-fast. Added the standard C++ header. The actual pinned LRU uses inclusiveForEachItemBelow, so merely saturating its cutoff to 0 was insufficient: guarded both cleanup passes and Vulkan lookahead until the requested 10/25/50-frame age, and confirmed the generator matches three exact cutoff sites. This marker requests a new host-only [core-ready] preflight; previous green R258 and prior red R259 do not qualify the new source. Native PS5 build remains skipped, production untouched. -
R259 final host verdict VERIFIED: #38049178191 on code SHA
2f675da60197f92d37b7ab2e155a76afcecc61d9completed SUCCESS in every step, including the new saturation/early-frame GC age source tests under ASan+UBSan, CPU/GPU/ASID/JIT fixtures, Sony mspace ownership UBSan+TSan, controller/launcher UX and final Git diff cleanliness. Paired PS5-native #38049178181 was SKIPPED. R259 removes reliance on unsigned underflow as an accidental early-frame no-eviction sentinel, preserving the pinned inclusive LRU's age semantics; it does not demonstrate a PS5 FPS uplift or remedy black textures. No physical reclamation of the retained 1,280-MiB Sony arena, shader occupancy or hardware image correctness has been proven. R258's move-only descriptor model was withdrawn because it did not match the pinned POD staging handle. This documentation-only [skip ci] commit follows the successful code SHA. -
2026-10-10 R260 — bounded Vulkan dirty-GC prefetch capacity expansion / HOST CI REQUESTED: The pinned
RunGarbageCollectorcan schedule 10, 20 or 40 LRU evictions according to pressure, butheadless/vulkan_gc_downloads.incformerly prefetched only 16 dirty staging maps before letting remaining dirty evictions run the original synchronous per-imageruntime.Finish()fallback. Increased the inlineboost::container::small_vectorcapacity and its linked fullness predicate to 40 descriptors, bounded by the existing and UNCHANGED 32 MiB total staging-byte cap and existingnum_iterationscap (max 40), without changing selection/age fences/guest write ordering or forcing a higher GPU residency budget. This can combine up to 40 small dirty-image downloads behind one Finish instead of one batch of 16 followed by up to 24 individual waits, when ALL images qualify and their total staging size is <=32 MiB; real-world benefit requires console frame-time proof. Newtools/check-vulkan-gc-prefetch-host.pyextracts literal production C++ container declaration and admission predicate and compiles them with a pinned-shape, copyable non-owning staging ref (not the invalid R258 RAII mock), asserting 20/40/41 descriptors, 16x2MiB and 32x1MiB byte boundaries, zero images, one Finish and explicit pool deferred releases under ASan/UBSan. Wired into both host source and future native prebuild checks. This commit requests ONLY[core-ready]host preflight; PS5-native build must remain SKIPPED. No claim of actual FC27 FPS, missing-texture remedy or retained 1,280-MiB mspace physical release; issue #8 remains OPEN. -
R260 host CI VERIFIED: #38049481268 on code SHA
cfcf71665d548609602188925c1da8ad84cd369bcompleted SUCCESS in every stage. The new production-bound C++20 Vulkan GC prefetch fixture passed under ASan/UBSan: 20/40/41 small staging refs, 32-MiB boundary, explicit deferred pool release after one Finish. CPU/shader/GPU/ASID/JIT suites, Sony mspace host UBSan/TSan, launcher UX and Git diff cleanliness also passed. Paired PS5 native #38049481359 was SKIPPED. This lowers the number of per-image Finish fallbacks in a qualifying synthetic host pressure scenario; no on-console FPS/stutter/missing-texture, Sony ABI, Vulkan residency, RAM/VRAM occupancy or 1,280-MiB physical heap reclaim has been demonstrated. This is only a documentary [skip ci] receipt after the successful source SHA; branchfix/0.40-zbic-13.60remains untouched. -
2026-10-10 R261 — mixed clean/dirty Vulkan GC LRU lookahead now skips, not aborts, non-prefetchable entries (HOST CI REQUESTED): Audited real pinned Eden
5f142c7926d0c7fcbbd0ce30794d72f638a43b2aTextureCache<P>::RunGarbageCollectorandcommon/lru_cache.h::ForEachItemBelow: the real Cleanup loop consumes an iteration and continues past clean, aliased, scaled and multisample images, but the PS5 VulkanPrefetchDownloadsformerly returned TRUE at the first such image. With e.g. clean-oldest then multiple dirty candidates, prefetch stopped before any map, so each dirty Cleanup fell back to oneruntime.Finish(). Changed these nonprefetchable cases toreturn falseand kept the 40-scanned-entry limit, 40-desc cap and 32-MiB total staging-byte cap as stop conditions (return true). No changes to CPU guest publication order, deferred handle pool lifetime, per-image mandatory download paths or global GPU memory budgets. Newtools/check-vulkan-gc-mixed-prefetch-host.pycompiles the literal production skip/batch/map/download instructions against a pinned-shape copyable staging handle, covering clean→dirty, alternating clean/dirty, 16 clean + 24 dirty, alias/overlap/scaled/multisample, 41 dirty, 32-MiB cap and Finish-before-FreeDeferred under ASan+UBSan; wired to host and future native prebuild CI, but NOT native run. This[core-ready]request remains subject to actual GitHub Action success. No proven PS5 FC27/BOtW FPS, black texture fix, kernel/Sony ABI, physical 1,280-MiB arena reclamation or full hardware utilization; production branch untouched. -
R261 host first failure and corrected mock signature: #38049885415 failed while compiling the new mixed-GC test harness, after all earlier source/JIT/Vulkan gates passed. Its stand-in
TextureCacheRuntime::DownloadStagingBuffer(size_t,bool)omitted the real pinned API's defaultbool deferred=false, so the productiondecltype(runtime.DownloadStagingBuffer(size_t{}))extracted into the fixture could not compile. Corrected the mock signature tobool is_deferred = false. No production behavior was changed for this harness fix, and no GPU hardware qualification can be inferred from its compilation. Request a new [core-ready] full host gate before treating R261 as validated. Native PS5 build remains skipped. -
R261 host CI VERIFIED: #38049997766 on source SHA
a7673ea7b5ec84097833aeace6c18fd9e34b9a58completed SUCCESS in every stage: real extracted Vulkan mixed-LRU scan C++ fixture under ASan/UBSan, 20/40 staging batches, CPU/GPU/ASID/JIT, Sony mspace UBSan/TSan, launcher glyphs/UX and branch diff cleanliness. Native PS5 #38049997723 was SKIPPED. The earlier #38049885415 failed only because the new mock omitted a defaultbool=falseargument present in pinnedDownloadStagingBuffer; this was corrected before the green source run. Mixed clean/dirty GC batch behavior is validated on host but there is no PS5 native FPS, shader stall, missing texture or 1,280-MiB Sony backing reclaim proof. This documentary [skip ci] note follows the successful code SHA. -
2026-10-10 R262 — skip unbatchable oversized Vulkan GC image, keep subsequent small dirty batch eligible (HOST CI REQUESTED): R261 let the 40-entry LRU prefetch skip clean/aliased/scaled/multisample entries. Another unnecessary stop remained when an image's uncompressed GPU readback exceeded the entire fixed 32-MiB staging budget: that image cannot ever enter a batch, but its
return trueaborted lookahead even when dozens of independent small dirty images followed. The R262 production prefilter now treatsimage.unswizzled_size_bytes > 32_MiBas a nonbatchable skip (return false); the real Cleanup still downloads/publishes that large dirty image individually. Boundaries for batchable images remain unchanged: no more than 40 scanned images, 40 small staging refs, 32 MiB total, one GPU Finish per prefetch batch and deferred pool release. The existing compiled mixed-GC source fixture now asserts a >32-MiB oldest dirty image followed by 40 small dirty images yields 39 prefetched maps (first also consumes an iteration) and one finish; earlier alias/multisample/clean/byte cap scenarios retained. This does NOT increase real GPU memory budget, does not remove large-image's mandatory GPU wait and has no PS5 hardware FPS proof. CI is source/harness ONLY, PS5 native build SKIPPED; issue #8 and 1,280-MiB physical heap reclaim remain OPEN. -
R262 host CI VERIFIED: #38050185048 on source SHA
7be4e40681aa6d7b71f24c904b5532af7c300b6cfinished SUCCESS across all stages: production-extracted C++20 mixed Vulkan GC prefetch under ASan+UBSan including one 33-MiB dirty item followed by 39 small staged dirty maps; 32-MiB budget, 40-item LRU scan, deferred release after GPU Finish, prior full Vulkan/JIT/CPU/GPU/ASID tests, Sony mspace host UBSan+TSan, glyph/UX and clean diff. Paired native PS5 #38050185012 was SKIPPED; no console graphics/FPS, shader occupancy, GPU memory or physical retained 1,280-MiB arena reclaim has been shown. This receipt is [skip ci] documentation after green code; shipping branch untouched. -
2026-10-10 R263 — avoid speculative Vulkan GPU readbacks after CLEAN eviction already resolves GPU pressure; HOST-ONLY CI REQUESTED: Audited the pinned upstream Eden
5f142c7926d0c7fcbbd0ce30794d72f638a43b2a:TextureCache<P>::DeleteImagedecrementstotal_used_memoryfor every image, including clean images, but Encore's earlier GCPrefetchDownloadsdecremented local projectedusageONLY for dirty staged copies. Under mixed LRU pressure a group of clean evictions could drop memory belowcritical_memory, and the prefetcher would still schedule unnecessary GPU dirty readbacks andruntime.Finish()for textures Cleanup might retain. Refactoredheadless/vulkan_gc_downloads.incinto a literal per-candidateNoteProjectedEviction(image)helper using the existing saturatingAfterProjectedEvictionand the prior conservative critical/expected threshold; called it both when eligible clean/unsupported candidates skip staging and after actual dirty staging. This is PROJECTION ONLY and does not modify the real collector's allocation, LRU order, guest writes, 40-scanned/40-map or 32-MiB transfer limits. Extendedtools/check-vulkan-gc-mixed-prefetch-host.pyto compile the literal production projection lambda alongside the staging scan, verifying a clean image that resolves pressure schedules zero GPU readbacks, and clean + three dirty reclaimers stop before a fourth, retaining all R260–R262 mixed/oversize/limit tests with ASan/UBSan. Corrected misleading source comments from R258 (actual pinnedStagingBufferRefis a copyable non-owning handle) and R259 (unsigned early-frame underflow previously acted as an accidental skip sentinel in the pinned signed LRU comparison). Run[core-ready]HOST preflight ONLY. Do not run PS5 native compile, do not promote, do not claim measured FC27 frame times or fix retained Sony 1,280 MiB physical heap; keep issue #8 open. -
R263 first host gate #38050755880 FAILED in outdated test source assertion, not in compiled renderer:
check-vulkan-gc-mixed-prefetch-host.pystill matched R262's old literalimage.unswizzled_size_bytes > 32_MiB) return false;, superseded by R263'sreturn NoteProjectedEviction(image);. Updated assertion to match actual projected skip and verify the shared helper is used. Request fresh [core-ready] host-only preflight; previous R263 run is NOT green, and PS5-native remains skipped. -
R263 VERIFIED host-only CI: #38050843837, source SHA
1f1e47c810e4ed23a984a9b77c1a7eba42b83abe, completed SUCCESS across all stages: C++20 ASan+UBSan mixed Vulkan GC with literal production projected clean+dirty eviction lambda, scenarios clean reclaim removes all pressure and clean+three dirty reclaimers stop before unneeded fourth, previous R260–R262 boundary tests, CPU/GPU/JIT, Sony mspace host sanitizer tests, UX and clean diffs. Paired native PS5 #38050843830 SKIPPED. Earlier CI #38050755880 failed in a stale source assertion and was superseded by the clean full run. This is a speculative GPU-work avoidance optimization validated in a mock driver, not on-console measured performance, shader/textures correction or physical mspace reclaim; feature branch only. -
2026-10-10 R264 — Vulkan guest-memory direct readback batching now 40 descriptors under unchanged 32-MiB limit (HOST-ONLY CI REQUESTED): The separate
headless/vulkan_download_batch.incproduction snippet forTextureCache<P>::DownloadMemory(triggered by guest/CPU memory access, distinct from R260–R263 dirty-GC prefetch) still imposed 16 maps perruntime.Finish()despite an independent 32 MiB total staging-byte limit. Changed to inlineboost::container::small_vector<std::pair<ImageId, Map>, readback_batch_limit>withreadback_batch_limit = 40, replacing its 16-map fullness fence. This can coalesce 17–40 small, independent readbacks into one GPU completion, with original modification-tick sorting and guestSwizzleImagepublication order preserved. Existing 32-MiB staging cap, oversized standalone paths, no additional GPU device allocation budgets, and Finish-before-publication are unchanged. Updatedtools/check-vulkan-readback-batch-integration-host.pyto run the literal production snippet with 17/40/41 maps, byte/oversize/zero cases, contents and write order under ASan/UBSan; corrected its runtime mock to a trivially-copyable non-owning Vulkan map descriptor with pool-owned allocations matching the pinnedvk_staging_buffer_pool.h, rather than an imaginary move-only map. Updatedtools/check-vulkan-readback-small-vector-host.pyfor 1,000 x 40 POD-reference batches and actual inline capacity. This [core-ready] requests HOST CI only, not PS5 compilation; observed FC27 FPS, black/missing textures, real GPU occupancy and persistent 1,280-MiB physical heap still need PS5 firmware proof. Production branch remains untouched. -
R264 first host CI #38051050301 RED only at POD staging mock init: The new
check-vulkan-readback-batch-integration-host.pyintroducedTextureCacheRuntime::backingas pool-owned vector but retained aggregateruntime{std::make_shared<Monitor>()}; strict Clang-Wmissing-field-initializersrejected the missing explicitbackinginitializer before executing the integration test. Prior R263 GC/JIT and new 40-map small_vector sanitizer tests passed. Fixed test mock toruntime{std::make_shared<Monitor>(), {}}without changing production R264 batching. Request fresh [core-ready] host-only CI; native PS5 build remains skipped; do not mark R264 green until full pass. -
R264 VERIFIED host-only CI: #38051160277 on code SHA
e109dd211087bf68e598474a6455f6bc3b66117fended SUCCESS on every step. The exact Vulkan guestDownloadMemorysnippet compiled/executed under C++20 ASan+UBSan with pinned-shape non-owning staging refs; ordered 17/40/41-image publication and one/two Finish boundaries, 32-MiB staging cap, single oversized 33-MiB copy and zero-sized cases all passed. Separate 1,000 x 40 inlineboost::small_vectordescriptor batches passed; R263 mixed clean/dirty projection and prior Vulkan/JIT/CPU tests, Sony mspace UBSan/TSan, glyph/UX and source diff cleanliness passed. Native PS5 #38051160257 was SKIPPED. First #38051050301 failed due to missing explicit empty mock poolbackingmember initializer with Clang-Werror; this was fixed and superseded by full green R264 gate. No claims of actual PS5 FPS, GPU occupancy, texture completeness or physically reclaimed 1,280-MiB heap. Documentation [skip ci] after green source SHA, no production branch modifications. -
2026-10-10 R265 — actual FC27/launcher mapping faults prioritized, fail-closed missing physical backing (HOST CI REQUESTED): Read previous PS5 firmware 13.60 R1 Library logs, 5,120 repeated
memory.cpp:560 memory mapping base yield a nullptr within the tableassertions, 8,383Unmapped Device WriteBlockmessages, and launcher SIGSEGVs sharing null-ish address, rather than further speculating about 16/40-transfer batching. These were from an older PS5 binary; subsequent pinned guest-zero-delta alias and GPU reverse/bounds fixes are already present in source but NOT console-verified. Newly isolated defect in pinnedsrc/core/memory.cpp::MapPages: ifsystem.DeviceMemory().GetPointer<u8>(target)genuinely returnsnullptr, upstream subtracts a guest-page base from null andStore(type=Memory, delta=bad); the earlier patch only sampled the resulting bad pointer and retained a corrupt guest memory page. New PS5-onlyheadless/backports/eden-ps5-guest-map-null-backing.patchexecutes aftereden-ps5-guest-zero-alias.patch, tests actual physical backing before computing delta, logs sampledEDEN_GUEST_MAP_NO_BACKINGand stores the page asUnmappedinstead. Valid non-null backing with host==guest VA (legitimate delta zero) is preserved on the original Store/IsDirectBackingAlias path; normal backing still maps unchanged. No immediate attempt to read from missing memory, no raw physical release.tools/apply-eden-backports.shfail-closed source validation andtools/check-gpu-memory-mapping-source.pystage/order assertions updated;tools/check-ps5-guest-null-backing-host.pycompiles literal patch guards and pinned zero-alias predicate under C++20 ASan/UBSan with three physical pages (no backing / valid identity / normal), verifies alias bounds and missing-page counters; included in both CI preflight gates. Next [core-ready] host-only gate requested, no native PS5 build or claim FC27 textures fixed; issue #8 remains open, as does 1,280 MiB physically retained heap. REPO ONLY, no Mac/PS5 local edits. -
R265 first CI issue and retest request: host-only #38052254610 was RED at new test fixture line 19 because the removed unified-diff line's source indentation was not identical to the Python test's hardcoded space count; no patch replay or C++ sanitizer executed yet. Corrected assertion to compare whitespace-trimmed actual deleted line while preserving its exact C++ contents. Production guard is unchanged. This marker requests fresh [core-ready] host-only CI, not native build. Do not claim mapping fix or crash recovery on console until PS5 evidence.
-
R265 test source syntax correction / third host-gate request: #38052350070 failed at the generic Python syntax check because the previous test source adjustment erroneously inserted a literal backslash-n outside a Python string while changing its unified-diff anchor assertion. Fixed to an actual newline. This only changes the host test, not the PS5 mapping guard. Request fresh [core-ready] host CI for the complete source-level and compiled regression. No native build or game qualification.
-
R265 VERIFIED host-only CI: #38052420757, source SHA
bae6aca0dcf4b9ea72ffcac28e9a86f5869a4943, completed SUCCESS in every stage, including source-gated and C++20 ASan/UBSan execution of the literal PS5 MapPages NULL physical backing guard, direct-memory identity-alias preservation, GPU mapping source tests, JIT/Vulkan suite, Sony mspace host UBSan/TSan, interface and clean source diffs. The initial R265 host failures #38052254610 and #38052350070 were only newly introduced test-source assertion/formatting errors, superseded by this full-green verification. Native PS5 release #38052420761 was SKIPPED. This confirms only the extracted host C++ source model and preflight integrity; the pinned-backport must still survive actual pinned-source native compilation, and FC27 missing textures/black screen/stutter and the physically retained 1,280 MiB heap remain UNQUALIFIED on PS5 FW13.60. Feature branch only; shipping branch untouched. This documentation-only [skip ci] commit records the exact verified source SHA. -
2026-10-10 R266 — EXACT pinned guest memory patch replay gate (HOST CI REQUESTED): After R265's extracted C++ sanitizer success, the remaining integration blind spot is actual
git applyreplay of all five interacting guest page-table source overlays against upstream Eden. Addedtools/check-guest-backport-replay-host.pyto host and future native preflight: fetch only the public pinnededen-emulator/mirror@5f142c7926d0c7fcbbd0ce30794d72f638a43b2a/src/core/memory.cppfrom raw GitHub, verify exact Git blob SHA-1837016de1d4efe74d2efb8df0d9de10aa10d8a26before touching it, apply in actual production orderguest-mapping-diagnostics,guest-walk,guest-zero-alias,guest-map-null-backing,guest-spaninto an ephemeral runner temp directory withgit apply --check+git applyfor each, then assert the final MapPages fail-closed guard, valid delta-zero alias handling, CPU GetSpan range and read-only visitor survive. This test has public network dependency on raw.githubusercontent.com, but pinned blob hashing prevents content drift and fails closed on download errors. It performs no native PS5 SDK compile/driver calls, does not touch user local files or PS5, and cannot prove actual FC27 FPS, texture completeness or 1,280 MiB retained Sony heap reclamation. Host [core-ready] run requested; do not mark verified before green. -
R266 host first execution failed in test command, not patch: #38053355573 authenticated and fetched the exact upstream source successfully, then exited code 129 because the new Python harness used an unsupported
git apply --no-ext-diffflag. Production code and patch were not exercised. Removed this flag in bothgit apply --checkandgit apply. Request fresh host-only [core-ready] CI. Native release skipped. -
R266 caught ACTUAL production R265 patch integration failure: #38053447185 successfully fetched and cryptographically verified the exact pinned upstream
memory.cpp, then cleanly replayedguest-mapping-diagnostics,guest-walk,guest-zero-alias. The fourth patcheden-ps5-guest-map-null-backing.patchfailedgit apply --checkat upstreamsrc/core/memory.cpp:553: its original generated diff copied one EXTRA whitespace into each context/deletion hunk line, so it could never match the real pinned source despite the earlier isolated C++ test being green. Fixed actual patch indentation (not just the fixture) inf5bbba854d53f9cbf2cda2821923eae0bc2b3809. This is a real integration correction that the old test could not catch. R266 source-replay preflight remains RED until the next full [core-ready] validation. No user PC / PS5 writes, no native build. Heap unmap issue #8 still OPEN. -
R266 VERIFIED — full five-patch guest memory replay on EXACT pinned upstream: #38053579677, source SHA
f7a708e9a908c18b43b58589b08c2953e28e271b, completed SUCCESS in all host jobs. Thetools/check-guest-backport-replay-host.pystage downloaded pinnededen-emulator/mirror@5f142c79src/core/memory.cpp, verified Git blob837016de1d4efe74d2efb8df0d9de10aa10d8a26, andgit apply --check+git applysucceeded for all five ordered guest overlays (map diagnostics, read-only guest walk, legitimate zero-delta alias, actual null physical backing guard, contiguous guest span), with source asserts. This proves R265 patch previously unapplicable due indentation now really applies, preventing a source-patch packaging/build failure. Existing extracted MapPages guard C++ ASan/UBSan and CPU/GPU/Vulkan/JIT host checks, Sony mspace UBSan/TSan, UI contracts and git diff all green. Native PS5 paired #38053579656 remained SKIPPED. Green host patch integration is NOT runtime GPU texture correction, FC27 FPS data or Sony 1,280-MiB physical backing release. Feature branch only; release branch untouched. This [skip ci] receipt follows green tested code. -
2026-10-10 R267 — verify ALL 16 GPU page-table backports can apply to REAL pinned Eden source (HOST CI REQUESTED): After R266 caught and repaired a real previously invisible integration bug in guest
memory.cpp, audited actualtools/apply-eden-backports.sh: there are sixteen ordered overlays on justsrc/core/device_memory_manager.incand.h, covering remap, reverse mapping, CPU/GPU alias/coherency, physical page capacity, read bounds, atomics and ASID lifetime. Addedtools/check-gpu-backport-replay-host.py, wired into both host preflight and future native pre-build preflight, to fetch ONLY these two public upstream source files pinned at Eden5f142c7926d0c7fcbbd0ce30794d72f638a43b2a, verify their exact Git blob hashes97c2706abbecf1e7d59f32ab9b31ba3d2c372c2candb4b3b46088e5d9165f7df99372137237c00ac303, check production patch ordering and sequentially rungit apply --check && git applyfor all 16. Check final source markers for atomic and invalidation support. Fail closed on SHA/source/patch errors. This integration proof addresses possible missing textures and GPU remap issues at native package-build stage, but is NOT a PS5 runtime/framebuffer test. Allocator R267 audit:headless/heap_arenas.incconfirms heap root mspaces retain their real 128 MiB physical owners after title shutdown, and child 8 MiB arenas pin roots. The existing snapshot counters lag other threads and cannot guarantee quiescence, so do not call Sony direct physical release or destroy mspaces until safe ownership and active-thread lifetime are demonstrably bounded. Reduced memory retention, real console performance and 1,280-MiB physical reclaim remain OPEN. Request[core-ready]host-only CI; no native build or shipping branch mutation. -
R267 VERIFIED host-only CI: #38060357092 source SHA
e8d2194f9f09568877844ad0d0a470d922527bd6SUCCESS in every stage. The new complete GPU backport replay test fetchedsrc/core/device_memory_manager.incand.hat pinnededen-emulator/mirror@5f142c7926d0c7fcbbd0ce30794d72f638a43b2a, verified exact Git blob SHA1 for both and sequentially applied all 16 production GPU patches with realgit apply --check && git apply; expected remap/reverse, physical bounds, atomic pointer table and ASID protections were present in merged source. CPU/GPU/JIT/Vulkan host mocks, Sony mspace ownership UBSan/TSan, UX and clean diff passed. Paired native #38060357063 SKIPPED. This is pinned source integration evidence only, NOT native SDK compile, proof of textures/FPS, or physical reclaim of 1,280 MiB. Allocator root spaces and 8-MiB arenas remain persistently pinned across game transitions. Do not pretend zero relaxed held bytes alone proves reclaim safety. This note [skip ci] records green source SHA. -
2026-10-10 R268 — repeated title session heap reuse host test (CI REQUESTED): Previous heap mock runs proved one next-title allocation and persistent root backing after cache drain, but never forced many rounds of a realistic 192-MiB transient working set. Extended the existing exact derived
headless/heap_arenas.incC mocktools/check-heap-growth.pywithtitle-cycles: seven simulated title lifetimes, each 8×24-MiB in-mspace blocks (below 32-MiB direct threshold), contents checks, all frees, main-thread TLS drain, with initial physical-root growth followed by strict plateau across the six subsequent cycles; child 8-MiB arena pin and physical committed pages must remain present. This does not claim/rely on unsafe mspace destruction. It shows ONLY the ability to reuse backing after an identical title lifetime under a host first-fit allocator; Sony physical memory totals and FC27 FPS are still unknown. Added scenario to existing clang/UBSan host CI, native PS5 build remains skipped. Trigger [core-ready] host-only gate. -
R268 VERIFIED: 7 consecutive simulated title lifetimes reuse physically backed heap roots without further growth. Host CI #38060672041, source SHA
61bf5dd12cee42a2de18e6d823a8f2694ab5d2df, SUCCESS all stages, including actual derivedheadless/heap_arenas.inctitle-cyclestest (8×24-MiB allocations per round; seven rounds; first-round commitment plateau remains unchanged for later rounds; main-thread TLS drain; 8-MiB arena root pin preserved). Job log:[checked] title-cycles: 7 sessions reuse same physical backing without growth, no unsafe unmap PASS. GPU real 16-patch replay, guest real 5-patch replay, CPU/GPU/Vulkan/JIT, mspace sanitizer, UX and clean diff all passed. Native PS5 #38060672026 SKIPPED. This validates host allocator reuse under repeating identical demand; DOES NOT free physical 1,280 MiB or prove anything about frame time, ROM texture completeness, Sony mspace destroy ABI. Avoid any assertion that PS5 physical memory was returned. [skip ci] docs after green. -
2026-10-10 R269 — distinguish PS5 system-reserved GDDR6 from app-owned 1,280-MiB committed heap; per-owner direct physical ledger, HOST-ONLY CI REQUESTED: User asked whether 1,280 MiB after guest exit is Sony's untouchable OS reservation and whether all 16 GiB installed PS5 RAM can be used. Audited real
headless/performance.cpp::ReportDirectMemoryState,src/memory_pages.cpp::DirectMemoryExtent,headless/heap_arenas.inc,headless/experimental_performance.hand console log: kernelsceKernelGetDirectMemorySize()exposed 12,288 MiB (12 GiB) of direct memory, whereas PS5 physically carries 16 GB of unified GDDR6. Firmware/system allocations outside that direct extent are NOT available just by lifting an emulator cache setting. The observed 1,280 MiB heap consists of 10 * 128-MiB Encore-owned, physically committed Sony direct pieces retained for reuse; NOT a Sony kernel reserve. The 3-GiB C heap reservation is virtual, not precommitted. Existing 3-GiB JIT host headroom is an emulation safety policy, not 3 GiB of Sony kernel-reserved RAM, and 6-GiB aggressive Vulkan cache policy is independently limited. New pureheadless/direct_pool_accounting.hprovides overflow-safe distinct app physical backing owner totals and provenance;ReportDirectMemoryStatenow outputsEDEN_DIRECT_POOL_OWNERSat lifecycle ONLY with kernel direct extent, Encore heap root pieces, large blocks, sparse page tables, sparse JIT and dense JIT physical commitments, tracked sum, unclassified remainder (explicitly NOT FREE RAM), consistency flag and kernel-confirmed largest contiguous free PA. Does NOT double count virtual heap/JIT reserves, does NOT infer complete guest/GPU memory ownership, does NOT change memory budgets or unsafe Sony kernel mappings and never runs in the GPU frame loop.tools/check-ps5-direct-pool-host.pyC++20 ASan/UBSan validates 12,288 MiB / 1,280 MiB realistic snapshot, separate 5 owners, overflow, failed/low query and uncertainty; wired into both host and native preflight. Run [core-ready] HOST CI only, keep FPS/missing textures/1,280-MiB physical reclaim UNQUALIFIED; don't build PS5 or touch Mac/PS5. This log should guide later full 12-GiB pool utilization decisions based on real kernel headroom, not assumed 16-GiB application access. -
R269 VERIFIED — kernel direct-extent and real app physical owner ledger host sanitizer gate: #38061474432 source SHA
bf3664dbefb37600a04849925d7078f68b834353completed SUCCESS in all jobs (source, pinned 16 GPU and 5 guest patch replays, Vulkan/CPU/JIT, Sony mspace UBSan/TSan, UX and clean diff). Exact C++20 ASan/UBSan output:PASS kernel 12-GiB direct pool vs installed 16-GiB distinction, 1280-MiB Encore heap ledger, ASan/UBSanandUnclassified bytes are NOT confirmed free RAM; no physical Sony mspace unmapping. Native PS5 #38061474456 SKIPPED. New lifecycleEDEN_DIRECT_POOL_OWNERSoutput will require a native firmware build and user test for real measured owner numbers; no evidence that the 1,280-MiB heap was released, that all 16 GiB can be used by this app or that FC27 frame stutter is resolved. PS5 12 GiB is a kernel-exposed direct-memory extent, not a claim all 12 GiB are always free or contiguous. The installed-vs-direct distinction should remain explicit in docs and support. -
2026-10-10 R270 -- physical large-block accounting correction, source-only, UNVERIFIED: R269 formerly summed requested large-heap allocation sizes as direct physical usage. The actual Sony allocator adds a 2 MiB leading metadata span and rounds large payloads up to 2 MiB (32 MiB request => 34 MiB direct owner; 33 MiB => 36 MiB). New Common::AllocatedMemoryPagesSpan() reads the allocator-owned physical-size header; bridge eden_heap_pages_physical_size() exports it to the derived C heap. A separate eden_heap_large_physical_bytes atomic counts the real backing for each dedicated large block. EDEN_DIRECT_POOL_OWNERS now uses this counter while preserving requested heap_large_bytes and explicitly logging coverage when the optional owner hook is unavailable. Linux allocator mock maps the full Sony-modeled span, and extended heap/accounting source gates assert physical counters on large allocate, free, and realloc-to-zero. No host CI run, no PS5 native build, no PS5 FPS or actual reclamation proof. Root mspaces (historical 1280 MiB) still stay allocated; console PS5 exposes 12 GiB direct extent, not guaranteed free 16 GiB. Experimental branch only; shipping branch unchanged.
-
R270 host gate requested: re-run complete feature-branch
[core-ready]source-only CI after exact 2-MiB-aligned dedicated large-block physical accounting; never infer native SDK or Sony reclaim success from host checks. Test requested; no native build. -
2026-10-10 R271 — reset PS5 GPU direct-memory pressure snapshots on every new title (SOURCE ONLY, HOST CI PENDING): Native
headless/performance.cpp::RefreshFreeMemory()previously retained process-globalchecked_ns,largest_free_block,graphics_memory_short,has_valid_sampleand consecutive query failures across game sessions. In the same launcher process a new title may start with a different GPU and guest direct-memory footprint, so the old title's observed largest-free block is not authoritative even for the next 100-ms interval; it may spur needless dirty-texture evictions or delay pressure awareness. Moved these atomics to namespace storage, addedResetDirectMemoryProbeForTitle()called fromheadless/main.cppimmediately after the existing per-title frame timestamp reset (after previous renderer worker teardown). The reset refuses an unexpected in-flight query, clears all old known-sample state/timestamp and forces conservative low-memory status until the first fresh kernel sample; no per-frame allocations, additional kernel queries, cache budget changes, unsafe physical root reclamation or native PS5 build. Source-only contracts added in performance and R269 account host checks. CI still required. Does not prove FC27 stutters/textures fixed or recover old 1,280 MiB roots. -
2026-10-10 R272 — bounded PS5 GPU-thread direct-memory probe cadence (HOST CI REQUESTED):
RefreshFreeMemory()previously synchronously calledsceKernelAvailableDirectMemorySizeas often as once per 100 ms on the GPU-thread cache path, even when the kernel had confirmed large free direct-memory headroom. Added pure C++20headless/direct_pool_probe_policy.hand host sanitizer assertions: keep baseline 100 ms for unknown/failed/low-memory samples; only if the previous successful kernel observation had >=4 GiB largest contiguous free block, reduce sampling to 250 ms until a new measurement reduces headroom or an error occurs. The added three relaxed/acquire atomic reads execute only AFTER the original 100-ms fast-return (not on normal 60/120 FPS frames), and single-flight kernel query ownership remains unchanged. The first query after the R271 per-title reset is immediate. Does not raise heap/JIT/Vulkan budgets or free any Sony direct pages. This lowers the maximum query frequency from 10/s to 4/s in healthy high-headroom conditions only; PS5 latency/FPS gains remain UNPROVEN. CI host-only requested, native PS5 build skipped, 1,280-MiB persistent mspaces still not reclaimed. -
R270 VERIFIED host: #38063231638 source SHA
81b9d38f925fdf6553f034a50518f2d054575a79SUCCESS all host jobs. True physical-size dedicated heap-block ledger, derived C mock with physical header size, realloc-zero and UBSan/TSan, and pinned GPU/guest overlays passed. Native PS5 paired #38063231567 SKIPPED. This does not demonstrate any PS5 physical mspace root release. -
R271 VERIFIED host: #38063593664 source SHA
642b213baa2980c92ec6972359da5839fe36b370SUCCESS all host jobs. Per-title GPU direct-free query reset source contracts and previous suite passed; native #38063593837 SKIPPED. No claim that FC27 stutter or 1,280 MiB rooted mspaces are resolved. -
R272 VERIFIED host: #38063826729 source SHA
937b0f5d35fc06d88f49d0f70fe21e902ef33792SUCCESS all host jobs including C++20 ASan/UBSan direct-pool/probe policy tests, full source regression suite, pinned GPU/guest replay, Sony mspace UBSan/TSan, UX and source diff. Native PS5 paired #38063826677 SKIPPED. High-headroom frequency cap (250ms when >=4GiB last confirmed contiguous free vs 100ms under pressure) is a host-proven control-flow policy, NOT actual Sony query time / frame-time or performance gain. No new binary. Remain on feature branch; issue #8 still open. -
2026-10-10 R273 — root lifetime eligibility witness and 12 alternating title workload test (HOST CI REQUESTED):
headless/heap_arenas.incnow emits EDEN_HEAP_RETENTION at existing explicit end-of-title root reporting, splitting committed 128-MiB pieces by whether a child 8-MiB arena pins the physical owner. Both pinned and unpinned groups remain explicitlyreclaim=disabled quiescence=unproven: zero buffered held counters do NOT prove safe Sony mspace destruction, and there is no verified root teardown ABI. Pure observational O(24) snapshot runs only at lifecycle, never allocator/GPU frame hot paths. Extended derived Sony mspace stand-in UBSan host testmixed-title-cyclesexercises twelve consecutive sessions, rotating 8x24, 6x30, 10x16 and 11x18 MiB allocations, testing first/last bytes, owner reuse, no physical growth after a full four-pattern warmup, aggregate root accounting and persistent arena pins. This is broader than R268's repeating 8x24 MiB case but does NOT imply actual Sony physical unmap or FC27 PS5 FPS fixes. No native PS5 build; [core-ready] host gate requested. -
2026-10-10 R274 — conservative PS5 direct-memory region enumeration provenance (HOST CI REQUESTED):
ReportDirectMemoryStatealready visited up to 8192 kernel direct allocation records once at lifecycle stages and computedtotal - summed_intervalsas an UPPER bound on direct free memory. It previously loggedscan_valid=1even whensceKernelDirectMemoryQuerystopped early, misleading consumers into treating a structurally valid partial scan as complete. Newheadless/direct_pool_region_scan.hvalidates monotonically ordered, nonoverlapping, in-extent physical intervals with overflow-safe occupied lower-bound arithmetic; PS5 lifecycle logs preserve legacyscan_validmeaning (record validity) and addscan_reached_extent,scan_stop(0 physical extent reached; 1 kernel returned nonzero; 2 invalid record; 3 bounded 8192-record limit) andquery_rc, and explicitly retainfree_upperas an upper bound never admission/free budget. C++20 ASan/UBSan host tests cover interrupted, overlapping, out-of-range and end-reached scenarios. No renderer/GPU hot-path changes, no Sony physical unmap, no native PS5 SDK build; R273 root retention and 1,280-MiB retained memory remain open. Host [core-ready] gate requested. -
2026-10-10 R275 — reject impossible kernel direct-memory largest-free reports before JIT/GPU admission (HOST CI REQUESTED): Following R274's distinction between partial region enumeration and free-memory admissions, audited all three
sceKernelAvailableDirectMemorySizeconsumers. Previously an rc=0 reply was trusted even if returnedstartwas negative / beyond the 12-GiB PS5 direct extent orlargestextended beyond the physical end; this could poison admission budgets and diagnostics. New pureEden::DirectPool::IsKernelFreeSpanValid(extent,start,length)checks signed extent, nonnegative start and end-span using subtraction (no addition overflow).QueryLargestDirectMemoryBlockreturns false with zero output for invalid range (no expanded dense JIT). GPURefreshFreeMemorytreats invalid success as a missed query, retaining its conservative pressure policy.ReportDirectMemoryStatedistinguishes syscall success from validated free span:largest_valid=0andlargest_free_known=0when impossible. C++20 ASan/UBSan compile-time boundary cases cover 0, exact limit, negative/overflow, and max-size values. In R274 host contract, replaced a tautological assertion with a real source invariant. No extra kernel probes, CPU/GPU frame work, mspace unmap, changed allocation budget, or PS5 SDK build. Host [core-ready] requested, native evidence & 1,280-MiB physical reclamation remain OPEN. -
R273 VERIFIED host-only: #38064312415 source SHA
25fb32f948be8f1f0344ea0a9a4000845d65d843SUCCESS all host stages, including derived PS5 heap stand-in UBSan/TSan and 12 alternating guest-title sessions with no further physical root growth after 4 different demand shapes.EDEN_HEAP_RETENTIONdistinguishes child-arena pinned and unpinned committed roots; both categories remain explicitly reclaim disabled because allocator quiescence and Sony destructor ABI are unproven. Native #38064312411 SKIPPED. No PS5 memory released. -
R274 VERIFIED host-only: #38064567242 source SHA
1b84b0f372e0bcbff3f616bebbbbedcd2635cd84SUCCESS all host stages. C++20 sanitizer region scan checks partial/incomplete, overlapping, invalid and end-reached, preserving occupied lower/free upper bound distinction. Native #38064567258 SKIPPED. Incomplete kernel memory enumeration still not a physical free budget. -
R275 VERIFIED host-only: #38064799511 source SHA
db0c0cef2c939bd69c11f9bc256d6a6ef7eaad3eSUCCESS all host stages. Direct-memory free span validator protects JIT startup, Vulkan pressure sampling and lifecycle logs from a success rc with invalid physical address/size. Existing full GPU/guest patch replay, sanitizers and UX/diff remain green. Native #38064799458 SKIPPED. All R273–R275 remain host-only: no fresh PS5 firmware numbers, CPU/GPU saturation metrics, FC27 stutter/texture qualification or 1,280-MiB root reclamation. Feature branch only. -
2026-10-10 R276 — eliminate default multi-thousand-syscall direct region walks on title lifecycle (HOST CI REQUESTED):
ReportDirectMemoryStateran up to 8192 synchronoussceKernelDirectMemoryQuerycalls per lifecycle report (core_initialized, core_shutdown, core_destroyed), including normal PS5 app sessions. The region enumeration is informational only: neither JIT admission, renderer pressure probe nor per-owner physical ledger uses its free upper bound. New default-offdirect_region_scan_enabledis updated once per game from an explicitmemory-region-scan.txtmarker under the existing Eden app file root, and gates the entire expensive kernel scan. With no marker, diagnostic emitsscan_stop=4,scan_valid=0,scan_reached_extent=0,free_upper=-1; separately reports kernel-confirmed largest-free and the R269/R270 owner ledger without suppression. With marker present, retains the exact R274 bounded 8192-region scan and stop provenance.tools/check-ps5-direct-pool-host.pyandtools/check-runtime-frame-budget.pylock the source contract. This saves up to 3 * 8192 kernel-query calls per normal game lifecycle IF the scan previously hit its maximum; actual PS5 timing/FPS effect is unmeasured. No physical mspace unmap, no broader RAM budget, no native PS5 build; source-only host gate requested. -
2026-10-10 R277 — recover Vulkan pool capacity from a transient failed first direct-memory probe (HOST CI REQUESTED): The RADV/Vulkan
Devicepatch fromtools/prepare-vulkan-port.pystoredgraphics_capacity=free_memory()exactly once duringVkDeviceinit. If Sony's first query returned zero/unknown (R271 fail-closed path), capacity stayed ZERO even after later valid kernel observations. That permanently disabled the low-pool scaling used to align the 6.4-GiB Vulkan cache budget with true initial contiguous PS5 pool capacity, potentially mis-triggering dirty-texture GC. Introducesheadless/vulkan_pool_capacity.h::PoolCapacityLatch, an allocation-free atomic per-process latch reset for every new VkDevice, with an initial nonzero observation or the first later valid nonzero sample.GetDeviceMemoryUsageobtains one current observation from the existing throttled callback and passes it to the latch (no doubled kernel calls, no new frame-region scan, no changed budget).tools/check-vulkan-gc-budget-host.pycompiles the actual latch and exercises zero-start, subsequent recovery, reset and eight-thread contention under ASan/UBSan; pinned generated Vulkan source contracts asserted. Does not use unclassified kernel memory as free, does not expose Sony system RAM, does not physically unmap 1,280-MiB heap roots. Source only, not a measured FC27 frame-time fix. Native build skipped;[core-ready]requested. -
R276 VERIFIED on host — no default 8192-kernel-region walk: Encore core source CI #38065570577, source SHA
e68c2685eda4a0ba875ea7b13f93b39cdf24970e, SUCCESS full host suite (the first run #38065450957 failed an outdated source-string assertion, fixed in the same branch before the green retry; NOT a native compiler failure). Normal title lifecycle now skips the potentially 8192-call per-checkpoint region walk, preserving kernel largest-free and physical owner measurements; explicitmemory-region-scan.txtre-enables detail. Native #38065570573 SKIPPED. Actual PS5 latency effect and reclaimed memory still unmeasured. -
R277 VERIFIED on host — Vulkan capacity recovers from initial query failure: Encore core source CI #38065790440, source SHA
2e491d6a35438227190abffdbc70bcc782624f88, SUCCESS all host stages including pinned GPU patch replay and C++ ASan/UBSan tests of the exactPoolCapacityLatchwith startup failure, later valid sample, per-device reset and eight-thread contention. TheGetDeviceMemoryUsage()hook reads its existing throttled direct pool callback once, not twice, and initializes nonzero capacity when possible rather than staying permanently zero. Native #38065790429 SKIPPED. No measured FC27 FPS/texture improvement, no validated physical 1280-MiB root release, no firmware 13.60 runtime qualification or OS-reserved 4-GB access. Keep Issue #8 open and shipping branch untouched. -
2026-10-10 R278 — short-circuit Vulkan dirty texture prefetch when forbidden by memory policy (HOST CI REQUESTED): In the pinned Vulkan GPU collector,
PrefetchDownloadsalways walked up tonum_iterationsLRU images even whenDirtyEvictions()was false, spending GPU-thread time traversing clean/dirty entries and re-evaluatingKeepDirtyTextures()/throttled Sony direct-pool pressure for each dirty image, despite never staging dirty downloads. R278 checksconst bool prefetch_dirty = DirtyEvictions(); if (!prefetch_dirty) return;immediately after releasing any previous deferred staging handles, before any LRU walk. The per-image repeated memory policy probe is removed from this prefetch-only walk: one stable policy decision per pass. Unchanged actual Cleanup still deletes eligible clean textures, preserves dirty images when protected, and continues to use its own normal pressure evaluation; when dirty download is allowed, all existing 40-descriptor/32-MiB batch limits, staged transfers,runtime.Finish, and fallback paths remain identical. Host regression contracts cover bypass ordering and original mixed-image behavior; no native Sony GPU test and no numerical FPS claims. Source remains feature-branch only;[core-ready]requested. -
2026-10-10 R279 — avoid early-frame PS5 GPU memory queries; one fixed projected-eviction threshold per Vulkan prefetch (HOST CI REQUESTED): Follow-up to R278: its short-circuit initially ran
DirtyEvictions()before the pinned LRU age gate, unnecessarily consulting the Sony direct-memory pressure callback at the beginning of each game even though no textures can qualify for eviction. R279 movesif (frame_tick < ticks_to_destroy) return;directly after deferred-stage cleanup and beforeDirtyEvictions(). When textures can qualify, it computesprojected_stoponce per speculative batch from the pressure policy, not for each of up to 40 clean/dirty LRU images. ActualCleanupkeeps its own current-pressure decision, age/grace handling, capacity, GPU-fence and fallback correctness; only speculative prefetch CPU work changes. Updated exact source extraction incheck-vulkan-gc-mixed-prefetch-host.py, with aging/ordering/one-probe assertions in multiple host gates. No claimed FC27 gain without native PS5 timing; no memory backing freed; development branch only,[core-ready]requested. -
R278 VERIFIED host-only: Encore core CI #38066465522 on source SHA
7975341c679beb20971362eae594eb9b5cff5024SUCCESS full host suite including Vulkan mixed readback-batch/source extraction, no native PS5 build (#38066465541 SKIPPED). Dirty texture prefetch LRU walk now bypassed when protection policy forbids dirty evictions; actual Cleanup still handles clean textures and uses authoritative pressure policy. No reported Sony GPU speedup. -
R279 VERIFIED host-only: Encore core CI #38066778701 on source SHA
3b9ab29f437be4eece7933478cb8d84ab094b732SUCCESS all host stages including source-extracted Vulkan GC projection and ASan/UBSan mixed-state fixtures; native PS5 #38066778645 SKIPPED. On first frames, LRU age check runs before expensive pressure sample; eligible GC prefetch freezes its speculation threshold once per pass instead of calling the kernel-backed callback on every image. Actual Cleanup and GPU sync/fence dependencies unchanged; cannot claim FC27 textures/fps fixed. User-visible quality unchanged. -
OPEN blockers after R279: PS5 firmware 13.60 native compile and game stress test have NOT been done; FC27 0-fps frame stalls, textures and actual CPU/GPU saturation still unknown on hardware; runtime physical 1,280-MiB mspace roots still retained and cannot safely be blindly destroyed; 16 GiB installed PS5 GDDR6 is not 16 GiB kernel-exposed direct RAM. Do not mark shipping-ready from host C++ preflights alone.
-
2026-10-10 R280 — Vulkan present worker in-flight completion / error propagation (HOST CI REQUESTED): Compared exact pinned Eden mirror
5f142c79present manager with current PS5 generated patch.WaitPresent()could return when present queue became empty merely because worker popped its final frame, even thoughCopyToSwapchain()was still in progress, and earlierpresent_failure || queue.empty()patch could silently return after exception. Source generator now addspresent_in_flightunder queue mutex (set on pop, clear only on successful swapchain copy + free frame handoff; catch clears/publishes failure under queue+free locks), waits for(empty && !in_flight) || failure, and rethrows on failure. Worker releases swapchain mutex before acquiring queue mutex on success, avoiding reverse lock-order nesting. Original swapchain drain lock, frame GPU fences and image barriers remain. New host sanitizer concurrency stand-in and production generator anchor assertions run via core CI. This addresses a proven state-machine lifecycle race, not validated FC27 frame timing or missing textures. No native PS5 build, no RAM unmap, shipping untouched. -
2026-10-10 R281 — release free-frame mutex before blocking on a Vulkan present fence (HOST CI REQUESTED): In the exact pinned
vk_present_manager.cpp,PresentManager::GetRenderFrame()heldfree_mutexduringframe->present_done.Wait()and.Reset()even after popping that frame from the queue. SincePresentThread()needs the same mutex to return other completed frames intofree_queue, a long GPU fence wait could serially block the producer's completion handoff and amplify frame backlog. Generated PS5 patch now explicitlylock.unlock()immediately after the successfulfree_queue.pop_front()ownership transfer, before the fence wait, preserving the original GPU fence Wait/Reset order, ownership and synchronization; with R280present_in_flight, wait-drain accounting remains intact. New host concurrent stand-in creates a blocked per-frame fence and usestry_lockto assert the unrelated frame producer can acquire the free-queue mutex/recycle another frame during it; covered by existing R280 host ASan/UBSan/TSan test and the[core-ready]suite. Does NOT eliminate a real GPU fence wait, change image barriers, claim improved PS5 FPS or free 1,280 MiB. Console firmware timing remains UNQUALIFIED; native build skipped. -
R280 VERIFIED host-only: core source CI #38067528391 SHA
b474c701ca7df4b62515f0269dc1380f75cf2754SUCCESS full host suite. The pinned Vulkan present manager patch now waits for both empty queued frames AND no in-flight popped frame; worker exceptions wake waiters and are propagated, rather than allowing silent 'present complete'. Host ASan/UBSan/TSan concurrent stand-in verifies frame success and exception-after-pop; code generator anchors retained. Native PS5 run #38067528362 SKIPPED. The pinned native Vulkan/PS5 SDK binary is not built and frame-time benefit is not yet measured. -
R281 VERIFIED host-only: core source CI #38067761638 SHA
436a11b88f29c25df23a485d9b31fb79966fb661SUCCESS full host suite, including the new blocked GPU-fence/free-queue try_lock scenario under ASan/UBSan/TSan.GetRenderFramerelinquishes free_mutex after popping its exclusively owned frame and before blocking inframe->present_done.Wait(), allowing the async present thread to recycle other frames; PS5 Vulkan fence Wait/Reset stays authoritative. Native PS5 run #38067761620 SKIPPED. FC27 FPS, frozen textures, memory/CPU saturation and real firmware safety are unproven. -
Still open after R281: Native PS5 source-generation and linking with pinned 13.60 SDK, long GPU queue waiting on RADV, title-specific texture correctness, physical 1280-MiB root mspace release, actual CPU/GPU utilization and FC27 video/frame-time proof. This is a real synchronization correctness/liveness improvement but NOT yet a console-tested stutter cure.
-
2026-10-10 R282 — pre-native Vulkan present generator replay gate (HOST CI REQUESTED): R280/R281 were host-green on concurrency stand-ins, but their two
adapt()production tuples intools/prepare-vulkan-port.pyhad not been replayed together against the complete pinned upstreameden-emulator/mirror@5f142c7926d0c7fcbbd0ce30794d72f638a43b2aVulkan present manager C++/H source. Addedtools/check-vulkan-present-source-replay-host.py: fetches those two exact upstream files at content-verified Git blob SHA-13491f8fb7563f2557a476fec8edb4f220f5d27fcand577a82098aba7d65060c7ccda0d50aef81b77c3d, extracts AST literal production generatoradapt()replacements, applies every edit sequentially requiring exactly one match, asserts completed rendered source has the free-frame pop->unlock->fence ordering, in-flight pop/copy/publish state, failure wakeups and exception propagation. This pins source provenance and catches production generator anchor drift/patch order invisible to a hand-written mock. Runs on the host-only source CI AND the future full-build preflight, so failure blocks the expensive native SDK compilation; no native code, PS5 binary or FTP created. Still no user-console FC27, actual performance validation, 1,280-MiB mspace destruction, or 16-GiB system RAM access proof. -
2026-10-10 R282 VERIFIED on host; experimental BUILD gate now reasonable: GitHub core CI #38068514459 SHA
59bfcfb00b19646946dc1516bc6cb628f7ef9b32SUCCESS, actualVULKAN_PRESENT_SOURCE_REPLAY_PASSandCORE_PREFLIGHT_ALL_PASSconfirmed from job logs. First attempt #38068391007 failed ONLY a newly authored test expecting the wrong generated CPP basename; corrected destination tovulkan_present_manager.cpp, preserving actual upstreamvk_present_manager.h. New host-and-native-preflight script verifies the full pinned Eden present manager CPP/H SHA-1s, applies real production generator replacement tuples sequentially, checks in-flight wait / error / free-fence unlock ordering. All source preflights pass; native build remains SKIPPED, firmware 13.60 has not run this candidate. New operator checklistdocs/PS5_R282_TEST_READINESS_2026-10-10.mdspells out one dev all-on build with no publish and the FC27/BOTW hardware diagnostic. Important: ready to attempt native dev build, NOT ready to claim stable/fully optimized FPS, textures, 1,280 MiB safe physical reclaim, or complete installed-16GB usable RAM. -
2026-10-10 R283 — REAL PS5 all-on build #38069983464 preflight failed on missing CI Boost.Container dependency, NOT Sony firmware/native compilation: User manually dispatched development all-on workflow #38069983464, job #114265244168, checkout
358f8b27a795ebbcb46b9a8acf3af1de3c77a9b8. Workflow safety/test-profile, toolchain install and JIT/memory tests passed; full native prebuild gate FAILED at four Vulkan C++ checks (check-vulkan-gc-prefetch-host.py,check-vulkan-gc-mixed-prefetch-host.py,check-vulkan-readback-small-vector-host.py,check-vulkan-readback-batch-integration-host.py) because runner lackedboost/container/small_vector.hpp(fatal error: file not found). Dedicated host core workflow installedlibboost-container-devbut native build'sInstall build toolchainomitted it. R283 adds that package to native apt step, immediately smoke-compiles its real header using clang++-18 C++20, and asserts package parity/smoke ordering intools/check-ci-cache.py. NO native Sony SDK build started, no PS5 test app/artifact created in failed run. This correction is a true CI provisioning fix, no emulator source/CPU/GPU/Vulkan behavior change. New[core-ready]host preflight requested; native retry must use a NEW workflow_dispatch on the corrected HEAD, NOT rerun the old failed SHA, with dev branch,test_all_on=true,publish=false,build_only=false, FC27 ID, and no source changes while running. Keep shipping branch unchanged; PS5 gameplay and physical 1280MiB reclaim unqualified. -
2026-10-10 R284 — correct real all-on native
make prepareGPU GetSpan validator false-failure (HOST GATE REQUESTED): User's corrected manual dev all-on run #38071025601, job #114268287504, sourcee6e5ac4, passed all host source/JIT/Vulkan checks and package preflight but FAILED intools/apply-eden-backports.sh::validate_ps5_gpu_span_physical_bounds()duringmake prepare:GPU GetSpan physical bounds missing from const/non-const path: first_phys >= compressed_device_addr.size(). The patch was actually applied and exact pinned 16-GPU-patch host replay was green; validator hads.count(token) == 2across the ENTIREdevice_memory_manager.inc, but correctly contains THREE identical boundary guards: one WalkBlock from precedingeden-ps5-gpu-physical-read-bounds.patchplus two GetSpan overloads fromeden-ps5-gpu-span-physical-bounds.patch. R284 narrows count to each GetSpan function body and independently checks both physical-bound conditions are present exactly once and ordered afterbacking == 0, before per-page iteration. Host exact 16-patch replay also checks two overloads and independent WalkBlock guard and forbids old global brittle count. No physical GPU checks removed, no emulator runtime behavior altered, no PS5 native compiler reached by previous failed run, no binary generated, shipping unchanged. New[core-ready]host source CI requested; retry must be a NEW dev test All-On dispatch on corrected SHA after green; do NOT rerun failed run's stale SHA. -
2026-10-10 R285 — fix PS5-native C++17 GPU atomic publication syntax failure (HOST CI REQUESTED): First native compile + early syntax gate reached in manual All-On run #38071649101, SHA
2e901db4, after ALL host preflight andmake prepareGPU backport success. Native Clang rejectedstd::atomic_refinsrc/core/device_memory_manager.h:200–209, visible in generatedheadless/sw_blitter_sized.cppand dependent translation units: SDK targets use-std=c++17, whilestd::atomic_refrequires C++20. R285 changes ONLY the production patch forward and reverse inlineAtomicLoad/Store{Physical,Continuity,Backing,Reverse}helpers to__atomic_load_n/__atomic_store_nwith the same acquire/release/relaxed memory ordering and unchanged 16-byte trivially-copyable SparseLargeVectorTrackedEntryandu32reverse slots. PS5 and host GCC/Clang both support GNU atomic builtins in C++17; no mutex or unprotected access introduced. Critical patch replay detail: reversed patch context for previousAtomicStoreBackingmust match modified forward patch.tools/apply-eden-backports.shvalidators updated to exact builtins; pinned upstream 16-patch host replay asserts 4 typed loads + 4 stores and absence of C++20std::atomic_ref; exact extracted production 8-helper C++ host concurrency test moved to-std=c++17under ASan/UBSan + TSan with 8/16-thread simultaneous remaps. This is a real native compiler incompatibility fix, not claimed FC27 performance improvement; build stopped before binary, no package or console test. Shipping untouched. Native dev All-On needs a new run on corrected SHA only after green source CI. -
2026-10-10 R286 — fix stale PS5 GPU atomic source assertion after R285 native C++17 repair (HOST CI REQUESTED): Initial R285 host core #38072332207 stopped at
check-gpu-memory-mapping-source.py:104, which still demanded the removedstd::atomic_ref; no production failure proven. R286 updates the six forward and two reverse atomic source tokens to the exact__atomic_load_n/__atomic_store_nbuiltin calls and original acquire/release/relaxed order, asserts no C++20std::atomic_refpatch tokens and corrects reverse-context store count including the earlier forward helper. Existing C++17 ASan/UBSan/TSan concurrency and 16-patch pinned upstream source replay tests remain mandatory. The previous native#38071649101demonstrated real C++17 incompatibility and produced no PS5 app; R285/R286 require host PASS and then a NEW native dev-branch workflow dispatch. -
2026-10-10 R287 — cached Eden revalidation after C++17 atomics (HOST CI REQUESTED): New manually launched native All-On run #38073074961, job #114274324627, SHA
e753fb7b50bc18f5cfb65d3b83109c86f22f4fbe, completed FAILURE atPrepare native build inputs → make prepare → validate_ps5_gpu_memory_mapping, BEFORE native compilation. Exact logPinned PS5 GPU memory backport missing: invalid.continuity_tracker = 0;. Root cause:apply_one()revalidates old cached patch receipt against the final fully-upgraded source; R285 replaced plain continuity field stores with C++17AtomicStoreContinuityand physical load withAtomicLoadPhysical. Initial validator still demanded older data-racy direct expressions even when atomic patch receipt has been applied. R287 treats initial mapped stage (all four legacy expressions) OR final atomic stage (all four atomic expressions) as valid; atomic stage additionally requires correct__atomichelper definitions and no legacy data-racy raw page references. It does not remove synchronization or reset installed/OS memory. Strengthenstools/check-gpu-backport-replay-host.pyto run every one of the 16 actual production GPU stage validators on fully patched pinned Eden source, reproducing the cache-resume lifecycle in CI before another full-build attempt. Actual PS5 build/link, package and FC27 performance still UNQUALIFIED. This is a preflight-only repair on dev; shipping unchanged. -
2026-10-10 R288 — native GPU cached-tree validator second stage + aggregate all stage failures (HOST CI REQUESTED): R287 host replay #38073582729 applied 16 pinned GPU patches and validated R287 mapping correction, but its newly added full-cache stage revalidation stopped at the next old validator
validate_ps5_gpu_unmap_reverseexpecting plainbase_dev != retiring_page. R285 C++17 atomics deliberately replaced this withAtomicLoadReverse(base_dev) != retiring_page, preserving the mismatch detection without data races. R288 validator accepts original or final atomic comparison, requires matching__atomic_load_nimplementation and forbids legacy comparison when atomic installed. Cruciallycheck-gpu-backport-replay-host.pynow runs all 16 pinned production validators and accumulates EVERY failure before failing host CI, so subsequent stale intermediate assumptions can be addressed in a single batch instead of successive console build attempts. No native build initiated; no protections disabled; development-only changes. -
R287/R288 VERIFIED cached-GPU 16-stage replay host gate: core source CI #38073766097 on
b801ebf6070338fc1bdf617fe5cea4a52f4b04f5SUCCESS. Actual GitHub host log reports all 16GPU_CACHE_VALIDATOR_PASS,PASS cached fully-patched Eden GPU: 16 actual stage validators,PASS two exact pinned GPU sources, all 16 production-ordered git apply patchesandCORE_PREFLIGHT_ALL_PASS. Earlier R287 host #38073582729 exposed the second stale checkerbase_dev != retiring_page, fixed R288 againstAtomicLoadReverse(base_dev)with an acquire-load helper requirement. Failed native all-on #38073074961 built at oldere753fb7and stopped before native build in mapping validator; next native run MUST use new dev head, not rerun the stale job. Host green is not proof native build, package artifact or firmware 13.60 success; preserve cache-reuse test and full 16-stage invariant. Shipping unchanged. -
2026-10-10 R289 — real All-On run #38074091167 failed on stale cached C++20 GPU table source (HOST CI REQUESTED): Actual dev workflow #38074091167 SHA
08d1431c54a484c14569974b86a1515acfe2058cpassed all host source/JIT/Vulkan andGPU_CACHE_VALIDATOR_PASS 16/16fresh replay, then FAILED duringmake prepareearly cached mapping validation:PS5 cached GPU atomic mapping lacks publication helper: __atomic_load_n(&page.compressed_physical_ptr, __ATOMIC_ACQUIRE). Native restored scratchsourcestill carries old C++20 std::atomic_ref production GPU helpers with the old backport receipts. The C++17 builtin patch is correct on fresh upstream (verified host) but cannot silently replace a cached source with conflicting old patches. R289 insertstools/refresh-eden-atomic-source-cache.pybefore reuse intools/prepare-build.sh. Only the full 8-atomic_ref old helper state, matching pinned Eden GIT-COMMIT, both old helper patch receipts and authorized scratch owner triggers: extract pristine verified pinned Eden tar into sibling, check pristine, replace only source, move.cache/cpmback, retain SDK/RADV/ccache/native object directories, then reapply all source patches normally. Reject mixed/unknown source, owner, symlinks, missing receipts; no bypasses to GPU protections. Adds live script host fixtures for migration, idempotence, caching and refusal, to both core source and native preflight. Full PS5 compilation, ELF, package and FC27 hardware test remain UNVERIFIED; user should not rerun stale SHA. Shipping branch unchanged. -
2026-10-10 R290 — read-only real-console multi-window log interpretation hardening (HOST CI REQUESTED), does NOT alter all-on PS5 build
588cbf1: Confirmed user dev All-On native GitHub run #38075096900 source588cbf1bb92500e14d79412a07164e28edf60ad4SUCCESS end-to-end, with checked test app artifactProspero.Eden-Encore-PS5-all-on-test(ID 11677634930, 37,153,344 bytes), matching unstripped crash symbols artifactProspero.Eden-Encore-PS5-all-on-symbols(ID 11678590368, 80,431,553 bytes); console runtime still unqualified. During user PS5 tests, added purely offlinetools/analyze-ps5-frame-windows.pyresilience: parse 9 actualEDEN_...markers from raw AND timestamp/logger-prefixed stderr, refuse per-window cross-thread deltas when one CPU/GPU/guest/JIT stream has missing sample (rather than mispairing unrelated 5s samples), reject counter resets across title/scope restarts, and avoid treating sparseEDEN_MEMORY_LIVEobservations as frame-aligned free-direct-memory estimates. Summary FPS windows remain readable even with incomplete telemetry. Expanded deterministictools/check-ps5-frame-window-analysis.pyfixture for prefixed inputs, dropout, reset, sparse memory; wired it into host-only preflight (it already ran in native preflight). Never infer genuine GPU occupancy from CPU times, do not extrapolate OS reserved GDDR6, and do not assume fast BOTW or FC27 until console measurements; source-only[core-ready]requested, future all-on build unnecessary for this read-only Python analyzer change. Shipping branch untouched. -
2026-10-11 R306 — initial GPU overlay failed on pre-applied #4473; final experimental binary SUCCESS: Earlier native builds #38100672078 and #38101270827 stopped at CMake overlay anchor mismatches for
buffer_cache.h. The later dev All-On #38101599715, source SHA381d9e4426f18ad83f4ea0488ab4ee04047f3056, SUCCESS through PS5 native CMake, compile, stage and package. Artifacts: all-on-test ID 11687933996 (37,344,999 B) and symbols ID 11688003746 (80,646,142 B). Build logs prove the old R306 still compiled two derivededen4473/dma_pusher.cppandeden4473/kepler_compute.cpp. This is not physical FC27 frame-pacing validation or a shipping build. -
2026-10-11 R307 — authoritative #4473/#4477 backport and removal of duplicate native Vulkan overlays (HOST VERIFIED): On dev/ps5-sparse-jit HEAD
47d0bdccf284dd23cf96db4073cbcb5cf5ab7a34, remove the redundantheadless/eden-buffer-4473.cmakeand its extra CMake-generated DMA/Kepler sources. The pinned Edenheadless/backports/eden-4473-4477.patchremains the sole authoritative GPU/fence/dirty-region implementation, applied exactly once bytools/apply-eden-backports.shwithvalidate_gpuon both fresh and cached source. Newtools/check-ps5-backport-policy.pyhost gate rejects reappearance of a shadow header/extra source and checks the authoritative patch presence. Core source CI #38102363915 at HEAD SUCCESS, includingCORE_PREFLIGHT_ALL_PASS; automatic native release job SKIPPED as intended. R307 was not natively built at this point. Shipping branch untouched. User's FC27 observation: ~30 FPS most of the time with severe frame spikes; FPS average is not a smoothness criterion. Prioritize GPU cache conflict elimination, per-frame time distributions, CPU/GPU queues and image quality. Never claim FC27 stutter, pixelation or 1,280-MiB physical memory retention resolved without console proof. -
2026-10-11 R307 NATIVE VERIFIED — single authoritative #4473/#4477 composition: PS5 All-On build #38103076311, source
5d5fc1907023c62e69b10d27dc58726a96d388ae, SUCCESS native prepare/CMake/compile/package, test contractEDEN_PS5_TEST_BUILDand 164 staged files.Eden audited GPU backports #4473/#4477: PASS. Native Vulkan build now 153 units vs 155 in previous R306 #38101599715; no separately compilededen4473/dma_pusher.cpporeden4473/kepler_compute.cpp. Source-ownedtools/apply-eden-backports.shpatch remains once, original DMA is still derived by the PS5 CMake shutdown-safe source loop. Tested All-On artifact ID 11688433341 (37,343,882 bytes ZIP, SHA256452a150c6b7df013e509a93040b76eeb37f7077a5c8ab0cbe0912bef4ae83d79); crash symbols ID 11688268818 (80,640,736 bytes ZIP). Neweboot.binSHA2568885c573ebdf1c9b69459e3f1896a7a39ec43a13a65a65fd96009d08e63237e7differs from R30623c4e4b5483c4933a6ef48201c81a90a1a19fa11e6bd3b33d1c8f1afc5825ece, but equal byte size (71,893,593 B) does NOT identify the cause of binary changes or prove performance improvement. Build showsnative_ps5_execution_verified=false,gpu_shader_pixels_verified=false; release job skipped, shipping untouched. Do not request another console log capture absent a user request. Next focus remains GPU cache contention, expensive work insidePrepareDraw→GraphicsPipeline::ConfigureImpl, guest CPU memory writes/texture-range locks, command queue stalls and frame-time jitter at nominal 30 FPS; avoid unsafe lock removal and new redundant backports. -
2026-10-11 R308 CROSS-FORK PERF AUDIT (NO RUNTIME CHANGE): docs/PS5_R305_2026-10-11_CROSS_COMPONENT_AUDIT.md now records exact comparison with PS5 forks Tiang-88/ProsperoEden0 and mihawk-99/PS5_ProsperoEden, both based on pinned Eden
5f142c79. Tiang's larger GPU dispatch batching / bounded guest cache lock instrumentation are already represented in Encore (dispatch_mask=7default); Encore's 512-draw cap intentionally differs from Tiang's 4096 to preserve the PS5 GPU watchdog correction (#102), so do not blindly increase. Mihawk's two-thread fast first-use Vulkan graphics pipeline optimization is genuinely absent: builds first unoptimized and background rebuild, measured 32% shorter pipeline waiting in another game, not 32% more FC27 FPS; it changesGraphicsPipelineABI/header with ccache and destruction risks, so it was not backported into the proven R307 app without source/SDK lifecycle tests. R307 all-on native build #38103076311 is PASS, does not qualify console frame pacing. GPU cache double-lock inRasterizerVulkan::PrepareDrawand busyGraphicsPipeline::ConfigureImplremain top sustained-stutter mechanisms; shader first-use stalls and full GPU queue/JIT spikes are separate. Branchdev/ps5-sparse-jitonly, shipping untouched; no user retest requested. -
2026-10-11 R309 512-DRAW CEILING + EXPERIMENTAL 64-DRAW BATCH (HOST VERIFIED, NATIVE BUILD REQUESTED): Source
tools/prepare-vulkan-port.pyfixesRasterizerVulkan::FlushWork: old mask-first check delayed nominal 512-draw cap to 519 draws with 8 cadence and 575 with 64. New increment -> check hard threshold >=512 ->scheduler.Flush()and reset -> otherwise periodicscheduler.DispatchWork(); keeps all GPU cache/fence barriers and avoids watchdog overshoot.headless/main.cppsetsdispatch_mask=63(64 draws) only for PS5 EDEN_DEV_PROFILE;headless/performance.hkeeps shipping default mask7 (8 draws). Per-titledev-settings.txt dispatch_draws=8restores baseline, other power-of-two cadences 16...512 available. R309 core preflight #38104200172 SUCCESS all 9 steps: exact-source C++ 8/16/32/64/128/256/512 2048-draw replay; Sony mspace UBSan/TSan and graphics/JIT/other gates.tools/check-ps5-vulkan-dispatch-ceiling.pyadded to both core and full build CI;tools/check-performance-policy.pyupdated to differentiate dev reset63 from shipping default7. R309 audit in docs/PS5_R305_2026-10-11_CROSS_COMPONENT_AUDIT.md. No proof of real FC27 improvement or image quality; R307 native artifact #38103076311 remains console-test baseline until R309 native build. Do not claim resolved stutters/pixelation; no new console logs or local Mac edits requested. Branch dev only, no release. -
2026-10-11 R309 PS5 NATIVE PASS: experimental all-on run #38104316298, source commit
0c0c73bef3f751e4bdf58e09afcd69e3f8e8aedf, SUCCESS (build completed; release skipped). Native CMake generated and actually compiledheadless/vulkan_rasterizer.cpp.owith newFlushWorklimit. Source/host C++ test R309 8/16/32/64/128/256/512 PASS, authoritative GPU backports #4473/#4477 PASS, packaged app 164 files PASS.eboot.bin71,893,657 B SHA2562775e057a14ae67cd695e1acd0dbc96c24211eb7115e8477e6b1b4311629dcb5. All-On app artifact ID 11689485381 ZIP 37,344,102 B SHA256b6a80b5e263578e0b0dde8cd1e60d965c9760158d4cd0820a8a097afa401b750; symbol artifact ID 11689415531 ZIP 80,643,903 B SHA2562b15998064d4c91cc801ed1a8fcafa19dfaa10c6b3cd2cff08173fae4e8f171d.EDEN_PS5_TEST_BUILDexplicitly reportsnative_ps5_execution_verified=false,gpu_shader_pixels_verified=false. Do not claim 64-draw cadence fixes FC27 stutter, frame timing or pixelation without console evidence. No macOS/console modifications, no extra test requested. The upstream 8-draw cadence can be selected for dev viadispatch_draws=8; shipping branch unchanged. -
2026-10-11 image path read-only follow-up:
headless/display_refresh.hspecifies output 1080p, 1440p, 2160p, with Vulkan output copied to PS5's 3840×2160 swapchain if smaller. Pinned Edenvk_present_manager.cpp::CopyToSwapchainImpluses VulkanBlitImagewithVK_FILTER_LINEARwhen frame/swapchain extents differ (if device supports blit). Thus an output 1440p video setting on a 4K TV can add a second bilinear resample after an emulator FSR/bicubic upscale of game content. Plausible contributor to loss of detail; not proven root cause of FC27 or a reason to silently change the user's selected output setting. Before changing, trace real guest framebuffer resolution, Eden scaler output, chosen swapchain extent/filter and actual PS5 VideoOut mode; preserve performance/visual quality trade-off. -
2026-10-11 R310 CACHE-PHASE CAUSAL PROFILER / NATIVE VALIDATION: FC27 cache waits at stable 30 FPS and low-FPS periods remain open; do not remove unsafe buffer/texture mutexes. R310 adds one-in-16 Detailed Logging-only sampled draw timing to native RasterizerVulkan::PrepareDraw double lock and GraphicsPipeline::ConfigureImpl: pair_wait, pair_held, pipeline_configure, descriptor_sync, fill_views, graphics_buffers, descriptor_acquire, dynamic_states, query_draw. EDEN_GPU_CACHE_PHASE frame=N phase=NAME samples=N total_ns=N max_ns=N reports every 5 seconds, max_ns reset via atomic exchange for each window, total_ns and samples cumulative. Quiet gameplay does no per-draw clock or counter writes. Per-title ResetCachePhases. GPU cache coherence, fences, memory writes and draw order stay identical. Exact C++ host fixture tools/check-ps5-vulkan-cache-phases.py verifies sample 1-in-16, max/reset/quiet gate and original mutex anchors. R310 core preflight #38105562120 SUCCESS all 9 steps (initial failed CI #38105446153 due only to whitespace, since fixed); current experimental native build requested via commit marker. No FPS gain claimed, no hardware run yet, release untouched.
-
R310 ONE CONSOLE DIAGNOSTIC TEST WHEN NATIVE GREEN: Ask for one FC27 session of several minutes with user Detailed Logging ON, without changing graphics settings, so cache phase data can be correlated to five-second GPU/frame-pressure windows. Off again after test. User has agreed to test when a version is ready; avoid requesting it before native success.
-
R310 native CI fix, 2026-10-11: First native all-on PS5 run #38105700351 failed during C++ PS5 syntax because interval peak reset used atomic.exchange through a const reference in headless/performance.cpp:1015 (host fixture did not compile the reporter). Corrected to mutable auto& and added static regression in tools/check-ps5-vulkan-cache-phases.py preventing reintroduction. No console test until the replacement native run is green. Full-build/test-all-on rerun requested with the exact corrected source SHA. Shipping unchanged.
-
2026-10-11 R310 NATIVE SUCCESS — USER TEST READY: Build #38106043504 SUCCESS, 21 build steps green, release skipped; exact compiled source SHA
c153aec570. Verified native compilation of vulkan_rasterizer.cpp.o, vk_graphics_pipeline_cost.cpp.o, performance.cpp.o and PASS R310 sampled cache phase fixture (1 draw/16, quiet on/off, max per 5s) plus authoritative #4473/#4477 PASS. Staged 164 files, eboot.bin SHA256 d750a9c25929d7235ce86a3be3874897d6efeee6254cfb043f9b3860db345d52 (71,899,929 B); all-on test app artifact ID 11690027459 (ZIP 37,348,028 B sha256 ba3343e9f545b6259527ad97e14efd8c95fe71a93a452b88e2acf2b511fc77aa); crash symbols ID 11689772965 (ZIP 80,651,832 B sha256 e62cad3f67c53bdbcbd34a0b37fb1f105015eb3b1816783a8f697f248c20f4a1). Test title 0100C49025D3E000. Native execution, FPS improvements and shader output NOT VERIFIED; this is diagnostic, not a fix. Shipping unchanged. -
NEXT TEST — WHEN ASKED: One PS5 FC27 session, same graphics settings, Launcher Settings > Diagnostics > Detailed logging ON, play 3-5 min or until a representative stutter; quit/return to launcher and turn Detailed logging OFF. User may simply report 'test terminé'; authorized Mac Remote Desktop Commander device MacBook-Pro-de-ADMIN.local is online and can be used READ-ONLY to inspect logs over the existing permitted connection when available; do not modify local files. Analyze EDEN_GPU_CACHE_PHASE frame/phase/samples/total_ns/max_ns against EDEN_DEV_GPU and EDEN_FRAME_PRESSURE, including 30 FPS intervals and late frame counts. Keep source commit artifact identity for attribution; do not claim total ns is single-frame duration or that sampled max covers all draws.
-
2026-10-11 R310 TEST ZIP DIRECTORY CONTRACT: Verified native source and stage app folder and metadata are PPSA99008 (eboot.bin, sce_sys/param.json titleId, network-hosts.txt, UI), while FC27 autoboot Switch Title ID is 0100C49025D3E000. Previous all-on upload used path build/dev/PPSA99008/ which uploads contents and strips app folder. Corrected upload root to build/dev/ so ZIP preserves PPSA99008/; added CI re-download of the published artifact and assert presence of PPSA99008/eboot.bin, matching param.json, UI and denylist, and absence of root eboot.bin. This is packaging only; same native R310 code. Require successful new run before giving the new self-contained artifact to user; prior archive remains manually usable if extracted into named directory.
-
2026-10-11 R311 / FC27 three R310 PS5 runs: Full read-only FTP examination of
/data/prosperoeden/logs/{stderr.log,heap.log}and/data/prosperoeden/user/log/eden_log.txt. 3 runs 123/37/70 five-second windows, near 30FPS 94/30/51, late50 220/38/165, worst frame 4472/522/559 ms. Run #2 has real nvmap kernel device-lock failure and unmapped writes to 0 before guest panic D401 then Job0 null instruction fetch; do not mislabel this as proven JIT executable alias crash. Run #3 has abnormal texture/HUD/turf behavior and a separate userspace panic 0x1A80A near exit. Invalid TIC texture format=0 observed once run #1; texture budget ~4.12GB vs 4.72GB threshold, no memory_short. R310 dev GPU dispatch 64 draws, hard 512 max; maxing dispatch is not a 30FPS unlock. R311 PS5-only fail-closed nvmap patch rejects unsupported null guest CPU addresses and returns error + rolls back handle allocation when kernel device-page lock fails (no false success, no unlock). Host pinned SHA-verified replay test and native CI added; reportdocs/PS5_R311_2026-10-11_FC27_R310_3RUN_DIAGNOSIS.md. Experimental: does not establish gameplay crash/stutter/visual correction. User stopped tests for night; do not require retesting now. Trigger R311 all-on native build, keep shipping branch untouched. -
2026-10-11 R312 / FC27 invalid TIC and sparse residency: R310 first run logged
TextureFormat=0with upstream A8B8G8R8 fallback; pinned EdenGpuToCpuAddress(addr,size)means ANY mapped GPU page (not complete range), andIsValidEntrycould accept a non-sparse TIC whose first page is missing when another page in its range is mapped. PS5-only patcheden-ps5-texture-descriptor-residency.patchrejects unknown zero format and non-sparse missing first page; real sparse textures retain prior partial-mapping handling; non-PS5 behavior unchanged. Added pinned SHA-verified upstream replay + host C++ compiled decision matrixtools/check-ps5-texture-descriptor-guard.py, included in preflight and native CI. Audit ruled out perpetual swapchain recreation due 1440p frame vs 4K VideoOut: swapchain requested width/height and actual extent are distinct; dual bilinear scaling remains. Important: this is a correctness safeguard, NOT proven to restore jerseys/HUD/grass, frame pacing or native crash. Seedocs/PS5_R312_2026-10-11_TEXTURE_DESCRIPTOR_RESIDENCY.md. Do not ask user for another test tonight. -
2026-10-11 R313 experimental PS5 Vulkan fast-first graphics pipelines: pinned Eden
PipelineCache::BuiltPipelineintentionally returns nullptr / skips large indexed draws whose async graphics pipeline is still compiling: this can explain transient missing draw elements, though no FC27-specific causal proof. Adapted Mihawk fast-first concept only for new runtime pipelines (worker_thread != nullptr) and DEV All-On builds, leaving cached disk pipeline reloads optimized-first with no duplicate background rebuild. First valid Vulkan pipeline usesVK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT, one background worker builds optimized version, release/acquire publishes handle; lazy per-pipeline OptimizeState cancels queued and joins active work before object destruction, handles remain live; returns original on errors. Rejected Mihawk'sVulkanTimer(24)(Encore array size 24, index would be OOB).dev-settings.txt fast_pipelines=offper game restores original. Newtools/check-ps5-fast-first-pipelines.pycompiles extracted actual worker C++ lifecycle with cancellation/normal paths. No PS5 runtime FPS/visual result asserted; R312 source + packaged PS5 native build #38110170968 success. Details indocs/PS5_R313_2026-10-11_FAST_FIRST_PIPELINES.md. -
2026-10-11 R313 core preflight PASS: #38110900217 successful after restoring five pre-existing doubly escaped C++ newlines in the Vulkan source generator. The R313 worker C++ lifecycle host fixture passed; an actual PS5 native compilation, generated header compatibility, and FC27 on-hardware gains still require qualification. Trigger full experimental native PS5 All-On CI next; never ship as release based on host-only tests.
-
R314 follow-up: recovered texture residency must also recreate cached NULL ImageView: Pinned Eden
TextureCache<P>::VisitImageViewcachesNULL_IMAGE_VIEW_IDwhen a TIC's GPU backing is unavailable, and a separatechannel_state->image_viewsdescriptor map may itself retain NULL afterCreateImageViewfails despite valid first-page residency. Adjustededen-ps5-texture-null-view-remap.patch: in the PS5-only missing-ID path, retryCreateImageViewifis_new_tc || pair->second == NULL_IMAGE_VIEW_IDonceIsValidEntrybecomes true, then publish index-map and preserve fast-path unchanged for valid views. Extendedtools/check-ps5-null-texture-view-revival.pyto compile actual patchedVisitImageViewand reproduce both previously unmapped then mapped TIC and valid/mapped TIC with first creation returning NULL, then success without descriptor rewrite. R313 native #38111020424 previously passed; R314 source/PS5 native CI still unqualified. No on-console stability or visual quality claim. Refuse unconditional GPU lock removal or raising 512 flush ceiling. -
2026-10-11 R314 null-TIC remap + feedback-loop fix completed in source:
eden-ps5-texture-null-view-remap.patchPS5-only allows cached NULL texture views to be re-probed after GPU mapping, retriesCreateImageViewif the descriptor's shared image_views map also stores NULL, and incrementstexture_bindings_serialonly on actual recovery to invalidate stale cached feedback-loop barriers. Valid IDs still fast path with no new checks, invalid TIC remains NULL.tools/check-ps5-null-texture-view-revival.pycompiles exactly patched source in both PS5 and upstream modes covering missing mapping, failed first creation, serial and compute tagging. Documentdocs/PS5_R314_2026-10-11_STREAMED_TEXTURE_NULL_VIEW_REPAIR.md. R314 preflight/native build still needed, no gameplay claim. First R314 host preflight #38128337274 passed before additional feedback-loop serial enhancement; rerun it, then build all-on native. Do not request another FC27 run now. -
R314 core preflight PASS #38128558273 for cached-null image-view retry + feedback-loop barrier serial. Trigger full native All-On PS5 compilation and preserve corrected self-contained PPSA99008 archive. No change to shipping branch or GPU 512 hard ceiling; runtime FC27 gameplay still unverified.
-
2026-10-11 R315 feedback-loop binding-key correction (source only): User notes R314 slightly improves visuals and stutters, neither solved. Pinned Eden
CheckFeedbackLoopcaches a depth feedback barrier by RT serial + descriptor-table serial; it can erroneously reuse the prior decision when a different shader/view index is bound without a TIC/TSC table base change. PS5-only patcheden-ps5-feedback-loop-view-key.patchadds exact ordered bound-view identity to the fast-path key, preserving prior barriers/locks and unchanged-view fast path; host regressiontools/check-ps5-feedback-loop-view-cache.pywired to source and native CI. Pending host/native qualification and PS5 runtime; no FPS/image-quality claim. Preserve R314 null-view revival and ship branches. -
2026-10-11 R316 identical-size Vulkan present optimization (source only): R315 core #38131406089 SUCCESS including exact PS5/upstream C++ depth feedback barrier cases; still no native R315 build. Pinned Eden PresentManager frame image uses same swapchain VkFormat and blits VK_FILTER_LINEAR even on identical extents. R316 PS5-only adapts vk_present_manager.cpp to use vkCmdCopyImage on equal source/destination dimensions, preserving scaled blit, fallback, barriers, Vulkan submit and non-PS5 behavior. Adds exact-pinned-source compiled C++ regression tools/check-ps5-present-equal-copy.py and CI gates, documented docs/PS5_R316_2026-10-11_PRESENT_EQUAL_COPY.md. Does NOT solve 1440p→4K double bilinear resizing; this only optimizes already matching output extents, which have different GPU costs. Native PS5 and user FPS/visual gains unverified.
-
2026-10-11 R317 shared NULL texture-view new-slot repair (source only): R315 and R316 host/core preflights PASS (#38131406089, #38132469426), no native build after R314. R314 covers
is_new=falsewhen a view was NULL, but a new texture index sharing a previously NULL descriptor'simage_viewsmap entry followsis_new=trueand would return NULL for its first draw. PS5-only R317 patch retriesCreateImageViewin this case, leaving valid fast path and non-PS5 semantics untouched. Extends pinned-source C++ fixture, documents in docs/PS5_R317_2026-10-11_SHARED_NULL_TEXTURE_NEW_SLOT.md. Needs core gate and native build for qualification; graphics improvement unverified. -
2026-10-11 R318 PS5 no-depth feedback fastpath (source only): R317 core #38140171929 PASS; R315/R316 similarly PASS, no PS5 native build newer than R314. The full texture-binding scan and R315 view snapshot inside
CheckFeedbackLoopcannot produce a barrier when depth attachment bit is not active, yet are performed under the paired GPU cache lock. PS5-only R318 early false decision + snapshot clear reduces CPU work for color-only/no-depth draws; depth-active path and non-PS5 behavior unchanged. Exact pinned C++ fixture extended for color-only/depth reactivation. No claim this fixes FC27's depth-enabled 3D stutter. -
2026-10-11 R319 PS5 descriptor queue overflow preflight (source only): R318 core source #38140376782 PASS, no native build after R314. Pinned Vulkan UpdateDescriptorQueue::Acquire can invoke scheduler.WaitWorker on descriptor payload overflow inside RasterizerVulkan::PrepareDraw's paired buffer/texture cache locks; this is a concrete possible shared-lock stall, without evidence yet how often FC27 hits the overflow. PS5-only PreflightGuestDraw checks normal 0x400 reserve and drains the same worker BEFORE selecting a pipeline and taking locks; re-flushes guest mapping accumulator after a drain. Acquire remains unchanged as the fallback for unusually large descriptors. C++ host fixture exact pinned replay and no-PS5 behavior; doc docs/PS5_R319_2026-10-11_DESCRIPTOR_PREFLIGHT_OUTSIDE_LOCKS.md. No frame-time improvement claimed.
-
2026-10-11 R320 PS5 adjacent successful sampled TIC reuse, source-only: FC27 main test 1440p 123+37+70 five-second windows; short 1080p and 4K runs secondary and not a comparable A/B. In FillImageViews a directly repeated, read-only, successful TIC index triggers redundant VisitImageView/PrepareImage calls. PS5-only R320 reuses immediately preceding non-NULL ID only when blacklist=false and no deletion during pass; does not short-circuit failed view recovery, blacklisting or invalidation loops. Pinned source compiled C++ regression and core/native gates. R319 native #38141622094 PASS before R320; runtime FPS benefit unverified.
-
2026-10-11 R321 PS5 alias latest-tick no-op fast path (source only): R320 native PS5 all-on #38144510483 PASS, artifact 11704054297; no on-hardware performance proof. In pinned Eden TextureCache::SynchronizeAliases, all alias copies require aliased.modification_tick > current_image.modification_tick. TextureCache::modification_tick advances monotonically on each MarkModification, while joins/sync only copy earlier ticks. Hence an image owning the latest global tick cannot have any newer aliases and can safely bypass vector setup and alias scan. PS5-only R321 patch and exact pinned-source compiled C++ host regression; original alias copy, dirty flags, GPU locks unchanged. Benefit restricted to images which hold latest global tick; 1440p FC27 reference still required.
-
2026-10-11 R322 sampled texture subphase attribution (source-only): R321 native PS5 All-On #38153086997 SUCCESS; no FC27 hardware test of R320/R321 yet. Historic 1440p R310 had sampled 11.361 ms FillImageViews maximum; the label lumps guest image upload, alias scan/copy, TIC descriptors. R322 extends detailed logging-only 1/16 draw CachePhaseTimer with TextureCpuRefresh (only modified CPU image), TextureAliasScan, TextureAliasCopy (only newer alias), via PS5 Vulkan texture cache source adapter and corresponding enum/names; no lock, barrier, copy or GPU scheduling changes. Host source pinned regression and native gate. Workload benefit not claimed; metrics classify cause for a single subsequent real 1440p test when appropriate.
-
2026-10-11 R323 actual user FC27 R322 FTP 1440p and descriptor ring preflight: Current R322 run at 2560x1440, 116 five-second windows, 420 images >50ms and 567.710ms worst; 231171 guest cache conflicts, 5911ms wait across guest threads. New R322 phase samples/total_ns are cumulative since startup: subtract adjacent windows! Sampled 115-window delta GPU FillImageViews 0.440s, CPU texture refresh 0.016s, alias scan 0.008s and alias copies 0.006s. Main stutter not alias/texture upload, while pipeline Configure dominates measured GPU lock scope. 96 Fermi2D non-unit src.depth warnings near guest time 103–105s (no crash); 1691 EA DNS denied in latest 600sec but networking not established GPU stall cause. Pinned Vulkan DescriptorBufferRing::Allocate may scheduler.Wait(frame_ticks[frame_index]) on first recycled frame while rasterizer paired cache locks held. R323 PS5-only bounded preflight moves exact wait before paired locks for eligible descriptor buffer pipelines, retains Allocate wait fallback and exhaustion Finish, re-flushes pending guest invalidations after wait, no GPU barrier/locking removal. Exact source C++ host fixture and CI. No hardware proof yet.
-
2026-10-11 R323 native link failure and generator order fix: #38157123481 native C++ compilation reached link but had undefined Vulkan::DescriptorBufferRing::PreflightFrameReuse. tools/prepare-vulkan-port.py first adapted upstream vk_descriptor_buffer.cpp into vulkan_descriptor_buffer.cpp, but the later VulkanTimer wait-cost adapter independently reloaded pristine upstream to write the actual linked vk_descriptor_buffer_cost.cpp, dropping R323's new method. Fixed adapter to compose from intermediate generated source, changed descriptor wait-site count 2→3, pinned-source fixture explicitly asserts final emitted compiled TU contains method and three wait/finish timing sites. Await native link qualification. No PS5 R323 test yet.
-
2026-10-11 R324 Fermi2D source math repair: pinned upstream Eden sw_blitter/blitter.cpp Bilinear read_src incorrectly computes ((x*src_width+y)>>32)4 even though floor/ceil return integer pixels. Under ordinary dimensions this reads first texel for all interpolated samples and transposes X/Y. Fix uses (ysrc_width+x)*4; NearestNeighbor and Vulkan unchanged. Test exact patched pinned real function with 3x2 identity, 3x2->5x3 interpolation and 1x1 upsample. R322 FTP showed 96 Fermi2D source-depth warnings, but no proof they used bilinear fallback. R323 native link generator fix source CI #38157962597 SUCCESS; combine R323+R324 native All-On after R324 source preflight.
2026-10-11 — unify concurrency repairs on existing dev branch (R324)
- Canonical active development branch is
dev/ps5-sparse-jitat R324, separate from the conservative PS5 referencefix/0.40-zbic-13.60. Avoid short-lived remote fix branches for each isolated change. - Dev R324 already releases
free_mutexbefore waiting on the Vulkan present-completion fence intools/prepare-vulkan-port.py, and verifies the correct handoff withcheck-vulkan-present-wait-host.py(ASan/UBSan + TSan) andcheck-vulkan-present-source-replay-host.py. Do not reapply the redundanteden-vulkan-free-fence-lock.patchfrom temporary PR #11 to dev. - One missing pinned Eden bug was still present:
BufferQueueCore::SignalDequeueConditionbroadcasts but another producer can clear a shared boolean before all sleepers resume. Dev backport now uses a monotonicdequeue_epochobserved by each waiting producer, applied by a SHA-receipted pinned-source backport withtools/check-nvnflinger-dequeue-wakeup.pyas a mandatorymake preparehost C++ harness. - Demonstrated before/after with actual pinned C++ methods: original implementation FAIL first concurrent broadcast; fixed 100/100 PASS. Full R324 40+ pinned-Eden backport application PASS and identical second application PASS. R324 Vulkan code generation on patched pinned source PASS. Existing Vulkan present ASan/UBSan and TSan host checks PASS, and R324 3x2 / 5x3 / 1x1 bilinear sampling host fixture PASS (Mac SDKROOT pinned to installed macOS 15.4 SDK due to broken CLT 27 .tbd linker interoperability).
- No console runtime improvement claimed; FC27 gameplay/texture stutter persists in prior hardware session. Do not request PS5 retest before native compile and graphics compatibility gates.
2026-10-11 R325 candidate — large descriptor capacity wait
- Same canonical
dev/ps5-sparse-jitbranch. Found pinnedUpdateDescriptorQueue::Acquirecallsscheduler.WaitWorker()while both guest buffer/texture locks are held ifnum_descriptor_entries > 0x400and the descriptor payload crosses the end. R319 covered only the ordinary 0x400 reserve; R323 covered Vulkan ring frame reuse, not larger guest descriptor reservations. - R325 generator adds an exact PS5-only larger-reservation preflight after obtaining the graphics pipeline but before the paired mutexes, reflushes/reselects on real drain; preserves all original fallback, memory ordering and cache locks. Source validator
check-ps5-large-descriptor-preflight.pyhost-compiles emitted C++ methods, verifies ordinary no-wait, exact-boundary real wait, cursor preservation and oversized fallback. Seedocs/PS5_R325_2026-10-11_LARGE_DESCRIPTOR_PREFLIGHT.md. - Do not claim it fixes FC27 stutter or texture corruption from source tests. No test console until native CI is green and current R324 baseline is kept safe.
2026-10-11 R326 — restore reference GPU handoff cadence on dev
- After R325 native All-On #38164168683 SUCCESS (24/24 steps, no release; app artifact 11711153966, symbols 11711418107), audited 1440p / 1x FC27 rendering: genuine FSR EASU/RCAS occurs in
present/layer.cppandpresent/fsr.cpp, so theMakeBilinearwindow composition switch does NOT mean FSR is absent; 1440p output still incurs a final driver-level 4K linear image blit. These are distinct visual stages, do not claim absent FSR. - R309 had enabled a speculative dev-only 64-draw Vulkan worker handoff (64/
dispatch_mask=63), based on non-FC27 experiments; shipping reference 8/mask=7. The five GPU-backpressure windows average ~22.6 FPS vs 29.5 in remaining windows, but this does not prove batching is the cause. Restore 8-draw dev default per title (mask=7), retain explicitdev-settings.txt dispatch_draws=64opt-in, 512-draw hard flush, all cache/fence correctness. Seedocs/PS5_R326_2026-10-11_DISPATCH_DEFAULT.md.
2026-10-11 R327 — Vulkan presentation layer destruction safety
- R326 restoration of reference 8-draw GPU worker handoff compiled and packaged on native PS5 workflow #38170426022, SUCCESS, 24 steps; test app artifact 11713923270; symbols 11713923282. R326 core regressions #38170379764 SUCCESS (9/9). This is not console-proven smoother FC27.
- Audited pinned
vk_blit_screen.cpp::BlitScreen::DrawToFrame: changingframebuffers.size()immediatelylayers.clear()while Vulkan GPU work may still reference prior layers' descriptor sets/FSR images. ExistingSetWindowAdaptPasspath already drains viaWaitIdle; frame count transition did not. R327 adds PS5-onlyif (!layers.empty()) WaitIdle(device)inside the change-of-count branch, before clear. Normal steady-count frames and first layer creation do not wait. Non-PS5 unaffected. tools/check-ps5-vulkan-layer-lifetime.pycompiles the exact generated PS5 branch with a fake GPU-busy resource owner; original code FAILS on 1→2 transition; corrected code PASS with no hazard at 1→2 or 2→0 and no extra wait on 1→1 / 0→1. Actual generated PS5vulkan_blit_screen.cppcross-target-fsyntax-onlypassed using priorcompile_commands.json. No graphics/FPS fix claim until hardware verification. See docs R327.
2026-10-11 R328 candidate — FXAA/SMAA GPU resources may be freed on framebuffer resize
- Canonical single development branch remains
dev/ps5-sparse-jit. Pinnedsrc/video_core/renderer_vulkan/present/layer.cppblob14935f92bb450973e85237fed52f8dea6d172688:Layer::RefreshResourcesdestroys oldanti_aliasvia variantemplacebefore waiting the previous raw-image tick;SetAntiAliasPassreplaces old FXAA/SMAA without an idle drain. The two AA implementations own Vulkan descriptor sets/framebuffers/pipelines and can have in-flight commands. R327 only secured a different path: changing the number of layers in BlitScreen. - Derived PS5-only
vulkan_present_layer.cppintools/prepare-vulkan-port.pynow callsscheduler.Finish()thendevice.GetLogical().WaitIdle()only when an existing AA pass would be destroyed by a framebuffer format/extent transition or an active AA mode switch. Original raw image wait still applies.headless/vulkan.cmakereplaces exactly the original layer unit. No frame-by-frame drain and no behavior change when no AA pass is active. - The host C++ fixture
tools/check-ps5-vulkan-aa-lifetime.pyuses SHA-pinned actual upstream methods plus generator edits: original resize FAIL (resource freed while GPU busy); patched resize + FXAA/SMAA swaps PASS; steady frames and no-AA creation have zero new full drains. Actual generated native sourcevulkan_present_layer.cppcross-target-fsyntax-onlyPASS. Documented indocs/PS5_R328_2026-10-11_VULKAN_AA_RESIZE_LIFETIME.md. Native CI gate must precede any console test or performance claim.
2026-10-11 R329 candidate — guest raw framebuffer stride-capacity mismatch
- Canonical
dev/ps5-sparse-jit, no new dev branch. Pinnedsrc/video_core/renderer_vulkan/present/layer.cppLayer::RefreshResourceschecked width/height/pixel format but notframebuffer.stride. The staging capacity and per-image offsets usestride*height*bpp, and pinnedvulkan_memory_allocator.cppwraps exactlyci.sizebytes inBuffer::Mapped(). Thus a pitch change with identical width/height can reuse an undersized staging span and makesubspan(offset,length)exceed the allocation, a provable guest presentation fault. It is NOT yet proven to occur in FC27's current PS5 log. - R329 adds one comparison
buffer.Mapped().size() == CalculateBufferSize(framebuffer)in PS5-only generatorvulkan_present_layer.cppreuse test; no extra header/ABI fields, per-frame waits, overrides, buffer growth or changes outside PS5 Vulkan. On size change it takes the existing R328 guarded allocation path. - Host
tools/check-ps5-vulkan-stride-reallocation.pySHA-verifies pinned C++ (blob14935f92bb450973e85237fed52f8dea6d172688), applies all three exact production patches, compiles/runs realLayer::RefreshResourcestesting steady, pitch increase/decrease, resize, format change: original FAIL increase-stride; corrected PASS. PS5 cross-target-fsyntax-onlygenerated Vulkan layer PASS, R327/R328 compatibility host tests PASS. Documenteddocs/PS5_R329_2026-10-11_VULKAN_FRAMEBUFFER_STRIDE.md. - Most recent fully qualified native build R328 #38171650717 SUCCESS 24/24, source CI #38171608215 SUCCESS 9/9, PS5 All-On app artifact 11714296868. Do not claim improved FC27 motion, HUD, grass fidelity or 30fps pacing without console evidence.
2026-10-11 R330 — optimize R329 pitch change without new full-GPU waits
- R329's correct Vulkan raw upload staging-size guard initially caused a full R328 antialias destroy/recreate +
vkDeviceWaitIdle()when only framebufferstridechanged at fixed width/height/format. With FC27's FXAA this could add stutters if row pitch varies between buffers. R330 ensures stride-only changes wait just the priorresource_ticks(asReleaseRawImagesalready does), replace only theMemoryUsage::Uploadstaging buffer viaCreateStagingBuffer, and return with AA/FSR and existing raw image descriptors intact. Real resize/format changes continue through the R328 device drain. Unchanged frames remain no-op. - Exact SHA-pinned C++ regression in
tools/check-ps5-vulkan-stride-reallocation.pytests AA variant preserved, 3 GPU tick waits per changed pitch, zero full-GPU idle on pitch-only changes, full idle on actual height changes, no work on stable pitch, original Eden baseline FAIL on larger stride. Generatedvulkan_present_layer.cppPS5 cross-target-fsyntax-onlyPASS, existing R328 AA tests PASS. Seedocs/PS5_R330_2026-10-11_STRIDE_FASTPATH.md. No hardware proof claimed; keep single branchdev/ps5-sparse-jitand cancel superseded builds before expensive compilation.
2026-10-11 R331 candidate — raw Vulkan ImageView must die before VkImage
- Canonical branch
dev/ps5-sparse-jit, original pinnedsrc/video_core/renderer_vulkan/present/layer.cppblob14935f92bb450973e85237fed52f8dea6d172688:CreateRawImages()pairs araw_image_views[i]Vulkan handle toraw_images[i];ReleaseRawImages()waitsresource_ticksthen clearsraw_imagesbeforeraw_image_views, so backed VkImageViews remain live after their image objects have been destroyed. Full resize and layer shutdown can hit this, independently of R327–R330. - R331 PS5-only generated adapter adds
raw_image_views.clear()after the existing tick waits and beforeraw_images.clear()inReleaseRawImages. No new GPU wait; no changes to fixed-size upload fast path R330. tools/check-ps5-vulkan-raw-view-lifetime.pySHA-verifies pinned source, replays all four exact generator patches, host-compiles/runs actual ReleaseRawImages C++ with mock RAII dependent objects: original FAIL (live view while image freed), corrected PASS (all views released first, 3 tick waits before release, repeat cleanup); R328 AA + R330 staging fixtures PASS. Seedocs/PS5_R331_2026-10-11_VULKAN_RAW_VIEW_LIFETIME.md. No claim that this fixes FC27's HUD or grass on PS5 before console evidence.
2026-10-11 R332 — FC27 control menu freeze with ongoing render frames
- PS5 FTP
/data/prosperoeden/logs/heap.logandstderr.logcaptured in/tmp/eden-freeze-fc27-20261011/: user stuck on FC27 remapping menu, cannot assign Square/Triangle. 1440p output, 1× game, FXAA;EDEN_PAD_MAPPING_FIXEDphysical Cross→guest A, Circle→B, Square→X, Triangle→Y. Latest five-second samples kept 30.0 FPS, no late50 or GPU full queue, ~36,750 draws, ~6,000 IPC, suggesting an input/game-state freeze rather than the earlier in-match saturated GPU queue; identical pixel content remains unproven. - Discovered
pad.cppnative compile has no EDEN_DEV_PROFILE, so its EDEN_PAD_EVENT source is absent from the binary; lack of events in old stderr proves nothing. R332 PS5EDEN_PAD_HEARTBEAT(only if NativeLogs::Detailed, once per 1,250 Pad::Poll iterations) records cumulative scePadRead samples/errors, raw bitmap, physical Cross/Circle/Square/Triangle rising edges, connected status and guest X/Y mappings without changing gameplay input. Uses new purepad_diagnostics.h; host C++ replay and real PS5 pad C++ syntax PASS. Both CI workflows include test. See docsPS5_R332_2026-10-11_FC27_MENU_FREEZE_INPUT.md. Do not claim FC27 freeze fixed until observed with this evidence.
2026-10-11 R333 candidate — native GPU queue was 8 entries, not upstream 4096
- Found hardcoded
headless/CMakeLists.txtrewrite from upstreamCommon::SPSCQueue<CommandDataContainer>(default capacity 0x1000 = 4096) to 8 for native PS5. Previously saying the actual runtime queued 4096 was incorrect. In a 175×5-second FC27 game session 36 windows withgpu_full_ms>0contain 950/1035 late50 events, r≈0.82, while menu freeze stays at 30 FPS withgpu_full_ms=0; these are distinct phenomena. Waiting cumulative time does not explain every long frame. - R333 raises ONLY PS5 native command queue budget 8→32 (small bounded burst, not blind return to 4096). FIFO, stop-aware blocking waits, fences and all guest processing unchanged; non-PS5 port remains 8. Existing host fixture extends to 32 slots with full/wake/FIFO, static quiet-path tests assert 32. CI Ubuntu and native PS5 compilation required; Mac-local C++ stop_token and x86 pause unit fixtures blocked by platform toolchain, do not claim local pass.
- No claim FC27 stutters, freeze or pixelation are fixed. No demand for further PS5 testing until source-side blockers are exhausted. See
docs/PS5_R333_2026-10-11_GPU_QUEUE_BURST_BUDGET.md.
2026-10-12 R334 — Vulkan presentation frame rebuild resource lifetime
- Pinned
src/video_core/renderer_vulkan/vk_present_manager.cppblob3491f8fb7563f2557a476fec8edb4f220f5d27fc, independent of R331:PresentManager::RecreateFrame()replacedframe->imagewhileframe->framebuffer,frame->storage_viewandframe->image_viewstill retained handles backed by that old image. Also replaced the image view while its old framebuffer still existed; Vulkan object lifetime violation during presentation framebuffer reconstruction. - R334 PS5-only source-gen frees old
VkFramebufferthen old storage/image VkImageViews before overwriting VkImage; removes redundant late storage_view reset. Existing upstreamBlitScreen::PrepareFramecallsWaitIdle(device)before reconstruction; no new per-frame waits.tools/check-ps5-vulkan-present-frame-lifetime.pySHA-verifies pinned exact source, replays generator, checks dependency order, runs C++ RAII host failure-on-old/pass-on-new negative control. Exact generated native Vulkan sourcex86_64-sie-ps5 -fsyntax-onlyPASS, R316 copy/blit and Vulkan source-replay fixtures PASS, local and remote source replay PASS. Source CI/native build still required; no evidence that it fixes FC27 stutter/menu freeze or HUD until console qualification. Seedocs/PS5_R334_2026-10-12_VULKAN_PRESENT_RECREATE_LIFETIME.md.
2026-10-12 R335 — prevent permanent Vulkan surface-loss retries
- Source-level liveness bug: pinned
vk_present_manager.cppPresentManager::CopyToSwapchaincatchesVK_ERROR_SURFACE_LOST_KHRinsidewhile(true)and can recreate repeatedly forever on a permanently unavailable surface, monopolizing the present thread and withholding frame handoff. This is distinct from the FC27 30-FPS live-render menu freeze, whose cause remains unresolved. - Upstream Eden 2026-10-08 commit
3cdd2ce141224079ce1dc8bfb4be7edc113aca02(#4509) fixes retries. R335 source generator backports onlyMAX_PRESENT_ATTEMPTS=3, bounded retry,DiscardFrame(empty graphics submit consumes frame render_ready semaphore and signals present_done under submit mutex), and the associated method declaration. Other Android renderer default changes are deliberately excluded. - New source-sha-pinned replay + host compiled actual body
tools/check-ps5-vulkan-present-retry-liveness.py: original FAIL after 4 surface loss events (exceeds desired bound); R335 PASS 3 attempts/1 frame discard, 2 losses then success, 0 losses success; checks real semaphore/fence abandon. Full generated production Vulkan C++ x86_64-sie-ps5-fsyntax-onlyPASS. Two existing CI workflow gates updated. No claim user freeze, HUD or grass pixelation solved. See docsPS5_R335_2026-10-12_VULKAN_SURFACE_LOST_BOUNDED_RETRY.md.
2026-10-12 R336 candidate — PS5 Vulkan swapchain metadata race between GPU and presenter
- R335 confirms the upstream October 8
#4509native Vulkan present bounded retries. Same upstream commit also exposes a concurrency hazard: our PS5 Vulkan runs async presentation, butRendererVulkan::Compositedirectly reads non-atomicswapchain.GetImageCount/GetImageViewFormat/GetImageFormatwhile present thread canRecreateSwapchain()and mutate them.PresentManager::image_countis also read/written across those threads. This is source-level undefined-behavior race, not proven cause of FC27 menu freeze/stutter. - R336 local PS5 generator now backports upstream atomics for frame count, published swapchain image count and image format, plus view format snapshot to cover both
RendererVulkan::Compositeand native PS5vulkan_loading.inc, the latter had an additional direct count/view-format read.tools/check-ps5-vulkan-swapchain-snapshot.pyexact pinned source generator replay + two-thread C++ fixture passes; generated PS5 present manager and renderer each-fsyntax-onlypass. Both source/PS5 CI gates registered. Do not push while R335 native workflow builds due to GitHub concurrency auto-cancellation. No user test requested. Seedocs/PS5_R336_2026-10-12_VULKAN_SWAPCHAIN_SNAPSHOT_RACE.md.
2026-10-12 R337 candidate — secondary Vulkan present infinite acquisition-recreation loop
-
After R335 capped outer surface-loss recovery, found another unbounded
while(swapchain.AcquireNextImage()) { RecreateSwapchain(frame); }insidePresentManager::CopyToSwapchainImpl.Swapchain::AcquireNextImage()returns true on every VK_SUBOPTIMAL_KHR / VK_ERROR_OUT_OF_DATE_KHR, andSwapchain::Create()resets status flags. A driver/surface repeatedly returning stale/suboptimal can keep the Vulkan present worker recreating forever, starving frame handoff; outer retry bound does not apply until inner returns. -
Local R337 PS5 generator allows 3 acquisitions / 2 internal recreates, then throws VK_ERROR_SURFACE_LOST_KHR into existing R335 finite retry/fence discard. Healthy and 2-transient recoveries unchanged.
tools/check-ps5-vulkan-swapchain-acquire-bounds.pypins original source SHA and host compiles actual old/new loop to reproduce >16 retries in old and bounded 3 in new; generated native PS5 Vulkan cpp-fsyntax-onlyPASS. Both CI workflow gates added. Do not claim FC27 freeze or stutter resolved. Keep local until R336 native workflow completes, to avoid GitHubcancel-in-progresscancellation. See docs R337. -
FC27 30fps menu-freeze diagnostic qualification: pinned Vulkan
RendererVulkan::Composite()incrementsrender_window.OnFrameDisplayed()via SCOPE_EXIT on GPU thread before async presentCopyToSwapchain/Swapchain::Present.EDEN_VULKAN_FRAMEtracks composition cadence, not confirmed unique images shown on the TV. Earlier statements that 30 distinct frames were presented during freeze were not proven. This refines, but does not reverse, observed continuing guest/HLE + GPU draw work. Disambiguate compositor,vkQueuePresentKHR, and image identity on future root-cause work.
2026-10-12 R338 — original Mihawk PS5_Vulkan/Mesa baseline audit
-
User provided https://github.com/mihawk-99/PS5_Vulkan/tree/main asking to audit its missing capabilities; audited README, RADV_PHASE, CTS_GAPS, HARDWARE_FINDINGS, current and pinned build-radv.sh, pinned Mesa
radv_ps5_platform.c,mesa_cache_db.c,radv_threaded_layer.c, and compared manifests. Ourtools/deps.jsonalready pins Mihawk's RADV (Vulkan tools3f3ee696, Mesa0b2d6d1a, SDK fork95c08f27) and native final check excludes ps5vk. Current PS5_Vulkan main is 18 ahead; PS5_Mesa main diverged (110 ahead/103 behind), so no blind bump. Pinned Mesa already implementsclflushopt, asyncradv_ps5_kick_body,radv_ps5_submit_timesand exclusive Mesa DB shader cache; opt-inRADV_THREADED_RECORDINGexists but should not be defaulted on, as upstream warns. True async compute queue remains not supported; compute/transfer families run on graphics ring. Mihawk's per-frame cache flush and blit win benchmarks mostly concern old ps5vk, not RADV. Our actual 1440 output is scaled into physical 4K VideoOut perdisplay_refresh.h. 30 compositing callbacks/s does NOT imply 30 distinct physically displayed images. Seedocs/PS5_R338_2026-10-12_MIHAWK_RADV_BASELINE_AUDIT.md; source-only gatetools/check-ps5-mihawk-radv-contract.py. No FC27 console test requested, and no claim FC27 stutter/grass/HUD/menu freeze fixed. -
R338 additional evidence from the same FC27 menu freeze session
/tmp/eden-freeze-fc27-20261011/stderr.log: 37radv/ps5 submissions: windowlines already exist, count=37,376 submitted commands; cumulative claim_ms=87.0, copy_ms=116.1, flush_ms=70.3, agc_ms=646.1, suspend_ms=2069.3, suspend about 0.05536 ms/submit;suspendexecutes on RADV background kick thread (pinnedradv_ps5_platform.c), not directly 2 s of guest CPU blocking. This materially weakens a gross per-submit CPU flush bottleneck diagnosis. Never conflate 37 × ~10s RADV stderr samples from freeze with 175 × 5s heap samples of an older session. See R338 audit docs.
2026-10-12 — All pinned build inputs vendored into Eden Encore (source autonomy)
- User explicitly requested all frozen dependencies directly in the Eden Encore repository, disregarding initial clone size, for full-source analysis and survival if upstream repos disappear. Therefore new
vendor/sources/<name>/contains complete directly browsable upstream trees (Eden, FFmpeg, fmt, HarfBuzz, zbic, PS5 OpenGL, boilerplate, Mihawk PS5_Vulkan, PS5_Mesa, PS5_PayloadSDK and 8 pinned compiler-rt files); all original licences/notices retained.vendor/objects/<name>/stores original tarballs, immutable shallow original-SHA Git object packs and precompiled pacbrew SDK as SHA256-indexed 40 MiB chunks under GitHub's individual file limit. Additionally vendor bootstrap zlib 1.3.2 source + tarball and binary payload-sdk v0.42 zip, both pinned by checksum; upstream bootstrap had a previously hidden download. tools/deps.pynow prefers vendored source trees for archives using symlinks to existing CMake.depspaths, assembles pinned binary packages from SHA-verified chunks, and reconstitutes exact upstream commits from the bundle object pack + explicit shallow boundary for Git 2.15 (ordinarygit fetch bundlefrom a shallow bundle fails due to missing ancestor and is not adequate).PROSPEROEDEN_DEPS_OFFLINE=1rejects missing network payloads. CI contracts verify blobs, manifests and pinned commits. Existing build-time Vulkan/RADV source adaptation scripts are preserved temporarily to avoid destabilizing FC27; they can now be folded into versioned vendored trees in isolated changes; do not claim overlays completely removed yet.- Source copies are large (~1.4 GiB vendored) by explicit user preference, no LFS/submodules required; all individual stored object files <=40MiB. First full clone cost accepted. No claim fixes FC27 menu freeze/stuttering/textures; source integration and driver performance investigations remain separate.
2026-10-12 R340 — immutable vendored sources and Eden archive restoration
- The first R339 offline refactor was audited against
tools/prepare-build.sh: it still requires.deps/eden-5f142c79.tar.gzto refresh/extract its mutable scratch Eden source. Materialized vendor source directories alone were insufficient, and symlinks from.depsintovendor/sourcesrisked build-time FFmpeg generation or backports altering tracked originals. R340tools/deps.pyaddsensure_saved_archivefor all manifest archives withsave(Eden and fmt), reconstructing and validating original tarballs from chunked source blobs. It usesshutil.copytreeof immutable readable vendor source trees into mutable.depsworking directories, never symlinking to canonical source. Source integrity remains versioned in Git. Local tests without network: Eden 11MiB tar and fmt tar restored correctly, 67MiB Eden source and 110MiB FFmpeg source copied without touching vendor, compiler-rt and HarfBuzz isolated, Git original SHA preserved. Newtools/check-vendored-deps.pyperforms a clean temp-cache/no-network hydration test of Eden tar, fmt, LLVM source, zbic Git SHA and SDK ZIP (no console needed).
2026-10-12 R342 (local only while R341 builds) — Versioned active Vulkan source fork
- User explicitly corrected the R339/R341 vendoring approach: pristine upstream source copies without our modifications included are insufficient. A complete fork requires active modified code directly in the repo and used by CMake, not only string rewrites applied to borrowed upstream code at configure time.
- Materialized 39 actual generated Vulkan source/header translation units into
vendor/encore-active/eden-vulkan/by running currenttools/prepare-vulkan-port.pyon the pinned readablevendor/sources/eden(maintains original upstream snapshot).headless/vulkan.cmakenowfile(COPY)from this checked-in active Vulkan fork to the mutable build dir rather than calling the generator on every CMake configure. The existing generator remains as compatibility equivalence/patch-diff oracle while gradual migration proceeds.tools/check-vendored-vulkan-fork.pyreplays all exact generator patches into a tempdir, asserts byte-for-byte equality and 39-file parity, and checks CMake selects tracked fork; both source and native CI are wired. Local test PASS. This covers the C++ Vulkan fork ONLY, not the hugeheadless/CMakeLists.txtderived GPU/HLE patches ortools/patch-radv-wsi.pyMesa RADV WSI/driver modifications; these need subsequent migration. No FC27 claim and no console test requested.
2026-10-12 R343 — full patched RADV/VideoOut source files, build generator disabled
- R341 native offline GitHub PS5 run
38183485450passed 24/24 and produced native app archive, so we can publish the pending R342 active-Vulkan fork without interrupting it. - User requested our modifications applied inside the repo too, not just pristine third-party dependency source; R342 materialized and versioned 39 exact generated Vulkan translation units at
vendor/encore-active/eden-vulkan, and CMake nowfile(COPY ...)uses them directly instead of invokingprepare-vulkan-port.pyduring configure. Generated-source byte-equivalence fixture passes against pinned Eden original. - R343 materializes 5 full pinned-Mesa PS5 patch translations in
vendor/encore-active/ps5-mesa: VideoOut WSI lifecycle + 120Hz logic, host memory protection, physical device and win-sys initialization, unchanged radv_cmd_buffer.tools/build-radv-dependencies.shno longer callspatch-radv-wsi.pyin production: it copies these exact files into disposable Mesa build worktree using fail-closedtools/install-vendored-radv.py, then runs incremental native RADV.patch-radv-wsi.pyis only a--oracle/--checksource-equivalence diagnostic, andtools/check-vendored-radv-fork.pyrecompares exact historical patched files + idempotent/conflict-safe installer. Source and native preflight both run these. Prior archive receiptEDEN_WSI_SHA256preserved. Both original Mesa/Eden vendored trees unchanged. Remaining dynamic CPU/JIT/GPU/HLE transformations in headless/CMakeLists.txt are NOT yet materialized; this is a staged migration, not an assertion that all runtime overrides vanished. No FC27 console test or performance fix claim.
2026-10-12 R345 — native PS5 GPU worker becomes maintained source, not CMake replacement text
- Derived four complete GPU sources from exact old PS5 CMake transforms against immutable pinned
vendor/sources/eden:vendor/encore-active/eden-gpu/{gpu_thread_quiet.cpp,gpu_thread_dev.cpp,include/video_core/gpu_thread.h,include/common/bounded_threadsafe_queue.h}. Old absolute Mac/CI include prefixes canonicalized to portable names already resolvable by video_coreheadlessinclude path. Native PS5 CMake now chooses quiet/dev worker variant explicitly andconfigure_file(COPYONLY)all sources. Original long string-replace code is bypassed on PS5 and retained in non-native/legacy else path; the independenttools/check-vendored-gpu-thread.pyactually extracts and runs both legacy source-generation modes plus the real new native CMake source-selection branch and byte-compares all resulting compiler inputs. Local host CMake source tests PASS, but full PS5 native compile CI needed. - Earlier R344 source CI
38184495836failed becausetools/check-vulkan-shader-workers.pystill asserted the now-removed Mac-local absoluteperformance.hgenerator interpolation. R345 updates only the stale source assertion to require portable#include "performance.h"; local source worker policy and GPU tests pass. R344 native build38184508459in progress at staging time; avoid pushing R345 until its workflow completes to prevent automatic build cancellation. No FC27 console test requested. See docs R345.
2026-10-12 R346–R347 — complete game overrides and 43 active Eden backports
- User asked whether all mods and overrides, including
niakw/encore-overrides, were truly integrated. Audit found Encore header pinned old override SHA0afb14f3whileencore-overridescurrent exact SHA was4fdb329e732a71878c1936b24759e58937c1ac18, with 9,008 files / 8,993 JSON game profiles (~33.7MB). Complete repo now invendor/sources/encore-overrides+ chunked original Git packvendor/objects/encore-overrides; added to 13-entrytools/deps.json.tools/sync-encore-overrides.pynow uses VENDOR-ORIGIN SHA instead of incorrectly resolving parent Eden git HEAD; regenerated header has same 4 tiers and only 1 special FC27 profile (not 8,993 unique game tunings). Exact offline catalog/header/glyph/controls schema fixturetools/check-vendored-overrides.py. Upstreamruntime-manifest.jsonactually absent; no unconditional boot request; optionalEDEN_OVERRIDES_REMOTE_REFRESH=1remains for future. Local test PASS. - R345 PS5 native run
38184898869FAILED atvk_buffer_cache_cost.cpp:427:BufferCacheRuntime::KnownGpuTick()definition no declaration. Source-level root cause: R342 versioned Vulkan generated from pristinevendor/sources/eden, whereas actual native build previously executed the 43 shipping Eden backport patches first and removedKnownGpuTick(). Also lost recentvulkan-cache/video_core/texture_cache/texture_cache.hPS5 adjacent-view patch. R347 replays defaulttools/apply-eden-backports.shagainst pristine pinned Eden (experimental 3 flags OFF), yielding 80 modified + 3 new = 83 complete patched source files, 43 SHA receipts. Materialized intovendor/encore-active/eden-backports.tools/install-vendored-eden-backports.pynow installs entire versioned files into mutable build tree with exact pristine/modified SHA verification, preserving original receipts;tools/prepare-build.shdoesn't dynamically apply the 43 patches on normal builds. The old script is retained exclusively for independent--replayequality test and explicit experimental opt-in. Vulkan versioned fork was regenerated from patched stage and two previously mismatched files updated; native PS5 clang -fsyntax-only on correctedvk_buffer_cache_cost.cppPASS.tools/check-vendored-vulkan-fork.pynow stages original Eden then installs 83 shipping backport files first before generating 39 Vulkan compiler inputs; exact equality regression PASS. Not yet final native CI/hardware proof. Other CMake transforms still need migration. See docs R347.
2026-10-12 R348 — full PS5 OpenGL mandatory transitive dependency source closure
- After R347 integrated 43 Eden source patches and 8,993 overrides, audited hidden downstream
PS5_OpenGL/tools/fetch-sources.pywhich downloads seven additional Git repos (opengnm-psbc, opengnm, SPIRV-Headers, Vulkan-Headers, imgui, nanovg, sokol), separate OpenGL boilerplate4f531c4b, and Mesa 26.2 tarball SHAefd4bb08.... Original top-level manifest omitted them; nowtools/deps.jsonexpanded 13 to 22 entries, each pinned at exact upstreamdependencies.jsonrevision. Complete directly browsable code treesvendor/sources/opengl-*and Git object packsvendor/objects/opengl-*, original Mesa 26.2 source 12,812 files ~387MB and tarball bytes. Newtools/stage-vendored-opengl-deps.pypre-seeds the upstream's disposablethird_partyand build template with source, Mesa tar, exact native boilerplate, SHA-verified PS5 SDK ZIP and zlib tar to prevent bootstrap internet;build-opengl-sdk.shcalls stage before original fetcher. Actual isolated fresh staging and original OpenGL fetch-sources.py run passed with PROSPEROEDEN_DEPS_OFFLINE=1, HTTP(S) proxies pointing to unreachable 127.0.0.1:9, GIT_ALLOW_PROTOCOL=file; upstream verified complete PSBC patched-tree and seven repos + Mesa tar without network. Source-onlytools/check-vendored-opengl-deps.pyintegrated into both CIs. Optional VK-GL-CTS and sokol-samples not used in production; Eden CPM + other Meson wrap inputs not yet fully audited, so never claim full end-to-end clean-cache native offline build. R347 CI 38185886361 was green 9/9, native 38185900156 started; R348 not yet native qualified.
2026-10-12 R349 — entire actually populated PS5 CPM source cache vendored
- Audited pinned
vendor/sources/eden/cpmfile.json: 42 package entries across all platforms/tests, but the actual cached PS5 native build had 22 source package/version trees, total ~1 GiB and 77,011 regular source files (plus symlinks; ~866 MB regular file bytes). Full trees invendor/sources/eden-cpm/<package>/<version>to satisfy user's explicit preference for all actual sources directly inspectable in Git despite huge first clone. Lock filevendor/sources/eden-cpm/VENDOR-CPM-LOCK.jsonrecords pinned Eden SHA, hash of cpmfile, exact upstream package repo/version/SHA512, deterministic content SHA256 for every package including symlinks and all bytes, and lists all 20 unfetched/irrelevant platform/test entries. Root.gitattributes -textfor path ensures preserved original EOL.tools/vendor-eden-cpm.py --checkverifies all source content;--stage EDEN_SCRATCHcopies missing source version dirs into ordinary mutable.cache/cpmwith no network;tools/prepare-build.shpre-seeds after optional cache seed before FFmpeg/CMake, preserving existing incremental caches.--captureis manual version-update operation. CI source/native gates include content check. Original compressed CPM archives weren't all in cache, so only original fully unpacked source trees are preserved, not guaranteed original tar bytes; Meson other transitive inputs and a full network-blocked clean native compile remain separate. R348 38186664556 passed 24/24 before R349 integration; R349 native build must be run after publication.
R349 original EOL audit: 69 normalized CRLF files of 77017 paths; 45849-byte original archive in vendor/objects/eden-cpm-eol-originals.tar.gz; tools/vendor-eden-cpm.py restores original bytes from archival sidecar.
2026-10-12 R350 — FC27 forensic GPU queue analysis (old PS5 logs, no speculative runtime patch)
- R349 native run 38188671291 confirmed SUCCESS 24/24, artifacts all-on-test and all-on-symbols; source run 38188650783 SUCCESS 9/9. Complete 22-package PS5 CPM cache source vendoring and 69-original-CRLF recovery compiled on GitHub. The subsequent README-only correction
e30e6eapreserves the full original-byte note. - Re-fetched the existing Oct 11 PS5 FTP logs via Mac: `heap.prev.log` (4,276,543 bytes, longer FC27 gameplay), `heap.log` (968,955 bytes, later menu freeze) and stderr counterparts. No new user test, and these are not measurements of R349!
- Reproducible standalone stdlib forensic parser `tools/analyze-fc27-stutter.py` (self-test included) cross-links `EDEN_VULKAN_FRAME`, `EDEN_FRAME_PRESSURE` and `EDEN_DEV_GPU` 5s windows by exact frame number and reports cache-phase totals/correlations. Gameplay: 175 windows, mean displayed 28.37 FPS, 1,035 frames >50ms, 36 windows with full emulated GPU producer queue accounting for 950/1,035 late intervals (91.8%), queue wait only 2.179 sec in total, worker idle time 75%. Five-second correlation late50 vs full queue ms 0.821, dispatch count ~0.579, JIT ms -0.018, graphics pipeline configure ~0.230, pair-held ~0.184, guest cache lock wait ~0.16. Hardware GPU utilization cannot be inferred from the emulated GPU worker's idle fraction. Producer queue is 32 on current PS5 GPU fork, not original generic 4096. The observed queue-full bursts are a strong marker but total blocked time does not explain every late frame (likely bursty scheduling/command delivery).
- Separate menu freeze log: 104 windows, mean displayed FPS 29.86, zero queue-full windows, producer queue wait 0, GPU worker idle 92%, while image visibly frozen/user couldn't rebind Square/Triangle. Do not conflate a renderer present heartbeat with guest UI progress.
- Full quantitative analysis, code paths and acceptance criteria recorded in `docs/PS5_R350_2026-10-12_FC27_GPU_STUTTER_FORENSICS.md`. Source CI executes analyzer self-test. Explicitly no FC27 graphics, freeze or stutter performance fix claimed by R350; before a future console test identify ordering-safe producer/consumer root cause and keep menu freeze separately tracked.
2026-10-12 R351 — FC27 Binder/BufferQueue forensic attribution, source-only CI guard
- R349 native build
38188671291and source38188650783both SUCCESS (24/24 and 9/9). R350 FC27 offline trace analyzertools/analyze-fc27-stutter.pyself-tested and source CI SUCCESS. R351 adds per-service monotonic HLE deltas to that analyzer and contrasts guest buffer dequeue timers with actual outerIHOSBinderDriver cmd=3(TransactParcelAuto) counters. Old PS5 menu trace (104 × ~5s): 294.96s guest dequeue, 292.64s Binder command 3, 0s producer queue full. Old match trace (175 × ~5s): 118.91s dequeue, 116.51s Binder, 2.179s producer full with 950/1035 late50 frames clustered in 36 full-queue windows. Note: Binder cmd=3 is the OUTER wrapper, and includes multiple inner transactions. Accumulated wait time can reflect intentional 30-FPS back-pressure; this is not proof of any hard deadlock. Static 30FPS presentation cannot prove guest input/UI progression. Detailed source lifecycle inspection:BufferQueueProducer::DequeueBufferwaits for consumer slot release;BufferQueueCorehas epoch notify_all wake patch;HardwareComposer::ComposeLockedwaits for previous composite then returns acquired slots, which must preserve GPU ordering. - No high-confidence safe runtime fix yet for FC27 match stutters or frozen input menu. Do not loosen guest synchronization or disable presentation fences on guesswork. R351 makes
tools/check-nvnflinger-dequeue-wakeup.pydefault to actual fully vendored 43-backport code and runs its 100 two-producer wakeups in source CI, preserving correct order. Also replaced last needless upstream HTTP fetch intools/check-guest-backport-replay-host.pywith byte-exact locally pinned Eden original (original Git blob SHA retained); source CI still replays the five guest-memory patches. Source test green status must be checked for newest R351 push; no extra PS5 install requested. Desktop Commander at 90% of monthly quota and no further remote calls should be made unless indispensable.
2026-10-12 R360 — R359 PS5 findings, SMT and Vulkan descriptor ring stall isolation
- PROVENANCE CORRECTION R367: FC27 FTP traces formerly called a direct R359 A/B were from binaries compiled Oct 12 2026 01:29:32 (boot-trace.prev.txt) and 03:18:21 (boot-trace.txt); definitive R359 commit
52a782f1dwas authored 2026-10-12 03:52:15 UTC, AFTER the last binary. Therefore the 598 >50ms / 38 >100ms long frames, 627/s to 484/s contention comparison and ~87.2 to 62.2/min rate MUST NOT be represented as measured R359 improvements. Their cache/frame correlations and the user's subjective improvement remain valid for the sessions actually observed, but exact compiled commit SHA is unknown. R359 physical SMT fix was not hardware qualified by these older logs. - Last original dev commit
52a782f1dadds optional read-only FreeBSD scheduler SMT topology evidence when firmware CPUID fails. Source CI 38201473764 and native build 38201473730: SUCCESS. That is build validation only, not proof of FC27 stability on hardware. - Code audit found a distinct under-cache-lock stall: when the final native per-frame descriptor-buffer ring chunk exhausts, DescriptorBufferRing::Allocate calls scheduler.Finish while RasterizerVulkan::PrepareDraw holds both buffer_cache.mutex and texture_cache.mutex. Prior R323 PreflightFrameReuse handles only the old-frame reuse wait, not the final chunk exhaustion. Existing VulkanTimer(10) merges these causes.
- R360 adds only a dedicated DescriptorRingFinish phase timer/count for the actual rare fallback under detailed logging. The timer is absent from quiet hot paths, never alters the original fence/descriptor generation or both cache lock lifetimes, and is mirrored in the checked-in active source and source-generation oracle. This is a hypothesis test, NOT a fix or a measured FC27 improvement. Do not replace Finish with Flush or release cache mutexes without proving descriptor/resource lifetimes. A later detailed trace can distinguish rare descriptor exhaustion from subsequently added phase timings for texture views, buffer updates and target setup; no further PS5 user test requested yet.
2026-10-12 R363 — guaranteed-only native descriptor ring pre-drain
- Audit of exact compiled sources found that DescriptorBufferRing::Allocate can exhaust the last frame chunk and call scheduler.Finish() inside RasterizerVulkan::PrepareDraw paired buffer/texture mutexes. R323 only moved frame-reuse Wait; R360 only counted the late Finish. Old October 11 cached logs show no explicit exhaustion message, so rate of the older test binary incidence is UNKNOWN (DEBUG logging may omit it). Not a proven FC27 root cause.
- R363 moves that existing full-ring Finish to BEFORE both cache locks only when a GraphicsPipeline has descriptor-buffer enabled, cached allocation generation or payload count differs (thus new allocation is guaranteed if Configure reaches it), descriptor size is valid and the final ring chunk is insufficient. No preflight when payload may be reused; Allocate retains its original guarded Finish fallback. After preflight, flush guest caching and reselect pipeline.
- PreflightCapacity performs the original scheduler.Finish before reusing the ring, resets cursor/chunk and increments generation. Maintained native sources and pinned-source generator must remain byte-equal. Host source-extracted C++ regression checks no extra Finish on normal frames, exact fit, another chunk, reusable payload, disabled extension, pending frame recycle or oversized request; verifies one outside-lock completion and generation invalidation.
- DescriptorRingPreflight versus DescriptorRingFinish sample counters distinguish the moved wait from under-lock fallback; only detailed diagnostics on actual rare waits pay timer cost. Quiet normal draw paths are unchanged.
- Source-only qualification pending native CI and PS5 game validation. Do not claim fixed FC27 stutter, texture/HUD issues or input/menu freeze; other buffer/texture cache waits still exist, and no fences were removed.
2026-10-12 R364 — FTP FC27 detailed attribution and separate cache domains
- Re-fetched actual PS5 FTP logs through the authorized Mac from 192.168.1.209:2121 (/data/prosperoeden/logs), copied to /private/tmp/eden-r363-ftp-audit. Freshest console log Oct 12 03:33, preceding R363 native compilation: NEVER call this a runtime performance measurement of R363. FTP provided heap.log (1,113,464 B), heap.prev.log (3,042,472 B), stderr.log (36,881 B), stderr.prev.log (297,580 B), both boot traces, result.tsv and network-accepted.log.
- Latest log: 115 5s windows, mean FPS 28.47, 598 frames >50ms, 38 >100ms, zero full GPU queue; preceding 210 windows: mean 28.01 FPS, 1,535 frames >50ms. On latest 79 near-30 FPS windows, 1,250 guest cache collisions and 41.38ms aggregate guest blocking per window versus 17 sub25 FPS windows with 8,488 collisions and 156.59ms guest blocking. Sampled pair-held time per draw nearly identical (8.77us near30 vs 8.68us sub25), suggesting contention frequency rather than gross per-draw Configure slowdown. Still correlation, not proof of cause.
- Current installed logs show EDEN_WORKER_TOPOLOGY ready=0, so later R359 scheduler SMT fix is not yet console-qualified. R363 source CI 38239408902 and native PS5 CI 38239408799 both SUCCESS, but no console measurement.
- R364 adds per-domain guest cache contention and wait accounting for texture vs buffer, strictly inside existing detailed logging, while quiet-mode lock behavior/ordering and GPU ownership stay untouched. Five-second EDEN_GUEST_CACHE_DOMAIN lines include cumulative and per-window counters and elapsed ns. Versioned Vulkan C++ and generator oracle equality and extracted C++ regression are required. No independent FPS/texture/HUD/menu fix claimed. See docs/PS5_R364_2026-10-12_FC27_CACHE_DOMAIN_FORENSICS.md.
2026-10-12 R365 — FC27 offline parser supports R364 per-domain fields
- tools/analyze-fc27-stutter.py parses new EDEN_GUEST_CACHE_DOMAIN buffer/texture fields by exact frame, associates per-5s wait/block/contention deltas with late50 frame windows, and prints unavailable rather than a false zero for old October 12 FTP logs. Existing offline --self-test now covers both the R364 schema and old logs. This is a Python-only parser change with zero PS5 runtime overhead. Do not push R365 while R364 PS5 CI is building, because dev branch GitHub concurrency cancels the native build.
2026-10-12 R366 — old PS5 FTP FC27 CPU-write latency, not write volume, correlates with late frames
- New parser tools/analyze-fc27-stutter.py now pairs each cumulative EDEN_DEV_GUEST snapshot to the exact last EDEN_VULKAN_FRAME ID, only when that frame also has matching EDEN_FRAME_PRESSURE and EDEN_DEV_GPU; takes nonnegative deltas for cpu_write_calls/ns and cpu_read_calls/ns, keeps original R365 buffer/texture-domain attribution and legacy no-guest/no-domain support. R366 --self-test verifies both.
- Real already-fetched and dated pre-R363 PS5 FTP: later heap.log (115 matched ~5s windows) near30 79 windows: mean 52,105 guest CPU write callbacks/5s, 49.93 ms callback time, 1,250 cache collisions, 41.38 ms guest lock wait. Slow under25 17 windows: mean 50,851 callbacks/5s, 209.79 ms callback time, 8,488 collisions, 156.59 ms lock wait. Pearson late50 correlation write CALLS = +0.070, write wall TIME = +0.831, aggregate cache_wait_ms = +0.779. Earlier heap.prev.log (210 windows) near30 133: 54,962 writes, 51.51ms; slow under25 40: 48,778 writes, 222.18ms; late50 correlations write CALLS = -0.056, write TIME = +0.849, cache_wait_ms = +0.807. Independently repeatable window-level association, not proof of direct cause or attribution to buffer versus texture.
- Conclusion: increasing CPU-write operation count does NOT explain missed frames; time blocked during those calls (where the guest CPU locks contend with Vulkan Configure/Draw) is a more promising bottleneck than raw callback rate. This is consistent with R364 split domain measurements being necessary before changing scheduling or lock granularity. Never enable speculative cache_spin by default or remove Vulkan fences; no console tests requested. R365 source CI 38246685922 green. Details in docs/PS5_R364_2026-10-12_FC27_CACHE_DOMAIN_FORENSICS.md.
2026-10-12 R367 — correct FC27 FTP build provenance and workload-adjusted contention
- FTP boot-trace.txt from the last 115-window FC27 session says EXACTLY build=Oct 12 2026 03:18:21; boot-trace.prev.txt from the earlier 210-window session says build=Oct 12 2026 01:29:32. Both are C++ compile-time DATE and TIME passed to BootTrace::Begin in headless/main.cpp:418. Final R359 SHA
52a782f1dcommitted 2026-10-12 03:52:15 UTC, so these console logs PRECEDE definitive R359 (GitHub PS5 builds use the runner's UTC timestamps). Do not call 598/1,535 late50 or ~627/s to 484/s a controlled R353 vs R359 hardware performance comparison. The same data remain valid for contention root-cause hypotheses for those exact older installed binaries; use future build trace plus immutable commit to qualify tests. - Source-aligned R366 parser quantified guest CPU-write latencies in 115 and 210 matched 5s windows. Further offline normalized partial Pearson analysis controlling both GPU draws and dispatch counts yielded +0.762 and +0.760 partial correlations of guest-write ns with late50; guest cache wait partial associations +0.694 and +0.713. NOT causal proof. Current 17 slow-window group averaged 64,476 GPU draws and 1,216 dispatch calls/5s vs 79 near30 group 51,949 draws and 721 dispatch calls/5s. Source-only R366 CI 38247391391 SUCCESS; R364 native run 38241446483 SUCCESS. No FC27 hardware test of the >=R359 exact binary confirmed.
2026-10-12 R368 — native binary commit fingerprint, no guessing after FTP
- Root cause of misleading R359 attributions: boot-trace.txt only embedded compiler timestamp via DATE and TIME, and heap performance snapshots did not contain immutable Git source SHA. Implement an exact full 40-hex commit fingerprint in native tools/build-headless-native.sh from git -C $root rev-parse HEAD (NOT from a vendored extracted/scratch upstream tree). CMake passes EDEN_ENCORE_SOURCE_COMMIT, validates 40 lowercase hex, and applies compile definition EDEN_NATIVE_SOURCE_COMMIT only to headless/main.cpp, so a new commit does not invalidate bulk Vulkan/CPU translation unit caches.
- PS5 start now logs source_sha=40hex (or explicit unknown for alternate/direct CMake) immediately after BootTrace::Begin; optional detailed heap.log writes one EDEN_BUILD_SOURCE source_sha=40hex at async log sink registration, before game. No per-draw, guest-write or frame timer effect; quiet heap output unchanged. Tool tools/check-ps5-build-sha-provenance.py extracts PRODUCTION CMake rules into a standalone C++ fixture and checks valid SHA, unknown fallback, invalid-39-character SHA rejection, plus actual native script and startup logging wiring. GitHub core CI includes it; native build required for full verification.
- Future performance logs should be labelled by EDEN_BUILD_SOURCE in heap.log, and corroborated against boot-trace source_sha=... and GitHub Actions built commit. Older Oct 12 01:29/03:18 binary traces cannot retroactively be upgraded to SHA-qualified R359. Detailed log and boot file are not posted to public Git. This fix solves provenance errors, NOT FPS or texture artifacts.
2026-10-12 R369 — refuse to misattribute FC27 heap logs to the wrong PS5 binary
- Native R368 emits exactly one EDEN_BUILD_SOURCE source_sha=40hex in detailed heap.log and source_sha=40hex in boot-trace.txt. FC27 offline tools/analyze-fc27-stutter.py parses/validates the SHA, rejects mixed-source rotated/concatenated logs, prints FC27_BUILD source_sha=... for every analysis, and labels old pre-R368 files unverified_pre_R368. The opt-in --require-build-source rejects unverified or unknown SHA; --boot-trace verifies one matching trace source_sha. Legacy usage still permits historical descriptive counts with an explicit unverified banner, no false build comparisons. CLI --self-test covers valid, legacy, bad hash, duplicate incompatible hashes. Read-only Python analytics change: ZERO PS5 runtime/graphics effects.
- R368 native build CI #38249363907 SUCCESS and source CI #38249364111 SUCCESS. The R369 read-only analyzer was committed locally without canceling that native build, then published after the build finished.
2026-10-12 R370 — one combined FC27 test can isolate CPU write cache WAIT vs WORK without violating coherence
- Pre-R359 FTP session forensic: across 115 and 210 distinct 5s windows, CPU guest write callback elapsed ns correlates strongly with late50, while callback volume does not; source also shows RasterizerVulkan::OnCPUWrite acquires buffer mutex, returns TRUE on GPU modified region hazard without texture invalidation, otherwise acquires texture mutex, marks dirty GPU image pages, then invalidates shader pipeline code ranges. R364 tells which cache domain is contended but not whether intra-lock work is costly.
- R370 adds five OPT-IN sampled phases (one in 64 guest OnCPUWrite invocations, separate from GPU draw 1/16 sampling), reusing CachePhaseTimer and existing EDEN_GPU_CACHE_PHASE reporting: guest_write_buffer_wait, guest_write_buffer_work, guest_write_texture_wait, guest_write_texture_work, guest_write_shader_invalidate. Each sample's same flag spans all phases of that callback; early GPU-write hazard records ONLY buffer phases. Phase report totals are sampled durations, not total CPU use; compare per-window samples, window_ns and late50 across synchronized frame IDs. Adds zero clocks or counter writes to production quiet path; only one cheap detailed_gpu_profile load on ordinary writes, without cache locks reordered, fences removed, texture hazards bypassed or pipeline metadata invalidated differently.
- Native versioned vendor/encore-active/eden-vulkan/vulkan_rasterizer.cpp, and generator tools/prepare-vulkan-port.py, must remain byte-equivalent for 40 fork sources. Dedicated source-extracted C++ host fixture tools/check-ps5-guest-write-subphases.py validates 1/64 sampling, two cache locks' original write ordering, full early return on GPU write hazards, and no diagnostic clocks in quiet, using ASan/UBSan. Existing R310/R364/R355 host regressions and core CI still required. This is instrumentation for a SINGLE later combined test, not a demonstrated FC27 FPS/pixelation fix.
2026-10-12 R371 — prevent false comparison of guest write 1/64 vs GPU draw 1/16 samples
- Built R370 source tests pass and R370 source CI #38251595214 SUCCESS; native PS5 CI #38251595231 was still running while developing R371. To avoid canceling native compile, hold R371 commit locally until #38251595231 has finished.
- Offline tools/analyze-fc27-stutter.py now recovers exact per-window cache phase SAMPLE DELTAS from the lifetime samples counter (only when nondecreasing and baseline exists), prints samples, sampled_ms, mean_us_per_sample (or null for no samples), and explicit sampling class per phase. Five new R370 guest_write_* phases are sampled 1/64 guest OnCPUWrite per guest core/thread; GPU draw phase timers nominally 1/16 GPU draws; descriptor ring Finish/Preflight are exact wait events. Sorting samples by raw total ns across 1/16 vs 1/64 would be misleading, so output grouped by sampling class and phase name, and warns against treating sampled_ms as whole CPU/GPU time. Also extracts native max_ns (reset per 5s snapshot) to report worst_sample_us; old pre-R359 heap.log pair_wait had nominal mean 0.290us/sample but a rare 843.326us maximum, illustrating why averages and total times alone are insufficient. Self-test has both rates and legacy old FTP log with existing 375,135 sampled GPU paired cache-phase samples, mean pair_wait 0.290us/sample and pipeline_configure 7.463us/sample. No runtime effect; safe to analyze older logs without inventing unobserved guest-write phases.
2026-10-12 R372 — complete console-test prerequisite audit, verified R370 native package and R371 analyzer
- R370 native PS5 all-on-test build GitHub Actions https://github.com/niakw/Prospero.Eden-Encore/actions/runs/38251595231 SUCCESS and source CI #38251595214 SUCCESS. Actual GitHub artifact
Prospero.Eden-Encore-PS5-all-on-test(artifact id 11749277757) was downloaded by authenticatedgh run downloadto the authorized Mac/private/tmp/eden-r370-ps5-package/PPSA99008; the archive's 164 files, 29 lang catalogs, PS5 title metadataPPSA99008, network-hosts.txt and eboot.bin were checked.eboot.binis 71,930,873 bytes, SHA256136de4222edb805cd122c0f1fe4a495f35631e988cd66a21e715b9ccc5084937. Verified binary actually embeds source SHA40635302daf2ef6ee852c345ded42aa5b0d6d05f,EDEN_BUILD_SOURCE source_sha=%s, the newguest_write_buffer_wait,guest_write_texture_wait,guest_write_texture_work,guest_write_shader_invalidateand EDEN_GUEST_CACHE_DOMAIN/PHASE markers. GitHub upload/download ZIP structure checks and test-title validation all PASS, unstripped crash symbols artifact retained. - R371 offline-only analyzer SHA
e4d1b2fbdcommitted/pushed, source CI #38262023379 SUCCESS. No separate native compilation needed for this Python/docs-only change: the exact PS5 test binary is R370 (40635302d), NOT head R371/R372. New R371 analyzer can normalize 1/16 GPU draw, 1/64 guest write phase samples and show per-window max_us; use --require-build-source --boot-trace to reject wrong/legacy logs. - LIVE PS5 FTP
192.168.1.209:2121inspected READ-ONLY. The /data/prosperoeden/config/prosperoeden.json contains diagnostics.detailed_logging=true; FC270100C49025D3E000game overrides Vulkan, resolution 1x, FXAA and bilinear, whereas global resolution=2x. Avoid altering those settings; the recorded display output can still vary. Last heap.log and boot-trace.txt are OLD Oct 12 03:23-03:33 and do not contain R370. User must confirm the new R370 build loaded by SHA, NOT by apparent version R1. - SAFE INSTALL STOP: FTP root listed /data/homebrew with OrbitStore only, /data/homebrew/PPSA99008 was not listed, /system_ex/app/PPSA99008 was an empty namespace projection, /mnt/sandbox/PPSA99008_000/app0 is not visible in the FTP session. PS5
SIZEcan return 18446744073709551615 for a nonexistent native title file;SELFtoggles mode and was not a reliable proof of installed title binary. The available repo tools/install-ftp.py targets /data/homebrew/PPSA99008, which would risk writing a NON-ACTIVE path if ShadowMountPlus/system_ex projection is used. Therefore the ready archive HAS NOT BEEN INSTALLED or overwritten remotely; do not say the PS5 is ready to launch until the active install/loader path is known and app is fully closed. The 164-file R370 archive is STAGED ON MAC ONLY. Consult INSTALL.md and actual loader mapping, preserve /data/prosperoeden user assets and saves. - Once user completes a SINGLE R370 combined gameplay test, capture current FTP heap.log, stderr.log, boot-trace.txt (+ prev), validate exact
40635302daf2...native SHA, parse with R371 phase summaries and correlate per-domain wait/work and worst frame ms. Do not infer a performance fix until a true A/B is available. No additional game tests requested by this audit.
2026-10-12 R373 — FIRST SHA-VERIFIED R370 FC27 PS5 FTP LOGS, cache cleared, NO visible improvement
- User reports same stutters and explicitly cleared shader/JIT caches before the game; stderr confirms reset and 0 loaded shader pipelines. Current real PS5 FTP copied READ ONLY to Mac /private/tmp/eden-r370-live-audit (heap.log 1562585 bytes). Boot and heap both prove exact source SHA
40635302da(R370) and FC27 actual game ID 0100C49025D3E000; Vulkan 1x, bilinear, FXAA, 1440p. - R370 129 five-second windows ~649.8s, 28.29 avg FPS, 523 >50ms, worst 2631ms, no GPU producer queue full, GPU idle ~76.9%. First two minutes 42 late50/min; middle section 29/min; final 2min 119.5/min; last minute 226/min, FPS ~25.45. Definitely NOT solely cold-cache startup. Comparison with older pre-R359 115-window session 28.47 FPS/598 late frames is NOT controlled since cache/build/duration differ; no subjective improvement and cannot claim objective stable gain.
- Primary finding: buffer-cache CPU lock contention 244620 collisions and 4120.3ms wait vs texture 28757 collisions and 3932.9ms wait (includes read-side texture GetFlushArea). Sampled guest write BUFFER WAIT 101614/64 sample events, sum 59.06ms sampled (~3.78s naive extrapolation), mean .581us/sample, max 507us, correlation with late50 r .879 / controlling draws+dispatch r .850. Buffer WORK correlation only .332 (adjusted -.142); texture guest-write wait r .477, texture full domain wait/late50 r -.007. GPU cache pair-held 9.526us/draw sampled of which Pipeline Configure 8.378us/draw. Likely optimize buffer mutex critical section within Configure, not raw buffer write count, JIT, or descriptor ring. Correlation is not proof of causality.
- R363 descriptor ring Finish/Preflight ZERO; GPU queue full ZERO; GPU unmapped counter ZERO; no texture memory_short; 9 no_pipeline draws and all other drops 0. JIT wait/late50 r .008. PS5 physical CPU SMT topology remains unproven: kern.sched.topology_spec errno2, CPUID >8 physical IDs reject, EDEN_WORKER_TOPOLOGY ready=0; pinned logical CPUs do not prove SMT separation.
- Detailed docs/PS5_R373_2026-10-12_FC27_R370_HARDWARE_AUDIT.md and earlier private FTP logs retained. Do NOT request another console test before a proven hotpath fix; do NOT unlock GPU cache pair inside Configure without proving buffer/texture/descriptor/fence lifetimes. R364/R370 mainly measurement, not speedup.
2026-10-12 R376 — FC27 freeze caught LIVE, independent pad heartbeat continues; kernel topology fallback
- User left FC27 running until end of match and hit COMPLETE freeze. Live read-only PS5 FTP saved to authorized Mac /private/tmp/eden-r370-live-freeze at Oct 12 15:05:48 and 15:07:00 UTC. Boot and heap exact native SHA
40635302da. Full heap 240 5s windows, avg 28.46fps, 1060 >50ms frames, no GPU producer queue saturation. LAST report frame34319 FPS17.556, 71 >50ms, 16637 guest cache conflicts and 273.609ms wait in 5s. Crucial: heap.log stalled at exactly 2912214 bytes across 72s while stderr.log continued 78478 -> 81098 bytes, pad polling 367500 -> 383750. Input worker alive, gameplay/GPU reporter stopped. NO live blocked-thread backtrace: CANNOT claim cache-mutex deadlock definitively; possible guest HLE/IPC wait. Game can be closed, both frozen snapshots secured. - R375: firmware13.60 kern.sched.topology_spec ENOENT; CPUID 13 false physical IDs/1 false core rejected. Add second legitimate newer FreeBSD sysctl kern.sched.ule.topology_spec in bounded read-only loop, validate XML SMT groups, fall back to unknown physical map if both absent. Never forcibly split SMT or mutate the firmware. Mac mocked host C++ tests old/ULE-only/no sysctl and affinity readback all passed. Actual availability on PS5 still unknown.
- R376: independent pad heartbeat (still alive during actual freeze) reads lock-free timestamp/last frame from 5-second GPU owner report. If GPU owner reports not advancing for 20+ seconds, stderr EDEN_GPU_REPORT_STALLED, every 30s max, includes guest writes/reads/dequeues/IPC and GPU draw/tick counters. Detailed-logging only, no mutexes, no freeze recovery attempt, no quiet-mode clock overhead. Source-extracted ASan/UBSan host test check-ps5-freeze-witness.py PASS. This will determine when GPU progress stops and if guest CPU activity persists on next title freeze, not guarantee immediate fix.
- Detailed docs/PS5_R376_2026-10-12_FC27_LIVE_FREEZE.md. R370 frozen raw logs private; do not ask to repeat already captured test. Need source and PS5 native CI before new console trial; no claim current binary fixed.
2026-10-12 R377 — reduce high-frequency diagnostic counter contention (no guest cache semantic change)
- R370 live FC27 match+freeze logs captured 12,935,623 guest OnCPUWrite calls over ~20min. With detailed GPU logs enabled, DiagnosticTimer wrote TWO shared atomic counters (guest_cpu_write.calls / nanoseconds) on EACH guest callback, causing >=25.8 million shared atomic RMW operations competing across core threads. Profiler-induced cache-line bouncing may inflate stutter, but real cost is NOT yet measured and an observed guest wait still exists without proof of this as sole cause.
- R377 substitutes only that one DiagnosticTimer with BatchedGuestWriteTimer: retains full per-call monotonic timestamps and diagnostic enable gating, but accumulates exact wall-clock nanoseconds and callback count in a thread_local batch. Flush TWO atomics only every 64 completed guest writes, or at guest-thread exit. Normal 13 million-call test therefore reduces callback telemetry shared RMW frequency about 64x (does NOT remove or reorder any memory coherence lock, scheduler dispatch, shader invalidation, GPU fences, texture lifetime or game callback). Detailed five-second totals may lag up to 63 callbacks/thread when the game stalls; log analysis should account for tiny in-flight sample delay. Quiet mode does no clock or telemetry mutations as before.
- Actual native fork rasterizer and pinned-source Vulkan generator remain byte-equivalent. Existing source-extracted check-ps5-guest-write-subphases.py now compiles the REAL batched timer together with actual OnCPUWrite, verifying source callbacks/return early/lock order and quiet clocks. New ASan/UBSan tools/check-ps5-guest-write-batching.py checks zero shared atomics before 64 writes, exact flush at 64/128, independent worker TLS destructor remainder, and no clocks or counters with detailed logging OFF. CI source gate includes both. This is a real reduction in profiling overhead, NOT a demonstrated GPU lock/FC27 freeze fix; user hardware qualification needed after native PS5 CI.
2026-10-12 R378 — fix a REAL potential infinite graphics/compute pipeline worker wait
- R370 FC27 end-of-match freeze captured GPU reports stopping while input polling remained live. Source audit found unbounded Vulkan worker pipeline build_condvar.wait when is_built false; graphics render-pass acquisition and Validate OUTSIDE try, catches only vk::Exception from MakePipeline and does statistics after catch, and compute has shader setup, GPU logging/statistics outside vk::Exception catch. Other exceptions can escape worker without is_built and notify_one, resulting in infinite GPU worker wait. This is a correctness/liveness hole but specific freeze is NOT proven caused by it absent thread stack.
- R378 adds SCOPE_EXIT to BOTH graphics and compute native pipeline builders, guaranteeing is_built.store(true, release) under build_mutex, build_condvar.notify_all() after unlocking and exactly one shader_notify MarkShaderComplete on all normal/exception/early-exit paths. Entire work now catches std::exception and unknown; pipeline_statistics only if handle valid. Existing graphics/compute draw/dispatch safety guard remains; no guest cache mutex unlock, GPU fence removal or resource aliasing change.
- tools/check-ps5-pipeline-build-wait.py extracts REAL SCOPE_EXIT code for both paths, host C++ ASan/UBSan exercises normal, std throw, foreign throw, early return, null notifier, and condition_variable waking / no double notification. Source generator 40-file byte-equivalence must pass; new CI gate added. Native PS5 CI still required; no proven FC27 FPS/freeze cure claimed.
2026-10-12 R379 — user FreeBSD11.4 sched_ule.c reference, fix actual HTT topology XML parser
- User supplied https://github.com/freebsd/freebsd-src/blob/releng/11.4/sys/kern/sched_ule.c. Verified upstream source: lines 2968–3009 generate groups XML with CPU mask and HTT/THREAD/SMT flags; 3017–3037 handler, 3096–3098 SYSCTL_PROC(_kern_sched,...,topology_spec,CTLFLAG_RD), exact old OID kern.sched.topology_spec only with SMP+ULE kernel configuration. Upstream releng/11.4 sys/sys/smp.h lines 103–105: HTT=1 SMT=2 THREAD=HTT|SMT. kern/kern_cpuset.c lines 636–651: low machine word first, comma-separated additional CPU words. Existing Eden parser only recognized SMT so rejected valid HTT+THREAD groups.
- R379 headless/ps5_cpu_topology.h now recognizes HTT or SMT, NEVER THREAD alone, demands 5–8 nonoverlapping groups of <=2, all 13 allowed logical CPUs classified, rejects nonzero higher mask words and malformed source, publishes physical IDs only after FULL success. headless/performance.cpp retains both read-only old FreeBSD and newer ULE sysctl probes, now records legacy_errno and ule_errno independently in EDEN_PS5_CPU_OS_TOPOLOGY. If Sony firmware compiled out scheduler sysctl, userland cannot create it and safe logical-only fallback stays REQUIRED.
- New C++ ASan/UBSan source fixture tools/check-ps5-freebsd11-ule-topology.py tests real releng/11.4 XML variants and invalids, plus host actual CheckWorkerTopology+affinity integration HTT-only 13-logical/7 physical groups and ULE fallback; added source CI gate. R378 native CI was running while staging R379, so hold R379 push until native green. No real PS5 core mapping validated yet; no subjective performance claim. Docs in PS5_R376... R379 section.
2026-10-12 R380 — fix Linux-only FreeBSD 11.4 topology test ABI type
- R379 GitHub source CI #38274845475 FAILED in tool
check-ps5-freebsd11-ule-topology.pyon Linux g++13: test fixture declaredunsigned long long mask, whereas actualFreeBsdMask()correctly acceptsstd::uint64_t&; on LP64 Linuxuint64_tisunsigned long, a distinct nonbinding reference type. Mac Apple clang stdlib maps differently and passed, creating a host-only portability discrepancy. This is a TEST TYPE issue, NOT an indication the actual native PS5headless/ps5_cpu_topology.hparser failed or that R379 app cannot run. R380 changes test fixture declaration tostd::uint64_t mask, leveraging included ; host ASan/UBSan test still passes. GitHub Linux source CI #38276382759 SUCCESS after the R380 push; R379 native PS5 CI #38274845318 SUCCESS. No new native build was required for R380 test-only changes. - R379 parsed real FreeBSD 11.4 HTT/SMT groups and multiword cpuset. Do not claim R379 source CI green until R380 passes on Linux. Physical topology still not empirically confirmed on PS5 13.60; leave conservative SMT fallback if both sysctl OIDs absent.
2026-10-12 R381 — block invalid queued graphics draws after async pipeline failure
- After R378 worker completion fix, discovered direct and three indirect draw variants enqueued commands without verifying their graphics pipeline was still valid after a failed async build. Existing BindPipeline callback returns on null handle, leaving vkCmdDraw* possibly using previously bound or no pipeline. This is a source-proven correctness issue, not proof of historical end-match freeze.
- R381 GPU-worker-only CanExecuteDraw checks is_built.load(acquire) followed by native vk pipeline boolean; all four direct/indirect queued draw lambdas capture the current prepared pipeline and skip native draw plus count WorkerPipelineFailed on null/failed. Async wait callback remains earlier in GPU worker FIFO. Normal pipeline passes; no cache/fence/descriptor/lifetime change. Generator maintains byte-identical versioned active Vulkan 40 files.
- New source-extracted C++20 ASan/UBSan tools/check-ps5-gpu-worker-draw-guard.py covers four callsites, failed/built/unbuilt pipeline and concurrent release/acquire-ready case, wired to CI. No FPS claim; requires native build and physical PS5 confirmation.
2026-10-12 R382 — pre-dispatch command chunks BEFORE GPU cache locks
- SHA-proven R370 live frozen match: ~809645 sampled GPU Configure draws (1/16 sample), mean pair-held 9.478us, Configure 8.331us, MAX pair-held 1024us, Configure 1014us. Buffer lock waits correlate with long frames. Source shows Scheduler CommandChunk 32768-byte inline command capacity and RecordWithUploadBuffer dispatches when full, potentially while Configure holds BOTH guest buffer and texture mutexes. DispatchWork acquires queue_mutex and can allocate/recycle a chunk. This is a plausible but NOT confirmed explanation of some 1ms lock outliers.
- R382 PS5_NATIVE-only Scheduler::PreflightDrawCommands called after existing FlushWork, BEFORE gpu_memory FlushCaching and BEFORE both guest cache locks, in graphics PrepareDraw and DispatchCompute. If nonempty chunk lacks 4096 bytes plus max_align_t padding, ordinary FIFO DispatchWork occurs BEFORE guest cache locks. No scheduler Finish, GPU fence wait, skipped guest dirty propagation, altered Vulkan command ordering, descriptor lifetime, or abnormal early return. Original Record fallback remains for >4KiB unexpected command bursts. Increased batch count is possible and must be observed on PS5 in a combined eventual test.
- Versioned native Vulkan rasterizer/scheduler header and generator exactly equivalent across 40 files. Source-extracted C++ ASan/UBSan tools/check-ps5-scheduler-capacity-preflight.py checks production method, platform-accurate alignment threshold, no empty/spurious dispatch, FIFO trigger, zero GPU waits and call ordering before the graphics/compute cache locks. Added to source CI. Native PS5 build mandatory; do NOT request user retest for diagnostics only.
2026-10-12 R383 — correct source CI historical R319 insertion selection after R382
- R382 GitHub source CI #38279546500 failed in tools/check-ps5-descriptor-queue-preflight.py, at assert len(hr)==len(rr)==1. It extracts the R319 producer preflight insertion from pinned-source generator using any replacement containing PreflightGuestDraw in the REPLACEMENT. R382 introduced a subsequent transformation that PRESERVES this same PreflightGuestDraw call and also matches the old heuristic; rr has TWO matches. This was a regression fixture selection defect, not C++ compile or semantic failure. R383 narrows the original insertion to those replacements whose OLD source does NOT already contain PreflightGuestDraw. The actual R319 preflight body and validation checks remain unchanged, full pinned-source SHA and worker fencing negative cases still tested.
- Local R319/R323/R325/R363 and R382 C++ host source regressions all passed after selection repair. An extra Mac check of check-ps5-vulkan-cache-phases failed only because CPATH for vendored Boost was omitted; rerun with vendor/sources/eden-cpm/boost/boost-1.90.0/libs/*/include, as per previous R382 and CI runs. R382 native CI #38279546408 FAILED before C++ compilation at the exact same R319 check, so R383 must explicitly request a FULL native build with [full-build] [test-all-on]; otherwise the PS5 binary would remain unqualified.
2026-10-12 R384 — observe ACTUAL R382 command-chunk predispatch in single FC27 hardware session
- R383 core source CI #38280278754 SUCCESS; native PS5 CI #38280278761 in progress while R384 was prepared locally. R382 pre-dispatches a nearly full 32K Vulkan command chunk when remaining space is below 4KiB BEFORE graphics and compute guest cache mutexes, but prior R382 source lacked a count, so one FC27 test could not show if this path ever triggered. Never attribute frame-pacing gains to a preflight that did not occur.
- R384 adds scheduler_preflight_dispatches atomic count, incremented ONLY when Scheduler::PreflightDrawCommands actually dispatched a batch and detailed_gpu_profile is enabled; reports EDEN_SCHEDULER_PREFLIGHT frame=... dispatched=... cumulatively every existing five-second GPU report. No extra clocks, syscalls, cache locks, or writes in shipping/quiet mode; on nontriggered draws there is no counter write. Two production callsites (graphics PrepareDraw and DispatchCompute) updated in exact pinned Vulkan source AND generator.
- tools/analyze-fc27-stutter.py now parses optional EDEN_SCHEDULER_PREFLIGHT and computes per-window increments, total, optional correlation with late50. None means legacy log did not expose this metric, and zero means the supported metric measured zero; only calculate delta after the first sample, respect counter resets. New offline selftest covers R384 and legacy R370. R382 C++ host source-extracted test now confirms production counter on both draw/compute, after predispatch and outside both guest cache locks, detailed-only, with newline log format verified.
- All other R378/379/381/382 fixes remain. R384 is observability, NOT a guaranteed speedup or freeze fix. Await R383 native PASS before pushing R384 with native build; do not ask PS5 test until it is compiled, all source CI green and actual deployment path validated.
2026-10-12 R385 — compact Zelda Hero, semantic summary ellipsis, compiled revision and Home Circle quit
- User Oct 12 18:08 screenshot outlined Home hero x~50..1150 of 1649px and bottom-right fixed R1. Wants tightly aligned title, description, add-ons, Play/actions and video badges; descriptions must end on a meaningful completed word before " ..." (not trailing pronouns). Also Circle should quit from root Home after a confirmation dialog. Explicit PREPARE NEXT VERSION WITHOUT COMPILING; keep R384 test independent, do not trigger native builds.
- R385 Hero x90..1340 virtual pixels, two title lines up to 60px, max two semantic summary lines, badges scale to remaining room; full-bleed Nlib background and recent card layout retained. Semantic summary uses Font::wrap, meaningful FR/EN final word filtering and actual font.measure on suffix " ..."; no cutting bytes within UTF-8 words or mutating stored Nlib descriptions.
- Home root Circle now standard Exit Eden Encore? confirmation (French Quitter Eden Encore ?); Cross confirms via Launcher.done_=true with empty selected_game and normal frontend/main exit 0, Circle cancels. Nested quick-settings Circle/back and existing non-Home behavior preserved; Home hints expose Circle Quit. fr-FR.po and embedded French catalog synced.
- Package commercial kAppVersion R1 and numeric sce_sys contentVersion remain unchanged. Compiler-provided CMake EDEN_LAUNCHER_BUILD_LABEL is automatically derived by tools/ci/derive-encore-build-label.py from maximum dated R revision heading in MEMORY.md; explicit build environment may override with RNNN. EdenServices::version uses Eden::kBuildVersion instead of fixed R1; next compiled launcher displays R385. GitHub workflow run number deliberately NOT used.
- No PS5 C++ compilation, CMake configure, Make or native GitHub [full-build] for R385 at user's explicit instruction. Run static geometry, lint, localization and version metadata checks only. R384 native success is not proof this new launcher design has been compiled.
2026-10-12 R390 — DualSense HOME and Capture without Switch system effects
- User requests virtual Switch Home/Capture via Sony DualSense but no Nintendo system UI. PS5 libScePad provides Create, Options, Touchpad but NOT the Sony PS/Home hardware key (reserved by Sony). R390 fallback: Touchpad+Options -> virtual Home ID18; Create -> virtual Capture ID19 unless Create custom-mapped to another guest game action. Previous Options->Plus, Touchpad->Minus and Touchpad+L1/R1 retained. Pure per-player GuestSystemButtonRoute latches suppression of Plus/Minus until both chord buttons release.
- The upstream EmulatedController already supports HOME/Capture virtual buttons with system_buttons_enabled default true; upstream AM ButtonPoller would otherwise trigger guest Nintendo system applets and screenshots. R390 PS5_NATIVE-only early return in AM ButtonPoller preserves HID state but blocks emulated Nintendo system actions, leaves actual Sony PS button and non-PS5 builds untouched.
- CMake PS5_NATIVE on eden-headless does not propagate to core static target. Per-source PS5_NATIVE definition applied to exact core AM ButtonPoller source, not globally. R390 extends R389 detailed-only EDEN_PAD_INPUT_CHAIN every 5s with physical Create, virtual Home and Capture published edge counters; these do NOT prove in-game consumption.
- Updated devices_check.cpp Create/Home tests, new host sanitizer and source check tools/check-ps5-guest-system-buttons.py, future source/native preflight gates. On work/ps5-r390-system-buttons, do NOT compile native PS5 until the user explicitly asks for a single combined package. See docs/PS5_R390_2026-10-12_DUALSENSE_HOME_CAPTURE.md.
- HOME is primarily a Switch OS key, not a guaranteed FC27 in-game pause control; no fix to FC27 freeze has been demonstrated.
2026-10-12 R391 — scaled texture Vulkan GC batching
- Sole dev/ps5-sparse-jit targeted port of upstream ProsperoEden 002c40c: old GC prefetch excluded image.HasScaled(), forcing independent runtime.Finish on each scaled GPU-written image. Removed ONLY that condition in headless/vulkan_gc_downloads.inc and active Vulkan texture-cache full source. Keep alias/overlap/MSAA/oversize exclusions, 40 images/32MiB caps, pressure policy and staging lifetime. Do NOT copy upstream 64 images/64MiB without PS5 memory evidence.
- Mac C++ sanitizer source extracted GC mixed/budget/prefetch tests PASS, using vendored Boost 1.90 and CLT15.4 SDKROOT. Source generator/active Vulkan fork equivalent across 40 files PASS. No PS5 native build, no proven FPS effect. See docs/PS5_R391_2026-10-12_SCALED_GC_BATCH.md.
2026-10-12 R392 — upstream Eden #4499 Vulkan transform feedback consistency + audit correction
- On unique dev/ps5-sparse-jit, targeted port of Eden master 6352612425 (#4499): removed UpdateBuffers() only from Vulkan TFBCounterStreamer::FlushEndTFB while preserving its UpdateBuffers() in FlushBeginTFB. Native active full vk_query_cache source and tools/prepare-vulkan-port.py generator both changed, not pinned immutable original. Source contract tools/check-ps5-tfb-counter-stability.py uses Python AST and pinned Eden file to validate exact transformation and begin/end invariant. Wired both source and native preflight. Ran source test and check-vendored-vulkan-fork.py PASS 40 files source equivalent. No PS5 game/performance proof.
- Audited upstream deps: #4473/#4477 buffer cache GPU modified range and Kepler/Maxwell dirty handling already shipped in headless/backports/eden-4473-4477.patch and complete active backports; Eden #4442 Npad ReadCurrentEntry().state.sampling_number, HID command 551 and AM applet notifications already active. Corrected docs/UPSTREAM_VENDOR_AUDIT_2026-10-12.md to avoid duplicating/overriding shipped fixes.
- R391 earlier allowed independent scaled texture downloads into 40-image/32MiB existing PS5 Vulkan GC prefetch, host ASan+UBSan proofs and generated-active fork equivalence PASS. R392 still needs future native PS5 single combined test with FC27; do NOT claim saccades, HUD or guest freeze corrected until measured. No additional dev branches.
2026-10-12 R393 — bounded guest IPC thread profiling (detailed only)
- One dev/ps5-sparse-jit branch. Ported only bounded IPC thread attribution from ProsperoEden 6cab7898, not upstream b59cef8 sched-lock instrumentation. Per-thread 128-slot atomic table and 4 latency buckets in headless/performance.h. Derived svc_ipc source reads requesting guest thread ID BEFORE blocking SendSyncRequest ONLY with Detailed Logging; counts IPC once. ReportGpuThread emits at most 12 cumulative heavy thread rows per five-second detailed snapshot. No locks/heap/string lookups in the SVC hook and no additional quiet path clocks.
- Exact C++ inline code tested under ASan/UBSan with 8 colliding guest IDs, table saturation, overflow, max durations and 4 bins. tools/check-ps5-guest-ipc-thread-profile.py wired in source and native preflight. This is a diagnostic, not a fix for the FC27 frozen guest. Does not trigger native PS5 build.
- Prior core CI #38298966511 failed because tools/check-ps5-autocontrol-context.py expected old Create->Minus mapping from before R390; corrected source contract at commit
3a26f748d, not a Vulkan runtime failure.
2026-10-12 R394 — quiet R393 IPC reporter and trustworthy offline thread deltas
- Audited live
headless/performance.cpp: R393's EDEN_DEV_IPC_THREAD / EDEN_DEV_IPCHIST five-second report was wrapped only in EDEN_DEV_PROFILE, NOT the runtime detailed_gpu_profile condition, so the table scan and prints would still occur with detailed logging OFF in dev test builds. R394 wraps all top-12 selection and histogram output behind the existing detailed_gpu_profile flag, preserving quiet gameplay and the detailed-on forensic report. Extended the real source fixture tools/check-ps5-guest-ipc-thread-profile.py to assert this contract. - tools/analyze-fc27-ipc-threads.py evaluates completed cumulative per-thread IPC waits against
late50windows, without claiming a currently blocked thread or a causal deadlock. Fixed an analysis bug: a thread missing from a top-12 snapshot may not have its cumulative time change attributed to the next observed window. Histogram deltas likewise require adjacent reports. Added gap and reset synthetic coverage. - Added
python3 -B tools/analyze-fc27-ipc-threads.py --self-testto both GitHub source and full-native preflight. Follow-up full native R394 developer test build is explicitly gated by all source/host checks; do not claim any improvement to FC27 texture/HUD, frametime or freeze until native compilation and actual PS5 evidence.
2026-10-13 R399 — official immutable sampler template lifetime (source-only)
- R398 All-On PS5 build #38314780723 PASS from ab1ed98a; later Mesa 26.2.4 depth/stencil corrections and R399 were not part of that binary. Real FC27 1440p/1x stuttering at 30 displayed FPS, flickering grass/HUD and late-game freeze remain unproven corrected.
- Official Mesa 26.2.4 7b5888e8ca77cc0b407c7fb113df85764b561a86: push descriptor update templates must own copies of immutable sampler descriptor bytes instead of keeping pointers to a layout. Ported to full
radv_descriptor_update_template.cand.hactive PS5 RADV sources, without changing immutablevendor/sources/ps5-mesa. Byte-for-byte anchored replay intools/radv_official_immutable_sampler_fix.py; production installer and equivalence test cover 10 complete active RADV units. Source-backed host ASan/UBSan validates extracted copy/advance statements after the source layout is freed. Added source and native preflight gates; R399 is not a demonstrated runtime fix. - Preflight #38316845719 failed only on an R397 document extra blank line at EOF; repaired at
f14f6f55. Updated R397 provenance table and native-build status. No PS5 native compilation triggered for R399.
2026-10-13 R400 — upstream PS5 VideoOut 119.88Hz offer/acceptance guard (source-only)
- Direct review of
mihawk-99/PS5_Mesanewest upstream PS5 WSI commit47e9eb61ee7e1112194557e1e047178562827bc6(2026-10-10) shows active Encore still confusedsceVideoOutIsOutputSupported(...) == 0(mode not offered) withsceVideoOutConfigureOutput(...) == 0(mode configured). Original active PS5 code set high_frame_rate=true in that case without configuring 120Hz. Verified actual upstream corrected this on a 1440p monitor where console output mode was initially 1080p. - R400 adapt the exact acceptance gate
supported > 0 && configured == 0, fixconfigured=-1for unavailable mode, reject a zero-time failed vblank, and preserve Encore's own 48Hz/VRR vblank guard from R384/R391 for intervals outside stable 60Hz 15–18.5ms. Generate active full WSI from immutable pinned original with deterministictools/patch-radv-wsi.py; R400 source + native preflighttools/check-ps5-videoout-120hz-offer.pyguards support/configure/VRR truth table. No claim that this is root cause of FC27 stuttering at 30fps; detection matters only when 120Hz mode requested. - Latest upstream PS5_Mesa
7b59ef27adds three display resolutions (2160p, 1440p, 1080p) as separately registered VideoOut buffer sets. Not blindly imported: Encore's custom multi-owner WSI lifetime/physical-memory release must be reconciled, and the original upstream reports a fourth 720p set fails; evaluate separately before any native build. - R398 compiled previous SHA ab1ed98a; R399/R400 source-only pending new combined native qualification; refrain from repeated console tests until combined code passes. Single dev branch only.
2026-10-13 R400b — pinned R398 WSI cache migration, native build unblock
- R400 combined native workflow #38319048610 failed at
make prepare, not at C++ compile: production installer intentionally rejected cachedwsi_common_videoout.cSHA2566d54b8d68cc383faa9bbd910e327824689b5315e7ee5617d8981f582c47c2eaaas unknown. The SHA256 is verified to match exact R398 Encore active WSI (ab1ed98a, Git blob6e77c7e). Previous PS5 native cached files can therefore legitimately be earlier active Encore versions, not the original Mesa snapshot. - R400b fixes only the installer migration: accept precisely that historical hash for exactly the WSI path, retain fail-closed rejection of all other unknown inputs. The full historical file is vendored as
tools/fixtures/ps5-r398-wsi-videoout.c. Source equivalence test exercises actual stale WSI -> current WSI install and unknown-source rejection, maintaining exact replay/provenance. No change to shader paths, VideoOut semantics or FC27 freeze fix. - Need green source CI then combined new native All-On build. No console test while binary unbuilt.
2026-10-13 R400c — complete historical RADV cache provenance (source-only)
- Native build #38320275017 migrated old WSI but failed at
radv_ps5_platform.ccache SHA256 8112c2b4; verified identical to canonical R343 active source Git commit1c874ff9, before R396 AGC changes. Cache inputs of differing age can coexist; repair whole known historical source set instead of triggering successive failed builds. - Audited ten production-owned RADV translation units against R343. Five historical units found (WSI 6d54b8d6, cmd buffer 27e49538, physical device 56aed890, PS5 winsys 0aa478ae, PS5 platform 8112c2b4), all byte-verified from Git history and archived complete under tools/fixtures. Original R343 WSI equals R398 WSI bytes. Other five units were not R343 active patched files and remain covered by pinned Mesa-source equality.
tools/install-vendored-radv.pyauthorizes only these five path-specific archival hashes (plus original/current); unknown SHA256 still aborts.tools/check-vendored-radv-fork.pystages all five historical files simultaneously, migrates to current exact ten-unit RADV fork, checks idempotence and unknown-source refusal. R400c source-only; next green source CI then native All-On rebuild. No FC27 fix claimed.
2026-10-13 R400c — native PS5 All-On compiled and artifacts verified
- Native GitHub Actions #38321560117 completed success at SHA
f00ed08581. All source/host/SDK preflights, cached R343/R398 native RADV migration, 10 active source installs, native compilation and PS5 app staging, artifact re-download/ZIP structure and metadata validation PASS. This resolves the historical source-cache build blockers at R400/R400b. - All-On test app artifact ID 11779088390, direct link, SHA256 of zipped artifact 0c45e47533a06f05e884ba85f08b21085c685e947527a90d3b66ade226b212f1, 164 packaged files, PPSA99008/eboot.bin, FC27 title id 0100C49025D3E000. Native staged eboot.bin SHA256 5ca8792f12f05059f154d96cb51f4c832f5b4701a4c7212297d2fceb9b99d495. Symbol artifact ID 11779391152 (unstripped ELF and link map).
- Actual native build log:
VENDORED_RADV_INSTALLED changed=True files=10 wsi_sha256=4175fad06454b5c14a2be8045d791deb33fc6034959a7d58b733ed27b22d23b2confirms current R399/R400 RADV/WSI source installed after archived cache migration. R399 ASan/UBSan lifetime and R400 mode negotiation PASS. - This is compile and packaging qualification, not native console execution; FC27 visually pixelated pitch, flickering HUD, stutters despite 30 FPS plateau, and late-game freeze are still unproven resolved. Next: one FC27 1440p 1x on-console test, retain warm cache initially, log observations then analyze actual PS5 FTP logs. No production release or new 1440p WSI source applied.
2026-10-13 R401 — TV Hero title/long-description text polish (SOURCE ONLY)
- In
headless/prosperoeden/pe/ui/home.cpp, Hero title now uses a single-line measuredtext_shrinkat 60px design size in the same 1250px left column; scales down dynamically to 45% minimum before safe fitted truncation for extraordinarily long game names. No second title row. - Hero synopsis now uses only Nlib's long
description; the one-lineintrotagline is no longer shown as fallback. Genuine ROM/language warning remains higher priority. An absent long description remains blank until Nlib provides it, preventing fake teaser copy. - New host-testable
hero_text_layout.hppallocates at most two measured lines of complete UTF-8 words, strips an API-supplied standalone trailing..., and reserves the suffix...on the last meaningful word (not danglingde,and the, etc.). Never renders an ellipsis-only second line.widgets.cppinvokes this using the real font measurement and retains 90% minimum typography sizing. - Source checks
tools/check-ps5-launcher-r385.py,tools/check-home-reference.pyupdated, newtools/check-hero-text-layout.pycompiles C++ header and exercises FR/EN long copy, short copy, whitespace/newline, UTF-8, weak endings, unbreakable token, two-line cap and no isolated ellipsis. Not yet native PS5 compiled or visually verified; R400c test binary from SHAf00ed085remains the user's in-progress graphics test.
2026-10-13 R402 — global vs per-title controller map, launch TitleID fallback
- User reported custom FC27 match mapping unexpectedly acting as global instead. Audited runtime:
main.cppresolves session mapping correctly whenLoadGameSettings(title_id)finds the title, but it obtainstitle_idonly fromeden_game_title_id(path). The Library instead usesResolveTitleIdwhich falls back to a bracketed[16 HEX]filename if ROM metadata fails. This can save per-title overrides under a real ID then boot under 0 (global), explaining symptoms without speculative mid-match inference. - New pure
headless/title_id_fallback.hshares ROM basename bracket parsing and meta-first precedence between Launcher Library and nativemain.cpp. Startup now logsEDEN_TITLE_ID_LAUNCH_FALLBACKwhen using the filename and logsown_mappingwith the existing mapping trace. All title-specific controls use that same ID inLoadGameSettings. tools/check-ps5-title-controls.pycompiles host C++ cases for FC27 title parsing, mixed case, directory brackets, invalid IDs, metadata precedence and global/per-game custom resolver priority. Global remains fallback ONLY when the title has no override; map itself stays fixed for a whole guest session, since menu-versus-match detection is not provided by the guest HID API. No attempt to infer match state from game-specific visuals.- R401 UI source CI initially failed on stale static assertions in
tools/check-encore-ux.py(hero_intro/two-line title), while real Hero layout C++ tests passed. Updated these assertions for the new design. R401/R402 are not yet PS5 native-built; R400c test remains independently valid.
2026-10-13 R403 — avoid dropping PS5 first-use graphics draws
- R400c full FC27 test
f00ed085showed nineno_pipelineevents; the counter does not distinguish pipeline compilation from shader stage errors or creation failures. In pinnedvk_pipeline_cache_cost.cpp,BuiltPipelineintentionally returnsnullptrwhen a large draw's pipeline is still compiling. On PS5 this sacrifices image completeness (including potential transient text/HUD meshes) even though the build later completes. Nine drops do not explain every persistent HUD disappearance. - Native PS5 now passes the non-null pending graphics pipeline to
GraphicsPipeline::ConfigureDraw, which already queues an ordered scheduler worker wait; R378's worker SCOPE_EXIT signalsis_built=trueandbuild_condvar.notify_all()on success and both exception paths. Failed pipelines retain the existingIsBuilt() && !pipelinerejection. Desktop/Android skip behavior remains unchanged. No busy spin, GPU cache lock or JIT policy touched. - The pinned generator
tools/prepare-vulkan-port.pyand trackedvendor/encore-active/eden-vulkan/vk_pipeline_cache_cost.cppare both changed and source equivalence is CI-enforced; newtools/check-ps5-first-use-draw-preservation.pycompiles the actual extracted C++ policy with ASan/UBSan for native PS5 and desktop cases, reproducing the prior lost-draw behavior. - Potential tradeoff: cold first-use shader pipeline may defer rendering until compiled, which could cause a visible one-time hitch in exchange for preventing lost geometry. No FC27 hardware or HUD pixel outcome claimed until a native PS5 device actually executes it. This patch does not address persistent buffer/texture cache contention, 30-FPS pacing or final game hang.
2026-10-13 R404 — JIT by-core five-second attribution (SOURCE ONLY)
- R403 native PS5 build #38327104597 PASS at commit
c09115b7. Its previously recorded FC27 R400c session contained 192 five-second windows with worst presentation intervals 3001/2145/1430/937 ms. Their five-second accumulated JIT work (2964/842/4642/1831 ms) could overlap on three/four guest workers, while measured guest cache waits (185/1/35/201 ms) are not sufficient by themselves to explain all slow windows. This is correlation, NOT a root cause or proof of 3-second blocking JIT. - On sole dev/ps5-sparse-jit R404 expands GraphicsWindow's existing five-second pressure snapshot from 12 to 24 cumulative relaxed atomics (12 prior aggregate slots unchanged, 4 JIT nanoseconds, 4 JIT compile calls, 4 JIT code evacuations). The exact same load contributing to aggregate jit_ms supplies its core-specific breakdown; no extra clocks, heap allocations, locks, per-frame probes, JIT scheduling changes or GPU resource policy changes.
- Only when detailed logging is enabled, emit EDEN_FRAME_JIT_CORE frame/core/compile_ns/compile_calls/evacuations per core directly after a valid EDEN_FRAME_PRESSURE snapshot. Each quantity is a five-second delta. These are potentially concurrent guest CPU time totals, NOT a single blocking renderer stall. Quiet gameplay still logs none of this and keeps one counter snapshot at five-second boundaries.
- tools/analyze-fc27-stutter.py optionally parses exact frame/core records, reports observed JIT work/calls/evacuations per core, preserves legacy logs without the fields and avoids inventing missing-core zeroes. Synthetic selftest covers both formats; tools/check-ps5-quiet-frame-pressure.py now guards snapshot format, core attribution and unchanged quiet hot path.
- NO native PS5 compilation, NO hardware effect or FPS improvement claimed for R404. R403 remains the last compiled reference; pending CI source checks must PASS before treating R404 as source-qualified. Mac Desktop Commander was offline during this session, so no new local FC27 FTP log was claimed or collected. Next investigate whether compilation is redundant on one specific core or whether IPC/service waits dominate the actual 3s frame gaps, without speculatively altering JIT shared-state or guest synchronization.
2026-10-13 R404b — forensic replay of archived FC27 R400c native log (no console or binary changes)
- The project Library contains
heap(20261012-235826).log(21,701 lines, 2,516,064 bytes); verified headerEDEN_BUILD_SOURCE source_sha=f00ed08581957e651d54def355d8716c90a757af. Project raw-file materialization was unavailable, but authenticated Files read returned all 22 consecutive segments for in-memory parsing: 192 complete five-secondEDEN_VULKAN_FRAME+EDEN_FRAME_PRESSUREwindows. - The existing
headless/CMakeLists.txtGPU worker code generator appliesDiagnosticTimer(gpu_dispatch)to exactlyscheduler.Push(system.GPU(), submit_list->channel, std::move(submit_list->entries)); itsgpu_dispatch_msis specifically time inside the guest GPU control scheduler Push, not evidence of physical PS5 GPU busy time. Separately instrumentedgpu_command_ticktotals only ~1,481 ms across 191 delta windows, andgpu_command_flush/invalidatereport no measured calls;gpu_queue_fullis zero in those major windows. - Of worst windows (frame number -> worst present ms / scheduler.Push window ms / JIT sum ms / guest cache lock wait ms): 3229 -> 3000.831/3207.757/2964.141/185.495; 1376 -> 2144.509/2468.000/842.162/1.121; 3905 -> 1430.331/2476.445/4641.522/35.155; 3977 -> 937.096/2480.165/1831.340/200.519. The JIT work consists of concurrent core compiler times, not one block. For these windows core0/core1/core2 compile time delta ms: 3229 -> 704.9/1218.5/1040.6; 1376 -> 0/607.4/234.7; 3905 -> 800.2/2867.9/973.9; 3977 -> 680.4/460.4/690.1. Core3 stays unused in this session. 191 comparable windows accumulate approximately 15,350/18,393/15,702 ms JIT compile CPU time for cores 0/1/2.
- Across 192 windows, Pearson correlations with worst present interval: GPU
scheduler.Push= 0.617; aggregate JIT compile = 0.522; accumulated guest cache lock wait = 0.231; IPC completed waits = 0.195. Correlation with late50 count: cache wait = 0.519; GPU Push = 0.293; JIT = 0.181. These are five-second associations, not frame-local causal timings. Distinguish a rare single-frame 1–3-second hitch from widespread >50ms frames. - Existing
EDEN_DEV_SNAPSHOT_COSTacross 192 snapshots averages 0.123ms (max 0.735ms), far below the 1–3s spikes. The 1/16 sampled GPU cache-phase reports for worst windows are measured microsecond-scale samples and cannot fully account for command processing insideScheduler::Push. No conclusion on final frozen guest or HUD yet. - R404 code separately adds detailed per-core JIT snapshots; the archival R400c per-core
EDEN_PERF_PROGRESSsnapshot is slightly later thanFRAME_PRESSUREbut lets us independently narrow the cause; R404 offers exact same-boundary snapshots in a future compiled build. Do not describe this R404b analysis as a functional optimization or proof of an on-console improvement. Investigate Scheduler::Push and itsDmaPusher::DispatchCallsdownstream, without changing guest GPU command FIFO or synchronous hazard semantics speculatively.
2026-10-13 R405 — classify guest DMA fence waits inside Scheduler::Push (SOURCE ONLY)
- Upstream Eden mirror src/video_core/control/scheduler.cpp confirms Scheduler::Push obtains a channel under scheduling_guard, then outside the guard executes dma_pusher.Push + dma_pusher.DispatchCalls. The latter steps through guest command words and can wait on a GPU fence in DmaPusher::Step (sync_cv, signal_sync/synced), then FlushCommands/OnCommandListEnd. Therefore gpu_dispatch_ms in FC27 R400c measures real guest GPU command work and sync dependencies, NOT just pushing a queue; no evidence yet that the 1–3 second presentation gaps are exclusively due to DMA fences.
- The PS5 generator already rewrites DMA sync_cv.wait into shutdown-aware 10 ms waits. R405 times that exact unchanged condition-variable wait-loop only under EDEN_DEV_PROFILE using DiagnosticTimer(gpu_dma_sync_wait), which is clock/counter free when detailed_gpu_profile is off. Preserve the sync_mutex scope, callback, predicate, command order and shutdown behavior. No per-command logging and no speculative removal of fences.
- R405 detailed ReportGpuThread emits EDEN_GPU_DMA_SYNC frame/calls/ns cumulatively every 5s. The FC27 log analyzer correlates consecutive valid snapshots and treats missing or reset fields as unknown; native contract checker guards source generation and quiet path. This allows a later native run to falsify DMA fence waits as the dominant cost in scheduler.Push. No PS5 binary built/tested or FPS/HUD/game freeze improvement claimed.
2026-10-13 R406 — distinguish completed/in-flight GPU DMA and puller waits (SOURCE ONLY)
- Native FC27 R400c sample frames 3229/1376/3905/3977 showed 3.001/2.145/1.430/0.937s worst presentations but 3.208/2.468/2.476/2.480s cumulative GPU owner Scheduler::Push time in each five-second interval. R405 only measures completed DmaPusher sync_cv waits; an unfinished wait in a true guest freeze is invisible in totals.
- Source audit of upstream Eden mirror src/video_core/engines/puller.cpp identified another potential stall inside Scheduler::Push: Puller::ProcessSemaphoreAcquire uses an unbounded
while (word != value)loop, releasing rasterizer fences and re-reading guest memory without a regular sleep or normal timeout. Encore already has a shutdown-check rewrite in this exact loop. The separateProcessSemaphoreTriggerMethoddo...while(false)is not a busy loop; do not conflate them. - R406 instruments exactly TWO callsites in generated PS5 DEV sources: (a) DMA
sync_cv.wait_forloop, (b) guestProcessSemaphoreAcquireloop. Both use productionDiagnosticActiveTimerthat only starts when a real wait is expected AND detailed logging on; it performs no per-loop clock, no per-loop log/counter write, and does not change CV mutex, guest fence semantics, waiting predicate, or shutdown behavior. - The timer aggregates only completed durations and calls and separately publishes a current in-flight start timestamp through a release atomic; the five-second reporter uses acquire and the same monotonic clock to emit
EDEN_GPU_DMA_SYNCandEDEN_GPU_PULLER_SEMAPHOREwithactive_ns. Treatactive_nsas current age of an unfinished wait, not addable to completedns. A zero after completion is expected; no automatic timeout/wake/recovery added. - tools/analyze-fc27-stutter.py parses both optional signals and only deltas consecutive cumulative values; legacy R400c/R403 logs stay supported. Native source CI now runs tools/check-ps5-gpu-active-wait-host.py on the exact production timer implementation with host ASan/UBSan for disabled, satisfied, ongoing, completed, repeated lifecycles; quiet frame source invariants refreshed.
- No native PS5 build or test, no evidence yet that either wait causes the stutters, texture corruption, HUD disappearance or final FC27 hang. Wait for source CI; only then consider one combined native package on an explicitly justified test cycle.
- Source-only CI requested explicitly on top of R406 with
[core-ready]marker. This runsencore-core-preflight.ymlhost source/ASan/UBSan checks but does not trigger native PS5[full-build]packaging. Treat validations as pending until workflow jobs report success.
2026-10-13 R407 — preserve GPU wait attribution when frame reports stop (SOURCE ONLY)
- Existing R376
ReportInputThreadGpuLivenessdetects a >=20-second gap in GPU frame diagnostics using a separate pad-input heartbeat (approx 5s cadence, max one stale report each 30s). ExistingStall::Loopseparately detects missing GPU command/draw progress and emitsEDEN_GAME_GPU_STALL_SUSPECTfrom its own thread at most four times/session, spaced by ~30s. Neither can prove deadlock alone; paused/suspended games can look similar. - R406
gpu_dma_sync_active_since_nsandgpu_puller_semaphore_active_since_nscapture unfinished guest GPU waits but 5sReportGpuThreadcan stop if display stops. R407 adds ONLY two extra fieldsdma_active_ms,puller_active_msto each existing suspected-stall message, computed via the same monotonic clock from the R406 atomics. No new timers, threads, per-frame or per-poll log printing, GPU operations or recovery behavior. Diagnostic-only and stall-only; quiet mode continues to bypass both log paths. - R407 extends tools/check-ps5-freeze-witness.py source contracts for both independent reporter callsites. Combined R404-R407 source-only preflight is requested with
[core-ready]on R407 commit, not[full-build]; previous in-flight source preflight may be cancelled by intended workflow concurrency. Source CI success pending; no native PS5 app or gameplay improvement implied.
2026-10-13 R408 — four-file upstream GPU ownership fix (source only)
-
Compared current vendored Eden mirror at pin 5f142c7926d0c7fcbbd0ce30794d72f638a43b2 with authoritative upstream change dbeb73ee011416cffc6c203945f5ccc6b90621f6 (2026-09-24, #4473). Four files in source snapshot predate the fix: buffer_cache.h, kepler_compute.h/cpp, dma_pusher.cpp. Upstream targets CPU/GPU races in Kepler ComputeInline, Maxwell macro continuation, buffer DiscardWrite and upload ranges. Direct relevance to FC27 HUD/texture loss remains a hypothesis, NOT proven.
-
R408 tools/apply-upstream-4473.py performs a fail-closed exact preimage rebase of all four original upstream code hunks to disposable generated sources under build/gpu-memory-4473. It preserves GPL license headers and original immutable vendor/sources+vendor/objects hashes. It writes only on changes, preserving unchanged timestamp/build increments; no network or external fetch.
-
headless/CMakeLists.txt calls the generator only on PS5_NATIVE before downstream Vulkan/Mesa rendering assembly, shadows BufferCache/Kepler headers in video_core include path and compiles generated Kepler source. The later native GPU Thread unit generator reads the SAME patched DMA derived source then applies its existing stop-aware CV and R405/R406 wait timers. No sync/fence skipping, renderer selection or settings change.
-
The source-only preflight runs tools/apply-upstream-4473.py --self-test: four-file preimage and generation checks, actual generated BufferCache upload-copy lambda compiled/run under host ASan/UBSan on GPU-owned adjacent subranges. Requires CI success then one separately justified native PS5 build; NO change of gameplay performance or HUD quality claimed without a console test.
-
R408 include-order tightening: headless/vulkan.cmake pushes two
BEFORE PUBLICinclude roots. Move the private GPU #4473 derived-header include AFTER vulkan.cmake so actual compilation resolves corrected BufferCache/Kepler headers with higher priority. CI source selftest asserts this CMake ordering, not just output text. Still source-only and not yet native-qualified.
2026-10-13 R409 — one combined native PS5 All-On qualification build requested
- R408b source-only workflow #38332036153 concluded SUCCESS. All host source/ASan/UBSan, prior Vulkan/JIT/IPC/launch UX, release-base diff gates passed. Its generated four-source upstream #4473 patch now has fail-closed source anchors and highest-priority BufferCache/Kepler include root.
- ONE deliberate native PS5 test build on dev/ps5-sparse-jit requested by [full-build] [test-all-on] on this R409 documentation commit. It combines previously source-qualified R404–R407 JIT/DMA/puller/stall diagnostics and R408 memory ownership backport. The build must use offline vendored dependencies and default FC27 title id 0100C49025D3E000; never publish to release.
- No R409 FPS/performance/graphics improvement or compatibility claim before real PS5 gameplay. R403 remains the last confirmed successful native build until R409's native compilation and package validation complete. Do not request hardware test until whole workflow green; avoid extra experimental build variants.
2026-10-13 R410 — PS5 core/thread placement: native-port research, conservative logical A/B correction
- Public source inspected: premohq/PS5CEMU-HAR port/ps5/threads.cpp, thecoldblooded/ps5sx2, cobanov/PS5LM docs/CONSOLE.md and docs/RESEARCH.md, fail0verflow/ps5-umtxdbg, FreeBSD 11.0 SMP docs and FreeBSD CPU affinity. A PS5 native title generally exposes 13 eligible logical CPUs (0..12, mask 0x1FFF); a payload can have a DIFFERENT mask (e.g. 0xEA00); do not conflate. PS5CEMU-HAR uses presumed per-physical-core logical pairs (2k,2k+1) with scePthreadSetaffinity and checks readback; Sony title OS scheduler can be priority-700 FIFO. We have observed both kern.sched.topology_spec and kern.sched.ule.topology_spec absent (ENOENT) on this specific FW13.60, and CPUID can return 13 distinct purported AMD core IDs; these observations do not prove physical SMT grouping. No privileged firmware/kernel patch justified.
- Found actionable logical A/B issue in Encore: EnableExperimentalLogicalPlacementImpl used five evenly spaced logical IDs (for 0x1FFF: 0,3,6,9,12) and gave ALL other allowed CPUs to secondary shader/IO threads, including possible SMT siblings of hot JIT/GPU threads. That defeats isolation and could contribute to frame stalls.
- R410 changes ONLY this explicitly enabled, previously existing unverified logical-placement experiment. For exact allowed mask 0x1FFF, primary 4 guest+GPU logical CPUs {2,4,6,8,10} (0x554), protect assumed sibling CPUs {3,5,7,9,11} (0xAA8), secondary worker mask {0,1,12} (0x1003). Five distinct presumed physical pairs; two logical 0/1 plus CPU12 for shader/noncritical threads. Other masks must NOT invent a topology or pin. Existing verified CPUID / ULE physical policy is unmodified, PinnedWorkerMask remains zero until physically verified, and actual cpuset_set/get roundtrip must succeed for each worker.
- tools/check-worker-affinity.py now tests the extracted REAL native selection, owner masks/readback, candidate siblings exclusion, nonmatching mask no-op, never publishing physically verified mask. Source CI marker [core-ready] only. R409 PS5 build remains pinned at
a0f98d84(unchanged). This is a hypothesis to test and DOES NOT prove real console grouping or guaranteed FPS gain.
2026-10-13 R411 — true R409 native failure: duplicate GPU backport
- R409 #38332257466 failed inside CMake configure (headless/CMakeLists.txt:1930), before compiler invocation, with buffer_cache.h #4473 patch hunk=1 count=0. The active PROJECT_SOURCE_DIR is ALREADY PATCHED by tools/apply-eden-backports.sh and tools/install-vendored-eden-backports.py; shipping #4473/#4477 had been installed once since R307. R408 accidentally attempted to reapply it because its host test examined pristine vendor/sources/eden. Do not claim this provides a new GPU fix or native compile proof.
- R411 restores native GPU/DMA build inputs to the existing version-locked prepared Eden source, removes duplicate R408 generated Kepler/BufferCache/DMA overlays, adds fail-closed CMake checks for actual #4473 key signatures in prepared four sources. Leaves R405-R407 wait diagnostics operating after prepared DMA source is read.
- R411 strengthens R307 no-duplicate policy and updates the R408 historical source-only fixture expectations. R410 opt-in CPU A/B pair separation remains unverified physical topology, gated by 0x1FFF and source tests.
- Next qualified source CI only; do NOT launch second build before source CI passes. The failed R409 run produced no PS5 application.
2026-10-13 R413 — one native All-On after source qualification
- R412 source-only preflight #38333388723 concluded SUCCESS with complete host source, UBSan/ASan, UX, release-baseline gates. It validated the real R410 PS5 core-pair hypothesis placement test and the R411 elimination of redundant pre-patched #4473 overlays.
- R409 #38332257466 failed ONLY in CMake because #4473 was already supplied by existing shipping Eden backports. R411 repaired native source provenance and fail-closed checked the prepared already patched four files. R412 updated obsolete CPU experiment tests; it is source-qualified. Do not mislabel R408 as a new GPU fix: the #4473/#4477 corrections were already present via the audited backport installer.
- This R413 commit explicitly triggers ONE new native PS5 All-On build via [full-build] [test-all-on], for FC27 ID 0100C49025D3E000, no release publication. All four guest/JIT+GPU owners receive presumed SMT-isolated placements only if native developer trial enabled and exact mask 0x1FFF; any other mask skips it. Firmware physical topology still unverified; no performance result claimed.
- The build must finish and upload validated app + symbols + provenance before any console test is requested; R403 is last successful native build until then.
2026-10-13 R414 — mpereiraesaa PS5 RADV shader disk cache fix (source only)
- Read docs/WINE_PS5_BUILD.md and docs/cs-thread-profile.md from mpereiraesaa/prospero-win; verified mpereiraesaa/PS5_Mesa commit a01ce0e1b49a (2026-10-09, MIT) against immutable pinned Mihawk Mesa 0b2d6d1a. Encore already sets MESA_SHADER_CACHE_DIR but its exact pinned src/util/disk_cache_os.c rejects cache on !__normal_user() on all platforms. PS5 title credentials may differ (loader/elevation), leaving shader disk cache silently disabled and cold pipelines recompiling every launch. Hypothesis remains unverified on PS5 FW13.60: the actual UID mismatch and cache hit/miss behavior must be measured.
- R414 versions the COMPLETE fixed Mesa translation unit under vendor/encore-active/ps5-mesa/src/util/disk_cache_os.c. Only difference from immutable vendor/sources is #if !defined(PROSPERO) around real/effective-user safety gate; native-host guard and MESA_SHADER_CACHE_DISABLE and MESA_GLSL_DISABLE_IO_OPT opt-outs remain fully intact. No broad source migration or shader GPU behavior changes. Source credited to mpereiraesaa's upstream MIT Mesa patch.
- Updated the fail-closed immutable-source equivalence oracle tools/patch-radv-wsi.py, R343 RADV installer, host source replay and 11-unit count. Installer will change only actual staged Mesa compilation unit once and enforce exact verified hashes. Added check-ps5-mesa-shader-cache.py compiling actual extracted disk_cache_enabled policy under ASan/UBSan twice, normal host and PS5 macro, rejecting silent cache disable / host setuid regression.
- This is SOURCE ONLY [core-ready]. R413 native All-On continues independently at its pinned f81326a9; R414 is NOT in R413. No FPS/texture improvement claimed until new build/hardware validation.
- Additional research: mpereiraesaa/prospero-win wine patch 0882 shows PS5 SCHED_FIFO starvation for >13 equal-priority busy threads and optional SCHED_RR; their docs/vulkan-progress-gate.md show global Vulkan stream lock holding pipeline compilation yielding 300-500ms cold shader stalls. Both are architecture-specific but suggest checking Encore's GPU scheduler and shader locks without blindly porting Wine. New PS5_Mesa WSI 9d3cd41 scaled off-size swapchains and f2ee389 unpresented swapchain takeover are missing from Mihawk and need separately qualified lifecycle/VideoOut work.
2026-10-13 R415 — one native All-On cache fix qualification
- R414 dedicated host-only source preflight #38334760891 concluded SUCCESS, including the actual pinned full Mesa translation unit, immutable versioned 11-file RADV installer, OS-specific disk_cache_enabled() ASan/UBSan tests, prior GPU/JIT/UX and release-baseline gates. R413 native #38333627036 also concluded SUCCESS with binary ZIP and symbols, but deliberately predates R414 disk-cache fix and thus is NOT evidence for shader cache behavior.
- R415 requests ONE native PS5 All-On build via [full-build] [test-all-on], with R414 shader-disk-cache fix plus prior qualified R410 physical-sibling hypothesis, R403 draw preservation and R405-R407 diagnostic waits, targeting FC27 ID 0100C49025D3E000. Keep public release untouched.
- Confirm in native compile that compiled PS5_Mesa disk_cache_os.c is the canonical active revision. Need on-hardware evidence that actual Mesa shader cache is writable and receives entries; distinguish faster second-launch warm cache from persistent in-session first-use shader stalls. No FPS/texture freeze cure guaranteed; WSI Mesa upgrade and SCHED_RR remain separate gated work.
2026-10-13 R416 — prospero-win cross-port audit (DOCS ONLY)
- Completed GitHub source audit of mpereiraesaa/prospero-win docs/WINE_PS5_BUILD.md, cs-thread-profile, vulkan-progress-gate, vulkan-replay-workers, PS5_Mesa disk cache/WSI commits, and compared to Encore pinned Mihawk Mesa and versioned Vulkan/CPU code. See docs/PROSPERO_WIN_PS5_AUDIT.md for exact sources, compat constraints, diagnoses and evidence gates.
- Confirmed R414 sourced from Pereira Mesa cache fix and R415 native All-On #38335095928 SUCCESS. No FC27 real-device comparison yet. Existing R410 0x1fff split reserves five hypothesized SMT pairs, leaves 0x1003 to background; pipeline worker policy chooses ONE shader builder there. An FW12.02 SCHED_FIFO starvation observation is relevant but not proven on FW13.60. Keep RR and WSI migrations outside the R415 baseline until separately verified.
- R416 changes documentation only, no core, packaging or PS5 build/release requested.