PASS Start demo signs in as Finance Officer (Omar) PASS Seed data reconciles · ✓Every ledger transaction balances to zero | ✓No client wallet is negative | ✓Clearing account equals in-flight withdrawals | ✓Each withdrawal's reservation matches its status | ✓Each settled withdrawal has exactly one payment evidence (provider success or adjudication) for its amount | ✓Each settled withdrawal has a settlement entry for its exact amount | ✓Each payment confirmed after a reversal has one adjudication and a recovery entry for its amount | ✓No unsettled withdrawal carries settlement evidence | ✓Each partner's wallet matches its commission records, trade by trade | ✓Commission expense equals commission records | ✓Every commission line matches the agreement in force at trade close (payee, level, rate, rounding) | ✓Every processed trade pays exactly the partners entitled to it (attribution, tree at that version, lots, agreement) | ✓Cancelled trades net to zero commission | ✓No trade paid twice at the same level | ✓Partner tree has no loops | ✓No unresolved conflicting provider events | ✓No orphaned provider events | ✓Every received payment is posted exactly once for its received amount | ✓Unmatched money sits in suspense; matched money has left it | ✓Restricted deposits are held; available deposits were credited to the wallet once | ✓Each deposit instruction's paid amount equals the payments matched to it | ✓Refunds and chargebacks each stay within the payment, and refund records match | ✓Each chargeback's postings match its record (provider, wallet, receivable, fee) | ✓No conflicting payment events waiting for review | ✓Funds reserved for transfers equal transfers not yet final | ✓Each trading account's platform balance equals the transfers the CRM confirmed | ✓No transfer with an unknown outcome | ✓Every received payment event has been applied (no pending or rejected chargebacks) | ✓Every open chargeback on an allocated payment names that payment's client | ✓No trading account is overdrawn on the platform or below its margin in use | ✓Each transfer's status matches its single platform outcome (applied or cancelled) | ✓Each conversion links to one existing client, and no client is linked to two active leads | ✓Every lead is owned by active sales staff (or unassigned) and matches its latest assignment history | ✓Every unresolved provider report has an open case, and every open case still has unresolved work | ✓No unresolved success reports waiting for review PASS 1 Maker cannot approve own withdrawal · Maker-checker rule: you created or changed this withdrawal, so you cannot approve it. PASS 1b Denied attempt is in the audit log PASS 2 Support cannot approve PASS 3 Admin cannot approve (segregation of duties) PASS 4 Approval for stale version rejected PASS 4b No approval stored PASS Checker (Grace) approves · {"ok":true,"status":"approved","required":1} PASS 5 Edit after approval → back to pending, version 2 PASS 5b Old approval invalidated PASS 5c Ledger re-reserved and reconciles PASS 5d Cannot send after change without new approval PASS 5e Grace can re-approve v2 (she did not edit it) PASS 6 First approval on $12,500 keeps it pending PASS 6b Same approver twice denied PASS 6c Second independent approver completes approval PASS 7 Send with duplicate callback · {"ok":true,"outcome":"success","attempt":1,"callback":"settled","duplicate":"duplicate_ignored"} PASS 7b Exactly one settlement debit PASS 8 Failed payout enters exception queue PASS 8b Retry succeeds → settled PASS 8c Reverse returns funds to wallet PASS 9 Concurrent double-approve stores one approval · 200/409 PASS 9b Concurrent double-send pays out once · 200/409 PASS 10 Overdraw attempt denied ($2,000 from a $1,500 wallet) · Insufficient available balance for this withdrawal. PASS 11 Workspace B sees its own fresh data (WD-1002 still pending) PASS 11b Workspace B cannot touch workspace A's new withdrawal PASS 12 POST with wrong CSRF token rejected PASS 12b Old session revoked after switch PASS Compliance releases hold with note PASS 14 Reconciliation green after all scenarios PASS Audit CSV export works PASS R1 Concurrent edits cannot overdraw: exactly one succeeds · 200/409 PASS R1b Wallet never negative after edit race · $3550.00 PASS R2 Edit/create race leaves wallet non-negative · 200/409 wallet $710.00 PASS R3 Support cannot simulate client requests (no reservation) PASS R4 Concurrent creates get distinct references · WD-1009 / WD-1010 PASS R4b Retried create with the same request_id returns the original · WD-1011 / WD-1011 PASS R5 Injected failure: send committed, event rolled back, outcome reported as uncertain · 500 sent events=0 PASS R5b Replay settles exactly once PASS R6 Late success for attempt 1 does not settle attempt 2 · unmatched_needs_review sent PASS R6b Reconciliation flags the unapplied success for review PASS R6c With two success reports open (possible double payout), attempt 2 is also held for review · unmatched_needs_review PASS R6c2 Compliance resolves both reports; withdrawal settles exactly once PASS R6d Callback with wrong amount is not applied · stale_ignored PASS R7 KYC change auto-holds the approved withdrawal and voids approvals · on_hold PASS R7b Send is refused while KYC is not current PASS R7c A hold release cannot waive KYC PASS R7d After KYC renewal, review and fresh approval, payout succeeds PASS R8 Reassigned confirmation turns reconciliation red with specific findings · Missing or conflicting: WD-1001 | WD-1002 PASS R9 Database rejects UPDATE and DELETE on audit · {"audit_update":"blocked","audit_delete":"blocked","ledger_update":"blocked","ledger_delete":"blocked"} PASS R9b Database rejects UPDATE and DELETE on ledger PASS IB1 Seeded trades processed on start (no unprocessed left) PASS IB2 Re-running the calculation pays nothing twice PASS IB3 Every Atlas statement line reproduces from agreement, level and rounding · 28/28 PASS IB3b Atlas level-1 lines use v1 or v2 depending on trade close date PASS IB4 A level-3 client pays three partners (L1 Coastal, L2 Brightline, L3 Atlas) · ib_coast:L1,ib_bright:L2,ib_atlas:L3 PASS IB5 Support cannot run commissions PASS IB6 Moving a partner under its own sub-partner is refused (cycle) PASS IB7 Backdated agreement refused PASS IB8 New agreement version leaves past statement lines unchanged · {"ok":true,"version":2} PASS IB9 Cancelling a trade reverses its commissions PASS IB9b Cancelling twice is refused PASS IB10 Concurrent calculation runs process each new trade once · 4+0 PASS IB10b Reconciliation green including IB checks PASS X1 Late success after failure is held for review PASS X1b Retry is refused while a success report is unresolved · 403 PASS X1c Only Compliance can resolve provider events PASS X1d Confirmed-paid resolution settles once with an audit record PASS X2 Same callback ID with different content is flagged as a conflict, not a duplicate · conflict_needs_review PASS X2b Reversal blocked while the conflict is unresolved PASS X2c Retry blocked while the conflict is unresolved PASS X2d Reconciliation shows the open conflict PASS X2e After a recorded 'not paid' decision, reversal proceeds PASS X2f Reconciliation green after both investigations PASS X3 Same request key with a different amount is refused · 200/409 PASS X3b Invalid request key is rejected, not ignored PASS C1a Conflict recorded first: reversal refused, withdrawal stays in exception · conflict_needs_review/409 → exception PASS C1b Late report after a committed reversal: reversal kept in history, open recovery case recorded · 200/conflict_needs_review → reversed PASS C1c New withdrawals for that client are paused while the recovery case is open · 409 PASS C1d Reconciliation flags the open post-reversal case PASS C1e Authorized recovery: status 'paid after reversal', reversal credit recovered, adjudication stored · {"ok":true,"decision":"paid","resolution":"confirmed_paid_after_reversal"} PASS C1f Reconciliation green after the recovery · No unresolved conflicting provider events: Same event ID, different content: cb_w_268696067c714ed9_1 → WD-1006 PASS C2 Two concurrent investigation decisions: exactly one commits · 200/409 PASS C3 Conflict confirmed paid: settled once, original messages preserved PASS C3b Reconciliation green with adjudicated settlements PASS C4 Opposing concurrent moves: one fails cleanly, no loop · 200/409 PASS C5 Agreement effective today is refused (would touch same-day trades) PASS C6 A zero-rounded commission is recorded and does not strand later trades · {"ok":true,"processed":2,"rows":5,"amount":1075} PASS C6b Reconciliation green after zero-value commission PASS C7 Misallocated partner balance turns reconciliation red with the partner named PASS V1 $1 reported against $300: a $1 verification is refused, and $300 needs an evidenced override · 422/422 PASS V1b With evidence the override is recorded: expected, reported and verified amounts kept PASS V1c A decided case cannot be decided again PASS B1 Beneficiary changes between validation and commit: nothing is sent · 409 approved PASS B1b The changed instructions need fresh approval before sending · 403 PASS E0 Reconciliation green before the payee fixture PASS E1 Wrong payee with valid rate and balanced ledger is detected by entitlement rebuild · 1 trade(s): T-5043: expected ib_atlas L1; found unexpected ib_nova L1 PASS E1b Wallet-vs-records check alone would not catch it (records agree) PASS D1 Impossible calendar dates are refused · {"error":"That date does not exist. Choose a real calendar date."} PASS T1 Partner move right after the snapshot: the trade is not paid on a mixed tree, run reports the interruption · {"ok":true,"processed":0,"rows":0,"amount":0,"stopped":"Partner tree changed during the run; remaining trades will use the new tree on the next run."} | PASS T1b Next run pays the new chain (Brightline → Nova) and entitlement reconciles · {"ok":true,"processed":1,"rows":2,"amount":750} | PASS K1 Identical conflicting report delivered twice: one investigation case · conflict_needs_review/conflict_duplicate_ignored cases 1 PASS P1 While the recovery case is open, an already-approved payout for the same client is blocked · 409 PASS P1b Increases are blocked too · 409 PASS K2 Same report after the decision: refers to the decision, no new case, no second financial effect · conflict_already_decided cases 1 PASS P1c After the decision, the paused payout can go · 200 PASS Z1 Voiding a trade with mixed $0.00 and non-zero commissions keeps reconciliation green · {"ok":true,"reversed":2,"ledger_lines":1} | PASS I1 A report that needs a decision opens a case automatically with a 24-hour deadline PASS I1b Reconciliation exception links straight to the withdrawal with the difference and next step · {"label":"WD-1006 · cb_case_n1","href":"#/withdrawal/w_1a966622c9d04ccf","diff":"Provider reported $275.00 paid; withdrawal is $275.00","next":"Compliance records what the bank or provider statement shows (Investigations)."} PASS I2 Support can add an internal note but cannot take the case · 200/403 PASS I3 Compliance takes the case, records structured evidence and escalation (deadline within 4h) PASS I3b Evidence without a source and reference is refused PASS I4 The decision closes the case and is kept in its history; queue moves it to Closed PASS I5 A closed case cannot be changed PASS M1 Two distinct conflicting reports open two decisions · 2 PASS M1b After the first decision the second report keeps all client payouts paused · 200/409 PASS M1c Second report: 'paid again' refused, wrong reference refused, linked to the confirmed payment with no second effect · 409/400/200 PASS M1d Only after every report is decided do payouts resume; reconciliation green · 200 PASS DB1 Dashboard 'Paid out' includes the payment confirmed after reversal · {"paid0":180000,"paid1":{"settled":190000,"after_reversal":30000,"total":220000}} PASS CA-note Case closes between read and write: 409, no history entry, no successful audit row · 409 entries=opened okAudit=0 PASS CA-evidence Case closes between read and write: 409, no history entry, no successful audit row · 409 entries=opened okAudit=0 PASS CA-assign Case closes between read and write: 409, no history entry, no successful audit row · 409 entries=opened okAudit=0 PASS CA-escalate Case closes between read and write: 409, no history entry, no successful audit row · 409 entries=opened okAudit=0 PASS CL1 Case creation fails → the report is rolled back too; the replay records report and case together · 500 unmatched_needs_review PASS CL3 A second report while the case is open is added to the same case PASS CL2 Closing fails → the decision is rolled back too; the retry decides and closes exactly once · 500/200 PASS H1 A new report opens a second case; both cases keep their own history and stay reachable PASS CL4 Case consistency check: the normal lifecycle (WD-1010) is consistent, and the four cases force-closed by the race hook are flagged as reports without a case · ["WD-1006:Unresolved provider report without an open case","WD-1007:Unresolved provider report without an open case","WD-1008:Unresolved provider report without an open case","WD-1009:Unresolved provider report without an open case"] PASS R1 Every failing check carries a stable id and its own items (unbalanced ledger links to the withdrawal with a next step) · ledger_balanced:1,case_consistency:4,pe_unmatched:5 PASS R1b No reconciliation advice tells the operator to void and re-run PASS AP1 After my first of two approvals the item leaves my 'Needs my approval' list but stays for the other checker · true/false/true PASS SC1 A dialog prepared for case A (now closed) is refused after case B opens; neither history changes · 409 [1,3] PASS SC2 Missing case id, missing/null/string version refused (400), stale version refused (409), a fresh submission for case B succeeds; refused requests leave no history · 400/409/200 PASS E2 Every entitlement failure branch returns its own item with link, difference and next step (no inputs, attribution, lots, chain) · ["QA-MIRROR-914224:1 reversal line(s) vs 1 accrual line(s),","QA-NOCALC-392333:Marked processed, but the inputs used to","QA-ATTR-589415:Calculated for partner ib_nova; the clie","QA-ATTR-589415:Expected ib_nova L1 $7.00","QA-LOTS-238029:Calculated on 2.000 lots; the trade has ","QA-LOTS-238029:Expected ib_atlas L1 $9.00","QA-CHAIN-832673:Recorded chain ib_atlas → ib_nova; the t","QA-CHAIN-832673:Expected ib_atlas L1 $9.00"] PASS F1 Payment matching the instruction is credited once for the received amount; fee booked separately · credited_available PASS F2 Same event q_again, a new event id for the same payment, and a changed amount: never a second credit · duplicate_event_ignored/same_payment_already_recorded/conflict_needs_review PASS F2b Reconciliation flags the conflicting payment event with a drill-down PASS F3 Partial payments: two receipts complete one instruction; the overpayment waits in suspense instead of being allocated twice · credited_available/held_in_suspense/credited_available paid=100000 PASS F4 Suspense allocation needs a second person; it moves out of suspense exactly once · 403/200/409 PASS F5 KYC not current: payment is recorded but held as restricted, not added to the usable wallet · credited_restricted PASS F5b Release is refused while KYC is not current (checked inside the transaction) PASS F5c KYC expires between the check and the credit: nothing is released · 409 PASS F5d After KYC approval the restricted funds are released once · 200 PASS F6 Two concurrent refunds that together exceed the payment: exactly one applies · 200/409 PASS T1 Transfer to a trading account: reserved, applied once on the platform, confirmed · {"ok":true,"id":"tf_58135cf2a626442b","status":"confirmed"} PASS C1 Chargeback after funds left the wallet: wallet debited to zero, shortfall recorded as receivable, client restricted · chargeback_recorded wallet=0 recv=-79900 PASS C1b While the chargeback is open, transfers and withdrawals for the client are refused · 409/409 PASS C2 Chargeback won: one compensating posting restores wallet and receivable; a repeated close changes nothing · chargeback_won/already_closed_ignored PASS C3 A bank-forced chargeback after a refund is recorded (the provider takes it) and flagged as overlapping the refund; the client owes the shortfall · 200 chargeback_recorded PASS C3b A further chargeback beyond what is left on the payment is not applied; it is recorded as rejected for review · rejected_exceeds_payment PASS T2 Platform credits but the response is lost: transfer is 'uncertain', funds stay reserved, nothing is refunded · uncertain PASS T2b Reconciliation shows the uncertain transfer and the platform/CRM difference with drill-down PASS T3 Retry of an operation the platform already applied: confirmed without a second platform effect, even if the platform now answers 'reject' · confirmed plat=100000 PASS T4 Releasing funds is refused when the platform shows the operation; the transfer can only be confirmed · 409/409 PASS T5 Platform rejects: transfer failed and funds return to the wallet · failed PASS T6 Timeout without effect: the check finds nothing; release with a recorded confirmation returns the funds · false/failed PASS T7 Transfer back is limited by the platform's free margin; a covered amount returns to the wallet · 409/confirmed PASS T8 Demo accounts cannot receive real funds PASS T9 Two concurrent transfers that together exceed the wallet: exactly one reserves funds · 200/409 PASS R1 Support cannot move funds, refund or create deposit instructions PASS F9 After the whole journey, reconciliation is green except the deliberately conflicting event and the rejected over-limit chargeback · fund_conflicts: 1 conflicting event(s) | fund_pending: 1 event(s) not applied PASS F10 Funding report: published formula, internal transfers excluded, totals traceable to lines PASS G1 Two concurrent $80 transfers back from a $100 trading account: exactly one succeeds, the account is never overdrawn · 200:confirmed / 409:Transfer refused: free margin on 5101207 is $20.00 (balance $20.00, margin in use $0.00). plat=2000 PASS G1b With the early check skipped, the platform itself refuses a debit beyond free margin in the same statement; reconciliation checks platform validity · failed plat=2000 PASS G2 Platform applied, response lost, retry answered 'reject': the applied outcome wins; confirmed, funds stay on the platform, nothing returned to the wallet · confirmed wallet=-10000 PASS G3 A retry lands on the platform just before a release: the release is refused and the transfer is confirmed, never both · 409/confirmed PASS G3b Concurrent retry and release of the same operation: exactly one authoritative outcome (applied+confirmed or cancelled+released) · 200/409 → confirmed PASS G4 After a chargeback opens, a retry that could create a new platform effect is refused; checking the platform is still allowed · 409 Retry blocked: open chargeback. A retry could apply a new movement on the platform. You can still check the platform; release the reserved funds once the platform confirms cancellation. PASS G4b KYC expires between reservation and dispatch: the platform call is refused, the operation is cancelled and the reservation returned · failed PASS G5 Chargeback before its payment stays pending (flagged, replay retries instead of ignoring) and applies when the payment arrives · pending_payment_not_received/pending_payment_not_received/duplicate_event_ignored PASS G6 Wallet emptied concurrently with a chargeback: recovery and shortfall are computed inside the transaction; the chargeback still applies and restricts the client · chargeback_recorded 0/30000 PASS G7 'Closed' arriving before 'opened' stays pending, then applies right after the dispute is recorded · pending_dispute_not_open → won PASS G8 Suspense → chargeback → allocation to c7: the open chargeback restricts c7 at once; when won, $50 returns to client:c7 (never client:null) · chargeback_won won_to=client:c7 Δ=10000 PASS G8b Same path to a restricted client (lost): the hold keeps only the allocated part, the chargeback names c4, and the database rejects postings to a non-existent client account · chargeback_lost hold=6000 sql=rejected PASS G9 A rejection interleaved before the approval batch: approval fails and the instruction is NOT marked paid (claim first, everything else conditional) · 409 paid=0 open PASS G10 Report by posting date: a chargeback stays in its period after it is later won; the recovery appears in the period it was posted · p1={"gross_deposits":50000,"refunds":0,"chargebacks":20000,"chargeback_recoveries":0,"external_withdrawals":0,"fees":1500,"internal_to_accounts":0,"internal_from_accounts":0,"net_external_funding":30000} p2 rec=20000 PASS G11 Reconciliation of the regression workspace is green after all reproductions (detection is not the only control: each case was prevented) PASS H1 A close naming a different payment cannot resolve the dispute: kept as a conflict, dispute open, wallet and audit unchanged · conflict_needs_review open PASS H1b A repeated 'opened' with the same dispute id but different content is a conflict; identical content is a duplicate; nothing is posted twice · conflict_needs_review/duplicate_dispute_ignored PASS H1c The genuine close for the right payment still applies · chargeback_won PASS H2 Dispute ids that look alike under SQL wildcards (dp_a, dpXa): exactly two chargeback rows totalling $20, no false reconciliation failure · 2 rows 2000 PASS H2b Regression workspace reconciles except the deliberately conflicting events from H1/H1b · fund_conflicts PASS H3 Funding report counts a payment confirmed after reversal once, as an external withdrawal (same classification as the dashboard) · report 224500 vs dashboard 224500 (after reversal 21500) PASS S1 Agent sees only their own book; another agent's lead is 'not found'; client money, dashboard, ledger/lead exports and transfers are refused · 5/404/403/403/403/403/403 PASS S1b Only the explicit export role (Operations Admin) can export leads: fixed columns without email/phone, audited with scope, columns and row count (no personal data in the audit) · 200 PASS S2 Versioned assignment rules: Arabic → Arabic desk (rule r1 v1); no matching rule or missing country/language → unassigned queue with the reason; a disabled owner is skipped (unassigned) · Rule r1 v1 (language = ar) | No rule matched (language it, country IT): unassigned queue | Matching rule's owner is disabled: unassigned queue PASS S3 Duplicate review proposes, never decides: same email (case-insensitive) + same E.164 phone = strong; a phone without country context is not matched; agents outside both leads never see the item · Same email · Same phone / 0 / sara sees=false PASS S4 Reviewed merge: proposer cannot approve; survivor keeps both histories, the most restrictive preference (do-not-contact) survives, and the alias's queued message is cancelled · 200/403/200 dnc=1 PASS S4b Merge approval is bound to both lead versions: a lead that changed after the proposal makes approval fail (nothing merged) · 409 PASS S5 Concurrent assignment: exactly one applies; history is append-only; non-sales staff cannot own leads; an agent disabled between selection and assignment is refused · 200/409 rejected 409:That agent is disabled or not sales staff. Choose an active agent. 409:That agent is disabled or not sales staff. Choose an active agent. last=[null,"u_sara"] owner=u_sara PASS S6 Reassignment revokes the former agent's access on the next request (lead and its follow-up), and open follow-ups move to the new owner · 404/404 owner=u_sara PASS S7 'Contacted' means an actual two-way interaction: an unanswered call leaves the stage at new; a reached call sets contacted; a manual 'contacted' edit is refused · new → contacted / 400 PASS S8 History is never hidden: a contact that happened outside policy (do-not-contact) is recorded and flagged (activity + flagged audit), not refused · 200 PASS S9 Outbound requests: blocked at request when suppressed; a dispatch timeout retried with the same key never duplicates; delivery is shown as simulated, never 'sent' · blocked/504/true/simulated_delivered PASS S9b Second check at dispatch: an SMS scheduled before the opt-out is blocked at dispatch; a call requested by the former owner is cancelled after reassignment · blocked/cancelled PASS S9c Quiet hours use the lead's IANA time zone across the DST change (13:30 UTC = 09:30 EDT allowed; next day 13:30 UTC = 08:30 EST deferred); unknown time zone defers calls for review · deferred/simulated_delivered/deferred PASS S10 Conversion: refused while a duplicate review is open; a double-click with the same request id creates exactly one client (KYC pending, money restricted) · 409/200/200 created PASS S10b Response lost after commit: retry with the same request id returns the same client; only a team lead may link an existing client, and one client cannot be linked to two leads · 504/200/403/200/409 PASS S11 FTD follows the published rule (ftd-v1) from ledger postings: date, amount and receipt recorded; after a full chargeback the FTD stays, a reversal indicator appears, net funding is $0 and the sales stage is untouched · true/chargeback/historically_qualified/qualified PASS S12 Reassignment after the FTD does not move historical credit: the activity report credits the FTD to the owner at that moment (Sara), not the new owner (Karim); agents see only their own credit · nina sara=1 karim=0 sara=1 PASS S12b Two report views with defined denominators: the cohort view publishes a conversion rate (cohort converted ÷ cohort leads) with an as-of date; the activity view has no conversion rate · 33.3% PASS S13 A restricted deposit (KYC pending) does not count as FTD; it qualifies when the funds are released into the usable wallet · credited_restricted → FTD PASS S14 Reconciliation includes the sales checks (one client per active lead, ownership vs history incl. active owners) and the sales workspace reconciles after the whole journey PASS J1 End-to-end Sales journey (one workspace): lead twice → duplicate reviewed → assigned → follow-up → opt-out blocks dispatch → convert without KYC bypass → FTD → chargeback → reassignment keeps credit and revokes access · ✓ 1 Lead arrives twice → one strong duplicate item, nothing merged automatically (Same email · Same phone) | ✓ 2 Duplicate reviewed: agent proposes, team lead approves; the repeat becomes an alias (200/200) | ✓ 3 Agent assigned by versioned rule (English desk → Sara), recorded in append-only history (Rule r4 v1 (language = en)) | ✓ 4 Follow-up scheduled; a reached call sets 'contacted', then the agent qualifies the lead (qualified) | ✓ 5 Opt-out after scheduling blocks the queued SMS at dispatch (second check) (queued → blocked) | ✓ 6 Lead converts without bypassing KYC: client created with KYC pending, transfers blocked, agent gets no client-money access (pending/403) | ✓ 7 Compliance approves KYC; the qualifying deposit records the FTD from the ledger (rule ftd-v1) (credited_available / net_funded) | ✓ 8 Chargeback changes net funding without erasing history: FTD kept with a reversal flag, net $0, stage unchanged, both postings still in the ledger (chargeback/0/qualified/ledger rows=2) | ✓ 9 Reassignment keeps historical credit and revokes old access: Sara keeps the conversion + FTD credit, loses the lead and its task on the next request; the task moves to Karim (404/404 credit=u_sara) | ✓ 10 The workspace reconciles after the whole journey PASS R1 Replaying an outbound key after reassignment discloses nothing to the former owner (404, no destination); a changed payload on the same key is refused (409); an over-long key is rejected, never truncated · 404/409/400 PASS R2 A delivery is never claimed after the state changed between check and claim: opt-out → blocked, reassignment → cancelled, requester disabled → cancelled, destination changed → cancelled · blocked:Blocked at dispatch: lead asked not to be contacted | cancelled:Lead was reassigned before dispatch; the new owner must request contact again | cancelled:Requester is no longer active | cancelled:Destination changed since the request (e.g. after a merge); request again PASS R3 Reassignment that wins before the commit rejects the old owner's note and new follow-up: 409, no activity row, no task, denied audit only · 409/409 tasks=0 PASS R4 An opt-out recorded on a merged alias protects the surviving lead (DNC on the survivor, provenance names the alias); lifting through the alias is refused · 200/1/409 PASS R5 Two successive merges (A→B→C): the final survivor shows the first alias's history and keeps the most restrictive preference · 200 dnc=1 PASS R6 Sales CSV export neutralises formula prefixes and leading control characters (=, +, -, @, leading space or tab) · '=1+1 ¦ '@cmd ¦ '=HYPERLINK(""x"") ¦ '=1 PASS R7a Restricted deposit → partial refund → release: the FTD is the qualifying release posting ($200), not the original receipt amount ($300) · 200/200 ftd=20000 deposit_release PASS R7b Historical as-of view: a chargeback posted later does not appear in an earlier as-of result (no reversal, net $200); after it, the reversal shows and the FTD is unchanged · before=null/20000 after=chargeback PASS R9 Quiet hours or time zone changed between the policy read and the claim: the claim is refused and the fresh decision defers the SMS (no delivered activity), for both a new quiet window and an unknown time zone · deferred:Deferred: quiet hours (12:00 Europe/London); allowed 15:00–12:00 local | deferred:Deferred: lead's time zone unknown; review before calling or texting PASS R10 Opt-out on alias A while its survivor B is merged into C: the restriction lands on the current survivor C (or the request is refused); never a success that leaves C contactable · 200 applied_to=C C.dnc=1 PASS R8 The review workspace still reconciles after all race and merge scenarios 216 passed, 0 failed PASS DST1 Fall-back day (1 Nov 2026, 25 h): 11:30 PM that day is included PASS DST1b 12:30 AM next day is excluded PASS DST2 Spring-forward day (14 Mar 2027, 23 h): 12:30 AM on 15 Mar is excluded PASS DST2b 11:30 PM on 14 Mar is included PASS DST3 From boundary is local midnight 5 passed, 0 failed (TZ=Asia/Karachi)