Drift trend · 12 ISO weeks
Opened against closed per week, with the open backlog as a line. A widening gap means detection is outrunning resolution.
16 live cases · 14 need a decision today, 2 blocked on a sibling · every close posts a compensating entry and none of them edits a row · Wed 29 July 2026 14:41 GST
| Case | Detected | State | Sev | Detector | Explanation | SKU | Loc | i3 | Other | Δ | AED | Evid | Age / SLA | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DRF-0142 | 29-07 14:36 | Investigating | P1 | gate_read_without_posting | unexplained | MSR31-07 | HQ_319 | 118 | 117 | −1 | 892 | 4 L | 22m / 4h | |
| DRF-0141 | 29-07 13:22 | Open | P1 | ghost_exchange_no_lines | unexplained | order #MIN10482 | HQ_319 | 1 | 0 | −1 | 749 | 2 | 1h19 / 4h | |
| DRF-0139 | 29-07 11:04 | Proposed | P2 | count_variance | sku_confusion | LBA01 | MCC | 84 | 72 | −12 | 1,840 | 5 | 3h / 24h | |
| DRF-0138 | 29-07 10:47 | Proposed | P2 | count_variance | sku_confusion | LBA02 | MCC | 82 | 93 | +11 | 1,685 | 5 | 3h / 24h | |
| DRF-0136 | 29-07 09:12 | Awaiting approval | P2 | count_variance | breakage_unticketed | MIN-VAS-022 | CCZ | 28 | 26 | −2 | 360 | 3 | 5h / 24h | |
| DRF-0134 | 29-07 08:31 | Investigating | P2 | shopify_level_divergence | admin_manual_adjust | MIN-CNL-019 | HQ_319 | 560 | 550 | −10 | 1,800 | 4 S | 6h / 24h | |
| DRF-0131 | 29-07 07:48 | Open | P2 | transfer_pair_unbalanced | unrecorded_transfer | LBA01 | HQ_319 | 46 | 44 | −2 | 306 | 3 | 6h / 24h | |
| DRF-0129 | 29-07 06:20 | Blocked | P2 | replacement_without_return | unexplained | LBA01 | HQ_319 | 2 | 0 | −2 | 2,050 | 3 | 8h / paused | |
| DRF-0127 | 28-07 22:10 | Investigating | P3 | grn_receipt_variance | short_receipt | PP02 | HQ_319 | 48 | 46 | −2 | 288 | 4 | 16h / 72h | |
| DRF-0124 | 28-07 18:44 | Open | P3 | classifier_unmatched | unexplained | MIN-2159 | HQ_319 | 34 | 32 | −2 | 220 | 2 | 20h / 72h | |
| DRF-0122 | 28-07 16:02 | Open | P3 | rfid_cycle_count_variance | shrinkage_suspected | JAE17 | HQ_319 | 54 | 52 | −2 | 470 | 4 L | 23h / 72h | |
| DRF-0119 | 28-07 12:31 | Investigating | P3 | shopify_level_divergence | pos_refund_no_restock | MIN-MRR-003 | AJM | 18 | 19 | +1 | 205 | 3 | 26h / 72h | |
| DRF-0117 | 28-07 09:15 | Open | P3 | unexpected_unit_read | impossible_transition | MST-CRM-42-BLK | YAS | 32 | 33 | +1 | 1,520 | 3 L | 29h / 72h | |
| DRF-0113 | 27-07 19:58 | Blocked | P3 | csd_reservation_mismatch | csd_single_sku_defect | FYN01 | HQ_319 | 6 | 4 | −2 | 840 | 2 | 43h / paused | |
| DRF-0108 | 27-07 11:22 | Open | P3 | grn_over_receipt | supplier_over_ship | LLW-BAG-047 | HQ_319 | 86 | 89 | +3 | 2,670 | 3 | 51h / 72h | |
| DRF-0104 | 26-07 17:40 | Investigating | P3 | stale_in_transit | unrecorded_transfer | MIN-TBL-014 | TRANSIT | 12 | 8 | −4 | 1,180 | 4 | 69h / 72h | |
| DRF-0098 | 26-07 09:10 | Resolved | P2 | balance_chain_mismatch | poller_double_post | FYB01 | HQ_319 | 88 | 89 | +1 | 375 | 5 | closed 14h | |
| DRF-0091 | 25-07 14:55 | Accepted | P3 | rfid_cycle_count_variance | confirmed_shrinkage | MIN-CNL-019 | MCC | 208 | 207 | −1 | 180 | 4 | closed 22h |
Opened against closed per week, with the open backlog as a line. A widening gap means detection is outrunning resolution.
Over the closed explanation_catalog, never free text. Four causes carry 80% of the money.
Cases per 1,000 events for sources, cases per 1,000 units handled for locations. Raw counts flatter whoever is quiet.
| Location | Units handled 30d | Cases | Per 1,000u | AED at risk | Signal |
|---|---|---|---|---|---|
| MCC | 18,420 | 17 | 0.92 | 6,240 | Concentrated |
| TRANSIT | 4,210 | 4 | 0.95 | 2,880 | Watch |
| AJM | 6,880 | 6 | 0.87 | 1,420 | Watch |
| YAS | 9,340 | 4 | 0.43 | 2,190 | Clean |
| BAS | 2,410 | 1 | 0.41 | 180 | Clean |
| CCZ | 7,660 | 3 | 0.39 | 640 | Clean |
| HQ_319 | 96,110 | 34 | 0.35 | 8,910 | Baseline |
| HQ_325 | 11,900 | 4 | 0.34 | 910 | Clean |
| SUPPLIER_HOLD | 380 | 0 | 0.00 | 0 | Low volume |
| DISCONTINUED | 120 | 0 | 0.00 | 0 | Low volume |
| 3PL_ARAMEX | 0 | 0 | n/a | unknown | No detector |
3 SKUs · counted 29-07 09:40 at MCC by Ramesh K. · cases DRF-0139 and DRF-0138 · same shape, same size, different colour
A family resolution still posts one compensating entry per SKU. Nothing here closes two cases with one row.
| SKU | Variant | Role | Ledger | Counted | Δ | AED | Case | Read |
|---|---|---|---|---|---|---|---|---|
| LBA01 | Black and Tan · 38 x 24 | Source drift | 84 | 72 | −12 | 1,840 | DRF-0139 | Short |
| LBA02 | Navy and Tan · 38 x 24 | Sibling | 82 | 93 | +11 | 1,685 | DRF-0138 | Likely confused |
| LBA03 | Ink and Tan · 38 x 24 | Sibling | 82 | 82 | 0 | 0 | none | Clean |
| Family totals | 248 | 247 | −1 | 155 | 2 of 3 reconcile if the paired reclass is signed | |||
14 offsetting-pair cases since Nov 2025, 12 closed as sku_confusion
| Date | Pair | Net | Explanation | Closed with |
|---|---|---|---|---|
| 21-06-2026 | LBA01 / LBA02 | 0 | sku_confusion | COR-0812 pair |
| 04-06-2026 | LBA02 / LBA03 | +1 | sku_confusion | COR-0744 pair |
| 19-05-2026 | LBA01 / LBA03 | 0 | sku_confusion | COR-0690 pair |
| 02-05-2026 | LBA01 / LBA02 | −2 | confirmed_shrinkage | WO-0418 write-off |
| 14-04-2026 | LBA02 / LBA03 | 0 | sku_confusion | COR-0602 pair |
| 28-03-2026 | LBA01 / LBA02 | 0 | sku_confusion | COR-0551 pair |
| 09-03-2026 | LBA02 / LBA03 | −1 | confirmed_shrinkage | WO-0377 write-off |
Unit drift per SKU per location. Empty means no drift. Row and column totals included, because the column total is the question worth asking.
| HQ_319 | HQ_325 | MCC | YAS | CCZ | AJM | BAS | Row Δ | |
|---|---|---|---|---|---|---|---|---|
| MIN-CNL-019 | −8 | −1 | −3 | · | −1 | · | · | −13 |
| PP02 | −4 | · | −1 | −1 | · | · | · | −6 |
| MIN-CNL-024 | −3 | · | −1 | · | · | · | · | −4 |
| MIN-DIF-007 | −2 | · | · | · | · | · | · | −2 |
| MIN-CNL-031 | −1 | · | · | +1 | · | · | · | 0 |
| MIN-DIF-012 | −1 | · | · | · | · | · | · | −1 |
| MIN-CNL-002 | −2 | · | · | · | · | · | · | −2 |
| Col Δ | −21 | −1 | −5 | 0 | −1 | 0 | 0 | −28 |
| Group | Key | Explanation | 30d | All time | Units 30d | AED 30d | First seen | Last seen | Incident | Auto-accept |
|---|---|---|---|---|---|---|---|---|---|---|
| RG-0031 | MIN-CNL-019 · HQ_319 | admin_manual_adjust | 7 | 23 | 31 | 5,580 | 08-02-2026 | 29-07 08:31 | INC-0109 | Blocked |
| RG-0022 | LBA family · MCC | sku_confusion | 5 | 14 | 1 | 155 | 21-11-2025 | 29-07 09:40 | INC-0114 | Blocked |
| RG-0044 | TRANSIT · HQ_319 to MCC | unrecorded_transfer | 4 | 9 | 14 | 3,910 | 02-05-2026 | 26-07 17:40 | INC-0121 | Blocked |
| RG-0038 | PP02 · HQ_319 | short_receipt | 2 | 6 | 4 | 576 | 14-03-2026 | 28-07 22:10 | not yet | 1 from block |
| RG-0051 | MIN-MRR-003 · AJM | pos_refund_no_restock | 2 | 3 | 2 | 410 | 19-06-2026 | 28-07 12:31 | not yet | 1 from block |
| RG-0009 | JAE17 · HQ_319 | confirmed_shrinkage | 2 | 11 | 3 | 705 | 30-09-2025 | 28-07 16:02 | not yet | 1 from block |
| RG-0071 | MIN-VAS-022 · CCZ | breakage_unticketed | 1 | 5 | 2 | 360 | 02-01-2026 | 29-07 09:12 | not yet | Eligible |
| RG-0057 | FYN01 · HQ_319 | csd_single_sku_defect | 1 | 4 | 2 | 840 | 11-04-2026 | 27-07 19:58 | not yet | Over cap |
| RG-0062 | LLW-BAG-047 · HQ_319 | supplier_over_ship | 1 | 2 | 3 | 2,670 | 03-07-2026 | 27-07 11:22 | not yet | Overage · never |
| RG-0066 | MSR31-07 · HQ_319 | unexplained | 1 | 1 | 1 | 892 | 29-07-2026 | 29-07 14:36 | not yet | Immutable evidence · never |
| RG-0074 | MIN-2159 · HQ_319 | unexplained | 1 | 2 | 2 | 220 | 18-05-2026 | 28-07 18:44 | not yet | Unexplained · never |
| RG-0079 | MST-CRM-42-BLK · YAS | impossible_transition | 1 | 1 | 1 | 1,520 | 28-07-2026 | 28-07 09:15 | not yet | Overage · never |
The four terminal states and what each one has to produce
| Terminal state | Meaning | Must produce | Key reconciles after? |
|---|---|---|---|
| Resolved | The ledger was wrong. A compensating entry brings it back to the truth. | ledger row plus a signature | Yes |
| Accepted | The difference is real. It is posted as a loss or a find, never left standing. | WRITTEN_OFF or found row plus a signature | Yes |
| Accepted · adopted | Another module already posted the units, typically a module 09 write-off. | pointer to that entry, no second row | Yes |
| Void | The case was never real. The detector was wrong and is named. | explanation in category detector_defect | Nothing to reconcile |
INV1 has a fifth outcome that i3 does not: a status string changes and the ledger is untouched. Its resolve handler issues a single UPDATE and writes no ledger row, so a case marked resolved there still has the units missing. The resolution_ledger_entry_id column that would have caught it exists in the migration, is rendered inside a template conditional, and has zero writers, which is why the page has always looked complete.
Six of the eight states this page can render
The variance strip and the KPI tiles hold their heights, so the money never jumps as the query lands.
No live cases. Last full sweep 03:12, 14 detectors, 1.9M rows scanned, 0 raised. This is the state the module exists to produce.
The drift service returned 503 after 8s. Nothing was changed and no case moved. Cases keep accruing in the database while this page is blind.
4 filters are hiding all 16 live cases.
Closing a case posts a ledger row, so it needs role >= manager plus the drift_resolve feature. Your grant on app i3 is viewer.
GATE-1 has held for 6 of 7 days. Until it closes, shopify_level_divergence runs in shadow and its cases are marked provisional rather than counted in the KPI row.