Skip to content

Release v0.2.0 - #92

Merged
qdequele merged 7 commits into
mainfrom
qdequele/release-0.2.0
Oct 5, 2026
Merged

qdequele merged 7 commits into
mainfrom
qdequele/release-0.2.0

Conversation

@qdequele

@qdequele qdequele commented Oct 5, 2026 •

Copy link
Copy Markdown
Owner

Summary

Prepares v0.2.0, ZeroDB's first published release. 0.1.0 was prepared on 2026-09-09 but never tagged or published.

Based on main after #91 (squash-merged as 9a7ad03).

Changes

  • Versions: zerodb-core, zerodb-io, zerodb, zerodb-tools and zerodb-oracle go to 0.2.0. The exact internal pins (=0.2.0) and both lockfiles are updated. heed-zerodb and heed-shim stay at 0.22.1, the heed line they mirror, so [patch.crates-io] keeps resolving.

  • CHANGELOG.md: a self-contained [0.2.0] - 2026-10-05 section, which becomes the GitHub release notes. It covers:

    • what ZeroDB is and how to install it;
    • features;
    • performance, every number linked to its report in benches/results/;
    • verification;
    • requirements (MSRV 1.98, platforms);
    • known gaps.

    The never-released [0.1.0] section is folded into it, and [Unreleased] is reopened. The first line states the on-disk format change: format_version 2, with version-1 files from development builds refused at open, plus the dump/load migration path.

  • README: the install snippet now uses zerodb = "0.2" and the heed patch at tag = "v0.2.0", and the status paragraph is updated.

  • docs/TOOLS.md: install from crates.io or the release tarballs.

  • SECURITY.md: the list of unsafe code now includes the in-place WRITE_MAP path (ADR-0021).

  • docs/COMPATIBILITY.md: one stale "since 0.1.0" removed.

Verification

  • cargo publish --workspace --dry-run packages and verifies exactly the four engine crates (four "aborting upload due to dry run" lines).
  • crates.io names zerodb, zerodb-core, zerodb-io and zerodb-tools are free. The CARGO_REGISTRY_TOKEN secret is set (2026-09-09).
  • The release workflow's gate (fmt, clippy, tests on x86-64 and aarch64) runs on the tag before anything is published. Locally, on the code this release ships: cargo test --workspace 653 passed, 0 failed; clippy clean on macOS and Linux.
  • Not re-run for this release: the Meilisearch and hannoy test suites, which last passed on 2026-09-09, before spilling, in-place WRITE_MAP and format v2. Meilisearch v1.53.1 does run end-to-end on this code (benchmarks of 2026-10-05). The release notes say this explicitly.

After merge

git checkout main && git pull
git tag -a v0.2.0 -m "ZeroDB v0.2.0"
git push origin v0.2.0

.github/workflows/release.yml then runs the gate, builds zerodb-tools for linux x86-64, linux aarch64 and macOS aarch64, creates the GitHub release from the [0.2.0] section, and publishes the four crates to crates.io (see docs/RELEASING.md, including what to do if the publish step fails).

🤖 Generated with Claude Code

Docs only, no code changes. Checked against main at d155fe6.

- PERF-GAP-VS-LMDB: item statuses and the roadmap now match what
  landed (in-place WRITE_MAP, meta free-list annex, spilling,
  validation cache, forced inlining) and what was parked (lazy
  validation, O_DSYNC meta write). Drifted line refs are replaced
  with function names. The 1.8x commit figure is relabelled as the
  macOS run; on Linux, durable commits are at parity.
- BENCH-MAP: benchmark cross-references updated after the
  delete_range, cursor and annex changes.
- PLAN: Phase 3 status table; the 2.8, 3.1, 3.4 and 3.7 notes
  updated.
- DECISIONS and ADR headers: implementation notes only, no decision
  changed. 0019's implementation was parked in PR #86. 0021 and 0022
  merged as #88 and #89.
- DIVERGENCES: D-004 no longer claims DUPSORT was implemented.
  D-014 and D-022 factual notes fixed. No status or approval changed.
- CHANGELOG [Unreleased]: format v2 is a breaking change (v1 files
  are refused at open, migrate with dump then load), plus in-place
  WRITE_MAP, the annex and NO_READ_AHEAD. Notes that the v0.1.0 tag
  was never pushed.
- README, COMPATIBILITY, TOOLS, CONSUMER-GATE, CONTRIBUTING,
  UPSTREAM-BUGS: format v2, the new options, release state, the CI
  description, mimalloc, and the memory behaviour of load and check.
