This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
# Phase 1.0A build and artifact results
|
||||
|
||||
## Result
|
||||
|
||||
`RETROARCH_PS5_SOFTWARE_PORT_BUILT`
|
||||
|
||||
Both outputs are real RetroArch v1.22.2 frontends built from fork commit
|
||||
`ca1b45680577befc743e1c92fa40687e1b1745e7`. They link the upstream
|
||||
frontend/runloop and the static `chimera_smokecore`; the software target also
|
||||
links RGUI and the reviewed PS5 SDL2 software backends. They were not run.
|
||||
|
||||
| Profile | Local output | Size | SHA-256 | Map SHA-256 |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| headless | `build/phase10a/final/retroarch_ps5_headless.elf` | 722392 | `fd595a826f64d18598be0b55e539bb524b33bd469b98f62c958ee50acb544628` | `fb935f7a768c91408a87290f03bad8ed59f5061de75232d5660957eff8ec017f` |
|
||||
| software/RGUI | `build/phase10a/final/retroarch_ps5_software.elf` | 3318432 | `7beb09592404b5c1fb4161c632171d2901f3715db26e59458998690e8c49f3fc` | `1573a9951fa53bfa1bf304e0038e6f049f859fbfbe92f6a895196dc283c27597` |
|
||||
|
||||
The paths are relative to the separate `chimera-retroarch` repository. The
|
||||
ELFs and maps are ignored local build outputs, not files in `chimera-gfx` and
|
||||
not transfer, execution or installation packages.
|
||||
|
||||
## Builds and reproducibility
|
||||
|
||||
Every target comparison used fork commit
|
||||
`ca1b45680577befc743e1c92fa40687e1b1745e7`, SDK commit
|
||||
`d2e2e585740362976a39fdd5ccf390f199a7bc37`,
|
||||
`SOURCE_DATE_EPOCH=1763597828`, `TZ=UTC` and `LC_ALL=C`.
|
||||
Each repetition invoked `make ... clean` to completion before a separate
|
||||
`make ... -j4 all`. An earlier concurrent `make clean all` experiment was
|
||||
rejected as a race and is not evidence.
|
||||
|
||||
| Comparison | ELF | Linker map |
|
||||
| --- | --- | --- |
|
||||
| headless A versus B | byte-identical | byte-identical |
|
||||
| software A versus B | byte-identical | byte-identical |
|
||||
|
||||
Compiler flags include warnings-as-errors, `-O2`, no debug data, source-prefix
|
||||
maps, section garbage collection, `--as-needed` and `--build-id=none`. The
|
||||
cross compiler reports Clang 18.1.8 for `x86_64-sie-ps5`; GNU Make 4.4.1 was
|
||||
used under WSL2.
|
||||
|
||||
The static SDL2 archive is 3120572 bytes with SHA-256
|
||||
`353065505f54e71fa8f7fff41e090dce52f39fe2aaafab85c4653648fc5f1b56`.
|
||||
It was built from commit `0baf4ac49382b537ba449901b5b6d0d189bb1fbb`
|
||||
plus the 5195-byte reviewed overlay whose SHA-256 is
|
||||
`b547260d8af40ce2360575ab7831c009036c1f35f8b525cad6fd376dc5ca9d6b`.
|
||||
|
||||
## Host integration result
|
||||
|
||||
The host harness compiled with GCC 15.2.0, `-Werror`, AddressSanitizer and
|
||||
UndefinedBehaviorSanitizer, with leak detection enabled. It completed:
|
||||
|
||||
- 600 frames;
|
||||
- video FNV-1a-64 `43f920496eb5f435`;
|
||||
- audio FNV-1a-64 `a48f47dc08c56625`;
|
||||
- digital and analog input mapping: pass;
|
||||
- Start-driven libretro shutdown callback: pass;
|
||||
- init/deinit and ASan/UBSan/leak checks: pass;
|
||||
- PS5 port structural validator: pass.
|
||||
|
||||
This is host evidence for the core and source contracts, not PS5 runtime
|
||||
evidence.
|
||||
|
||||
## ELF audit
|
||||
|
||||
Both files are ELF64 little-endian x86-64 System V PIE/DYN binaries, dynamically
|
||||
linked and not stripped. Neither has an interpreter, build ID, GNU-stack
|
||||
program header, ELF TLS segment, `.tdata` or `.tbss`. Both have 20 section
|
||||
headers; `.init_array` and `.fini_array` exist with zero size. The full section
|
||||
set is `.text`, unwind tables, dynamic symbol/hash/string/relocation tables,
|
||||
`.data.rel.ro`, `.got`, `.rodata`, empty init/fini arrays, `.dynamic`, `.data`,
|
||||
`.bss`, `.comment` and static symbol/string tables.
|
||||
|
||||
| Field | Headless | Software/RGUI |
|
||||
| --- | ---: | ---: |
|
||||
| Entry point | `0x47d10` | `0x1c29c0` |
|
||||
| Program headers | 4 | 4 |
|
||||
| First LOAD | offset `0x4000`, size `0x4e570`, RWE | offset `0x4000`, size `0x1c93e0`, RWE |
|
||||
| Other LOADs | two RW | two RW |
|
||||
| `.rela.dyn` entries | 610 | 3373 |
|
||||
| Dynamic symbols | 79 | 220 |
|
||||
| Full symbols | 1387 | 7256 |
|
||||
| Defined global symbols | 719 | 2403 |
|
||||
| Undefined symbols/imports | 73 | 210 |
|
||||
|
||||
The executable first LOAD segment is also writable because the pinned SDK
|
||||
linker script co-locates text that way. This is a material W^X weakness and a
|
||||
future execution risk; offline build success does not waive it.
|
||||
|
||||
The linker maps prove inclusion of `frontend/drivers/platform_ps5.o` and
|
||||
`cores/chimera_smokecore/chimera_smokecore.o` in both targets. The software
|
||||
map additionally proves inclusion of `SDL_ps5video.c.o`, `SDL_ps5audio.c.o`
|
||||
and `SDL_ps5joystick.c.o`, while PS5 keyboard and IME objects are absent from
|
||||
the final link.
|
||||
|
||||
## Dynamic dependencies and imports
|
||||
|
||||
Headless `DT_NEEDED`:
|
||||
|
||||
- `libkernel_web.sprx`;
|
||||
- `libSceLibcInternal.sprx`.
|
||||
|
||||
Software/RGUI additionally needs:
|
||||
|
||||
- `libSceVideoOut.sprx`;
|
||||
- `libScePad.sprx`;
|
||||
- `libSceUserService.sprx`;
|
||||
- `libSceSystemService.sprx`;
|
||||
- `libSceAudioOut.sprx`.
|
||||
|
||||
`--as-needed` removes the SDK's otherwise unconditional SceNet dependency.
|
||||
There are no undefined socket/network, `dlopen`/`dlsym`, module-loader, GNM,
|
||||
mount, reboot or console-shutdown symbols. The software target's complete Sce
|
||||
API import set is AudioOut init/open/output/close; direct-memory and equeue
|
||||
allocation/wait/release; Pad init/open/read/close plus linked-but-not-required
|
||||
lightbar/vibration calls; UserService initialization/user queries;
|
||||
`sceSystemServiceHideSplashScreen`; and VideoOut open/register/flip/event/
|
||||
close operations. Full ordered import lists are in
|
||||
`manifests/retroarch/phase-1.0a-artifacts.json`.
|
||||
|
||||
Generic RetroArch code keeps write-capable libc imports. Headless includes
|
||||
`fopen`, `ftruncate`, `fwrite`, `mkdir`, `open`, `remove`, `rename` and
|
||||
`write`; software also includes `setenv`. The fixed PS5 startup path blocks
|
||||
configuration reads, supplies no content/config/SRAM/state/core/data path and
|
||||
compiles the normal shutdown-save paths out. The claim is therefore
|
||||
control-flow-specific, not global absence of write-capable code.
|
||||
|
||||
## Entry, shutdown and static reachability
|
||||
|
||||
Source and disassembly agree on this entry sequence:
|
||||
|
||||
`_start` clears BSS, performs the inlined SDK `payload_init` sequence
|
||||
(`__crt_syscall_init`, `__kernel_init`, `__klog_init`, `__isthreaded`,
|
||||
`__patch_init`, `__rtld_init`), constructs the SDK payload runtime, calls
|
||||
`main`, which tail-jumps to `rarch_main`, then runs SDK fini/close/destroy and
|
||||
termination handling. RetroArch selects `frontend_ctx_ps5`, performs a
|
||||
contentless static-core launch, enters `runloop_iterate`, and reaches the
|
||||
linked `retro_run`. Start requests the normal RetroArch/core shutdown path;
|
||||
`retro_deinit` and the PS5 frontend deinit/shutdown callbacks are linked.
|
||||
|
||||
The SDK source and linked disassembly also prove that startup is not
|
||||
kernelwrite-free: `__patch_init` reaches credential-capability/attribute
|
||||
changes and syscall-bound writes through `kernel_copyin/out`. Those effects
|
||||
are accepted for this authorized offline link milestone under the existing
|
||||
ADR boundary, but remain unexecuted and hardware-unproven.
|
||||
|
||||
## String and policy audit
|
||||
|
||||
No personal absolute host path, credential, PS5/device address, install route,
|
||||
Payload Manager modification, elfldr modification, lifecycle probe, deploy
|
||||
client or execution helper was found. The generic RetroArch string pool keeps
|
||||
`udp://127.0.0.1:`, an RTMP template, overlay “autoload” labels and downloader
|
||||
localization even though networking, updater, dynamic cores and autoload
|
||||
routes are compiled out. The software pool also yields byte-pattern false
|
||||
positives `0.1.2.3` and `4.5.6.7`. SDK RTLD name tables contain module/dlsym
|
||||
strings, but none is an undefined application import.
|
||||
|
||||
Full local audit output for each target contains the file classification,
|
||||
ELF/readobj dump, complete symbols and undefined symbols, relocations,
|
||||
disassembly, startup/shutdown slices and strings under
|
||||
`build/phase10a/audit/{headless,software}` in `chimera-retroarch`.
|
||||
|
||||
The Chimera GFX secretscan passed across 658 text files and a clean archive of
|
||||
all 21 fork-delta files passed separately. A whole-upstream RetroArch scan
|
||||
also identified the pre-existing BearSSL sample private-key fixtures and
|
||||
mbedTLS parser/writer source literals; these are official baseline dependency
|
||||
test/source material, not additions or credentials introduced by this port.
|
||||
|
||||
No PS5 connection, request, transfer, execution, installation, autoload or
|
||||
device write occurred.
|
||||
@@ -0,0 +1,55 @@
|
||||
# Phase 1.0A driver status
|
||||
|
||||
| Component | Headless | Software/RGUI | Runtime classification |
|
||||
| --- | --- | --- | --- |
|
||||
| RetroArch frontend/runloop | Real linked code | Real linked code | Built offline |
|
||||
| Platform frontend | `frontend_ctx_ps5` | `frontend_ctx_ps5` | Startup/return on device unproven |
|
||||
| Video | `video_null` | RetroArch `sdl2` + SDL software + PS5 VideoOut | Linked, firmware runtime unproven |
|
||||
| Menu | none | RGUI | Linked, display unproven |
|
||||
| Input | `input_null` | RetroArch SDL + SDL PS5 Pad | Linked, one-controller runtime unproven |
|
||||
| Joypad | null | SDL joypad over PS5 Pad | Buttons/axes source present; runtime unproven |
|
||||
| Audio | `audio_null` | RetroArch SDL + PS5 AudioOut | 48 kHz stereo source present; runtime unproven |
|
||||
| Core | static `chimera_smokecore` | static `chimera_smokecore` | Host-verified |
|
||||
| Dynamic core | disabled | disabled | Not implemented |
|
||||
| Config/VFS persistence | disabled default path | disabled default path | Generic write-capable code remains |
|
||||
| Networking/updater | disabled | disabled | No network API imports expected |
|
||||
| GNM/hardware context | absent | absent | Out of scope |
|
||||
|
||||
## Platform services
|
||||
|
||||
- lifecycle, contentless arguments and blocked config reads:
|
||||
`frontend_ctx_ps5`;
|
||||
- monotonic time and bounded sleeps: RetroArch/libretro-common POSIX paths
|
||||
backed by the pinned SDK libc; no invented PS5 ABI;
|
||||
- RetroArch worker threads: compiled out; the software profile may use SDL's
|
||||
public pthread-backed audio primitives;
|
||||
- logging: existing RetroArch stderr/stdout path only, with file logging off;
|
||||
- VFS: generic code is linkable but the fixed PS5 wrapper supplies no content,
|
||||
config, SRAM, state, core or data path;
|
||||
- dynamic core loading and executable-memory policy: explicitly unsupported.
|
||||
|
||||
## Smoke core contract
|
||||
|
||||
- no content;
|
||||
- 320x240 XRGB8888 at 60 Hz;
|
||||
- 48 kHz deterministic stereo, 800 sample frames per video frame;
|
||||
- D-pad and left analog stick offset the pattern;
|
||||
- A toggles the background;
|
||||
- Start requests clean libretro shutdown;
|
||||
- no input means unbounded deterministic operation;
|
||||
- no filesystem, networking, threads, JIT or frame-hot-path allocation.
|
||||
|
||||
Host result for 600 no-input frames:
|
||||
|
||||
- video FNV-1a-64: `43f920496eb5f435`;
|
||||
- audio FNV-1a-64: `a48f47dc08c56625`;
|
||||
- ASan/UBSan: pass;
|
||||
- digital- and analog-input-dependent video change: pass;
|
||||
- Start shutdown callback: pass.
|
||||
|
||||
## Explicitly unsupported
|
||||
|
||||
Persistent configuration, history, playlists, screenshots, saves, states,
|
||||
content loading, dynamic cores, multiple controllers, haptics, touchpad,
|
||||
gyro, lightbar, overlays, shaders and hardware-rendered cores are not silently
|
||||
reported as working.
|
||||
@@ -0,0 +1,65 @@
|
||||
# Proposed first PS5 smoke test (not authorized)
|
||||
|
||||
This is a review package only. It is not a sender, execution package or device
|
||||
instruction and it grants no authority.
|
||||
|
||||
## Candidate
|
||||
|
||||
The first useful device test would use the exact audited
|
||||
`retroarch_ps5_software.elf`, not the headless ELF. The headless static core
|
||||
has no observable result channel and intentionally runs indefinitely with null
|
||||
input. The software candidate can provide visible, audible and controller
|
||||
evidence and can request a clean shutdown.
|
||||
|
||||
Before any action, a later task must bind:
|
||||
|
||||
- source commit `ca1b45680577befc743e1c92fa40687e1b1745e7`;
|
||||
- the 3318432-byte ELF with SHA-256
|
||||
`7beb09592404b5c1fb4161c632171d2901f3715db26e59458998690e8c49f3fc`;
|
||||
- firmware text `9.60`;
|
||||
- a manual, non-autoload, non-installing one-shot loader route;
|
||||
- an independently reviewed recovery path;
|
||||
- a 100 ms flip timeout in the linked SDL object;
|
||||
- no automatic retry;
|
||||
- one explicit artifact-specific transfer authorization and one explicit
|
||||
execution authorization.
|
||||
|
||||
## Exact proposed one-shot scope
|
||||
|
||||
1. Verify the local ELF hash against the reviewed manifest.
|
||||
2. Verify autoload remains off and no live component will be replaced.
|
||||
3. Transfer only that one ELF to a non-persistent one-shot loader path.
|
||||
4. Execute once with no content and no arguments.
|
||||
5. Observe whether a 320x240 moving pattern is presented through RGUI/SDL.
|
||||
6. Observe bounded 48 kHz stereo test audio.
|
||||
7. Check one controller: D-pad and left stick change pattern position and A
|
||||
changes its background.
|
||||
8. Press Start once and observe whether RetroArch returns cleanly.
|
||||
9. Do not retry automatically. On crash, hang, missing output, timeout or
|
||||
unexpected filesystem/service behaviour, stop and use the separately
|
||||
reviewed recovery action.
|
||||
10. Hash and preserve host-side logs/transcript; do not infer success for
|
||||
unobserved subsystems.
|
||||
|
||||
## Explicit technical effects to accept later
|
||||
|
||||
The SDK CRT performs its previously documented bounded runtime initialization.
|
||||
The software profile opens user/system service, VideoOut, Pad and AudioOut,
|
||||
allocates heap/direct-memory buffers, creates SDL audio/thread primitives,
|
||||
submits VideoOut flips, waits on an equeue with a 100 ms timeout, polls input
|
||||
and writes audio. Logs, scheduler activity, process accounting and caches may
|
||||
change. These are functional runtime effects, not a side-effect-free probe.
|
||||
|
||||
## Remaining risks
|
||||
|
||||
- loader entry/return and firmware-9.60 lifecycle remain hardware-unproven;
|
||||
- VideoOut ownership or direct-memory assumptions may fail;
|
||||
- the public SDL backend's partial-init cleanup has not been observed;
|
||||
- a timeout may return an error but higher-level shutdown still needs proof;
|
||||
- audio output is blocking and underrun/overrun statistics are absent;
|
||||
- controller mappings/deadzone need device validation;
|
||||
- generic RetroArch write-capable code remains in the ELF even though the
|
||||
fixed first-run path blocks persistent writes;
|
||||
- a crash or hang may require a reboot/new jailbreak session.
|
||||
|
||||
No transfer or execution may occur on the basis of this document alone.
|
||||
@@ -0,0 +1,56 @@
|
||||
# Phase 1.0A PacBrew and PS5 SDL analysis
|
||||
|
||||
## Identities
|
||||
|
||||
| Source | Identity |
|
||||
| --- | --- |
|
||||
| PacBrew repository | `c2abcfcb60f569128abd0e8e70ad03a67bee5ea7` |
|
||||
| PS5 SDL fork | `0baf4ac49382b537ba449901b5b6d0d189bb1fbb` |
|
||||
| SDL reported revision | `SDL-2.30.12-g0baf4ac4` |
|
||||
| SDL license | Zlib |
|
||||
|
||||
The PacBrew SDL2 recipe builds the PS5 fork and enables OpenGL and LOADSO.
|
||||
Those two options are intentionally disabled here. PacBrew recipes were also
|
||||
reviewed for SDL2_image, SDL2_mixer, SDL2_ttf, freetype, zlib, libpng, OpenAL,
|
||||
elfldr and representative emulator ports. None is needed by the two Phase
|
||||
1.0A binaries beyond SDL2 itself.
|
||||
|
||||
## Native backend inventory
|
||||
|
||||
| Area | PS5 SDL implementation | APIs/dependencies | Phase 1.0A use |
|
||||
| --- | --- | --- | --- |
|
||||
| Video | Software surface, tiled direct-memory buffers, double buffer, VideoOut flip/equeue | `SceVideoOut`, kernel equeue/direct memory, user/system service | Enabled |
|
||||
| Render | SDL software renderer targeting the window framebuffer | SDL core software renderer | Enabled |
|
||||
| Input | Up to four PS5 Pad users, buttons, axes, connect/disconnect polling | `ScePad`, `SceUserService` | Enabled for one controller |
|
||||
| Audio | 48 kHz, mono/stereo, S16 or F32, bounded 256-2048 sample buffers | `SceAudioOut` | Enabled, RetroArch requests stereo |
|
||||
| Keyboard/IME | PS5 keyboard and IME dialog | `SceKeyboard`, `SceImeDialog` | Removed by reviewed overlay |
|
||||
| Filesystem | PS5 implementation exists | user service/filesystem | Disabled |
|
||||
| OpenGL/OSMesa | Optional source exists | Mesa/OSMesa | Disabled |
|
||||
| LoadSO | Optional | dynamic loader | Disabled |
|
||||
|
||||
## Reviewed overlay
|
||||
|
||||
The fork carries only a patch, not SDL source. The patch:
|
||||
|
||||
- removes keyboard/IME initialization and event pumping;
|
||||
- replaces twelve freshly created worker threads per frame with a checked
|
||||
single-thread tile copy;
|
||||
- rejects non-positive or non-tile-aligned framebuffer dimensions;
|
||||
- passes a 100,000 microsecond timeout to `sceKernelWaitEqueue`;
|
||||
- propagates copy and timeout errors to SDL.
|
||||
|
||||
SDL is configured with video, render, events, joystick, threads, timers and
|
||||
audio on; filesystem, file, loadso, OpenGL, Vulkan, haptic, sensor, locale,
|
||||
misc, libsamplerate, disk audio and dummy audio are off.
|
||||
|
||||
## Classification
|
||||
|
||||
`PS5_SDL_PARTIAL_CANDIDATE`
|
||||
|
||||
The source contains real PS5 video, controller and audio backends and the
|
||||
software RetroArch profile links them. It is not `FULL` because firmware-9.60
|
||||
runtime behaviour, VideoOut ownership, error cleanup, disconnect recovery,
|
||||
audio underrun/overrun reporting, exact flip timeout semantics and shutdown
|
||||
after partial initialization have not been verified on hardware.
|
||||
|
||||
Static build and host audits are not runtime evidence.
|
||||
@@ -0,0 +1,70 @@
|
||||
# Phase 1.0A native RetroArch PS5 port plan
|
||||
|
||||
Date: 2026-07-19
|
||||
|
||||
## Outcome and boundary
|
||||
|
||||
Phase 1.0A creates a real native RetroArch target in the separate
|
||||
`chimera-retroarch` repository. It does not add RetroArch source to
|
||||
`chimera-gfx`. The implementation has three profiles:
|
||||
|
||||
| Profile | Purpose | Target result |
|
||||
| --- | --- | --- |
|
||||
| `ps5-headless-smokecore` | Real RetroArch frontend/runloop with null drivers | `retroarch_ps5_headless.elf` |
|
||||
| `ps5-software-rgui-smokecore` | RGUI and SDL2 software video, Pad input and 48 kHz AudioOut | `retroarch_ps5_software.elf` |
|
||||
| `host-smokecore-integration` | 600 deterministic libretro frames under ASan/UBSan | Host executable, removed after test |
|
||||
|
||||
The target outputs are offline research artifacts. They are not installation
|
||||
or execution packages and carry no device authority.
|
||||
|
||||
## Layering
|
||||
|
||||
1. Upstream RetroArch remains the generic frontend, runloop, menu and driver
|
||||
registry.
|
||||
2. The PS5 layer adds the platform frontend, compile-time profiles and static
|
||||
smoke core. The software profile selects existing RetroArch SDL2 drivers.
|
||||
3. Chimera owns dependency locks, reproducible builds, artifact audits,
|
||||
manifests, guardrails and a later human-reviewed smoke-test proposal.
|
||||
|
||||
## Work sequence
|
||||
|
||||
1. Pin the official stable RetroArch release and source archive.
|
||||
2. Add the PS5 frontend and a warnings-as-errors headless build.
|
||||
3. Add and host-test a deterministic, contentless static libretro core.
|
||||
4. Cross-link the real headless RetroArch ELF.
|
||||
5. Build the pinned PS5 SDL fork with a reviewed overlay.
|
||||
6. Cross-link RGUI plus software video, input and audio.
|
||||
7. Perform two clean builds of every successful profile and compare bytes.
|
||||
8. Audit ELF headers, dynamic dependencies, symbols, relocations, executable
|
||||
segments, map files, startup/shutdown disassembly, strings and policy
|
||||
markers.
|
||||
9. Commit the port to its separate private branch and record only identities,
|
||||
results and safety evidence here.
|
||||
|
||||
## Compile-time safety policy
|
||||
|
||||
- networking, achievements, updater, core download and dynamic cores are off;
|
||||
- no GNM, OpenGL, Vulkan, shaders or hardware libretro context is present;
|
||||
- configuration reads are blocked by the PS5 frontend;
|
||||
- no content, core, SRAM, state, config or data path is supplied;
|
||||
- Salamander config and the normal shutdown save event are compiled out;
|
||||
- the static smoke core has no filesystem, network, JIT, thread or hot-path
|
||||
allocation code;
|
||||
- build rules contain no sender, deploy, install or run action.
|
||||
|
||||
Generic RetroArch filesystem functions remain linkable and some libc write
|
||||
imports remain in the ELFs. The safety claim is limited to the fixed default
|
||||
launch control flow, not global absence of all write-capable library code.
|
||||
Hardware behaviour on firmware 9.60 remains unproven.
|
||||
|
||||
## Non-goals
|
||||
|
||||
Dynamic libretro cores, persistent VFS paths, savestates, SRAM, playlists,
|
||||
history, screenshots, multiple controllers, rumble, touchpad, gyro, shaders,
|
||||
GNM acceleration, OpenGL/Vulkan contexts, packaging, installation and device
|
||||
execution are outside Phase 1.0A.
|
||||
|
||||
The five explicit offline source/build/audit/private-push authorizations are
|
||||
recorded as true for this phase. PS5 connection, device transfer, device
|
||||
execution, installation, lifecycle, autoload and device writes remain false;
|
||||
`automatic_retry=false`.
|
||||
@@ -0,0 +1,29 @@
|
||||
# Phase 1.0A PS4 reference delta
|
||||
|
||||
The official RetroArch Orbis port is a structural reference only.
|
||||
|
||||
| Orbis concept | PS5 Phase 1.0A decision | Evidence/status |
|
||||
| --- | --- | --- |
|
||||
| `Makefile.orbis` platform build | New `Makefile.ps5` using the open PS5 Payload SDK | Implemented |
|
||||
| Orbis frontend registry | New `frontend_ctx_ps5`, first for `__PS5__` | Implemented |
|
||||
| Orbis platform paths | No device paths at all | Safer default; future VFS work |
|
||||
| PS4 native input | RetroArch SDL2 input over the PS5 SDL Pad backend | Linked; runtime unproven |
|
||||
| PS4 native audio | RetroArch SDL audio over PS5 SDL AudioOut | Linked; runtime unproven |
|
||||
| PS4 video/context | PS5 SDL software framebuffer and VideoOut only | Linked; no GNM/context |
|
||||
| Static core support | Global libretro symbols provided by `chimera_smokecore` | Implemented and audited |
|
||||
| Console definitions | `__PS5__`, `__PROSPERO__`, `PS5`, `RARCH_CONSOLE` | Compile-time only |
|
||||
| Packaging/SELF | No conversion or packaging | Explicitly excluded |
|
||||
|
||||
Not reused from PS4:
|
||||
|
||||
- ABI declarations or structure layouts;
|
||||
- Orbis library or stub names;
|
||||
- PS4 paths, title identifiers or package logic;
|
||||
- PS4 controller/audio/video calls;
|
||||
- Auth info, SELF generation or installation;
|
||||
- PS4 runtime or cleanup assumptions.
|
||||
|
||||
The PS5 ELF uses the public SDK v0.41 CRT and linker contract already audited
|
||||
by Chimera. That startup has documented userland/kernel runtime effects and
|
||||
adds SDK dynamic dependencies; it is not a PS4 ABI and is not claimed to be
|
||||
side-effect free. Offline linking is authorized, device execution is not.
|
||||
@@ -0,0 +1,67 @@
|
||||
# Phase 1.0A upstream analysis
|
||||
|
||||
## Selected RetroArch base
|
||||
|
||||
| Field | Value |
|
||||
| --- | --- |
|
||||
| Official repository | `https://github.com/libretro/RetroArch` |
|
||||
| Stable tag | `v1.22.2` |
|
||||
| Commit | `69a4f0ea1e8aaf442ae4858f2e7f2b31a1776576` |
|
||||
| Tree | `33babf9eb7699b5d571a3063ea21c3e488c159fe` |
|
||||
| Commit date | `2025-11-20T00:17:08Z` |
|
||||
| Source archive | official GitHub tag archive |
|
||||
| Archive size | `71629881` bytes |
|
||||
| Archive SHA-256 | `245ef18c8fa8fbd9fbb5eb25cf43e17c6aace2f95c1ed99873cbd794012bb232` |
|
||||
| License | GPL-3.0-or-later (`COPYING` and source notices) |
|
||||
| Acquisition date | `2026-07-19` |
|
||||
|
||||
The local fork starts at that exact commit. Its `upstream` fetch remote names
|
||||
the official repository and its push URL is disabled. Project pushes are
|
||||
restricted to the private Gitea `origin`.
|
||||
|
||||
## Areas inspected
|
||||
|
||||
The analysis covered `Makefile.common`, `Makefile.griffin`,
|
||||
`Makefile.orbis`, frontend and driver registries, null/dummy drivers, RGUI,
|
||||
static core glue, config/path startup, task queues, time/sleep, threads,
|
||||
dynamic loading, VFS and logging. Reference platform implementations included
|
||||
Orbis, Vita, Switch, PSP and null.
|
||||
|
||||
Relevant upstream mechanisms:
|
||||
|
||||
- `frontend_ctx_drivers[]` selects the first compiled platform frontend;
|
||||
- video, audio and input arrays fall back to their null drivers;
|
||||
- `Makefile.common` conditionally adds SDL2 video, input/joypad and audio;
|
||||
- a static build resolves the global libretro API symbols at link time;
|
||||
- configuration defaults derive driver names from compiled feature macros;
|
||||
- RGUI is the smallest software-oriented menu driver;
|
||||
- generic file/VFS/task code is widely shared even when persistent features
|
||||
are disabled.
|
||||
|
||||
## Fork delta
|
||||
|
||||
The port adds:
|
||||
|
||||
- `Makefile.ps5` with explicit headless and software profiles;
|
||||
- `frontend/drivers/platform_ps5.c`;
|
||||
- `cores/chimera_smokecore/`;
|
||||
- host tests and PS5 build validation;
|
||||
- `pkg/ps5/` for the pinned SDL build and reviewed overlay;
|
||||
- PS5 port documentation.
|
||||
|
||||
Small generic-source changes register the platform, block static Salamander
|
||||
config I/O and normal shutdown saves for this profile, and add headers or
|
||||
fallback locals required by the unusually small feature matrix. No proprietary
|
||||
header, NID, syscall, firmware offset or device path is introduced.
|
||||
|
||||
## Static and dynamic core decisions
|
||||
|
||||
The static smoke core is linked into both ELFs and exports the real libretro
|
||||
entrypoints consumed by RetroArch. Dynamic loading is deliberately disabled:
|
||||
there is no proven native PS5 shared-core file/relocation/unload contract yet.
|
||||
A later milestone must separately specify format, symbol binding, executable
|
||||
memory, directory/VFS policy, ABI compatibility, error cleanup and unload.
|
||||
|
||||
No additional `libretro-samples` acquisition was needed because the required
|
||||
deterministic input, video, audio and no-content behaviour was implemented in
|
||||
the small GPL-compatible Chimera core and verified by a host harness.
|
||||
@@ -0,0 +1,70 @@
|
||||
# Phase 1.0AA: offline fake-adapter integration
|
||||
|
||||
Status: `OFFLINE_FAKE_BATCH_INTEGRATION_COMPLETE_LIVE_ADAPTER_BLOCKED`
|
||||
|
||||
Date: 2026-07-22
|
||||
|
||||
Phase 1.0AA connects the Phase-1.0Z passive batch contract to the Phase-1.0X
|
||||
exclusive evidence model using only an exact built-in fake adapter and exact
|
||||
synthetic clock. It creates no live adapter, socket, address, CLI, target code
|
||||
or target artifact. No PS5 action occurred.
|
||||
|
||||
## Closed fake boundary
|
||||
|
||||
`run_offline_fake_batch` rejects subclasses and arbitrary adapter objects. The
|
||||
only accepted components are:
|
||||
|
||||
- `OfflineFakeClock`, whose value changes only through explicit fake events;
|
||||
- `OfflineFakeBatchAdapter`, which allows one fake open, one complete Z batch,
|
||||
a bounded scripted event sequence and one fake close;
|
||||
- `OfflineFakeEvidenceStore`, which exclusively creates local test evidence.
|
||||
|
||||
There is deliberately no adapter protocol that a network implementation could
|
||||
quietly satisfy. The fake adapter records only the SHA-256 of sent bytes, not a
|
||||
target. Scripted event buffers are logically discarded during close; physical
|
||||
memory erasure remains unproven because caller-owned immutable bytes may still
|
||||
exist.
|
||||
|
||||
## State and ordering
|
||||
|
||||
```text
|
||||
validate W plan -> build and revalidate Z batch
|
||||
-> exclusive consumed receipt
|
||||
-> fake open exactly once
|
||||
-> fake send exactly one complete batch
|
||||
-> zero or more bounded DATA events before deadline
|
||||
-> HARD_DEADLINE at or after the synthetic deadline
|
||||
-> Z completeness validation and sanitization
|
||||
-> fake close exactly once
|
||||
-> exclusive receipt-bound sanitized output
|
||||
```
|
||||
|
||||
The consumed receipt includes run ID, window, batch size, batch SHA-256,
|
||||
deadline and the exact Z contract hash. It does not include a target or raw
|
||||
transcript. A failure after receipt creation leaves the receipt intact and
|
||||
creates no sanitized output; no cleanup deletes it.
|
||||
|
||||
Remote EOF, a blocked receive event, missing deadline, early deadline, data at
|
||||
or after the deadline, IAC, partial output, a second fake send, a second fake
|
||||
close and evidence collisions all fail closed. Prompt bytes remain ordinary
|
||||
data and cannot seal a result.
|
||||
|
||||
## What the tests prove
|
||||
|
||||
The host tests prove internal ordering and rejection behavior of this exact
|
||||
Python model. They do not prove:
|
||||
|
||||
- a live listener or exact deployed shsrv binary;
|
||||
- OS socket timeouts or preemption of a blocking call;
|
||||
- live fragmentation, short sends/writes, disconnect or cleanup;
|
||||
- firmware-9.60 behavior;
|
||||
- absence of atime, cache, accounting, scheduler or shell-process effects;
|
||||
- physical erasure or containing-directory durability.
|
||||
|
||||
## Decision
|
||||
|
||||
The fake integration is complete and remains host-only. A live adapter is
|
||||
blocked and unauthorized. The next permitted step is an offline feasibility
|
||||
review for a future bounded live adapter: OS timeout/preemption semantics,
|
||||
short-send handling, exclusive evidence ordering and failure cleanup must be
|
||||
specified without adding a socket, address or device action.
|
||||
@@ -0,0 +1,79 @@
|
||||
# Phase 1.0AB: offline live-adapter feasibility
|
||||
|
||||
Status: `PARTIAL_FEASIBILITY_LIVE_IMPLEMENTATION_BLOCKED`
|
||||
|
||||
Date: 2026-07-22
|
||||
|
||||
This phase audits the local Windows host runtime and models lifecycle ordering
|
||||
with synthetic traces only. It adds no socket import, address, DNS, live
|
||||
adapter, CLI or device action.
|
||||
|
||||
## Bound local runtime
|
||||
|
||||
| Object | Identity |
|
||||
|---|---|
|
||||
| Python | 3.13.2, MSC v.1942, 64-bit AMD64 |
|
||||
| `socket.py` | 38,741 bytes; SHA-256 `523695ac3383799547b421b4fe18004de1e80181e97181b6d7a10533b47f4c49` |
|
||||
| `selectors.py` | 20,060 bytes; SHA-256 `b3d6cebd4a3a03b4a614f12f171622ce4e4ba3295b9e8b89e2bde051003106eb` |
|
||||
| `_socket.pyd` | 84,984 bytes; SHA-256 `8daefaff53e6956f5aea5279a7c71f17d8c63e2b0d54031c3b9e82fcb0fb84db` |
|
||||
| `select.pyd` | 32,248 bytes; SHA-256 `baee284995b22d495fd12fa8378077e470978db1522c61bfb9af37fb827f33d1` |
|
||||
| monotonic clock | `QueryPerformanceCounter()`, monotonic, non-adjustable, reported resolution `1e-07` seconds |
|
||||
| default selector | `SelectSelector` on this runtime |
|
||||
|
||||
These identities are local host evidence only. They are not portable to a
|
||||
different Python build and say nothing about the PS5.
|
||||
|
||||
## Source-bound findings
|
||||
|
||||
The local `_socket` interface states that:
|
||||
|
||||
- `setblocking(False)` is equivalent to timeout `0.0`;
|
||||
- `connect_ex` returns an error number instead of raising for connection
|
||||
results;
|
||||
- `send` returns a byte count that may be smaller than the supplied buffer;
|
||||
- `recv` returns at most the requested bytes and returns empty bytes after
|
||||
remote close and drained data;
|
||||
- `close` makes the local socket object unusable.
|
||||
|
||||
The local `selectors.py` documents a maximum wait parameter. On Windows its
|
||||
`SelectSelector` passes readers, writers and exceptional writers to
|
||||
`select.select`, merges exceptional sockets into writable results, and returns
|
||||
an empty readiness set after `InterruptedError`. Therefore a pending connect
|
||||
must inspect `SO_ERROR` after writability, and every empty/interrupted return
|
||||
must recompute the remaining monotonic budget.
|
||||
|
||||
## Feasibility matrix
|
||||
|
||||
| Part | Classification | Reason |
|
||||
|---|---|---|
|
||||
| receipt before socket creation | `FEASIBLE_FROM_EXISTING_HOST_MODEL` | X/AA exclusive evidence already models this order |
|
||||
| numeric-address-only input | `DESIGN_REQUIRED` | DNS must be excluded; no address parser is added here |
|
||||
| nonblocking mode before connect | `FEASIBLE_FROM_LOCAL_RUNTIME` | exact local `_socket` contract exists |
|
||||
| pending connect completion | `PARTIAL` | readiness plus `SO_ERROR` is source-bound; exact accepted Windows error set still needs implementation review |
|
||||
| complete batch send | `FEASIBLE_FROM_LOCAL_RUNTIME` | repeated readiness and explicit partial-send loop are available |
|
||||
| bounded receive memory | `FEASIBLE_FROM_EXISTING_MODEL` | 65,536-byte collector bound already exists |
|
||||
| hard wall-clock deadline | `PARTIAL` | monotonic remaining budgets are feasible; selector/scheduler overshoot cannot be proven impossible |
|
||||
| prompt-independent completion | `FEASIBLE_FROM_Z` | only deadline sealing is accepted |
|
||||
| EOF behavior | `FEASIBLE_FAIL_CLOSED` | empty receive must be failure, never completion |
|
||||
| local descriptor cleanup | `FEASIBLE_BY_DESIGN` | unregister/selector close/socket close can run in `finally` |
|
||||
| remote shell cleanup | `UNPROVEN` | local close does not attest remote exit or firmware behavior |
|
||||
| retry/reconnect/resume | `EXCLUDED` | forbidden by contract |
|
||||
|
||||
Overall classification: `PARTIAL_FEASIBILITY_LIVE_IMPLEMENTATION_BLOCKED`.
|
||||
|
||||
## Existing-client comparison
|
||||
|
||||
Earlier one-shot ELF runners used blocking `sendall`, write-half-close and
|
||||
bounded receive for a different raw-ELF protocol. Their result manifests prove
|
||||
those consumed runs only. They are not reusable for shsrv: Z sends a tiny shell
|
||||
batch, must keep the write direction open while receiving, ignores prompts and
|
||||
seals only at deadline. `sendall` also hides individual partial-send progress;
|
||||
the future contract requires an explicit nonblocking send loop.
|
||||
|
||||
## Decision
|
||||
|
||||
The required sequence is implementable in principle on the exact local host,
|
||||
but a hard scheduling bound and remote cleanup cannot be proven offline. A live
|
||||
adapter remains blocked. The next permitted phase may build only a dormant,
|
||||
target-free adapter around an injected syscall facade and fake OS results. It
|
||||
must not import or instantiate a real socket until a later dedicated review.
|
||||
@@ -0,0 +1,50 @@
|
||||
# Phase 1.0AB timeout and cleanup contract
|
||||
|
||||
This is a design contract, not live network code.
|
||||
|
||||
## Future required algorithm
|
||||
|
||||
1. Rehash policy, Z batch and approval before any capability creation.
|
||||
2. Exclusively create, flush, close and reopen the consumed receipt.
|
||||
3. Acquire one absolute monotonic deadline.
|
||||
4. Create at most one stream socket and immediately set it nonblocking.
|
||||
5. Start one numeric-address connect; never perform DNS.
|
||||
6. For pending connect, wait for write/exception readiness using only the
|
||||
recomputed remaining budget, then require `SO_ERROR == 0`.
|
||||
7. Send the exact batch with an offset loop. Each call requires prior write
|
||||
readiness; zero progress, excess count or error fails the attempt.
|
||||
8. Switch to read readiness. Each read is bounded by both remaining collector
|
||||
capacity and a small fixed chunk size.
|
||||
9. Treat empty receive as remote EOF and fail immediately.
|
||||
10. After every wait or operation, read monotonic time again. At or beyond the
|
||||
deadline perform no further send or receive.
|
||||
11. Ask Z to seal only because the hard deadline was reached. Partial or
|
||||
malformed data remains invalid.
|
||||
12. In `finally`, unregister if registered, close the selector and close the
|
||||
local socket exactly once. Never retry, reconnect, resume or delete the
|
||||
consumed receipt.
|
||||
13. Create sanitized output only after successful Z sealing and local cleanup.
|
||||
|
||||
## Conservative race rule
|
||||
|
||||
When readiness and deadline coincide, the deadline wins. No additional bytes
|
||||
are read or sent at `now >= deadline`. This can reject data already queued by
|
||||
the OS, but it cannot silently extend the approved window.
|
||||
|
||||
## Failure classifications
|
||||
|
||||
| Event | Required result |
|
||||
|---|---|
|
||||
| connect error or nonzero `SO_ERROR` | fail, local cleanup |
|
||||
| selector interruption | recompute remaining budget; no retry counter |
|
||||
| selector timeout before absolute deadline | recompute; never seal early |
|
||||
| partial send | advance offset only by reported positive count |
|
||||
| zero send | fail |
|
||||
| receive over 65,536 bytes | fail |
|
||||
| remote EOF | fail |
|
||||
| deadline without complete Z result | fail |
|
||||
| cleanup exception | fail and retain receipt |
|
||||
| output collision or short host write | fail and retain existing evidence |
|
||||
|
||||
`close()` proves only local object closure. It does not prove TCP packet
|
||||
delivery, remote shsrv exit, process cleanup or reboot recovery.
|
||||
@@ -0,0 +1,24 @@
|
||||
# Phase 1.0AC fake-syscall contract
|
||||
|
||||
This contract is executable only against the exact built-in fake facade.
|
||||
|
||||
| Synthetic operation | Accepted result | Rule |
|
||||
|---|---|---|
|
||||
| `CREATE_STREAM` | `OK`, `ERROR` | exactly once after a precommitted receipt |
|
||||
| `SET_NONBLOCKING` | `OK`, `ERROR` | immediately after create |
|
||||
| `START_CONNECT` | `IMMEDIATE`, `PENDING`, `ERROR` | contains no target or address |
|
||||
| `WAIT_WRITE` | `READY`, `INTERRUPTED`, `TIMEOUT`, `ERROR` | remaining fake budget is rechecked |
|
||||
| `GET_SO_ERROR` | `ZERO`, `NONZERO`, `ERROR` | mandatory after pending readiness |
|
||||
| `WRITE_BYTES` | `PROGRESS`, `ZERO`, `ERROR` | positive progress cannot exceed remainder |
|
||||
| `WAIT_READ` | `READY`, `INTERRUPTED`, `TIMEOUT`, `ERROR` | deadline wins a simultaneous readiness event |
|
||||
| `READ_BYTES` | `PROGRESS`, `EOF`, `ERROR` | EOF is failure; total input is bounded |
|
||||
| local close | `OK`, `ERROR` | one call after ownership; none if create failed |
|
||||
|
||||
The facade accepts at most 1,024 scripted steps. One step may advance the fake
|
||||
clock by at most 60 seconds. These are model bounds, not proposed live values.
|
||||
Unused synthetic steps are logically discarded at close; physical memory
|
||||
erasure is not proven.
|
||||
|
||||
There is deliberately no adapter protocol, inheritance hook, address field,
|
||||
network import or live factory. A later phase cannot reinterpret this fake as
|
||||
device authorization.
|
||||
@@ -0,0 +1,55 @@
|
||||
# Phase 1.0AC: offline dormant adapter
|
||||
|
||||
Status: `OFFLINE_DORMANT_FAKE_SYSCALL_ADAPTER_COMPLETE_LIVE_ADAPTER_BLOCKED`
|
||||
|
||||
Date: 2026-07-22
|
||||
|
||||
Chimera GFX is a graphics/homebrew project. This phase adds host-side test
|
||||
infrastructure for a possible future one-shot launcher observation; it is not
|
||||
a security feature and it changes no RetroArch, SDL, VideoOut or target code.
|
||||
|
||||
## Closed capability boundary
|
||||
|
||||
`phase10ac_dormant_adapter.py` composes the Phase-1.0Z passive batch parser
|
||||
with an exact built-in fake syscall facade. The facade consumes caller-created
|
||||
synthetic outcomes. It cannot accept a live implementation and stores no
|
||||
target. The module imports no socket, selector, DNS, real clock or filesystem
|
||||
output interface and exposes no CLI.
|
||||
|
||||
The adapter requires a precommitted-receipt marker before the first synthetic
|
||||
create step. It then models:
|
||||
|
||||
1. one create and immediate nonblocking setup;
|
||||
2. immediate or pending connect completion;
|
||||
3. readiness plus `SO_ERROR == 0` for a pending result;
|
||||
4. an explicit partial-write loop for exactly one Phase-1.0Z batch;
|
||||
5. bounded read readiness and at most 65,536 supplied bytes;
|
||||
6. deadline-only result sealing;
|
||||
7. one local close on success or any failure after successful create.
|
||||
|
||||
Timeout and interrupted-wait events stay inside the same synthetic attempt.
|
||||
They never create a retry, reconnect or resume. When readiness coincides with
|
||||
the deadline, the deadline wins and no subsequent fake read or write occurs.
|
||||
EOF, zero progress, excess progress, malformed data and cleanup failure all
|
||||
invalidate the run.
|
||||
|
||||
## Evidence boundary
|
||||
|
||||
The 32 host tests cover immediate and pending connect paths, partial writes,
|
||||
interrupted and timeout waits, exact deadline races, EOF, receive limits,
|
||||
malformed results, cleanup and closed fake types. They prove only the Python
|
||||
model's behavior. They do not prove:
|
||||
|
||||
- a deployed shsrv identity or port-2323 behavior;
|
||||
- Windows scheduler or real socket timing;
|
||||
- a live connect, send, receive or remote-process cleanup;
|
||||
- firmware-9.60 behavior;
|
||||
- RetroArch launch context, SDL, VideoOut or rendering.
|
||||
|
||||
## Decision
|
||||
|
||||
The dormant fake-syscall adapter is complete. A live adapter remains blocked
|
||||
and absent. The next permissible step is an offline-only Phase 1.0AD design
|
||||
for numeric target validation and an inactive activation record. That phase
|
||||
must still contain no socket creation, connection, device request or enabled
|
||||
authorization.
|
||||
@@ -0,0 +1,24 @@
|
||||
# Phase 1.0AD: inactive activation contract
|
||||
|
||||
Status: `INACTIVE_NUMERIC_TARGET_CONTRACT_COMPLETE_NO_LIVE_CAPABILITY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
This phase closes the data boundary left by Phase 1.0AC. It does not add a
|
||||
network adapter, target source, launcher, socket, DNS lookup, clock, CLI or
|
||||
device action.
|
||||
|
||||
The tracked activation is entirely inactive and target-free. The host-only
|
||||
contract can validate hypothetical future records, but validation neither
|
||||
activates nor persists them. A candidate must use canonical private IPv4 text,
|
||||
source-bound port 2323, a unique run ID, a window of at most five minutes and
|
||||
separate SHA-256 identities for launcher, payload and untracked approval.
|
||||
|
||||
Retry, reconnect, resume, device writes, app termination and system remounts
|
||||
are rejected. The contract deliberately cannot express authorization for
|
||||
those effects.
|
||||
|
||||
The next useful phase is a separate offline architecture review of a minimal
|
||||
BigApp launcher derived from official GPLv3 shsrv source. That review must
|
||||
remove the general shell, persistent fake-app creation, remount behavior,
|
||||
unbounded waits and arbitrary payload selection before target code is allowed.
|
||||
@@ -0,0 +1,79 @@
|
||||
# Phase 1.0AE: minimal BigApp launcher architecture
|
||||
|
||||
Status: `V07_NONPERSISTENT_LINEAGE_SELECTED_TARGET_IMPLEMENTATION_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
## Objective
|
||||
|
||||
Identify the shortest public-source route from the proven raw-ELF VideoOut
|
||||
failure to one bounded launch-context experiment. This is an offline source
|
||||
review. It adds no target source, artifact, socket, transfer or execution.
|
||||
|
||||
## Source decision
|
||||
|
||||
Official shsrv v0.19 is not an acceptable base. Its hbldr path can remount
|
||||
`/system_ex`, persistently create `FAKE00000`, copy an executable, kill the
|
||||
running BigApp and enter unbounded ptrace/wait loops.
|
||||
|
||||
Official shsrv v0.7 is the selected reference lineage because it launches the
|
||||
existing VideoPlayer WebApp title `PPSA01659` and contains no fake-app creation
|
||||
or system-ex remount in its hbldr bundle. Selection is not authorization and
|
||||
does not prove that the title exists, launches, owns VideoOut or behaves the
|
||||
same way on firmware 9.60.
|
||||
|
||||
## Required minimal callgraph
|
||||
|
||||
The future design may model only this sequence:
|
||||
|
||||
1. validate one exact payload hash and fixed argument vector;
|
||||
2. query the foreground user;
|
||||
3. require that no BigApp is currently running;
|
||||
4. attach to the source-proven SystemService parent;
|
||||
5. arm bounded fork and exec observation before launch;
|
||||
6. request launch of the fixed existing `PPSA01659` title;
|
||||
7. detach the parent on every path;
|
||||
8. replace only the newly observed child with the exact payload;
|
||||
9. restore every temporary instruction and credential mutation;
|
||||
10. detach the child or terminate only that newly created child on failure;
|
||||
11. emit a bounded inherited result and stop.
|
||||
|
||||
The architecture must fail closed when a BigApp already exists. It must never
|
||||
call `sceSystemServiceKillApp` as part of the experiment.
|
||||
|
||||
## Removed upstream behavior
|
||||
|
||||
- general Telnet shell and arbitrary command parsing;
|
||||
- PATH search, arbitrary filesystem path and target-side ELF read;
|
||||
- `FAKE00000`, `fakeapp_create_if_missing` and `remount_system_ex`;
|
||||
- package installation, autoload and persistent writes;
|
||||
- `hbdbg`, GDB wait and free-form arguments;
|
||||
- arbitrary root/jail broadening unless separately proven indispensable and
|
||||
exactly restored;
|
||||
- unbounded `waitpid`, `pt_await_child`, `pt_await_exec`, `pt_call` and
|
||||
`pt_syscall` loops;
|
||||
- killing or replacing any pre-existing process;
|
||||
- retry, reconnect and fallback title selection.
|
||||
|
||||
## Unclosed contracts
|
||||
|
||||
Target implementation remains blocked until an offline design proves:
|
||||
|
||||
- a deadline-capable wait primitive for every wait/step boundary;
|
||||
- unique child correlation without acting on an unrelated process;
|
||||
- complete parent detach and child cleanup for every failure edge;
|
||||
- exact restoration of breakpoint bytes, page protections, credentials,
|
||||
environment, root and jail changes;
|
||||
- bounded ELF size, headers, segments, relocations and allocation;
|
||||
- exact firmware-9.60 availability and role of `PPSA01659`, or a fail-closed
|
||||
observation that does not install or mutate it;
|
||||
- accepted public evidence for every SystemService/UserService declaration;
|
||||
- an explicit policy for the unavoidable kernel/ptrace effects.
|
||||
|
||||
## Decision
|
||||
|
||||
The persistent v0.19 route is rejected. v0.7 is the preferred public-source
|
||||
reference for a nonpersistent BigApp experiment, but copying or compiling it
|
||||
is still blocked. The next phase may implement only a host lifecycle model
|
||||
with injected fake operations and exhaustive failure cleanup. It may not add
|
||||
PS5 headers, target source, syscall numbers, a target build or device action.
|
||||
@@ -0,0 +1,25 @@
|
||||
# Phase 1.0AF: offline BigApp lifecycle model
|
||||
|
||||
Status: `HOST_LIFECYCLE_MODEL_COMPLETE_TARGET_IMPLEMENTATION_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The host-only state machine implements the lifecycle selected in Phase 1.0AE
|
||||
using exact built-in fake events. It contains no PS5 headers, process calls,
|
||||
syscalls, socket, real clock, CLI or filesystem output.
|
||||
|
||||
The model refuses launch when a BigApp already exists. A successful synthetic
|
||||
attempt must attach and arm the parent, request only fixed title `PPSA01659`,
|
||||
observe one positive unique child identity, detach the parent, observe child
|
||||
exec, replace one exact payload, restore temporary mutations, detach the child
|
||||
and emit one result within 64 supplied ticks.
|
||||
|
||||
Failure injection proves the modeled unwind order. An acquired parent is
|
||||
detached. A newly observed child is the only process eligible for termination.
|
||||
If replacement began, restoration precedes termination. Cleanup failure is a
|
||||
hard error rather than a clean result. These are properties of the model, not
|
||||
firmware or runtime evidence.
|
||||
|
||||
Target implementation remains blocked. The next permitted work is a host-only
|
||||
bounded ELF contract and validator so malformed or oversized payloads can be
|
||||
rejected before any future launcher boundary.
|
||||
@@ -0,0 +1,26 @@
|
||||
# Phase 1.0AG: bounded ELF admission
|
||||
|
||||
Status: `BOUNDED_ELF_ADMISSION_IMPLEMENTED_HISTORICAL_ARTIFACT_BYTES_MISSING`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The bytes-only validator admits only an exact SHA-256-bound, little-endian
|
||||
x86-64 `ET_DYN` payload of at most 2 MiB. All ELF, program-header, optional
|
||||
section-header and load-segment ranges must be contained in the supplied
|
||||
immutable byte string.
|
||||
|
||||
At most 32 program headers, 256 section headers and eight load segments are
|
||||
accepted. Load memory is limited to 64 MiB across a 128 MiB virtual span.
|
||||
Segments must have power-of-two alignment no greater than 2 MiB, must not
|
||||
overlap, and may never be both writable and executable. `PT_INTERP` is
|
||||
forbidden and the entry must fall inside an executable load segment.
|
||||
|
||||
The parser has no path or file interface and performs no mapping, relocation
|
||||
or execution. Synthetic tests cover identity, hash, type, machine, bounds,
|
||||
alignment, overlap, permissions, interpreter, entry and header-count failures.
|
||||
|
||||
The consumed Phase-1.0M artifact is a size/hash reference only. Its exact bytes
|
||||
are absent from the scanned workspace, so Phase 1.0AG does not claim to have
|
||||
admitted it. A future canary must be rebuilt and validated from its exact bytes.
|
||||
Before target mapping can be designed, the supported dynamic table and
|
||||
relocation subset must be specified with the same bounds.
|
||||
@@ -0,0 +1,28 @@
|
||||
# Phase 1.0AH: dynamic and relocation contract
|
||||
|
||||
Status: `LOADER_CRT_RELOCATION_SPLIT_BOUNDED_TARGET_MAPPING_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
This bytes-only phase extends Phase 1.0AG with one bounded dynamic table and
|
||||
up to four `SHT_RELA` sections containing at most 4,096 entries. It has no
|
||||
file, mapping, module-loading or execution interface.
|
||||
|
||||
The future launcher subset applies only `R_X86_64_RELATIVE`. Each target must
|
||||
be eight-byte aligned and wholly inside an admitted RW load segment; the symbol
|
||||
index must be zero and the addend must identify admitted image memory.
|
||||
|
||||
`R_X86_64_GLOB_DAT` is admitted only as SDK-CRT work, with a nonzero symbol
|
||||
index, zero addend and an RW target. Every other relocation type fails closed.
|
||||
The exact ordered `DT_NEEDED` inventory must be supplied per artifact and may
|
||||
contain only the seven modules already evidenced for Phase 1.0M.
|
||||
|
||||
This distinction matters: official shsrv v0.7 applies RELATIVE relocations
|
||||
while the pinned SDK v0.41 CRT loads `DT_NEEDED` modules and resolves dynamic
|
||||
symbols. The latter is side-effecting runtime behavior, not a property proven
|
||||
safe by this parser.
|
||||
|
||||
The historical M counts (913 RELATIVE, 142 GLOB_DAT, seven modules) remain
|
||||
reference metadata because the bytes are absent. Target mapping remains
|
||||
blocked until allocation, copy, BSS zeroing, final page permissions and full
|
||||
failure restoration are modeled with bounded fake operations.
|
||||
@@ -0,0 +1,25 @@
|
||||
# Phase 1.0AI: offline mapping transaction
|
||||
|
||||
Status: `HOST_MAPPING_ROLLBACK_MODEL_COMPLETE_TARGET_MAPPING_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The host-only model consumes already admitted load metadata. It models one
|
||||
new child region and one host mirror, exact file-byte copy and BSS zeroing per
|
||||
segment, the admitted RELATIVE count, one mirror-to-child copy, final segment
|
||||
protections, image sync and mirror release.
|
||||
|
||||
Success retains the new synthetic child region only after every protection,
|
||||
sync and mirror-release step succeeds. Failure releases an acquired mirror and
|
||||
unmaps the complete newly reserved child region. A partial image is never a
|
||||
valid outcome. Cleanup failure is a hard error.
|
||||
|
||||
The supplied tick deadline is atomic: an operation that would cross the bound
|
||||
is classified as not executed. This prevents ambiguous ownership when a
|
||||
resource-creating operation meets the deadline.
|
||||
|
||||
The model rejects W+X segments and overlapping page-rounded protection ranges.
|
||||
It contains no allocator, memory mapping, process, ptrace or target interface.
|
||||
The next phase must bind every required primitive to official source and prove
|
||||
how new mappings and any temporary protection changes are undone on every
|
||||
failure path before target code is considered.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Phase 1.0AJ: offline primitive source audit
|
||||
|
||||
Status: `HYBRID_PRIMITIVE_REUSE_CANDIDATE_GAPS_REMAIN_TARGET_CODE_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
Official shsrv v0.7 remains useful only for the BigApp creation and replacement
|
||||
lineage. Its loader implementation is not reusable: remote calls are unbounded,
|
||||
and several alias-unmap, descriptor-close, host-unmap and rollback results are
|
||||
discarded.
|
||||
|
||||
The hash-bound hardened `chimera-elfldr` fork supplies better candidates for
|
||||
remote execution and cleanup. Its ptrace calls have monotonic deadlines and a
|
||||
step ceiling, registers are restored, credential restoration attempts every
|
||||
field, and acquired breakpoints, descriptors, mappings and children are handled
|
||||
by centralized cleanup with reported failure bits.
|
||||
|
||||
This is not yet a complete BigApp loader. The hardened cleanup state does not
|
||||
model every temporary JIT descriptor, alias and host mirror needed by the v0.7
|
||||
mapping lineage. It also clears ownership bits after failed cleanup, so a
|
||||
composition must make child termination the fail-closed terminal owner rather
|
||||
than treating failed release as successful release. BigApp identity/correlation,
|
||||
partial remote copy, final protection, sync and full rollback remain unbound as
|
||||
one transaction.
|
||||
|
||||
The decision is therefore hybrid reuse by composition, not source copying:
|
||||
retain v0.7 as provenance for BigApp creation, reuse only reviewed hardened
|
||||
primitives, and first extend the Phase-1.0AI host model with every temporary
|
||||
resource and cleanup failure. No target source, build or device action is
|
||||
allowed by this audit.
|
||||
@@ -0,0 +1,23 @@
|
||||
# Phase 1.0AK: offline hybrid primitive composition
|
||||
|
||||
Status: `HOST_HYBRID_RESOURCE_OWNERSHIP_MODEL_COMPLETE_TARGET_CODE_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
This host-only model composes the lifecycle and mapping ownership needed by a
|
||||
future BigApp route. It explicitly tracks the child, whole image region, host
|
||||
mirror and every per-executable-segment JIT master descriptor, alias descriptor,
|
||||
host alias and remote alias.
|
||||
|
||||
Every forward operation is failure-injected. Acquired temporary resources are
|
||||
released in reverse groups. A failed release is never treated as successful
|
||||
release: once a child exists, bounded kill-and-reap is the terminal owner and
|
||||
models operating-system reclamation. Failure of that terminal operation is a
|
||||
hard error. A successful outcome retains only the child and committed image;
|
||||
all temporary resources are closed.
|
||||
|
||||
The model contains no process, mapping, target, clock, socket or device
|
||||
interface. It does not prove that the source primitives compose on firmware
|
||||
9.60. In particular, partial progress and credential restoration for the SDK
|
||||
`mdbg_copyin` path still require a source-bound audit before target code can be
|
||||
considered.
|
||||
@@ -0,0 +1,24 @@
|
||||
# Phase 1.0AL: offline mdbg copy and restoration audit
|
||||
|
||||
Status: `SDK_MDBG_COPY_NOT_FAIL_CLOSED_DIRECT_REUSE_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The exact pinned SDK v0.41 `mdbg_copyin` implementation is unsuitable for
|
||||
direct reuse in the hybrid loader. It changes the service process auth ID
|
||||
before changing capabilities, but a capability-set failure returns without
|
||||
restoring that auth ID. Its normal restoration also returns immediately after
|
||||
an auth-ID restore failure, so capability restoration is not attempted.
|
||||
|
||||
The copy loop neither bounds iterations nor uses a monotonic deadline. It does
|
||||
not reject a reported length larger than the remaining length, check pointer
|
||||
arithmetic, or expose partial progress. A nonzero remote status with zero
|
||||
progress can leave the syscall return value as zero, so return value zero does
|
||||
not prove that the requested copy completed. Any earlier iterations may already
|
||||
have mutated target memory.
|
||||
|
||||
A replacement contract must report exact progress and restoration failures,
|
||||
attempt every required restoration on every exit, and terminate/reap the child
|
||||
after any partial copy or restoration failure. This audit authorizes only a
|
||||
capability-free host model of that contract; it does not authorize target code,
|
||||
a build, connection, transfer or execution.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Phase 1.0AM: offline bounded copy and restore model
|
||||
|
||||
Status: `HOST_EXACT_PROGRESS_AND_RESTORE_MODEL_COMPLETE_TARGET_CODE_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The capability-free model replaces the unsafe semantics identified in Phase
|
||||
1.0AL. It validates 64-bit source and destination ranges, bounds total size,
|
||||
chunk count and synthetic ticks, rejects zero or oversized progress, and
|
||||
accepts completion only at the exact requested byte count.
|
||||
|
||||
Auth ID and capabilities are both backed up before modification. Every field
|
||||
that changed is independently restored on every exit, with separate failure
|
||||
bits. A partial copy requires child termination and reap. Any credential
|
||||
restore failure additionally requires termination of the now-untrusted service;
|
||||
failure of either terminal cleanup operation is a hard error.
|
||||
|
||||
Successful exact copy keeps the child alive for subsequent loader stages. This
|
||||
is only host-model behavior. The model imports no credential, process, memory,
|
||||
clock, network or target interface and does not establish the undocumented
|
||||
remote status semantics or firmware-9.60 behavior. Target implementation stays
|
||||
blocked pending service-lifecycle ownership and source review.
|
||||
@@ -0,0 +1,25 @@
|
||||
# Phase 1.0AN: offline service lifecycle and copy audit
|
||||
|
||||
Status: `FAIL_STOP_PRESENT_RESTART_AND_BOUNDED_COPY_UNPROVEN_TARGET_CODE_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The hardened elfldr fork has a real fail-stop for its ptrace credential scope.
|
||||
If restoration of the temporary auth ID fails, a process-global latch rejects
|
||||
all later ptrace calls. After the current request and its cleanup attempt, the
|
||||
socket service calls `_exit(125)`.
|
||||
|
||||
That proves process termination, not safe recovery. No reviewed source owns a
|
||||
bounded restart, verifies the identity of a replacement service, or proves
|
||||
cleanup when startup-level credential restoration fails. Automatic restart is
|
||||
therefore forbidden.
|
||||
|
||||
The alternative `pt_copyin` route is also insufficient. It issues one blocking
|
||||
`PT_IO` request and does not validate returned descriptor progress. The source
|
||||
has neither a hard deadline/preemption mechanism for that call nor proof that a
|
||||
successful return means the exact requested byte count. It cannot replace the
|
||||
unsafe SDK `mdbg_copyin` merely because it changes fewer credentials.
|
||||
|
||||
The next work may only design a host-only preemption and service-owner
|
||||
architecture. No target source, build, connection, transfer, restart or device
|
||||
execution is authorized.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Phase 1.0AO: offline worker supervisor model
|
||||
|
||||
Status: `HOST_PREEMPTION_OWNERSHIP_MODEL_COMPLETE_TARGET_FEASIBILITY_UNPROVEN`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The capability-free architecture isolates the potentially blocking copy and
|
||||
temporary credentials in a one-shot worker. The persistent supervisor changes
|
||||
no credentials. It accepts only a result bound to the exact worker identity,
|
||||
exact requested byte count and zero restoration-failure bits.
|
||||
|
||||
A deadline terminates and reaps the worker. Once copy start is attempted, every
|
||||
deadline, malformed/wrong-identity result, partial copy, restoration failure or
|
||||
ambiguous start additionally terminates and reaps the child. Any terminal
|
||||
cleanup failure is a hard error. The supervisor performs no retry and never
|
||||
automatically restarts a worker or service.
|
||||
|
||||
This model does not prove that PS5 userland can create and uniquely identify
|
||||
such a worker, preempt one blocked inside the relevant syscall, or return a
|
||||
bounded authenticated result. It contains no process, signal, clock, IPC,
|
||||
network or target interface. A source-feasibility audit is required before
|
||||
target code can be considered.
|
||||
@@ -0,0 +1,26 @@
|
||||
# Phase 1.0AP: current-upstream worker feasibility audit
|
||||
|
||||
Status: `WORKER_CREATION_SOURCE_CANDIDATE_PREEMPTION_AND_RESULT_CHANNEL_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The current official SDK and shsrv heads were fetched as Git objects without
|
||||
changing either pinned worktree. The SDK declares `rfork_thread`, and current
|
||||
shsrv uses it both for forked shell builtins and its raw ELF process path. A
|
||||
returned PID makes worker creation a strong public-source candidate.
|
||||
|
||||
That PID is not a generation-safe identity. There is no bounded worker-start
|
||||
handshake or birth token. Official source uses `SIGKILL` and `waitpid`, but the
|
||||
relevant waits are blocking and do not prove that a worker stuck in `mdbg` or
|
||||
`PT_IO` can be terminated and reaped within a deadline on firmware 9.60. The
|
||||
state of a separately mutated child after worker termination is also unknown.
|
||||
|
||||
Shell pipes are generic byte streams, not the fixed, identity-bound result
|
||||
record required by Phase 1.0AO. They provide no exact progress/restoration
|
||||
fields, bounded receive or deadline sealing. Current shsrv code must not be
|
||||
copied: its broader persistence and lifecycle effects remain rejected by prior
|
||||
phases.
|
||||
|
||||
The next allowed step is a capability-free fixed-result and PID-generation
|
||||
contract. No target source, build, connection, transfer or execution is
|
||||
authorized.
|
||||
@@ -0,0 +1,23 @@
|
||||
# Phase 1.0AQ: offline fixed worker result record
|
||||
|
||||
Status: `FIXED_RESULT_AND_GENERATION_IDENTITY_COMPLETE_TRANSPORT_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The bytes-only protocol is one exact 128-byte little-endian record. It binds an
|
||||
attempt ID, worker nonce, worker and child PID, monotonic generation, requested
|
||||
and copied byte counts, status and credential-restoration failure bits. The
|
||||
first 96 bytes are protected by a trailing SHA-256 digest. Reserved and flag
|
||||
fields must be zero.
|
||||
|
||||
PID alone is explicitly insufficient. A result is accepted only when every
|
||||
identity field equals a precommit. Success additionally requires the exact
|
||||
requested byte count and zero restoration failures. Failure records preserve
|
||||
partial progress. Tests mutate every byte position and also reject rehashed
|
||||
records with semantically invalid fields.
|
||||
|
||||
SHA-256 provides integrity here, not authentication; identity comes from the
|
||||
precommitted attempt and nonce. The model has no random source, pipe, socket,
|
||||
process, clock or target capability. Exclusive writer ownership, partial reads,
|
||||
EOF/deadline behavior and PS5 pipe atomicity remain unproven, so no transport or
|
||||
target implementation is allowed.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Phase 1.0AR: offline exclusive result channel model
|
||||
|
||||
Status: `HOST_PARTIAL_READ_AND_DEADLINE_MODEL_COMPLETE_LIVE_CHANNEL_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The transport-free model consumes synthetic chunks from exactly one
|
||||
precommitted writer. It supports every two-part split and byte-at-a-time
|
||||
delivery of the 128-byte Phase-1.0AQ record. Completion of the exact record, not
|
||||
EOF, is the only success boundary.
|
||||
|
||||
EOF or deadline before completion, silent incompleteness, overflow, digest or
|
||||
identity mismatch, and any event after the exact record all fail closed. A read
|
||||
that would cross the synthetic deadline is classified as not executed. Every
|
||||
failed outcome requires the supervisor to contain worker and child.
|
||||
|
||||
The model does not rely on a 128-byte atomic write: partial reads are expected.
|
||||
It contains no pipe, descriptor, real clock, process or target interface. Live
|
||||
descriptor inheritance, close ordering, nonblocking reads and a hard deadline
|
||||
must be bound to reviewed public source before a channel implementation can be
|
||||
considered.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Phase 1.0AS: offline channel primitive and FD ownership audit
|
||||
|
||||
Status: `PIPE_POLL_CANDIDATES_PRESENT_FD_INHERITANCE_AND_HARD_DEADLINE_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
Current official SDK declarations and shsrv call sites make `pipe` and `poll`
|
||||
public-source candidates. The shsrv telnet loop uses a short relative poll, but
|
||||
does not compose it with an absolute monotonic deadline, EINTR budget
|
||||
recalculation or bounded worker reap.
|
||||
|
||||
The decisive ownership mismatch is in worker creation. The official header
|
||||
defines `RFFDG` as copying the descriptor table and `RFCFDG` as closing every
|
||||
descriptor. Current shsrv workers use `RFCFDG`; a pre-created result pipe would
|
||||
therefore not be inherited. No reviewed worker path uses `RFFDG` with exclusive
|
||||
parent/child pipe-end closure or close-on-exec handling.
|
||||
|
||||
Headers alone do not prove that a new composition is safe on firmware 9.60.
|
||||
The next phase may model FD acquisition, inheritance, close ordering, EINTR and
|
||||
an absolute deadline using fake operations only. No live channel, target source,
|
||||
build or device action is authorized.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Phase 1.0AT: offline RFFDG FD/deadline model
|
||||
|
||||
Status: `OFFLINE_OWNERSHIP_MODEL_COMPLETE_LIVE_COMPOSITION_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
This phase composes the Phase-1.0AS source candidates in a fake-only ownership
|
||||
transaction. A pipe exists before the modeled `RFFDG` worker copy. The parent
|
||||
closes its write end, the worker closes its read end, and the parent assembles
|
||||
one exact Phase-1.0AQ record through a nonblocking partial-read model.
|
||||
|
||||
One 256-tick absolute budget covers setup, EINTR, would-block and data events.
|
||||
Deadline, early EOF, overflow, a damaged record or any trailing read event
|
||||
contains the worker. Every acquired pipe end is closed and every started worker
|
||||
is terminated and reaped; a cleanup failure is itself a hard model error.
|
||||
|
||||
The facade is scripted and imports no OS, process, clock, network or filesystem
|
||||
capability. It does not establish a real `RFFDG` composition, hard wall-clock
|
||||
preemption, bounded real reap or firmware-9.60 behavior. No target source,
|
||||
cross-build, connection, transfer or execution is authorized.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Phase 1.0AU: offline live result-channel feasibility reassessment
|
||||
|
||||
Status: `PRIMITIVE_SIGNATURES_COMPLETE_COMPOSITION_AND_RUNTIME_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The current official SDK headers expose the complete source-level vocabulary
|
||||
needed by the Phase-1.0AT model: `pipe`, `RFFDG`, `fcntl` with `O_NONBLOCK`,
|
||||
`poll`, `CLOCK_MONOTONIC`, `kill`, and `waitpid` with `WNOHANG`.
|
||||
|
||||
No audited official callsite composes that vocabulary into the required
|
||||
channel. Current shsrv builtin workers use `RFCFDG`, which closes pre-created
|
||||
descriptors. Its waits are not bounded by one absolute monotonic deadline and
|
||||
the service has an automatic restart loop. Direct code reuse would violate the
|
||||
one-shot, no-retry and explicit-supervisor boundaries.
|
||||
|
||||
Headers are declarations, not firmware-9.60 runtime evidence. The AT fake
|
||||
model is not proof of hard preemption, real descriptor cleanup, launch context,
|
||||
VideoOut ownership or a visible flip. A live or target implementation remains
|
||||
blocked. The next permitted step is only an offline, target-free canary
|
||||
contract with a distinct post-result terminal state.
|
||||
@@ -0,0 +1,28 @@
|
||||
# Phase 1.0AV: target-free launch-context canary contract
|
||||
|
||||
Status: `OFFLINE_CAUSAL_PAIR_CONTRACT_COMPLETE_NO_ARTIFACT_OR_AUTHORITY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
AV defines the minimum causal comparison for the launch-context hypothesis.
|
||||
Both arms must use the same exact future payload and `CHD10AV1` protocol. One
|
||||
arm uses raw elfldr and the other a separately identified BigApp candidate.
|
||||
Launcher hashes, run IDs and approval hashes must differ; neither approval can
|
||||
carry to the other arm. Retry, reconnect, resume, installation and autoload are
|
||||
forbidden.
|
||||
|
||||
Each supplied result must prove submit, then D04, then a distinct later cleanup
|
||||
terminal. Missing or early terminal state makes the pair incomparable. Identity
|
||||
drift, a retry, a persistent-write count or an unscoped visible-output claim is
|
||||
a hard contract failure. Graphics operations have a separate closed approval
|
||||
gate and are not conflated with persistent writes.
|
||||
|
||||
A changed submit return is classified only as a launch-context candidate. A
|
||||
zero return is not interpreted as a visible flip, correct VideoOut semantics or
|
||||
root cause. This module processes synthetic immutable values only. There is no
|
||||
target source, artifact, address, transport, activation or device authority.
|
||||
|
||||
Before any implementation can be considered, a separate offline audit must
|
||||
bind the exact source delta, post-D04 terminal, launcher effects and result-path
|
||||
feasibility. BigApp termination requires its own explicit artifact-specific
|
||||
approval and is currently false.
|
||||
@@ -0,0 +1,28 @@
|
||||
# Phase 1.0AW: offline canary source-delta and effect audit
|
||||
|
||||
Status: `SOURCE_DELTA_BOUNDED_RESULT_PATH_CANDIDATE_EFFECTS_BLOCK_ARTIFACT`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The historical Phase-1.0M bytes are absent and implement `CHD10J01`, where
|
||||
D12 is terminal and D04 can follow it. They cannot satisfy AV and cannot be
|
||||
reused. A new profile must build one ELF for both launch arms; launcher identity
|
||||
must never become a compile define or payload-byte difference.
|
||||
|
||||
The smallest source design adds `CHD10AV1` and D14. Submit-before-D04 ordering
|
||||
is retained. D12 becomes shutdown-request evidence only. D14 may be emitted
|
||||
once, through inherited stdout, only after `rarch_main` returns, S15 is set,
|
||||
the initialized mask is empty, cleanup ordering has no errors and a new cleanup
|
||||
failure counter is zero. The counter is necessary because the current
|
||||
first-error field can retain E106 and mask a later E122 cleanup failure.
|
||||
|
||||
Official shsrv v0.7 supplies a source candidate for the other arm: hbldr passes
|
||||
stdout to `elfldr_exec`, which duplicates it into the replaced BigApp process,
|
||||
and the v0.7 shell framing is raw. This does not prove a live binary channel.
|
||||
The deployed identity is unknown and host completion remains unimplemented.
|
||||
|
||||
The same v0.7 route reads a device-resident ELF, kills the running BigApp,
|
||||
launches PPSA01659, waits indefinitely for child discovery, mutates kernel and
|
||||
ptrace state, and changes root/jail state. Direct reuse is rejected. No source
|
||||
was changed, no artifact was built, and no device action is authorized. Only a
|
||||
host-tested, non-target source design may follow.
|
||||
@@ -0,0 +1,24 @@
|
||||
# Phase 1.0AX: host-only AV protocol and cleanup model
|
||||
|
||||
Status: `HOST_REFERENCE_MODEL_COMPLETE_TARGET_SOURCE_AND_ARTIFACT_BLOCKED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
AX turns AW's source requirements into an exact bytes-only reference model.
|
||||
Frames remain 64-byte, big-endian and CRC-bound over the first 60 bytes, but
|
||||
use `CHD10AV1`. Historical wire values are preserved and D14 is appended at
|
||||
stage value 30. D12 cannot carry the terminal flag; only a final D14 can.
|
||||
|
||||
D14 records the current initialized mask, cleaned mask, `rarch_main` result,
|
||||
cleanup-order errors and the independent cleanup-failure count. It is generated
|
||||
only when `rarch_main` returned, D04 was emitted, phase S15 was reached, no
|
||||
subsystem remains initialized and both cleanup error counts are zero.
|
||||
|
||||
The trace layer requires exactly one D07, D04 and final D14 in that order,
|
||||
strictly increasing sequence values, at most one D12 and no post-terminal data.
|
||||
All 64 single-byte mutations fail CRC or canonical parsing. Correctly
|
||||
rechecksummed but false cleanup claims also fail.
|
||||
|
||||
This is Python byte processing only. It creates no target profile, source,
|
||||
artifact, socket, process, output file, address or authorization. Passing it
|
||||
proves neither target equivalence nor firmware behavior.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Phase 1.0AY: offline RetroArch target-source base reassessment
|
||||
|
||||
Status: `EXACT_PHASE10N_BASE_SELECTED_HOST_SOURCE_PATCH_ONLY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The local primary RetroArch checkout remains on the historical loader-diagnosis
|
||||
branch. It is not switched or rewritten. The exact source base selected for the
|
||||
next isolated worktree is private commit `606909706f91d7213751c245081333f56c2cce89`,
|
||||
the inactive Phase-1.0N runner tip.
|
||||
|
||||
That commit descends from Phase-1.0M, contains its artifact audit and preserves
|
||||
all target-source blobs relevant to AX byte-for-byte. Its Makefile difference
|
||||
adds only inactive N runner validation. This makes it the least-lossy base and
|
||||
avoids replaying the completed M/N history onto the older checkout.
|
||||
|
||||
The next patch is limited to host-tested source structure: cleanup-failure
|
||||
accounting, `CHD10AV1`, D14 and its cleanup predicate. It may not add a target
|
||||
profile, cross-build, artifact, launcher-specific define or runner activation.
|
||||
Every hardware and build authorization remains false.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Phase 1.0AZ: host-tested AV source structure
|
||||
|
||||
Status: `REMOTE_BOUND_HOST_TESTED_SOURCE_TARGET_REASSESSMENT_ONLY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
An isolated RetroArch worktree was created from the exact Phase-1.0N tip and
|
||||
committed locally as `a3887edd90780426b3762d42b8e3b96f8ca6813d`. The change
|
||||
implements the source structure selected by AY without creating a PS5 build
|
||||
profile or artifact.
|
||||
|
||||
The distinct stream magic is `CHD10AV1`; D14 is appended as stage 30 without
|
||||
renumbering historical stages. Under the AV host define, D11 and D12 are
|
||||
nonterminal. D14 is the sole terminal and is attempted at most once only after
|
||||
a successfully written D04, reported `rarch_main` return, S15, an empty
|
||||
initialized mask, zero cleanup-order errors and zero cleanup failures.
|
||||
Duplicate or failed cleanup is counted independently from the sticky first
|
||||
error, so an earlier runtime error cannot mask cleanup failure.
|
||||
|
||||
The new ASan/UBSan host test passed, as did every C host test and the existing
|
||||
Windows-side Phase-1.0I/J/K/M/N and structural validators. The combined WSL
|
||||
target stopped only when an older validator invoked `git ls-files`: a linked
|
||||
Windows worktree stores a Windows-absolute gitdir that WSL Git cannot resolve.
|
||||
|
||||
The inherited HTTPS remote first failed authentication. The repository was then
|
||||
pushed through the same private Gitea SSH route already configured for Chimera
|
||||
GFX, and `origin/codex/ps5-phase10az-host-av-source` was fetched back as the
|
||||
exact commit above. Remote source binding is therefore complete. Only an
|
||||
offline target-profile reassessment may follow; no target build, ELF,
|
||||
connection, transfer, execution or device action is authorized.
|
||||
@@ -0,0 +1,49 @@
|
||||
# Phase 1.0B device risk assessment
|
||||
|
||||
Overall classification:
|
||||
`RETROARCH_PS5_DEVICE_SMOKE_CANDIDATE_BUILT_WITH_DECLARED_RISKS`.
|
||||
|
||||
## Hard boundaries satisfied offline
|
||||
|
||||
- no PS5 connection, request, transfer or execution occurred;
|
||||
- no installation, autoload, live replacement, sender or retry exists;
|
||||
- no content/config file is required;
|
||||
- persistent write attempts fail closed;
|
||||
- the run requests shutdown at 60 seconds or 3,600 frames;
|
||||
- Options held for two seconds provides an additional shutdown;
|
||||
- the final ELF contains no SceNet, GNM, module-loader, installer, mount,
|
||||
reboot, console-shutdown or other-payload launch import;
|
||||
- SDL's dynamic API and runtime assertion-exit path are disabled, leaving one
|
||||
smoke-owned post-teardown `_Exit` callsite;
|
||||
- the primary ELF contains no permanent W+X load segment.
|
||||
|
||||
The strings audit still sees shared RetroArch localization text for disabled
|
||||
network, autoload and reboot menu entries, plus the generic
|
||||
`udp://127.0.0.1:` template. These are inert data findings, not hidden
|
||||
functionality: the complete undefined-symbol inventory has no networking
|
||||
primitive, and no RetroArch network callgraph is linked. SDK runtime-loader
|
||||
symbol-name strings remain separately because the pinned CRT resolves its
|
||||
own loader at runtime.
|
||||
|
||||
## Declared device-test risks
|
||||
|
||||
| Risk | Class | Bounded mitigation | Residual |
|
||||
|---|---|---|---|
|
||||
| SDK CRT temporary kernel/process patches before `main` | session/integrity | exact SDK v0.41 source and controlled runtime identity | firmware-9.60 effect unobserved |
|
||||
| SDK CRT runtime loader | session/initialization | exact source and DT_NEEDED inventory; no RetroArch dynamic-core path | CRT resolves `sceKernelLoadStartModule` at runtime and can conditionally load `libSceSysmodule`; this is not visible as an ELF import |
|
||||
| `sceAudioOutOutput` is blocking | session hang | SDL worker, error counters, outer 60 s policy | no public timeout ABI; thread/join can still block |
|
||||
| VideoOut/Pad/AudioOut open calls lack an evidenced timeout variant | session hang | single attempt, no retry, partial cleanup | underlying call can outlive outer policy |
|
||||
| direct-memory mapping has no separately evidenced unmap in pinned SDL headers | cleanup | release direct memory and process exit | mapping cleanup before exit is incomplete/unproven |
|
||||
| new RX/R/RW layout | child/session crash | source-bound loader flag handling and relocation audit | device behavior unobserved |
|
||||
| `_Exit` in injected child | session termination | one smoke-owned call after teardown; SDL secondary exit paths compiled out | exact firmware behavior unobserved; SDK init-failure fallback still owns its separate `exit` path |
|
||||
| write firewall relies partly on link wrapping | integrity | VFS guard plus import/disassembly/callgraph audit | libc-internal behavior is not intercepted |
|
||||
| controller mapping differs from label conventions | operability | source-bound Options-to-SDL-Back-to-RetroArch-Select chain | on-device button observation absent |
|
||||
|
||||
These are not brick-safety guarantees. A later operator must explicitly
|
||||
accept possible black screen, missing audio/input, process crash, lost
|
||||
jailbreak/host session, forced manual reboot after a hang, and no diagnostic
|
||||
after video teardown.
|
||||
|
||||
The missing byte-exact Payload Manager backup remains a separate installation
|
||||
blocker. This candidate does not alter that gate because it is not an
|
||||
installation proposal.
|
||||
@@ -0,0 +1,62 @@
|
||||
# Phase 1.0B linker and W^X analysis
|
||||
|
||||
## SDK baseline
|
||||
|
||||
PS5 Payload SDK v0.41 `ldscripts/elf_x86_64.x:20-25` emits three load
|
||||
segments but deliberately marks text `0x7` (RWE), rodata `0x6` (RW) and data
|
||||
`0x6` (RW). The Phase-1.0A software ELF consequently has a permanent RWE
|
||||
text segment.
|
||||
|
||||
## Loader evidence
|
||||
|
||||
Both public elfldr `699e8bcff03e91e8d6ca6eba281af25c5a58d8c2`
|
||||
and hardened elfldr `197623058f509eddde18868dafcb92fdcac66464`:
|
||||
|
||||
- enumerate every `PT_LOAD`;
|
||||
- initially reserve one RW image mapping;
|
||||
- copy all segments and apply `R_X86_64_RELATIVE` relocations in the host
|
||||
mirror;
|
||||
- copy the completed image to the child;
|
||||
- translate every `p_flags` bit through `PFLAGS`;
|
||||
- use `kernel_mprotect` for executable segments and `pt_mprotect` otherwise.
|
||||
|
||||
Relevant hardened source is `elfldr.c:54-56,144-263`. This supports multiple
|
||||
load segments and a temporary relocation-write phase followed by final
|
||||
per-segment protection.
|
||||
|
||||
## Smoke layout
|
||||
|
||||
The smoke-only `pkg/ps5/elf_x86_64_smoke_wx.x` preserves the SDK symbols and
|
||||
0x4000 page alignment while arranging:
|
||||
|
||||
- `.text` and `.plt`: RX;
|
||||
- unwind tables and constant `.rodata`: R;
|
||||
- dynamic symbol/hash/string/relocation tables, `.data.rel.ro`, GOT,
|
||||
init/fini arrays, `.dynamic`, `.data` and `.bss`: RW.
|
||||
|
||||
Runtime-relocated GOT and related metadata deliberately remain writable.
|
||||
The final program-header audit must show no segment with both W and E. All
|
||||
`R_X86_64_RELATIVE` destinations must lie in RW load ranges. The primary
|
||||
candidate is accepted only if both checks pass twice byte-identically.
|
||||
|
||||
## RELRO and self-modification
|
||||
|
||||
The pinned SDK/loader contract does not implement a post-CRT RELRO transition.
|
||||
Marking the GOT read-only before SDK runtime linking would be unsafe, so no
|
||||
RELRO claim is made. No self-modifying RetroArch/smokecore code, JIT or
|
||||
dynamic core loader is enabled or reachable. No production elfldr code was
|
||||
changed.
|
||||
|
||||
## Residual risk
|
||||
|
||||
W^X is statically established, but the exact protected layout has not run on
|
||||
firmware 9.60. Loader protection errors, an SDK runtime write to an
|
||||
unexpected R-only section, or firmware-specific mapping behavior could end
|
||||
the child/session. No persistent installation effect follows from the
|
||||
artifact design, but that claim also remains unobserved.
|
||||
|
||||
The SDK CRT's statically linked runtime loader is present independently of
|
||||
RetroArch's feature set and may conditionally load `libSceSysmodule`.
|
||||
The final import list has no module-loader symbol, but absent imports alone
|
||||
are not used as proof that startup has no module effects; the CRT source and
|
||||
startup disassembly are the controlling evidence.
|
||||
@@ -0,0 +1,47 @@
|
||||
# Phase 1.0B persistent-write audit
|
||||
|
||||
Conclusion: persistent device writes are fail-closed in the selected smoke
|
||||
paths; device execution remains unauthorized.
|
||||
|
||||
## Layers
|
||||
|
||||
1. The PS5 frontend blocks config reads, supplies no content/config/SRAM/state
|
||||
path and selects a static no-content core.
|
||||
2. RetroArch VFS accepts only `RETRO_VFS_FILE_ACCESS_READ`. Write, truncate,
|
||||
remove, rename and mkdir return failure and trip `E118`.
|
||||
3. Link-time wrappers reject write-capable `open/openat`, non-read-only
|
||||
`fopen`, non-stdio `write/fwrite`, and all create, temp, rename, unlink,
|
||||
remove, mkdir, rmdir, chmod, chown and truncate calls.
|
||||
4. A rejected operation returns `EROFS`, stores the first operation in memory,
|
||||
requests shutdown once and never retries.
|
||||
|
||||
`stdout` and `stderr` writes remain allowed because the SDK CRT/RetroArch can
|
||||
already use those process streams. They are not file-output authorization.
|
||||
The ELF imports read-only filesystem primitives (`open`, `fopen`, `read`,
|
||||
`fread`, `stat`, directory iteration); the frontend has no content/config
|
||||
path, but normal runtime/module implementation can still use read primitives.
|
||||
|
||||
## Static reachability result
|
||||
|
||||
Final link garbage collection removes wrapper bodies for operations with no
|
||||
remaining caller. Reachable application calls to `open`, `fopen` and `fwrite`
|
||||
resolve to `__wrap_open`, `__wrap_fopen` and `__wrap_fwrite`; their only
|
||||
forward edges are read-only opens or stdout/stderr. The underlying libc
|
||||
imports remain because accepted paths forward to them.
|
||||
|
||||
No final import is present for `rename`, `unlink`, `remove`, `mkdir`, `chmod`,
|
||||
`chown`, `ftruncate`, `mkstemp`, `tmpfile` or `freopen`. Static absence alone
|
||||
is not the safety claim: the VFS guards, wrappers, linker map and disassembly
|
||||
together provide the offline evidence.
|
||||
|
||||
## Explicit exclusions
|
||||
|
||||
The profile disables or provides no route for config save, playlist/history,
|
||||
SRAM, savestate, screenshot, recording, shader cache, autoconfig, remap,
|
||||
database, temporary file, installation and autoload. It contains no device
|
||||
path, IP address, sender, transfer or installation package.
|
||||
|
||||
Limit: libc internals invoked inside an imported function are not intercepted
|
||||
by linker wrapping. No application path can supply a writable file stream
|
||||
because writable open modes are blocked, but this remains static reasoning,
|
||||
not observed firmware behavior.
|
||||
@@ -0,0 +1,49 @@
|
||||
# Proposed Phase 1.0B one-shot test
|
||||
|
||||
Status: proposal only. Transfer and execution are not authorized.
|
||||
|
||||
## Preconditions for a later review
|
||||
|
||||
- bind approval to the complete ELF SHA-256, size, source commit and manifest
|
||||
SHA-256;
|
||||
- operator independently confirms firmware 9.60 in the PS5 UI;
|
||||
- autoload remains disabled and no live path is selected or replaced;
|
||||
- exactly one transfer and one execution are separately authorized;
|
||||
- no retry, reinstall, backup, recovery, configuration or second payload is
|
||||
combined with the window;
|
||||
- operator accepts all risks in the device-risk assessment.
|
||||
|
||||
## Expected visible sequence
|
||||
|
||||
1. A software framebuffer appears with `CHIMERA RETROARCH PS5 SMOKE TEST`.
|
||||
2. Initialization can pass rapidly through `S01`-`S06`; these phases are not
|
||||
guaranteed to receive their own visible frame.
|
||||
3. `S07` shows increasing monotonic time/frame count, VideoOut/flip index,
|
||||
320 x 240 source with destination pitch/dimensions, XRGB8888 format code,
|
||||
controller buttons/sticks, AudioOut counters, core state and `E000`.
|
||||
4. Holding Options for two seconds shows hold progress and requests `S08`.
|
||||
Without input, 60,000 ms or 3,600 frames requests the same bounded path.
|
||||
5. The final visible frame can show `S08` and its shutdown reason.
|
||||
6. `S09`-`S15` run after the last present; `_Exit` ends the child. No visible
|
||||
completion frame is promised.
|
||||
|
||||
## Operator stop criteria
|
||||
|
||||
Do not retry. Stop the window and record the last visible phase/error when:
|
||||
|
||||
- no image appears;
|
||||
- framebuffer bounds are `FAIL`;
|
||||
- any error other than `E000` appears;
|
||||
- flip count stops advancing;
|
||||
- input state is implausible or Options does not progress;
|
||||
- AudioOut submit time grows unexpectedly or frames stop;
|
||||
- the screen freezes beyond 60 seconds;
|
||||
- RetroArch exits before the expected phase;
|
||||
- the jailbreak/host session disappears;
|
||||
- any write-firewall trip is shown;
|
||||
- any unexpected notification, install, autoload, network or filesystem
|
||||
behavior is observed.
|
||||
|
||||
If the child does not exit, the proposal permits no automated kill, retry or
|
||||
reboot command. The operator may later decide manually whether a console
|
||||
reboot is necessary, outside the authorization window.
|
||||
@@ -0,0 +1,65 @@
|
||||
# Phase 1.0B runtime and exit contract
|
||||
|
||||
Status: source-bound offline contract; firmware-9.60 behavior remains
|
||||
unproven until a separately authorized one-shot run.
|
||||
|
||||
## Stateful lifecycle
|
||||
|
||||
The status record tracks platform, frontend, SDL, video, input, audio, core,
|
||||
threads, buffers, direct memory and device handles. Initialization records
|
||||
each subsystem once in a bounded stack. Cleanup may touch only an initialized
|
||||
bit, runs once, and verifies reverse order. An order violation is sticky
|
||||
`E120`, duplicate init is `E119`, duplicate cleanup is `E121`, and a cleanup
|
||||
failure is `E122`. Host fault injection covers every partial-init boundary,
|
||||
every per-subsystem cleanup failure and an out-of-order cleanup.
|
||||
|
||||
Video cleanup stops future flips, destroys the software surface and event
|
||||
queue, closes VideoOut, releases direct memory, then clears handles. Input
|
||||
cleanup closes Pad before its state is cleared. Audio cleanup stops the SDL
|
||||
worker before AudioOut close and records the elapsed cleanup time. The pinned
|
||||
public SDL source exposes release of direct memory but no separately evidenced
|
||||
direct-memory unmap primitive; this remains a declared cleanup uncertainty.
|
||||
|
||||
## Exit alternatives
|
||||
|
||||
| Option | Exact evidence | Destructors/cleanup | Continuation | Decision |
|
||||
|---|---|---|---|---|
|
||||
| return from `main` | SDK `crt/crt.c:133-146,153-170,196-220` | SDK `.fini` runs | a hijacked process returns through the synthetic address placed by elfldr | rejected |
|
||||
| `payload_exit` | SDK `crt/crt.c:174-180`, `payload.h:45-51` | long-jumps into CRT | still reaches `payload_terminate`; hijacked route returns | rejected |
|
||||
| libc `exit` | imported and used by SDK `payload_terminate` only for a non-hijacked process | libc exit semantics; would bypass the remaining SDK payload path when called directly | process termination expected | not selected |
|
||||
| libc `_Exit` | public libc import in the final ELF; direct call from smoke `main` | all RetroArch/SDL cleanup runs first; no process destructors after call | no synthetic return | selected |
|
||||
|
||||
The selected method is compile-time
|
||||
`CHIMERA_PS5_EXIT_PROCESS_EXIT=1`. After `rarch_main` completes,
|
||||
`main` sets `S15` and reaches one smoke-owned `_Exit(result)` call.
|
||||
The smoke SDL overlay disables the dynamic API and sets
|
||||
`SDL_ASSERT_LEVEL=0`, removing SDL's secondary `SDL_ExitProcess` callsites.
|
||||
Disassembly and the undefined-symbol inventory bind this decision. It does
|
||||
not reboot, launch another process, retry or write a device file. The SDK CRT
|
||||
still imports `exit` for its own pre-`main` initialization-failure
|
||||
termination; that separate startup path is not represented as the selected
|
||||
smoke exit.
|
||||
|
||||
## Loader relationship
|
||||
|
||||
Hardened elfldr commit `197623058f509eddde18868dafcb92fdcac66464`
|
||||
spawns a separate child, writes the pre-injection RIP to `rsp-8`, enters the
|
||||
payload at `_start`, and on the controlled route waits under a bounded
|
||||
watchdog (`elfldr.c:381-410,643-768`;
|
||||
`socksrv.c:128-157`; `ps5_controlled.c:186-215`). `_Exit` terminates that
|
||||
child instead of resuming the synthetic continuation.
|
||||
|
||||
This is stronger source evidence than returning, but it is not device
|
||||
evidence. Remaining exit risks are:
|
||||
|
||||
- SDK CRT initialization and temporary runtime patches occur before `main`;
|
||||
- SDK CRT startup resolves runtime-loader functions and may conditionally
|
||||
load `libSceSysmodule` before entering RetroArch;
|
||||
- firmware-9.60 libc `_Exit` behavior in this exact injected child is
|
||||
unobserved;
|
||||
- a blocked AudioOut call or SDL join can prevent reaching `_Exit`;
|
||||
- the controlled loader route itself is not authorized or exercised here;
|
||||
- ending the child can end the current host/jailbreak session, which is a
|
||||
session risk rather than an installation guarantee.
|
||||
|
||||
No execution-review bundle has been produced.
|
||||
@@ -0,0 +1,81 @@
|
||||
# Phase 1.0B bounded RetroArch smoke candidate
|
||||
|
||||
Status: `BUILT_WITH_DECLARED_RISKS`; offline evidence only. Transfer,
|
||||
installation and execution are not authorized.
|
||||
|
||||
## Scope
|
||||
|
||||
The candidate is the real RetroArch v1.22.2 frontend and runloop from the
|
||||
separate `chimera-retroarch` fork. It statically binds `chimera_smokecore`,
|
||||
uses the pinned PS5 SDL2 software framebuffer, and initializes VideoOut, one
|
||||
Pad device and stereo AudioOut. It requires neither content nor a
|
||||
configuration file. It is not a mini-frontend and contains no dynamic core.
|
||||
The permitted existing smokecore software image is selected, so RGUI/menu
|
||||
and their content browser are compiled out of this bounded variant.
|
||||
|
||||
The logical profile is `ps5-software-rgui-smoke-bounded`; the make selector is
|
||||
`PS5_PROFILE=software-smoke`, and the output label is
|
||||
`retroarch_ps5_software_smoke.elf`.
|
||||
|
||||
## Compile-time closure
|
||||
|
||||
Enabled:
|
||||
|
||||
- real RetroArch frontend and runloop;
|
||||
- static Chimera smokecore, 320 x 240 XRGB8888 at 60 fps;
|
||||
- SDL2 software video with double-buffered PS5 VideoOut;
|
||||
- one SDL2 PS5 Pad and 15% deadzone;
|
||||
- SDL2 PS5 48 kHz stereo AudioOut;
|
||||
- on-screen bounded status record;
|
||||
- 60,000 ms and 3,600-frame shutdown gates;
|
||||
- post-teardown process `_Exit`;
|
||||
- VFS and link-time libc write firewalls.
|
||||
|
||||
Disabled or garbage-collected from the final ELF:
|
||||
|
||||
- dynamic cores, content browser data, playlists/history, databases;
|
||||
- networking, updater, achievements and command interfaces;
|
||||
- screenshots, recording, shaders, filters and compressed content;
|
||||
- SRAM, savestates, remap/autoconfig/config persistence;
|
||||
- keyboard, IME, mouse, sensor, haptic, rumble and lightbar paths;
|
||||
- GNM, OpenGL, Vulkan, RetroArch dynamic-core/module loading, installation,
|
||||
autoload and retry.
|
||||
|
||||
SDL's dynamic API and runtime assertions are disabled in its smoke-specific
|
||||
static build. The pinned SDK CRT remains a necessary startup component: it
|
||||
resolves its own runtime loader primitives and may conditionally load
|
||||
`libSceSysmodule`. This source-bound startup behavior is declared separately
|
||||
and is not confused with a RetroArch dynamic-core path.
|
||||
|
||||
`HAVE_CONFIGFILE=0`, `HAVE_MENU=0` and `HAVE_RGUI=0` remove their read,
|
||||
browser and save paths. Independently, the PS5 frontend sets
|
||||
`RARCH_CTL_SET_BLOCK_CONFIG_READ`, provides no config path, and the smoke
|
||||
firewall rejects every attempted write.
|
||||
|
||||
## Visible record
|
||||
|
||||
The static core draws `CHIMERA RETROARCH PS5 SMOKE TEST`, a build/manifest
|
||||
label, phase, monotonic elapsed time, frame count, VideoOut and framebuffer
|
||||
details, raw button/stick state, AudioOut counters, core state, shutdown
|
||||
reason, first sticky error, write-firewall state and both hard limits.
|
||||
|
||||
Phases are stable `S00` through `S15`; errors are stable `E000` and
|
||||
`E101` through `E123`. `S07 RUNNING` and a final rendered
|
||||
`S08 SHUTDOWN_REQUESTED` are expected on screen. `S09` through `S15` occur
|
||||
during teardown after the final present and therefore remain in the
|
||||
in-memory record rather than being promised as visible frames.
|
||||
|
||||
## Bounded control
|
||||
|
||||
The first condition wins:
|
||||
|
||||
1. Options held for 2,000 ms;
|
||||
2. 60,000 monotonic milliseconds;
|
||||
3. 3,600 core frames;
|
||||
4. a sticky runtime/write-firewall failure.
|
||||
|
||||
The pinned SDL mapping maps the PS5 Options bit to SDL Back, which RetroArch
|
||||
exposes to the core as `RETRO_DEVICE_ID_JOYPAD_SELECT`. Shutdown is requested
|
||||
once. There is no retry, second run or automatic extension.
|
||||
|
||||
No host test or static audit in this phase is hardware evidence.
|
||||
@@ -0,0 +1,24 @@
|
||||
# Phase 1.0BA: offline AV target-profile and callsite audit
|
||||
|
||||
Status: `EXACT_CALLSITE_AND_PROFILE_DELTA_SOURCE_PATCH_ALLOWED_NO_BUILD`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The remote-bound AZ commit leaves one exact integration point in `main`: after
|
||||
`rarch_main` returns and S15 is set, but before `_Exit`. On the normal PS5 loop
|
||||
return, `rarch_main` has already called `main_exit`; the PS5 frontend deinit
|
||||
then removes its SDL, frontend and platform initialization markers. Early
|
||||
initialization returns that bypass `main_exit` retain initialized bits and the
|
||||
AZ predicate therefore rejects D14.
|
||||
|
||||
The smallest profile is a derivative of `write-diag`: it retains the
|
||||
contentless `-v` startup correction, write firewall, D13 operation evidence,
|
||||
bounded runtime, inherited stdout, SDL diagnostic overlay and frame-zero
|
||||
source. The only new target define is `CHIMERA_PS5_AV_DIAG`; its stream magic
|
||||
takes precedence over the inherited J selection. Launcher identity remains
|
||||
outside the payload so both future launch arms use one byte-exact ELF.
|
||||
|
||||
The next source commit may add the call and a distinct `launch-canary` profile,
|
||||
plus host/static tests. This audit does not permit a cross-build, ELF, runner
|
||||
activation, connection, transfer, execution or PS5 action. A subsequent exact
|
||||
source audit must authorize any artifact build separately.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Phase 1.0BB: source-only launch-canary profile
|
||||
|
||||
Status: `REMOTE_BOUND_SOURCE_PROFILE_COMPLETE_BUILD_PREREQUISITE_AUDIT_ONLY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
RetroArch commit `b0f5178e5acb59172fb352098d2ba32e5c42831b` adds the
|
||||
BA-authorized post-S15/pre-`_Exit` terminal call and a distinct
|
||||
`launch-canary` profile. The profile inherits write-diag startup, SDL overlay,
|
||||
write firewall, inherited stdout and bounded runtime behavior. No launcher
|
||||
identity enters the payload bytes.
|
||||
|
||||
All host C/sanitizer tests, existing parser/runner tests, historical source
|
||||
validators, the BB mutation tests and PS5 structural validation passed. No
|
||||
launch-canary ELF or map was produced. The source commit was pushed to and
|
||||
read from the private Gitea origin.
|
||||
|
||||
Only an offline prerequisite audit may now determine whether the exact pinned
|
||||
SDK, SDL archive, linker script, write wrappers and expected object graph are
|
||||
present and hashable. This phase does not authorize a cross-build, artifact,
|
||||
runner activation or device action.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Phase 1.0BC: offline launch-canary cross-build prerequisite audit
|
||||
|
||||
Status: `PREREQUISITES_PARTIAL_EXACT_SDL_MATERIALIZATION_REQUIRED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The installed public SDK v0.41, clean public SDL commit, reviewed diagnostic
|
||||
patch and W^X linker script are present and hashable. The SDK release remains
|
||||
bound to the upstream lock and the local wrapper resolves to Ubuntu Clang
|
||||
18.1.8.
|
||||
|
||||
The isolated RetroArch worktree has no `build/ps5-sdl2-write-diag/libSDL2.a`.
|
||||
No matching archive exists elsewhere in the declared Chimera project scope.
|
||||
WSL also has no CMake or Ninja command at this observation. Reusing an unknown
|
||||
archive or silently selecting the unpatched SDL tree is forbidden.
|
||||
|
||||
The next phase may add and host-test a target-free materializer that accepts
|
||||
only SDL commit `0baf4ac49382b537ba449901b5b6d0d189bb1fbb`, patch SHA-256
|
||||
`aa1d3ebc...70c193` and the locked SDK. It must create outputs only in ignored
|
||||
build storage and must stop before compiling RetroArch. This phase authorizes
|
||||
neither SDL compilation nor a launch-canary cross-build, artifact or device
|
||||
action.
|
||||
@@ -0,0 +1,19 @@
|
||||
# Phase 1.0BD: dormant exact SDL materializer policy
|
||||
|
||||
Status: `REMOTE_BOUND_POLICY_COMPLETE_ADAPTER_SOURCE_ONLY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
RetroArch commit `c003c503ff0b747bd161c75ad7329a62d3880da0` adds a pure
|
||||
policy for the missing SDL archive. It accepts only the BC-bound SDL commit,
|
||||
diagnostic patch and SDK file hashes, requires clean and absent output state,
|
||||
and returns one immutable Ninja/Release/SDL2-static plan affecting exactly the
|
||||
three reviewed PS5 SDL files.
|
||||
|
||||
The module has no process, network, clock, filesystem adapter or CLI. It cannot
|
||||
materialize or compile anything, and its plan excludes both RetroArch building
|
||||
and device actions. Static validation, identity mutations, prerequisite
|
||||
mutations and the complete existing host matrix pass.
|
||||
|
||||
The next phase may implement an injected host adapter and fake-adapter tests.
|
||||
It may not yet invoke CMake/Ninja, build SDL or RetroArch, or act on a PS5.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0BE: fake-only SDL materializer adapter
|
||||
|
||||
Status: `REMOTE_BOUND_FAKE_ADAPTER_COMPLETE_LIVE_ADAPTER_REASSESSMENT_ONLY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
RetroArch commit `1c874e725d3c4a51ffbc7b21e18b7548ffcf1b97` composes
|
||||
the BD plan with an exact-type-checked built-in fake adapter. It proves the
|
||||
identity, absence, detached-stage, patch-check, patch, changed-file, configure,
|
||||
SDL-only build and archive-verification order. Every synthetic failure stops
|
||||
before later operations; subclasses and changed-file drift are rejected.
|
||||
|
||||
There is no subprocess, filesystem, network or device capability. Fake success
|
||||
is not materialization or build evidence. Only an offline live-adapter source
|
||||
reassessment may follow; SDL/RetroArch builds and device actions remain false.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Phase 1.0BF: offline live SDL adapter boundary audit
|
||||
|
||||
Status: `LIVE_ADAPTER_CONTRACT_BOUND_SOURCE_ONLY_NO_INSTALL_OR_BUILD`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The BE operation order can be implemented by a dormant local adapter only if
|
||||
all paths resolve beneath the declared RetroArch build root, every argv is a
|
||||
fixed sequence passed without a shell, identity output is bounded, each process
|
||||
has a hard timeout, and fresh stage/build/archive paths are required. One
|
||||
failure consumes the attempt; there is no retry, fallback, resume or automatic
|
||||
cleanup.
|
||||
|
||||
The adapter may know only Git, CMake and Ninja operations needed for the exact
|
||||
SDL archive. It may not contain apt/package installation, network, RetroArch
|
||||
compilation, target address, device command or launch behavior. Patch checking
|
||||
must precede patching, and the changed-file set must equal the three BD paths.
|
||||
|
||||
Local Ubuntu metadata identifies official repository candidates CMake
|
||||
`4.2.3-2ubuntu2` and ninja-build `1.13.2-1`; neither is installed. This audit
|
||||
does not authorize installation. It authorizes dormant adapter source with
|
||||
fake-process tests only and no invocation against the real workspace.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0BG: dormant SDL materializer request compiler
|
||||
|
||||
Status: `REMOTE_BOUND_REQUEST_GRAPH_COMPLETE_EXECUTOR_SOURCE_ONLY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
RetroArch commit `de23ac2e1debe8c538b2eb1ff973849ad6892946` converts the
|
||||
reviewed plan into eight fixed Git/CMake argv tuples. Output paths are confined
|
||||
below the RetroArch build root; identity output is capped and every request has
|
||||
a timeout. The graph contains no shell, package manager, RetroArch build,
|
||||
network, launcher or device operation.
|
||||
|
||||
The component has no process or filesystem executor, so no command ran and no
|
||||
archive exists. Only bounded executor source with injected fake facades may
|
||||
follow. Tool installation, materialization and cross-building remain false.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 1.0BH: bounded one-shot SDL executor
|
||||
|
||||
Status: `REMOTE_BOUND_FAKE_FACADE_EXECUTOR_COMPLETE_REAL_FACADE_REASSESSMENT_ONLY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
RetroArch commit `aa5002e0794834f737f7a3a55571a29465d877df` adds a
|
||||
one-shot executor over exact fake process/filesystem facades. Consumption
|
||||
precedes preflight. Request order, exit status, UTF-8, output limits, source
|
||||
commit, clean state, changed-file set and final archive presence are enforced.
|
||||
Every tested success or failure prevents reuse.
|
||||
|
||||
No real subprocess/filesystem implementation or CLI exists and no command was
|
||||
run. Only a real-facade and official-tool-installation reassessment may follow;
|
||||
installation, SDL materialization, RetroArch cross-build and device action
|
||||
remain unauthorized.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Phase 1.0BI: real facade and exact host-tool installation audit
|
||||
|
||||
Status: `REAL_FACADE_SOURCE_AND_EXACT_TOOL_INSTALL_ALLOWED_NO_BUILD`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The bounded facade may use Linux `Popen` only with `shell=False`, a new process
|
||||
session, nonblocking merged output, selectors, monotonic time, a per-request
|
||||
byte cap and process-group termination on timeout/overflow. It may expose only
|
||||
the eight BG requests and read-only output-existence checks. There is no CLI,
|
||||
retry, cleanup, package manager, RetroArch operation, network or device path.
|
||||
|
||||
The WSL environment is x86_64 with Python 3.14.4 and noninteractive sudo.
|
||||
Official Ubuntu resolute metadata binds CMake `4.2.3-2ubuntu2` package SHA-256
|
||||
`87c496...becc61` and ninja-build `1.13.2-1` package SHA-256
|
||||
`533239...8f156`. Installation of only those exact versions is allowed and
|
||||
must be verified from dpkg and executable hashes afterward.
|
||||
|
||||
This phase authorizes dormant real-facade source and the exact two-package host
|
||||
installation. It does not authorize invoking the materializer, compiling SDL
|
||||
or RetroArch, producing an artifact or acting on a PS5.
|
||||
@@ -0,0 +1,18 @@
|
||||
# Phase 1.0BJ: exact host-tool installation result
|
||||
|
||||
Status: `EXACT_HOST_TOOLS_INSTALLED_REAL_FACADE_DORMANT_NO_BUILD`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The single Phase-1.0BI package installation attempt completed successfully in
|
||||
WSL. `dpkg-query` reports CMake and cmake-data `4.2.3-2ubuntu2` and
|
||||
ninja-build `1.13.2-1`. The installed executable hashes are recorded in the BJ
|
||||
manifest so later host work can fail closed if the tools change.
|
||||
|
||||
This is host provenance only. It does not activate the real facade or the
|
||||
materializer, compile SDL or RetroArch, produce a target artifact, or authorize
|
||||
any PS5 connection, transfer, installation or execution.
|
||||
|
||||
The same gate produced a dormant real facade at RetroArch commit
|
||||
`c7511c4f2187794b6dbf56fb2c68b57137424f3b`. Its validation is source-only:
|
||||
the process and filesystem implementations were not invoked.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Phase 1.0BK: bounded real-facade host-fixture gate
|
||||
|
||||
Status: `EXACT_HOST_FIXTURES_AUTHORIZED_NO_MATERIALIZER`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
Phase 1.0BJ installed and bound the exact host tools and added a dormant real
|
||||
process/filesystem facade. This gate permits one local WSL test suite against
|
||||
four exact Python fixtures: success, nonzero exit, output overflow and timeout.
|
||||
Each fixture may be started once. They have no filesystem, network, SDL,
|
||||
RetroArch or device operation. The timeout fixture exists solely to prove the
|
||||
process-group termination path.
|
||||
|
||||
This permission does not accept arbitrary commands and does not activate the
|
||||
eight materializer requests. It does not authorize an SDL build, a RetroArch
|
||||
target build, an artifact, a PS5 connection, transfer or execution. The suite
|
||||
result must be recorded separately before any materializer gate is considered.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 1.0BL: fixture import failure and new one-shot gate
|
||||
|
||||
Status: `BK_CONSUMED_BEFORE_FIXTURES_CORRECTED_RUNNER_AUTHORIZED_ONCE`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The single BK suite attempt exited with code 1 while importing the first local
|
||||
`tools` module. Python reported `ModuleNotFoundError: No module named 'tools'`.
|
||||
The failure occurred before `main`, before construction of the facade and
|
||||
before any of the four fixture processes. BK is consumed and is not retried.
|
||||
|
||||
The runner now inserts its repository root in `sys.path`; its exact corrected
|
||||
source and commit are bound below. BL grants one new suite attempt against the
|
||||
same four BK fixtures. This is a new reviewed host-only permission, not an
|
||||
automatic retry. No materializer request, SDL/RetroArch build, artifact or PS5
|
||||
action is authorized.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 1.0BM: real-facade fixture result
|
||||
|
||||
Status: `REAL_FACADE_BOUNDARIES_PROVEN_ON_HOST_DORMANT_COMPOSITION_ALLOWED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The single BL suite attempt completed successfully. Four exact processes were
|
||||
started once: success returned `0`/`OK\n`, nonzero returned `7`/`E7\n`, the
|
||||
65-byte output fixture was rejected at the 64-byte cap, and the sleeping
|
||||
fixture was terminated at its one-second deadline. No materializer request,
|
||||
SDL or RetroArch build, network operation or device action occurred.
|
||||
|
||||
This host evidence permits source-only implementation of a new exact
|
||||
one-shot composition between the reviewed request graph and the proven real
|
||||
facades. The composition must remain dormant. Invocation of any materializer
|
||||
request and every build or PS5 operation remain unauthorized.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Phase 1.0BN: materializer preflight patch-chain audit
|
||||
|
||||
Status: `MATERIALIZER_BLOCKED_PATCH_CHAIN_INCOMPLETE_OFFLINE_REBASE_ALLOWED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The exact SDL commit is clean, the corrected output paths are absent, CMake,
|
||||
Ninja, GNU patch, the SDK inputs and both patch files are present and hash
|
||||
bound. The final preflight nevertheless rejects the current request graph:
|
||||
`sdl2-ps5-early-diag.patch` does not apply directly to the clean SDL commit.
|
||||
Its contexts assume the smoke-hardening overlay, while BG supplies only the
|
||||
early-diag patch. The expected changed-file set also omits
|
||||
`src/dynapi/SDL_dynapi.h`, and the CMake flags are narrower than the historical
|
||||
reviewed early-diag build.
|
||||
|
||||
No materializer request was invoked and no output path was created. This phase
|
||||
permits only an offline temporary-worktree rebase of the two existing reviewed
|
||||
overlays into one exact combined patch, plus source-only correction of the
|
||||
policy/request/composition contracts. It does not authorize CMake, compilation,
|
||||
the final materializer, RetroArch, an artifact or a PS5 action.
|
||||
@@ -0,0 +1,18 @@
|
||||
# Phase 1.0BO: patch-chain remediation result
|
||||
|
||||
Status: `COMPLETE_PATCH_CHAIN_BOUND_RUNNER_SOURCE_ALLOWED_NO_BUILD`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The first temporary checkout exposed CRLF and the second was incomplete; both
|
||||
stopped before a valid overlay result. A third, quiet WSL checkout completed
|
||||
with LF files. GNU patch `2.8` then passed dry-run and application for the
|
||||
smoke-hardening overlay followed by the early-diag overlay. The final diff is
|
||||
clean and changes exactly audio, dynapi, joystick and video.
|
||||
|
||||
The corrected policy now binds both patch hashes and the patch executable. The
|
||||
request graph performs both dry-run/apply pairs, uses the complete historical
|
||||
early-diag CMake flags and `--clean-first`, and derives all output paths from
|
||||
the policy. This phase permits a dormant exact one-shot runner source only. It
|
||||
does not authorize invoking the materializer, CMake, compilation, RetroArch or
|
||||
any PS5 operation.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Phase 1.0BP: one-shot SDL materialization gate
|
||||
|
||||
Status: `EXACT_SDL_ONLY_MATERIALIZATION_AUTHORIZED_ONCE`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The BO runner, validator and source-only tests are hash bound. The pinned SDL
|
||||
source is clean and the exact stage, build and archive paths are absent. BP
|
||||
authorizes one invocation of the exact Python expression below. It may execute
|
||||
only the ten reviewed requests and produce the detached SDL source, SDL build
|
||||
tree and `libSDL2.a`.
|
||||
|
||||
The attempt is consumed before hashing or process creation. Any mismatch,
|
||||
timeout, overflow, nonzero result or missing archive stops the attempt. There
|
||||
is no retry, resume or cleanup. The outputs are retained for audit. This gate
|
||||
does not authorize building RetroArch, producing an ELF/map, connecting to a
|
||||
PS5, transferring, installing or executing anything on a device.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 1.0BQ: inline invocation failure
|
||||
|
||||
Status: `BP_CONSUMED_BEFORE_PYTHON_ENTRYPOINT_SOURCE_ALLOWED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The single BP invocation exited in Bash parsing with an unexpected-token error
|
||||
around the inline Python `join` expression. Python did not start, the runner was
|
||||
not imported and all ten materializer requests remained uncalled. The exact
|
||||
stage, build and archive paths are still absent. BP is consumed; it is not
|
||||
retried.
|
||||
|
||||
BQ permits only a tiny exact Python entrypoint source that imports `run_once`,
|
||||
calls it once and prints its completed operation list. The source must contain
|
||||
no arguments, shell, subprocess, filesystem, network, RetroArch or device
|
||||
logic. No invocation or build is authorized by this phase.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0BR: script-entrypoint one-shot gate
|
||||
|
||||
Status: `EXACT_SCRIPT_ENTRYPOINT_AUTHORIZED_ONCE_SDL_ONLY`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The exact argument-free BQ entrypoint is source-audited and hash bound. It adds
|
||||
only the repository import root, calls the already bound `run_once` exactly
|
||||
once and prints JSON. The production output paths remain absent.
|
||||
|
||||
BR grants one new materialization attempt through the script path, without an
|
||||
inline shell expression. This is a separately reviewed permission, not a retry.
|
||||
Any failure consumes it. No cleanup, resume or automatic retry is permitted.
|
||||
The scope ends at the retained SDL archive; RetroArch and every PS5 action stay
|
||||
unauthorized.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Phase 1.0BS: read-only status timeout
|
||||
|
||||
Status: `BR_CONSUMED_AT_STATUS_TIMEOUT_TIMEOUT_SOURCE_CORRECTION_ALLOWED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
BR entered the exact runner. `verify_sdl_commit` completed, then the bounded
|
||||
real facade terminated `verify_sdl_clean` when WSL Git exceeded its ten-second
|
||||
DrvFS deadline. No detached stage, CMake configure or build started and all
|
||||
three output paths remain absent. BR is consumed and is not retried.
|
||||
|
||||
BS permits only increasing the read-only status request deadline to 120
|
||||
seconds and adjusting its source tests. No other argv, output cap, request,
|
||||
build or device authority changes. Invocation remains unauthorized.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Phase 1.0BT: corrected-timeout one-shot gate
|
||||
|
||||
Status: `EXACT_120_SECOND_STATUS_MATERIALIZATION_AUTHORIZED_ONCE`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
The request graph differs from BR only in the read-only `verify_sdl_clean`
|
||||
deadline, now 120 seconds with unchanged argv and 4,096-byte output cap. The
|
||||
entrypoint and runner are unchanged and the exact outputs remain absent.
|
||||
|
||||
BT grants one new, nonautomatic script attempt. It has no retry, resume or
|
||||
cleanup. Authority ends at `libSDL2.a`; RetroArch artifacts and all PS5 actions
|
||||
remain forbidden.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0BU: WSL Git status timeout and Windows Git fixture gate
|
||||
|
||||
Status: `BT_CONSUMED_WSL_STATUS_UNSUITABLE_WINDOWS_GIT_READ_ONLY_FIXTURE_ALLOWED`
|
||||
|
||||
Date: 2026-07-29
|
||||
|
||||
BT again completed the commit check and timed out in the unchanged read-only
|
||||
status request, now after 120 seconds. The process group was terminated before
|
||||
stage creation and all output paths remain absent. Repeated deadline increases
|
||||
are not justified.
|
||||
|
||||
The locally installed Windows Git `2.54.0.windows.1` is exact-hash bound and
|
||||
has already returned the same checkout clean through PowerShell. BU permits one
|
||||
WSL-to-Windows read-only fixture containing only `rev-parse HEAD` and `status
|
||||
--porcelain`. It does not permit worktree creation, patches, CMake or a build.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 1.0BV: Windows Git fixture result and request correction gate
|
||||
|
||||
Status: `WINDOWS_GIT_READ_ONLY_FIXTURE_PASSED_REQUEST_SOURCE_CORRECTION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The single BU fixture completed both exact read-only commands. Windows Git,
|
||||
invoked from WSL, returned the pinned SDL commit and an empty porcelain status
|
||||
within the 30-second per-command bound. No worktree, patch, CMake, build or
|
||||
device action was invoked.
|
||||
|
||||
BV permits only an offline source correction. The first two materializer
|
||||
requests may use the exact-hash-bound Windows Git executable and Windows SDL
|
||||
source path. The detached LF worktree request may become quiet and use a
|
||||
900-second bound, based on the previously observed roughly six-minute silent
|
||||
checkout. The corrected materializer must not be invoked under this phase.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0BW: corrected SDL materializer one-shot gate
|
||||
|
||||
Status: `CORRECTED_REQUEST_GRAPH_BOUND_ONE_OFFLINE_SDL_MATERIALIZATION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The BV-authorized request correction is committed, pushed and bound below by
|
||||
exact RetroArch commit and source hashes. Host tests and static validators pass.
|
||||
The exact stage, build and archive outputs were rechecked absent.
|
||||
|
||||
BW permits one invocation of the exact script entrypoint. Its scope ends after
|
||||
materializing the patched SDL source and building `libSDL2.a`; it excludes the
|
||||
RetroArch target, network access and every PS5 action. The attempt is consumed
|
||||
when the entrypoint starts. Failure must stop without retry, cleanup or path
|
||||
reuse until a later reviewed result gate.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0BX: changed-files timeout and read-only fixture gate
|
||||
|
||||
Status: `BW_CONSUMED_CHANGED_FILES_TIMEOUT_WINDOWS_GIT_STAGE_FIXTURE_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The single BW attempt completed both source checks, detached stage creation and
|
||||
both patch check/apply pairs. It then timed out in WSL Git
|
||||
`verify_changed_files` after ten seconds. The process group was terminated.
|
||||
The stage exists; the build directory and archive do not. CMake and the SDL
|
||||
build were not invoked.
|
||||
|
||||
BX permits one exact read-only Windows Git `diff --name-only` fixture against
|
||||
the existing stage. It permits no cleanup, output reuse, patching, CMake,
|
||||
build, retry or device action.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Phase 1.0BY: Windows Git stage fixture failure and file-hash gate
|
||||
|
||||
Status: `BX_CONSUMED_CROSS_PLATFORM_WORKTREE_UNREADABLE_EXACT_FILE_HASH_FIXTURE_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The single BX fixture failed with exit code 1 and
|
||||
`fatal: not a git repository: (NULL)`. Windows Git therefore cannot audit the
|
||||
WSL-created worktree through this route. No build or cleanup followed.
|
||||
|
||||
BY permits one PowerShell read-only fixture: read the stage `.git` indirection
|
||||
and calculate SHA-256 for the four exact patch target files. No directory
|
||||
enumeration, Git invocation, cleanup, output reuse, CMake or build is allowed.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0BZ: exact SDL stage cleanup gate
|
||||
|
||||
Status: `PATCH_TARGET_HASHES_BOUND_EXACT_FAILED_STAGE_CLEANUP_ALLOWED_ONCE`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The BY fixture read the WSL `.git` indirection and hashed all four expected
|
||||
patch targets. Their exact hashes are recorded in the manifest. The indirection
|
||||
explains why Windows Git could not open this WSL-created worktree.
|
||||
|
||||
BZ permits one forced WSL Git worktree removal for only the exact failed
|
||||
`build/phase10bd/sdl-source` stage. This destructive cleanup is bounded to the
|
||||
hash-recorded, dirty derived checkout; it does not include other temporary
|
||||
worktrees, the clean SDL source, build outputs or any device. No retry or source
|
||||
change is authorized.
|
||||
@@ -0,0 +1,153 @@
|
||||
# Phase 1.0C PS5 device smoke result
|
||||
|
||||
Date: 2026-07-19
|
||||
|
||||
Local window: 16:19–16:31 CEST
|
||||
|
||||
Classification: `DEVICE_SMOKE_PARTIAL`
|
||||
|
||||
## Result
|
||||
|
||||
The exact Phase-1.0B candidate was rebuilt, reopened, and verified before
|
||||
device contact:
|
||||
|
||||
- artifact: `retroarch_ps5_software_smoke.elf`;
|
||||
- size: 1,826,216 bytes;
|
||||
- SHA-256:
|
||||
`16c04afe26c490b5071388dc9a32524d09d50d181b1baffbbc54bd96f0c2c688`;
|
||||
- linker-map SHA-256:
|
||||
`21dfdaa44261f8d546fa9ea71102162dc880a8ca8037526019a04fece5b21313`;
|
||||
- Phase-1.0B build-manifest SHA-256:
|
||||
`8ee4305bc2d7e5d75d3f7a4b0b335de39c68932ca49c199310cda9f2279dd69f`.
|
||||
|
||||
The complete offline preflight passed: both repositories and pinned upstreams
|
||||
were clean and exact, the clean target rebuild reproduced the authorized
|
||||
identity, the artifact remained stable across reopen and rehash, all 30
|
||||
Chimera GFX CTest cases passed, all 26 Phase-1.0B Python guardrails passed,
|
||||
and the RetroArch host smoke, fault, sanitizer, import, relocation, segment,
|
||||
exit-path, and persistent-write checks passed.
|
||||
|
||||
No Phase-1.0C target, sender, installation, autoload, or device-management
|
||||
code was created.
|
||||
|
||||
## Authorization and attempts
|
||||
|
||||
The operator confirmed all twelve device-preflight statements immediately
|
||||
before the first connection. The first artifact-specific authorization
|
||||
permitted one connection, transfer, execution attempt, and 75-second
|
||||
observation. That transfer completed locally, but the operator's display was
|
||||
off, so no screen evidence was obtained. The operator reported that the
|
||||
console had not hung and still functioned normally.
|
||||
|
||||
The operator then explicitly overrode the no-later-action boundary and issued
|
||||
a new manual authorization for one additional run of the same hash-bound
|
||||
artifact to the same session address. This was a separately initiated manual
|
||||
action, not an automatic retry. The artifact and sender were reopened and
|
||||
rehashed before the second connection. The second transfer also completed
|
||||
locally. During the second 75-second window the operator observed no visible
|
||||
change and reported that the console continued to respond normally.
|
||||
|
||||
| Counter | Result |
|
||||
|---|---:|
|
||||
| TCP connections opened by the selected sender | 2 |
|
||||
| complete local `sendall` operations | 2 |
|
||||
| bytes offered per operation | 1,826,216 |
|
||||
| loader execution attempts requested | 2 |
|
||||
| executions independently observed | 0 |
|
||||
| automatic retries | 0 |
|
||||
| further attempts | 0 |
|
||||
|
||||
The second action is recorded because it occurred, but it does not retroactively
|
||||
change the scope of the first authorization. No third attempt is authorized or
|
||||
performed.
|
||||
|
||||
## Transport evidence
|
||||
|
||||
The selected client was the existing official Y2JB source-controlled sender:
|
||||
|
||||
- source:
|
||||
`Gezine/Y2JB@0dbbf4e7e0203af7e5d101a3256c634edf4e3ba2:payload_sender.py`;
|
||||
- sender SHA-256:
|
||||
`8c87920c41dbdbd66b9f36ca9509f0d6bef9170f351dd97ff831cfb98e642ec6`;
|
||||
- transport: one IPv4 TCP connection per invocation, explicit port 9021;
|
||||
- local input: binary read of the selected ELF;
|
||||
- send behavior: CPython `sendall`, which completes all local sends or raises;
|
||||
- retry/resume: absent;
|
||||
- response/acknowledgement: absent;
|
||||
- close: after successful `sendall`.
|
||||
|
||||
The audited hardened elfldr source at
|
||||
`197623058f509eddde18868dafcb92fdcac66464` recognizes raw ELF magic, receives
|
||||
the complete ELF extent into memory, and makes one spawn attempt without
|
||||
filesystem staging, installation, rename, deletion, or live-file replacement.
|
||||
That local source identity is transport evidence, not byte-exact proof of the
|
||||
currently running device listener.
|
||||
|
||||
Both sender invocations exited successfully and reported 1,826,216 locally
|
||||
sent bytes. Because the raw route has no peer acknowledgement, remote receipt,
|
||||
parse completion, child creation, entry, and exit are not independently proven.
|
||||
|
||||
## Device observations
|
||||
|
||||
| Observation | Result |
|
||||
|---|---|
|
||||
| anonymized device ID | `PS5-FW960-SESSION-A` |
|
||||
| firmware source | operator confirmation from PS5 UI |
|
||||
| raw firmware value | `9.60` |
|
||||
| first visible phase | `UNOBSERVED` |
|
||||
| last visible phase | `UNOBSERVED` |
|
||||
| first error code | `UNOBSERVED` |
|
||||
| write-firewall status | `UNOBSERVED` |
|
||||
| video/title/frame/flip | no visible change observed |
|
||||
| controller/digital/sticks | not observed |
|
||||
| audio/submits | not observed |
|
||||
| Options shutdown | not observed |
|
||||
| automatic deadline | not observed |
|
||||
| process exit | not observed |
|
||||
| host observation windows | 75,235 ms and 75,405 ms |
|
||||
| console response after attempts | normal according to operator |
|
||||
| jailbreak/elfldr session | not independently tested after the attempts |
|
||||
| reboot needed | no |
|
||||
| unexpected persistent effect | none reported; not independently inspected |
|
||||
| photo/video evidence | none |
|
||||
|
||||
The first window supplied no visual evidence because the display was off. The
|
||||
second window supplied a direct negative observation: no visible change
|
||||
occurred while the console remained responsive.
|
||||
|
||||
## Classification and remaining risk
|
||||
|
||||
This result is `DEVICE_SMOKE_PARTIAL`, specifically:
|
||||
|
||||
`NO_VISIBLE_OUTPUT; REMOTE_EXECUTION_AND_ENTRY_UNCONFIRMED; CONSOLE_RESPONSIVE`
|
||||
|
||||
It is not a pass. The evidence does not prove `S00`, `S07`, any error code,
|
||||
VideoOut, Pad, AudioOut, the runtime deadline, teardown, or `_Exit`. It is not
|
||||
a session-recoverable failure because no crash, hang, lost session, or reboot
|
||||
need was observed. It is not a transfer failure because both host-side
|
||||
`sendall` operations completed, although the protocol cannot attest peer
|
||||
receipt or execution.
|
||||
|
||||
The remaining focused questions are:
|
||||
|
||||
1. whether the deployed port-9021 listener is byte-equivalent to the audited
|
||||
hardened source;
|
||||
2. whether it accepted and parsed the complete ELF;
|
||||
3. whether child creation or `_start` failed before the first visible frame;
|
||||
4. whether VideoOut initialization failed without a visible reporting path;
|
||||
5. whether the process ran and exited before the display showed a frame.
|
||||
|
||||
No installation, autoload change, persistent staging, Payload Manager request,
|
||||
live-file replacement, delete, cleanup write, automatic retry, or reboot
|
||||
command was performed.
|
||||
|
||||
## Next phase
|
||||
|
||||
The exact proposed next implementation phase is:
|
||||
|
||||
`PHASE 1.0D — OFFLINE LOADER-TO-ENTRY AND EARLIEST-VISIBLE-ERROR DIAGNOSIS`
|
||||
|
||||
It must remain host/offline work until separately reviewed. It should focus
|
||||
only on distinguishing loader receipt, child entry, and pre-first-frame
|
||||
VideoOut failure using already public, bounded userland contracts. It must not
|
||||
introduce installation, autoload, dynamic cores, GNM, or another device run.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0CA: cleanup result and hash-verifier correction gate
|
||||
|
||||
Status: `EXACT_STAGE_CLEANUP_PASSED_HASH_VERIFIER_SOURCE_CORRECTION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The single BZ cleanup completed successfully. The exact stage and its worktree
|
||||
metadata are absent, while the source checkout remains clean at the pinned SDL
|
||||
commit. No other temporary worktree was removed.
|
||||
|
||||
CA permits only an offline request-graph correction: replace the failing
|
||||
worktree Git diff with exact SHA-256 verification of the four patch targets
|
||||
using the hash-bound `/usr/bin/sha256sum`. The resulting hashes must equal the
|
||||
BY fixture values in exact path order. Materializer invocation, output reuse,
|
||||
CMake, build and device actions remain unauthorized.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Phase 1.0CB: hash-verified SDL materializer one-shot gate
|
||||
|
||||
Status: `HASH_VERIFIER_BOUND_ONE_OFFLINE_SDL_MATERIALIZATION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CA-authorized hash verifier is committed, pushed and bound by exact commit
|
||||
and source hashes. Its host tests and validators pass. The exact stage, build
|
||||
and archive outputs are absent after the separately authorized cleanup.
|
||||
|
||||
CB permits one new invocation of the exact script entrypoint. The request graph
|
||||
must verify all four patched files by SHA-256 before CMake. Scope ends at
|
||||
`libSDL2.a`; RetroArch target build, network and device actions remain excluded.
|
||||
The attempt is consumed at entry and may not retry or clean up on failure.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 1.0CC: CMake timeout and exact output cleanup gate
|
||||
|
||||
Status: `CB_CONSUMED_CONFIGURE_TIMEOUT_EXACT_DERIVED_OUTPUT_CLEANUP_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CB passed the commit, clean-source, worktree, both patch chains and all four
|
||||
patch-target hashes. CMake compiler identification then succeeded for C and
|
||||
C++, but configure exceeded 120 seconds before producing `CMakeCache.txt`.
|
||||
The archive is absent.
|
||||
|
||||
CC permits one cleanup transaction over only the exact derived stage and
|
||||
partial build directory. The stage must be removed through its originating WSL
|
||||
Git worktree administration; the build directory may be recursively removed
|
||||
only after its absolute path is verified beneath the exact Phase-1.0BD root.
|
||||
No retry, source change, build or device action is authorized.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0CD: cleanup result and configure-timeout correction gate
|
||||
|
||||
Status: `EXACT_OUTPUT_CLEANUP_PASSED_CONFIGURE_TIMEOUT_CORRECTION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The one CC cleanup transaction removed only the registered failed stage and
|
||||
partial build directory. Their worktree metadata is absent and the pinned SDL
|
||||
source remains clean.
|
||||
|
||||
CD permits one source-only change: increase
|
||||
`cmake_configure_sdl_only.timeout_seconds` from 120 to 600. The prior configure
|
||||
had already completed C and C++ compiler identification before its deadline.
|
||||
All argv, output limits, later build timeout and safety exclusions remain
|
||||
unchanged. Invocation and output reuse remain unauthorized.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Phase 1.0CE: extended-configure SDL materializer one-shot gate
|
||||
|
||||
Status: `EXTENDED_CONFIGURE_REQUEST_BOUND_ONE_OFFLINE_MATERIALIZATION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CD-authorized timeout-only correction is committed, pushed and hash-bound.
|
||||
Host tests and validators pass, and the exact stage and build outputs are
|
||||
absent. CE permits one exact offline entrypoint invocation with a 600-second
|
||||
CMake configure bound. Scope still ends at `libSDL2.a`; no RetroArch target,
|
||||
network or PS5 action is authorized, and failure consumes the attempt.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Phase 1.0CF: repeated configure timeout and cleanup gate
|
||||
|
||||
Status: `CE_CONSUMED_MOUNTED_BUILDROOT_UNSUITABLE_EXACT_CLEANUP_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CE again passed all pre-CMake operations. CMake made successful compiler and
|
||||
try-compile progress but timed out after 600 seconds without a cache or archive.
|
||||
Further timeout increases on the mounted buildroot are rejected.
|
||||
|
||||
CF permits one cleanup of only the exact derived stage and partial build, using
|
||||
the same bounded methods as CC. It does not authorize another materializer
|
||||
attempt. The next source phase may design and host-test a WSL-native stage/build
|
||||
with exact archive export, but may not invoke it under CF.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0CG: native WSL SDL materializer design gate
|
||||
|
||||
Status: `MOUNTED_OUTPUTS_CLEAN_NATIVE_WSL_SOURCE_DESIGN_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CF cleanup removed the failed mounted stage and build. `/tmp` is a WSL
|
||||
`tmpfs` with 8,226,119,680 available bytes, and the exact proposed root
|
||||
`/tmp/chimera-gfx-phase10ch` is absent.
|
||||
|
||||
CG permits source implementation and fake-host testing only. The materializer
|
||||
may redirect its stage, build and intermediate archive to the exact native root
|
||||
while retaining the pinned mounted source, SDK and patch inputs. No native root
|
||||
may be created, no CMake/build may run, and no archive export, RetroArch target
|
||||
or device action is authorized under CG.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Phase 1.0CH: native WSL SDL materializer one-shot gate
|
||||
|
||||
Status: `NATIVE_WSL_REQUEST_GRAPH_BOUND_ONE_MATERIALIZATION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CG-authorized native request graph is committed, pushed and hash-bound.
|
||||
Host tests, validators and WSL import checks pass; the exact native root is
|
||||
absent. CH permits one offline invocation that may create only that native root,
|
||||
materialize the patched SDL worktree and build `libSDL2.a` there. Archive export,
|
||||
RetroArch target build, network and PS5 actions remain unauthorized.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 1.0CI: native SDK bottleneck and cleanup gate
|
||||
|
||||
Status: `CH_CONSUMED_MOUNTED_SDK_PROBE_BOTTLENECK_EXACT_NATIVE_CLEANUP_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CH passed every preconfigure operation on the native WSL root. Configure then
|
||||
progressed through successful symbol try-compiles but timed out after 600
|
||||
seconds. The scratch tree was native; compiler and sysroot remained mounted.
|
||||
The pinned SDK is only 29,406,271 bytes, so native SDK staging is the next
|
||||
bounded remediation candidate rather than another timeout increase.
|
||||
|
||||
CI permits one cleanup of only `/tmp/chimera-gfx-phase10ch`, with its SDL
|
||||
worktree removed through the originating Git administration before the exact
|
||||
root is recursively removed. No retry, SDK copy, build or device action is
|
||||
authorized in CI.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Phase 1.0CJ: native SDK stage design gate
|
||||
|
||||
Status: `NATIVE_ROOT_CLEAN_FULL_SDK_TREE_BOUND_STAGE_DESIGN_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CI cleanup left the exact native root absent. The pinned SDK contains 2,923
|
||||
regular files, no symbolic links and 29,406,271 bytes. A normalized read-only
|
||||
tar stream binds the entire tree, not merely selected files.
|
||||
|
||||
CJ permits source implementation and fake tests for one exclusive native SDK
|
||||
copy followed by normalized tree verification. The build must reference only
|
||||
the verified native copy. No copy, CMake invocation, build, export, target or
|
||||
device action is authorized under CJ.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Phase 1.0CK: native-SDK SDL materializer one-shot gate
|
||||
|
||||
Status: `FULL_SDK_TREE_STAGE_BOUND_ONE_NATIVE_MATERIALIZATION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CJ-authorized implementation is committed, pushed and hash-bound. The exact
|
||||
native root is absent. CK permits one offline invocation: create and verify the
|
||||
normalized SDK archive, extract it natively, materialize patched SDL and build
|
||||
the native `libSDL2.a`. Export, RetroArch target build, network and PS5 actions
|
||||
remain unauthorized. Failure consumes the attempt without retry or cleanup.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0CL: native-SDK configure progress and cleanup gate
|
||||
|
||||
Status: `CK_CONSUMED_96_SUCCESSFUL_CHECKS_EXACT_NATIVE_CLEANUP_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CK completed SDK staging, full-tree verification, extraction, SDL worktree and
|
||||
patch verification. Native CMake then completed 96 checks and reached the
|
||||
`strcasestr` probe before its 600-second deadline. Compiler and sysroot paths
|
||||
were both native and successful; this is bounded progress, not a toolchain
|
||||
failure.
|
||||
|
||||
CL permits one cleanup of only the exact native root, removing its registered
|
||||
SDL worktree first. No retry, timeout change, build, export or device action is
|
||||
authorized under CL.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Phase 1.0CM: measured configure-timeout correction gate
|
||||
|
||||
Status: `NATIVE_ROOT_CLEAN_MEASURED_1800_SECOND_SOURCE_CORRECTION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CL cleanup succeeded. CK completed 96 native compiler checks in 600 seconds;
|
||||
SDL's remaining libc, math and platform checks make 1,800 seconds a measured
|
||||
upper bound with margin. CM permits only changing
|
||||
`cmake_configure_sdl_only.timeout_seconds` from 600 to 1,800. All commands,
|
||||
other bounds and scopes remain unchanged. No invocation is authorized.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Phase 1.0CN: measured native SDL materializer one-shot gate
|
||||
|
||||
Status: `MEASURED_1800_SECOND_NATIVE_REQUEST_BOUND_ONE_BUILD_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CM timeout-only correction is committed, tested, pushed and hash-bound; the
|
||||
native root is absent. CN permits one offline native-SDK materializer invocation
|
||||
with 1,800 seconds for configure and 600 seconds for `SDL2-static`. Archive
|
||||
export, RetroArch target build, network and every PS5 action remain excluded.
|
||||
@@ -0,0 +1,12 @@
|
||||
# Phase 1.0CO: configure success, build output-limit cleanup gate
|
||||
|
||||
Status: `CN_CONFIGURE_PASSED_BUILD_OUTPUT_LIMIT_STOP_EXACT_CLEANUP_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CN completed native SDK staging, SDL patching and full CMake configure. The
|
||||
build then produced 46 object files before its merged output exceeded 65,536
|
||||
bytes and the process group was terminated. No archive exists.
|
||||
|
||||
CO permits one cleanup of only the exact native root after registered worktree
|
||||
removal. It authorizes no retry or source change.
|
||||
@@ -0,0 +1,9 @@
|
||||
# Phase 1.0CP: build output-limit correction gate
|
||||
|
||||
Status: `NATIVE_ROOT_CLEAN_BUILD_OUTPUT_LIMIT_SOURCE_CORRECTION_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CO cleanup succeeded. CP permits only changing the SDL build merged-output
|
||||
limit from 65,536 to 1,048,576 bytes. The configure and build timeouts, argv,
|
||||
target and all scopes remain unchanged. No invocation is authorized.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Phase 1.0CQ: full-output native SDL one-shot gate
|
||||
|
||||
Status: `CONFIGURE_PROVEN_FULL_BUILD_OUTPUT_BOUND_ONE_BUILD_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CP correction is committed and tested; the native root is absent. CQ
|
||||
permits one native-SDK materializer invocation with the proven 1,800-second
|
||||
configure bound and a 1,048,576-byte SDL-build output cap. Scope ends at the
|
||||
native static archive; export, RetroArch target and PS5 actions remain excluded.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Phase 1.0CR: audited SDL archive export gate
|
||||
|
||||
Status: `NATIVE_SDL_ARCHIVE_AUDITED_ONE_EXCLUSIVE_EXPORT_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CQ one-shot completed all fifteen operations and produced a 2,412,290-byte
|
||||
current `ar` archive with SHA-256
|
||||
`4ced0a042c0b8a70424e42a14cfe9b2c4d30a4cd73b661dc1fcf8ad967a7f7e1`.
|
||||
Offline inspection found 143 members, all five expected PS5 backend objects,
|
||||
all 26 expected undefined Chimera hooks and the expected public SDL entry
|
||||
points. No RetroArch ELF or map exists.
|
||||
|
||||
CR permits exactly one host-only export to the absent mounted destination.
|
||||
The bound exporter verifies the source, uses exclusive leaf creation, flushes,
|
||||
reopens and rehashes the destination. It may not remove the native source.
|
||||
RetroArch target building, networking and every PS5 action remain excluded.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Phase 1.0CS: export-parent correction gate
|
||||
|
||||
Status: `CR_REJECTED_PRE_MUTATION_EXACT_PARENT_AND_ONE_EXPORT_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CR attempt was consumed when the exporter found that the exact destination
|
||||
parent was absent. It stopped before creating a destination leaf and no retry
|
||||
occurred. CS binds the corrected exporter and permits creation of only
|
||||
`build/phase10bd/sdl-build`, below the already existing `build/phase10bd`,
|
||||
followed by one exclusive export of the same audited archive.
|
||||
|
||||
No cleanup, RetroArch target build, network operation or PS5 action is allowed.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Phase 1.0CT: SDL archive export result
|
||||
|
||||
Status: `EXACT_ARCHIVE_EXPORTED_TARGET_BUILD_BLOCKED_MISSING_HEADERS`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CS one-shot exported the audited archive exclusively. The destination is
|
||||
2,412,290 bytes and rehashes to the expected SHA-256
|
||||
`4ced0a042c0b8a70424e42a14cfe9b2c4d30a4cd73b661dc1fcf8ad967a7f7e1`.
|
||||
|
||||
The subsequent Makefile audit found that a target build also consumes the
|
||||
generated and public SDL include roots. Neither has been exported. A RetroArch
|
||||
target build therefore remains blocked until both exact trees are enumerated,
|
||||
hash-bound and copied under a new offline gate.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Phase 1.0CU: exact SDL header export gate
|
||||
|
||||
Status: `HEADER_TREES_BOUND_ONE_HOST_EXPORT_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CU binds both header roots consumed by `Makefile.ps5`. The public tree contains
|
||||
78 regular files (2,400,049 bytes); the generated release configuration tree
|
||||
contains one regular file (16,566 bytes). Their identities cover every sorted
|
||||
UTF-8 relative path, byte length and file SHA-256.
|
||||
|
||||
One host-only staged export is permitted. Existing destinations, symlinks,
|
||||
identity drift and partial reuse are rejected. Cleanup, target building,
|
||||
networking and every PS5 operation remain unauthorized.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0CV: launch-canary offline build gate
|
||||
|
||||
Status: `COMPLETE_SDL_INPUT_BOUND_ONE_OFFLINE_TARGET_BUILD_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The CU export completed and both destination header identities match. The
|
||||
archive, headers, RetroArch commit, Makefile, linker script and normalized
|
||||
native SDK are bound. No target ELF, map, object or dependency file exists.
|
||||
A parse-only Make run produced the complete 121-command build plan.
|
||||
|
||||
CV permits one offline `launch-canary` build with the exact recorded argv.
|
||||
It does not permit `clean`, retry, network access, transfer, installation or
|
||||
execution. Any resulting artifact remains ineligible until a later static
|
||||
ELF/map/callgraph audit records its exact identity and safety properties.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Phase 1.0CW: launch-canary artifact audit
|
||||
|
||||
Status: `OFFLINE_ARTIFACT_BUILT_STATIC_AUDIT_PASS_REPRODUCIBILITY_UNPROVEN`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The one CV build completed and produced an ELF of 1,845,240 bytes with SHA-256
|
||||
`8dadce9d9faaef21ea129a3d216c768eea9a3ca9bf8ecb8d852e376b58a9bf95`.
|
||||
Its map is 630,127 bytes with SHA-256
|
||||
`1cabe4d61b2eb2c1844a58883db6b8644c980759690242bef17f92e9c260b3cd`.
|
||||
|
||||
The ELF is an x86-64 PIE with three load segments and no writable/executable
|
||||
segment. It has the exact seven expected PS5 libraries, zero-sized init/fini
|
||||
arrays, `CHD10AV1`, the D14 cleanup emitter and inherited diagnostic stream.
|
||||
Only the live `open`, `fopen` and `fwrite` firewall wrappers survived section
|
||||
garbage collection. There are no socket-construction or receive imports; the
|
||||
single `send` import is the bounded inherited-descriptor result channel.
|
||||
|
||||
This is one build, not reproducibility proof or firmware evidence. The artifact
|
||||
remains transfer-, installation- and execution-ineligible. The next phase must
|
||||
build independently in a fresh native tree and compare ELF and map bytes.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0CX: isolated reproducibility build gate
|
||||
|
||||
Status: `FIRST_ARTIFACT_AUDITED_ONE_ISOLATED_REBUILD_ALLOWED`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CX permits one independent build in the absent native root
|
||||
`/tmp/chimera-gfx-phase10cx`. The bound builder exports only tracked bytes from
|
||||
the exact target-source commit, recopies and rehashes the audited SDL package,
|
||||
and performs a full object-free build. It succeeds only when both ELF and map
|
||||
match the first build byte-for-byte.
|
||||
|
||||
The source archive and native root are consumed evidence and may not be cleaned
|
||||
or reused. No retry, networking, transfer, installation or PS5 execution is
|
||||
authorized, and even a match does not itself make the artifact eligible.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Phase 1.0CY: launch-canary reproducibility result
|
||||
|
||||
Status: `BYTE_EXACT_ELF_AND_MAP_REPRODUCIBILITY_PROVEN_OFFLINE`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
The isolated CX build completed from a tracked-only source archive in a fresh
|
||||
native root. It reused no object files and invoked neither network nor device
|
||||
actions. Its 1,845,240-byte ELF and 630,127-byte map match the first build
|
||||
byte-for-byte.
|
||||
|
||||
This proves offline build reproducibility, not firmware behavior. The artifact
|
||||
remains ineligible. Before any hardware approval can be considered, the host
|
||||
runner must gain inactive, manifest-only `CHD10AV1` parsing with D14 as its sole
|
||||
terminal and retain the existing consumed-before-connect one-shot rules.
|
||||
@@ -0,0 +1,23 @@
|
||||
# Phase 1.0CZ: inactive launch-canary one-shot runner
|
||||
|
||||
Status: `INACTIVE_ARTIFACT_SPECIFIC_HARDWARE_GATE`
|
||||
|
||||
Date: 2026-07-30
|
||||
|
||||
CZ binds the reproducible 1,845,240-byte launch-canary ELF and adds no free
|
||||
protocol selector. Only an exact active CZ manifest can select `CHD10AV1`; D14
|
||||
is the sole accepted terminal. The runner also requires exactly one ordered
|
||||
D07, D04 and D14, exact RAW semantics for D07/D04, zero cleanup-error fields
|
||||
in D14, at most one D12 and no bytes after terminal. The inherited raw-ELF route remains one connect,
|
||||
one send, one write-half-close, bounded receive, consumed receipt before the
|
||||
socket and exclusive trace creation.
|
||||
|
||||
The tracked manifest and approval template are inactive. They contain no
|
||||
target, port or run ID, all hardware authorizations are false, and artifact
|
||||
eligibility is false. Editing the tracked template is not an approval. A real
|
||||
attempt requires a new active-task statement from Jens naming this exact
|
||||
artifact and scope, plus a separately matching untracked approval.
|
||||
|
||||
This gate covers only the raw-elfldr baseline arm. It does not use shsrv/hbldr
|
||||
and cannot prove the BigApp launch-context hypothesis. Work on a bounded
|
||||
nonpersistent BigApp launcher remains a separate offline track.
|
||||
@@ -0,0 +1,38 @@
|
||||
# Phase 1.0D CRT entry canary
|
||||
|
||||
`chimera_ps5_crt_entry_canary.elf` is a non-RetroArch diagnostic artifact. It
|
||||
uses the pinned normal SDK CRT, the same ET_DYN/W^X loader class, and the same
|
||||
`_Exit` selection as the software-smoke profile.
|
||||
|
||||
Its fixed behavior is:
|
||||
|
||||
1. enter `main`;
|
||||
2. attempt exactly one notification containing
|
||||
`CHIMERA C1 — CRT MAIN REACHED`;
|
||||
3. perform one relative `nanosleep` of two seconds, with no interrupted-sleep
|
||||
retry;
|
||||
4. call `_Exit(0)`.
|
||||
|
||||
It contains no SDL, VideoOut, Pad, AudioOut, filesystem, networking, thread
|
||||
creation, listener, retry, configuration, autoload, payload launch, or
|
||||
installation implementation. Its complete undefined-symbol set is `_Exit`,
|
||||
`memset`, `nanosleep`, and `sceKernelSendNotificationRequest`; DT_NEEDED is
|
||||
only `libSceLibcInternal.sprx` and `libkernel_web.sprx`.
|
||||
|
||||
The notification ABI is copied from the local lifecycle source at commit
|
||||
`fe08300339a13f899fb78ea404ada381a5cba87c`, Git blob
|
||||
`654e6659c9e6f2569ddccf1c9e46ea1c62c066f3`: 45 reserved bytes followed by
|
||||
3,075 message bytes, passed as
|
||||
`sceKernelSendNotificationRequest(0, &request, sizeof(request), 0)`. No
|
||||
notification ABI was inferred from a symbol name.
|
||||
|
||||
Static disassembly binds `main` at `0x0`, the notification indirect call at
|
||||
`0x24b`, `_Exit` at `0x23`, and SDK `_start` at `0x290`. The ELF has three
|
||||
LOAD segments (RX, R, RW), zero RWX segments, an empty init/fini array, no TLS,
|
||||
144 relocations, and 2,512 BSS bytes.
|
||||
|
||||
Two clean builds produced the same 106,344-byte SHA-256
|
||||
`c84c0fb43392ce17abc1e7e6be38b522f1b32a681fd516d684c3dbbf7b34b743`;
|
||||
both maps produced
|
||||
`96132ef015d1743606a86906c810b9e9b2832889a6d49863653b03dddb75cf07`.
|
||||
The ELF is `execution_eligible=false`.
|
||||
@@ -0,0 +1,52 @@
|
||||
# Phase 1.0D early RetroArch diagnostic
|
||||
|
||||
`retroarch_ps5_early_diag.elf` is compile-time profile
|
||||
`PS5_PROFILE=early-diag` with `CHIMERA_PS5_EARLY_DIAG=1`. It retains the real
|
||||
RetroArch frontend, static chimera_smokecore, write firewall, bounded runtime,
|
||||
W^X layout, reverse cleanup, no network, no content/configuration, no dynamic
|
||||
core, no retry, no autoload, and `_Exit`.
|
||||
|
||||
## Diagnostic ladder
|
||||
|
||||
The fixed D00-D12 ladder covers RetroArch main, platform begin/result, SDL
|
||||
begin/result, VideoOut open, buffers, first flip, Pad, AudioOut, core init,
|
||||
runloop, and shutdown. Each stage owns one bit in an in-memory attempted mask,
|
||||
so a notification is attempted at most once. Notification failure is recorded
|
||||
as a raw error and never blocks the primary path. Text is built in a fixed
|
||||
192-byte buffer; truncation is counted and no dynamic formatting allocation is
|
||||
used. Login users are represented only by count and numeric IDs.
|
||||
|
||||
`sceVideoOutSetBufferAttribute2` is `void` in the pinned SDL source. The
|
||||
diagnostic stores `CHIMERA_PS5_DIAG_NO_RETURN_VALUE`; it does not fabricate a
|
||||
success return. Consequently that exact boundary cannot receive a return-code
|
||||
failure injection. Every representable boundary is injected by the host test.
|
||||
|
||||
## Earliest frame
|
||||
|
||||
After VideoOut open, direct-memory allocation/mapping, equeue/event setup, and
|
||||
buffer registration—but before input, audio, core, and runloop—the SDL overlay
|
||||
writes a full magenta frame, a fixed white rectangle, and an embedded black
|
||||
pattern. It submits frame ID 0 once and waits once for at most 100,000
|
||||
microseconds. A failed first flip records D07 and enters bounded teardown; it
|
||||
does not retry or initialize another buffer chain.
|
||||
|
||||
Source callsites are `retroarch.c:6201` for D00 and the
|
||||
`PS5_PresentEarlyDiagnosticFrame` hunk in
|
||||
`pkg/ps5/sdl2-ps5-early-diag.patch` for the magenta frame. Disassembly binds
|
||||
D00 at `main+0xd` (`0x3ccd`), the diagnostic frame helper at `0xfdf90`, its
|
||||
first-flip call at `0xfe1ec`, the common notification call at `0x4776b`, and
|
||||
`_Exit` at `0x3cef`.
|
||||
|
||||
## Host fault model
|
||||
|
||||
ASan/UBSan host tests cover notification failure, truncation and duplicate
|
||||
suppression; user-service failure and no-login-user; VideoOut open; direct
|
||||
allocation/map; registration; equeue/event; first flip; Pad; AudioOut; core;
|
||||
deadline; every cleanup boundary; the write firewall; stable D-code; and
|
||||
exactly one selected `_Exit` path. No test result is hardware evidence.
|
||||
|
||||
Two clean target builds are byte-identical at 1,844,664 bytes and SHA-256
|
||||
`092bcabc0f8717a648030c592aa0dc900f878952fb14ee453851a29f298ea7ee`.
|
||||
Their map hash is
|
||||
`0d4d4614826fa4cbbf11e7374a2d2ecb574a00b55ad9deac17272f9504b254a0`.
|
||||
The artifact is `execution_eligible=false`.
|
||||
@@ -0,0 +1,35 @@
|
||||
# Phase 1.0D hardened-elfldr static model
|
||||
|
||||
The host-only model is in the separate chimera-retroarch fork at
|
||||
`tools/ps5_elfldr_model.py`. Its authority is `elfldr.c` at commit
|
||||
`197623058f509eddde18868dafcb92fdcac66464`, file SHA-256
|
||||
`9949f8e4037984d10f1f5aa498e4665593d1fac8a33614d7f2141349839bb803`.
|
||||
|
||||
It reproduces source checks and data operations for the initial size/magic and
|
||||
program-file bounds, ET_DYN/ET_EXEC, mapping range, PT_LOAD copies, relative
|
||||
relocations, protection layout, entry mapping, synthetic saved RIP, RSP, RDI,
|
||||
and 16 KiB argument-resource mapping. It inventories DT_NEEDED and undefined
|
||||
symbols but correctly records that SDK startup—not `elfldr_load`—resolves
|
||||
them.
|
||||
|
||||
The source does not validate several expected ELF properties: class, data
|
||||
encoding, machine, header entry sizes, segment overlap/alignment, and mapped
|
||||
entrypoint are not loader rejection conditions. The model reports these as
|
||||
source-validation gaps. It never invents stricter acceptance rules.
|
||||
|
||||
| Input | SHA-256 | Result |
|
||||
|---|---|---|
|
||||
| Phase-1.0B smoke | `16c04afe26c490b5071388dc9a32524d09d50d181b1baffbbc54bd96f0c2c688` | ACCEPTED_BY_STATIC_MODEL |
|
||||
| CRT canary | `c84c0fb43392ce17abc1e7e6be38b522f1b32a681fd516d684c3dbbf7b34b743` | ACCEPTED_BY_STATIC_MODEL |
|
||||
| early diagnostic | `092bcabc0f8717a648030c592aa0dc900f878952fb14ee453851a29f298ea7ee` | ACCEPTED_BY_STATIC_MODEL |
|
||||
| lifecycle reference | `bfb4a5cc768e162fe4c2fddf41c3978e152722918a39085277fd172cb95a7182` | ACCEPTED_BY_STATIC_MODEL |
|
||||
|
||||
Negative host copies prove deterministic rejection for bad magic, unsupported
|
||||
type, and out-of-file segment ranges. An unmapped entry yields
|
||||
`MODEL_INCOMPLETE`, while a wrong machine remains accepted with an explicit
|
||||
source-validation gap because the actual loader does not check it.
|
||||
|
||||
`ACCEPTED_BY_STATIC_MODEL` means only “no deterministic rejection in the
|
||||
modeled source path.” It is not proof of runtime allocation, kernel calls,
|
||||
imports, firmware behavior, receipt, entry, execution, notification, cleanup,
|
||||
or return.
|
||||
@@ -0,0 +1,55 @@
|
||||
# Phase 1.0D loader-to-entry analysis
|
||||
|
||||
Status: `RETROARCH_PS5_ENTRY_DIAGNOSTIC_LADDER_BUILT_OFFLINE`.
|
||||
Nothing in this phase authorizes a PS5 connection, transfer, or execution.
|
||||
|
||||
## Source-bound path
|
||||
|
||||
The analysis binds hardened elfldr commit
|
||||
`197623058f509eddde18868dafcb92fdcac66464`, SDK v0.41 commit
|
||||
`d2e2e585740362976a39fdd5ccf390f199a7bc37`, and chimera-retroarch
|
||||
commit `69b65858ffaee826d70f5c0df61013cd1b0e2048`.
|
||||
|
||||
| Order | Source operation | Observable marker | Failure status |
|
||||
|---:|---|---|---|
|
||||
| 1 | elfldr sanity checks the received buffer | none | host receipt and this check remain unobservable |
|
||||
| 2 | elfldr reserves/copies segments, applies relative relocations and protections | none | allocation, mapping, copy, protection, or sync can fail |
|
||||
| 3 | elfldr creates `payload_args_t`, saves a synthetic return at `RSP-8`, sets entry RIP and passes args in RDI | none | resource setup and register writes can fail |
|
||||
| 4 | SDK `_start` clears BSS | none | loader/stack/entry correctness is still required |
|
||||
| 5 | `payload_init` calls `__crt_syscall_init`, `__kernel_init`, `__klog_init`, resolves and sets `__isthreaded` | none | any failed setup returns before `main` |
|
||||
| 6 | `__patch_init` changes current-process credentials/capability attributes and the permitted syscall-address range | none | exact runtime success and firmware-9.60 behavior are unproven |
|
||||
| 7 | `__rtld_init`, dependency opening, relocation and init-array handling | none | a missing module/import or relocation failure can stop before `main` |
|
||||
| 8 | canary `main` or RetroArch `main` | C1 or D00 | first Phase-1.0D visible boundary |
|
||||
| 9 | profile body and bounded teardown | D01-D12 for early diagnostic | raw boundary result is retained in memory |
|
||||
| 10 | `_Exit` selected by the profile | D12 precedes it in the early profile | device exit behavior remains unproven |
|
||||
|
||||
The earliest possible failure is therefore before `_start`: elfldr receipt,
|
||||
validation, mapping, argument-resource construction, or register transfer.
|
||||
After entry, the earliest application-independent failure is BSS/SDK CRT
|
||||
initialization. Neither C1 nor D00 can distinguish those earlier steps.
|
||||
|
||||
## Loader and artifact effects
|
||||
|
||||
The existing loader itself performs process mapping, protection, ptrace-style
|
||||
register operations, socket-overlap setup for the SDK argument resources, and
|
||||
kernel/process changes in its broader execution path. The normal SDK CRT also
|
||||
performs the bounded source-visible writes described above. Phase 1.0D does
|
||||
not call any of this: it only builds and audits files offline. These effects
|
||||
must not be described as harmless or absent in any later run authorization.
|
||||
|
||||
No SDK CRT or hardened elfldr source was modified. No freestanding startup was
|
||||
introduced. Static model acceptance is not proof of transport, receipt,
|
||||
execution, firmware compatibility, visible notification, or safe exit.
|
||||
|
||||
## Complexity comparison
|
||||
|
||||
| Artifact | Bytes | Entry | PHDRs / LOADs | Relocations | Imports | DT_NEEDED | BSS bytes | Largest LOAD memory |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
||||
| Phase-1.0B smoke | 1,826,216 | `0xfdd70` | 4 / 3 | 1,053 | 140 | 7 | 697,232 | 903,360 |
|
||||
| CRT canary | 106,344 | `0x290` | 4 / 3 | 144 | 4 | 2 | 2,512 | 35,312 |
|
||||
| early diagnostic | 1,844,664 | `0xfec40` | 4 / 3 | 1,054 | 141 | 7 | 697,616 | 903,744 |
|
||||
| lifecycle reference | 112,680 | `0x90` | 4 / 3 | 142 | 2 | 2 | not used as a Phase-1.0D claim | not used as a Phase-1.0D claim |
|
||||
|
||||
The canary materially reduces size, imports, modules, and relocation volume.
|
||||
The comparison can isolate classes of failure in a future authorized ladder;
|
||||
it does not establish which class caused Phase 1.0C.
|
||||
@@ -0,0 +1,44 @@
|
||||
# Phase 1.0D future device-test ladder
|
||||
|
||||
Current state:
|
||||
|
||||
```text
|
||||
ps5_connection_authorized=false
|
||||
device_transfer_authorized=false
|
||||
device_execution_authorized=false
|
||||
installation_authorized=false
|
||||
autoload_authorized=false
|
||||
device_write_authorized=false
|
||||
automatic_retry=false
|
||||
```
|
||||
|
||||
There is no transfer or execution package. The following is only a contract
|
||||
for a later task.
|
||||
|
||||
## RUN A
|
||||
|
||||
A later authorization must name exactly
|
||||
`chimera_ps5_crt_entry_canary.elf`, size 106,344 bytes, SHA-256
|
||||
`c84c0fb43392ce17abc1e7e6be38b522f1b32a681fd516d684c3dbbf7b34b743`,
|
||||
the destination address supplied in that later task, one connection, one
|
||||
direct in-memory transfer, one execution, and a bounded observation window.
|
||||
It must continue to forbid install, autoload, staging, device files, live
|
||||
replacement, cleanup, retry, reconnect, reboot, and any other payload.
|
||||
|
||||
Visible `CHIMERA C1 — CRT MAIN REACHED` is the only RUN-A success marker. A
|
||||
completed host send is not success. RUN A is never automatically repeated.
|
||||
|
||||
## RUN B
|
||||
|
||||
RUN B cannot be authorized merely because Phase 1.0D passed offline. It
|
||||
requires visible RUN-A success, a separately recorded result, and a new
|
||||
artifact-specific authorization naming
|
||||
`retroarch_ps5_early_diag.elf`, size 1,844,664 bytes, SHA-256
|
||||
`092bcabc0f8717a648030c592aa0dc900f878952fb14ee453851a29f298ea7ee`.
|
||||
It permits at most one connection, transfer, execution, and bounded
|
||||
observation. The operator records the last visible D-code or the magenta-frame
|
||||
state.
|
||||
|
||||
RUN B has no retry, reconnect, second execution, third artifact, autoload,
|
||||
installation, persistent staging, device write, or Phase-1.0B smoke rerun.
|
||||
RUN A authority does not carry to RUN B.
|
||||
@@ -0,0 +1,66 @@
|
||||
# Phase 1.0D startup and import closure
|
||||
|
||||
## Pre-main closure
|
||||
|
||||
The SDK `_start` order is BSS clear; syscall bridge; kernel argument bridge;
|
||||
klog; `__isthreaded`; `__patch_init`; runtime linker; dependent library
|
||||
opening/relocation; init array; then `main`. Both Phase-1.0D artifacts have
|
||||
zero-byte init and fini arrays and no TLS sections or PT_TLS. Heap, signal, and
|
||||
pthread behavior is not an application constructor here, but the runtime and
|
||||
linked libraries remain able to resolve their normal facilities.
|
||||
|
||||
`__patch_init` is not side-effect-free: it reads then changes current-process
|
||||
capability/attribute bytes (including source comments for JIT shared memory
|
||||
and ptrace) and writes lower/upper syscall-address bounds through kernel
|
||||
copyin. The loader also prepares mappings and SDK resources before entry.
|
||||
These are pre-main failure points with no C1/D00 marker.
|
||||
|
||||
The SDK runtime linker can resolve and conditionally load
|
||||
`/system/common/lib/libSceSysmodule.sprx`; exact runtime module availability
|
||||
and whether that conditional path executes on firmware 9.60 are unproven.
|
||||
Hardened elfldr does not resolve the artifact's dynamic symbols; the SDK
|
||||
runtime path does.
|
||||
|
||||
## Canary imports
|
||||
|
||||
| Import | Class | Rationale |
|
||||
|---|---|---|
|
||||
| `memset` | CRT_PRE_MAIN / helper | request clearing may be compiler-lowered; SDK startup precedes it |
|
||||
| `sceKernelSendNotificationRequest` | CANARY_MAIN | only C1 output |
|
||||
| `nanosleep` | CANARY_MAIN | one two-second relative wait |
|
||||
| `_Exit` | SHUTDOWN | selected terminal call |
|
||||
|
||||
Required modules are `libkernel_web.sprx` and `libSceLibcInternal.sprx`.
|
||||
|
||||
## Early-diagnostic groups
|
||||
|
||||
The complete 141-symbol set is machine-readable in
|
||||
`manifests/retroarch/phase-1.0d-early-diag-artifact.json`. Its meaningful
|
||||
boundary grouping is:
|
||||
|
||||
- CRT_PRE_MAIN: SDK-owned syscall/kernel/klog/patch/runtime-linker operations
|
||||
are statically linked and may resolve libc/kernel facilities before D00.
|
||||
No target marker precedes them.
|
||||
- RETROARCH_PRE_VIDEO: libc/POSIX support, user service, system-service splash,
|
||||
notification, clock and bounded platform status.
|
||||
- VIDEO: direct memory, equeue, and every `sceVideoOut*` import.
|
||||
- INPUT: `scePadInit`, `scePadOpen`, `scePadReadState`, `scePadClose`.
|
||||
- AUDIO: `sceAudioOutInit`, `sceAudioOutOpen`, `sceAudioOutOutput`,
|
||||
`sceAudioOutClose`.
|
||||
- SHUTDOWN: `_Exit`, close/release/delete operations and bounded teardown.
|
||||
- UNREACHABLE_IN_PROFILE: generic RetroArch file-write strings and code may
|
||||
remain linked, but the profile routes mutating entrypoints through the
|
||||
write firewall and disables content/configuration; no socket/SceNet import
|
||||
is present.
|
||||
|
||||
The import list alone cannot prove reachability. Conversely, absent imports do
|
||||
not disprove statically linked behavior. The source profile, linker map,
|
||||
disassembly, undefined-symbol inventory, and host fault model are considered
|
||||
together. Generic localization strings such as netplay text and
|
||||
`udp://127.0.0.1:` remain in the binary; there is no target network callgraph
|
||||
or network import. SDK patch symbols also remain because normal CRT startup
|
||||
was an explicit requirement.
|
||||
|
||||
The earliest new marker that does not modify SDK CRT or loader architecture is
|
||||
therefore C1/D00 at application `main`. A notification earlier than that would
|
||||
require a separately reviewed CRT/loader change and is out of scope.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user