L2 Hygiene Exceptions?

All six L2 hygiene checks unified into one row-per-violation view. KPI = total open violations; bar chart breaks down by check_type so you see which check kind dominates today; the detail table sorts by count (descending) so the worst offenders surface first. Each check_type captures a 'declaration vs runtime' mismatch the L1 dashboard doesn't catch — Chain Orphans, Unmatched Transfer Type, Dead Rails, Dead Bundles Activity, Dead Metadata Declarations, Dead Limit Schedules.

Distinct Exception Types Open

Count of distinct exception TYPES (one of the six L2 hygiene checks) currently with at least one open violation. The detail table's Violations per Type column counts occurrences PER row — these are two different units measuring different things, both correct.

L2 Violations by Check Type

Count per L2 hygiene check. A spike in one kind points at a recurring class of declaration-vs-runtime drift to investigate first.

L2 Violation Detail

Every row is one detected L2 violation. Sorted by occurrences (largest first). Right-click any row to drill into Rails (entity_a → Rail filter) or Chains (entity_a → Chain filter). Read entity_a / entity_b / detail in the context of the row's check_type — see the sheet description above for which fields each check populates.



L2 Hygiene Exceptions — what each check surfaces

Each row in the table above is a piece of L2 declaration that doesn't match the live runtime. None of these break the ledger; they break the L2-to-runtime correspondence the integrator's ETL is supposed to maintain. The six check kinds: