# Framing diagram (BREADBOARD style) — Per-group featuring & pinning (Task 7267) # Uses the Inovo breadboarding language: # place (orange container) · affordance (white child) · data (gray cylinder) # · conditional (purple diamond) · note (yellow sticky) · dashed = new/proposed # Render: ../../render.sh featured-replays-breadboard.d2 vars: { d2-config: { layout-engine: dagre } } classes: { place: { style: { fill: "#ffedd5"; stroke: "#f97316"; font-color: "#9a3412"; bold: true } } affordance: { style: { fill: "#ffffff"; stroke: "#94a3b8"; font-color: "#334155"; font-size: 13 } } data: { shape: cylinder; style: { fill: "#eef2f6"; stroke: "#64748b"; font-color: "#334155"; font-size: 13 } } conditional: { shape: diamond; style: { fill: "#f3e8ff"; stroke: "#9333ea"; font-color: "#6b21a8"; font-size: 13 } } note: { style: { fill: "#fef9c3"; stroke: "#eab308"; font-color: "#713f12"; font-size: 12; border-radius: 10; stroke-dash: 2 } } } grid-columns: 3 grid-gap: 90 # ───────────────────────────────────────────────────────────── current: "① CURRENT" { style: { stroke: "#cbd5e1"; fill: "#ffffff" } dash: "Content dashboard" { class: place; grid-columns: 1 chk: "'Featured' checkbox" { class: affordance } } cfeat: "Content.featured\n(global boolean)" { class: data } dash.chk -> cfeat: "writes" cond: "content is in\nmany groups?" { class: conditional } cfeat -> cond leak: "Replays tab · Community card\nTopics · Author profile" { class: place } cond -> leak: "highlighted in ALL of them" { style.stroke: "#ef4444" } posts: "Group ▸ Posts tab" { class: place; grid-columns: 1 pin: "Pin / Unpin" { class: affordance } } cpin: "ContentGroup.pinned\n(per-group)" { class: data } posts.pin -> cpin: "writes" pain: "Two places, two mechanisms —\nadmin can't see 'what's featured\nin THIS group' in one spot." { class: note } } # ───────────────────────────────────────────────────────────── verA: "② VERSION A — features-tab modal (PR #615)" { style: { stroke: "#cbd5e1"; fill: "#ffffff" } cfg: "Group admin ▸ Replay feature config (modal)" { class: place; grid-columns: 1 mgr: "Featured-replays list" { class: affordance } pin: "Pin / Unpin replay" { class: affordance } } cpin: "ContentGroup.pinned\n(reused — no new data)" { class: data } cfg.pin -> cpin: "writes" posts: "Group ▸ Posts tab" { class: place; grid-columns: 1 ppin: "Pin / Unpin" { class: affordance } } posts.ppin -> cpin rep: "Replays tab" { class: place } cpin -> rep: "floats pinned" note: "Replays live in a MODAL —\ninconsistent with Posts,\nharder to scan." { class: note } } # ───────────────────────────────────────────────────────────── verB: "③ VERSION B — dedicated Replays tab (Bruce)" { style: { stroke: "#cbd5e1"; fill: "#ffffff" } cond: "Replays feature\nenabled?" { class: conditional } panel: "Group admin panel" { class: place; grid-columns: 2 posts: "Posts tab" { class: place; grid-columns: 1 p1: "Pin / Unpin" { class: affordance } } replays: "Replays tab (NEW)" { class: place; grid-columns: 1 style.stroke-dash: 4 r1: "Pin / Unpin" { class: affordance } r2: "reuse Post components" { class: affordance } } } cond -> panel.replays: "auto-adds tab" { style.stroke: "#9333ea" } cpin: "ContentGroup.pinned\n+ type='replay' (reused)" { class: data } panel.replays.r1 -> cpin: "writes" note: "Posts & Replays = parallel tabs,\nsame pattern, one place to scan.\nFeatured could reduce to\n'auto-show latest'." { class: note } }