Commit Graph
78 Commits
Author SHA1 Message Date
phantomptr d040883261 Release v7.0.28 2026-10-16 08:27:37 -07:00
phantomptrandClaude Opus 5.5 a61954b5fe ffpfsc unpack: host stand-in for the C tests, rename audit row
The C interop tests build fs_jobs.c, which registers the unpack op; its LVD mount has no
host counterpart, so the host gets a refusal. Its .part -> image rename is a sibling
rename and goes in cross_device.h's audit table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3cPwhp3UrzayBfyy9PDcN
2026-10-16 08:10:58 -07:00
phantomptrandClaude Opus 5.5 e90dd6e4b4 Decompress a .ffpfsc on the console, decoded by the kernel (#453)
Files gets "Decompress to .exfat…" on a .ffpfsc again. The first build (pulled
before 7.0.23) inflated the blocks in the helper with vendored zlib, and the helper
died with SIGBUS within minutes of loading it; once the console froze. This one has
no decoder: the helper mounts the container read-only the way ShadowMount+ mounts a
.ffpfsc (LVD image type 9, read-only single-save flags, 4096-byte sectors, pfs with
mkeymode=AC), so the kernel decodes it, and copies the file inside to <name>.part,
then renames it in the same folder. The kernel lists that file rounded up to whole
64 KiB blocks; only the inode's real length is copied.

The checks from the first build stay: the container's block table is read before the
kernel sees it, a destination that exists and a drive without room for the image plus
1 GiB are refused, the size and exFAT boot sector are checked before the rename, and
Stop removes the .part and the mount. One unpack runs at a time. The mount is not in
the mount table the helper sees, so it is recorded on the /mnt tmpfs (owner pid, LVD
unit, .part) and a helper that starts after one died mid-copy releases it; a record of
a live instance is left alone.

Measured on the FW 13.60 Phat: a 315 MB image (127 MB container) in 3.5 s and a 4.5 GB
one (3.0 GB container) in 65 s, both byte-identical to the source; Stop, a takeover
mid-copy and a stale record all left no mount, LVD unit or .part behind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3cPwhp3UrzayBfyy9PDcN
2026-10-16 07:09:42 -07:00
phantomptr 80e68028a6 Release v7.0.27 2026-10-16 01:09:45 -07:00
phantomptr d74824c886 Release v7.0.26 2026-10-15 18:13:07 -07:00
phantomptrandClaude Opus 5.5 f61f5629e7 Reddit fixes: folder games register with ShadowMount+, resumable stalls, solid-rar retries, PM updates, drag to move
- Receiver writes sce_sys/param.json and param.sfo as .ava-hold and puts them in
  place when the job finishes: ShadowMount+ registered a folder whose eboot.bin
  was still arriving, failed twice and skipped the title for good (repro on
  13.60).
- AVA1 SkipProgress (0x30): a sender reading past data the receiver holds (a
  resumed solid .rar/.7z) keeps the job alive; the console ended it as stalled
  after 900 s on every retry.
- RAR5 unknown-size entries no longer wrap the unpacked total.
- Upload queue: stalled rows offer Restart transfer, stopped/interrupted rows
  offer Resume, "Retry failed uploads" actually runs them and is translated as
  an action.
- Payload Manager tab: Update for payloads stored from the Catalog, keeping the
  boot-list place; repository installs are left to Payload Manager.
- Files: drag folders (and, without drag-out, files) onto a folder or the
  breadcrumb to move them.
- README links the compose file from the feature list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-15 18:05:34 -07:00
phantomptr 08e32214af Release v7.0.25 2026-10-15 12:12:35 -07:00
phantomptr 0b6fb9bfb3 Release v7.0.24 2026-10-15 10:05:18 -07:00
phantomptrandClaude Opus 5.5 0c1aeae1ef Payloads → Ports: the ports in use on the PS5 (Discord ask)
New helper method net.ports (147, frame 265/266): binds each TCP and UDP
port and closes it at once (never connects, so no loader sees a silent
client), then binds 127.0.0.1 and the LAN address to tell network,
console-only and outgoing sockets apart. The socket sysctls
(net.inet.*.pcblist, kern.file) answer ENOENT on FW 13.60. A full pass
takes ~890 ms on the Phat. The engine names well-known ports and the
Payloads screen lists them, with Open only for web UIs and unknown ports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-15 10:05:11 -07:00
phantomptr 61f6d0e9e8 Release v7.0.23 2026-10-15 00:18:50 -07:00
phantomptrandClaude Opus 5.5 98e19ae62a Rename audit: list icon_keeper.c's tmp -> final rename
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-15 00:02:33 -07:00
phantomptrandClaude Opus 5.5 d055239ddb Revert "Decompress a .ffpfsc on the console (#453)"
This reverts commit 1f27c1a560.

Every helper build that linked the vendored zlib died within minutes on a
FW 13.60 Phat with SIGBUS in a system library touching helper code at
zlib's inflateEnd (logged by the new fault detail: addr=0x200161159,
rip=0x88007fe60), most often right after an app kill. One such build was
running when the console went down during a game launch and did not come
back. The same helper without zlib ran through repeated launches and kills.
The decompress op goes back out until it can run without linking zlib into
the helper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-14 23:51:53 -07:00
phantomptrandClaude Opus 5.5 1f27c1a560 Decompress a .ffpfsc on the console (#453)
Files gets "Decompress to .exfat…" on a .ffpfsc. The helper writes the image
the container holds beside it, under the image's own name, and keeps the
source; nothing crosses the network, where the round trip through a computer
was 191 GB of Wi-Fi for a 56 GB container in the report.

The helper (new job op FFPFSC_UNPACK, id 10 in the AVA1 schema) reads the
single-file PFS the way the engine's reader does, inflates each 64 KiB block
with vendored zlib 1.3.1 (inflate side only, third_party/zlib), and writes
<name>.part. It refuses a drive without room for the image plus 1 GiB and a
destination that exists, checks the size and, for an .exfat, the boot
sector, then renames within the folder. Progress and Stop go through the
op-status/op-cancel routes; the engine route is POST /api/ps5/fs/unpack. The
Files screen shows a progress line with Stop and a task. Strings in all 21
locales.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-14 20:32:07 -07:00
phantomptrandClaude Opus 5.5 9a620c6026 Hidden home-screen icons stay hidden after their app starts (#450)
The system sets an app's icon visible again whenever the app starts, from
ps5upload, the home screen or a forwarder (measured on a FW 13.60 Phat: visible
again within 5 s of launch). The helper now remembers the titles hidden through
ps5upload (/data/ps5upload/hidden_icons.txt, seeded once from what app.db has
hidden) and a thread hides them again when app.db changes, writing only rows
that came back. On the Phat a relaunched hidden game was hidden again 2 s
after the system showed it, with no repeat writes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-14 20:06:55 -07:00
phantomptrandClaude Opus 5.5 8b24e27e53 Helper: a prior that served nothing gets 3 s, not 15 s, to exit
Sending the helper could spin for 20-40 s after the console showed it loaded
(reported on Discord). On a FW 13.60 Phat, 3 of the last 4 helper starts sat in
the 15 s reap grace: the recorded prior was a ps5upload.elf alive for hours with
no startup trace and no AVA1 port, so the takeover never asked it to exit and it
never would. The full grace is now kept for a prior that was serving and was
asked to hand over; one that served nothing is killed after 3 s.

A normal replacement on the Phat still hands over cleanly; AVA1 was up 1.9 s
after the new helper entered main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EU1Z2mdhAxBrH1yb48pxik
2026-10-14 19:49:59 -07:00
phantomptr 01afdf8926 Release v7.0.22 2026-10-12 02:17:36 -07:00
phantomptr f7b411c6db Release v7.0.21 2026-10-12 02:07:18 -07:00
phantomptr cdda1e0e11 Release v7.0.20 2026-10-12 00:25:25 -07:00
phantomptr 0b9659b436 Release v7.0.19 2026-10-12 00:17:59 -07:00
phantomptr 10dd8e8520 Release v7.0.18 2026-10-11 23:38:54 -07:00
phantomptr 6b646d818b Release v7.0.17 2026-10-11 22:47:06 -07:00
phantomptr b74365dbc0 Release v7.0.16 2026-10-11 22:30:52 -07:00
phantomptr a0a5edb7a0 Release v7.0.15 2026-10-11 21:58:11 -07:00
phantomptr b18c7de5a6 Release v7.0.14 2026-10-11 21:16:26 -07:00
phantomptr 774577a499 Release v7.0.13 2026-10-11 20:07:49 -07:00
phantomptr b390165ae1 Release v7.0.12 2026-10-11 13:12:51 -07:00
phantomptr 004d7becbb Release v7.0.11 2026-10-11 12:47:02 -07:00
phantomptr 48fb4ee1c1 Release v7.0.10 2026-10-11 11:19:16 -07:00
phantomptr 2d062c6b60 Release v7.0.9 2026-10-11 10:46:23 -07:00
phantomptr 82e86c63b5 Release v7.0.8 2026-10-11 02:44:28 -07:00
phantomptr fed3cf2146 Release v7.0.7 2026-10-11 01:32:20 -07:00
phantomptrandClaude Opus 5.5 ece147d720 Games: hide a title's icon from the PS5 home screen, and show it again (#407)
For shortcuts and loaders that, once set up, only clutter the home
screen. ⋯ → "Hide from home screen" on a Games card; a "Hidden" badge
marks it, "N hidden from the home screen" at the top filters to them,
and ⋯ → "Show on home screen" puts it back.

How: every user's icon table in app.db (tbl_iconinfo_<user>) has a
`visible` flag; the system hides some of its own apps with it. The
helper (app.icon_set, app.hidden_list) flips only that flag: nothing is
deleted, the title stays installed and playable. Guards: title ids only,
system apps (NPXS) refused, tables found by shape (titleId + visible),
app.db backed up once to /data/ps5upload/app.db.before-hide before the
first change, BEGIN IMMEDIATE (fails before any change if the system
holds the lock), and rolled back unless at least one and at most one
row per table changed. The hidden list is read live from app.db, so it
cannot drift from the console, and leaves out the system's own hidden
apps. The home screen redraws when an app is next opened and closed;
the console shows a notification saying so.

Verified on the Phat (FW 13.60): WebKit Autoloader hidden, listed, shown
again; a system app and an unknown id refused; the backup written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-11 00:36:44 -07:00
phantomptr 2ace14e90f Release v7.0.6 2026-10-10 23:26:42 -07:00
phantomptr 6cd4f021d8 Release v7.0.5 2026-10-10 23:11:20 -07:00
phantomptr 9e17809797 Release v7.0.4 2026-10-10 23:05:52 -07:00
phantomptr c7fa4d068a Release v7.0.3 2026-10-10 22:49:21 -07:00
phantomptr 72fe7f84d8 Release v7.0.2 2026-10-10 22:33:31 -07:00
phantomptr bc973486ad Release v7.0.1 2026-10-10 19:19:38 -07:00
phantomptrandClaude Opus 5.5 1d47c778f5 7.0.0: a new look for the whole app, and fixes that make it faster and sturdier
Not tagged or published yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 11:36:53 -07:00
phantomptrandClaude Opus 5.5 7f724d3399 6.8.2: every screen gone through, dead code removed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 09:50:01 -07:00
phantomptrandClaude Opus 5.5 7a5608c6a9 Remove dead engine/payload code and the FTX2 migration shims
Engine: drop the unused /api/fakelibs/manifest, /api/collection/summary and
/api/ps5/content-db/backup routes, the payload FTP client (core ftp.rs, FTP_START/STATUS)
and NOTIF_SEND, and pub items only their own tests called. The DPI reason strings now come
from the payload_lifecycle constants everywhere.

Shims: the legacy helper replace flow (engine legacy_helper/legacy_guard, the helper/state
and helper/replace routes, the status-error fold), the client's helper_old banner/state and
the payload's legacy takeover and retired-folder removal are gone. An old helper that does
not speak AVA1 now reads as no helper, and the normal send-the-helper flow replaces it. The
6.0 console folder cleanup now starts from a successful status probe.

Payload: remove the FTP server and its self-tests, notif.send, ftp.start/ftp.status
(ids 119, 120, 123 retired in the schema), the unused ShellUI sensor/install RPCs,
runtime_reconcile_mounts, register_services_init, hw_temps_get_text and
mgmt_call_fs_mkdir. MGMT_METHODS.md describes the current method table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 06:24:09 -07:00
phantomptrandClaude Opus 5.5 7a9afd3615 6.8.1: Convert's queue builds the picked image
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 04:38:46 -07:00
phantomptrandClaude Opus 5.5 df204a4208 6.8.0: send files from one console to another
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-09 23:13:55 -07:00
phantomptrandClaude Opus 5.5 7ecb99d53c 6.7.4: one helper send per console
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-09 21:54:28 -07:00
phantomptrandClaude Opus 5.5 1d1f018bd6 6.7.3: no leftovers from failed conversions (#432)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-09 13:13:34 -07:00
phantomptrandClaude Opus 5.5 106baa2d6d 6.7.2: Collection covers in the desktop app
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-09 12:25:09 -07:00
phantomptrandClaude Opus 5.5 beb4e6583c 6.7.1: Collection covers, multi-part RAR resume (#429), a full drive's partial file
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-09 11:33:05 -07:00
phantomptrandClaude Opus 5.5 d5f3f2f206 6.7.0: one page per game, every console and every copy
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-09 09:30:33 -07:00
phantomptrandClaude Opus 5.5 60bb7d2a21 6.6.3: test housekeeping
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-09 03:35:45 -07:00
phantomptrandClaude Opus 5.5 6425f0685b 6.6.2: Windows engine start (#427), one game to two consoles, desktop bug reports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-09 02:54:16 -07:00