Files

4.0 KiB

Known Issues

game_running() returns hardcoded false

The process-detection guard in guard.rs intentionally returns false on both platforms to avoid Windows Defender false positives (Trojan:Win32/Wacatac.C!ml). The startup reminder modal ("Please close Subnautica 2 before using NotAlterra") is the real safety mechanism, but the function name implies active detection.

The dormant _game_running_linux() function (kept for future use) contains a working code path that is unreachable behind the hardcoded false return.

GVAS parser is heuristic, not a structural walker

src/gvas.rs extracts GVAS properties by scanning for property names as raw byte sequences and validating preceding length fields — it does not walk the full GVAS schema tree. It works on known Subnautica 2 save files but:

The GVAS format is defined by the public Unreal Engine 5 source code — the SaveGame system and its binary layout are part of the engine's open API.

  • Will silently skip properties it wasn't written to look for
  • May produce false positives if a matching byte sequence appears in unrelated data
  • Does not validate overall GVAS structure (header magic, version, etc.)

Decision: Won't fix. A structural walker would require reverse- engineering the full UE5 GVAS property tree without a published schema, with no significant benefit for the tool's feature set. The six properties the UI displays (SlotName, DisplayName, bIsMultiplayerSave, playtime, etc.) are found reliably by the current approach. The three fuzz targets (parse_gvas, full_metadata, backup_roundtrip) ensure the parser does not crash on adversarial input. When a property cannot be found, the picker falls back to the filename — the tool degrades gracefully rather than erroring out.

No TUI / menu-flow test coverage

src/main.rs contains 1,227 lines of event-loop code (menu dispatch, picker interactions, confirmation dialogs, .ini submenu) with zero automated tests. All other modules (ops, gvas, guard, config) have integration tests, but UI regressions are only caught through manual testing.

This is common for terminal applications but means menu-flow changes carry higher risk.

Discovery module carries vestigial code

src/discovery.rs is 442 lines, but the primary save-folder workflow is manual path entry via Set save folder. The module still contains:

  • scan_other_users() — scans /home/* (Linux) or C:\Users\* (Windows) for other user profiles
  • walk_for_subnautica() — broad filesystem walk for custom installs
  • discover_save_folders() — full discovery entry point

These were downgraded from primary to fallback in v0.3.2 for privacy reasons, and quick_discover() (checking only the current user's default paths) is now the only automated startup check. The heavy scanning code could be removed if manual path entry remains the sole workflow.

No CLI flags for scripting

The tool is TUI-only. There is no --backup, --extract <archive>, --inspect <savefile>, or --list flag. This means it cannot be used in cron jobs, scheduled tasks, or automated backup scripts.

Planned: v0.5.0 roadmap includes CLI flags.

Bus factor mitigation documented but unimplemented

docs/GOVERNANCE.md describes a planned emergency signing key stored with a non-technical trusted person. The envelope and key do not yet exist. The designated technical contact is not confirmed. If the maintainer becomes unreachable, the only viable path is a fork.

Resolved

Dormant functions removed (v0.4.0)

_game_running_windows() and _backup_root() were removed as dead code. Neither was called from any code path. _game_running_linux() and available_space() are retained for planned future use — each has its own #[allow(dead_code)] annotation.

Rationale: _game_running_windows() was never wired up (process detection was intentionally disabled to avoid AV false positives). _backup_root() pointed at the legacy NotAlterra_Backups/ directory which was replaced by backups/saves/ and backups/config/ in v0.4.0.