add manual path entry, deprecate auto-discovery

This commit is contained in:
2026-06-02 17:34:20 +02:00
parent a2020a2e2c
commit 488243183c
448 changed files with 1616 additions and 141 deletions
+1
View File
@@ -1,4 +1,5 @@
/target
/fuzz/target/
/NotAlterra_Backups
/samples
*.log
+32 -1
View File
@@ -10,14 +10,45 @@ All notable changes to NotAlterra are documented in this file.
- SECURITY.md with vulnerability disclosure policy
- Release checklist in GOVERNANCE.md
- 32-test integration suite (guard, config, ops, gvas, ini backup/restore)
- Fuzz target for GVAS parser
- Fuzz target for GVAS parser (`parse_gvas`)
- Second fuzz target (`full_metadata`) — exercises IntProperty, DoubleProperty,
and additional StrProperty/BoolProperty code paths
- `fuzz/Cargo.toml` manifest with both fuzz targets registered
- **`Set save folder` menu option** — manual path entry with clipboard paste
support (bracketed paste mode), replaces auto-discovery as the primary way to
set the save location
- cargo clippy, cargo audit, and cargo-deny in CI
- deny(unsafe_code) in library crate
- Build script validates CHANGELOG has current version entry
### Fixed
- Index-out-of-bounds panic in all four GVAS property extractors
(`extract_str_property`, `extract_bool_property`, `extract_int_property`,
`extract_double_property`) when a property name appeared too close to the
end of the buffer — discovered by fuzzing the existing `parse_gvas` target
### Deprecated
- **Auto-scan for save folders** (`Locate save files` menu item / `discovery.rs`
module). Scans user profiles and system directories, which is a privacy
concern. Shows a deprecation notice once per session. Scheduled for removal
in v0.3.0 — use `Set save folder` instead.
### Changed
- Zero compiler warnings
- Example dump_samples compiles and runs
- `fuzz/target/` added to `.gitignore`
- Fuzz targets rewritten from `#[fuzz]` attribute to `libfuzzer_sys::fuzz_target!`
macro for nightly-toolchain compatibility
- **No auto-scan on startup** — the application no longer scans user profiles
and system drives for save folders at launch. Only the cached path from
`config.ini` is loaded.
- **Menu is always 9 items** — `Set save folder` is always visible. `Locate
save files` is always visible (with deprecation label). No conditional hiding
or index remapping.
- **`ensure_save_folder()` and `get_ini_path()`** no longer fall back to
`discover_save_folders()`. They use the cached path or error with a message.
- **`is_cloud_path()` removed** — was only used by the discovery-era cloud
detection path.
## [v0.2.3] — 2026-06-01
+19 -19
View File
@@ -9,7 +9,7 @@ Not affiliated with Unknown Worlds Entertainment or KRAFTON.
## Features
- **Auto-locate** save folders across Steam, Xbox, Epic, and custom installs
- **Manual path entry** — set your save folder from the menu (paste supported)
- **Recover** a corrupted `.sav` from its `.bak` backup with rollback
- **Create / restore** full backups (only `savegame_*` files)
- **Manage** UE5 Config `.ini` files — backup, restore, delete
@@ -72,7 +72,8 @@ folder and run `.\NotAlterra.exe`.
## Usage
Run the binary. On first launch it auto-scans for your save folder. The menu is keyboard-driven:
Run the binary. Use **Set save folder** from the main menu to enter your save
path manually (paste is supported). The menu is keyboard-driven:
| Key | Action |
|---|---|
@@ -83,13 +84,15 @@ Run the binary. On first launch it auto-scans for your save folder. The menu is
### Menu
1. **Recover save file**pick a backup, preview metadata, overwrite the live save
2. **Create full backup** — copies all `savegame_*` files to `NotAlterra_Backups`
3. **Restore full backup** — overwrite the save folder from a previous backup
4. **Inspect save files** — view all GVAS properties of any `.sav` / `.bak`
5. **Manage UE5 Config (.ini) files** — backup, restore, or delete `.ini` files
6. **View disclaimer**
7. **Exit**
1. **Set save folder**enter your save folder path manually (paste supported)
2. **Locate save files (deprecated)** — auto-scan for save folders (will be removed in v0.3.0)
3. **Recover save file** — pick a backup, preview metadata, overwrite the live save
4. **Create full backup** — copies all `savegame_*` files to `NotAlterra_Backups`
5. **Restore full backup** — overwrite the save folder from a previous backup
6. **Inspect save files** — view all GVAS properties of any `.sav` / `.bak`
7. **Manage UE5 Config (.ini) files** — backup, restore, or delete `.ini` files
8. **View disclaimer**
9. **Exit**
## Where Files Live
@@ -112,12 +115,9 @@ Run the binary. On first launch it auto-scans for your save folder. The menu is
...
```
NotAlterra checks both `~/.steam` and `~.local/share/Steam` — no manual
path change needed for legacy or modern Steam installs.
> [!IMPORTANT]
> If the tool cannot locate your `SaveGames` folder, you can manually
> override the path by editing the `save_path` field in `config.ini`.
Use **Set save folder** from the menu to enter your save path. The path is
persisted in `config.ini` for re-use across sessions. Delete the config file
or use the menu option again to change it.
Backups are stored in `NotAlterra_Backups\` alongside the binary.
@@ -134,7 +134,8 @@ disclaimer_accepted = true
ini_path = C:\Users\...\Subnautica2\Saved\Config\Windows
```
Delete `config.ini` to force a fresh scan on next launch.
Delete `config.ini` to clear the cached path — you will be prompted to set
a new one on next launch.
Only the disclaimer flag and save-folder paths are stored — no backup
state or file metadata is persisted.
@@ -143,9 +144,8 @@ state or file metadata is persisted.
## Platform Support
- **Windows** — fully tested and supported.
- **Linux** — builds and runs, but automatic save-file detection has not been
tested on a Linux/Steam Deck install yet. The directory layout should be the
same, but feedback and bug reports are appreciated.
- **Linux** — builds and runs. Use **Set save folder** to enter your save
path (typical Proton locations are shown under "Where Files Live" above).
## Safety
+7 -5
View File
@@ -1,11 +1,13 @@
# Known Issues
## config.ini persistence (privacy)
## config.ini persists the save path
`config.ini` caches the save-folder path including the Windows username on disk. Paths are sanitized in logs, but the raw path remains in the config file.
`config.ini` caches the save-folder path on disk (next to the binary). Paths are sanitized in transaction logs, but the raw path remains in the config file for re-use across sessions.
**Planned**: Remove `config.ini` entirely. Auto-discover by default, prompt for manual path entry at runtime if discovery fails. v0.3.0 target.
**Planned**: Remove `config.ini` entirely in a future release. The path would be re-requested from the user on each session. v0.3.0 target.
## No manual path override UI
## Discovery module is deprecated
Users who cannot auto-detect save locations have no way to manually specify a path. This will be resolved alongside the config.ini phase-out with a runtime input prompt.
Auto-scan for save folders (`discovery.rs`) is deprecated — it scans user profiles and system directories for Subnautica 2 saves, which is a privacy concern. The `Locate save files` menu item shows a deprecation notice once per session.
**Planned**: Remove `discovery.rs` entirely in v0.3.0. Users will enter their save path manually via `Set save folder`.
+1126
View File
File diff suppressed because it is too large Load Diff
@@ -0,0 +1 @@
EedlpSavesCountsSavesCount
@@ -0,0 +1 @@
Elapsed
@@ -0,0 +1,4 @@
Ù
ElapsedKKKpse;
@@ -0,0 +1 @@
;Elapsed
@@ -0,0 +1,2 @@
Ù
EbWasMultiplayerSave
@@ -0,0 +1,2 @@
;DataVersionoNion;
p
@@ -0,0 +1,2 @@
ÙSa@vÍBuildBrancheÍÍÍBuildBranchesCountÍÍ
@@ -0,0 +1,2 @@
;DataVersionion;
@@ -0,0 +1 @@
Ela˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙psedlapSavesCountsSavesCountŤ
@@ -0,0 +1,2 @@
ÙSa@BuildBrancheÍÍÍBuildBranchesCountÍÍ
@@ -0,0 +1,2 @@
;BuildBranchlŤŤ;
O
@@ -0,0 +1,2 @@
;
M枌;%
@@ -0,0 +1 @@
ÙSa@vÍBuildBranchesCoÍÍÍÍ,ÍÍBuildBranchesCnSa@vÍBuildBranchesCoÍÍÍ;ElaÍ,;
@@ -0,0 +1,2 @@
;Ela;ElapsedapspedseB

