release

r returns amount of unused entitlement up edge, restoring the parent's holdings. null if:

  • edge is unknown or divergent;

  • edge is not the child's live inbound edge — the pocket credited (returned(edge)) must be the same pocket the feasibility check reads (holdings(child), funded by the live inbound). Without this tie, a caller could gate on a child's live pocket yet credit an unrelated (prepared/retired) edge and mint holdings from nothing (breaks conservation, design §4.3). Because lineageEdges follows only live (active|closing) edges, this one check also refuses release across a prepared or retired edge — they are never the live inbound — while still admitting release across a closing edge so it can drain;

  • r's holdings at the child are insufficient.

Bumps returned(edge)[r].