Added
- SQLite-backed runtime persistence: SOC cases, fleet agents + enrollment tokens, admin-console sessions, and forwarded events now persist in SQLite databases instead of loose JSON files. Each store keeps its public API and in-memory model; only load/persist switched backends, and any pre-existing JSON file is migrated in on first load (renamed
.migratedas a backup). Writes are transactional; the session store remains signed and owner-only (0600). - Agent-side HTTP client coverage:
AgentClient(enrollment, heartbeats, event/log forwarding, policy and update polling) gains a mock-server test harness, raising its coverage from 5 to 18 tests and asserting auth-header propagation, status handling, and JSON decoding.
Fixed
- Real Windows process termination:
ProcessEnforcerpreviously returned a fabricated success on non-Unix platforms; process kills now run a realtaskkill /F /PID(honest failure for missing PIDs), and suspend/resume report no Windows backend rather than faking success. - Test-server port-allocation race:
spawn_test_serverbound an ephemeral port, dropped the listener, then re-bound it — a TOCTOU window that intermittently failed CI. The bound socket is now handed straight to the server viaTcpListener::from_std. - Systemic CI failures: fixed a TypeScript SDK live test that ran during unit collection, restored the support/security emails required by the release-facts contract, added a missing
{id}path parameter to the OpenAPI spec, silenced a Windows-only dead-code error, patched a transitiveundiciadvisory, and read SQLiteCOUNT(*)asi64for rusqlite ≥ 0.32.
Changed
- Dependencies: rusqlite 0.31 → 0.40, tower-http 0.6 → 0.7, plus log, chrono, zeroize, and ml-dsa; admin-console and TypeScript SDK dev dependencies; and GitHub Actions pins (
actions/checkoutv7,gitleaks-actionv3). - Container build uses the pinned toolchain: the release image now builds with the
rust-toolchain.tomltoolchain (required by newer transitive dependencies) rather than the MSRV base image. - CI hygiene:
cargo check --no-default-featuresis now an enforced gate, the inapplicablesemver-checkjob was removed (Wardex is a binary, not a published library), and the managed release-acceptance Playwright run now retries transient browser flakes.
Documentation
- README, status, roadmap, release facts, website metadata, OpenAPI, Helm, OTLP, and SDK package metadata now point at the
v1.0.30release surface.
Checksums: see the SHA256SUMS release asset.