v0.9.3
dcg v0.9.3
Security fixes (false negatives)
- Force-clobber redirects no longer escape
redirect-truncate-root-home(#263): bash's noclobber-override redirect operator (>|) is strictly stronger than plain>but was not matched by the truncation guards; force-clobber writes to protected paths are now denied like other destructive redirections (7c05d96), with a follow-up hardening wave closing four more false negatives found while reviewing this area (70155a0). mise exec -c/--commandinline shell payloads are recursively evaluated (#259): payloads handed to a shell via mise's inline-command flags were not unwrapped before pattern evaluation, leaving destructive commands inside them unexamined. The argv/tokenizer blind spots are closed (7c05d96, 70155a0). Note: the redirect-only payload gap discovered afterwards is tracked separately in #271.
Fixes and features
- Allow-once EOF honesty (#262):
dcg allow-once <CODE>without--yesno longer looks like it granted something it did not when stdin is at EOF; the outcome is reported truthfully. --dialectforexplain/test(#269): diagnostics can now evaluate a command under an explicitly selected dialect, matching the hook's Posix path.- bash 3.2 installer fix (#268):
install.shno longer aborts on stock macOS bash 3.2 with cosign 3.x (bundle_format_args[@]: unbound variable); empty-array expansions are guarded. - Windows Hermes config path (#270):
Configure-HermesHooknow writes the hook where native Windows Hermes actually reads it (HERMES_HOME, else%LOCALAPPDATA%\hermes), instead of~/.hermeswhich Windows Hermes never reads. Uninstall cleans both locations. - Windows install robustness:
install.ps1prefers the trusted System32 bsdtar over PATH-first tar resolution, avoiding MSYS/Git-for-Windows tar breakingC:\...paths (652ab71). - deps: fancy-regex 0.18 -> 0.19, toml group bump (#266).
Test gate at the release commit
cargo fmt --checkandcargo clippy --all-targets -- -D warnings: clean.- Full suite (
--no-fail-fast, 84 targets): 4726 passed, 3 failed, 38 ignored. The known attribution-FP testdotnet_directory_delete_recursive_spelling_variants_are_deniedwas excluded per #271/#258 (the command IS still denied; the test asserts the wrong attributing rule). The 3 failures are history-writer flush/perf timing tests (history_integration) whose 2-5s ack budgets blow on a build host under sustained load (100-600 load average from a concurrent agent fleet); the failing subset varies run-to-run, no history code changed since v0.9.2, and the identical failure signature reproduces with the shipped v0.9.2 binary on the same host. - Protocol conformance
scripts/e2e_harness_matrix.shagainst the release binary: 35/35 passed (all 7 harness protocols). - Latency gate
scripts/perf_baseline.py --assert-budget-ms 1000 --assert-margin-pct 50: 9/11 cases pass; the two deny-path cases (destructive_keyword,heredoc_inline) show clean p50 (20-40 ms) but cold-p95 outliers (1.8-3.9 s) on the loaded host. The shipped v0.9.2 binary fails the same two cases with the same signature on the same host at the same time, so this is host contention, not a v0.9.3 latency regression.
Integrity
All payload assets carry per-file .sha256 sidecars, and SHA256SUMS / SHA256SUMS.txt are generated from the final uploaded bytes (covering archives, standalone binaries, installers, public keys, and the build manifest). This release ships checksum-verified without minisign/Sigstore signatures; signature verification in the installers remains best-effort-by-default, and --require-minisign installs should pin v0.9.2 until signatures return.
Install
curl -fsSL https://github.com/Dicklesworthstone/destructive_command_guard/releases/download/v0.9.3/install.sh | bash