Skip to content

remove(tests): Remove the QA test framework - #10363

Merged
mergify[bot] merged 4 commits into
mainfrom
remove-qa
Mar 5, 2026
Merged

remove(tests): Remove the QA test framework#10363
mergify[bot] merged 4 commits into
mainfrom
remove-qa

Conversation

@oxarbitrage

Copy link
Copy Markdown
Contributor

Motivation

After zcash/integration-tests#1 we should delete our version of the framework. Close #10359

Solution

  • Remove directory.
  • Checked for references: No references, we never added this to CI or anything else.
  • Updated changelogs.

AI Disclosure

  • No AI tools were used in this PR
  • AI tools were used:

PR Checklist

  • The PR name is suitable for the release notes.
  • The PR follows the contribution guidelines.
  • This change was discussed in an issue or with the team beforehand.
  • The solution is tested.
  • The documentation and changelogs are up to date.

Comment thread zebra-rpc/CHANGELOG.md
@oxarbitrage oxarbitrage added C-testing Category: These are tests A-rpc Area: Remote Procedure Call interfaces P-Medium ⚡ C-deprecated and removed extra-reviews This PR needs at least 2 reviews to merge labels Mar 4, 2026
@conradoplg

Copy link
Copy Markdown
Collaborator

Looks good but ended up getting conflicts with the recently merged PR

@mergify mergify Bot added the queued label Mar 5, 2026
@mergify

mergify Bot commented Mar 5, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

Rule: batched


This pull request spent 11 minutes 30 seconds in the queue, including 35 seconds running CI.

Required conditions to merge

mergify Bot added a commit that referenced this pull request Mar 5, 2026
@mergify
mergify Bot merged commit cee966b into main Mar 5, 2026
37 of 40 checks passed
@mergify
mergify Bot deleted the remove-qa branch March 5, 2026 09:46
@mergify mergify Bot removed the queued label Mar 5, 2026
Metalcape added a commit to Metalcape/zebra that referenced this pull request Mar 6, 2026
commit 21f8e187f8e984851e6e7b77c915bf14837b842b
Author: Metalcape <dario.capecchi.m@gmail.com>
Date:   Fri Mar 6 18:40:38 2026 +0100

    Maintenance
    - Merge Cargo.lock changes
    - Add parameter descriptions in methods.rs for new RPC methods
    - Convert new methods in service.rs to new format

