Phase D: cross-platform auto-detect + Windows installer + catalog diff #10
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/dune-extract-phase-d"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Goal: Complete phase D in full, with no errors. Closes D1 (cross-platform install auto-detect with multi-library + Proton-prefix coverage), D2 (PowerShell installer + cross-platform adopter doc), D3 (
dune-extract diffsubcommand).D1 —
steam_locator.pyrewriteUser said during implementation: "there can be many steam libraries on a system, parse and find game before extract." Implemented exactly. Detection ladder:
~/.local/share/Steam,~/.steam/{steam,root}, Flatpak, SnapHKLM/HKCU Valve\Steam InstallPath/SteamPathviawinreg(only imported onwin32)libraryfolders.vdfparse~/.local/share/SteamAND/run/media/sponge/HDD2/SteamLibrary— both found)appmanifest_<appid>.acfparseinstalldirdirectly from Valve's manifest instead of guessing folder names. App IDs: 1172710 (client) + 4754530 (server). Fixed the appid from the placeholder1172380to the real1172710after empirical verification<library>/steamapps/compatdata/<appid>/pfx/...for installs running inside wine on Linuxenumerate_candidates()returns every detected install;--dry-runsurfaces alternatives when >1 is present.D2 —
install-prereqs.ps1+CROSS-PLATFORM.mdPowerShell mirror of
install-prereqs.sh. Steps: Python 3.9+ check → rustup-init.exe bootstrap →cargo install --git aesdumpster-rs+--locked repak_cli→ Python venv + editable install. Oodle backend is advisory on Windows — the script tells users to point$env:OODLE_LIBat anoo2core_*_win64.dllthey already own (Darktide / Skate / Jedi: Fallen Order all ship one). We do not vendor or distribute the DLL. Uncompressed pak entries decode without it.Parse-checked clean:
via
[System.Management.Automation.Language.Parser]::ParseInput.CROSS-PLATFORM.mddocuments all four host shapes (Linux native / Linux Proton / WSL Ubuntu / native Windows) + multi-library notes + the diff workflow.D3 —
dune-extract diff <a.json> <b.json>New subcommand. Loads two
--format jsoncatalogs and emits a Markdown report:(pak, stem)tuples).uassetfilename)field_name: A → B)Capped at 200 stems / 200 modified rows per category (with truncation notice) so the report stays readable on a big patch.
Synthetic-catalog test confirmed the expected report shape: stems added/removed, DataTables added,
RowChanged.Damage 50→75,RowChanged.Name OldName→NewName,RowOnlyInAremoved,RowOnlyInBadded.No regression
probe_pak_entries.pyprobe_read_uasset.pyprobe_datatable.py Systems.pakTest plan
Closes D1 (Windows registry + libraryfolders.vdf + appmanifest + Proton-prefix auto-detect), D2 (install-prereqs.ps1 + WSL/Windows adopter doc), D3 (`dune-extract diff` subcommand). D1 — steam_locator.py rewrite Detection ladder: - Linux Steam roots (~/.local/share/Steam, ~/.steam/steam, ~/.steam/root, Flatpak, Snap) - Windows registry (HKLM/HKCU Valve\Steam InstallPath/SteamPath) via winreg, only imported on sys.platform == "win32" - For each detected root, parse libraryfolders.vdf to enumerate additional library drives (multi-library hosts are common) - For each library, parse appmanifest_<appid>.acf as the AUTHORITATIVE installdir source. Replaces directory-name guessing. Fixed appid from placeholder 1172380 to real 1172710 (client) after empirical verification against the user's manifest. - Proton compatdata prefix fall-back for Linux installs running inside wine. User directive verbatim: "there can be many steam libraries on a system, parse and find game before extract" — implemented exactly: libraryfolders.vdf parse + per-library appmanifest scan. enumerate_candidates() returns every detected install; dry-run surfaces alternatives when >1 found. D2 — install-prereqs.ps1 + CROSS-PLATFORM.md PowerShell mirror of install-prereqs.sh. Steps: Python 3.9+ check, rustup-init.exe bootstrap, cargo install aesdumpster-rs + repak_cli, Python venv with editable dune_extract install. Advisory Oodle backend on Windows — user points $env:OODLE_LIB at an oo2core *_win64.dll they already own from another UE5 game (Darktide / Skate / Jedi: Fallen Order ship them). We do not vendor or distribute the DLL. Uncompressed entries decode without it. PowerShell parse-checked: 610 tokens, 0 errors via [System.Management.Automation.Language.Parser]::ParseInput. CROSS-PLATFORM.md documents all four host shapes (Linux native, Linux Proton, WSL Ubuntu, native Windows) + multi-library notes + the diff workflow. D3 — catalog_diff.py + `dune-extract diff` subcommand Loads two --format json catalogs, computes: - per-category stem additions/removals (by (pak, stem) tuples) - per-category DataTable additions/removals (by filename) - per-DataTable row additions/removals/modifications, with the modified-row diff broken down field-by-field (name: A -> B) - aggregate summary table render_markdown caps at 200 stems per category + 200 modified rows per table for readability on a big patch. Synthetic-catalog test produces the expected report shape. No regression — B1, B2, B3 probes all pass identically.