Notifications

Wednesday · 29 July 2026 · 14:41 Asia/Dubai · 11 sources · 22 unread · SSE connected

Daily ops digest sends at 18:00 GST to 7 recipients · will carry 31 items (4 P1, 11 P2, 16 P3) · 6 rules are muted and their 19 suppressed items are excluded Preview digest →

Severity lanes

Severity is layout, not a colour. A P1 interrupts, a P2 waits for you, a P3 only ever appears in the digest.

4 blocking11 review16 informational
P1Blocking · pages a human4
Unauthorized gate read P1
rfid · G1 exit · 22m · unacknowledged
blast 1u · AED 749 · MSR31-07 · HQ_319
Ghost exchange · refund with 0 line items P1
shopify · #MIN10482 · 1h 04m · ack by AY 14:12
blast 1u · AED 749 · unresolvable without a manual pick
Replacement sent, original never returned P1
csd · CSD-4821 · 7d past window · escalated 14:04
blast 2u · AED 2,050 · LBA01 · net -2 risk
Write-off posted P1
rfid · WO-0311 · 3h 12m · awaiting finance countersign
blast 6u · AED 4,812 · MIN-CSN-031 · HQ_319
Escalates to #n8n-alerts at 15m unacked, on-call at 45m
P2Review · same working day11
RFID device offline P2
rfid · FXR90-G1 · last heartbeat 14:09 · 32m
absence rule · gate verification is silently stopped
QC 5-bucket overdue P2
iwms · INF-2318 · 24u in RECEIVED_NOT_INVOICED > 72h
blast 24u · AED 18,400 · blocks invoice booking
Transfer stale > 4d in transit P2
ops2 · TR-0937 · HQ_319 → YAS · AWB RT-88109
blast 12u · AED 9,240 · no receive scan since 25-07
Count accuracy below 98% P2
rfid · session SC-0419-MCC · 97.4% · 41m
blast 14u · AED 6,180 · MCC
Samples past 72h SLA P2
i3 · FYN01-S, PP02-S · SAMPLE_QC 80h
blast 2u · AED 890 · marketing must classify
Escalates to P1 after 4h unacknowledged
P3Informational · digest only16
Classifier unmatched P3
shopify · 5 events · 0.31% of 1,612 · 2h
blast 5 events · SKU "CUSTOM-ENGRAVE" unmapped
Variant SKU rename detected P3
i3 · MSK15-B → MSK15-BLK · alias auto-created
needs confirmation before the ledger merge
Influencer return overdue P3
influencer · 3 cycles · @leenagh 8d late
blast 3u · AED 4,120 exposure
Shipment dispatched P3
rfid · DB-0712 · 67 units · gate-verified 67/67
informational, always fires, digest only
Never escalates · rolled into the 18:00 digest
DoneResolved today31
Gate discrepancy DB-0709
auto-resolved 11:20 · condition cleared
PO receipt due PO-2026-117
resolved by R. Kumar 09:41
Negative balance MIN-VAS-022
resolved by AY 08:55 · compensating row
Webhook retry backlog
auto-resolved 06:12 · 48 events replayed
Median time to resolve today 2h 41m

Alert volume by hour

Last 24h · stacked by severity · hover a bar for the hour breakdown

51 raised
15:00 · 1 P3 16:00 · 2 P3 17:00 · 1 P3 18:00 · 2 P3 18:00 · 1 P2 digest send 19:00 · 1 P3 20:00 · quiet 21:00 · nightly reconcile starts 22:00 · 2 P3 reconcile output 22:00 · 1 P2 drift opened 23:00 · quiet 00:00 · quiet 01:00 · quiet 02:00 · quiet 03:00 · quiet 04:00 · 1 P3 digest build 05:00 · 1 P3 sync run 05:00 · 1 P2 sync delta 06:00 · 3 P3 06:00 · 1 P2 customs cleared late 07:00 · 4 P3 07:00 · 2 P2 08:00 · 5 P3 shift start 08:00 · 3 P2 08:00 · 1 P1 write-off posted 09:00 · 4 P3 09:00 · 2 P2 dispatch batch 10:00 · 3 P3 10:00 · 2 P2 11:00 · 2 P3 12:00 · 3 P3 12:00 · 1 P2 13:00 · 4 P3 13:00 · 2 P2 CSD case aged 13:00 · 1 P1 replacement unreturned 14:00 · 3 P3 14:00 · 2 P2 device offline 14:00 · 2 P1 gate read + ghost exchange
15:0018:0021:0000:0003:0006:0009:0012:00 · now
P1 blockingP2 reviewP3 informationalPeak is shift start, not midnight. Quiet hours 23:00 to 05:00 carry P1 only.

Where alerts went

51 raised · 78 delivery attempts · every suppression is recorded

