mirror of
https://github.com/forkless/NotAlterra.git
synced 2026-08-16 08:36:37 +02:00
v0.4.0: bump version, changelog, fuzz target for backup round-trip
This commit is contained in:
@@ -4,6 +4,31 @@ All notable changes to NotAlterra are documented in this file.
|
||||
|
||||
---
|
||||
|
||||
## [v0.4.0] — 2026-06-03
|
||||
|
||||
### Added
|
||||
- **`--help` / `-h` flag** — displays usage information
|
||||
- **tar.gz backup format** — one archive per backup event, all slots in one
|
||||
file. Standard `tar -xzf` recovers data without the tool (no vendor lock-in).
|
||||
Safeguards: atomic write (`.tmp` → rename), per-file SHA256 manifest,
|
||||
per-entry restore without full decompress.
|
||||
- **Migration path** — old `NotAlterra_Backups/` directory-tree backups are
|
||||
automatically detected and imported into the new tar.gz format
|
||||
- **Bus factor mitigation** — documented in GOVERNANCE.md: emergency signing
|
||||
key stored with a non-technical trusted person, revocable if compromised
|
||||
|
||||
### Changed
|
||||
- **File layout** — backups stored in `backups/saves/` (tar.gz),
|
||||
`backups/config/` (.ini archives), logs in `logs/transaction.log`
|
||||
- **Stale `config.ini` removed** on first launch from prior versions
|
||||
- **Dependencies** — added `tar` + `flate2` (pure Rust, +~150KB binary)
|
||||
|
||||
### Testing
|
||||
- 6 migration unit tests (basic, empty, nonexistent, integrity, filtering, idempotency)
|
||||
- Full round-trip integration tests for tar.gz backup/restore
|
||||
- Fuzz target for backup round-trip (10s: 11,717 runs, zero crashes)
|
||||
- File permissions fixed in tar headers (`0o644` instead of `0o000`)
|
||||
|
||||
## [v0.3.2] — 2026-06-02
|
||||
|
||||
### Added
|
||||
|
||||
Generated
+1
-1
@@ -540,7 +540,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "notalterra"
|
||||
version = "0.3.2"
|
||||
version = "0.4.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "notalterra"
|
||||
version = "0.3.2"
|
||||
version = "0.4.0"
|
||||
edition = "2021"
|
||||
authors = ["NotAlterra"]
|
||||
license = "MIT"
|
||||
|
||||
+9
-5
@@ -4,11 +4,15 @@ Cross-platform terminal application. No admin permissions or network access req
|
||||
Pre-compiled binaries — no installation, no dependencies. Just download,
|
||||
extract, and run.
|
||||
|
||||
### What's new in v0.3.2
|
||||
### What's new in v0.4.0
|
||||
|
||||
• `config.ini` removed entirely — no paths written to disk
|
||||
• Save folder is session-only, entered via `Set save folder`
|
||||
• Disclaimer tracked via 0-byte sentinel file (`NotAlterra_LICENSE_ACCEPTED`)
|
||||
• Lightweight startup check for common save paths (no profile/drive scans)
|
||||
• tar.gz backup format — one archive per backup event, standard `tar -xzf` recovers data without the tool
|
||||
• File restructure: `backups/saves/`, `backups/config/`, `logs/`
|
||||
• Automatic migration from old `NotAlterra_Backups/` directory-tree format
|
||||
• `--help` / `-h` flag
|
||||
• Stale `config.ini` auto-removed from prior versions
|
||||
• Bus factor mitigation plan documented in GOVERNANCE.md
|
||||
• 6 migration tests, full round-trip tar.gz integration tests
|
||||
• `tar` + `flate2` dependencies added (pure Rust, ~150KB increase)
|
||||
|
||||
_Builds: Linux (amd64) • Windows x64_
|
||||
|
||||
Generated
+96
-3
@@ -2,6 +2,12 @@
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "adler2"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.4"
|
||||
@@ -122,6 +128,15 @@ version = "0.8.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossterm"
|
||||
version = "0.28.1"
|
||||
@@ -132,7 +147,7 @@ dependencies = [
|
||||
"crossterm_winapi",
|
||||
"mio",
|
||||
"parking_lot",
|
||||
"rustix",
|
||||
"rustix 0.38.44",
|
||||
"signal-hook",
|
||||
"signal-hook-mio",
|
||||
"winapi",
|
||||
@@ -224,12 +239,32 @@ dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filetime"
|
||||
version = "0.2.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "find-msvc-tools"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
|
||||
|
||||
[[package]]
|
||||
name = "flate2"
|
||||
version = "1.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foldhash"
|
||||
version = "0.1.5"
|
||||
@@ -420,6 +455,12 @@ version = "0.4.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.14"
|
||||
@@ -456,6 +497,16 @@ version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.8.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
|
||||
dependencies = [
|
||||
"adler2",
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "1.2.1"
|
||||
@@ -480,15 +531,17 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "notalterra"
|
||||
version = "0.2.3"
|
||||
version = "0.4.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
"crossterm",
|
||||
"dirs",
|
||||
"flate2",
|
||||
"nom",
|
||||
"ratatui",
|
||||
"regex",
|
||||
"tar",
|
||||
"unicode-width 0.2.0",
|
||||
]
|
||||
|
||||
@@ -659,10 +712,23 @@ dependencies = [
|
||||
"bitflags",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"linux-raw-sys 0.4.15",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "1.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys 0.12.1",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.22"
|
||||
@@ -718,6 +784,12 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "simd-adler32"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
|
||||
|
||||
[[package]]
|
||||
name = "slab"
|
||||
version = "0.4.12"
|
||||
@@ -775,6 +847,17 @@ dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tar"
|
||||
version = "0.4.46"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840"
|
||||
dependencies = [
|
||||
"filetime",
|
||||
"libc",
|
||||
"xattr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.69"
|
||||
@@ -1124,3 +1207,13 @@ name = "wit-bindgen"
|
||||
version = "0.57.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
|
||||
|
||||
[[package]]
|
||||
name = "xattr"
|
||||
version = "1.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rustix 1.1.4",
|
||||
]
|
||||
|
||||
@@ -26,3 +26,10 @@ path = "fuzz_targets/full_metadata.rs"
|
||||
test = false
|
||||
doc = false
|
||||
bench = false
|
||||
|
||||
[[bin]]
|
||||
name = "backup_roundtrip"
|
||||
path = "fuzz_targets/backup_roundtrip.rs"
|
||||
test = false
|
||||
doc = false
|
||||
bench = false
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
GGGG
|
||||
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 @@
|
||||
((
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
4
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
稔�;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
�4
|
||||
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 @@
|
||||
�
|
||||
@@ -0,0 +1 @@
|
||||
YYYYo#�:*:
|
||||
@@ -0,0 +1 @@
|
||||
RRRRRRRRR.RRRJRR4
|
||||
@@ -0,0 +1 @@
|
||||
#�#�#�
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
?
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
^クオG#
|
||||
@@ -0,0 +1 @@
|
||||
�
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
?
|
||||
@@ -0,0 +1 @@
|
||||
����;
|
||||
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 @@
|
||||
2�
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
(
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
€����������������
|
||||
@@ -0,0 +1 @@
|
||||
(,.,.
|
||||
@@ -0,0 +1 @@
|
||||
#�#
|
||||
@@ -0,0 +1 @@
|
||||
:*
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
�?
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
���;�;
|
||||
@@ -0,0 +1 @@
|
||||
�:*:
|
||||
@@ -0,0 +1 @@
|
||||
�
|
||||
@@ -0,0 +1 @@
|
||||
q��qqqqqqqqq������
|
||||
@@ -0,0 +1 @@
|
||||
@
|
||||
@@ -0,0 +1 @@
|
||||
�;�O��#�#�GWD
|
||||
@@ -0,0 +1 @@
|
||||
����*��
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
�
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
;
|
||||
@@ -0,0 +1 @@
|
||||
�
|
||||
@@ -0,0 +1 @@
|
||||
髜ィ'
|
||||
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