- Cast editor.storage to any for tiptap-markdown's getMarkdown (untyped extension storage) - Replace setContent(value, false) with setContent(value, { emitUpdate: false }) for TipTap v3 API Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Leaderboard: rank-based percentile tiers (champion/gold/silver/bronze), deterministic tie-breaking (xp DESC, user_id ASC) - Mentor chat: md: breakpoints, safe-area-inset-bottom padding - Learning progress: server-side progressPct, curriculum expansion safety - Physical orders: hard-disabled with 410 Gone - Certificate approval: pending/issued flow, admin issue/revoke endpoints, certificate_requires_approval setting (migration 0031) - Draft/publish: is_published on lessons and chapters, admin publish UI (migration 0030) - Video panel: static thumbnails (no preload), client-side pagination - Rich editor: TipTap + tiptap-markdown for lesson descriptions, marked + DOMPurify for SafeMarkdown rendering