v1.16.1 — annotation honesty + parsing fixes
v1.16.1 — annotation honesty + parsing fixes
Annotations (security):
- Add MutatingIdempotent annotation kind (4th variant)
preserves idempotent_hint=true on convergent mutators - Fix 8 mis-tagged tools that lied about being read_only:
ssh_k8s_apply, ssh_iis_restart, ssh_nginx_reload,
ssh_service_restart, ssh_service_daemon_reload,
ssh_win_service_restart, ssh_alert_set, ssh_helm_rollback - New tests/annotation_audit.rs: CI gate enforcing
name x annotation coherence by suffix rule + allowlist - Couples cleanly with security.require_elicitation_on_destructive
so confirmation dialogs fire on real state changes
Parsing fixes:
- ssh_storage_df: prepend LC_ALL=C so headers stay English
- ssh_storage_lsblk: --list flag drops Unicode tree glyphs
(box-drawing chars shifted byte alignment, broke gutter detection) - ssh_process_list: replace 'grep | grep -v grep' with awk that
preserves NR==1 (header) so columnar parser keeps working
Misc:
- Restore [dev-dependencies] block (tempfile, criterion, filetime,
tracing-test, proptest, insta) — cargo test --all-targets --no-run
now compiles again - README: 4 hero workflows up-front (Linux service, K8s with 80%
fewer tokens, cross-platform, audited destructive) - Sync tool counts to 357/75/9; drop phantom protocols from docs
Verified: 6974 lib tests + 5 audit tests + 246 process + 104 storage
all green. cargo fmt --check + clippy -D warnings + cargo deny pass.
Tested live on raspberry pi 5 (k3s + plex + argocd stack).
Full Changelog: v1.16.0...v1.16.1