1Token IntegrityLayout/sizing fully tokenised (scale-400, scale-100, scale-0, font-size-200, font-weight-bold, border-radius-full, bg-surface-default). Ring 2px is structural — no ring-width token exists, acceptable. Light variant backgrounds use primitive-tier tokens (token-primitives-blue-100, red-100, yellow-100) where semantic equivalents exist (token-bg-info-subtle-default, token-bg-danger-subtle-default, token-bg-warning-subtle-default) — improvement opportunity ⚠⚠
2Scale HarmonyBadge height token-scale-400 (16px) aligns with badge.badge-small compound rule — consistent within the badge system; font-size-200 (10px) matches badge-small; icon at font-size-550 aligns with ph-2x intent ✓✓
3Radius Coherencetoken-border-radius-full (999px) correct for a notification pill — intentional exception to 8px target, same rationale as standalone badge ✓✓
4Color ContractSolid colours delegated entirely to existing background-* utility classes — no duplication, no raw hex in icon-badge rules; light variants scoped as additive overrides; secondary-100 (#e8eaf2) hardcoded fallback is acceptable — no token-primitives-secondary-100 exists in 2.29 ✓✓
5Legibility & ContrastSolid badges: white on strong backgrounds ≥ 4.5:1 ✓. Light variants at 10px bold: primary-lightest ~4.85:1 ✓; red-lightest ~6.69:1 ✓; secondary-lightest ~9.16:1 ✓; yellow-lightest ~4.61:1 ✓ — all AA; note 10px is below the 14px threshold so large-text exemption does not apply, margins are thin on primary and yellow ✓✓
6Composition Fitposition absolute + translate(50%,-50%) correctly anchors badge to icon corner; left:auto prevents inherited positioning conflicts; box-shadow ring separator creates visual separation without layout impact; badge floats cleanly across all 4 icon types ✓✓
7Visual Quality16px badge at 10px text matches badge-small density; ring separator distinguishes badge from icon background; 4 sub-rows (colour, light, count, icon) give full coverage of the component's variation surface ✓✓
8Motion & InteractionStatic display element — no transitions or animations present or needed ✓✓
9AccessibilityIcon marked aria-hidden="true" — badge is visual reinforcement, not the sole information carrier (numeral always present); component is non-interactive, 44px touch target rule does not apply; no keyboard behaviour needed ✓✓