mirror of
https://github.com/XRPLF/rippled.git
synced 2026-09-27 15:28:03 +00:00
The contract's parent field was documentation only, so no check could fail a span for being parented when it should be a root. A live sweep found three spans nested one level off while every harness check passed. The field becomes allowed_parents, a list derived per span from its creation factory and every call path that reaches it, and is asserted per span. A parent on another node and a parent absent from the trace are both inconclusive rather than violations: the receive spans are parented cross-node by design, and a rotation in flight has not exported its root yet. Spans reached by two call paths list every lawful parent. A second gate reads a round as a unit: every required phase child under the round span on the same node, their start times in protocol order, and no mode_change recording mode_old == mode_new. It selects traces that already hold the accept span, since that span always ends after the round span and can land in a later export batch. num_cleared leaves txq.batch_clear's required attributes: the code writes it only after the batch actually clears.