- SPEC: non-normative cross-references only.
- ci.yml: header comment only.
- PROGRESS: one appended line covering #88, #89, #90 and this sweep.
The maintainer authorized amending normative SPEC text to describe the engine
as it is now. Only deliberate changes are folded in: accepted ADRs, approved
divergences, and changes merged and kept. No code/spec disagreement turned out
to be a correctness bug. All 160 rule IDs (TXN/GC/REC/BT/INV) are kept, none
renumbered or retired. Each file carries a "Revised 2026-10-05" note.

- 02 pages: FORMAT_VERSION 2 and v1 refused at open (ADR-0022), plus the
  annex offset constant. non_free_pages_size uses the GC-23 definition. The
  checksum field is reserved and written as 0. DUPSORT layout is parked.
- 01 flags: NO_READ_AHEAD landed. WRITE_MAP is now in place (ADR-0021).
  fdatasync after msync runs on every platform. The 2.8a pins that were
  pending are adopted as spec text, with DUPSORT itself parked.
- 00 API: WRITE_MAP in-place note. The rest of the surface re-verified, with
  no change needed.
- 03 btree: point get through find_exact. The integer fast path is exactly
  memcmp order. Where dirty bytes live (heap staging, in-place WRITE_MAP,
  spill/unspill). Cursor-path retention covers deletes only. put_reserved
  uses a single descent. Allocation order now includes the annex. Same-size
  overwrite is scoped to inline values: the large-value same-size case was
  never built, tracked in #6. DUPSORT is marked parked.
