Repository navigation
release: prepare v1.1.0-rc1 - #256
Conversation
The "mainnet publication posture" job checks that the source being released keeps the mainnet launch posture: the AuxPoW chain ID, the genesis and ASERT launch data, the mainnet bootstrap, and the default-mainnet build. The "Classify release target" step only set mainnet_publish_gate_required for target branch 1.0.0, so pull requests, merge-queue runs and pushes into 1.1.0, the next mainnet release line, skipped the job and the Core Checks Gate never asked for its result. Set the output for 1.1.0 as well, and keep 1.0.0. The job's `if:` and the Core Checks Gate both read this output, so for source and release-policy changes into 1.1.0 the job now runs and a failure blocks the gate. Pin both branches in the existing workflow contract test, and update the release process, which names the branches the job runs for. Refs #222 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Set CLIENT_VERSION_MINOR to 1, CLIENT_VERSION_BUILD to 0 and CLIENT_VERSION_RC to 1 so the source identifies as v1.1.0-rc1, the first release candidate of v1.1.0, the release after v1.0.1 that adds the hybrid post-quantum v2 transport (#184). CLIENT_VERSION_IS_RELEASE stays true: 1.1.0 is a release line, so candidate binaries carry no commit suffix, as for v1.0.0 and the v1.0.1 candidates. CMake appends "-rc1" to CLIENT_VERSION_STRING, so every binary reports v1.1.0-rc1, the user agent becomes /qbit:1.1.0-rc1/, and the Windows installer metadata and the RPC docs manifest's project version derive from the same string. The Guix archive name comes from the v1.1.0-rc1 tag itself. Regenerate the seven manual pages with contrib/devtools/gen-manpages.py (help2man 1.49.3) from a build of this tree with the GUI, the wallet and every tool. Besides the version and date lines, qbitd.1 and qbit-qt.1 gain -v2pqtransport, which #184 added as a connection option. The other options #184 added (-mlkemportable and the regtest-only -test values) are debug options that only -help-debug lists, so the pages don't show them. util_tests/test_FormatSubVersion expected the "Test" client name to format as CLIENT_VERSION_STRING, which fails for every version with a release-candidate suffix: FormatSubVersion uses that string only for the qbit user agent and formats any other name numerically. Apply the same fix as the v1.0.1-rc1 preparation (#181), byte for byte, so that merging 1.x.x into 1.1.0 brings an identical change: expect the numeric form built from the version components. The qbit user-agent checks on the next lines still cover CLIENT_VERSION_STRING. Refs #222 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add doc/release-notes-1.1.0.md in the structure of the v1.0.1 notes (#181). It covers every change merged to 1.1.0 since it branched from 1.x.x at 45e9e72: the hybrid post-quantum v2 transport, with the parts and fixes merged through #233 (#223 to #254), and #249. Behavior changes come first: the hybrid transport is on by default, how to switch it off, the numeric -v2pqtransport value, the single I2P session-creation limit and qbit-photon's OpenSSL configuration loading. A compatibility table states how v1.1.0 nodes connect with v1.0.0 and v1.0.1 nodes and over v1, in both directions, as p2p_v2_previous_release.py and rpc_pqtransport.py test it. Known limitations summarize the release fuzz campaign and the limits its report on #222 states, the basis of the load-shedding threshold, the portable ML-KEM code on AArch64 Linux, and the unsigned-platform waiver (#70). The only performance figures are the handshake benchmark results published in #240. Fold in and delete the 1.1.0 fragments doc/release-notes-223.md, -240.md and -249.md, and point the specification's and the operator guide's release-note links at the new notes' hybrid transport section. The v1.0.0 and v1.0.1 fragments are left alone. The notes say that v1.1.0 contains every change in v1.0.1. That holds once 1.x.x is merged into 1.1.0 after v1.0.1 ships; the short "Changes in v1.0.1" section then gains a link to the v1.0.1 notes. Refs #222 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The comment on DEFAULT_PQ_SHED_THRESHOLD_PER_S said that the release gate's flood measurement (#222, R3) would set its final value. R3 was settled with CPU benchmarks of the handshake instead, and the threshold stays at 1,000 offers per second, as the v1.1.0 release notes say. Say so, so the comment no longer points at a change that is not coming. Refs #222 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. Hooray! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
#255 merged into 1.1.0 after the notes were drafted. It adds generated seeds to the required fuzz corpus for the hybrid transport's targets, so the test section now cites it alongside the earlier seed changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Codex Review: Didn't find any major issues. Hooray! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Summary
This PR prepares v1.1.0-rc1 from
1.1.0for the hybrid post-quantum v2 transport release (#184, gate #222). It is a draft until the maintainer checklist below is resolved.Mainnet posture gate for
1.1.0(ci: check mainnet publication posture for 1.1.0):mainnet_publish_gate_requiredonly for target branch1.0.0, so themainnet publication posturejob never ran for1.1.0. It now runs for1.0.0and1.1.0.if:and the Core Checks Gate both read that output, so a posture failure now blocks the gate for source and release-policy changes into1.1.0, including this PR.doc/release/release-process.md, which names the branches, is updated;doc/release-trust-1.0.0.mdis a historical record and is left alone.Version metadata (
build: bump version to v1.1.0-rc1):CLIENT_VERSION_MINOR=1,CLIENT_VERSION_BUILD=0andCLIENT_VERSION_RC=1.CLIENT_VERSION_IS_RELEASEstaystrue, as in release: prepare v1.0.1 #181.qbitd.1andqbit-qt.1gain-v2pqtransport, exactly as-helpprints it.-mlkemportableand the new-testvalues are debug options that only-help-debuglists, so the pages don't show them.util_tests/test_FormatSubVersionfix is release: prepare v1.0.1 #181's hunk, byte for byte (same resulting blob,d3317cbe1a), so merging1.x.xlater brings an identical change.Release notes
doc/release-notes-1.1.0.md(doc: draft v1.1.0 release notes):1.1.0since it branched from1.x.xat45e9e72c2d: the parts and fixes merged through Hybrid post-quantum v2 transport (#184) — integration #233 (i2p: request post-quantum leasesets (6,4) and retry once with 4,0 on explicit rejection #223 to test: end a failed v2 handshake without resetting the connection #254, per its tables) and depends: upgrade OpenSSL for photon from 3.0.15 to 3.5.9 #249.-v2pqtransportvalue, the single I2P session-creation limit (i2p: request post-quantum leasesets (6,4) and retry once with 4,0 on explicit rejection #223, i2p, test: steady SAM creation deadline, test framework fixes #246), andqbit-photonno longer loading OpenSSL engines or providers (depends: upgrade OpenSSL for photon from 3.0.15 to 3.5.9 #249).p2p_v2_previous_release.pyandrpc_pqtransport.pytest it.release-notes-223.md,-240.mdand-249.mdare folded in and deleted. The operator guide's and the specification's three links torelease-notes-240.mdnow point at the new notes'#hybrid-post-quantum-v2-transportsection. The v1.0.0 fragments (95, 102, 128, 132) and the v1.0.1 fragments (150, 151) are left alone.A stale comment (
net: say how the load-shedding threshold was set):DEFAULT_PQ_SHED_THRESHOLD_PER_Ssaid release: hybrid v2 transport release gate and default-on (#184 part 9) #222's flood measurement (R3) would set its final value. R3 was settled with CPU benchmarks, and the threshold stays at 1,000 per second, as the notes say.Maintainer checklist (must be resolved before tagging or publishing)
The publisher does not enforce any of this: it only checks that the notes file is UTF-8.
1.x.xafter v1.0.1 ships. Merge1.x.xinto1.1.0, then rebase this PR.CMakeLists.txt(keep1.1.0-rc1) and in the seven man pages: regenerate them from the merged tree. Thetest_FormatSubVersionhunk is identical on both sides. release: prepare v1.0.1 #181 deletes the 150 and 151 fragments, and the merge brings that deletion.1.x.xafter1.1.0branched.1.1.0already contains v1.0.1's code changes, because it branched from1.x.xafter them. So if rc1 has to be tagged before v1.0.1's notes are published, first fold v1.0.1's behavior changes into these notes instead of pointing to them.release-notes-1.0.1.mdand add a short section with its behavior changes (the-fallbackfeedefault wallet: default -fallbackfee to the minimum relay fee #151, fee-onlysendentries wallet: show fee-only change-only self-transfers #150, and theencryptwalleterror code wallet: close races around CWallet::EncryptWallet #183). The notes already say v1.1.0 contains every v1.0.1 change; that holds only after this merge.1.1.0before the rc1 tag, or record that it follows rc1. It adds generated fuzz seeds only. Re-check1.1.0for other new merges before tagging.testnet4soak across platforms, on the release candidate.-v2pqtransportbullet under "Hybrid post-quantum v2 transport";-v2pqtransport's help text, which prints(default: 1), so theqbitd.1andqbit-qt.1pages must be regenerated;v1.1.0-rc1is tagged, open a PR addingdoc/release-trust-1.1.0-rc1.mdto1.1.0, followingdoc/release-trust-1.0.0.mdand release: prepare v1.0.1 #181's checklist. Its merge commit becomes thetrusted_release_reffor publishing rc1. Repeat this for the final release.45e9e72c2dand include the release: fail closed when the release asset list cannot be read #170 publisher fix.contrib/keys/operator-keys/keys.jsonis unchanged (f04ae262…).mainnet publication posturejob on pull requests into1.1.0, so the trust doc can cite a run of it on the rc1 source.--prereleaseand an explicit--notes-filepointing to a publish-time copy ofdoc/release-notes-1.1.0.md. In that copy, "Release verification" carriesConforms to qbit P2MR v1 corpus <digest> on source commit <SHA>; independent oracle report <digest>., filled from the evidence run on the rc1 tag target (release-process.md steps 1–10).--allow-unsigned-platform-artifactsand do not pass--allow-codesigning-artifacts. If signing accounts are ready by then, remove the waiver from the notes.Testing
Built locally.
Ran focused unit or functional tests for the changed area.
Ran lint or formatting checks relevant to this change.
Not run. Reason:
Build: a Release build of this tree with the GUI (system Qt 6.10), the wallet, IPC and every tool.
qbitd,qbit-cli,qbit-tx,qbit-util,qbit-wallet,qbitandqbit-qtprintv1.1.0-rc1. A regtest node reportssubversion/qbit:1.1.0-rc1/andversion10100, and logsqbit version v1.1.0-rc1 (release build)andv2 pq: enabled arith=x86_64-avx2 keccak=x86_64-avx2.Mainnet posture: the job's two steps, run as written on a
v0.0.0-mainnet-posture-ci.<sha>annotated tag at the version-bump commit, pass:verify_mainnet_release_posture.pyreports no failures, andverify_mainnet_ci_posture.pyreports publication-ready for thefinalpolicy. The classify step's script givestruefor1.0.0and1.1.0with thesourceandrelease-policyprofiles, andfalseotherwise. The classifier puts this PR in thesourceprofile, so the job runs on it.Tests:
test_qbit --run_test=util_testspasses.interface_bitcoin_cli,feature_help,feature_uacomment,rpc_net(v1 and v2),feature_pq_quickstartandrpc_pqtransportpass.ci/release: 8 suites, 228 tests, pluscontrib/guix/test_build_config.py.test_verify_testnet_release_posture.pyneeds a git config without commit signing, as on CI runners, because it makes commits in temporary repositories.ci/checks: all 10 suites pass.Lints: actionlint 1.7.12 on
core-checks.yml,lint-qbit-public-docs,lint-pq-doc-tokens(141 tokens in 3 documents, with the binaries and from the sources), the P2MR integration-matrix test the public-docs job runs,generate-pq-transport-vectors.py --check,lint-files,check-doc, the classifier tests, a relative-link and anchor check of the changed docs, andgit diff --check.Notes review: each bullet was checked against its merged PR's description and, for numbers and names, against the code: the fallback windows, history caps, local-fault threshold, shedding threshold and quiet period, the I2P limit, the startup line, the RPC fields and the man-page help text.
Not run: the full unit and functional suites,
test_qbit-qt, Guix builds,mlc(not installed here; the relative-link check covers the changed links), codespell, and CI.Notes for reviewers:
/qbit:1.1.0-rc1/.1.1.0yet:ci-nightly-heavy,ibd-perf-manualandrpc-perf-manualuseMAINTAINED_BRANCH: 1.x.x. Full Validation runs the hybrid functional suite on changes that need it.Target Branch
mainor a maintainer-requested release branch such as0.1.x.Targets
1.1.0.Risk / Review Notes
Notes: this changes release metadata and one CI condition: the version and user agent, man pages, release notes and the mainnet posture gate's target branches. There are no code-behavior changes beyond the test expectation. The posture gate now runs on every source or release-policy PR into
1.1.0, so a later change that breaks the mainnet launch posture fails Core Checks there instead of at publication.Docs / Process Impact
Choose exactly one:
Refs #222 · Part of #184
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.