Who gets told, when, and why · condition, dedupe key, throttle bucket, routing · this page authors and evaluates, module 01 stores and delivers
A muted day still records the fire and still queues it into the next digest. Nothing is discarded, so a Friday incident is not invisible on Saturday morning. This rule is P1, so the grid is shown for reference and not applied.
Four separate numbers, because a single "would fire" count is what makes a rule look either broken or harmless. A condition may not go live unless the last number over 30 days lands between 1 and 200: zero means it would never have fired and is untestable, over 200 means it is noise before it ships. This one is inside the band.
Fires and emits are 30-day counts · a condition that never fires is a liability, not a quiet success
| Rule code | Sev | Kind | Owner | Dedupe key template | Throttle | Fires | Emits | Acted | Mode | Health |
|---|---|---|---|---|---|---|---|---|---|---|
| ledger.negative_balance | P1 | threshold | 13 | ledger:neg:{sku_id}:{location_code}:{stock_type} | 1h | 1,284 | 63 | 58 | live v4 | healthy |
| audit.chain_broken | P1 | event | 14 | audit:chain:{break_at_id} | 0 | 0 | 0 | 0 | live v1 | never fired · correct, but untested |
| classifier.shadow_leak | P1 | schedule | 14 | clf:leak:{version_id} | 0 | 0 | 0 | 0 | live v2 | never fired · verified by fault injection 18-07 |
| rfid.gate_absent | P1 | absence | 12 | rfid:device:{device_id} | 30m | 14 | 6 | 6 | live v3 | healthy |
| ledger.composite_breach | P1 | schedule | 03 | clf:composite:{sku_id} | 6h | 4 | 2 | 2 | live v1 | healthy · L2 |
| classifier.match_rate_low | P2 | threshold | 14 | clf:rate:{business_date} | 6h | 18 | 3 | 3 | live v2 | healthy |
| classifier.unmatched_spike | P2 | threshold | 14 | clf:unmatched:{topic} | 2h | 62 | 14 | 12 | live v3 | healthy |
| fanout.dlq_unclaimed | P2 | threshold | 14 | fanout:dlq:{subscriber_code} | 4h | 31 | 8 | 7 | live v1 | healthy |
| fanout.backlog_age | P2 | threshold | 14 | fanout:backlog:{subscriber_code} | 1h | 22 | 5 | 5 | live v1 | healthy |
| ingest.p95_over_budget | P2 | threshold | 14 | ingest:p95:{topic} | 1h | 204 | 41 | 18 | muted 1d | 44% dismissed · needs a tighter condition |
| ingest.topic_absent | P2 | absence | 14 | ingest:absent:{source_code}:{topic} | 2h | 11 | 6 | 6 | live v2 | healthy |
| ratelimit.sustained_hold | P2 | threshold | 14 | rl:hold:{bucket_code} | 30m | 48 | 12 | 11 | live v1 | healthy |
| security.hmac_failures | P2 | threshold | 14 | sec:hmac:{source_code} | 15m | 6 | 4 | 4 | live v1 | healthy |
| ledger.cache_unreconciled | P3 | schedule | 02 | bal:unrec:{business_date} | 24h | 7 | 7 | 6 | live v1 | healthy · L8 |
| classifier.dead_rule | P3 | schedule | 14 | clf:dead:{rule_code}:{business_date} | 7d | 24 | 6 | 6 | live v2 | healthy |
| ingest.derived_key | P3 | threshold | 14 | ingest:derivedkey:{source_code}:{business_date} | 24h | 18 | 0 | 0 | shadow 4/7 | evaluating, delivering nothing |
| ratelimit.budget_overrun | P3 | schedule | 14 | rl:budget:{bucket_code}:{month} | 24h | 3 | 0 | 0 | shadow 2/7 | gate-bound to GATE-8 |
| ops2.rto_unscanned | P2 | event | 08 | ops2:rto:{awb} | 4h | 0 | 0 | 0 | disabled | topic not emittable upstream · L18 |
| grn.qc_fail_rate | P2 | threshold | 06 | grn:qcfail:{supplier_id} | 12h | 9 | 2 | 2 | muted 1d | muted by khaled 28-07 |
The three panes keep their widths, so the editor does not jump when the condition lands.
i3 ships 51 seeded conditions, so an empty list means the seed did not run. Zero-filter names the chips: P1 Fanout together hide all 51.
Draft v5 references inv.sellable_pct, which is not a metric. The live v4 keeps evaluating: a broken draft never displaces a working condition. A viewer sees every number and no editable field.
During the nightly chain verify the engine keeps evaluating and queues emissions. It does not skip ticks, because a gap in alert_evaluations is indistinguishable from a condition that did not fire.
Six conditions are bound to a phase gate and stay in shadow until it has held 7 days. They evaluate, they record, they deliver nothing. The card shows the gate name rather than hiding the rule.