Skip to content

Commit 523a662

Browse files
feat: many changes
1 parent a4b1e84 commit 523a662

48 files changed

Lines changed: 2971 additions & 887 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,51 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.4.0] - 2026-03-02
9+
10+
### Added
11+
12+
- **WASM Plugin Runtime** - Full WebAssembly plugin support via Extism:
13+
- Load `.wasm` plugins alongside Lua and Rhai scripts
14+
- Hook dispatch, method invocation, and isolated execution contexts
15+
- Automatic hook discovery by inspecting WASM exports
16+
- **Plugin System Integration** - TUI now initializes and dispatches lifecycle hooks:
17+
- `OnStartup`, `OnShutdown`, `OnNavigate`, `OnScanComplete` hooks
18+
- Plugin manager with Lua, Rhai, and WASM runtimes registered at startup
19+
- Non-blocking hook dispatch via `tokio::spawn` for scan-complete events
20+
- **Lua Sandbox Enforcement** - Filesystem API now respects sandbox read permissions:
21+
- `fs.read`, `fs.read_bytes`, `fs.exists`, `fs.is_dir`, `fs.is_file`, `fs.metadata` all check `SandboxConfig.can_read()`
22+
- Sandboxed contexts hide file existence for disallowed paths
23+
24+
### Changed
25+
26+
- **API Modernization** - ~25 function signatures changed from `&PathBuf` to `&Path` across all crates, following Rust idioms for borrowed path parameters
27+
- **Clippy Clean** - Eliminated all 84 clippy warnings across the workspace:
28+
- Collapsed ~35 nested `if` statements using Rust let-chains
29+
- Replaced 3 manual `Default` impls with `#[derive(Default)]`
30+
- Removed ~6 redundant closures in `map_err` chains
31+
- Replaced `.min().max()` chains with `.clamp()`
32+
- Replaced manual prefix stripping with `strip_prefix()`
33+
- Replaced `iter().any(|&b| b == 0)` with `.contains(&0)`
34+
- Removed `trim()` before `split_whitespace()` (redundant)
35+
- Replaced `vec![]; push()` patterns with `vec![initial]`
36+
- Used `.is_some_and()` over `.map_or(false, ...)`
37+
- Used `.is_multiple_of()` over `% N == 0`
38+
- Used `.flatten()` on fallible iterators
39+
- **Undo System Simplification** - `FilesDeleted` variant simplified:
40+
- Now stores `paths: Vec<PathBuf>` instead of `trash_entries: Vec<(PathBuf, PathBuf)>`
41+
- `can_undo()` always returns `false` for deletions (trash restore removed)
42+
- **HookResult Serialization** - Added `Serialize`/`Deserialize` derives for WASM interop
43+
- **README Rewrite** - Modernized with SOTA performance metrics, plugin system showcase, and condensed keybinding reference
44+
- **Dependencies Updated** - All workspace dependencies brought to latest versions
45+
46+
### Fixed
47+
48+
- Broken doc comment continuation in plugin crate module docs
49+
- Test assertions updated to match actual `ScanConfig` defaults
50+
- `ContentHash` test helpers updated for `Box<ContentHash>` optimization
51+
- Duplicate finder tests fixed for correct file count assertions
52+
853
## [0.3.0] - 2026-01-29
954

1055
### Added
@@ -179,6 +224,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
179224
- `gravityfile age [PATH]` - Analyze file ages
180225
- `gravityfile export [PATH]` - Export scan results to JSON
181226

227+
[0.4.0]: https://github.com/epistates/gravityfile/releases/tag/v0.4.0
182228
[0.3.0]: https://github.com/epistates/gravityfile/releases/tag/v0.3.0
183229
[0.2.2]: https://github.com/epistates/gravityfile/releases/tag/v0.2.2
184230
[0.2.1]: https://github.com/epistates/gravityfile/releases/tag/v0.2.1

0 commit comments

Comments
 (0)