feat: polish branch — pair badges, bundle cascade, light theme, debug viewer, cleaner
Constraint pair badges:
- engine: via-nested carrier detection (computePairingsFull scans downstream wildcards' options for the target uuid; first match claims the slot as a CARRIER, sender + carrier share a PairingVia)
- PairBadge.vue: unified chip + Teleport popover for sender / direct / carrier / option surfaces. Carrier variant collapses inbound via-pairs into a single solid chip. Pair color hashed from senderRowKey+targetUuid so distinct senders avoid 8-slot palette collisions
- Threads viaOptionPairs from ContextWidget through ModuleEditModal -> WildcardInstanceModal -> PoolSection -> OptionRow for trailing chip in option value cells
Other polish:
- Bundle MISSING badge, push-to-library, cascade restore, fork-of-missing rebind, sidebar live counts, drift-store guard
- DebugViewer: RichTextPreview chips, library + preview-cache uuid resolve, constraint trace status 'never fired'
- Light theme: refchip/optionrow tokens, constraint matrix axes, kind colors, picker overlay
- Cleaner widget polish, autoheight, blocklist baseline, dangling_var post-strip
- Nested ref syntax #name segment, autocomplete dedupe by opts count + uuid, broken refs cached-name fallback
- Cascade: cleanup as opt-out checkbox, bundle delete scan + fixer, multi-root regression fix
- Migration 011 backfill ref names; test_migration_010 reset versions >=10 to coexist with 011