Skip to content
Bitcoin Roots

v31.1-roots.1 · Commit 10: [PATCH 10/17] docs(roots): record v31 contract preservation evidence

doc/roots-v31-port-review.md

Before: doc/roots-v31-port-review.md · After: doc/roots-v31-port-review.md

File metadata
index 2732a300ad5d2aeabe2a811531685bb69ba0bcbb..3c884d320c6e229806526260e86c8fe52dc7b9f5 100644

Download original patch · Release notes

Diff rows 401–502 of 502. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. Before is on the left; after is on the right. Unified view fits narrow screens more easily.

doc/roots-v31-port-review.md CHANGED
@@ -1007,3 +1018,353 @@ binary/tool-test/export hashes are local evidence under (continued)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1269
+
1270
+ ## L15.2 provenance, observed failures and approved handoff
1271
+
1272
+ The evidence-only working tree is based on implementation HEAD
1273
+ `8e7ffad5d932e07c0c80f3756f7c3a442786877e` and Core base
1274
+ `9be056a8a72b624dae9623b2f7bded92c2a21c91`. The current reuse check compares
1275
+ all eight L14 repair-source hashes, thirteen binary hashes, four build-cache
1276
+ hashes, 453 fixture hashes (389 functional, 60 maintained-tool, one native-stream
1277
+ and three Qt) and seventeen command-log hashes with the accepted repair snapshot.
1278
+ Matched evidence retains its original commands, skips and profile limitations;
1279
+ no full unit, functional, Qt or sanitizer suite was rerun for this documentation
1280
+ change. The older dynamic-dust arithmetic-closure pass remains historical,
1281
+ limited evidence and does not supersede the current failures below.
1282
+
1283
+ | Matched accepted evidence | Result and scope |
1284
+ | --- | --- |
1285
+ | Native unit suite | 774 passing cases. |
1286
+ | CTest | 156 passes; one external-assets skip. |
1287
+ | Functional suite | 278 passes; 17 prerequisite skips, detailed below. |
1288
+ | Qt5 and Qt6 | 22 passing result rows per major, including fresh-process persistence probes; no skips. |
1289
+ | Maintained tools | 125 passing cases. |
1290
+ | Stream ASan/UBSan smoke | 20 passing cases with leak detection disabled; prior bounded stream evidence only. |
1291
+ | Compact-block benchmark | Three one-iteration smokes; no throughput claim. |
1292
+
1293
+ The 17 functional skips comprise uncompiled benchmark and chainstate tools
1294
+ (two), missing Python ZMQ (one), disabled USDT tracepoints (five), unavailable
1295
+ previous releases (five), external routable-address prerequisites (two) and
1296
+ uncompiled IPC (two). Previous-release cases are
1297
+ `wallet_backwards_compatibility.py`, `mempool_compatibility.py`,
1298
+ `feature_unsupported_utxo_db.py`, `feature_coinstatsindex_compatibility.py` and
1299
+ `wallet_migration.py`; IPC cases are `interface_ipc.py` and
1300
+ `interface_ipc_mining.py`. The earlier functional benchmark skip remains recorded
1301
+ although a later configured benchmark build and three smokes passed.
1302
+
1303
+ ### Existing current-target diagnostic results
1304
+
1305
+ Before the reduced-verification instruction, the current-source local fast run
1306
+ completed all nine selected targets with five-second per-target budgets, seed 1,
1307
+ maximum input length 4096 and a 2048 MiB RSS limit. Its preserved result record
1308
+ reports **seven passes and two failures**, with no omitted target in that run:
1309
+
1310
+ | Target | Observed exit | Result |
1311
+ | --- | --- | --- |
1312
+ | `dynamic_dust_fee` | 1 | Fail: Boost multiprecision signed-bound conversion in the reference oracle reports unsigned-integer-overflow. |
1313
+ | `policy_args` | 1 | Fail: decimal-validator char conversion reports implicit-integer-sign-change at `src/test/fuzz/policy_args.cpp:37`. |
1314
+ | `process_message` | 0 | Pass within the bounded local run. |
1315
+ | `psbt` | 0 | Pass within the bounded local run. |
1316
+ | `script` | 0 | Pass within the bounded local run. |
1317
+ | `string` | 0 | Pass within the bounded local run. |
1318
+ | `subdust_fee_penalty` | 0 | Pass within the bounded local run. |
1319
+ | `tx_pool` | 0 | Pass within the bounded local run. |
1320
+ | `txgraph` | 0 | Pass within the bounded local run. |
1321
+
1322
+ These results belong to the existing local Clang 19 current-source build with
1323
+ `fuzzer,address,undefined,float-divide-by-zero,integer` instrumentation,
1324
+ `-ftrivial-auto-var-init=pattern` and IPC disabled. Hosted CI uses Clang 22;
1325
+ matching sanitizer names do not establish compiler/profile equivalence. The
1326
+ Boost diagnostic is in `cpp_int/misc.hpp:1303`, reached by the oracle conversion
1327
+ at `src/test/fuzz/tx_pool.cpp:574`; it is not a demonstrated production-policy
1328
+ failure. These observed failures are preserved, unresolved at the L15 tree,
1329
+ and cannot be relabeled as passing by using the older arithmetic-only binary.
1330
+ No failing input was replayed during this documentation reconciliation.
1331
+
1332
+ The preserved hosted observation for draft PR 49 is fuzz job `114814967702`
1333
+ in run `38249608708`, exit 1, with no uploaded per-target diagnostics. The
1334
+ historical hosted failing target remains unidentified. Existing inspection found
1335
+ per-target output in container scratch while artifact upload searched a host
1336
+ path; L16 owns diagnostic transport repair. The local failures do not establish
1337
+ the cause of that hosted failure. Hosted lint success is separate from the two
1338
+ accepted preexisting global include-lint findings disclosed above.
1339
+
1340
+ ### Reduced verification and remaining ownership
1341
+
1342
+ On 2026-10-12 the user explicitly removed further fuzz execution, sanitizer
1343
+ campaigns and saved-input reproducer replays from remaining work and acceptance.
1344
+ No hosted substitute is authorized for those omitted actions. Reduced coverage
1345
+ is an accepted limitation, not a passing result. The existing nine-target
1346
+ results and failure logs remain evidence; no new instrumented pass is required
1347
+ or asserted. Following the planned L16 repairs, the affected targets must be
1348
+ reported as **not rerun under instrumentation**.
1349
+
1350
+ L16 separately owns safe signed-bound handling including `INT64_MIN` in the
1351
+ independent dynamic-dust reference oracle, explicit decimal-validator character
1352
+ conversion, host-visible failure artifacts and bounded console diagnostics.
1353
+ Its required verification uses ordinary focused unit/maintenance/CI-helper tests,
1354
+ source review, relevant lint, matched prior full-suite evidence and portable
1355
+ export/replay parity. Neither production-policy changes nor broad sanitizer
1356
+ suppression are part of this disposition. Final candidate acceptance belongs
1357
+ to L16 followed by fresh terminal review; acceptance of L15 only approves the
1358
+ accuracy and integrity of this documentation.
1359
+
1360
+ Current documentation checks verify the complete source/author ledger, 25
1361
+ contract dispositions, local links, option documentation, whitespace and exact
1362
+ single-document dirty scope with an empty index. An isolated disposable clone
1363
+ snapshots the intended documentation tree for portable export/replay using
1364
+ `git am -3 --keep-cr`: product paths match that snapshot, `.github/**` remains
1365
+ excluded from the patch and at the Core base on replay, and Jaromil and
1366
+ devjoinedthechat credit remains present. All temporary snapshot commits, refs
1367
+ and the export fixture tag belong to that clone; candidate refs are unchanged.
1368
+ After an eventual accepted L15 commit, documentation tree/artifact identity is
1369
+ checked again. This is export integrity evidence, not release, signing,
1370
+ promotion, hosted-matrix or whole-candidate acceptance.