← All solutions

The Unpaid Collaborators — Musify solution

Musify's September bank transfers all settled, but collaboration artists received less cash than their royalty allocations. The September disburser applied each artist's contractual share to an amount that had already been split for that artist. Solo works passed staging because a 100% share remains unchanged when applied twice.

Find the affected cohort

In the Laya workbench, ask a typed choice question over the support inbox: distinguish a settled transfer with a short amount from an absent transfer, a delayed statement, and a contractual hold. Inspect the classified examples rather than taking probabilities as proof. The short-cash reports lead to artists art-ava, art-noah, art-lee, and art-zoe.

The ledger confirms those transfers are settled. The provider did its job; it had no knowledge of Musify's royalty entitlement.

Reconcile the royalty math

Read royalty_allocations, payout_ledger, and works in the SQL console. Each allocated_cents value is already the work pool multiplied by share_bps / 10000.

Work Artist allocation Settled cash Unpaid difference
The Static Between Us — Ava 6000 3600 2400
The Static Between Us — Noah 4000 1600 2400
Midnight Sketch — Lee 10000 8000 2000
Midnight Sketch — Zoe 2500 500 2000

All amounts are cents. The four differences total 8800 cents. Each settled cash amount is the artist allocation multiplied by the artist's share once more.

Check the controls before changing anything: the September solo work paid in full; the older August collaboration paid correctly on the previous disburser; and Paper Moon's lower cash amount is explained by a 1500-cent contractual hold. The EUR quote is irrelevant to these USD statements.

Fix future payouts and existing underpayments

The disburser must use the artist allocation directly. Do not modify the ingest service, allocation evidence, or transfer idempotency. The bank has already settled the original transfers, so the repair must pay only the difference, limited to September collaborations.

Run the following SQL statements one at a time:

UPDATE royalty_runtime_config
SET disbursement_basis = 'allocated_royalty_cents', updated_by = 'incident-response'
WHERE environment = 'production' AND service = 'royalty-disburser';
UPDATE repair_batches
SET scope = 'september_collaborations',
    calculation_mode = 'unpaid_delta',
    total_delta_cents = 8800,
    status = 'ready',
    updated_by = 'incident-response'
WHERE batch_id = 'repair-sep-2026' AND environment = 'production';

Then run Deploy. Its replay derives the unpaid total from authoritative allocation and transfer rows, checks that the repair affects only the intended cohort, and ensures settled transfers and legitimate holds remain intact.