Files
SirHumza--orbisRPC/HANDOFF.md
T

76 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HANDOFF — OrbisRPC PS4 Rich Presence
Date: 2026-09-24. Branch: `main` (pushed). Console: PS4 9.00, GoldHEN 2.4,
`192.168.1.136` (FTP :2121 anon, klog :3232, BinLoader one-shot :9020).
## Folder layout (repo root)
- `orbisrpc/` — all daemon sources. Key files: `daemon.c` (loop/sessions),
`discord.c` (presence serialize), `detect.c` (game finding), `tmdb.c` +
`art_table.h` (Sony metadata), `art.c` (mp: proxy resolve), `tls.c` +
`ws.c` (transport), `updater.c` + `manifest.c` + `health.c` (updates),
`timesync.c` (SNTP), `lock.c`, `cfg.c`, `log.c`, `jsonlite.c`.
- `scripts/build_sdk.sh` — builds the daemon payload with ps4-payload-sdk
(`build-sdk/orbisrpc_sdk.elf`). Toolchain: `~/ps4-payload-sdk`, shim in
`~/llvmshim`. NEVER link `libkernel.so` (instant death in spawn context;
gate in CI + `tests/e2e_consumer.py`).
- `tests/` — host unit tests + e2e contracts. `make test`, `make asan`.
- `scripts/build_art_table.py` + `titles.txt` — regenerates art table/icons.
- `docs/injecting.md` — how payloads get onto the console (one-shot rule!).
- `findings/` — hardware research archive (loaders, TLS PSA, IME, linkage).
- `scripts/ps4_watch.py` — one-shot console state diff (repo copy may be
absent; logic: FTP file sizes + ports + newest screenshot).
## Existing issues (ranked, all reproduced)
1. **Cover art tile** — shows "?" instead of game art. mp: proxy renders
(proven live), uploaded asset stuck `private`, external URLs drop the
whole activity. Daemon resolves mp: per session (`art: resolved mp` in
log). Needs: propagation wait or per-title asset strategy (below).
2. **Stale title on fresh launches** — save-mtimes get bulk-touched by
cloud sync (all 28 titles shared one mtime!); app.pkg atime added as
sharper signal; eboot-set change fast-path added. Unproven live.
3. **Game crashes (CE-34878-0)** on some titles with daemon on — no
mechanism found after full audit; console has prior crash history.
Needs clean-boot test (reboot, no payload, launch).
4. **IME keyboard** never opens (0x80BC0010 through six fixes). Token is
pre-seeded via FTP; do not block on this.
5. **Rest Mode** — wake/resume coded, never tested through a real cycle.
6. **Updater drill** — staged-update path never tested live.
7. **Plugin path** — PRX can't deploy via FTP (console converts SELF→ELF);
must ship inside PKG. Untested live.
8. **`main` vs `WIP` branches** — main = proven runtime line; WIP = old
1.0 product line (installer/app/docs). Do not merge blindly.
## What could be better (next agent: pick these up)
- **Rest Mode field test** + home-screen presence proof.
- **Updater live drill** (stage → reboot → rollback check).
- **IME**: needs on-console iteration with return-code logging (already
instrumented in `pkg/app_main.c` on the WIP line).
- **Plugin live test** via PKG delivery.
- **e2e/CI**: `.github/workflows/ci.yml` exists; extend coverage for new
modules (lock, timesync, art, session persistence).
- **Playtime ledger reader** (totals per title; data already banked).
- **Media-type table**: only Netflix/YouTube mapped; add IDs as found.
## Auto icons from Sony CDN (no manual adding) — the design
Goal: never hand-add a title again. Three layers, in order:
1. **Live TMDB-over-TLS** (`tmdb_https_get()` in `tmdb.c`, already coded):
queries `tmdb.np.dl.playstation.net:443` for any title ID at resolve
time. Port 80 is blocked on-console; **443 was never proven — first
job is running `probe_tmdb443.elf` on hardware.** If green, every
current and future game resolves fully automatically.
2. **Self-growing table fallback**: daemon already logs unknown title IDs
implicitly (raw-ID sessions). Add a CI job: parse `titles.txt` +
any new IDs seen, run `build_art_table.py`, commit regenerated
`art_table.h` + icons. Table then grows itself with zero hand edits.
3. **mp: proxy at post time** (`art.c`, proven rendering): whatever URL
layers 1–2 produce gets proxied per session; cache expires per game
switch so mappings never go stale.
Rule: hands touch art ZERO times — new game installs resolve through
layer 1, or land in the table via layer 2's automation.