8 Commits
Author SHA1 Message Date
Quer3qandClaude Opus 5.5 3cb2effd5f Archive sources streamed in place, built-in archive passwords, AMPR version check, UI polish
Archives (.zip, .7z, .rar; multi-part sets) are a source on every target, the PS5 included:
- New crate ps5-dump-forge-archive: own zip reader, 7z over sevenz-rust2 (decode only), RAR
  through our wrapper over unrar_sys's UnRAR, with memory, header and link limits.
- Conversions read the game straight from the archive (stream::Reader), file by file in the
  writer's order, with nothing unpacked to disk; solid archives re-decode on a backward read.
- Release-site passwords are tried first when an archive needs one; a password counts only
  when it reads the game's param.json (and an encrypted file when param.json is in the clear).
- Truncated RARs, swapped parts and unsafe names are refused; every part is guarded from
  delete while its job runs.

AMPR: the game's ampr_emu version is read from its runtime. Update AMPR (now in the Full
verification box) shows only for an older one; Pack keeps a runtime that is not older and
reads packs. The LZ4 tab blocks a game without ampr_emu and hides its LZ4 tile.

UI: animated dots on waiting texts, shorter LZ4 texts in all 11 languages, new target orders
and defaults (Convert: fpkg; LZ4: exfat), "Папка с игрой", no "No preflight findings" line.

Server: a source read waits up to 30 s for one of its 2 slots (at most 4 waiting; 409 while
stopping). Release zips hold only the app and the CLI; the UnRAR licences live in vendor/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 11:52:47 +03:00
Quer3qandClaude Opus 5.5 4b687d9254 Speedups, Library LZ4 label and free space, PS5 rename, docs cleanup
- Folder output: plain fsync per file, one full flush before the rename (macOS 44 -> 11 s)
- .fpkg build 60.6 -> 40.5 s: Kraken skips hopeless blocks (0024), CRC32C slicing-by-8 (0025),
  per-file SHA3 on its own thread (0026), the source .pkg decoded 4 MiB ahead
- LZ4 profile rules compiled once with an exact-path index (preflight 8 s -> 0.03 s)
- Library: liquid-glass LZ4 label on packed games; PS5 shows free space of /data
- PS5 payload renamed "Dump Forge", home /data/dumpforge (one-time migration with a link,
  old tile owner records accepted)
- Windows CI: the library test names the system drive root
- Docs: README benchmarks (PC + PS5 column), docs/LZ4.md, AGENTS.md and DESIGN.md trimmed,
  TODO.md removed; release archives ship docs/LZ4.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:45:12 +03:00
Quer3qandClaude Opus 5.5 f5f6260b30 LZ4 asset packs for ampr_emu: trace, pack, unpack, LZ4 tab
New crate ps5-dump-forge-lz4: AMPRPAK4 manifest writer and validating
reader (volumes, CRC sidecar, runtime profile), AMPRIDX3 and AMPRCMD1
readers, pack rules (TOML profile subset, traces, built-in keep-loose
list, auto-loose), embedded ampr_emu 0.4.2.1 release and trace runtimes
(vendor/ampr_emu, pinned by SHA-256; vendor patch 0023).

Core: trace (in-place folder patch/unpatch, image rebuild + replace),
pack into an LZ4 folder or straight into .ffpkg/.exfat/.ffpfs/.ffpfsc
(measure pass, no staging), unpack any packed source, traces zip
download and reader, Save as profile, LZ4 inspection facts. Every file
and folder written on the PS5 is 0777 (the app loader refuses game files
without world-execute, CE-107750-0). Traces only narrow the keep-loose
list: engine files opened before AMPR starts (.pak/.utoc/.ini) stay loose.

CLI --lz4-* flags and lz4-patch/lz4-unpatch/lz4-profile; server routes
lz4_patch, lz4_unpatch, lz4_traces (streamed zip), lz4_plan_profile;
LZ4 tab in the app. Trace room 256 MiB default, 1 GiB max (measured).
Fuzz targets, scripts/check-lz4.sh upstream cross-check, docs.

Console: Stellar Blade traced, packed (5 .ucas) and played; unpack and
0777 folders boot. Other titles and long sessions are still open (TODO).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:16:38 +03:00
Quer3qandClaude Opus 5.5 4aabddcb11 PS5 Dump Forge 0.0.1-pre4: PS5 payload, fast verification by default
- PS5 payload (plain .elf): the core runs on the console, built in Docker against the
  ps5-payload-dev SDK v0.43 (ps5/: target JSON, ps5-ai-cli shims, entry.c, compat.c, linker.sh;
  FreeBSD 11 ABI via --cfg libc_unstable_freebsd_version="11", struct sizes asserted).