In-app only · 34% · 27 deliveries Slack #n8n-updates · 23% · 18 Slack #n8n-rfid · 19% · 15 Slack #n8n-alerts · 9% · 7 (P1 only) Email digest · 7% · 5 Suppressed · 8% · 6 (mute, throttle, shadow-only) attempts 78
  • In-app only27
  • #n8n-updates18
  • #n8n-rfid15
  • #n8n-alerts7
  • Email digest5
  • Suppressed6
Suppression reasons: rule_mute 2 · user_mute 1 · throttle 1 · shadow_only 2. Zero silent drops: a suppressed delivery is still a row.

Alert stream

Ordered by severity, then blast value, then age · age is the last tiebreak, never the first

16 of 51 shown
SevSourceRuleSubject Blast uBlast AEDAgeAssigneeStatusRoute
P1rfid rfid.unauthorized_gate_read Tag left G1 with no dispatched shipment · MSR31-07 174922m unassignedopen #n8n-rfid · #n8n-alerts Open ↗
P1csd csd.replacement_unreturned CSD-4821 replacement dispatched 22-07, return window closed 22,0507d AYescalated #n8n-alerts Open ↗
P1rfid rfid.writeoff_posted WO-0311 · 6u MIN-CSN-031 written off at HQ_319 64,8123h 12m Financeacknowledged #n8n-rfid · #n8n-updates Open ↗
P1shopify classifier.ghost_exchange #MIN10482 refunded AED 749 with zero line items 17491h 04m AYacknowledged #n8n-alerts Open ↗
P2rfid rfid.device_offline FXR90-G1 last heartbeat 14:09 · gate verification stopped 0032m R. Kumaropen #n8n-rfid Open ↗
P2iwms iwms.qc_overdue INF-2318 · 24u held in RECEIVED_NOT_INVOICED beyond 72h 2418,40014h WH leadopen #n8n-updates Open ↗
P2ops2 ops2.transfer_stale TR-0937 HQ_319 → YAS · AWB RT-88109 · no receive scan 129,2404d YAS mgracknowledged #n8n-updates Open ↗
P2rfid rfid.count_variance_warn SC-0419-MCC accuracy 97.4% · 14 lines under threshold 146,18041m MCC mgropen #n8n-rfid Open ↗
P2i3 i3.sample_sla_breach FYN01-S, PP02-S in SAMPLE_QC for 80h · SLA is 72h 28908h Marketingopen #n8n-updates Open ↗
P2grn grn.receipt_due_today PO-2026-118 · 1,180u cleared customs 06:10, GRN not prepped 1,180412,6008h 31m WH leadacknowledged #n8n-updates Open ↗
P2i3 ledger.low_stock_buffer 1,517 SKUs at or below buffer · reorder plan ready 1,517184,00011h Plannersnoozed digest only Open ↗
P2ops2 sibling.silent No ops2 dispatch event for 96 min · expected every 20 min 001h 36m AYopen #n8n-alerts Open ↗
P3shopify classifier.unmatched 5 events with no rule match · 0.31% of 1,612 502h unassignedopen digest only Open ↗
P3i3 registry.sku_renamed MSK15-B → MSK15-BLK · alias auto-created, needs confirmation 105h AYopen digest only Open ↗
P3influencer influencer.return_overdue 3 cycles late · @leenagh 8d, @noor.styles 3d 34,1203d Marketingsnoozed digest only Open ↗
P3security security.new_device_login First login from a new device · approve or revoke 004h Adminresolved #n8n-updates Open ↗
J K move · Enter open · E mark read · A acknowledge · S snooze · X select · M mute rule · Shift+E bulk read0 selected · 16 showing · stream lag 240ms

Rules and mute state

A notification can only be created by a rule. Muting suppresses delivery, never the instance.

34 rules6 mutedClassifier rules ↗
Rule codeSourceSevTriggerDedupe key templateThrottleChannelFired 7dSuppressedMuteGate
rfid.unauthorized_gate_readrfidP1eventrfid:unauth:{epc}0s#n8n-rfid, #n8n-alerts30liveGATE-6
rfid.writeoff_postedrfidP1eventwriteoff:{writeoff_id}0s#n8n-rfid, #n8n-updates20liveGATE-6
rfid.gate_discrepancyrfidP2thresholdrfid:gate:{gate_id}:{awb}900s#n8n-rfid114liveGATE-6
rfid.device_offlinerfidP2absencerfid:device:{device_id}1800s#n8n-rfid41liveGATE-6
rfid.count_variance_warnrfidP2thresholdrfid:count:{session_id}0s#n8n-rfid60liveGATE-6
rfid.count_variance_critrfidP1thresholdrfid:count:{session_id}0s#n8n-rfid, #n8n-alerts10liveGATE-6
rfid.shrinkage_detectedrfidP2eventrfid:lost:{epc}86400s#n8n-rfid96shadowGATE-6
rfid.damage_high_valuerfidP2thresholddamage:{damage_id}0s#n8n-rfid51liveGATE-7
rfid.shipment_dispatchedrfidP3eventrfid:dispatch:{batch}3600sdigest only4231shadowGATE-6
csd.replacement_unreturnedcsdP1thresholdcsd:{case_id}86400s#n8n-alerts20liveGATE-2
ops2.transfer_staleops2P2thresholdtransfer:{transfer_ref}43200s#n8n-updates73liveGATE-4
sibling.silenti3P2absencesilent:{source_system}3600s#n8n-alerts20liveGATE-1
classifier.unmatchedshopifyP3thresholdclassifier:{yyyy-mm-dd}21600sdigest only149liveGATE-1
ledger.negative_balancei3P1thresholdneg:{sku}:{location}3600s#n8n-alerts10liveGATE-0
i3.slack_delivery_failedi3P3eventslackfail:{channel}:{hour}3600sin-app only00live-
influencer.return_overdueinfluencerP3thresholdinfl:{cycle_id}86400sdigest only62muted 7dGATE-7
Muted rules keep recording. influencer.return_overdue muted by AY until 03-08, reason "campaign wrap, chasing manually". Its 2 suppressed deliveries are still logged.

Digest preview

Daily ops digest · sends 18:00 GST · 7 recipients · rendered from live counts

From: i3-digest@minimalist.ae · To: ops-leads@minimalist.ae · Wed 29 Jul 2026 · 18:00 GST · digest code daily-ops

i3 Daily Digest · 29 Jul 2026 · GATE-1 day 6 of 7

31 items across 11 sources. 4 are P1 and need a decision before end of day. 19 items were suppressed by an active mute and are excluded from this digest.

  • RFID: 11 events · 1 unauthorized gate read at G1 · FXR90-G1 offline since 14:09 · count SC-0419-MCC at 97.4%
  • Shopify: 9 events · 1 ghost exchange on #MIN10482 · 5 classifier misses (0.31%)
  • ops2: 7 events · TR-0937 stale 4d · dispatch stream silent 96 min at 13:05
  • CSD: 6 events · CSD-4821 replacement unreturned 7d, AED 2,050 at risk
  • IWMS: 5 events · INF-2318 24u past the 72h RECEIVED_NOT_INVOICED window
  • i3 internal: 4 events · 1,517 SKUs at buffer · 2 samples past the 72h SLA
  • GRN: 3 events · PO-2026-118 cleared customs 06:10, 1,180u to receive
  • Influencer: 3 events · 3 loans overdue, AED 4,120 exposure (rule muted, shown for context)
  • Finance: 2 events · WO-0311 AED 4,812 awaiting countersign
  • Security: 1 event · new device login approved 10:22

Open the inbox →

You receive this because your persona is in the digest scope. Change cadence in Settings → Notifications.
3 digests configured: daily-ops 18:00 · weekly-finance Mon 09:00 · rfid-monday 08:30 · empty digests are not sent unless include_empty is on

The rule this page enforces

One rule, one dedupe key, one row

A second producer for the same condition cannot create a second alert. The constraint is UNIQUE (rule_id, dedupe_key, throttle_bucket) on the notifications table, so whichever process gets there first wins and the loser increments occurrence_count.

This is not a style preference. Two ingest paths writing the same alert is a shipped production failure elsewhere in the estate: an n8n workflow and a Fly cron task both ran the same CS ingest every 15 minutes, and rescoping only one of them changed nothing.

Suppression is never silent. A muted, throttled or shadow-only delivery still writes a delivery row with a suppressed_by reason, so "why did nobody get paged" is always answerable.

Escalation P1
15m unacked → #n8n-alerts
45m unacked → on-call
Escalation P2
4h unacked → becomes P1
Escalation P3
never · digest only
Escalates once
idempotent on escalated_at
Quiet hours
23:00 to 05:00 · P1 only
Read state
per person
Resolve
global · note required
Retention
resolved 90d, deliveries 180d
Noise budget: 4.1 alerts per person per day · target under 6 · trending down 0.7 WoW

State variants

The five canonical states this page renders · switch with the selector at the top right

Full pattern library ↗
Loading
Skeleton rows at exactly 28px, the dense row height. No spinner, no layout shift, aria-busy="true" on the feed region.
Empty · Error · Permission
All caught up.
Nothing unread. 6 rules are muted, so quiet is not the same as healthy.
Can't reach the notification stream.
SSE dropped after 3 reconnects. Nothing was changed. Error id ntf-4c81be · 14:38:02.
You can read alerts but not act on them.
Acknowledge, snooze and mute need manager. You hold viewer on app i3.
Connected to Dashboard Drift RFID gates 3-way reconcile Returns Transfers GRN Inbound Stock count Samples Influencer Damages Classifier Rules Sibling events Shopify events Audit log Settings Help State library