Usernode

Block Production

Per-slot lifecycle outcomes across every VRF winner. Slot reports come from the Flutter app at terminal time and are joined with explorer status to classify each won slot into one of ten buckets.

Outcome Taxonomy

Canonical

✅ produced and confirmed canonical

Orphaned

✅ produced, lost a chain race

Chain Race

✅ produced by lower-ranked winner

Local-Only

⚠ client says produced, explorer disagrees

SlotWindowExpired

❌ window closed before pipeline finished

BestTipGlobalSlotHigher

❌ tip moved past this slot

App Dead

❌ no client signal at all

Alarm Missed

❌ wakeup never fired

Production Failure

❌ DB diff / sign / identity proof failed

Invalidated

🔵 protocol revoked the win

Success Rate = (Canonical + Orphaned + Chain Race + Local-Only) / (above + Failed buckets). Invalidated is excluded from both numerator and denominator so producers aren't penalised for protocol-level revocations they can't control.