- 04 txn: snapshot fields include the annex. Frame pool realization note.
- 05 gc: annex section marked ratified (PR #89). Drain representation note.
- 06 recovery: format v2 at REC-1, v2 CRC offsets at REC-8 and REC-22.
  REC-12 states the shipped whole-map msync plus fdatasync, a superset of the
  ranged msync, which stays planned in #45; C3 then C4 then C5 order
  verified. REC-7 notes the parked O_DSYNC meta write.

Also in PERF-GAP: the used-portion COW copy experiment was measured flat and
reverted on 2026-10-02. Its record lived only in 279ceba on an unmerged
branch.
- Root: CLAUDE.md becomes AGENTS.md, rewritten as a public guide for human and
  AI contributors: project rules, unsafe policy, checks, repo map, style.
  Agent model names, milestone process and personal ratification notes are
  gone. PLAN.md, PROGRESS.md and .claude/ (agent definitions, slash commands)
  are removed from the tree; git history keeps them. /CLAUDE.md and /.claude/
  are gitignored so local assistant configuration stays local.
- Code comments: internal shorthand replaced with plain words in about 200
  files: milestone codes, perf-inventory codes, "Phase N" roadmap labels,
  divergence IDs, and references to the removed files. Spec rule IDs
  (TXN-41, GC-16, ...) and ADR numbers are kept; they point to public docs.
  Every changed .rs line is a comment, except three user-visible strings
  cleaned the same way: the zerodb-tools usage text, the MDB_NOSUBDIR error,
  and the compacting-copy comparator error, which also lost a run of stray
  spaces.
- Approval records: names and chat quotes become "maintainer, <date>" in
  DIVERGENCES, DECISIONS, ADRs, SPEC and code. Decisions and dates kept.
- Docs: CONTRIBUTING points to AGENTS.md. References to removed files are
  rewritten; in historical records (ADRs, bench reports) they are plain text.
  SECURITY: write-transaction memory is bounded by spilling now, except a
  single large value.

Checks (Rust 1.99, macOS aarch64): cargo fmt --check clean. cargo clippy
--workspace --all-targets -D warnings clean, and the same for the
x86_64-unknown-linux-gnu target on the engine crates. cargo test --workspace:
653 passed, 0 failed. cargo doc: the same 37 pre-existing warnings as main,
none new.
Comments (about 140 files; comment lines 15,047 → 14,738): removed dated
history ("since 2026-07-21", "amended …", "pre-fix"), review and process
artifacts (review finding IDs, coverage-pass notes, "do not weaken
(AGENTS.md rule 2)" boilerplate), bug-discovery stories (each regression test
keeps one line on what it guards), and long verbatim mdb.c / lmdb.h quotes
(now one sentence plus the reference). Kept every SAFETY comment and atomic
Ordering justification, every invariant and reason a decision was made,
LMDB-parity facts, spec rule IDs, ADR numbers and complete public API docs.

Comments that contradicted the code are corrected:
- heed-zerodb `Database::put_reserved` # Errors: a failing closure returns
  Io and keeps the entry; it does not return Encoding.
- heed-zerodb txn module doc and heed_suite: RwTxn is Send (the writer lock
  is thread-agnostic, TXN-6); they described an old !Send design.
- dirty.rs SPARE_CAP: ZeroDB does spill (TXN-68). meta.rs: the CRC covers
  [0,172) plus the annex ids. lib.rs and page/mod.rs: page::raw is not the
  only unsafe module.
- Three doc comments were attached to the wrong item and are moved. One dead
  intra-doc link is removed. The oracle gc_churn band/page size and the
  multi_db coverage list are fixed, along with a few other stale harness
  descriptions.

Only comments changed in .rs files (checked mechanically; two trailing
comments after an unchanged `},`), plus one fix:
examples/decode_artifact.rs now splits off the engine-mode byte the way the
diff_ops fuzz target does, and prints the mode. It used to decode the mode
byte as an op and print a shifted sequence.

Docs:
- PERF-GAP-VS-LMDB.md goes from 1,160 to 331 lines. It now shows where ZeroDB
  stands per area, which technique closed each gap, what was tried and
  dropped, and what remains with issue links. Every number cites its report
  in benches/results. A lookup table maps the old item codes still cited by
  ADRs, SPEC and the perf ledger.
- BENCH-MAP.md goes from 315 to 270 lines: the rung map is kept, history
  removed.
- DECISIONS.md and DIVERGENCES.md: index rows cut to one short line each. All
  22 divergences are kept, with no status or approval changed.
- benches/results: nothing deleted; every report is either the latest of its
  kind or referenced.

Checks (Rust 1.99): fmt clean. clippy -D warnings clean on macOS and on the
x86_64-unknown-linux-gnu engine crates. cargo test --workspace: 653 passed,
0 failed. cargo doc: same 37 pre-existing warnings as main. No broken
relative links in any Markdown file.
- CHANGELOG [0.1.0]: say plainly that it was never released. Drop the claims
  that crates were published and binaries attached, drop the tag from the
  patch snippet, and replace the links to the missing v0.1.0 tag. The
  `## [0.1.0]` heading stays, since the release workflow matches it.
- SPEC 01 Table 1, MDB_WRITEMAP: commit flushes the whole map with msync, and
  a synchronous flush also fdatasyncs on every platform (REC-12). This row
  now matches §S7 and the landed-flags table.
- Version 0.2.0 for zerodb-core, zerodb-io, zerodb, zerodb-tools and
  zerodb-oracle, with the exact internal pins updated. Lockfiles refreshed.
  heed-zerodb and heed-shim stay at 0.22.1, the heed line they mirror.
- CHANGELOG [0.2.0] is self-contained, since 0.1.0 was prepared but never
  released: what ZeroDB is, how to install it, features, performance with
  sources, verification (including that the consumer test suites last ran
  2026-09-09), requirements, and known gaps. The never-released [0.1.0]
  section is folded in; [Unreleased] is reopened.
- README install snippet (crates.io and the v0.2.0 tag) and status, TOOLS
  install instructions, SECURITY's unsafe inventory (adds the in-place
  WRITE_MAP path), and a stale "since 0.1.0" in COMPATIBILITY.
@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 502587c2-fd7d-421c-a6df-60e05adf14a1
📥 Commits

Reviewing files that changed from the base of the PR and between 9a7ad03 and 8ea2804.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • fuzz/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (10)
  • CHANGELOG.md
  • README.md
  • SECURITY.md
  • crates/zerodb-core/Cargo.toml
  • crates/zerodb-io/Cargo.toml
  • crates/zerodb-oracle/Cargo.toml
  • crates/zerodb-tools/Cargo.toml
  • crates/zerodb/Cargo.toml
  • docs/COMPATIBILITY.md
  • docs/TOOLS.md
 _____________________________________________________________
< Today's code review brought to you by yesterday's caffeine. >
 -------------------------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

# Conflicts:
#	CHANGELOG.md
#	README.md
#	SECURITY.md
#	crates/zerodb-tools/Cargo.toml
#	docs/TOOLS.md
@qdequele
qdequele changed the base branch from qdequele/docs-cleanup to main October 5, 2026 21:48
@qdequele
qdequele merged commit 7002d6e into main Oct 5, 2026
9 of 10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant