=== Report 1: Weekly sign-in attempt volume and failure pattern (written by Ines) === Engineer's note: Window is the 26 ISO weeks ending with the week containing 2025-12-31 (week_start between that week's start minus 175 days and that week's start), aggregated platform-wide across all tenants from login_attempts. "Distinct emails/users attempted" is counted via distinct email on the attempt row (covers both successful and failed attempts, including unauthenticated/unknown-user attempts, which is the credential-stuffing-relevant signal). REPORT: Weekly sign-in attempt volume and failure pattern QUESTION: Over the last 26 weeks, how many login attempts are we seeing platform-wide, what share fail, and are there signs of credential-stuffing-style behavior (many attempts concentrated on few IPs)? week_start | total_attempts | successful_logins | failed_logins | failure_rate_pct | distinct_emails_attempted | distinct_ips | avg_attempts_per_ip | max_attempts_single_ip -----------+----------------+-------------------+---------------+------------------+---------------------------+--------------+---------------------+----------------------- 2025-07-07 | 1368 | 1275 | 93 | 6.8 | 1068 | 920 | 1.5 | 13 2025-07-14 | 1373 | 1293 | 80 | 5.8 | 1056 | 911 | 1.5 | 15 2025-07-21 | 1331 | 1259 | 72 | 5.4 | 1031 | 874 | 1.5 | 16 2025-07-28 | 1295 | 1224 | 71 | 5.5 | 985 | 830 | 1.6 | 15 2025-08-04 | 1335 | 1233 | 102 | 7.6 | 1015 | 868 | 1.5 | 17 2025-08-11 | 1330 | 1262 | 68 | 5.1 | 1026 | 876 | 1.5 | 14 2025-08-18 | 1389 | 1283 | 106 | 7.6 | 1027 | 880 | 1.6 | 16 2025-08-25 | 1378 | 1292 | 86 | 6.2 | 1061 | 901 | 1.5 | 19 2025-09-01 | 1375 | 1299 | 76 | 5.5 | 1085 | 927 | 1.5 | 21 2025-09-08 | 1419 | 1328 | 91 | 6.4 | 1081 | 919 | 1.5 | 16 2025-09-15 | 1436 | 1355 | 81 | 5.6 | 1092 | 932 | 1.5 | 13 2025-09-22 | 1420 | 1328 | 92 | 6.5 | 1125 | 970 | 1.5 | 18 2025-09-29 | 1495 | 1388 | 107 | 7.2 | 1141 | 974 | 1.5 | 14 2025-10-06 | 1400 | 1312 | 88 | 6.3 | 1085 | 932 | 1.5 | 17 2025-10-13 | 1454 | 1369 | 85 | 5.8 | 1105 | 943 | 1.5 | 12 2025-10-20 | 1530 | 1444 | 86 | 5.6 | 1181 | 1019 | 1.5 | 18 2025-10-27 | 1572 | 1477 | 95 | 6.0 | 1225 | 1063 | 1.5 | 19 2025-11-03 | 1559 | 1449 | 110 | 7.1 | 1200 | 1039 | 1.5 | 15 2025-11-10 | 1579 | 1487 | 92 | 5.8 | 1226 | 1067 | 1.5 | 17 2025-11-17 | 1712 | 1612 | 100 | 5.8 | 1343 | 1160 | 1.5 | 17 2025-11-24 | 2417 | 2255 | 162 | 6.7 | 1913 | 1745 | 1.4 | 24 2025-12-01 | 1928 | 1823 | 105 | 5.4 | 1531 | 1371 | 1.4 | 19 2025-12-08 | 1629 | 1536 | 93 | 5.7 | 1269 | 1106 | 1.5 | 15 2025-12-15 | 1650 | 1543 | 107 | 6.5 | 1270 | 1116 | 1.5 | 18 2025-12-22 | 1493 | 1393 | 100 | 6.7 | 1151 | 981 | 1.5 | 22 2025-12-29 | 911 | 873 | 38 | 4.2 | 805 | 702 | 1.3 | 9 (26 rows) === Report 2: MFA adoption rate by merchant, staff vs. shoppers (written by Viktor) === Engineer's note: Tenants are grouped and ordered by staff MFA rate ascending (worst coverage first), tenant name as tie-break. The underlying query returns one row per tenant with at least one active user (expected up to ~120); only the first 50 (lowest staff MFA rate) are printed per the page cap, so the weakest-coverage merchants are the ones shown. REPORT: MFA adoption rate by merchant, staff vs. shoppers QUESTION: For each merchant, what share of staff users and what share of shopper (non-staff) users have a confirmed, active MFA device, versus relying on password only? tenant_id | tenant_name | tenant_status | staff_user_count | staff_users_with_mfa | staff_mfa_rate_pct | shopper_user_count | shopper_users_with_mfa | shopper_mfa_rate_pct | total_users ----------+-------------------------------+---------------+------------------+----------------------+--------------------+--------------------+------------------------+----------------------+------------ 28 | Atelier Nouveau | active | 5 | 0 | 0.0 | 59 | 0 | 0.0 | 64 91 | Chocolaterie Mireille | active | 3 | 0 | 0.0 | 16 | 0 | 0.0 | 19 90 | Dewdrop Studio | churned | 4 | 0 | 0.0 | 5 | 0 | 0.0 | 9 103 | Kabelwerk | active | 4 | 0 | 0.0 | 5 | 0 | 0.0 | 9 21 | Kettle & Key | active | 4 | 0 | 0.0 | 44 | 0 | 0.0 | 48 22 | Midland Safety Wear | active | 4 | 0 | 0.0 | 53 | 0 | 0.0 | 57 112 | Pixelhaus | active | 4 | 0 | 0.0 | 4 | 0 | 0.0 | 8 111 | Snout & Sons | active | 3 | 0 | 0.0 | 2 | 0 | 0.0 | 5 108 | Alpine Loft | active | 4 | 1 | 25.0 | 5 | 0 | 0.0 | 9 64 | Brick & Bobbin | active | 4 | 1 | 25.0 | 23 | 0 | 0.0 | 27 24 | Fern & Fable | active | 4 | 1 | 25.0 | 50 | 0 | 0.0 | 54 107 | Glasshouse Grooming | active | 4 | 1 | 25.0 | 7 | 0 | 0.0 | 11 42 | Gratlinie Outdoor | active | 8 | 2 | 25.0 | 230 | 0 | 0.0 | 238 120 | Harbour Swim | active | 4 | 1 | 25.0 | 1 | 0 | 0.0 | 5 53 | Noordzee Surfwear | active | 4 | 1 | 25.0 | 57 | 0 | 0.0 | 61 78 | Northstar Watches | active | 4 | 1 | 25.0 | 17 | 0 | 0.0 | 21 72 | Polder Packaging | active | 4 | 1 | 25.0 | 18 | 0 | 0.0 | 22 43 | Roast Republic | active | 4 | 1 | 25.0 | 25 | 0 | 0.0 | 29 100 | Rosehip Lab | active | 4 | 1 | 25.0 | 19 | 0 | 0.0 | 23 74 | Sorella Skin | active | 4 | 1 | 25.0 | 39 | 0 | 0.0 | 43 93 | Strandgut | active | 4 | 1 | 25.0 | 23 | 0 | 0.0 | 27 41 | The Balm Room | active | 4 | 1 | 25.0 | 61 | 0 | 0.0 | 65 17 | Ampfeld Elektronik | active | 13 | 4 | 30.8 | 484 | 0 | 0.0 | 497 83 | Aurum & Ash | churned | 3 | 1 | 33.3 | 4 | 0 | 0.0 | 7 99 | Goldkind | active | 3 | 1 | 33.3 | 6 | 0 | 0.0 | 9 31 | Hound Hamper | active | 3 | 1 | 33.3 | 29 | 0 | 0.0 | 32 113 | Kaffeekontor Nord | active | 3 | 1 | 33.3 | 3 | 0 | 0.0 | 6 66 | Northwire Audio | churned | 3 | 1 | 33.3 | 4 | 0 | 0.0 | 7 76 | Paddock & Pine | churned | 3 | 1 | 33.3 | 4 | 0 | 0.0 | 7 102 | Pedal & Pine | active | 3 | 1 | 33.3 | 6 | 0 | 0.0 | 9 57 | Saltmarsh Knitwear | churned | 3 | 1 | 33.3 | 15 | 0 | 0.0 | 18 115 | Signalbox | active | 3 | 1 | 33.3 | 9 | 0 | 0.0 | 12 12 | Spice Route Box | active | 6 | 2 | 33.3 | 175 | 0 | 0.0 | 181 39 | Kayak Corner | active | 5 | 2 | 40.0 | 107 | 0 | 0.0 | 112 58 | Nordic Bloom Cosmetics | active | 5 | 2 | 40.0 | 83 | 0 | 0.0 | 88 32 | Oakhurst Tailoring | active | 5 | 2 | 40.0 | 114 | 0 | 0.0 | 119 16 | Ostwind Mode | active | 5 | 2 | 40.0 | 83 | 0 | 0.0 | 88 79 | Kibblewick | active | 7 | 3 | 42.9 | 151 | 0 | 0.0 | 158 11 | Ballycorran Industrial Supply | active | 6 | 3 | 50.0 | 103 | 0 | 0.0 | 109 73 | Barkley & Co. | active | 4 | 2 | 50.0 | 15 | 0 | 0.0 | 19 71 | Basecamp Nord | active | 4 | 2 | 50.0 | 19 | 0 | 0.0 | 23 92 | Brewline Coffee | active | 4 | 2 | 50.0 | 9 | 0 | 0.0 | 13 50 | Buchstabe | active | 4 | 2 | 50.0 | 24 | 0 | 0.0 | 28 68 | Bytefield | active | 4 | 2 | 50.0 | 16 | 0 | 0.0 | 20 38 | Coastline Interiors | active | 4 | 2 | 50.0 | 134 | 0 | 0.0 | 138 67 | Deskline Supplies | active | 4 | 2 | 50.0 | 15 | 0 | 0.0 | 19 51 | Driftwood Home | active | 4 | 2 | 50.0 | 24 | 0 | 0.0 | 28 46 | Feather & Fin | active | 4 | 2 | 50.0 | 45 | 0 | 0.0 | 49 36 | Fjordline Wear | active | 4 | 2 | 50.0 | 47 | 0 | 0.0 | 51 60 | Haven Linen | active | 4 | 2 | 50.0 | 22 | 0 | 0.0 | 26 (50 rows) === Report 3: Privileged roles per merchant: grant size and dormancy (written by Ines) === Engineer's note: Grain is one row per tenant+role, restricted to roles with ≥1 permission and ≥1 non-deleted assigned user, as requested. Added a window-function column `total_qualifying_roles` (count before the 50-row cap) so the full population size is visible on the printed page without a second query. REPORT: Privileged roles per merchant: grant size and dormancy QUESTION: Which roles across our merchants carry the most permissions, how many users currently hold each role, and how many of those users look dormant (no recent login) — a first read on access-governance hygiene? tenant_name | role_name | is_system | permission_count | users_assigned | users_active | users_dormant | most_recent_login | total_qualifying_roles ------------------------------+-----------+-----------+------------------+----------------+--------------+---------------+----------------------------+----------------------- Ampfeld Elektronik | Owner | true | 26 | 2 | 2 | 0 | 2025-12-31 07:08:19.175557 | 434 Cragsley Outfitters | Owner | true | 26 | 2 | 2 | 0 | 2025-12-31 14:00:26.683942 | 434 Marrowby & Vane | Owner | true | 26 | 2 | 2 | 0 | 2025-12-26 07:41:36.208017 | 434 Alpine Loft | Owner | true | 26 | 1 | 1 | 0 | 2025-12-23 14:06:49.18011 | 434 Ampere & Co. | Owner | true | 26 | 1 | 1 | 0 | 2025-12-25 08:48:33.910648 | 434 Atelier Nouveau | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 08:34:38.260986 | 434 Aurum & Ash | Owner | true | 26 | 1 | 1 | 1 | 2024-12-26 09:20:33.907508 | 434 Ballycorran Industrial Supply | Owner | true | 26 | 1 | 1 | 0 | 2025-12-15 09:55:50.106232 | 434 Barkley & Co. | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 08:57:42.128574 | 434 Basecamp Nord | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 07:38:51.397011 | 434 Bijoux Lune | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 08:21:16.785713 | 434 Brennquell Kaffee | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 06:04:23.969469 | 434 Brewline Coffee | Owner | true | 26 | 1 | 1 | 0 | 2025-12-19 08:38:46.510976 | 434 Brick & Bobbin | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 08:48:23.696749 | 434 Buchstabe | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 08:01:15.575688 | 434 Bytefield | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 07:59:26.126407 | 434 Castell Fasteners | Owner | true | 26 | 1 | 1 | 0 | 2025-12-05 16:09:06.418974 | 434 Chocolaterie Mireille | Owner | true | 26 | 1 | 1 | 0 | 2025-12-23 06:03:42.60224 | 434 Cinder Peak Sports Co. | Owner | true | 26 | 1 | 1 | 0 | 2025-12-26 17:55:00.698728 | 434 Circuit Harbor | Owner | true | 26 | 1 | 1 | 0 | 2025-12-18 08:45:47.693554 | 434 Coastline Interiors | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 06:40:46.358964 | 434 Copper Lane | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 15:41:24.665014 | 434 Courtside Collective | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 07:18:11.26492 | 434 Deskline Supplies | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 07:41:34.360103 | 434 Dewdrop Studio | Owner | true | 26 | 1 | 1 | 0 | 2025-10-09 09:44:11.78363 | 434 Driftwood Home | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 06:34:26.176787 | 434 Feather & Fin | Owner | true | 26 | 1 | 1 | 0 | 2025-12-21 15:01:20.730905 | 434 Fell & Fjell | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 06:33:59.909025 | 434 Fennel & Flint | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 10:30:00.904438 | 434 Fern & Fable | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 09:50:07.404579 | 434 Fjordline Wear | Owner | true | 26 | 1 | 1 | 0 | 2025-12-24 07:08:21.240599 | 434 Folio & Fern | Owner | true | 26 | 1 | 1 | 0 | 2025-12-25 07:53:09.345969 | 434 Glasshouse Grooming | Owner | true | 26 | 1 | 1 | 0 | 2025-12-29 17:09:48.066091 | 434 Goldkind | Owner | true | 26 | 1 | 1 | 0 | 2025-12-24 08:49:57.98021 | 434 Gratlinie Outdoor | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 08:18:14.474838 | 434 Greyfriars Supply | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 12:33:46.367033 | 434 Grind Collective | Owner | true | 26 | 1 | 1 | 0 | 2025-12-22 07:03:34.101547 | 434 Halden Boots | Owner | true | 26 | 1 | 1 | 1 | 2025-10-03 08:05:13.116482 | 434 Hanse Industriebedarf | Owner | true | 26 | 1 | 1 | 0 | 2025-12-26 07:52:54.846781 | 434 Harbour Swim | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 07:59:41.720572 | 434 Hautnah | Owner | true | 26 | 1 | 1 | 0 | 2025-12-19 07:02:22.875747 | 434 Haven Linen | Owner | true | 26 | 1 | 1 | 0 | 2025-12-28 08:22:05.259461 | 434 Honeycomb Larder | Owner | true | 26 | 1 | 1 | 0 | 2025-12-29 15:14:47.363465 | 434 Hound Hamper | Owner | true | 26 | 1 | 1 | 0 | 2025-12-30 09:06:03.997591 | 434 Hus & Hem | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 07:45:02.163092 | 434 Inkwell & Quire | Owner | true | 26 | 1 | 1 | 0 | 2025-12-12 08:45:44.918052 | 434 Juniper Apothecary | Owner | true | 26 | 1 | 1 | 0 | 2025-12-24 07:13:45.060943 | 434 Kabelwerk | Owner | true | 26 | 1 | 1 | 0 | 2025-12-26 08:47:56.890307 | 434 Kaffeekontor Nord | Owner | true | 26 | 1 | 1 | 0 | 2025-12-31 09:24:55.839162 | 434 Kayak Corner | Owner | true | 26 | 1 | 1 | 0 | 2025-12-29 08:22:47.288399 | 434 (50 rows)