Tags: beava-dev/beava
Tags
v0.0.5 — durability + correctness fixes, CI coverage tooling Critical - force=True schema replacement now survives crash recovery (#139). WAL replay reproduces the force-removal cascade and pre-replace events no longer credit post-replace aggregations. Adds registered_at_version filtering on replay via a new apply_event_to_aggregations_replay sibling. High - Admin /registry endpoint refreshes on every successful register (#136). Was pinned at 0/0; now reflects the live registry version + node count via a SharedRegistrySnapshot Arc threaded through AppState. - select / drop / rename schema narrowing is enforced at register-time (#138). Downstream aggregations on a removed field now raise RegistrationError. Catches the SDK chain-prefix flattening case where the agg derivation's own ops include the narrowing op. Medium - TCP /get feature_not_found returns the same structured envelope as HTTP (#135). Was {"code":"unsupported"} — now {"error":{"code":"internal_error","reason":"feature_not_found: ..."}}. - Expression where-predicate nesting depth rejected at parse time instead of silently returning Null (#133). CI / quality - Informational coverage reports for Rust (cargo-llvm-cov) and Python (pytest-cov) on every PR (#141). No gates, no third-party uploads — visibility only. - Coverage lifts (#142): Python 70% -> 78%; beava/test/*, beava/cli/__init__.py, beava/_col.py, beava/_wire.py all at 100%. Rust workspace 84.41% -> 84.44%; recovery.rs 67.70% -> 70.04%. - Loosened sketch recovery assertions to tolerate t-digest / entropy float drift across snapshot+WAL replay (#140). SDK arg validation - Rejected multi-upstream @bv.event def at decoration time with a sharp TypeError (#131). - TcpTransport.send_push now raises on OP_ERROR_RESPONSE instead of returning the error envelope (#130). - Tightened operator arg validation: NaN bucket, empty field, sigma, q=None (#129).
release: v0.0.4 — operator bug fixes + decision-feed visual cleanup * WindowedOp::update_at honours the dispatcher's pre_val (fixes mean+window→Null and top_k binding to the wrong field). * EventTypeMixState::update_at honours pre_val (same bug class). * SDK ~bv.col(x) emits (not x) instead of !(x). * Home decision feed runs synthetic-only with passive decisions rendered green; never shows 3-of-a-kind in a row. 33 regression tests across Rust + Python lock the bug class down. See CHANGELOG.md for the full breakdown.