spendCaptured

Charge amount of completed service by r against a path captured earlier (design §4.4 / §10.4: "charge every edge of the path captured at reservation; history never moves to a newer generation"). Unlike spend, this does not recompute the lineage or re-check isLeaf/holdings from the current topology — it charges the exact capturedPath edges directly: leafSpent on the captured final edge and rollupSpent on every captured strict-prefix edge.

This is always valid because records are immutable and the spend counters are monotone: the historical generation the work was admitted under still exists and can still be charged, even if the child's lineage has since been reparented, quarantined (LedgerConflict.DualActiveInbound), or gained a child (so the former leaf is no longer isLeaf). Those concurrent reshapes make spend return null or throw; a completion must never be silently dropped, so the node charges the captured path.

null only for a structurally-impossible capturedPath (empty — a root leaf has no edge to charge); the caller must surface that, never swallow it. amount 0 is a no-op cancel; negative is rejected.