mirror of
https://github.com/forkless/NotAlterra.git
synced 2026-08-16 08:36:37 +02:00
add manual path entry, deprecate auto-discovery
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
/target
|
/target
|
||||||
|
/fuzz/target/
|
||||||
/NotAlterra_Backups
|
/NotAlterra_Backups
|
||||||
/samples
|
/samples
|
||||||
*.log
|
*.log
|
||||||
|
|||||||
+32
-1
@@ -10,14 +10,45 @@ All notable changes to NotAlterra are documented in this file.
|
|||||||
- SECURITY.md with vulnerability disclosure policy
|
- SECURITY.md with vulnerability disclosure policy
|
||||||
- Release checklist in GOVERNANCE.md
|
- Release checklist in GOVERNANCE.md
|
||||||
- 32-test integration suite (guard, config, ops, gvas, ini backup/restore)
|
- 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
|
- cargo clippy, cargo audit, and cargo-deny in CI
|
||||||
- deny(unsafe_code) in library crate
|
- deny(unsafe_code) in library crate
|
||||||
- Build script validates CHANGELOG has current version entry
|
- 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
|
### Changed
|
||||||
- Zero compiler warnings
|
- Zero compiler warnings
|
||||||
- Example dump_samples compiles and runs
|
- 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
|
## [v0.2.3] — 2026-06-01
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Not affiliated with Unknown Worlds Entertainment or KRAFTON.
|
|||||||
|
|
||||||
## Features
|
## 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
|
- **Recover** a corrupted `.sav` from its `.bak` backup with rollback
|
||||||
- **Create / restore** full backups (only `savegame_*` files)
|
- **Create / restore** full backups (only `savegame_*` files)
|
||||||
- **Manage** UE5 Config `.ini` files — backup, restore, delete
|
- **Manage** UE5 Config `.ini` files — backup, restore, delete
|
||||||
@@ -72,7 +72,8 @@ folder and run `.\NotAlterra.exe`.
|
|||||||
|
|
||||||
## Usage
|
## 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 |
|
| Key | Action |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -83,13 +84,15 @@ Run the binary. On first launch it auto-scans for your save folder. The menu is
|
|||||||
|
|
||||||
### Menu
|
### Menu
|
||||||
|
|
||||||
1. **Recover save file** — pick a backup, preview metadata, overwrite the live save
|
1. **Set save folder** — enter your save folder path manually (paste supported)
|
||||||
2. **Create full backup** — copies all `savegame_*` files to `NotAlterra_Backups`
|
2. **Locate save files (deprecated)** — auto-scan for save folders (will be removed in v0.3.0)
|
||||||
3. **Restore full backup** — overwrite the save folder from a previous backup
|
3. **Recover save file** — pick a backup, preview metadata, overwrite the live save
|
||||||
4. **Inspect save files** — view all GVAS properties of any `.sav` / `.bak`
|
4. **Create full backup** — copies all `savegame_*` files to `NotAlterra_Backups`
|
||||||
5. **Manage UE5 Config (.ini) files** — backup, restore, or delete `.ini` files
|
5. **Restore full backup** — overwrite the save folder from a previous backup
|
||||||
6. **View disclaimer**
|
6. **Inspect save files** — view all GVAS properties of any `.sav` / `.bak`
|
||||||
7. **Exit**
|
7. **Manage UE5 Config (.ini) files** — backup, restore, or delete `.ini` files
|
||||||
|
8. **View disclaimer**
|
||||||
|
9. **Exit**
|
||||||
|
|
||||||
|
|
||||||
## Where Files Live
|
## 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
|
Use **Set save folder** from the menu to enter your save path. The path is
|
||||||
path change needed for legacy or modern Steam installs.
|
persisted in `config.ini` for re-use across sessions. Delete the config file
|
||||||
|
or use the menu option again to change it.
|
||||||
> [!IMPORTANT]
|
|
||||||
> If the tool cannot locate your `SaveGames` folder, you can manually
|
|
||||||
> override the path by editing the `save_path` field in `config.ini`.
|
|
||||||
|
|
||||||
Backups are stored in `NotAlterra_Backups\` alongside the binary.
|
Backups are stored in `NotAlterra_Backups\` alongside the binary.
|
||||||
|
|
||||||
@@ -134,7 +134,8 @@ disclaimer_accepted = true
|
|||||||
ini_path = C:\Users\...\Subnautica2\Saved\Config\Windows
|
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
|
Only the disclaimer flag and save-folder paths are stored — no backup
|
||||||
state or file metadata is persisted.
|
state or file metadata is persisted.
|
||||||
@@ -143,9 +144,8 @@ state or file metadata is persisted.
|
|||||||
## Platform Support
|
## Platform Support
|
||||||
|
|
||||||
- **Windows** — fully tested and supported.
|
- **Windows** — fully tested and supported.
|
||||||
- **Linux** — builds and runs, but automatic save-file detection has not been
|
- **Linux** — builds and runs. Use **Set save folder** to enter your save
|
||||||
tested on a Linux/Steam Deck install yet. The directory layout should be the
|
path (typical Proton locations are shown under "Where Files Live" above).
|
||||||
same, but feedback and bug reports are appreciated.
|
|
||||||
|
|
||||||
|
|
||||||
## Safety
|
## Safety
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
# Known Issues
|
# 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`.
|
||||||
|
|||||||
Generated
+1126
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
EedlpSavesCountsSavesCount�
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
Elapsed
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
|||||||
|
Ù
|
||||||
|
|
||||||
|
ElapsedKKK�pse�;
|
||||||
|
�
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
;Elapsed
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
Ù
|
||||||
|
EbWasMultiplayerSave
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
;DataVersionoNion;
|
||||||
|
p
|
||||||
Binary file not shown.
@@ -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
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
;
|
||||||
|
M枌;%�
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
ÙSa@vÍBuildBranchesCoÍÍÍÍ,ÍÍBuildBranchesCnSa@vÍBuildBranchesCoÍÍÍ;ElaÍ,;
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
;Ela;ElapsedapspedseB
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
Ù
|
||||||
|
|
||||||
|
»0™apsedKKK�pseE»™apsedKKK�;Elaps�
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
Elapsedœâp�GGGGGA
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
ÙSa@vÍBuildBranchesCoÍÍÍÍ,ÍÍBuildBranchesCounSa@vÍBuildBranchesCoÍÍÍÍ,ÍtÍÍ
|
||||||
|
�
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
ElapsedKKK�pse@;
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
Elapsed
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
;���;
|
||||||
|
�
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
ElapsedKKK��;
|
||||||
|
�
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
�����!s+行行行行行行行行行行行行行行行行行行行行行行行行行行行E�
|
||||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
Ù
|
||||||
|
ElbWasMultiplayerSave
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
;
|
||||||
|
�;
|
||||||
|
�
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
ÙSa@vÍBuildBranchesCoÍBuildBranchesCnSa@vÍBuildBranch+sCoÍÍÍ;Ela;
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
ElbWasMultiplayerSave
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
ÙSa@vÍBuildBranchesCoÍBuildBranchesCvÍBuildBranchsCoÍÍÍ;Ela;
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
ÙSa@vÍBuildBranchesCoÍÍÍÍ,ÍÍBuildBranchesCnSa@vÍBuildBranchesCoÍÍÍÍ,ÍtÍÍ
|
||||||
|
�
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user