3 Commits
Author SHA1 Message Date
Quer3qandClaude Opus 5.5 db38d6967c Edit and Storage tabs
- Edit tab (replaces Inspect): rename, delete and add files in a game
  folder or image, applied in place behind an undo journal or by a
  verified rebuild; Extract copies files out of any source; additional
  content (DLC, updates) is recognised and packaged as fpkg.
- Storage tab (replaces Library): the Library plus a File explorer that
  renames, moves and deletes at once and opens a folder or image in Edit
  or Convert.
- PS5: ShadowMount+'s mounted games are hidden and locked in every
  write path; Forge's own files are protected; L2/R2 switch tabs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 18:03:37 +03:00
Quer3qandClaude Opus 5.5 15fad60e48 AMPR repair on every convert, LZ4 for runtime-less AMPR games, ffpkg defaults
Every conversion of a game whose eboot.bin imports libSceAmpr now leaves a working ampr_emu
behind (by user decision): no runtime -> the bundled release runtime is installed; an older,
unreadable or unknown one (or Forge's trace build) -> replaced; the bundled version or newer
-> kept (Pack also needs it to read packs). ampr_emu.index is kept only when it lists exactly
the files written, else rebuilt, and then the journal and logs are left out (their file ids
follow the old record order). A packed game's index and manifest stay byte for byte.
- core lz4.rs: Runtime::action (install/replace/keep/untouched), plain() for conversions
  without LZ4 options, index_state (the one comparison, Inspect's too) with bounded reads
  (index_bound, 64 MiB cap; read_all loops for a .pkg source's 64 MiB reads); into a .pkg
  the builder writes the index; overlay keeps the source's order (solid archives).
- Inspect: Lz4Facts.index, runtime_action, pack_runtime_action; the archive index is read
  after eboot.bin/fakelib so it can't push them out of the read budget. lz4 reader allows
  the runtime's size to differ from its loose record (a packed game's replaced runtime).
- UI: Convert's Update AMPR switch is gone (notes say install/replace/keep and index
  refresh); the LZ4 tab offers Pack/Unpack and Trace to AMPR games without a runtime and
  says "This game doesn't use AMPR, so LZ4 can't be used here." otherwise.
- Targets: Convert Folder, fpkg, exfat, ffpkg, ffpfsc, ffpfs; LZ4 tab Folder, ffpkg
  (default), exfat, ffpfs; ffpkg inside a .ffpfsc by default (core, so CLI and app agree).
- Save as profile removed everywhere (UI, Tauri command, server route, CLI lz4-profile,
  core lz4_profile.rs); using a profile (--lz4-profile) is unchanged.
- Locales (11), AGENTS.md, DESIGN.md, docs/LZ4.md, README.md, ps5/README.md; tests in
  core.rs, inspect.rs, reader.rs. Reviewed with Codex (several rounds, clean) and
  /code-review.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 14:16:49 +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