Skip to content

chore(release): prepare v1.0.1#234

Merged
ebfull merged 5 commits into
mainfrom
bump-v1.0.1
Jul 17, 2026
Merged

chore(release): prepare v1.0.1#234
ebfull merged 5 commits into
mainfrom
bump-v1.0.1

Conversation

@ebfull

@ebfull ebfull commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Motivation

First patch release after v1.0.0. Since the tag, main has accumulated operator-visible fixes (header-sync stall and correctness fixes, VCT validation hardening, block-sync memory bounding, mempool and Sapling verification performance) that should ship as v1.0.1.

Solution

Release prep per .github/PULL_REQUEST_TEMPLATE/release-checklist.md, with crate versions advancing independently (changed crates only):

Crate 1.0.0 → Why
zakura-network 2.0.0 cargo semver-checks: 4 breaking findings — removed/renamed public items (#222, #154)
zakura-state 2.0.0 DerefMut impl removed from CheckpointVerifiedBlock (#208 documents it as source-breaking; below semver-checks' lint coverage, which reports clean)
zakura-consensus 2.0.0 state service types are in its public init bounds — public-dependency major
zakura-rpc 2.0.0 state/network/consensus service types in its public server signatures — public-dependency major
zakura-chain 1.1.0 additive only: Block::attributed_memory_size_bytes (#159)
zakura-utils 1.0.1 its zakura-rpc requirement moves to 2.0.0 (private dep of the tools)
zakura 1.0.1 the node package; drives the v1.0.1 tag

The remaining six crates are unchanged since v1.0.0 and are not bumped or published.

  • Root CHANGELOG.md: new [1.0.1] section. This also relocates the three ### Fixed entries that fix(state): stop serving fabricated commitment metadata #133/fix(sync): retry missing header ranges indefinitely #138 appended under [1.0.0] — both PRs merged after the tag (their changes ship in v1.0.1, and the [Unreleased] section didn't exist yet when they landed), so [1.0.0] returns to the plain "Initial release" entry per CHANGELOG_GUIDELINES.md.
  • Crate changelogs for the seven bumped crates, from cargo semver-checks / cargo public-api diff latest.
  • Installer pinned to the v1.0.1 tag with the placeholder-zero checksum (release CI substitutes the real value into the published asset copy); Docker pins move to zakuracore/zakura:1.0.1 / zcashd-compat-1.0.1. README --tag line via cargo release replace.
  • Retires the upstream-era stored config corpus in its own commit (51 snapshots inherited from Zebra, v1.0.0-beta.* through v5.0.0*, plus feature variants): no Zakura user ever ran them — Zakura's first release is v1.0.0 — the acceptance tests only iterate the directory and look up v{CARGO_PKG_VERSION}.toml by name, and upstream's ancient v1.0.1.toml squatted on this release's snapshot filename. Keeps v1.0.0.toml and custom-conf.toml (loaded by path in test-docker.yml). Zakura's rc-era snapshots go with the rest, per the rc-artifact sweep — shout if you'd rather keep those. (Supersedes test(zakurad): remove stale upstream stored configs #233, closed in favor of a single PR.)
  • Regenerated stored config snapshot zakurad/tests/common/configs/v1.0.1.toml (the last_config_is_stored acceptance test derives the filename from the package version).
  • ESTIMATED_RELEASE_HEIGHT 3,413,500 → 3,415,700 (tip 3,415,571 on 2026-07-17 per Blockchair, same-day cut), and EOS_PANIC_AFTER 7 → 18 days (CHANGELOG_PARAMS.md row included): the 7-day window would halt every 1.0.1 node ~4 days before the expected Ironwood activation (3,428,143, ~2026-07-28). The halt now lands one week after activation (~2026-08-04, height ~3,436,436), so 1.0.1 spans the upgrade and still forces migration to the post-Ironwood release. Warnings keep their 3-day lead (start ~2026-08-01). Re-estimate if dispatch slips.
  • Checkpoints: not refreshed (explicit decision, matching v1.0.0). The lists top out at 3,358,006; the automated checkpoint-update pipeline is gated on the GCP integration-tests workflow, which hasn't produced artifacts since 2026-06-23.

Merging this PR does not cut the release: the create-release dispatch and the release-environment approval remain the controls, and no crates.io publish happens as part of this change.

Testing

  • make pre-release RELEASE_TAG=v1.0.1 BASE_TAG=v1.0.0 (output in a PR comment)
  • cargo semver-checks per changed library crate: network fails 4 major checks (matching the table); state/chain/consensus/rpc report "no semver update required" — state's break and chain's addition sit outside the tool's lint coverage, hence the manual classification above
  • cargo test --release -p zakura --test acceptance -- config_tests (covers last_config_is_stored and stored_configs_work)
  • cargo metadata --locked resolves, so the lockfile matches the new graph
  • bash -n scripts/install-zakura.sh

Specifications & References

Follow-up Work

AI Disclosure

Prepared with Claude Code (version bumps via cargo release, changelog and metadata edits, preflight runs); human review required before merge and dispatch.

🤖 Generated with Claude Code

ebfull and others added 2 commits July 17, 2026 07:11
The stored-config corpus under zakurad/tests/common/configs/ was
inherited from upstream Zebra and spans releases (v1.0.0-beta.* through
v5.0.0*, plus feature-variant snapshots) that no Zakura user ever ran:
Zakura's first release is v1.0.0. The acceptance tests only iterate the
directory and look up v{CARGO_PKG_VERSION}.toml by name, so these files
exist purely to keep parsing configs that cannot exist in the field,
and every future config change pays the maintenance cost of the whole
corpus. Keep Zakura's own v1.0.0.toml (this also clears upstream's
ancient v1.0.1.toml, which would collide with Zakura's next patch
release snapshot) and custom-conf.toml, which the test-docker workflow
loads by path; rc-era snapshots go with the rest of the pre-1.0.0
process artifacts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
First patch release after v1.0.0. Crate versions advance independently,
changed crates only: zakura-network, zakura-state, zakura-consensus, and
zakura-rpc move to 2.0.0 (semver-checks breaking findings in network; the
CheckpointVerifiedBlock DerefMut removal in state; state/network service
types are public in consensus and rpc init signatures, so their majors
cascade), zakura-chain to 1.1.0 (additive), zakura-utils and zakura to
1.0.1. Internal dependency requirements move only where the previous
requirement no longer matches (release.toml now pins
dependent-version = "fix" to codify that), and the lockfile follows.

Root changelog gains the [1.0.1] section and returns [1.0.0] to the plain
Initial-release entry: the three Fixed entries that #133/#138 appended
there describe post-tag changes shipping in v1.0.1, and predate the
[Unreleased] section. Crate changelogs cover the API deltas per
cargo-semver-checks and cargo-public-api. Installer and README pins move
to v1.0.1 with the placeholder-zero checksum for release CI to replace.
ESTIMATED_RELEASE_HEIGHT moves to 3,416,700 (tip 3,415,500 on 2026-07-17,
one-day cut assumption), and the stored config snapshot is regenerated
for the 1.0.1 package version (byte-identical to v1.0.0's; no config
defaults changed). Checkpoints are deliberately not refreshed, matching
v1.0.0 — the generating pipeline has been down since 2026-06-23.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ebfull ebfull added A-release Release pull requests; enables the check-no-git-dependencies gate and release CI paths C-exclude-from-changelog Exclude this PR from the draft changelog P-Critical 🚑 Critical priority labels Jul 17, 2026
@ebfull

ebfull commented Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Changelog review trail, per the release checklist ("put the list of deleted changelog entries in a PR comment"). Since Release Drafter had no draft for this range, the [1.0.1] section was composed from git log v1.0.0..HEAD (25 commits); these are the changes excluded as internal-only per CHANGELOG_GUIDELINES.md:

Change Why excluded from the root changelog
#224, #222, #154 header-sync/block-sync internal refactors; their public-API consequences are recorded in zakura-network/CHANGELOG.md [2.0.0] instead
#204 gates raw RocksDB test helpers to cfg(test); no public API or operator-visible behavior
#206 build-script-only removal; recorded in zakura-rpc/CHANGELOG.md [2.0.0]
#210 test-only (serializes legacy reorg replacement e2e tests)
#213 docs lint allowance for generated uint code
#205 devops dependency group bumps
#214 deploy tooling alert format (not a zakurad change)
#197 release automation (v1.0.0 installer metadata)

Everything else since the tag has an entry under [1.0.1] (root) and/or the relevant crate changelog. The four un-numbered commits from the rebase-merge of #202 are linked as #202.

@ebfull

ebfull commented Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Output of make pre-release RELEASE_TAG=v1.0.1 BASE_TAG=v1.0.0 on the release commit 13b7d2de8:


==> [1/2] Checking release version

make pre-release-version RELEASE_TAG="v1.0.1" BASE_TAG="v1.0.0" PRE_RELEASE_WARN_CRATE_VERSION_BUMPS="1"
make[1]: Entering directory '/home/sean/build/zakura/zakura'
./scripts/check-release-version.sh "v1.0.1"
Release tag v1.0.1 matches the 'zakura' package version (1.0.1).
Changed publishable crate: zakura (1.0.0 -> 1.0.1)
Changed publishable crate: zakura-chain (1.0.0 -> 1.1.0)
Changed publishable crate: zakura-consensus (1.0.0 -> 2.0.0)
Changed publishable crate: zakura-state (1.0.0 -> 2.0.0)
Changed publishable crate: zakura-network (1.0.0 -> 2.0.0)
Changed publishable crate: zakura-rpc (1.0.0 -> 2.0.0)
Changed publishable crate: zakura-utils (1.0.0 -> 1.0.1)
Crate version bump advisory found no unchanged versions across 7 changed published crate(s).

NOTICE: The working tree has local changes.
        This advisory compared those changes against v1.0.0.
make[1]: Leaving directory '/home/sean/build/zakura/zakura'

Package archive sizes:
  zakura-test-1.0.0.crate: 1718344 bytes
  zakura-tower-fallback-1.0.0.crate: 12042 bytes
  zakura-jsonl-trace-1.0.0.crate: 9582 bytes
  zakura-chain-1.1.0.crate: 1494545 bytes
  zakura-tower-batch-control-1.0.0.crate: 27948 bytes
  zakura-node-services-1.0.0.crate: 36796 bytes
  zakura-script-1.0.0.crate: 46280 bytes
  zakura-state-2.0.0.crate: 539929 bytes
  zakura-consensus-2.0.0.crate: 161708 bytes
  zakura-network-2.0.0.crate: 953642 bytes
  zakura-rpc-2.0.0.crate: 266218 bytes
  zakura-utils-1.0.1.crate: 65175 bytes
  zakura-1.0.1.crate: 488745 bytes

All 13 crates package cleanly.
make[1]: Leaving directory '/home/sean/build/zakura/zakura'

(The version-gate and advisory section above is from the pre-commit run — the packaging step re-ran on the clean release commit; both passed. The NOTICE: working tree has local changes line reflects the pre-commit run only.)

Comment thread zakura-network/Cargo.toml
[package]
name = "zakura-network"
version = "1.0.0"
version = "2.0.0"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrmm is this really 2.0?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think those pub api's should be for public consumption. If we follow exact strictness like this, we'll probably be at 10.0.0 in a few weeks

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general there might be situations where users will build and cargo will select older (semver compatible) versions in lockfiles or caches, but those would be incompatible.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can address this before the version numbers get out of hand I think. I also don't think it really matters if they go up to high numbers, the largest allowed version number is u64::MAX.

v1.0.1 releases 2026-07-17, ~11 days before the expected Ironwood
activation (height 3,428,143, ~2026-07-28). The v1.0.0-era 7-day
end-of-support window would halt every 1.0.1 node ~4 days before
activation, so EOS_PANIC_AFTER widens to 18 days: the halt lands one
week after activation (~2026-08-04, height ~3,436,436), spanning the
network upgrade while still forcing migration to the post-Ironwood
release. Warnings keep their 3-day lead. ESTIMATED_RELEASE_HEIGHT
refreshes to 3,415,700 (tip 3,415,571 at commit time, same-day cut) and
the changelog dates move to the actual release date; CHANGELOG_PARAMS
records the re-tuning.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ebfull

ebfull commented Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Pushed 6d0edc8cd: end-of-support widened 7 → 18 days so the halt lands one week after the expected Ironwood activation (~2026-08-04, height ~3,436,436) instead of ~4 days before it; ESTIMATED_RELEASE_HEIGHT refreshed to 3,415,700 for a same-day cut and changelog dates moved to 2026-07-17. CHANGELOG_PARAMS.md has the re-tuning row; PR description updated to match.

markdownlint (MD049) requires underscore emphasis style.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rust 1.95 deprecated fetch_update (renamed to try_update), which fails
the -D warnings lint builds. try_update is not available at MSRV 1.91,
so use a compare_exchange_weak loop matching release_atomic_bytes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ebfull
ebfull merged commit 7130dca into main Jul 17, 2026
63 checks passed
@ebfull
ebfull deleted the bump-v1.0.1 branch July 17, 2026 17:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-release Release pull requests; enables the check-no-git-dependencies gate and release CI paths C-exclude-from-changelog Exclude this PR from the draft changelog P-Critical 🚑 Critical priority

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants