Skip to content
Bitcoin Roots

v31.1-roots.1 · Commit 2: [PATCH 02/17] feat(policy): preserve Roots parsing and local transaction checks

doc/feature-contracts/policy-parsing.md

Before: doc/feature-contracts/policy-parsing.md · After: doc/feature-contracts/policy-parsing.md

File metadata
index c646bfdb4e044ea02e58efdfbcd61a9eae1795dd..56bc4b7f24de486e995d038a448fc40fd9ace75d 100644

Download original patch · Release notes

Diff rows 1–58 of 58. 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/feature-contracts/policy-parsing.md CHANGED
@@ -1,10 +1,23 @@
1
  # Roots policy input compatibility
2
 
3
- **v31 candidate status: deferred.** This preserved contract describes the
4
- accepted 30.3 source, including its documented gaps; the foundation does not
5
- implement its Roots controls or RPC fields. Source code/test paths below refer
6
- to `10d772eb7f4b00b5193428a0dde4c06558d6c297`, not current candidate behavior.
7
- [The port review](../roots-v31-port-review.md) records ownership and current gates.
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  **Contract ID: policy-parsing.** Scope: startup input for the Roots-added local
10
  policy controls listed below. This contract supplements `runtime-config` and the
@@ -173,10 +186,12 @@ The matrix produced 127 clean startups/shutdowns, 30 expected startup diagnostic
173
  and the three existing runtime aborts described below. All 160 outcomes matched
174
  the source-derived characterization; an expected rejection is not a test failure.
175
 
176
- **Existing runtime gap:** non-off `dustdynamic` modes can parse successfully but
177
  abort startup because the mempool is constructed without its required scheduler.
178
  Parser acceptance does not prove these modes operate. This contract records that
179
- baseline failure; repairing scheduler wiring is a separate runtime change.
 
 
180
 
181
  Acceptance: policy_args_tests.cpp (`src/test/policy_args_tests.cpp`, source reference)
182
  `boolean_values`, `integer_boundaries`, `carrier_cost_compatibility`, `mode_tokens`,
@@ -247,3 +262,16 @@ probe failed before testing. GCC sanitizer compilation and execution succeeded.
247
  The executed campaigns therefore used corpus replay, including generated
248
  mutations, with no coverage-guided engine. A coverage-guided libFuzzer campaign
249
  remains an explicit evidence gap, and cannot be claimed from these replay counts.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # Roots policy input compatibility
2
 
3
+ **v31 candidate status: L7 implementation tested; final milestone review pending.** Scoped
4
+ grammar and local policy consumers are carried. `datacarriercost`,
5
+ `subdustfeepenalty`, `mempoolreplacement`, `mempooltruc`, `spkreuse` and
6
+ `dustdynamic` are parsing-only until L8; `blockmaxsize` and `blockprioritysize`
7
+ are parsing-only until L9. Help labels these staged controls and explicit use emits a startup warning;
8
+ acceptance of their syntax does not establish enforcement. Core's current
9
+ replacement/mining algorithms continue to operate meanwhile. Only integrated
10
+ Roots `confrw` precedence awaits L12; CLI, ordinary config and JSON settings
11
+ passed the L7.1 startup matrix. Candidate tests are
12
+ [`policy_args_tests.cpp`](../../src/test/policy_args_tests.cpp) and
13
+ [`feature_policy_args.py`](../../test/functional/feature_policy_args.py).
14
+ L7.2 carries the source
15
+ [`policy_args` fuzz target](../../src/test/fuzz/policy_args.cpp): Boolean and
16
+ integer independent grammar oracles, trailing-junk rejection, quarter-vbyte
17
+ canonical round trips, dynamic-mode syntax round trips, JSON types and raw
18
+ negation. Clang 19 ASan/UBSan/libFuzzer executed 103,911 inputs over 121 seconds
19
+ with seed 31 and no findings. This bounds the reported campaign, not all inputs.
20
+ Historical paths/results below are source evidence.
21
 
22
  **Contract ID: policy-parsing.** Scope: startup input for the Roots-added local
23
  policy controls listed below. This contract supplements `runtime-config` and the
 
186
  and the three existing runtime aborts described below. All 160 outcomes matched
187
  the source-derived characterization; an expected rejection is not a test failure.
188
 
189
+ **Historical source runtime gap (repair authorized for L8):** non-off `dustdynamic` modes can parse successfully but
190
  abort startup because the mempool is constructed without its required scheduler.
191
  Parser acceptance does not prove these modes operate. This contract records that
192
+ baseline failure; The user authorized a bounded L8 runtime repair with node-owned scheduling,
193
+ retry/shutdown lifetime safety, unavailable-estimate floor fallback and safe
194
+ multiplier scaling. It is not implemented by L7 parsing.
195
 
196
  Acceptance: policy_args_tests.cpp (`src/test/policy_args_tests.cpp`, source reference)
197
  `boolean_values`, `integer_boundaries`, `carrier_cost_compatibility`, `mode_tokens`,
 
262
  The executed campaigns therefore used corpus replay, including generated
263
  mutations, with no coverage-guided engine. A coverage-guided libFuzzer campaign
264
  remains an explicit evidence gap, and cannot be claimed from these replay counts.
265
+
266
+ ## Candidate split and current gates
267
+
268
+ L7 carries complete-token/negation/type/cost/mode syntax and local standardness,
269
+ carrier budgets, fixed dust and relay age/maturity. The native v31 cluster limits
270
+ and typed script flags remain intact. Mode-resolution/enforcement tests belong
271
+ L8, and template-normalization tests belong L9; their source assertions are
272
+ retained as explicit owning-theme gates, not represented as L7 passes.
273
+
274
+ `feature_policy_args.py` retains independently runnable CLI/config/JSON cases;
275
+ only its historical text read/write-config integration cases defer to L12.
276
+ `policy_args_tests` retains parser boundaries and local/ephemeral defaults.
277
+ Dynamic-dust grammar is tested without a runtime support claim.