What's Changed
Features
- Shell completions: generate completions for bash, zsh, fish, and elvish
- Compiler executable paths: preserve full compiler executable path in compilation database; resolve bare executable filenames to absolute paths
- Install script: new
scripts/install.shwith build-timeINTERCEPT_LIBDIRvalidation, replacing manual setup - DevContainer: introduce devcontainer for streamlined development environment
Bug Fixes
- fix: inline va_arg extraction in variadic exec shims for i686 compatibility
- fix: preserve co-resident LD_PRELOAD libraries during env doctoring
- fix: restore session env vars in
system()/popen()for older glibc - fix: unify preload restoration for
system()/popen()with exec-family doctoring - fix: recover from poisoned mutex in
popen/pcloseinstead of panicking - fix: replace panic with
TryFromerror for empty Execution arguments - fix: return
fmt::Errorinstead of panicking in ConfigurationDisplayimpl - fix: handle Prefix flags with
=in name in build-time codegen
Robustness & Stability
- Replace multiple
panic!/unwrappaths with proper error handling (thiserror,TryFrom,fmt::Error) - Reimplement
system()/popen()on top ofposix_spawnpfor safer process creation - Add hardened interception tests for environment sabotage scenarios
- Replace
serde_ymlwithserde-saphyrfor YAML parsing
Compiler Recognition Overhaul
- Move compiler flag definitions from Rust source to YAML with build-time code generation
- Replace per-compiler interpreter structs with a generic
FlagBasedInterpreter - Auto-generate recognition patterns and ignored-executable lists from YAML schema
- Match ignored executables by filename instead of full path
Documentation
- Expanded README with usage guidance, platform info, and limitations
- Improved INSTALL with prerequisites, package manager instructions, and verification steps
- Improved CONTRIBUTING with developer workflow and guidelines
Internal Refactoring
- Split
config.rs,infrastructure.rsinto module directories - Split
outputmodule (formats.rs,writers.rs) into focused submodules - Centralize
envptraversal intoenvp_iteriterator; consolidate session context - Replace empty-string sentinels with
Option<String> - Extensive new test coverage across output, compiler interpreter, and interception modules
New Contributors
- @DarthGandalf made their first contribution in #676
Full Changelog: 4.0.4...4.1.0