v0.4.0
Adoption and hardening release. It adds no new record kinds and no spec change - it still implements spec epoch 0.3 - and instead closes the gap between the shipped wedge and a first successful run: the CLI now completes the record -> receipt -> validate loop by itself (no language binding required), the receipt trust boundary is fuzzed, and worked examples plus a best-of-N quickstart show the three proving workloads. The published crate's API is unchanged; existing 0.3.0 receipts and rules validate identically.
Added
- CLI
bellbook rules initandbellbook export(#70, #71).rules initwrites a starter verifier-rules file from--author <id>:<role>bindings, so a new user no longer hand-authors one (it is feature-independent, likevalidate).exportbundles a log directory into a portable receipt, closing the record -> receipt -> validate loop from the CLI alone; previously the export step required the Rust or Python API. Both were surfaced as adoption friction while writing the best-of-N quickstart. - Python
bellbook.default_rules(authors, max_context=200). Builds a starter verifier-rules JSON string from actor-id -> role bindings - the Python counterpart tobellbook rules init- soWriterusers need not hand-author a rules object. - Fuzzing harness over the receipt trust boundary (#65). A fast, seeded harness (
tests/fuzz_trust_boundary.rs) runs in the ordinary test suite on every push, asserting thatvalidatenever panics and that its reports, along withReceipt::from_bytesand RFC 8785 canonicalization, stay self-consistent for arbitrary input. A coverage-guided libFuzzer target set (fuzz/) runs weekly and on demand for deeper exploration.SECURITY.mddocuments both layers and the pending external-review gate. Development-only; the published crate API is unchanged. - Adoption worked examples and a best-of-N quickstart (#66, #67, #68).
examples/iterative_evolution.rsrecords a multi-generation fork-evaluate-select loop and reads the surviving lineage back;examples/repair_reevaluate.rsshows a single-candidate repair and why a repair motivated by a retracted evaluation is not tainted by it (Causecarries intent, not taint).docs/quickstart-best-of-n.mdtakes a best-of-N harness to a portable receipt with the CLI and the Python package side by side, with a committed starterdocs/quickstart/rules.json.
Install
Rust:
cargo add bellbook@0.4.0
Python (prebuilt wheels for Linux, macOS, Windows; no Rust toolchain needed):
pip install bellbook==0.4.0
Verified
- crates.io: https://crates.io/crates/bellbook/0.4.0
- PyPI: https://pypi.org/project/bellbook/0.4.0/
pip install bellbook==0.4.0in a clean venv;default_rules+Writer(candidate/evaluate/select) +validateround-trips to a clean receipt.
Full Changelog: https://github.com/bellbook-ai/bellbook/blob/v0.4.0/CHANGELOG.md