@@ -0,0 +1,3 @@
Ù
»0™apsedKKKpseE»™apsedKKK;Elaps
@@ -0,0 +1 @@
ElapsedωpGGGGGA
@@ -0,0 +1,2 @@
ÙSa@vÍBuildBranchesCoÍÍÍÍ,ÍÍBuildBranchesCounSa@vÍBuildBranchesCoÍÍÍÍ,ÍtÍÍ
@@ -0,0 +1 @@
ElapsedKKKpse@;
@@ -0,0 +1 @@
Elapsed
@@ -0,0 +1,2 @@
;;
@@ -0,0 +1,3 @@
ElapsedKKK;
@@ -0,0 +1 @@
!s+行行行行行行行行行行行行行行行行行行行行行行行行行行行E
@@ -0,0 +1,2 @@
Ù
ElbWasMultiplayerSave
@@ -0,0 +1,3 @@
;
;
@@ -0,0 +1 @@
ÙSa@vÍBuildBranchesCoÍBuildBranchesCnSa@vÍBuildBranch+sCoÍÍÍ;Ela;
@@ -0,0 +1 @@
ElbWasMultiplayerSave
@@ -0,0 +1 @@
ÙSa@vÍBuildBranchesCoÍBuildBranchesCvÍBuildBranchsCoÍÍÍ;Ela;
@@ -0,0 +1,2 @@
ÙSa@vÍBuildBranchesCoÍÍÍÍ,ÍÍBuildBranchesCnSa@vÍBuildBranchesCoÍÍÍÍ,ÍtÍÍ

Some files were not shown because too many files have changed in this diff Show More