v31.1-roots.1 · Commit 8: [PATCH 08/17] chore(roots): integrate v31 identity and maintenance tooling
doc/roots-v31-port-review.md
Before: doc/roots-v31-port-review.md · After: doc/roots-v31-port-review.md
File metadata
index 778324d7aa8c24174b1626fce8da5d44ee8f97b6..2732a300ad5d2aeabe2a811531685bb69ba0bcbb 100644
Download original patch · Release notes
Diff rows 1–190 of 190. Line numbers refer to the original before/after files.
+ Added− RemovedUnmarked lines are context.
Scroll the code area horizontally to read long lines. The two line-number columns refer to before and after.
doc/roots-v31-port-review.md
CHANGED
|
@@ -820,3 +820,190 @@ macOS, BSD and 32-bit execution are not proved by these runs; their conditional
|
|
|
820
820
|
branches are retained from the source/native APIs, with the Windows file-size
|
|
821
821
|
comparison expressed through `LARGE_INTEGER::QuadPart`. Whole-L12 acceptance
|
|
822
822
|
and broader platform/runtime matrices remain separate gates.
|
|
823
|
+
|
|
824
|
+
## L13.1 identity and desktop integration
|
|
825
|
+
|
|
826
|
+
The candidate retains Roots client identity, source/issue URLs and original
|
|
827
|
+
Roots PNG/ICO/ICNS/SVG/splash assets from `c592888088`. The Windows resource path
|
|
828
|
+
correction (`25f889f97e`) uses a configured resource file with absolute build-time
|
|
829
|
+
asset paths. Upstream protocol/legacy file names remain unchanged; this is not
|
|
830
|
+
mass rebranding. Core and Knots lineage remains explicit in the candidate README,
|
|
831
|
+
and binary copyright output retains Bitcoin Core credit alongside Roots.
|
|
832
|
+
Jaromil and devjoinedthechat source credit is retained in the thematic mapping.
|
|
833
|
+
|
|
834
|
+
The release version block from `7791eede50` now checks the selected `31.1` base:
|
|
835
|
+
untagged/default builds identify `v31.1-roots.1`; valid `CLIENT_VERSION_TAG`
|
|
836
|
+
values provide `v31.1-roots.<positive revision>` identity without Git metadata.
|
|
837
|
+
Numeric protocol versions and BIP14 `Satoshi` remain upstream-compatible.
|
|
838
|
+
`roots_build_identity` exercises the actual production CMake block: default,
|
|
839
|
+
two valid tag revisions, and five wrong-base/invalid-tag cases. The six headless
|
|
840
|
+
tools and actual Qt6 GUI identify Bitcoin Roots in captured `--version` output.
|
|
841
|
+
These are local candidate build names, not published release claims.
|
|
842
|
+
|
|
843
|
+
QR export retains the quiet zone, adds font-aware caption layout and updates
|
|
844
|
+
receive QR images on the money-font setting signal. The QString-size correction
|
|
845
|
+
from `3e13c1f213` uses the native Qt5/Qt6 size type. Qt apptests check Roots
|
|
846
|
+
icon/splash resources, PNG round-trip, clipboard export and quiet-zone geometry.
|
|
847
|
+
The wallet fixture drives the actual receive dialog's Save Image action into a
|
|
848
|
+
temporary PNG, compares it to the displayed export image, and checks refresh
|
|
849
|
+
through the production money-font setting. Keys, settings and regtest data are
|
|
850
|
+
disposable; no real wallet or network broadcast is involved.
|
|
851
|
+
|
|
852
|
+
Windows taskbar progress is carried behind `WITH_TASKBAR_PROGRESS`, enabled
|
|
853
|
+
only for Windows GUI builds. It registers/removes the native event filter with
|
|
854
|
+
the window lifetime and clears progress at synchronization completion. Qt5/Qt6
|
|
855
|
+
use their respective native-filter signatures. Linux configurations generate an
|
|
856
|
+
undefined taskbar macro; local tests do not establish Windows COM/event behavior.
|
|
857
|
+
Windows/macOS/32-bit runtime and cross-build evidence remains unavailable.
|
|
858
|
+
|
|
859
|
+
Example configuration is generated by the inherited generator from this exact
|
|
860
|
+
candidate's isolated `bitcoind --help` output and passes byte-identical repeat
|
|
861
|
+
regeneration. The selected profile has wallet enabled and IPC/USDT/ZeroMQ
|
|
862
|
+
disabled; its generated output omits the inherited optional ZeroMQ section.
|
|
863
|
+
This omission describes the tested help profile and does not retire ZeroMQ
|
|
864
|
+
support. No older source help/config content was copied into the generated file.
|
|
865
|
+
After the missing generator was installed externally, all seven manuals were
|
|
866
|
+
regenerated using the existing `contrib/devtools/gen-manpages.py` and GNU
|
|
867
|
+
help2man 1.49.3. Isolated wrappers invoke the unchanged tested headless binaries
|
|
868
|
+
and Qt6 GUI; daemon/wallet/GUI help has an explicit disposable regtest datadir.
|
|
869
|
+
The generator uses `LC_ALL=C` and `SOURCE_DATE_EPOCH=1791755546` (the starting
|
|
870
|
+
candidate commit timestamp). A second generation into a temporary directory
|
|
871
|
+
matches all seven manuals byte for byte. The manuals retain Bitcoin Core
|
|
872
|
+
copyright alongside Roots and contain no local wrapper/datadir paths. No manual
|
|
873
|
+
was hand-edited. Like the example config, they reflect the tested no-ZeroMQ
|
|
874
|
+
profile rather than proving optional-library availability.
|
|
875
|
+
|
|
876
|
+
Exact focused commands, build/binary/source hashes, result counts and the
|
|
877
|
+
receive/export evidence matrix are recorded below as local verification evidence;
|
|
878
|
+
L13.2 maintenance and the full L13 acceptance suite remain separate gates.
|
|
879
|
+
|
|
880
|
+
Focused L13.1 evidence on the uncommitted tree starting at `44c15f2cde`:
|
|
881
|
+
|
|
882
|
+
- `cmake --build <profile> --target bitcoin-qt test_bitcoin-qt -j 2`
|
|
883
|
+
passed for the existing actual Qt5 and Qt6 profiles. The headless profile
|
|
884
|
+
built `bitcoin bitcoind bitcoin-cli bitcoin-tx bitcoin-wallet bitcoin-util`.
|
|
885
|
+
- `python3 test/cmake/test_identity.py -v` passed 3 tests;
|
|
886
|
+
`ctest --test-dir <headless-profile> -R roots_build_identity --output-on-failure`
|
|
887
|
+
passed its one registered test.
|
|
888
|
+
- The actual `test_bitcoin-qt` binary passed 21 result rows, including
|
|
889
|
+
initialization/cleanup, in each of eight Xvfb profiles: Qt5/Qt6 × 1280×800/
|
|
890
|
+
1920×1080 × 100%/150% application font scale. `QT_SCALE_FACTOR=1` is retained;
|
|
891
|
+
this is font scaling evidence, not physical DPI scaling. Each run has a
|
|
892
|
+
60-second timeout and isolated XDG settings/runtime data.
|
|
893
|
+
- Each profile records receive controls, the receive QR dialog and the PNG
|
|
894
|
+
save chooser at the full screen dimensions, plus the actual exported QR PNG:
|
|
895
|
+
24 screenshots and 8 exported images. The save chooser uses Qt's non-native
|
|
896
|
+
dialog for deterministic automated interaction. Screens retain preceding
|
|
897
|
+
test widgets in the background; their synthetic balances are fixture facts.
|
|
898
|
+
Representative Qt5/Qt6 receive views at 1280×800/150%, the Qt6 save chooser,
|
|
899
|
+
and the exported QR at 1920×1080/150% were visually inspected: the affected
|
|
900
|
+
payment text, QR caption and Save/Copy/OK actions were readable.
|
|
901
|
+
- `BITCOIND=<isolated-candidate-help-wrapper> bash contrib/devtools/gen-bitcoin-conf.sh`
|
|
902
|
+
regenerated the example config; a second generation into a temporary file
|
|
903
|
+
compared byte for byte. The wrapper passes an explicit disposable regtest
|
|
904
|
+
datadir. An initial unwrapped help invocation hit the read-only default
|
|
905
|
+
wallet directory and did not produce valid help; only the corrected isolated
|
|
906
|
+
invocation supplies this generated file and current help evidence.
|
|
907
|
+
- `BUILDDIR=<isolated-candidate-help-wrappers> HELP2MAN=/usr/bin/help2man
|
|
908
|
+
QT_QPA_PLATFORM=offscreen XDG_CONFIG_HOME=<isolated-settings>
|
|
909
|
+
SOURCE_DATE_EPOCH=1791755546 LC_ALL=C python3 contrib/devtools/gen-manpages.py`
|
|
910
|
+
generated all seven manuals. Repeat generation with `MANDIR=<temporary-directory>`
|
|
911
|
+
and byte comparison passed 7/7; current version, retained credit and absence
|
|
912
|
+
of local-path leakage were checked in each file. Generated differences are
|
|
913
|
+
candidate version/date/URLs/credit, current Roots help/defaults and omission
|
|
914
|
+
of the unsupported-in-this-profile optional ZeroMQ section.
|
|
915
|
+
- `python3 test/lint/check-doc.py` and `git diff --check` passed.
|
|
916
|
+
|
|
917
|
+
Local `.gestalt/l13-integration` evidence includes exact commands/results,
|
|
918
|
+
`l13.1-snapshot.json` with source/binary SHA256s, and
|
|
919
|
+
`l13.1-gui-snapshot.json` with image SHA256s/dimensions and all eight result
|
|
920
|
+
counts. This focused evidence does not substitute for the later full L13 suite,
|
|
921
|
+
Windows/macOS/32-bit tests or optional ZeroMQ/IPC/USDT profiles. On resumption,
|
|
922
|
+
31 previous source paths, 22 binaries and all 32 identity images matched their
|
|
923
|
+
recorded hashes; unchanged GUI and focused test evidence was reused.
|
|
924
|
+
|
|
925
|
+
## L13.2 maintenance, portable export and CI cadence
|
|
926
|
+
|
|
927
|
+
This adaptation retains the source classifier, exact canonical-promotion CI
|
|
928
|
+
proof, conservative nightly change gate, strict APT refresh, release-source/tag
|
|
929
|
+
validation, archive/COPYING checks, portable export/replay, optional notice
|
|
930
|
+
helpers, required manifest signing and new-draft-only tools. The checked-in
|
|
931
|
+
public key and expected fingerprint remain unchanged. Only a permanent tag
|
|
932
|
+
push can enter the signing environment; manual rehearsal has read-only
|
|
933
|
+
permissions, requires an absent future tag and cannot create a release. Signing
|
|
934
|
+
capability, signature/source mismatch and any existing draft/public release
|
|
935
|
+
still fail. No dispatch, publishing, remote ref mutation or signing with a real
|
|
936
|
+
secret was performed locally.
|
|
937
|
+
|
|
938
|
+
The remaining maintenance-only history is folded by responsibility:
|
|
939
|
+
|
|
940
|
+
| Source commits | Candidate disposition |
|
|
941
|
+
| --- | --- |
|
|
942
|
+
| `5c210e17fb`, `9f1780f330`, `4570a6a547` | Adapted CI/platform/assurance entry points and maintained fixtures; retain v31 native cache actions, compiler profiles, build script and test runners. Feature-owned code/tests stay in their earlier themes. |
|
|
943
|
+
| `9da5851410`, `26b691e4f3`, `201927c151`, `e819a07a4a`, `56e2894760` | Adapted additive classification, conservative scheduled-change gate, strict APT retry, optional-feature selection and branded archive checks. Broad platform jobs move to nightly/manual; no optional capability is retired. |
|
|
944
|
+
| `83fa42a963`, `f5182f0e3a`, `7791eede50`, `11c84c39ef`, `0efa437e29`, `f2595557d9`, `38bc7ec2ce`, `df8aa8e2b7`, `ddae467a78`, `778ff50d19`, `c474825f96`, `17e1d484ab` | Kept/adapted final release-source/rehearsal, five-platform archives, COPYING, portable replay, trusted signing/new-draft-only and promotion-proof safeguards. Corrective source history is folded; expanded notices remain optional/deferred. The configured-version sub-aspect is also preserved in L13.1. |
|
|
945
|
+
| `b0b235d6a1`, `f4066e5282`, `30f673a4bc`, `a13f28e2f4`, `1517d925b2`, `628bdf4e38`, `02464df449`, `089888acdd` | Adapted relevant candidate identity, maintained workflow guidance, provenance and credit; existing upstream release notes remain historical. Final aggregate/range evidence stays L14. |
|
|
946
|
+
| `1b73fe3d21`, `ec9db369f5`, `c592888088`, `9b778b9a23` | Remaining CI/build/GUI assertions are carried or adapted to v31 paths and the accepted owning-feature implementations; semantic source content is not reintroduced as a second chronological series. |
|
|
947
|
+
|
|
948
|
+
PR/development execution now uses the existing `ci/test_run_all.sh` and native
|
|
949
|
+
runners with a small affected-regression selector. Complete known paths select
|
|
950
|
+
wallet, network, policy/mining and runtime acceptance groups; mixed changes take
|
|
951
|
+
the union and incomplete/unknown paths choose broad fast coverage. Fast
|
|
952
|
+
functional execution is bounded at 900 seconds; selected libFuzzer smoke uses
|
|
953
|
+
5 seconds/target and a 15-second outer timeout. The nine possible smoke targets
|
|
954
|
+
have fixed seed 1 and per-input limits; input counts are results, not quotas.
|
|
955
|
+
The standalone selector also exposes a 60-second/target, 75-second outer
|
|
956
|
+
nightly campaign and a 7200-second selected-functional budget.
|
|
957
|
+
|
|
958
|
+
Scheduled/manual assurance retains full ASan/USDT/Qt, TSan/MSan, full Linux,
|
|
959
|
+
macOS and Windows fuzz corpora, extended/previous-release tests, tidy, i686
|
|
960
|
+
no-IPC, ARM32, kernel and native Windows/macOS smokes. Linux full-corpus replay
|
|
961
|
+
also runs the longer selected campaigns. Ordinary PRs have actual Qt tests,
|
|
962
|
+
fast native sanitizers/affected regressions and bounded fuzz smoke; explicit
|
|
963
|
+
labels can still request fresh heavy coverage. Every selected required PR job
|
|
964
|
+
must succeed. Nightly jobs with empty selected matrices are skipped before
|
|
965
|
+
strategy expansion; failed/incomplete schedule history retries. Explicit job
|
|
966
|
+
budgets and failure artifacts are documented in [CI guidance](/ci/README.md).
|
|
967
|
+
|
|
968
|
+
The v31 action/preset adaptations include current cache-action paths, LLVM 22
|
|
969
|
+
profiles, the upstream i686 no-IPC profile and VS2026 static builds. Windows
|
|
970
|
+
GUI jobs explicitly select the optional `miniupnpc` vcpkg feature when requiring
|
|
971
|
+
that library. Wallet-only Windows fuzz manifests explicitly disable ZMQ. The
|
|
972
|
+
vcpkg baseline is unchanged. Actual Windows/macOS/32-bit and hosted CI jobs were
|
|
973
|
+
not executed locally; static command/dependency checks do not establish their
|
|
974
|
+
success. No dependency was installed by this executor.
|
|
975
|
+
|
|
976
|
+
Focused local verification:
|
|
977
|
+
|
|
978
|
+
- Maintained source-tool tests cover classifiers, promotion proof, schedule
|
|
979
|
+
gates, release source/tag/absence checks, archives/COPYING, optional notices,
|
|
980
|
+
signing and new-draft refusal. The maintained suite passed 124 cases;
|
|
981
|
+
after narrowing the mempool-argument selection, its six affected behavioral
|
|
982
|
+
cases passed (125 current cases in aggregate with unchanged remaining tests).
|
|
983
|
+
- New tests execute actual nightly selector and required-result Bash blocks,
|
|
984
|
+
plus affected selection/union/fallback, fast/nightly command budgets, real
|
|
985
|
+
process timeout and retained failure logs. All pass. Parsed workflow YAML,
|
|
986
|
+
dependency references/local actions and embedded Bash syntax validate locally.
|
|
987
|
+
`actionlint` is unavailable; no hosted workflow was dispatched.
|
|
988
|
+
- The actual budget runner executed three wallet scripts successfully, then
|
|
989
|
+
the conservative fallback for the mempool-argument path executed all 16 Roots
|
|
990
|
+
scripts successfully. Its final narrower policy/mining/runtime selection is
|
|
991
|
+
covered by the six behavioral cases and those matching native test passes.
|
|
992
|
+
Tested product binaries and functional fixtures were unchanged.
|
|
993
|
+
- The new fast native ASan/UBSan profile configured on local Clang and built
|
|
994
|
+
`bitcoin_clientversion`; this bounded probe is not a full sanitizer-profile
|
|
995
|
+
pass. Sixteen changed shell scripts passed `bash -n` and ShellCheck.
|
|
996
|
+
- Temporary export verification snapshots the exact uncommitted candidate in
|
|
997
|
+
a disposable local clone, validates against authenticated v31.1 commit
|
|
998
|
+
`9be056a8a72b624dae9623b2f7bded92c2a21c91`, and invokes the actual
|
|
999
|
+
`create-patch-series.sh`. Its internal `git am -3 --keep-cr` replay matches
|
|
1000
|
+
the snapshot outside `.github/**`; Core's `.github/**` tree is unchanged.
|
|
1001
|
+
Exported content retains Jaromil/devjoinedthechat credit. Synthetic snapshot
|
|
1002
|
+
commits/refs/tags exist only in the disposable fixture; candidate/source refs,
|
|
1003
|
+
index and history remain unchanged.
|
|
1004
|
+
|
|
1005
|
+
Exact commands, pass counts, intended cumulative/delta paths and current source,
|
|
1006
|
+
binary/tool-test/export hashes are local evidence under
|
|
1007
|
+
`.gestalt/l13-integration`. L13.1 GUI/capture/manual evidence remains unchanged
|
|
1008
|
+
and is reused. Full L13 acceptance and the final candidate/hosted matrix remain
|
|
1009
|
+
later gates, rather than being inferred from these focused checks.
|