Skip to content
Bitcoin Roots

v31.1-roots.1 · Commit 11: [PATCH 11/17] fix(test): bound policy oracles and retain CI diagnostics

doc/roots-v31-port-review.md

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

File metadata
index 3c884d320c6e229806526260e86c8fe52dc7b9f5..585a1ca3dfd840536b5abed0ce4223a74a2f1a97 100644

Download original patch · Release notes

Diff rows 1–88 of 88. 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
@@ -1368,3 +1368,88 @@ 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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.
1371
+
1372
+ ## L16.1 ordinary oracle and diagnostic repair evidence
1373
+
1374
+ The test-only decimal validator now iterates the `char` representation supplied
1375
+ by `std::string_view` and rejects everything outside ASCII `0` through `9`
1376
+ before converting a digit. The independent dynamic-dust oracle keeps its
1377
+ multiprecision multiplication, floor division and clamping. Its final signed
1378
+ conversion handles both bounds explicitly, returns `INT64_MIN` directly and
1379
+ converts only representable positive magnitudes before applying a negative sign.
1380
+ Neither oracle calls the production parser or scaling implementation to derive
1381
+ its expected result. Production policy is unchanged.
1382
+
1383
+ The shared test-only helpers are covered by `roots_policy_oracle_tests.cpp`,
1384
+ registered in the native unit target. The same two ordinary Boost test cases
1385
+ were built and run in an isolated executable, with both signed and unsigned
1386
+ `char` defaults, preserving the established candidate build trees and binaries.
1387
+ They cover signed limits and adjacent values, saturation, negative floor
1388
+ division, decimal grammar/overflow and all 256 byte values, including embedded
1389
+ NULs. This is focused ordinary coverage, not execution of a fuzz target.
1390
+
1391
+ CI now forwards and bind-mounts an explicit `ROOTS_ARTIFACTS_DIR` at the same
1392
+ host/container path. Command logs, result JSON and crash artifacts use that
1393
+ directory, as do workflow uploads. Failure summaries identify the command or
1394
+ target, exit status and full log path, with a bounded tail; complete output is
1395
+ retained in the artifact. Ordinary helper fixtures demonstrate the generated
1396
+ mount/environment contract, host-visible failed-run output and result files,
1397
+ timeout handling and bounded summaries. They mock Docker and do not establish
1398
+ an actual hosted upload or hosted test pass.
1399
+
1400
+ The original seven-pass/two-failure local result and historical hosted failure
1401
+ above remain unchanged evidence. `dynamic_dust_fee` and `policy_args` are
1402
+ **not rerun under instrumentation**. No further fuzz execution, sanitizer
1403
+ campaign, saved-input replay or hosted substitute was performed. The old fuzz
1404
+ binary therefore does not contain these repairs; its prior results cannot be
1405
+ reused as passing verification of the changed oracle sources. L16.2 owns the
1406
+ remaining ordinary candidate gates and provenance reconciliation before review.
1407
+
1408
+ ## L16.2 reduced candidate gates
1409
+
1410
+ The repair starts from accepted L15 commit
1411
+ `0c0d2f1bf2e70f85e93423b61d1acd9b0b327578`. Current ordinary maintenance
1412
+ verification runs all **128 cases** successfully, superseding the earlier
1413
+ 125-case result for that scope. Both isolated ordinary oracle cases pass with
1414
+ signed and unsigned `char` defaults. Fresh uninstrumented CMake configuration
1415
+ also registers `roots_policy_oracle_tests` in the native CTest manifest; this
1416
+ configuration check does not claim a rebuilt full native test executable.
1417
+
1418
+ Reconciliation matches all eight accepted repair-source hashes, thirteen
1419
+ binary hashes, four cache hashes and seventeen prior command-log hashes.
1420
+ All 389 functional fixtures, the native-stream fixture and three Qt fixtures
1421
+ match. Of 60 maintenance fixtures, six changed CI/helper files are covered by
1422
+ the fresh full maintenance run; 54 retain matching hashes. Production sources
1423
+ are unchanged since accepted L14. The earlier 774 native cases, 156 CTest
1424
+ passes plus one skip, 278 functional passes plus 17 skips, 22 Qt result rows
1425
+ per major and three benchmark smokes retain their original tested scope and
1426
+ limitations. The added native suite is verified separately rather than being
1427
+ claimed as part of those older binaries. Prior stream sanitizer evidence is
1428
+ preserved as historical coverage, without another instrumented run.
1429
+
1430
+ Current documentation, shell lint, header guards, Python syntax, scoped
1431
+ include checks and whitespace checks pass. The preexisting global include
1432
+ findings remain: duplicate `QTimer` and the missing `cpp_int.hpp` allowlist
1433
+ entry. The new ordinary oracle unit tests use that same existing Boost
1434
+ multiprecision dependency; this is explicitly not a clean global include-lint
1435
+ claim.
1436
+
1437
+ Portable export/replay uses an isolated eleven-commit snapshot of the exact
1438
+ seventeen-file repair scope, including both new C++ files. Staged snapshot
1439
+ blobs match the working-tree files. `git am -3 --keep-cr` reproduces every
1440
+ product path, excludes `.github/**` from the patch and leaves Core hosting
1441
+ files unchanged. Source accounting remains 72 exact commits/authors and 25
1442
+ contract dispositions, including the accepted L7 build gap and L8–L13 trailer
1443
+ exceptions. All snapshot commits, refs and the fixture tag exist only in a
1444
+ disposable clone; protected candidate/source refs and accepted history are
1445
+ preserved.
1446
+
1447
+ A read-only hosted refresh still finds draft PR 49 at remote head
1448
+ `8e7ffad5d932e07c0c80f3756f7c3a442786877e`, with historical PR Tests run
1449
+ `38249608708` completed unsuccessfully. The local L15 documentation and L16
1450
+ repairs have no hosted test result. No omitted campaign or substitute job was
1451
+ dispatched. Final acceptance uses the approved reduced scope: the original
1452
+ seven-pass/two-failure record remains, the two repaired targets are **not rerun
1453
+ under instrumentation**, and the hosted failure's underlying cause remains
1454
+ unidentified. L16 review/commit and a later independent terminal review remain
1455
+ separate gates; this evidence does not authorize publication or promotion.