{"statusCode":200,"message":"OK","data":{"version":"staging_660cc8d_feat(rkas): track held and used funds per RKAS line\n\nProposals had no link to the RKAS line they draw from, so remaining funds\nwere computed as \"this line's budget minus every funded proposal the maker\nowns\" — one proposal shrank every line at once.\n\nAdds a ledger to activity_budgets: budget_held for proposals still moving\nthrough the approval chain, budget_used for what a releaser has settled.\nRemaining is budget - held - used, computed per line.\n\nHolds are taken when a proposal is created, adjusted on edit, released on\ndelete, and settled when a releaser approves. Every one of those runs in a\ntransaction with the RKAS row locked, since two proposals submitted at the\nsame time both pass a frontend check against the same figure.\n\nThe releaser now decides what the line is left with: activityBudgetLeft is\nthe absolute remainder, matching what the reviewer reads on screen. Left\nunsent, the line is cut by the amount the maker asked for, so a trimmed\napproval turns the difference into efficiency rather than budget that can\nbe claimed again.\n\nThe migration backfills existing rows: proposals are matched to their line\nby owner and name, running ones re-take their hold, and lines past the\nreleaser count as used.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>"}}