- New crate ps5-dump-forge-server and `ps5-dump-forge serve`: the React UI over HTTP on port 8095
  (fetch transport, polling, folder/file browser, Show path, Stop), no access control by design.
  Home-screen tile PDFG00001; the payload saves a copy of itself (two-stage build) so the tile's
  AppCache'd page can start it through elfldr after a restart.
- FreeBSD platform layer in core: destination probe (dest.rs), publish by link or checked rename
  behind a device guard, bounded dirty data with adaptive fsync cadence (durable.rs), read-ahead
  (prefetch.rs), drive-removal messages, rest-mode PowerTick. A retried fsync fails the job.
- Fast verification is the default on every platform: structure + sampled BLAKE3 slices;
  "Full verification" switch / --full-verify re-reads every byte; .pkg always full. One hash
  pass per byte.
- vendor patch 0015: UFS2 range reads (cached pointer blocks, contiguous runs, checked offsets).
- Tests and tooling: scripts/test-freebsd.sh (FreeBSD VM: UFS, FAT32, nullfs),
  scripts/release-ps5.sh (ELF, embedded UI, self copy and debug-route checks), CI and release
  jobs for the .elf.
- Hardware (PS5 fw 13.60, /data): .ffpkg/folder sources to .exfat and folder pass their checks;
  writes ~273 MB/s of the drive's ~288 MB/s; tile launch after a reboot works. Other output
  formats and USB output are not console-tested yet (TODO.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 23:05:27 +03:00
Quer3qandClaude Opus 5.5 9ce755c414 PS5 Dump Forge 0.0.1-pre3: Windows and Linux arm64, x86-64 labels, macOS universal only
- Release archives: macos-universal, windows-x86-64 (+ -webview2, the only one with a bundled
  WebView2), windows-arm64, linux-x86-64, linux-arm64, source, SHA256SUMS. The arm64-only macOS
  zip is gone (the universal zip carries the same slice).
- release-windows.sh builds for the host triple from `rustc -vV`, checks the PE machine per arch,
  links the C runtime statically for the app too (tauri-build's own trick is x86/x86-64 only), and
  skips the WebView2 download on arm64.
- release-linux.sh labels by `uname -m`; forge.sh's Wayland preload matches the host's ldconfig tag.
- main.rs: missing/broken WebView2 messages name the x86-64 zips, and only the Evergreen installer
  on arm64.
- release.yml: Windows and Linux matrices over x86-64 and arm64 runners; publish requires exactly the
  seven archives. ci.yml: test legs on windows-11-arm and ubuntu-22.04-arm.
- README, AGENTS.md, TODO.md follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 13:48:53 +03:00
Quer3qandClaude Opus 5.5 2d659742ad release-linux.sh: make the staged tree survive a non-root untar
The CI runner extracts the tarball as a normal user, where GNU tar applies the umask and drops
setuid/setgid bits, so group-writable AppDir entries came back with other modes and the round-trip
check failed (it passed as root in Docker). Clear go-w and ug-s before packing, and print the
differing entries if the check ever fails again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 21:20:45 +03:00
Quer3qandClaude Opus 5.5 56e6813622 PS5 Dump Forge 0.0.1-pre2: Windows x64, Linux x64, macOS universal
- Convert: the job queue sits under the cards, full width, and scrolls inside itself.
- macOS: a universal zip next to the arm64 one; both CLI slices run in the release check.
- Windows x64: file identity, hard links, free space/FAT32 preflight and CLI Ctrl-C in core;
  WebView2 handling (bundled Fixed Version runtime, Windows 10 ACL grant, message boxes);
  two portable zips (system WebView2 / bundled runtime).
- Linux x64: AppDir .tar.gz with a forge.sh launcher; xdg-open gets the host environment.
- Release: windows and linux jobs, scripts/check-versions.sh, one SHA256SUMS over all
  archives. CI lints and tests the GUI on all three OSes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 21:08:35 +03:00
Quer3qandClaude Opus 5.5 cd2777e1ec PS5 Dump Forge 0.0.1-pre
Converts a PS5 game between a folder and every image format ShadowMountPlus 1.7
mounts, and builds or extracts debug FPKG packages. Rust core, Tauri 2 app and a CLI,
Apple Silicon macOS.

- Folder, .exfat, .ffpkg (UFS2), .ffpfs (PFS), .ffpfsc (PFSC container around an
  exFAT, UFS2 or PFS image, streamed with no temporary image) and debug FPKG .pkg,
  any source to any target, verified by BLAKE3 before publishing.
- .ffpfs is byte-identical to MkPFS's unsigned PS5 layout; the reader validates
  the flat path table and collision resolver.
- Inspect: cover, firmware, backport and embedded DLC detection.
- Release workflow creates a draft pre-release for v*-suffixed tags.

Test release: not every format has been hardware-tested on a console yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 17:55:36 +03:00