Skip to content

v0.4.0

Choose a tag to compare

@cristianducu cristianducu released this 21 Aug 04:21
· 40 commits to main since this release
0d8b924

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 init and bellbook export (#70, #71). rules init writes a starter verifier-rules file from --author <id>:<role> bindings, so a new user no longer hand-authors one (it is feature-independent, like validate). export bundles 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 to bellbook rules init - so Writer users 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 that validate never panics and that its reports, along with Receipt::from_bytes and 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.md documents 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.rs records a multi-generation fork-evaluate-select loop and reads the surviving lineage back; examples/repair_reevaluate.rs shows a single-candidate repair and why a repair motivated by a retracted evaluation is not tainted by it (Cause carries intent, not taint). docs/quickstart-best-of-n.md takes a best-of-N harness to a portable receipt with the CLI and the Python package side by side, with a committed starter docs/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

Full Changelog: https://github.com/bellbook-ai/bellbook/blob/v0.4.0/CHANGELOG.md