raspi-sentinel v0.8.0
Released: 2026-04-26
Highlights
- Contract surfaces hardened:
stats.jsonnow includesstats_schema_versionstate.jsonnow includesstate_schema_version- compatibility fixtures added under
tests/fixtures/contracts/ - contract docs/schemas added (
docs/output-contract.md,docs/schemas/*.schema.json)
- New operator CLI surfaces:
doctorcommand for preflight/environment checksexplain-statecommand for persisted state diagnostics
- Recovery policy tightening:
- reboot now requires
policy_reasonallowlist membership - network-only reasons are excluded from reboot allowlist
- reboot now requires
- Config and example hardening:
- profile-based examples added (
production,lightweight-pi,no-discord,tmpfs-tiered) validate-config --strictwarning policy strengthened
- profile-based examples added (
- Dry-run and install onboarding:
- dry-run-only Docker profile (
docker/Dockerfile.dryrun) - simplified install flow guidance including
pipx
- dry-run-only Docker profile (
Additional hardening in this release cycle
- State durability and recovery cleanup:
_quarantine_corrupt_statenow stops when timestamp candidate slots are exhausted- removed legacy
semantic_clock_*failure-only reboot branch in recovery
- Controlled deployment helper for Pi Zero host:
- added
scripts/deploy_pi5_guard.pywith staged preflight/verify/switch/rollback flow - includes post-deploy health gate (
validate-config, dry-run/liverun-once --json)
- added
- Checks package cleanup:
- removed underscore compatibility aliases in
checks.__init__ - branch tests import helper functions from owning modules
- removed underscore compatibility aliases in
- Diagnostics clarity:
- doctor now exposes
network_only_failures_excluded_from_reboot - doctor reads
last_run_stats_schema_versionand warns for future schema versions
- doctor now exposes
- Regression coverage added for:
- tmpfs-requirement warning path
- schema-forward warning paths
- corrupt-state quarantine slot exhaustion
- checks monkeypatch isolation across sequential runs
Verification Summary
- Verified with full test suite (
pytest -q) and static checks (ruff,mypy). - Applied and smoke-checked in deployment environment with:
validate-configrun-once --json(dry-run and non-dry-run)
- Result: successful validation and healthy cycle outputs.
Full changelog: v0.7.1...v0.8.0