You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -16,17 +15,19 @@ They can be skipped for urgent releases.
16
15
17
16
To check consensus correctness, we want to test that the state format is valid after a full sync. (Format upgrades are tested in CI on each PR.)
18
17
19
-
-[ ] Make sure there has been [at least one successful full sync test](https://github.com/ZcashFoundation/zebra/actions/workflows/ci-tests.yml?query=event%3Aschedule) since the last state change, or
20
-
-[ ] Start a manual workflow run with a Zebra and `lightwalletd` full sync.
18
+
-[ ] Make sure there has been [at least one successful full sync test](https://github.com/ZcashFoundation/zebra/actions/workflows/zfnd-ci-integration-tests-gcp.yml?query=event%3Aschedule) since the last state change, or
19
+
-[ ] Start a manual workflow run of [`zfnd-ci-integration-tests-gcp.yml`](https://github.com/ZcashFoundation/zebra/actions/workflows/zfnd-ci-integration-tests-gcp.yml) with both `run-full-sync: true` and `run-lwd-sync: true`.
21
20
22
-
State format changes can be made in `zebra-state` or `zebra-chain`. The state format can be changed by data that is sent to the state, data created within the state using `zebra-chain`, or serialization formats in `zebra-state` or `zebra-chain`.
21
+
State format changes can be made in `zebra-state` or `zebra-chain`. The state format can be changed by data that is sent to the state, data created within the state using `zebra-chain`, or serialization formats in `zebra-state` or `zebra-chain`.
23
22
24
23
After the test has been started, or if it has finished already:
24
+
25
25
-[ ] Ask for a state code freeze in Slack. The freeze lasts until the release has been published.
26
26
27
27
## Checkpoints
28
28
29
29
For performance and security, we want to update the Zebra checkpoints in every release.
30
+
30
31
-[ ] You can copy the latest checkpoints from CI by following [the zebra-checkpoints README](https://github.com/ZcashFoundation/zebra/blob/main/zebra-utils/README.md#zebra-checkpoints).
31
32
32
33
## Missed Dependency Updates
@@ -36,7 +37,9 @@ Sometimes `dependabot` misses some dependency updates, or we accidentally turned
36
37
This step can be skipped if there is a large pending dependency upgrade. (For example, shared ECC crates.)
37
38
38
39
Here's how we make sure we got everything:
40
+
39
41
-[ ] Run `cargo update` on the latest `main` branch, and keep the output
42
+
-[ ] Until we bump the MSRV to 1.88 or higher, `home` must be downgraded manually: `cargo update home@0.5.12 --precise 0.5.11`
40
43
-[ ] If needed, [add duplicate dependency exceptions to deny.toml](https://github.com/ZcashFoundation/zebra/blob/main/book/src/dev/continuous-integration.md#fixing-duplicate-dependencies-in-check-denytoml-bans)
41
44
-[ ] If needed, remove resolved duplicate dependencies from `deny.toml`
42
45
-[ ] Open a separate PR with the changes
@@ -47,12 +50,15 @@ Here's how we make sure we got everything:
47
50
Follow the steps in the [release checklist](https://github.com/ZcashFoundation/zebra/blob/main/.github/PULL_REQUEST_TEMPLATE/release-checklist.md) to prepare the release:
Copy file name to clipboardExpand all lines: .github/ISSUE_TEMPLATE/usability_testing_plan.md
+2-5Lines changed: 2 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,9 @@
1
1
---
2
2
name: "📋 Usability Testing Plan"
3
3
about: Create a Usability Testing Plan
4
-
title: 'Usability Testing Plan'
4
+
title: "Usability Testing Plan"
5
5
labels: C-research
6
-
assignees: ''
7
-
6
+
assignees: ""
8
7
---
9
8
10
9
# Usability Testing Plan
@@ -53,7 +52,6 @@ assignees: ''
53
52
54
53
<!-- What needs to happen for the participant to successfully complete the task -->
55
54
56
-
57
55
## Session Outline and timing
58
56
59
57
<!-- The following sections provide some space to plan out the script and tasks for your participants -->
@@ -81,4 +79,3 @@ assignees: ''
81
79
## Required documentation
82
80
83
81
<!-- List the documents you will need to produce and bring to the usability testing sessions, e.g consent forms, usability testing script, questionnaires, etc... -->
A hotfix release should only be created when a bug or critical issue is discovered in an existing release, and waiting for the next scheduled release is impractical or unacceptable.
@@ -55,7 +54,7 @@ follow semver, depending on the thing being fixed.
55
54
## Test the Pre-Release (if Zebra hotfix)
56
55
57
56
-[ ] Wait until the Docker binaries have been built on the hotfix release branch, and the quick tests have passed:
-[ ] Wait until the [pre-release deployment machines have successfully launched](https://github.com/ZcashFoundation/zebra/actions/workflows/zfnd-deploy-nodes-gcp.yml?query=event%3Arelease)
For performance and security, we want to update the Zebra checkpoints in every release.
16
+
17
17
-[ ] You can copy the latest checkpoints from CI by following [the zebra-checkpoints README](https://github.com/ZcashFoundation/zebra/blob/main/zebra-utils/README.md#zebra-checkpoints).
18
18
19
19
# Missed Dependency Updates
@@ -23,7 +23,9 @@ Sometimes `dependabot` misses some dependency updates, or we accidentally turned
23
23
This step can be skipped if there is a large pending dependency upgrade. (For example, shared ECC crates.)
24
24
25
25
Here's how we make sure we got everything:
26
+
26
27
-[ ] Run `cargo update` on the latest `main` branch, and keep the output
28
+
-[ ] Until we bump the MSRV to 1.88 or higher, `home` must be downgraded manually: `cargo update home@0.5.12 --precise 0.5.11`
27
29
-[ ] If needed, [add duplicate dependency exceptions to deny.toml](https://github.com/ZcashFoundation/zebra/blob/main/book/src/dev/continuous-integration.md#fixing-duplicate-dependencies-in-check-denytoml-bans)
28
30
-[ ] If needed, remove resolved duplicate dependencies from `deny.toml`
29
31
-[ ] Open a separate PR with the changes
@@ -41,11 +43,12 @@ Once you are ready to tag a release, copy the draft changelog into `CHANGELOG.md
41
43
We use [the Release Drafter workflow](https://github.com/marketplace/actions/release-drafter) to automatically create a [draft changelog](https://github.com/ZcashFoundation/zebra/releases). We follow the [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format.
42
44
43
45
To create the final change log:
46
+
44
47
-[ ] Copy the [**latest** draft
45
-
changelog](https://github.com/ZcashFoundation/zebra/releases) into
46
-
`CHANGELOG.md` (there can be multiple draft releases)
48
+
changelog](https://github.com/ZcashFoundation/zebra/releases) into
49
+
`CHANGELOG.md` (there can be multiple draft releases)
47
50
-[ ] Delete any trivial changes
48
-
-[ ] Put the list of deleted changelog entries in a PR comment to make reviewing easier
51
+
-[ ] Put the list of deleted changelog entries in a PR comment to make reviewing easier
49
52
-[ ] Combine duplicate changes
50
53
-[ ] Edit change descriptions so they will make sense to Zebra users
51
54
-[ ] Check the category for each change
@@ -56,12 +59,14 @@ To create the final change log:
56
59
README updates can be skipped for urgent releases.
57
60
58
61
Update the README to:
62
+
59
63
-[ ] Remove any "Known Issues" that have been fixed since the last release.
60
64
-[ ] Update the "Build and Run Instructions" with any new dependencies.
61
65
Check for changes in the `Dockerfile` since the last tag: `git diff <previous-release-tag> docker/Dockerfile`.
62
66
-[ ] If Zebra has started using newer Rust language features or standard library APIs, update the known working Rust version in the README, book, and `Cargo.toml`s
63
67
64
68
You can use a command like:
69
+
65
70
```sh
66
71
fastmod --fixed-strings '1.58''1.65'
67
72
```
@@ -88,20 +93,11 @@ This check runs automatically on pull requests with the `A-release` label. It mu
The end of support height is calculated from the current blockchain height:
146
142
143
+
-[ ] Find where the Zcash blockchain tip is now by using a [Zcash Block Explorer](https://mainnet.zcashexplorer.app/) or other tool.
147
144
-[ ] Replace `ESTIMATED_RELEASE_HEIGHT` in [`end_of_support.rs`](https://github.com/ZcashFoundation/zebra/blob/main/zebrad/src/components/sync/end_of_support.rs) with the height you estimate the release will be tagged.
148
145
149
146
<details>
@@ -160,7 +157,6 @@ The end of support height is calculated from the current blockchain height:
160
157
161
158
-[ ] Push the version increments and the release constants to the release branch.
162
159
163
-
164
160
# Publish the Zebra Release
165
161
166
162
## Create the GitHub Pre-Release
@@ -182,7 +178,7 @@ The end of support height is calculated from the current blockchain height:
182
178
## Test the Pre-Release
183
179
184
180
-[ ] Wait until the Docker binaries have been built on `main`, and the quick tests have passed:
-[ ] Wait until the [pre-release deployment machines have successfully launched](https://github.com/ZcashFoundation/zebra/actions/workflows/zfnd-deploy-nodes-gcp.yml?query=event%3Arelease)
You are reviewing PRs for Zebra, a Zcash full node in Rust. Prioritize correctness, consensus safety, DoS resistance, and maintainability. Stay consistent with existing Zebra conventions. Avoid style-only feedback unless it clearly prevents bugs.
4
+
5
+
If the diff or PR description is incomplete, ask questions before making strong claims.
6
+
7
+
## Contribution Process Checks
8
+
9
+
Before reviewing code quality, verify:
10
+
11
+
-[ ] PR links to a pre-discussed issue
12
+
-[ ] PR description includes Motivation, Solution, and Tests sections
13
+
-[ ] PR title follows conventional commits
14
+
-[ ] If AI tools were used, disclosure is present in the PR description
15
+
16
+
If these are missing, note it in the review.
17
+
18
+
## Architecture Constraints
19
+
20
+
```text
21
+
zebrad (CLI orchestration)
22
+
→ zebra-consensus (verification)
23
+
→ zebra-state (storage/service boundaries)
24
+
→ zebra-chain (data types; sync-only)
25
+
→ zebra-network (P2P)
26
+
→ zebra-rpc (JSON-RPC)
27
+
```
28
+
29
+
- Dependencies flow **downward only** (lower crates must not depend on higher crates)
30
+
-`zebra-chain` is **sync-only** (no async / tokio / Tower services)
31
+
- State uses `ReadRequest` for queries, `Request` for mutations
32
+
33
+
## High-Signal Checks
34
+
35
+
### Tower Service Pattern
36
+
37
+
If the PR touches a Tower `Service` implementation:
38
+
39
+
- Bounds must include `Send + Clone + 'static` on services, `Send + 'static` on futures
40
+
-`poll_ready` must call `poll_ready` on all inner services
41
+
- Services must be cloned before moving into async blocks
42
+
43
+
### Error Handling
44
+
45
+
- Prefer `thiserror` with `#[from]` / `#[source]`
46
+
-`expect()` messages must explain **why** the invariant holds:
47
+
```rust
48
+
.expect("block hash exists because we just inserted it") // good
49
+
.expect("failed to get block") // bad
50
+
```
51
+
- Don't turn invariant violations into misleading `None`/defaults
0 commit comments