9717ddbd85
New chain.getOrgRouting(rootId, ownerIds) simulates the contract's _payUpline routing for every member below the org root on their NEXT upgrade, classifying where the POL lands: your positions, a teammate in-org (healthy), an outsider above the org (true LEAK), or fees. Surfaced on /api/admin/income and rendered as a panel in "My Positions — Income": 4-stat summary + expandable list of payments escaping the org. Distinguishes real leaks (money leaving the team) from teammates earning — which the old upgrade-needs alert conflated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>