commit dbfbde2dbdc5ca1f47476d9055bd7cb343e0846e
Author: Metalcape <dario.capecchi.m@gmail.com>
Date:   Fri Mar 6 17:57:28 2026 +0100

    Squashed commit of the following:

    commit 79505cd5945b9aa98a9e27c703ef4b7dff927094
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Thu Mar 5 11:16:43 2026 -0300

        fix(docs): Markdown lint in state changelog (#10367)

        fix markdown lint in state changelog

    commit cee966b2d71fed8d14efb520ac01f3a2390b0d45
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Thu Mar 5 06:46:46 2026 -0300

        remove(tests): Remove the QA test framework (#10363)

        * remove `qa` folder

        * update the changelogs

        * update pull request number

    commit 09be46ab55b626f82769bc11e8e426c03997c692
    Author: Zaki Manian <zaki@iqlusion.io>
    Date:   Wed Mar 4 17:03:50 2026 -0800

        feat: add remaining non-standard mempool transaction filters (#10314)

        * feat: add remaining non-standard mempool transaction filters

        Implement the remaining zcashd mempool standardness checks from
        AcceptToMemoryPool / IsStandardTx / AreInputsStandard (issue #10143).

        Per-transaction sigops limit (MAX_STANDARD_TX_SIGOPS = 4000):
        - The sigops count now includes both legacy and P2SH sigops for mempool
          transactions, matching zcashd's GetLegacySigOpCount + GetP2SHSigOpCount.
        - Added p2sh_sigop_count() to zebra-script for computing P2SH sigops.

        AreInputsStandard (full zcashd parity):
        - Solver classification: spent output scriptPubKeys must be a known
          standard type (P2PKH, P2PK, P2SH, multisig). Non-standard and
          OP_RETURN spent outputs are rejected.
        - Stack-depth check: scriptSig must have exactly the expected number of
          push operations per ScriptSigArgsExpected. Extra data is rejected.
        - P2SH redeemed script handling: standard redeemed scripts have their
          inner expected args validated; non-standard redeemed scripts are
          accepted if sigops <= MAX_P2SH_SIGOPS (15).
        - Added debug_assert_eq checks on input/output lengths to catch silent
          zip() truncation.

        References:
        - https://github.com/zcash/zcash/blob/v6.10.0/src/policy/policy.cpp#L137
        - https://github.com/zcash/zcash/blob/v6.10.0/src/policy/policy.h
        - https://github.com/zcash/zcash/blob/v6.10.0/src/main.cpp#L1819

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * fix: are_inputs_standard should continue checking remaining inputs

        When a P2SH input has a non-standard redeemed script with sigops <=
        MAX_P2SH_SIGOPS, the function was returning true immediately without
        validating remaining inputs. Now continues to the next input instead.

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * fix: address CI failures and review feedback

        - Add missing `inputs_are_standard` field in zebra-rpc test
        - Wrap bare URLs in angle brackets for rustdoc compliance
        - Update zcashd references from v6.10.0 to v6.11.0
        - Fix rustfmt formatting in zebra-script tests

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * fix: address review feedback from #10314

        - Update zcashd reference links from v6.10.0 to v6.11.0 in storage.rs
        - Rename NonStandardP2shSigops to NonStandardInputs (covers more than sigops)
        - Replace debug_assert_eq with assert_eq in zebra-script (zip silently
          truncates in release builds if lengths mismatch)
        - Move MAX_STANDARD_TX_SIGOPS, MAX_STANDARD_SCRIPTSIG_SIZE, and
          MAX_STANDARD_MULTISIG_PUBKEYS from local constants to public in
          zebra-script alongside MAX_P2SH_SIGOPS
        - Improve doc comment on inputs_are_standard field
        - Bump zcash_script from 0.4.2 to 0.4.3

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * refactor: move policy functions from zebra-script to storage.rs

        Address review feedback from #10314:
        - Move are_inputs_standard, p2sh_sigop_count, and helpers from
          zebra-script to storage.rs where they belong alongside existing
          output policy checks
        - Eliminate classify_script/standard_script_kind duplication by
          extracting shared standard_script_kind_from_bytes
        - Replace inputs_are_standard field with spent_outputs on
          VerifiedUnminedTx so storage.rs can compute policy checks directly
        - Rename sigops to legacy_sigop_count to clarify it excludes P2SH
        - Replace assert_eq! panics in policy functions with graceful
          tracing::warn + safe defaults for length mismatches
        - Add unit tests for policy functions in storage tests
        - Update doc comments per reviewer suggestions
        - Add TODO for spent_outputs alignment issue (#10346)

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * refactor: extract policy module, deduplicate checks, reorder validation

        Address review feedback from PR #10314:

        - Move policy constants and functions to storage/policy.rs module,
          keeping reject_if_non_standard_tx in storage.rs
        - Inline standard_script_kind_from_code (1-line function used once)
          and merge standard_script_kind_from_bytes into standard_script_kind
        - Fix doc comments: "zcashd's Solver()" -> "zcash_script solver"
        - Reorder checks: scriptSig size/push-only checks now run before
          are_inputs_standard, so count_script_push_ops is never called
          on non-push-only scripts
        - Deduplicate spent_outputs length mismatch check: done once in
          reject_if_non_standard_tx instead of in both are_inputs_standard
          and p2sh_sigop_count
        - Move unit tests for private helpers into policy module

        ---------

        Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

    commit a30f71ffd9665657d1e23895feed6f21bdeebb90
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Wed Mar 4 19:33:46 2026 -0300

        fix(consensus): preserve input order in `spent_outputs` for mixed chain/mempool transactions (#10356)

        fix ordering in `spent_outputs()`

    commit 0ebaf6dac72e67f898fbd46e6f306cc6b4327494
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Wed Mar 4 21:23:01 2026 +0000

        docs: improve documentation quality and add CI checks (#10204)

        * docs: improve documentation quality and add CI checks

        Add automated documentation quality checks and fix existing issues across
        the codebase documentation.

        Workflow changes:
        - Add `docs-check.yml` workflow with link checking (lychee), spell checking
          (codespell), and markdown linting (markdownlint)
        - Workflow follows project conventions: pinned action SHAs, per-job
          permissions, aggregator job pattern

        Documentation fixes:
        - Fix markdown linting issues (MD040 code block language specifiers,
          MD059 descriptive link text)
        - Fix spelling errors across documentation files
        - Add missing ARCHITECTURE.md for high-level codebase overview
        - Add new developer documentation: onboarding guide, crate architecture
        - Add ecosystem integration guide for users
        - Add architectural decision records (ADRs) for Tower, verification, RocksDB
        - Update CI/CD documentation with workflow diagram

        Configuration:
        - Add `.lychee.toml` for link checker configuration
        - Add `.lycheecache` to `.gitignore`
        - Update `.codespellrc` with domain-specific terminology

        Note: Some URLs are excluded in `.lychee.toml` that require review:
        - zips.z.cash PDF links (404 but linked from official Zcash site)
        - Deprecated doc sites (doc.zebra.zfnd.org, doc-internal.zebra.zfnd.org)
        - zcash/zips master branch links (pending main migration)
        - New zebra.zfnd.org pages (pending book deployment)

        * fix(ci): add markdownlint config and fix alls-green SHA

        - Add .trunk/configs/.markdownlint.yaml to repo (was gitignored)
        - Fix re-actors/alls-green SHA: use commit hash, not tag object hash

        * fix(ci): disable additional markdownlint rules for existing docs

        Disable MD001, MD028, MD036 rules that flag intentional formatting
        patterns in existing RFC and book documentation.

        * fix(docs): update stale URLs and remove RFC implementation notes

        - Fix nginx URL migration (nginxinc -> nginx organization)
        - Fix zcash/zips URLs (master -> main, new /zips/ directory structure)
        - Fix docs.rs URL (config/struct.Config -> config/rpc/struct.Config)
        - Fix internal docs URLs (doc-internal.zebra.zfnd.org -> zebra.zfnd.org/internal)
        - Fix zfnd.org blog URLs (removed /blog/ path segment)
        - Remove Implementation Notes from RFCs (RFCs should be static historical records)
        - Clean up lychee.toml exclusions for now-working URLs
        - Add CHANGELOG.md to exclude_path (contains historical dead links)

        * fix(docs): resolve markdownlint errors in observability docs and CHANGELOGs

        - Add language specifier to fenced code blocks (MD040)
        - Add blank lines around lists (MD032)
        - Add blank lines around fenced code blocks (MD031)
        - Remove multiple consecutive blank lines (MD012)

    commit de9a52cbd646364c35b8e1b9db32c9f8af31160d
    Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Date:   Fri Feb 27 15:23:09 2026 +0000

        build(deps): bump the devops group across 1 directory with 8 updates (#10345)

        Bumps the devops group with 8 updates in the / directory:

        | Package | From | To |
        | --- | --- | --- |
        | [actions/checkout](https://github.com/actions/checkout) | `6.0.1` | `6.0.2` |
        | [taiki-e/install-action](https://github.com/taiki-e/install-action) | `2.67.2` | `2.68.10` |
        | [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) | `6.1.1` | `6.2.0` |
        | [rlespinasse/github-slug-action](https://github.com/rlespinasse/github-slug-action) | `5.4.0` | `5.5.0` |
        | [docker/build-push-action](https://github.com/docker/build-push-action) | `6.18.0` | `6.19.2` |
        | [docker/login-action](https://github.com/docker/login-action) | `3.6.0` | `3.7.0` |
        | [shimataro/ssh-key-action](https://github.com/shimataro/ssh-key-action) | `2.7.0` | `2.8.0` |
        | [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) | `0.4.1` | `0.5.0` |

        Updates `actions/checkout` from 6.0.1 to 6.0.2
        - [Release notes](https://github.com/actions/checkout/releases)
        - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
        - [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)

        Updates `taiki-e/install-action` from 2.67.2 to 2.68.10
        - [Release notes](https://github.com/taiki-e/install-action/releases)
        - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
        - [Commits](https://github.com/taiki-e/install-action/compare/0bc4cd8a3e21db4cb9519857377b0c8c5e150de5...305bebabd4457bed9b82541755f034994382465b)

        Updates `release-drafter/release-drafter` from 6.1.1 to 6.2.0
        - [Release notes](https://github.com/release-drafter/release-drafter/releases)
        - [Commits](https://github.com/release-drafter/release-drafter/compare/267d2e0268deae5d44f3ba5029dd4d6e85f9d52d...6db134d15f3909ccc9eefd369f02bd1e9cffdf97)

        Updates `rlespinasse/github-slug-action` from 5.4.0 to 5.5.0
        - [Release notes](https://github.com/rlespinasse/github-slug-action/releases)
        - [Commits](https://github.com/rlespinasse/github-slug-action/compare/6f7a8d2348e2a4aa5defafcdaafe5aef3f83bd4b...9e7def61550737ba68c62d34a32dd31792e3f429)

        Updates `docker/build-push-action` from 6.18.0 to 6.19.2
        - [Release notes](https://github.com/docker/build-push-action/releases)
        - [Commits](https://github.com/docker/build-push-action/compare/263435318d21b8e681c14492fe198d362a7d2c83...10e90e3645eae34f1e60eeb005ba3a3d33f178e8)

        Updates `docker/login-action` from 3.6.0 to 3.7.0
        - [Release notes](https://github.com/docker/login-action/releases)
        - [Commits](https://github.com/docker/login-action/compare/5e57cd118135c172c3672efd75eb46360885c0ef...c94ce9fb468520275223c153574b00df6fe4bcc9)

        Updates `shimataro/ssh-key-action` from 2.7.0 to 2.8.0
        - [Release notes](https://github.com/shimataro/ssh-key-action/releases)
        - [Changelog](https://github.com/shimataro/ssh-key-action/blob/v2/CHANGELOG.md)
        - [Commits](https://github.com/shimataro/ssh-key-action/compare/d4fffb50872869abe2d9a9098a6d9c5aa7d16be4...6b84f2e793b32fa0b03a379cadadec75cc539391)

        Updates `zizmorcore/zizmor-action` from 0.4.1 to 0.5.0
        - [Release notes](https://github.com/zizmorcore/zizmor-action/releases)
        - [Commits](https://github.com/zizmorcore/zizmor-action/compare/135698455da5c3b3e55f73f4419e481ab68cdd95...0dce2577a4760a2749d8cfb7a84b7d5585ebcb7d)

        ---
        updated-dependencies:
        - dependency-name: actions/checkout
          dependency-version: 6.0.2
          dependency-type: direct:production
          update-type: version-update:semver-patch
          dependency-group: devops
        - dependency-name: taiki-e/install-action
          dependency-version: 2.68.10
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: release-drafter/release-drafter
          dependency-version: 6.2.0
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: rlespinasse/github-slug-action
          dependency-version: 5.5.0
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: docker/build-push-action
          dependency-version: 6.19.2
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: docker/login-action
          dependency-version: 3.7.0
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: shimataro/ssh-key-action
          dependency-version: 2.8.0
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: zizmorcore/zizmor-action
          dependency-version: 0.5.0
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        ...

        Signed-off-by: dependabot[bot] <support@github.com>
        Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

    commit 55cd3dfb44d78a924cecd11c54cf67b56338b8f5
    Author: Arya <aryasolhi@gmail.com>
    Date:   Fri Feb 27 10:23:04 2026 -0500

        fix(network): Fixes bug in `ActiveConnectionCounter` and inaccurate connection count metrics (#10311)

        * Updates ActiveConnectionCounter to track connection slots reserved for connection attempts separately from occupied connection slots representing active established peer connections.

        * Uses a single channel for closed and opened connection notifications

        * addresses suggestions from code review

    commit cfc4c71ee4bc40da2c3f0c37b7446bbc70ac53e4
    Author: Arya <aryasolhi@gmail.com>
    Date:   Fri Feb 27 08:26:24 2026 -0500

        cleanup: Simplify `ReadStateService::call()` method (#10335)

        * Simplifies `ReadStateService::call()` method.

        * Renames method

        * fix lint

        * reduces duplicate code

        * simplifies a couple more match arms

        * Applies suggestions from code review

        * look for tip block size in block info collection in memory or cf in rocksdb before counting the number of bytes in a block's encoding

    commit 42baa9c383b3fc612c1deede77d3ef9fb6afe98e
    Author: Pili Guerra <pili@zfnd.org>
    Date:   Fri Feb 27 14:13:44 2026 +0100

        docs: Update zebra grafana dashboards path in metrics.md (#10330)

        Minor update based on where sample dashboards can be found

    commit ef299c28b7de44a5465e5610471f4a1d806ff4b0
    Author: syszery <66296529+syszery@users.noreply.github.com>
    Date:   Wed Feb 25 14:25:15 2026 +0100

        chore: update CHANGELOGs to reflect changes made in #10056 and #9979 (#10273)

        * chore: update CHANGELOGs to reflect changes made in #10056

        * chore(zebra-state): update the CHANGELOG to reflect changes made in #9979 and #9999

        * Update zebra-state/CHANGELOG.md

        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

        * Fix typo in CommitCheckpointVerifiedError entry

        ---------

        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    commit 899df3d565d9fa34d918ace05badee395940b6f7
    Author: Arya <aryasolhi@gmail.com>
    Date:   Tue Feb 17 14:40:55 2026 -0500

        feat(state): Add a `AnyChainBlock` state request for querying blocks in side chains (#10325)

        * adds an `AnyChainBlock` state request

        * Updates changelog

        * Avoids cloning any extra data in the non-finalized state when handling some state requests that only query the best non-finalized chain (perhaps at the expense of holding read locks slightly longer if the added traversals are worse than the copying, probably insignicant either way but this makes it easier to add fields to NonFinalizedState without worrying)

        Adds a `cloned_mapped_watch_data()` method on `WatchReceiver`.

        * Applies docs corrections, renames methods/fns, and unifies implementations for `block` and `any_chain_block` read fns (latter renamed to `any_block()`)

        * Factors `spawn_blocking()` and `in_scope()` calls into a new trait method.

        * Update zebra-state/src/request.rs

        * Add basic tests for `AnyChainBlock` (#10327)

        generate some tests

        * Update zebra-state/src/request.rs

        ---------

        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    commit b581fba9315d26df5eab0b2f3bc2c37a9cc6b389
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Tue Feb 17 15:27:36 2026 -0300

        release(changelog): Add changelogs for OpenRPC changes (#10326)

        add changelogs for openerpc

    commit c45cf2b5c621247c18199795d3834cf6d9d92baf
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Fri Feb 13 21:05:18 2026 -0300

        feat(rpc): Support `rpc.discover` endpoint (#10201)

        * use operpsee

        * use openrpsee crate

        * remove testing and demo schemas

        * fix dependencies

        * add todo link

    commit cad81ca50b715ac7e26226ba4a865b99ca70385e
    Author: Zaki Manian <zaki@iqlusion.io>
    Date:   Fri Feb 13 13:19:33 2026 -0800

        fix: getrawtransaction compat with zcashd (#10307)

        * fix: getrawtransaction compat with zcashd (#10137)

        Two fixes for zcashd compatibility in the getrawtransaction RPC response:

        1. Always include `expiryheight` field (zcashd returns 0 for transactions
           without expiry, Zebra was omitting the field entirely via
           skip_serializing_if)

        2. Decode sighash type flags in scriptSig asm output (change
           `.to_asm(false)` to `.to_asm(true)` so signatures display with
           `[ALL]`, `[NONE]`, etc. suffixes matching zcashd)

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * fix: match zcashd expiryheight behavior for pre-Overwinter transactions

        zcashd only includes `expiryheight` in RPC responses for Overwinter+
        transactions (when tx.fOverwintered is true). Pre-Overwinter V1/V2
        transactions omit the field entirely. The previous commit incorrectly
        always included `expiryheight: 0` for all transactions.

        Now uses `tx.is_overwintered()` to match zcashd:
        - Overwinter+ (V3/V4/V5): include expiryheight (0 = no expiry per ZIP-203)
        - Pre-Overwinter (V1/V2): omit expiryheight

        zcashd ref: https://github.com/zcash/zcash/blob/cfcfcd93b/src/rpc/rawtransaction.cpp#L224-L226

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * fix: address review feedback from oxarbitrage

        - Use release tag v6.11.0 instead of commit hash in zcashd references
        - Add zcashd reference comments for .to_asm(true) and .to_asm(false) calls
        - Remove duplicate zcashd link from implementation comment
        - Move test comments to above the expiry_height fields they describe

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * make doc description a link

        ---------

        Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    commit cc92ca3bec47a4c757eab72899acb3e5e6034f58
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Fri Feb 13 10:56:50 2026 +0000

        docs: Add AI contribution policy and agent guidance files (#10318)

        Add AGENTS.md, CLAUDE.md, copilot-instructions.md, update
        CONTRIBUTING.md and PR template to establish clear policies
        for AI-assisted contributions and external PR management.

    commit 3b9b833ca7b32b3d95a1fec9564c3c3189705093
    Author: Marek <m@rek.onl>
    Date:   Thu Feb 12 17:34:55 2026 +0100

        add: Support pre-Canopy block subsidies (#10191)

        * Refactor subsidy constants into dedicated modules

        * Use qualified names instead of name suffixes

        * Restrict subsidy constants modules to crate visibility

        * Add Mainnet founder address constants to subsidy parameters

        * Add Testnet founder address constants to subsidy parameters

        * Add From implementation for Height to u64 conversion

        * Add full support for calculating block subsidies

        * Add full support for subsidies in getblocksubsidy RPC

        * Add is_zero method to Amount type

        * Update funding stream calculation for zero subsidy blocks

        * Add From implementation for u32 conversion from block Height

        * Refactor subsidy module

        * Add From implementation for amount::Error to BlockError

        * Add founder address list getter to Network implementation

        * Update SubsidyError variants and rename SumOverflow to Overflow

        Added new SubsidyError variants FoundersRewardNotFound and Underflow.
        Renamed SumOverflow to Overflow and updated related error mappings.
        Updated CHANGELOG to reflect these changes.

        * Rename num_halvings function and references to halving

        * Add founders_reward function for initial block subsidy distribution

        * Add founders_reward_address function to subsidy module

        * Support checking pre-Canopy block rewards

        * Apply suggestions from code review

        ---------

        Co-authored-by: arya2 <aryasolhi@gmail.com>

    commit 86409ab08aa85763098009d5d37f7a8f31caf979
    Author: VolodymyrBg <aqdrgg19@gmail.com>
    Date:   Wed Feb 11 22:56:08 2026 +0200

        Fix/peerset banned cancel handles (#10258)

        * fix: clean up banned peers in PeerSet queued state

        * add test

        * add test for cancel handle

        ---------

        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    commit c8b9bbabb885f89018687e2cb8b5a98b8d3de707
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Wed Feb 11 20:20:43 2026 +0000

        fix(tests): wait for process termination and use read-only state init (#10263)

        * fix(state): wait for RocksDB background jobs before releasing database lock

        Add `wait_for_compact()` to the database shutdown sequence to ensure all
        background compaction and flush jobs complete before the database is dropped.
        This prevents "Database likely already open" panics when another process
        tries to open the same database immediately after this one closes.

        The issue was causing intermittent CI failures in `rpc_submit_block` and
        `lwd_rpc_send_tx` integration tests where a second zebrad process would
        try to open the database before the first one had fully released the lock.

        * fix(tests): wait for process termination after kill() before reopening database

        Replace arbitrary sleep delays with explicit wait_with_output() calls after
        kill() to ensure zebrad processes have fully terminated before attempting
        to reopen the database. This prevents "Database likely already open" errors
        that occurred when the 3-second sleep wasn't enough time for the OS to release
        file locks.

        The kill() function only sends SIGKILL but doesn't wait for the process to
        terminate. Without waiting, the database lock might not be released yet when
        the test tries to open a new database instance.

        * fix(tests): use init_read_only to avoid orphaned metrics task holding database lock

        The StateService::new() function spawns an infinite metrics export task
        that holds a database clone forever. When load_tip_height_from_state_directory()
        used zebra_state::init(), this task would keep the database lock even after
        the function returned, causing "Database likely already open" panics when
        zebrad #2 tried to open the same database.

        Changed load_tip_height_from_state_directory() to use init_read_only()
        instead of init(). The init_read_only() function creates a minimal read-only
        state without spawning background tasks, so the database is properly released
        when the function returns.

        * fix(tests): address PR review feedback for database lock fixes

        Changes based on PR review:
        - Rename `load_tip_height_from_state_directory` to `load_finalized_tip_height_from_state_directory`
          to accurately reflect that it returns the finalized tip (which may be behind best tip)
        - Improve error message for spawn_blocking JoinError to cover panic/cancellation cases
        - Propagate errors from `wait_with_output()` instead of ignoring them - ignoring defeats
          the purpose of the fix since we wouldn't actually wait if it fails
        - Keep `#![allow(unused_imports)]` in disk_db/tests.rs with explanatory comment - this module
          is included via `proptest-impl` feature where imports appear unused (test functions are
          only compiled in test mode)

        * revert(state): remove wait_for_compact() from shutdown sequence

        The CI failures were caused by not waiting for the zebrad process to
        terminate, not by RocksDB's internal background work. The test fixes
        (wait_with_output instead of sleep) address the actual root cause.

        Removing wait_for_compact() because:
        - It can block indefinitely during shutdown
        - The OS could halt the thread anyway, making it unreliable
        - The new reopen test already passes on main without it
        - The WAL already ensures recoverability of in-flight writes

        * fix(tests): keep sleep after wait_with_output as safety margin

        Add back a short sleep after wait_with_output() calls. As noted in
        review, wait() returning Ok doesn't guarantee the OS has fully
        released all resources (file locks, etc.) in every edge case.

    commit 887d4d4952860060484b7f8ea20bab8e69c43fb5
    Author: Zaki Manian <zaki@iqlusion.io>
    Date:   Wed Feb 11 10:59:15 2026 -0800

        fix: clarify TransparentInputNotFound error message (#10302)

        * fix: clarify TransparentInputNotFound error message (#10214)

        The previous message "could not find a mempool transaction input UTXO
        in the best chain" was misleading in two ways:

        - "mempool transaction" implied the transaction was already in the
          mempool, when in fact it is being submitted to the mempool
        - "in the best chain" was incomplete, since the lookup also checks
          unconfirmed transactions in the mempool (zero-conf spending)

        The new message "could not find transparent input UTXO in the chain or
        mempool" accurately describes the lookup scope.

        Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

        * Update zebra-consensus/src/error.rs

        ---------

        Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    commit 3a832540d54d133a85a2e719279a5eb6a6b2c83d
    Author: syszery <66296529+syszery@users.noreply.github.com>
    Date:   Wed Feb 11 17:42:46 2026 +0100

        refactor(zebra-chain): use `strum::EnumIter` instead of `NETWORK_UPGRADES_IN_ORDER` (#10096)

        * refactor(zebra-chain): use strum EnumIter instead of NETWORK_UPGRADES_IN_ORDER

        * refactor(zebra-chain): update changelog and move tests

        * Update zebra-chain/CHANGELOG.md

        Co-authored-by: Marek <m@rek.onl>

        * Update zebra-chain/CHANGELOG.md

        Co-authored-by: Marek <m@rek.onl>

        * chore: update Cargo.lock

        * add note about order to `NetworkUpgrade` enum

        ---------

        Co-authored-by: Marek <m@rek.onl>
        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    commit 5d274ad2c6c5839d93b078738e540513209a7463
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Wed Feb 11 08:56:46 2026 -0300

        feat(delete): Remove OpenAPI spec and functionality (#10298)

        * remove openapi

        * changelog

        * Apply suggestion from @gustavovalverde

        Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>

        * Apply suggestion from @oxarbitrage

        ---------

        Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>

    commit 5c31c4c2d14cb0af629d5071377fb1cc9559230f
    Author: Pili Guerra <1311133+mpguerra@users.noreply.github.com>
    Date:   Wed Feb 11 12:56:35 2026 +0100

        docs: Fix package installation command for Redis (#10299)

        Minor typo fix

    commit e0a4d96d8a76c3d08304a7b9084218c71117caa2
    Author: Conrado <conrado@zfnd.org>
    Date:   Wed Feb 11 06:15:02 2026 -0300

        ci: make test-docker more robust by adjusting grep pattern (#10291)

    commit 70f8373faa3146f6e305516223522e6aa29dc350
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Mon Feb 9 11:29:28 2026 -0300

        feat(rpc): Implement `gettxout` RPC method (#10235)

        * initial approach

        * apply spent filter, do fixes

        * code improvments

        * fix some differences with zcashd

        * fix mempool path

        * add spend check in mempool, improve script type display

        * fix test

        * remove closure

        * fix unreachable message

        * fmt

        * Suggestions for "feat(rpc): Implement gettxout RPC method #10235" (#10237)

        * - Removes boxed response
        - Condenses two mempool requests into one
        - Adds a TODO about ensuring the returned tip hash is valid in all responses

        * remove mempool test, fix minor doc failures

        ---------

        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

        * add network argument to method

        * remove unnecessary wrapper

        * fix some comments

        * change default mempool

        * add changelog entries

        ---------

        Co-authored-by: Arya <aryasolhi@gmail.com>

    commit 16c40c152602ad9d76c98512bb71b03c630e057d
    Author: Marek <m@rek.onl>
    Date:   Mon Feb 9 13:31:14 2026 +0100

        add(chain): Add founders reward addresses (#10188)

        * Refactor subsidy constants into dedicated modules

        * Use qualified names instead of name suffixes

        * Restrict subsidy constants modules to crate visibility

        * Add Mainnet founder address constants to subsidy parameters

        * Add Testnet founder address constants to subsidy parameters

        ---------

        Co-authored-by: Arya <aryasolhi@gmail.com>

    commit 7d8f3d63834b46237a478aefbe4da2e1264f3508
    Author: Conrado <conrado@zfnd.org>
    Date:   Fri Feb 6 19:25:58 2026 -0300

        set MSRV to 1.85 and actually test it in CI (#10275)

        * set MSRV to 1.85 and actually test it in CI

        * revert the MSRV build to do each crate, skip zebrad

    commit b4f9edab09ffc990b18b7edbc0e953e4d80cefce
    Author: Marek <mail@marek.onl>
    Date:   Fri Feb 6 19:23:26 2026 +0100

        chore: Release v4.1.0 (#10281)

        * Update changelog with Zebra 4.1.0 release notes and contributor list

        * hotfix: do major bumps for every crate that depends on zebra-chain (#10269)

        * do major bumps for every crate that depends on zebra-chain

        * Update .github/PULL_REQUEST_TEMPLATE/hotfix-release-checklist.md

        Co-authored-by: Marek <mail@marek.onl>

        * Apply suggestions from code review

        Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>

        ---------

        Co-authored-by: Marek <mail@marek.onl>
        Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>

        * Update crate versions

        * Update estimated release height to 3231000

        * Apply suggestions from code review

        Co-authored-by: Conrado <conrado@zfnd.org>

        * Remove subsidy constants module entry from changelog

        ---------

        Co-authored-by: Conrado <conrado@zfnd.org>
        Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>

    commit 22382722d900222c5315809b0ae172557bccad5d
    Author: Marek <mail@marek.onl>
    Date:   Thu Feb 5 12:24:42 2026 +0100

        chore: Update checkpoints (#10278)

        * Update Mainnet checkpoints up to height 3228806

        * Add new Testnet checkpoints up to block height 3824000

    commit 43ad654a29298e5ce8aab2a6ee61db46f7cd9abc
    Author: GarmashAlex <garmasholeksii@gmail.com>
    Date:   Thu Feb 5 14:24:35 2026 +0300

        perf: cache restorable db versions during old db cleanup (#10245)

    commit ad6274cd608a724f56d2159451609cf65b6de16f
    Author: Marek <mail@marek.onl>
    Date:   Thu Feb 5 12:24:29 2026 +0100

        chore: Update `Cargo.lock` (#10276)

        Update Cargo.lock with latest dependency versions

    commit 3598023b0a35819655c13d3867a9ef4d9ae72e1f
    Author: Marek <mail@marek.onl>
    Date:   Thu Feb 5 00:16:34 2026 +0100

        Bump `vergen-git2` to v9 (#10272)

        Update vergen-git2 dependency to version 9 in Cargo.toml

    commit 1886129b6949fb9a5a77eaecbd17f3338f82d1a2
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Wed Feb 4 14:38:28 2026 +0000

        fix(docker): replace gosu with setpriv for privilege dropping (#10270)

        * fix(docker): replace gosu with setpriv for privilege dropping

        The tianon/gosu:trixie image recently lost arm64 support (2026-02-04),
        breaking our multi-arch Docker builds.

        Replace gosu with setpriv, which:
        - Is part of util-linux, already included in debian:trixie-slim
        - Requires no external Docker image dependency
        - Provides the same privilege dropping functionality
        - Has native multi-arch support

        Add explicit privilege drop test to CI that verifies the entrypoint
        correctly drops from root to uid=10001(zebra).

        * fix(ci): escape parentheses in grep pattern for privilege drop test

        * docs: add ADR-0004 for setpriv, mark ADR-0002 as superseded

    commit 18178edd00c128f906ccce9e801c025eb0b15373
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Tue Feb 3 18:21:58 2026 +0000

        fix(ci): remove unsupported `continue-on-error` from reusable workflow calls (#10264)

        * fix(ci): move continue-on-error inside reusable workflow for testnet jobs

        `continue-on-error` is not supported at the caller job level for
        reusable workflows. Move it inside the reusable workflow via a new
        `allow_failure` input parameter.

        This was introduced in #10251 and caused workflow parsing errors.

        * fix(ci): truncate branch name and make disk creation idempotent

        - Add slug-maxlength: 23 to github-slug-action to keep instance names under 63 chars
        - Restore original disk naming (test_id-sha) without branch for shared data disks
        - Make disk creation idempotent: reuse existing disk if present from failed runs

        The data disk architecture is designed to share disks across branches for the
        same commit SHA (same code = same state). Instance names include branch for
        parallel execution across branches.

    commit 87eca87f980122f1cdd05d1c78e9706b2ef2581d
    Author: Marek <mail@marek.onl>
    Date:   Tue Feb 3 14:54:20 2026 +0100

        change(chain): Split subsidy constants into submodules (#10185)

        * Refactor subsidy constants into dedicated modules

        * Use qualified names instead of name suffixes

        * Restrict subsidy constants modules to crate visibility

        ---------

        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    commit c52c65d81304a6d3e281a9abe3991114a566d52d
    Author: syszery <66296529+syszery@users.noreply.github.com>
    Date:   Tue Feb 3 14:54:14 2026 +0100

        feature(zebra-chain): add new `Bounded` vec type and apply it in AdjustDifficulty (#10056)

        * feature: add new bounded vec type and apply in AdjustDifficulty

        * feat: Bounded now enforces a minimum length and improved documentation

        * refactor: implement AtLeastOne type as a specialized version of Bounded

        * refactor(zebra-chain): refactor AtLeastOne to BoundedVec type alias

    commit 9ad7d3cf96edbce074d0d9668234d810dfc0cfe1
    Author: syszery <66296529+syszery@users.noreply.github.com>
    Date:   Tue Feb 3 05:13:07 2026 +0100

        refactor(state): improve error propagation for CommitCheckpointVerifiedBlock (#9979)

        * refactor(state): improve error propagation for CommitCheckpointVerifiedError

        * Update zebra-state/src/error.rs

        implements review feedback

        Co-authored-by: Arya <aryasolhi@gmail.com>

        * refactor(state): align checkpoint commit error handling with semantic commit flow

        * - Condenses error types and variants
        - Updates `KnownBlock` request handling to check for block hashes in the state's sent hashes, fixing a bug where it's possible for part of a chain to be duplicated in the non-finalized state if a block is sent to the state via a `CommitSemanticallyVerifiedBlock` request while it's in the block write channel or before the non-finalized state channel has been updated

        * Updates `write_block()` to return a `CommitCheckpointVerifiedBlock` error and removes the `CloneError` variant

        * Panic if Zebra fails to write a block to rocksdb

        * fix: clippy lints and remove forgotten unwrap after error refactor

        * fix Request docs and Duplicate error message

        * fixes fmt whitespace

        * sync: consolidate duplicate/commit checks in should_restart_sync

        * should_restart_sync: make duplicate/commit checks more defensive

        * should_restart_sync: revert previous changes and propagate CommitBlockError

        * sync: clean up should_restart_sync and add unit test for CommitBlockError::Duplicate

        * refactor(zebra-state): box ValidateContextError and eliminate redundant clone

        ---------

        Co-authored-by: Arya <aryasolhi@gmail.com>

    commit 0a632428e033f99ede85dcac3a157cbf95b044ef
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Mon Feb 2 22:41:42 2026 +0000

        fix(ci): make GCP instance template creation idempotent (#10259)

        * fix(ci): make GCP instance template creation idempotent

        Add a check to skip instance template creation if it already exists.
        GCP instance templates are immutable resources - they cannot be updated
        or deleted while referenced by a MIG. Since the template name includes
        the commit SHA, the same commit produces the same template configuration,
        making it safe to reuse an existing template.

        Without this check, workflow re-runs or concurrent triggers on the same
        commit fail with "already exists" error.

        * style(ci): remove backtick comment from gcloud command

    commit 4caee02f9106cd43727228fbd2b3fa28e63ee8f6
    Author: Marek <mail@marek.onl>
    Date:   Mon Feb 2 15:26:20 2026 +0100

        change(CI): Run scheduled full sync on Testnet (#10251)

        Make testnet integration test jobs continue on error in CI workflow

    commit 6138a87bd87b5f4fde6478df3f0a930f7c3d5ac9
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Mon Feb 2 11:26:17 2026 -0300

        fix(sentry): Conditional init  (#10256)

        conditional sentry

    commit 85a7b2f95666df88a22e1be08eadcf1b6c8544bd
    Author: ZolyDevMaya <38867566+zlyzol@users.noreply.github.com>
    Date:   Sat Jan 31 12:43:56 2026 +0100

        mempool: add standardness checks and configurable OP_RETURN policy (#10224)

        * mempool: add standardness checks and OP_RETURN policy knobs

        * mempool: remove datacarrier standardness config switch

        * mempool: standardize proptest tx inputs

        * mempool: bound crawler error proptest generation

        * test: add v3.1.1 generated config

        * mepool: make max_datacarrier_bytes optional with default fallback

        * mempool: remove mempool specification link from readme

        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

        * fmt, docs

        * update config

        ---------

        Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    commit 295a3068bb9e9b70d923f0c9b59947651d8a18fa
    Author: Alfredo Garcia <oxarbitrage@gmail.com>
    Date:   Fri Jan 30 16:35:25 2026 -0300

        tests(qa): Add zaino to the qa rpc framework (#10199)

        add zaino to the qa rpc framework

    commit a58106cb031f9845a8d08e9fc6e309da750cd3bc
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Fri Jan 30 17:52:33 2026 +0000

        fix(ci): add issues write permission to release-binaries workflow (#10243)

        fix(ci): add issues write permission to release-binaries failure-issue job

        The failure-issue job in release-binaries.yml uses jayqi/failed-build-issue-action
        to automatically create or update GitHub issues when the release workflow fails.
        This action requires write access to issues, but the job was missing the necessary
        permission, causing "Resource not accessible by integration" errors.

        Adds `permissions: issues: write` to the failure-issue job to allow it to
        create and comment on issues as intended.

    commit 7db5a88112795ec9fe1e1ad9bff4c6dc9ae8c0d5
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Fri Jan 30 17:49:41 2026 +0000

        fix(ci): enable external network access for GCP deployed nodes (#10242)

        Add ZEBRA_NETWORK__LISTEN_ADDR to GCP deployment workflow so nodes
        listen on all interfaces for P2P connections. This allows DNS seeders
        to discover and connect to these nodes.

        Also fixes static IP assignment to use the correct gcloud command
        (instance-configs create) which properly persists IPs across rolling
        updates.

    commit 9b2af18767745c4e7811779978d17275f5832bb6
    Author: Pili Guerra <1311133+mpguerra@users.noreply.github.com>
    Date:   Fri Jan 30 14:38:47 2026 +0100

        docs: Update CONTRIBUTING.md for PR handling (#10249)

        Update CONTRIBUTING.md for PR handling

        Clarified handling of low-effort PRs in contribution guidelines.

    commit a09e55ae0cade0e4d5dde97b61491b94a683844b
    Author: MozirDmitriy <dmitriymozir@gmail.com>
    Date:   Fri Jan 30 10:11:12 2026 +0200

        perf: avoid extra clone in WtxId `TryFrom<&Vec<u8>>` (#10247)

    commit e04845f3e4a0976031f35c6564aa56ea4d722371
    Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Date:   Wed Jan 28 15:06:29 2026 +0000

        build(deps): bump the devops group across 1 directory with 12 updates (#10233)

        * build(deps): bump the devops group across 1 directory with 12 updates

        Bumps the devops group with 12 updates in the / directory:

        | Package | From | To |
        | --- | --- | --- |
        | [actions/checkout](https://github.com/actions/checkout) | `5.0.0` | `6.0.1` |
        | [actions-rust-lang/setup-rust-toolchain](https://github.com/actions-rust-lang/setup-rust-toolchain) | `1.15.1` | `1.15.2` |
        | [taiki-e/install-action](https://github.com/taiki-e/install-action) | `2.62.15` | `2.67.2` |
        | [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5.5.1` | `5.5.2` |
        | [EmbarkStudios/cargo-deny-action](https://github.com/embarkstudios/cargo-deny-action) | `2.0.13` | `2.0.15` |
        | [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) | `6.1.0` | `6.1.1` |
        | [rlespinasse/github-slug-action](https://github.com/rlespinasse/github-slug-action) | `5.2.0` | `5.4.0` |
        | [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3.11.1` | `3.12.0` |
        | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.6.2` | `6.0.0` |
        | [actions/download-artifact](https://github.com/actions/download-artifact) | `5.0.0` | `7.0.0` |
        | [docker/metadata-action](https://github.com/docker/metadata-action) | `5.8.0` | `5.10.0` |
        | [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) | `0.2.0` | `0.4.1` |

        Updates `actions/checkout` from 5.0.0 to 6.0.1
        - [Release notes](https://github.com/actions/checkout/releases)
        - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
        - [Commits](https://github.com/actions/checkout/compare/v5...8e8c483db84b4bee98b60c0593521ed34d9990e8)

        Updates `actions-rust-lang/setup-rust-toolchain` from 1.15.1 to 1.15.2
        - [Release notes](https://github.com/actions-rust-lang/setup-rust-toolchain/releases)
        - [Changelog](https://github.com/actions-rust-lang/setup-rust-toolchain/blob/main/CHANGELOG.md)
        - [Commits](https://github.com/actions-rust-lang/setup-rust-toolchain/compare/02be93da58aa71fb456aa9c43b301149248829d8...1780873c7b576612439a134613cc4cc74ce5538c)

        Updates `taiki-e/install-action` from 2.62.15 to 2.67.2
        - [Release notes](https://github.com/taiki-e/install-action/releases)
        - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
        - [Commits](https://github.com/taiki-e/install-action/compare/d6d752794628f1e1fffa3c4d3c8874e06f043d50...0bc4cd8a3e21db4cb9519857377b0c8c5e150de5)

        Updates `codecov/codecov-action` from 5.5.1 to 5.5.2
        - [Release notes](https://github.com/codecov/codecov-action/releases)
        - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
        - [Commits](https://github.com/codecov/codecov-action/compare/5a1091511ad55cbe89839c7260b706298ca349f7...671740ac38dd9b0130fbe1cec585b89eea48d3de)

        Updates `EmbarkStudios/cargo-deny-action` from 2.0.13 to 2.0.15
        - [Release notes](https://github.com/embarkstudios/cargo-deny-action/releases)
        - [Commits](https://github.com/embarkstudios/cargo-deny-action/compare/f2ba7abc2abebaf185c833c3961145a3c275caad...3fd3802e88374d3fe9159b834c7714ec57d6c979)

        Updates `release-drafter/release-drafter` from 6.1.0 to 6.1.1
        - [Release notes](https://github.com/release-drafter/release-drafter/releases)
        - [Commits](https://github.com/release-drafter/release-drafter/compare/b1476f6e6eb133afa41ed8589daba6dc69b4d3f5...267d2e0268deae5d44f3ba5029dd4d6e85f9d52d)

        Updates `rlespinasse/github-slug-action` from 5.2.0 to 5.4.0
        - [Release notes](https://github.com/rlespinasse/github-slug-action/releases)
        - [Commits](https://github.com/rlespinasse/github-slug-action/compare/c33ff65466c58d57e4d796f88bb1ae0ff26ee453...6f7a8d2348e2a4aa5defafcdaafe5aef3f83bd4b)

        Updates `docker/setup-buildx-action` from 3.11.1 to 3.12.0
        - [Release notes](https://github.com/docker/setup-buildx-action/releases)
        - [Commits](https://github.com/docker/setup-buildx-action/compare/e468171a9de216ec08956ac3ada2f0791b6bd435...8d2750c68a42422c14e847fe6c8ac0403b4cbd6f)

        Updates `actions/upload-artifact` from 4.6.2 to 6.0.0
        - [Release notes](https://github.com/actions/upload-artifact/releases)
        - [Commits](https://github.com/actions/upload-artifact/compare/v4.6.2...b7c566a772e6b6bfb58ed0dc250532a479d7789f)

        Updates `actions/download-artifact` from 5.0.0 to 7.0.0
        - [Release notes](https://github.com/actions/download-artifact/releases)
        - [Commits](https://github.com/actions/download-artifact/compare/634f93cb2916e3fdff6788551b99b062d0335ce0...37930b1c2abaa49bbe596cd826c3c89aef350131)

        Updates `docker/metadata-action` from 5.8.0 to 5.10.0
        - [Release notes](https://github.com/docker/metadata-action/releases)
        - [Commits](https://github.com/docker/metadata-action/compare/c1e51972afc2121e065aed6d45c65596fe445f3f...c299e40c65443455700f0fdfc63efafe5b349051)

        Updates `zizmorcore/zizmor-action` from 0.2.0 to 0.4.1
        - [Release notes](https://github.com/zizmorcore/zizmor-action/releases)
        - [Commits](https://github.com/zizmorcore/zizmor-action/compare/e673c3917a1aef3c65c972347ed84ccd013ecda4...135698455da5c3b3e55f73f4419e481ab68cdd95)

        ---
        updated-dependencies:
        - dependency-name: actions/checkout
          dependency-version: 6.0.1
          dependency-type: direct:production
          update-type: version-update:semver-major
          dependency-group: devops
        - dependency-name: actions-rust-lang/setup-rust-toolchain
          dependency-version: 1.15.2
          dependency-type: direct:production
          update-type: version-update:semver-patch
          dependency-group: devops
        - dependency-name: taiki-e/install-action
          dependency-version: 2.67.2
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: codecov/codecov-action
          dependency-version: 5.5.2
          dependency-type: direct:production
          update-type: version-update:semver-patch
          dependency-group: devops
        - dependency-name: EmbarkStudios/cargo-deny-action
          dependency-version: 2.0.15
          dependency-type: direct:production
          update-type: version-update:semver-patch
          dependency-group: devops
        - dependency-name: release-drafter/release-drafter
          dependency-version: 6.1.1
          dependency-type: direct:production
          update-type: version-update:semver-patch
          dependency-group: devops
        - dependency-name: rlespinasse/github-slug-action
          dependency-version: 5.4.0
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: docker/setup-buildx-action
          dependency-version: 3.12.0
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: actions/upload-artifact
          dependency-version: 6.0.0
          dependency-type: direct:production
          update-type: version-update:semver-major
          dependency-group: devops
        - dependency-name: actions/download-artifact
          dependency-version: 7.0.0
          dependency-type: direct:production
          update-type: version-update:semver-major
          dependency-group: devops
        - dependency-name: docker/metadata-action
          dependency-version: 5.10.0
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        - dependency-name: zizmorcore/zizmor-action
          dependency-version: 0.4.1
          dependency-type: direct:production
          update-type: version-update:semver-minor
          dependency-group: devops
        ...

        Signed-off-by: dependabot[bot] <support@github.com>

        * fix: correct actions/checkout version comments from v4.2.2 to v6.0.1

        ---------

        Signed-off-by: dependabot[bot] <support@github.com>
        Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
        Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>

    commit 3854bc405f7efafdcb5866451cc21520fda4bdb2
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Wed Jan 28 13:38:39 2026 +0000

        feat(metrics): add RocksDB I/O latency and sync distance metrics (#10181)

        * feat(metrics): add RocksDB I/O latency and sync distance metrics

        Add high-priority observability metrics identified from Ethereum node
        dashboard analysis:

        Rust metrics:
        - Batch commit latency histogram for RocksDB write operations
        - Compaction metrics: pending bytes, running compactions, files per level
        - Block cache usage tracking
        - Sync distance gauges showing blocks behind estimated network tip

        Dashboard improvements:
        - New Zebra Overview dashboard with health status at a glance
        - $job template variable for fleet monitoring across multiple nodes
        - Sync Distance panel with semantic color thresholds
        - System Resources row (CPU, memory, file descriptors)
        - RocksDB dashboard: I/O Performance and Compaction sections

        Color semantics fixes:
        - Sync Status: SYNCING=yellow (in progress), SYNCED=green (complete)
        - Sync Distance: 0-2 blocks="SYNCED", then yellow/orange/red thresholds
        - Compaction Efficiency: inverted so high efficiency=green, low=red
        - Database size: neutral blue (size isn't inherently good/bad)
        - Added "NO DATA" state to all health panels

        * docs: consolidate changelog entries per PR and fix formatting

        - Consolidate multiple changelog entries into one per PR as requested
        - Fix cargo fmt in sync/progress.rs

    commit 9d4480c9d7f188a7a5e8e2717fc52d687af10d7f
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Wed Jan 28 11:23:17 2026 +0000

        feat(metrics): add performance histograms for bottleneck identification (#10179)

        * feat(metrics): add value pool, RPC, and peer health metrics

        Add Prometheus metrics for operational visibility:

        - Value pool metrics: transparent, sprout, sapling, orchard, deferred
          balances and total chain supply (zebra-state)
        - RPC metrics middleware: request counts, latencies, active requests,
          and errors per method (zebra-rpc)
        - Peer handshake metrics: duration histograms and failure tracking
          by reason (zebra-network)

        Also includes:
        - Grafana dashboards for value pools and RPC monitoring
        - Prometheus alert rules for critical conditions
        - Updated CHANGELOG

        Closes #10162, closes #10163, closes #10164, closes #10167

        * chore: remove wrongly commited files to `.gitignore`

        * chore: cargo fmt

        * chore: clippy fix

        * docs: fix changelog entries for PR #10175

        - Remove #10174 entries from [Unreleased] (already in 4.0.0)
        - Remove redundant "Added" prefix from entries
        - Link to PR #10175 instead of issues
        - Add rpc_metrics module entry to zebra-rpc changelog

        * Update CHANGELOG.md

        Co-authored-by: Marek <mail@marek.onl>

        * Update zebra-rpc/CHANGELOG.md

        Co-authored-by: Marek <mail@marek.onl>

        * feat(metrics): add performance histograms for bottleneck identification

        Add duration histograms to help identify performance bottlenecks:

        Sync pipeline metrics:
        - sync.stage.duration_seconds{stage} for obtain_tips/extend_tips
        - sync.block.download.duration_seconds{result}
        - sync.block.verify.duration_seconds{result}

        Consensus batch verification metrics:
        - zebra.consensus.batch.duration_seconds{verifier,result}
        - Covers ed25519, redjubjub, redpallas, halo2, groth16_sapling

        RocksDB database metrics (exported every 30s):
        - zebra.state.rocksdb.total_disk_size_bytes
        - zebra.state.rocksdb.live_data_size_bytes
        - zebra.state.rocksdb.total_memory_size_bytes
        - zebra.state.rocksdb.cf_disk_size_bytes{cf}
        - zebra.state.rocksdb.cf_memory_size_bytes{cf}

        Dashboard updates:
        - Updated syncer.json with sync latency panels
        - Updated transaction-verification.json with batch duration panels
        - Added rocksdb.json for database monitoring

        Closes #10165

        * Apply suggestions from code review

        Co-authored-by: Marek <mail@marek.onl>

        ---------

        Co-authored-by: Marek <mail@marek.onl>

    commit 1d13b98dcaab943e2b3df5b1c843f80ef49e87b6
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Tue Jan 27 12:58:14 2026 +0000

        feat(metrics): add value pool, RPC, and peer health metrics (#10175)

        * feat(metrics): add value pool, RPC, and peer health metrics

        Add Prometheus metrics for operational visibility:

        - Value pool metrics: transparent, sprout, sapling, orchard, deferred
          balances and total chain supply (zebra-state)
        - RPC metrics middleware: request counts, latencies, active requests,
          and errors per method (zebra-rpc)
        - Peer handshake metrics: duration histograms and failure tracking
          by reason (zebra-network)

        Also includes:
        - Grafana dashboards for value pools and RPC monitoring
        - Prometheus alert rules for critical conditions
        - Updated CHANGELOG

        Closes #10162, closes #10163, closes #10164, closes #10167

        * chore: remove wrongly commited files to `.gitignore`

        * chore: cargo fmt

        * chore: clippy fix

        * docs: fix changelog entries for PR #10175

        - Remove #10174 entries from [Unreleased] (already in 4.0.0)
        - Remove redundant "Added" prefix from entries
        - Link to PR #10175 instead of issues
        - Add rpc_metrics module entry to zebra-rpc changelog

        * Update CHANGELOG.md

        Co-authored-by: Marek <mail@marek.onl>

        * Update zebra-rpc/CHANGELOG.md

        Co-authored-by: Marek <mail@marek.onl>

        ---------

        Co-authored-by: Marek <mail@marek.onl>

    commit 8b670c2fe34323b83385bf12380fab244669cad3
    Author: Bashmunta <georgebashmunta@gmail.com>
    Date:   Tue Jan 27 04:05:23 2026 +0200

        fix: report connection task exits as ConnectionTaskExited (#10231)

    commit 650d0f25cfcf54200e1ce2d5c8e945025a68951f
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Mon Jan 26 15:15:11 2026 +0000

        fix(ci): Prevent race condition in GCP static IP assignment (#10159)

        Use --no-address in instance template so instances start without
        ephemeral IPs. This prevents the MIG controller from racing to restore
        ephemeral IPs when assigning static IPs.

        Closes #10158

    commit 067e0b4e8253560d022227afab0acda820096429
    Author: Conrado <conrado@zfnd.org>
    Date:   Wed Jan 21 15:04:03 2026 -0300

        bump zebra-chain and dependent crates (#10234)

    commit a2e43b7fa3521982473a8f6ddf206cbc17f5f33b
    Author: Conrado <conrado@zfnd.org>
    Date:   Wed Jan 21 13:33:14 2026 -0300

        bump versions and update changelogs for 4.0.0 release (#10230)

        * bump versions and update changelogs for 4.0.0 release

        * mention how to enable OpenTelemetry support

        * Apply suggestions from code review

        Co-authored-by: Marek <mail@marek.onl>

        * bump release date to 21st

        ---------

        Co-authored-by: Marek <mail@marek.onl>

    commit 44d743b785769fc086aac481e6fa83d07b3096e8
    Author: David Campbell <alchemydc@users.noreply.github.com>
    Date:   Tue Jan 20 13:08:14 2026 -0700

        Update DNS seeders to add new Shielded Labs mainnet seeder (#10228)

        * chore: add new Shielded Labs DNS mainnet seeder.  remove unreachable/flaky z.cash seeders until ECC/bootstrap governance crisis is resolved.

        see [forum post](https://forum.zcashcommunity.com/t/expanding-zcash-network-infrastructure-new-dns-seeders-launched-in-the-united-states-and-europe/54256) for context

        * chore: re-add (now-alive) ECC mainnet seeder.  list mainnet seeders in alphabetical order.

        * cargo fmt

        * chore: add (now alive again) ECC testnet seeder

        * add new config file for tests

        ---------

        Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
        Co-authored-by: Conrado Gouvea <conrado@zfnd.org>

    commit 6c1c79ee0dda5c0429d45c29cc86906ec0576906
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Tue Jan 20 14:53:54 2026 +0000

        fix(clippy): address clippy beta lints (#10229)

        - Box large error tuple in mempool downloads to fix result_large_err
        - Use saturating_sub instead of checked_sub().unwrap_or_default()

    commit 47e5756758740c31feeecd23211770263440c267
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Mon Jan 19 20:00:15 2026 +0000

        feat(tracing): add OpenTelemetry distributed tracing support (#10174)

        * feat(tracing): add OpenTelemetry distributed tracing support

        Adds feature-gated OpenTelemetry tracing with OTLP HTTP exporter:

        - New `opentelemetry` feature flag in zebrad
        - Configuration via environment variables:
          - ZEBRA_TRACING__OPENTELEMETRY_ENDPOINT
          - ZEBRA_TRACING__OPENTELEMETRY_SERVICE_NAME
          - ZEBRA_TRACING__OPENTELEMETRY_SAMPLE_PERCENT
        - RPC tracing middleware with SPAN_KIND_SERVER spans for Jaeger SPM
        - Docker Compose observability stack (Jaeger, Prometheus, Grafana, AlertManager)
        - Grafana dashboard for RPC tracing metrics

        Closes #10166
        Closes #10168

        * Apply suggestions from code review

        Co-authored-by: Marek <mail@marek.onl>

        * fix: cargo fmt

        * Apply suggestions from code review

        Co-authored-by: Marek <mail@marek.onl>

        * Apply suggestions from code review

        Co-authored-by: Marek <mail@marek.onl>

        ---------

        Co-authored-by: Marek <mail@marek.onl>

    commit d6c9d334de90542124f1bde93c2df70200788838
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Mon Jan 19 11:36:53 2026 +0000

        fix(ci): update Docker test grep patterns for current log format (#10225)

        The previous patterns expected network name and sync progress on the
        same log line, but they are now on separate lines. Use seed peer
        resolution log which shows both network (mainnet/testnet seeder) and
        confirms the node is starting.

    commit b75e0e0d6a97505d5378ec9d2299da3a346f4a37
    Author: Emerson <emerson@fastmail.com>
    Date:   Fri Jan 16 14:36:51 2026 -0800

        Parse Zebra's config file as TOML (#10222)

        Config file must be TOML (Resolves #10221)

    commit 39e4b8cccb3a138ac9d19cf514badb005ed59f87
    Author: Gustavo Valverde <g.valverde02@gmail.com>
    Date:   Fri Jan 16 17:38:00 2026 +0000

        fix(ci): resolve Docker build failures and cargo deny duplicates (#10219)

        Fix CI issues affecting the main branch:

        1. Docker test builds failing due to disk space (since Nov 13, 2025)
           - Use configurable runner via DOCKER_BUILD_RUNNER_AMD64 variable
           - ZcashFoundation uses larger runner; forks fallback to ubuntu-latest

        2. Cargo deny duplicate crate errors (since Jan 15, 2026)
           - Add skip-tree entries for hashbrown 0.15.x and itertools 0.13.x

    commit 7c9bed3e05cfb8344640db4b678330eb8bed6400
    Author: Conrado <conrado@zfnd.org>
    Date:   Thu Jan 15 20:20:27 2026 -0300

        chore(chain): update checkpoints (#102…
Metalcape added a commit to Metalcape/zebra that referenced this pull request Mar 8, 2026
commit 79505cd5945b9aa98a9e27c703ef4b7dff927094
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Thu Mar 5 11:16:43 2026 -0300

    fix(docs): Markdown lint in state changelog (#10367)

    fix markdown lint in state changelog

commit cee966b2d71fed8d14efb520ac01f3a2390b0d45
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Thu Mar 5 06:46:46 2026 -0300

    remove(tests): Remove the QA test framework (#10363)

    * remove `qa` folder

    * update the changelogs

    * update pull request number

commit 09be46ab55b626f82769bc11e8e426c03997c692
Author: Zaki Manian <zaki@iqlusion.io>
Date:   Wed Mar 4 17:03:50 2026 -0800

    feat: add remaining non-standard mempool transaction filters (#10314)

    * feat: add remaining non-standard mempool transaction filters

    Implement the remaining zcashd mempool standardness checks from
    AcceptToMemoryPool / IsStandardTx / AreInputsStandard (issue #10143).

    Per-transaction sigops limit (MAX_STANDARD_TX_SIGOPS = 4000):
    - The sigops count now includes both legacy and P2SH sigops for mempool
      transactions, matching zcashd's GetLegacySigOpCount + GetP2SHSigOpCount.
    - Added p2sh_sigop_count() to zebra-script for computing P2SH sigops.

    AreInputsStandard (full zcashd parity):
    - Solver classification: spent output scriptPubKeys must be a known
      standard type (P2PKH, P2PK, P2SH, multisig). Non-standard and
      OP_RETURN spent outputs are rejected.
    - Stack-depth check: scriptSig must have exactly the expected number of
      push operations per ScriptSigArgsExpected. Extra data is rejected.
    - P2SH redeemed script handling: standard redeemed scripts have their
      inner expected args validated; non-standard redeemed scripts are
      accepted if sigops <= MAX_P2SH_SIGOPS (15).
    - Added debug_assert_eq checks on input/output lengths to catch silent
      zip() truncation.

    References:
    - https://github.com/zcash/zcash/blob/v6.10.0/src/policy/policy.cpp#L137
    - https://github.com/zcash/zcash/blob/v6.10.0/src/policy/policy.h
    - https://github.com/zcash/zcash/blob/v6.10.0/src/main.cpp#L1819

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * fix: are_inputs_standard should continue checking remaining inputs

    When a P2SH input has a non-standard redeemed script with sigops <=
    MAX_P2SH_SIGOPS, the function was returning true immediately without
    validating remaining inputs. Now continues to the next input instead.

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * fix: address CI failures and review feedback

    - Add missing `inputs_are_standard` field in zebra-rpc test
    - Wrap bare URLs in angle brackets for rustdoc compliance
    - Update zcashd references from v6.10.0 to v6.11.0
    - Fix rustfmt formatting in zebra-script tests

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * fix: address review feedback from #10314

    - Update zcashd reference links from v6.10.0 to v6.11.0 in storage.rs
    - Rename NonStandardP2shSigops to NonStandardInputs (covers more than sigops)
    - Replace debug_assert_eq with assert_eq in zebra-script (zip silently
      truncates in release builds if lengths mismatch)
    - Move MAX_STANDARD_TX_SIGOPS, MAX_STANDARD_SCRIPTSIG_SIZE, and
      MAX_STANDARD_MULTISIG_PUBKEYS from local constants to public in
      zebra-script alongside MAX_P2SH_SIGOPS
    - Improve doc comment on inputs_are_standard field
    - Bump zcash_script from 0.4.2 to 0.4.3

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * refactor: move policy functions from zebra-script to storage.rs

    Address review feedback from #10314:
    - Move are_inputs_standard, p2sh_sigop_count, and helpers from
      zebra-script to storage.rs where they belong alongside existing
      output policy checks
    - Eliminate classify_script/standard_script_kind duplication by
      extracting shared standard_script_kind_from_bytes
    - Replace inputs_are_standard field with spent_outputs on
      VerifiedUnminedTx so storage.rs can compute policy checks directly
    - Rename sigops to legacy_sigop_count to clarify it excludes P2SH
    - Replace assert_eq! panics in policy functions with graceful
      tracing::warn + safe defaults for length mismatches
    - Add unit tests for policy functions in storage tests
    - Update doc comments per reviewer suggestions
    - Add TODO for spent_outputs alignment issue (#10346)

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * refactor: extract policy module, deduplicate checks, reorder validation

    Address review feedback from PR #10314:

    - Move policy constants and functions to storage/policy.rs module,
      keeping reject_if_non_standard_tx in storage.rs
    - Inline standard_script_kind_from_code (1-line function used once)
      and merge standard_script_kind_from_bytes into standard_script_kind
    - Fix doc comments: "zcashd's Solver()" -> "zcash_script solver"
    - Reorder checks: scriptSig size/push-only checks now run before
      are_inputs_standard, so count_script_push_ops is never called
      on non-push-only scripts
    - Deduplicate spent_outputs length mismatch check: done once in
      reject_if_non_standard_tx instead of in both are_inputs_standard
      and p2sh_sigop_count
    - Move unit tests for private helpers into policy module

    ---------

    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

commit a30f71ffd9665657d1e23895feed6f21bdeebb90
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Wed Mar 4 19:33:46 2026 -0300

    fix(consensus): preserve input order in `spent_outputs` for mixed chain/mempool transactions (#10356)

    fix ordering in `spent_outputs()`

commit 0ebaf6dac72e67f898fbd46e6f306cc6b4327494
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Wed Mar 4 21:23:01 2026 +0000

    docs: improve documentation quality and add CI checks (#10204)

    * docs: improve documentation quality and add CI checks

    Add automated documentation quality checks and fix existing issues across
    the codebase documentation.

    Workflow changes:
    - Add `docs-check.yml` workflow with link checking (lychee), spell checking
      (codespell), and markdown linting (markdownlint)
    - Workflow follows project conventions: pinned action SHAs, per-job
      permissions, aggregator job pattern

    Documentation fixes:
    - Fix markdown linting issues (MD040 code block language specifiers,
      MD059 descriptive link text)
    - Fix spelling errors across documentation files
    - Add missing ARCHITECTURE.md for high-level codebase overview
    - Add new developer documentation: onboarding guide, crate architecture
    - Add ecosystem integration guide for users
    - Add architectural decision records (ADRs) for Tower, verification, RocksDB
    - Update CI/CD documentation with workflow diagram

    Configuration:
    - Add `.lychee.toml` for link checker configuration
    - Add `.lycheecache` to `.gitignore`
    - Update `.codespellrc` with domain-specific terminology

    Note: Some URLs are excluded in `.lychee.toml` that require review:
    - zips.z.cash PDF links (404 but linked from official Zcash site)
    - Deprecated doc sites (doc.zebra.zfnd.org, doc-internal.zebra.zfnd.org)
    - zcash/zips master branch links (pending main migration)
    - New zebra.zfnd.org pages (pending book deployment)

    * fix(ci): add markdownlint config and fix alls-green SHA

    - Add .trunk/configs/.markdownlint.yaml to repo (was gitignored)
    - Fix re-actors/alls-green SHA: use commit hash, not tag object hash

    * fix(ci): disable additional markdownlint rules for existing docs

    Disable MD001, MD028, MD036 rules that flag intentional formatting
    patterns in existing RFC and book documentation.

    * fix(docs): update stale URLs and remove RFC implementation notes

    - Fix nginx URL migration (nginxinc -> nginx organization)
    - Fix zcash/zips URLs (master -> main, new /zips/ directory structure)
    - Fix docs.rs URL (config/struct.Config -> config/rpc/struct.Config)
    - Fix internal docs URLs (doc-internal.zebra.zfnd.org -> zebra.zfnd.org/internal)
    - Fix zfnd.org blog URLs (removed /blog/ path segment)
    - Remove Implementation Notes from RFCs (RFCs should be static historical records)
    - Clean up lychee.toml exclusions for now-working URLs
    - Add CHANGELOG.md to exclude_path (contains historical dead links)

    * fix(docs): resolve markdownlint errors in observability docs and CHANGELOGs

    - Add language specifier to fenced code blocks (MD040)
    - Add blank lines around lists (MD032)
    - Add blank lines around fenced code blocks (MD031)
    - Remove multiple consecutive blank lines (MD012)

commit de9a52cbd646364c35b8e1b9db32c9f8af31160d
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Fri Feb 27 15:23:09 2026 +0000

    build(deps): bump the devops group across 1 directory with 8 updates (#10345)

    Bumps the devops group with 8 updates in the / directory:

    | Package | From | To |
    | --- | --- | --- |
    | [actions/checkout](https://github.com/actions/checkout) | `6.0.1` | `6.0.2` |
    | [taiki-e/install-action](https://github.com/taiki-e/install-action) | `2.67.2` | `2.68.10` |
    | [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) | `6.1.1` | `6.2.0` |
    | [rlespinasse/github-slug-action](https://github.com/rlespinasse/github-slug-action) | `5.4.0` | `5.5.0` |
    | [docker/build-push-action](https://github.com/docker/build-push-action) | `6.18.0` | `6.19.2` |
    | [docker/login-action](https://github.com/docker/login-action) | `3.6.0` | `3.7.0` |
    | [shimataro/ssh-key-action](https://github.com/shimataro/ssh-key-action) | `2.7.0` | `2.8.0` |
    | [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) | `0.4.1` | `0.5.0` |

    Updates `actions/checkout` from 6.0.1 to 6.0.2
    - [Release notes](https://github.com/actions/checkout/releases)
    - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)

    Updates `taiki-e/install-action` from 2.67.2 to 2.68.10
    - [Release notes](https://github.com/taiki-e/install-action/releases)
    - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/taiki-e/install-action/compare/0bc4cd8a3e21db4cb9519857377b0c8c5e150de5...305bebabd4457bed9b82541755f034994382465b)

    Updates `release-drafter/release-drafter` from 6.1.1 to 6.2.0
    - [Release notes](https://github.com/release-drafter/release-drafter/releases)
    - [Commits](https://github.com/release-drafter/release-drafter/compare/267d2e0268deae5d44f3ba5029dd4d6e85f9d52d...6db134d15f3909ccc9eefd369f02bd1e9cffdf97)

    Updates `rlespinasse/github-slug-action` from 5.4.0 to 5.5.0
    - [Release notes](https://github.com/rlespinasse/github-slug-action/releases)
    - [Commits](https://github.com/rlespinasse/github-slug-action/compare/6f7a8d2348e2a4aa5defafcdaafe5aef3f83bd4b...9e7def61550737ba68c62d34a32dd31792e3f429)

    Updates `docker/build-push-action` from 6.18.0 to 6.19.2
    - [Release notes](https://github.com/docker/build-push-action/releases)
    - [Commits](https://github.com/docker/build-push-action/compare/263435318d21b8e681c14492fe198d362a7d2c83...10e90e3645eae34f1e60eeb005ba3a3d33f178e8)

    Updates `docker/login-action` from 3.6.0 to 3.7.0
    - [Release notes](https://github.com/docker/login-action/releases)
    - [Commits](https://github.com/docker/login-action/compare/5e57cd118135c172c3672efd75eb46360885c0ef...c94ce9fb468520275223c153574b00df6fe4bcc9)

    Updates `shimataro/ssh-key-action` from 2.7.0 to 2.8.0
    - [Release notes](https://github.com/shimataro/ssh-key-action/releases)
    - [Changelog](https://github.com/shimataro/ssh-key-action/blob/v2/CHANGELOG.md)
    - [Commits](https://github.com/shimataro/ssh-key-action/compare/d4fffb50872869abe2d9a9098a6d9c5aa7d16be4...6b84f2e793b32fa0b03a379cadadec75cc539391)

    Updates `zizmorcore/zizmor-action` from 0.4.1 to 0.5.0
    - [Release notes](https://github.com/zizmorcore/zizmor-action/releases)
    - [Commits](https://github.com/zizmorcore/zizmor-action/compare/135698455da5c3b3e55f73f4419e481ab68cdd95...0dce2577a4760a2749d8cfb7a84b7d5585ebcb7d)

    ---
    updated-dependencies:
    - dependency-name: actions/checkout
      dependency-version: 6.0.2
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: devops
    - dependency-name: taiki-e/install-action
      dependency-version: 2.68.10
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: release-drafter/release-drafter
      dependency-version: 6.2.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: rlespinasse/github-slug-action
      dependency-version: 5.5.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: docker/build-push-action
      dependency-version: 6.19.2
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: docker/login-action
      dependency-version: 3.7.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: shimataro/ssh-key-action
      dependency-version: 2.8.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: zizmorcore/zizmor-action
      dependency-version: 0.5.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    ...

    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

commit 55cd3dfb44d78a924cecd11c54cf67b56338b8f5
Author: Arya <aryasolhi@gmail.com>
Date:   Fri Feb 27 10:23:04 2026 -0500

    fix(network): Fixes bug in `ActiveConnectionCounter` and inaccurate connection count metrics (#10311)

    * Updates ActiveConnectionCounter to track connection slots reserved for connection attempts separately from occupied connection slots representing active established peer connections.

    * Uses a single channel for closed and opened connection notifications

    * addresses suggestions from code review

commit cfc4c71ee4bc40da2c3f0c37b7446bbc70ac53e4
Author: Arya <aryasolhi@gmail.com>
Date:   Fri Feb 27 08:26:24 2026 -0500

    cleanup: Simplify `ReadStateService::call()` method (#10335)

    * Simplifies `ReadStateService::call()` method.

    * Renames method

    * fix lint

    * reduces duplicate code

    * simplifies a couple more match arms

    * Applies suggestions from code review

    * look for tip block size in block info collection in memory or cf in rocksdb before counting the number of bytes in a block's encoding

commit 42baa9c383b3fc612c1deede77d3ef9fb6afe98e
Author: Pili Guerra <pili@zfnd.org>
Date:   Fri Feb 27 14:13:44 2026 +0100

    docs: Update zebra grafana dashboards path in metrics.md (#10330)

    Minor update based on where sample dashboards can be found

commit ef299c28b7de44a5465e5610471f4a1d806ff4b0
Author: syszery <66296529+syszery@users.noreply.github.com>
Date:   Wed Feb 25 14:25:15 2026 +0100

    chore: update CHANGELOGs to reflect changes made in #10056 and #9979 (#10273)

    * chore: update CHANGELOGs to reflect changes made in #10056

    * chore(zebra-state): update the CHANGELOG to reflect changes made in #9979 and #9999

    * Update zebra-state/CHANGELOG.md

    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    * Fix typo in CommitCheckpointVerifiedError entry

    ---------

    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

commit 899df3d565d9fa34d918ace05badee395940b6f7
Author: Arya <aryasolhi@gmail.com>
Date:   Tue Feb 17 14:40:55 2026 -0500

    feat(state): Add a `AnyChainBlock` state request for querying blocks in side chains (#10325)

    * adds an `AnyChainBlock` state request

    * Updates changelog

    * Avoids cloning any extra data in the non-finalized state when handling some state requests that only query the best non-finalized chain (perhaps at the expense of holding read locks slightly longer if the added traversals are worse than the copying, probably insignicant either way but this makes it easier to add fields to NonFinalizedState without worrying)

    Adds a `cloned_mapped_watch_data()` method on `WatchReceiver`.

    * Applies docs corrections, renames methods/fns, and unifies implementations for `block` and `any_chain_block` read fns (latter renamed to `any_block()`)

    * Factors `spawn_blocking()` and `in_scope()` calls into a new trait method.

    * Update zebra-state/src/request.rs

    * Add basic tests for `AnyChainBlock` (#10327)

    generate some tests

    * Update zebra-state/src/request.rs

    ---------

    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

commit b581fba9315d26df5eab0b2f3bc2c37a9cc6b389
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Tue Feb 17 15:27:36 2026 -0300

    release(changelog): Add changelogs for OpenRPC changes (#10326)

    add changelogs for openerpc

commit c45cf2b5c621247c18199795d3834cf6d9d92baf
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Fri Feb 13 21:05:18 2026 -0300

    feat(rpc): Support `rpc.discover` endpoint (#10201)

    * use operpsee

    * use openrpsee crate

    * remove testing and demo schemas

    * fix dependencies

    * add todo link

commit cad81ca50b715ac7e26226ba4a865b99ca70385e
Author: Zaki Manian <zaki@iqlusion.io>
Date:   Fri Feb 13 13:19:33 2026 -0800

    fix: getrawtransaction compat with zcashd (#10307)

    * fix: getrawtransaction compat with zcashd (#10137)

    Two fixes for zcashd compatibility in the getrawtransaction RPC response:

    1. Always include `expiryheight` field (zcashd returns 0 for transactions
       without expiry, Zebra was omitting the field entirely via
       skip_serializing_if)

    2. Decode sighash type flags in scriptSig asm output (change
       `.to_asm(false)` to `.to_asm(true)` so signatures display with
       `[ALL]`, `[NONE]`, etc. suffixes matching zcashd)

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * fix: match zcashd expiryheight behavior for pre-Overwinter transactions

    zcashd only includes `expiryheight` in RPC responses for Overwinter+
    transactions (when tx.fOverwintered is true). Pre-Overwinter V1/V2
    transactions omit the field entirely. The previous commit incorrectly
    always included `expiryheight: 0` for all transactions.

    Now uses `tx.is_overwintered()` to match zcashd:
    - Overwinter+ (V3/V4/V5): include expiryheight (0 = no expiry per ZIP-203)
    - Pre-Overwinter (V1/V2): omit expiryheight

    zcashd ref: https://github.com/zcash/zcash/blob/cfcfcd93b/src/rpc/rawtransaction.cpp#L224-L226

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * fix: address review feedback from oxarbitrage

    - Use release tag v6.11.0 instead of commit hash in zcashd references
    - Add zcashd reference comments for .to_asm(true) and .to_asm(false) calls
    - Remove duplicate zcashd link from implementation comment
    - Move test comments to above the expiry_height fields they describe

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * make doc description a link

    ---------

    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

commit cc92ca3bec47a4c757eab72899acb3e5e6034f58
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Fri Feb 13 10:56:50 2026 +0000

    docs: Add AI contribution policy and agent guidance files (#10318)

    Add AGENTS.md, CLAUDE.md, copilot-instructions.md, update
    CONTRIBUTING.md and PR template to establish clear policies
    for AI-assisted contributions and external PR management.

commit 3b9b833ca7b32b3d95a1fec9564c3c3189705093
Author: Marek <m@rek.onl>
Date:   Thu Feb 12 17:34:55 2026 +0100

    add: Support pre-Canopy block subsidies (#10191)

    * Refactor subsidy constants into dedicated modules

    * Use qualified names instead of name suffixes

    * Restrict subsidy constants modules to crate visibility

    * Add Mainnet founder address constants to subsidy parameters

    * Add Testnet founder address constants to subsidy parameters

    * Add From implementation for Height to u64 conversion

    * Add full support for calculating block subsidies

    * Add full support for subsidies in getblocksubsidy RPC

    * Add is_zero method to Amount type

    * Update funding stream calculation for zero subsidy blocks

    * Add From implementation for u32 conversion from block Height

    * Refactor subsidy module

    * Add From implementation for amount::Error to BlockError

    * Add founder address list getter to Network implementation

    * Update SubsidyError variants and rename SumOverflow to Overflow

    Added new SubsidyError variants FoundersRewardNotFound and Underflow.
    Renamed SumOverflow to Overflow and updated related error mappings.
    Updated CHANGELOG to reflect these changes.

    * Rename num_halvings function and references to halving

    * Add founders_reward function for initial block subsidy distribution

    * Add founders_reward_address function to subsidy module

    * Support checking pre-Canopy block rewards

    * Apply suggestions from code review

    ---------

    Co-authored-by: arya2 <aryasolhi@gmail.com>

commit 86409ab08aa85763098009d5d37f7a8f31caf979
Author: VolodymyrBg <aqdrgg19@gmail.com>
Date:   Wed Feb 11 22:56:08 2026 +0200

    Fix/peerset banned cancel handles (#10258)

    * fix: clean up banned peers in PeerSet queued state

    * add test

    * add test for cancel handle

    ---------

    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

commit c8b9bbabb885f89018687e2cb8b5a98b8d3de707
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Wed Feb 11 20:20:43 2026 +0000

    fix(tests): wait for process termination and use read-only state init (#10263)

    * fix(state): wait for RocksDB background jobs before releasing database lock

    Add `wait_for_compact()` to the database shutdown sequence to ensure all
    background compaction and flush jobs complete before the database is dropped.
    This prevents "Database likely already open" panics when another process
    tries to open the same database immediately after this one closes.

    The issue was causing intermittent CI failures in `rpc_submit_block` and
    `lwd_rpc_send_tx` integration tests where a second zebrad process would
    try to open the database before the first one had fully released the lock.

    * fix(tests): wait for process termination after kill() before reopening database

    Replace arbitrary sleep delays with explicit wait_with_output() calls after
    kill() to ensure zebrad processes have fully terminated before attempting
    to reopen the database. This prevents "Database likely already open" errors
    that occurred when the 3-second sleep wasn't enough time for the OS to release
    file locks.

    The kill() function only sends SIGKILL but doesn't wait for the process to
    terminate. Without waiting, the database lock might not be released yet when
    the test tries to open a new database instance.

    * fix(tests): use init_read_only to avoid orphaned metrics task holding database lock

    The StateService::new() function spawns an infinite metrics export task
    that holds a database clone forever. When load_tip_height_from_state_directory()
    used zebra_state::init(), this task would keep the database lock even after
    the function returned, causing "Database likely already open" panics when
    zebrad #2 tried to open the same database.

    Changed load_tip_height_from_state_directory() to use init_read_only()
    instead of init(). The init_read_only() function creates a minimal read-only
    state without spawning background tasks, so the database is properly released
    when the function returns.

    * fix(tests): address PR review feedback for database lock fixes

    Changes based on PR review:
    - Rename `load_tip_height_from_state_directory` to `load_finalized_tip_height_from_state_directory`
      to accurately reflect that it returns the finalized tip (which may be behind best tip)
    - Improve error message for spawn_blocking JoinError to cover panic/cancellation cases
    - Propagate errors from `wait_with_output()` instead of ignoring them - ignoring defeats
      the purpose of the fix since we wouldn't actually wait if it fails
    - Keep `#![allow(unused_imports)]` in disk_db/tests.rs with explanatory comment - this module
      is included via `proptest-impl` feature where imports appear unused (test functions are
      only compiled in test mode)

    * revert(state): remove wait_for_compact() from shutdown sequence

    The CI failures were caused by not waiting for the zebrad process to
    terminate, not by RocksDB's internal background work. The test fixes
    (wait_with_output instead of sleep) address the actual root cause.

    Removing wait_for_compact() because:
    - It can block indefinitely during shutdown
    - The OS could halt the thread anyway, making it unreliable
    - The new reopen test already passes on main without it
    - The WAL already ensures recoverability of in-flight writes

    * fix(tests): keep sleep after wait_with_output as safety margin

    Add back a short sleep after wait_with_output() calls. As noted in
    review, wait() returning Ok doesn't guarantee the OS has fully
    released all resources (file locks, etc.) in every edge case.

commit 887d4d4952860060484b7f8ea20bab8e69c43fb5
Author: Zaki Manian <zaki@iqlusion.io>
Date:   Wed Feb 11 10:59:15 2026 -0800

    fix: clarify TransparentInputNotFound error message (#10302)

    * fix: clarify TransparentInputNotFound error message (#10214)

    The previous message "could not find a mempool transaction input UTXO
    in the best chain" was misleading in two ways:

    - "mempool transaction" implied the transaction was already in the
      mempool, when in fact it is being submitted to the mempool
    - "in the best chain" was incomplete, since the lookup also checks
      unconfirmed transactions in the mempool (zero-conf spending)

    The new message "could not find transparent input UTXO in the chain or
    mempool" accurately describes the lookup scope.

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

    * Update zebra-consensus/src/error.rs

    ---------

    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

commit 3a832540d54d133a85a2e719279a5eb6a6b2c83d
Author: syszery <66296529+syszery@users.noreply.github.com>
Date:   Wed Feb 11 17:42:46 2026 +0100

    refactor(zebra-chain): use `strum::EnumIter` instead of `NETWORK_UPGRADES_IN_ORDER` (#10096)

    * refactor(zebra-chain): use strum EnumIter instead of NETWORK_UPGRADES_IN_ORDER

    * refactor(zebra-chain): update changelog and move tests

    * Update zebra-chain/CHANGELOG.md

    Co-authored-by: Marek <m@rek.onl>

    * Update zebra-chain/CHANGELOG.md

    Co-authored-by: Marek <m@rek.onl>

    * chore: update Cargo.lock

    * add note about order to `NetworkUpgrade` enum

    ---------

    Co-authored-by: Marek <m@rek.onl>
    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

commit 5d274ad2c6c5839d93b078738e540513209a7463
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Wed Feb 11 08:56:46 2026 -0300

    feat(delete): Remove OpenAPI spec and functionality (#10298)

    * remove openapi

    * changelog

    * Apply suggestion from @gustavovalverde

    Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>

    * Apply suggestion from @oxarbitrage

    ---------

    Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>

commit 5c31c4c2d14cb0af629d5071377fb1cc9559230f
Author: Pili Guerra <1311133+mpguerra@users.noreply.github.com>
Date:   Wed Feb 11 12:56:35 2026 +0100

    docs: Fix package installation command for Redis (#10299)

    Minor typo fix

commit e0a4d96d8a76c3d08304a7b9084218c71117caa2
Author: Conrado <conrado@zfnd.org>
Date:   Wed Feb 11 06:15:02 2026 -0300

    ci: make test-docker more robust by adjusting grep pattern (#10291)

commit 70f8373faa3146f6e305516223522e6aa29dc350
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Mon Feb 9 11:29:28 2026 -0300

    feat(rpc): Implement `gettxout` RPC method (#10235)

    * initial approach

    * apply spent filter, do fixes

    * code improvments

    * fix some differences with zcashd

    * fix mempool path

    * add spend check in mempool, improve script type display

    * fix test

    * remove closure

    * fix unreachable message

    * fmt

    * Suggestions for "feat(rpc): Implement gettxout RPC method #10235" (#10237)

    * - Removes boxed response
    - Condenses two mempool requests into one
    - Adds a TODO about ensuring the returned tip hash is valid in all responses

    * remove mempool test, fix minor doc failures

    ---------

    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    * add network argument to method

    * remove unnecessary wrapper

    * fix some comments

    * change default mempool

    * add changelog entries

    ---------

    Co-authored-by: Arya <aryasolhi@gmail.com>

commit 16c40c152602ad9d76c98512bb71b03c630e057d
Author: Marek <m@rek.onl>
Date:   Mon Feb 9 13:31:14 2026 +0100

    add(chain): Add founders reward addresses (#10188)

    * Refactor subsidy constants into dedicated modules

    * Use qualified names instead of name suffixes

    * Restrict subsidy constants modules to crate visibility

    * Add Mainnet founder address constants to subsidy parameters

    * Add Testnet founder address constants to subsidy parameters

    ---------

    Co-authored-by: Arya <aryasolhi@gmail.com>

commit 7d8f3d63834b46237a478aefbe4da2e1264f3508
Author: Conrado <conrado@zfnd.org>
Date:   Fri Feb 6 19:25:58 2026 -0300

    set MSRV to 1.85 and actually test it in CI (#10275)

    * set MSRV to 1.85 and actually test it in CI

    * revert the MSRV build to do each crate, skip zebrad

commit b4f9edab09ffc990b18b7edbc0e953e4d80cefce
Author: Marek <mail@marek.onl>
Date:   Fri Feb 6 19:23:26 2026 +0100

    chore: Release v4.1.0 (#10281)

    * Update changelog with Zebra 4.1.0 release notes and contributor list

    * hotfix: do major bumps for every crate that depends on zebra-chain (#10269)

    * do major bumps for every crate that depends on zebra-chain

    * Update .github/PULL_REQUEST_TEMPLATE/hotfix-release-checklist.md

    Co-authored-by: Marek <mail@marek.onl>

    * Apply suggestions from code review

    Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>

    ---------

    Co-authored-by: Marek <mail@marek.onl>
    Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>

    * Update crate versions

    * Update estimated release height to 3231000

    * Apply suggestions from code review

    Co-authored-by: Conrado <conrado@zfnd.org>

    * Remove subsidy constants module entry from changelog

    ---------

    Co-authored-by: Conrado <conrado@zfnd.org>
    Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>

commit 22382722d900222c5315809b0ae172557bccad5d
Author: Marek <mail@marek.onl>
Date:   Thu Feb 5 12:24:42 2026 +0100

    chore: Update checkpoints (#10278)

    * Update Mainnet checkpoints up to height 3228806

    * Add new Testnet checkpoints up to block height 3824000

commit 43ad654a29298e5ce8aab2a6ee61db46f7cd9abc
Author: GarmashAlex <garmasholeksii@gmail.com>
Date:   Thu Feb 5 14:24:35 2026 +0300

    perf: cache restorable db versions during old db cleanup (#10245)

commit ad6274cd608a724f56d2159451609cf65b6de16f
Author: Marek <mail@marek.onl>
Date:   Thu Feb 5 12:24:29 2026 +0100

    chore: Update `Cargo.lock` (#10276)

    Update Cargo.lock with latest dependency versions

commit 3598023b0a35819655c13d3867a9ef4d9ae72e1f
Author: Marek <mail@marek.onl>
Date:   Thu Feb 5 00:16:34 2026 +0100

    Bump `vergen-git2` to v9 (#10272)

    Update vergen-git2 dependency to version 9 in Cargo.toml

commit 1886129b6949fb9a5a77eaecbd17f3338f82d1a2
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Wed Feb 4 14:38:28 2026 +0000

    fix(docker): replace gosu with setpriv for privilege dropping (#10270)

    * fix(docker): replace gosu with setpriv for privilege dropping

    The tianon/gosu:trixie image recently lost arm64 support (2026-02-04),
    breaking our multi-arch Docker builds.

    Replace gosu with setpriv, which:
    - Is part of util-linux, already included in debian:trixie-slim
    - Requires no external Docker image dependency
    - Provides the same privilege dropping functionality
    - Has native multi-arch support

    Add explicit privilege drop test to CI that verifies the entrypoint
    correctly drops from root to uid=10001(zebra).

    * fix(ci): escape parentheses in grep pattern for privilege drop test

    * docs: add ADR-0004 for setpriv, mark ADR-0002 as superseded

commit 18178edd00c128f906ccce9e801c025eb0b15373
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Tue Feb 3 18:21:58 2026 +0000

    fix(ci): remove unsupported `continue-on-error` from reusable workflow calls (#10264)

    * fix(ci): move continue-on-error inside reusable workflow for testnet jobs

    `continue-on-error` is not supported at the caller job level for
    reusable workflows. Move it inside the reusable workflow via a new
    `allow_failure` input parameter.

    This was introduced in #10251 and caused workflow parsing errors.

    * fix(ci): truncate branch name and make disk creation idempotent

    - Add slug-maxlength: 23 to github-slug-action to keep instance names under 63 chars
    - Restore original disk naming (test_id-sha) without branch for shared data disks
    - Make disk creation idempotent: reuse existing disk if present from failed runs

    The data disk architecture is designed to share disks across branches for the
    same commit SHA (same code = same state). Instance names include branch for
    parallel execution across branches.

commit 87eca87f980122f1cdd05d1c78e9706b2ef2581d
Author: Marek <mail@marek.onl>
Date:   Tue Feb 3 14:54:20 2026 +0100

    change(chain): Split subsidy constants into submodules (#10185)

    * Refactor subsidy constants into dedicated modules

    * Use qualified names instead of name suffixes

    * Restrict subsidy constants modules to crate visibility

    ---------

    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

commit c52c65d81304a6d3e281a9abe3991114a566d52d
Author: syszery <66296529+syszery@users.noreply.github.com>
Date:   Tue Feb 3 14:54:14 2026 +0100

    feature(zebra-chain): add new `Bounded` vec type and apply it in AdjustDifficulty (#10056)

    * feature: add new bounded vec type and apply in AdjustDifficulty

    * feat: Bounded now enforces a minimum length and improved documentation

    * refactor: implement AtLeastOne type as a specialized version of Bounded

    * refactor(zebra-chain): refactor AtLeastOne to BoundedVec type alias

commit 9ad7d3cf96edbce074d0d9668234d810dfc0cfe1
Author: syszery <66296529+syszery@users.noreply.github.com>
Date:   Tue Feb 3 05:13:07 2026 +0100

    refactor(state): improve error propagation for CommitCheckpointVerifiedBlock (#9979)

    * refactor(state): improve error propagation for CommitCheckpointVerifiedError

    * Update zebra-state/src/error.rs

    implements review feedback

    Co-authored-by: Arya <aryasolhi@gmail.com>

    * refactor(state): align checkpoint commit error handling with semantic commit flow

    * - Condenses error types and variants
    - Updates `KnownBlock` request handling to check for block hashes in the state's sent hashes, fixing a bug where it's possible for part of a chain to be duplicated in the non-finalized state if a block is sent to the state via a `CommitSemanticallyVerifiedBlock` request while it's in the block write channel or before the non-finalized state channel has been updated

    * Updates `write_block()` to return a `CommitCheckpointVerifiedBlock` error and removes the `CloneError` variant

    * Panic if Zebra fails to write a block to rocksdb

    * fix: clippy lints and remove forgotten unwrap after error refactor

    * fix Request docs and Duplicate error message

    * fixes fmt whitespace

    * sync: consolidate duplicate/commit checks in should_restart_sync

    * should_restart_sync: make duplicate/commit checks more defensive

    * should_restart_sync: revert previous changes and propagate CommitBlockError

    * sync: clean up should_restart_sync and add unit test for CommitBlockError::Duplicate

    * refactor(zebra-state): box ValidateContextError and eliminate redundant clone

    ---------

    Co-authored-by: Arya <aryasolhi@gmail.com>

commit 0a632428e033f99ede85dcac3a157cbf95b044ef
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Mon Feb 2 22:41:42 2026 +0000

    fix(ci): make GCP instance template creation idempotent (#10259)

    * fix(ci): make GCP instance template creation idempotent

    Add a check to skip instance template creation if it already exists.
    GCP instance templates are immutable resources - they cannot be updated
    or deleted while referenced by a MIG. Since the template name includes
    the commit SHA, the same commit produces the same template configuration,
    making it safe to reuse an existing template.

    Without this check, workflow re-runs or concurrent triggers on the same
    commit fail with "already exists" error.

    * style(ci): remove backtick comment from gcloud command

commit 4caee02f9106cd43727228fbd2b3fa28e63ee8f6
Author: Marek <mail@marek.onl>
Date:   Mon Feb 2 15:26:20 2026 +0100

    change(CI): Run scheduled full sync on Testnet (#10251)

    Make testnet integration test jobs continue on error in CI workflow

commit 6138a87bd87b5f4fde6478df3f0a930f7c3d5ac9
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Mon Feb 2 11:26:17 2026 -0300

    fix(sentry): Conditional init  (#10256)

    conditional sentry

commit 85a7b2f95666df88a22e1be08eadcf1b6c8544bd
Author: ZolyDevMaya <38867566+zlyzol@users.noreply.github.com>
Date:   Sat Jan 31 12:43:56 2026 +0100

    mempool: add standardness checks and configurable OP_RETURN policy (#10224)

    * mempool: add standardness checks and OP_RETURN policy knobs

    * mempool: remove datacarrier standardness config switch

    * mempool: standardize proptest tx inputs

    * mempool: bound crawler error proptest generation

    * test: add v3.1.1 generated config

    * mepool: make max_datacarrier_bytes optional with default fallback

    * mempool: remove mempool specification link from readme

    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

    * fmt, docs

    * update config

    ---------

    Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

commit 295a3068bb9e9b70d923f0c9b59947651d8a18fa
Author: Alfredo Garcia <oxarbitrage@gmail.com>
Date:   Fri Jan 30 16:35:25 2026 -0300

    tests(qa): Add zaino to the qa rpc framework (#10199)

    add zaino to the qa rpc framework

commit a58106cb031f9845a8d08e9fc6e309da750cd3bc
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Fri Jan 30 17:52:33 2026 +0000

    fix(ci): add issues write permission to release-binaries workflow (#10243)

    fix(ci): add issues write permission to release-binaries failure-issue job

    The failure-issue job in release-binaries.yml uses jayqi/failed-build-issue-action
    to automatically create or update GitHub issues when the release workflow fails.
    This action requires write access to issues, but the job was missing the necessary
    permission, causing "Resource not accessible by integration" errors.

    Adds `permissions: issues: write` to the failure-issue job to allow it to
    create and comment on issues as intended.

commit 7db5a88112795ec9fe1e1ad9bff4c6dc9ae8c0d5
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Fri Jan 30 17:49:41 2026 +0000

    fix(ci): enable external network access for GCP deployed nodes (#10242)

    Add ZEBRA_NETWORK__LISTEN_ADDR to GCP deployment workflow so nodes
    listen on all interfaces for P2P connections. This allows DNS seeders
    to discover and connect to these nodes.

    Also fixes static IP assignment to use the correct gcloud command
    (instance-configs create) which properly persists IPs across rolling
    updates.

commit 9b2af18767745c4e7811779978d17275f5832bb6
Author: Pili Guerra <1311133+mpguerra@users.noreply.github.com>
Date:   Fri Jan 30 14:38:47 2026 +0100

    docs: Update CONTRIBUTING.md for PR handling (#10249)

    Update CONTRIBUTING.md for PR handling

    Clarified handling of low-effort PRs in contribution guidelines.

commit a09e55ae0cade0e4d5dde97b61491b94a683844b
Author: MozirDmitriy <dmitriymozir@gmail.com>
Date:   Fri Jan 30 10:11:12 2026 +0200

    perf: avoid extra clone in WtxId `TryFrom<&Vec<u8>>` (#10247)

commit e04845f3e4a0976031f35c6564aa56ea4d722371
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Wed Jan 28 15:06:29 2026 +0000

    build(deps): bump the devops group across 1 directory with 12 updates (#10233)

    * build(deps): bump the devops group across 1 directory with 12 updates

    Bumps the devops group with 12 updates in the / directory:

    | Package | From | To |
    | --- | --- | --- |
    | [actions/checkout](https://github.com/actions/checkout) | `5.0.0` | `6.0.1` |
    | [actions-rust-lang/setup-rust-toolchain](https://github.com/actions-rust-lang/setup-rust-toolchain) | `1.15.1` | `1.15.2` |
    | [taiki-e/install-action](https://github.com/taiki-e/install-action) | `2.62.15` | `2.67.2` |
    | [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5.5.1` | `5.5.2` |
    | [EmbarkStudios/cargo-deny-action](https://github.com/embarkstudios/cargo-deny-action) | `2.0.13` | `2.0.15` |
    | [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) | `6.1.0` | `6.1.1` |
    | [rlespinasse/github-slug-action](https://github.com/rlespinasse/github-slug-action) | `5.2.0` | `5.4.0` |
    | [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3.11.1` | `3.12.0` |
    | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.6.2` | `6.0.0` |
    | [actions/download-artifact](https://github.com/actions/download-artifact) | `5.0.0` | `7.0.0` |
    | [docker/metadata-action](https://github.com/docker/metadata-action) | `5.8.0` | `5.10.0` |
    | [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) | `0.2.0` | `0.4.1` |

    Updates `actions/checkout` from 5.0.0 to 6.0.1
    - [Release notes](https://github.com/actions/checkout/releases)
    - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/actions/checkout/compare/v5...8e8c483db84b4bee98b60c0593521ed34d9990e8)

    Updates `actions-rust-lang/setup-rust-toolchain` from 1.15.1 to 1.15.2
    - [Release notes](https://github.com/actions-rust-lang/setup-rust-toolchain/releases)
    - [Changelog](https://github.com/actions-rust-lang/setup-rust-toolchain/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/actions-rust-lang/setup-rust-toolchain/compare/02be93da58aa71fb456aa9c43b301149248829d8...1780873c7b576612439a134613cc4cc74ce5538c)

    Updates `taiki-e/install-action` from 2.62.15 to 2.67.2
    - [Release notes](https://github.com/taiki-e/install-action/releases)
    - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/taiki-e/install-action/compare/d6d752794628f1e1fffa3c4d3c8874e06f043d50...0bc4cd8a3e21db4cb9519857377b0c8c5e150de5)

    Updates `codecov/codecov-action` from 5.5.1 to 5.5.2
    - [Release notes](https://github.com/codecov/codecov-action/releases)
    - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/codecov/codecov-action/compare/5a1091511ad55cbe89839c7260b706298ca349f7...671740ac38dd9b0130fbe1cec585b89eea48d3de)

    Updates `EmbarkStudios/cargo-deny-action` from 2.0.13 to 2.0.15
    - [Release notes](https://github.com/embarkstudios/cargo-deny-action/releases)
    - [Commits](https://github.com/embarkstudios/cargo-deny-action/compare/f2ba7abc2abebaf185c833c3961145a3c275caad...3fd3802e88374d3fe9159b834c7714ec57d6c979)

    Updates `release-drafter/release-drafter` from 6.1.0 to 6.1.1
    - [Release notes](https://github.com/release-drafter/release-drafter/releases)
    - [Commits](https://github.com/release-drafter/release-drafter/compare/b1476f6e6eb133afa41ed8589daba6dc69b4d3f5...267d2e0268deae5d44f3ba5029dd4d6e85f9d52d)

    Updates `rlespinasse/github-slug-action` from 5.2.0 to 5.4.0
    - [Release notes](https://github.com/rlespinasse/github-slug-action/releases)
    - [Commits](https://github.com/rlespinasse/github-slug-action/compare/c33ff65466c58d57e4d796f88bb1ae0ff26ee453...6f7a8d2348e2a4aa5defafcdaafe5aef3f83bd4b)

    Updates `docker/setup-buildx-action` from 3.11.1 to 3.12.0
    - [Release notes](https://github.com/docker/setup-buildx-action/releases)
    - [Commits](https://github.com/docker/setup-buildx-action/compare/e468171a9de216ec08956ac3ada2f0791b6bd435...8d2750c68a42422c14e847fe6c8ac0403b4cbd6f)

    Updates `actions/upload-artifact` from 4.6.2 to 6.0.0
    - [Release notes](https://github.com/actions/upload-artifact/releases)
    - [Commits](https://github.com/actions/upload-artifact/compare/v4.6.2...b7c566a772e6b6bfb58ed0dc250532a479d7789f)

    Updates `actions/download-artifact` from 5.0.0 to 7.0.0
    - [Release notes](https://github.com/actions/download-artifact/releases)
    - [Commits](https://github.com/actions/download-artifact/compare/634f93cb2916e3fdff6788551b99b062d0335ce0...37930b1c2abaa49bbe596cd826c3c89aef350131)

    Updates `docker/metadata-action` from 5.8.0 to 5.10.0
    - [Release notes](https://github.com/docker/metadata-action/releases)
    - [Commits](https://github.com/docker/metadata-action/compare/c1e51972afc2121e065aed6d45c65596fe445f3f...c299e40c65443455700f0fdfc63efafe5b349051)

    Updates `zizmorcore/zizmor-action` from 0.2.0 to 0.4.1
    - [Release notes](https://github.com/zizmorcore/zizmor-action/releases)
    - [Commits](https://github.com/zizmorcore/zizmor-action/compare/e673c3917a1aef3c65c972347ed84ccd013ecda4...135698455da5c3b3e55f73f4419e481ab68cdd95)

    ---
    updated-dependencies:
    - dependency-name: actions/checkout
      dependency-version: 6.0.1
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: devops
    - dependency-name: actions-rust-lang/setup-rust-toolchain
      dependency-version: 1.15.2
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: devops
    - dependency-name: taiki-e/install-action
      dependency-version: 2.67.2
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: codecov/codecov-action
      dependency-version: 5.5.2
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: devops
    - dependency-name: EmbarkStudios/cargo-deny-action
      dependency-version: 2.0.15
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: devops
    - dependency-name: release-drafter/release-drafter
      dependency-version: 6.1.1
      dependency-type: direct:production
      update-type: version-update:semver-patch
      dependency-group: devops
    - dependency-name: rlespinasse/github-slug-action
      dependency-version: 5.4.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: docker/setup-buildx-action
      dependency-version: 3.12.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: actions/upload-artifact
      dependency-version: 6.0.0
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: devops
    - dependency-name: actions/download-artifact
      dependency-version: 7.0.0
      dependency-type: direct:production
      update-type: version-update:semver-major
      dependency-group: devops
    - dependency-name: docker/metadata-action
      dependency-version: 5.10.0
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    - dependency-name: zizmorcore/zizmor-action
      dependency-version: 0.4.1
      dependency-type: direct:production
      update-type: version-update:semver-minor
      dependency-group: devops
    ...

    Signed-off-by: dependabot[bot] <support@github.com>

    * fix: correct actions/checkout version comments from v4.2.2 to v6.0.1

    ---------

    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>

commit 3854bc405f7efafdcb5866451cc21520fda4bdb2
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Wed Jan 28 13:38:39 2026 +0000

    feat(metrics): add RocksDB I/O latency and sync distance metrics (#10181)

    * feat(metrics): add RocksDB I/O latency and sync distance metrics

    Add high-priority observability metrics identified from Ethereum node
    dashboard analysis:

    Rust metrics:
    - Batch commit latency histogram for RocksDB write operations
    - Compaction metrics: pending bytes, running compactions, files per level
    - Block cache usage tracking
    - Sync distance gauges showing blocks behind estimated network tip

    Dashboard improvements:
    - New Zebra Overview dashboard with health status at a glance
    - $job template variable for fleet monitoring across multiple nodes
    - Sync Distance panel with semantic color thresholds
    - System Resources row (CPU, memory, file descriptors)
    - RocksDB dashboard: I/O Performance and Compaction sections

    Color semantics fixes:
    - Sync Status: SYNCING=yellow (in progress), SYNCED=green (complete)
    - Sync Distance: 0-2 blocks="SYNCED", then yellow/orange/red thresholds
    - Compaction Efficiency: inverted so high efficiency=green, low=red
    - Database size: neutral blue (size isn't inherently good/bad)
    - Added "NO DATA" state to all health panels

    * docs: consolidate changelog entries per PR and fix formatting

    - Consolidate multiple changelog entries into one per PR as requested
    - Fix cargo fmt in sync/progress.rs

commit 9d4480c9d7f188a7a5e8e2717fc52d687af10d7f
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Wed Jan 28 11:23:17 2026 +0000

    feat(metrics): add performance histograms for bottleneck identification (#10179)

    * feat(metrics): add value pool, RPC, and peer health metrics

    Add Prometheus metrics for operational visibility:

    - Value pool metrics: transparent, sprout, sapling, orchard, deferred
      balances and total chain supply (zebra-state)
    - RPC metrics middleware: request counts, latencies, active requests,
      and errors per method (zebra-rpc)
    - Peer handshake metrics: duration histograms and failure tracking
      by reason (zebra-network)

    Also includes:
    - Grafana dashboards for value pools and RPC monitoring
    - Prometheus alert rules for critical conditions
    - Updated CHANGELOG

    Closes #10162, closes #10163, closes #10164, closes #10167

    * chore: remove wrongly commited files to `.gitignore`

    * chore: cargo fmt

    * chore: clippy fix

    * docs: fix changelog entries for PR #10175

    - Remove #10174 entries from [Unreleased] (already in 4.0.0)
    - Remove redundant "Added" prefix from entries
    - Link to PR #10175 instead of issues
    - Add rpc_metrics module entry to zebra-rpc changelog

    * Update CHANGELOG.md

    Co-authored-by: Marek <mail@marek.onl>

    * Update zebra-rpc/CHANGELOG.md

    Co-authored-by: Marek <mail@marek.onl>

    * feat(metrics): add performance histograms for bottleneck identification

    Add duration histograms to help identify performance bottlenecks:

    Sync pipeline metrics:
    - sync.stage.duration_seconds{stage} for obtain_tips/extend_tips
    - sync.block.download.duration_seconds{result}
    - sync.block.verify.duration_seconds{result}

    Consensus batch verification metrics:
    - zebra.consensus.batch.duration_seconds{verifier,result}
    - Covers ed25519, redjubjub, redpallas, halo2, groth16_sapling

    RocksDB database metrics (exported every 30s):
    - zebra.state.rocksdb.total_disk_size_bytes
    - zebra.state.rocksdb.live_data_size_bytes
    - zebra.state.rocksdb.total_memory_size_bytes
    - zebra.state.rocksdb.cf_disk_size_bytes{cf}
    - zebra.state.rocksdb.cf_memory_size_bytes{cf}

    Dashboard updates:
    - Updated syncer.json with sync latency panels
    - Updated transaction-verification.json with batch duration panels
    - Added rocksdb.json for database monitoring

    Closes #10165

    * Apply suggestions from code review

    Co-authored-by: Marek <mail@marek.onl>

    ---------

    Co-authored-by: Marek <mail@marek.onl>

commit 1d13b98dcaab943e2b3df5b1c843f80ef49e87b6
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Tue Jan 27 12:58:14 2026 +0000

    feat(metrics): add value pool, RPC, and peer health metrics (#10175)

    * feat(metrics): add value pool, RPC, and peer health metrics

    Add Prometheus metrics for operational visibility:

    - Value pool metrics: transparent, sprout, sapling, orchard, deferred
      balances and total chain supply (zebra-state)
    - RPC metrics middleware: request counts, latencies, active requests,
      and errors per method (zebra-rpc)
    - Peer handshake metrics: duration histograms and failure tracking
      by reason (zebra-network)

    Also includes:
    - Grafana dashboards for value pools and RPC monitoring
    - Prometheus alert rules for critical conditions
    - Updated CHANGELOG

    Closes #10162, closes #10163, closes #10164, closes #10167

    * chore: remove wrongly commited files to `.gitignore`

    * chore: cargo fmt

    * chore: clippy fix

    * docs: fix changelog entries for PR #10175

    - Remove #10174 entries from [Unreleased] (already in 4.0.0)
    - Remove redundant "Added" prefix from entries
    - Link to PR #10175 instead of issues
    - Add rpc_metrics module entry to zebra-rpc changelog

    * Update CHANGELOG.md

    Co-authored-by: Marek <mail@marek.onl>

    * Update zebra-rpc/CHANGELOG.md

    Co-authored-by: Marek <mail@marek.onl>

    ---------

    Co-authored-by: Marek <mail@marek.onl>

commit 8b670c2fe34323b83385bf12380fab244669cad3
Author: Bashmunta <georgebashmunta@gmail.com>
Date:   Tue Jan 27 04:05:23 2026 +0200

    fix: report connection task exits as ConnectionTaskExited (#10231)

commit 650d0f25cfcf54200e1ce2d5c8e945025a68951f
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Mon Jan 26 15:15:11 2026 +0000

    fix(ci): Prevent race condition in GCP static IP assignment (#10159)

    Use --no-address in instance template so instances start without
    ephemeral IPs. This prevents the MIG controller from racing to restore
    ephemeral IPs when assigning static IPs.

    Closes #10158

commit 067e0b4e8253560d022227afab0acda820096429
Author: Conrado <conrado@zfnd.org>
Date:   Wed Jan 21 15:04:03 2026 -0300

    bump zebra-chain and dependent crates (#10234)

commit a2e43b7fa3521982473a8f6ddf206cbc17f5f33b
Author: Conrado <conrado@zfnd.org>
Date:   Wed Jan 21 13:33:14 2026 -0300

    bump versions and update changelogs for 4.0.0 release (#10230)

    * bump versions and update changelogs for 4.0.0 release

    * mention how to enable OpenTelemetry support

    * Apply suggestions from code review

    Co-authored-by: Marek <mail@marek.onl>

    * bump release date to 21st

    ---------

    Co-authored-by: Marek <mail@marek.onl>

commit 44d743b785769fc086aac481e6fa83d07b3096e8
Author: David Campbell <alchemydc@users.noreply.github.com>
Date:   Tue Jan 20 13:08:14 2026 -0700

    Update DNS seeders to add new Shielded Labs mainnet seeder (#10228)

    * chore: add new Shielded Labs DNS mainnet seeder.  remove unreachable/flaky z.cash seeders until ECC/bootstrap governance crisis is resolved.

    see [forum post](https://forum.zcashcommunity.com/t/expanding-zcash-network-infrastructure-new-dns-seeders-launched-in-the-united-states-and-europe/54256) for context

    * chore: re-add (now-alive) ECC mainnet seeder.  list mainnet seeders in alphabetical order.

    * cargo fmt

    * chore: add (now alive again) ECC testnet seeder

    * add new config file for tests

    ---------

    Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
    Co-authored-by: Conrado Gouvea <conrado@zfnd.org>

commit 6c1c79ee0dda5c0429d45c29cc86906ec0576906
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Tue Jan 20 14:53:54 2026 +0000

    fix(clippy): address clippy beta lints (#10229)

    - Box large error tuple in mempool downloads to fix result_large_err
    - Use saturating_sub instead of checked_sub().unwrap_or_default()

commit 47e5756758740c31feeecd23211770263440c267
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Mon Jan 19 20:00:15 2026 +0000

    feat(tracing): add OpenTelemetry distributed tracing support (#10174)

    * feat(tracing): add OpenTelemetry distributed tracing support

    Adds feature-gated OpenTelemetry tracing with OTLP HTTP exporter:

    - New `opentelemetry` feature flag in zebrad
    - Configuration via environment variables:
      - ZEBRA_TRACING__OPENTELEMETRY_ENDPOINT
      - ZEBRA_TRACING__OPENTELEMETRY_SERVICE_NAME
      - ZEBRA_TRACING__OPENTELEMETRY_SAMPLE_PERCENT
    - RPC tracing middleware with SPAN_KIND_SERVER spans for Jaeger SPM
    - Docker Compose observability stack (Jaeger, Prometheus, Grafana, AlertManager)
    - Grafana dashboard for RPC tracing metrics

    Closes #10166
    Closes #10168

    * Apply suggestions from code review

    Co-authored-by: Marek <mail@marek.onl>

    * fix: cargo fmt

    * Apply suggestions from code review

    Co-authored-by: Marek <mail@marek.onl>

    * Apply suggestions from code review

    Co-authored-by: Marek <mail@marek.onl>

    ---------

    Co-authored-by: Marek <mail@marek.onl>

commit d6c9d334de90542124f1bde93c2df70200788838
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Mon Jan 19 11:36:53 2026 +0000

    fix(ci): update Docker test grep patterns for current log format (#10225)

    The previous patterns expected network name and sync progress on the
    same log line, but they are now on separate lines. Use seed peer
    resolution log which shows both network (mainnet/testnet seeder) and
    confirms the node is starting.

commit b75e0e0d6a97505d5378ec9d2299da3a346f4a37
Author: Emerson <emerson@fastmail.com>
Date:   Fri Jan 16 14:36:51 2026 -0800

    Parse Zebra's config file as TOML (#10222)

    Config file must be TOML (Resolves #10221)

commit 39e4b8cccb3a138ac9d19cf514badb005ed59f87
Author: Gustavo Valverde <g.valverde02@gmail.com>
Date:   Fri Jan 16 17:38:00 2026 +0000

    fix(ci): resolve Docker build failures and cargo deny duplicates (#10219)

    Fix CI issues affecting the main branch:

    1. Docker test builds failing due to disk space (since Nov 13, 2025)
       - Use configurable runner via DOCKER_BUILD_RUNNER_AMD64 variable
       - ZcashFoundation uses larger runner; forks fallback to ubuntu-latest

    2. Cargo deny duplicate crate errors (since Jan 15, 2026)
       - Add skip-tree entries for hashbrown 0.15.x and itertools 0.13.x

commit 7c9bed3e05cfb8344640db4b678330eb8bed6400
Author: Conrado <conrado@zfnd.org>
Date:   Thu Jan 15 20:20:27 2026 -0300

    chore(chain): update checkpoints (#10215)

commit 884c29b2b11d474b566b40ce881a2974ea4c3dc8
Author: Conrado <conrado@zfnd.org>
Date:   Thu Jan 15 20:20:24 2026 -0300

    chore: update dependencies (#10216)
judah-caruso pushed a commit to ShieldedLabs/zebra-crosslink-staging that referenced this pull request Mar 10, 2026
* remove `qa` folder

* update the changelogs

* update pull request number
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-rpc Area: Remote Procedure Call interfaces C-deprecated C-testing Category: These are tests extra-reviews This PR needs at least 2 reviews to merge P-Medium ⚡

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove qa/ folder from Zebra

2 participants