function CloseoutBoardView({kind:r}){const o=r.themes||[],a=r.phases||[],c=r.surfaces||[],m=r.roadmap||[],p=r.phase2||[],[i,b]=React.useState("themes"),u={T1:{decision:"accept",note:""},T2:{decision:"modify",note:"add 30-day robots re-check + per-source-URL takedown handler"},T3:{decision:"accept",note:""},T4:{decision:"accept",note:""},T5:{decision:"accept",note:"annual Q1 review of TLD-health; aaas.love revisit Q1 2027"},T6:{decision:"accept",note:""},T7:{decision:"accept",note:"new paid surfaces must declare native_currency in first brief"},T8:{decision:"modify",note:"auto-apply also when confidence \u2265 0.95 AND severity = low; tighten if revert > 5%"},T9:{decision:"accept",note:""},T10:{decision:"accept",note:""},T11:{decision:"accept",note:""},T12:{decision:"modify",note:"split P1 \u2192 P1a (5w \xB7 shell + Costs + Decisions + Services + content kit) + P1b (5w \xB7 KB + Diy + Pics + Prompts/Agents)"},T13:{decision:"accept",note:""},T14:{decision:"accept",note:""},T15:{decision:"accept",note:""},T16:{decision:"accept",note:""},T17:{decision:"accept",note:""}},[n,v]=React.useState(()=>{try{return JSON.parse(localStorage.getItem("closeout-ratify")||"null")||u}catch{return u}});function d(e,t,s){const l={...n,[e]:{decision:t,note:s??n[e]?.note??""}};v(l);try{localStorage.setItem("closeout-ratify",JSON.stringify(l))}catch{}}const h=o.filter(e=>n[`T${e.id}`]).length,g=o.filter(e=>n[`T${e.id}`]?.decision==="accept").length,y=o.filter(e=>n[`T${e.id}`]?.decision==="modify").length,f=o.filter(e=>n[`T${e.id}`]?.decision==="reject").length;return React.createElement("div",{className:"view view-closeoutBoard"},React.createElement("header",{className:"cob-head"},React.createElement("div",null,React.createElement("div",{className:"cob-eyebrow mono"},"CLOSEOUT \xB7 finishing the design phase"),React.createElement("h2",{className:"cob-title"},"14 briefs \xB7 17 themes \xB7 40+ surfaces"),React.createElement("p",{className:"cob-sub"},"Single doc to ratify all open questions across the Canvas spec corpus. Pick a tab \u2014 themes have the recommended answers; surfaces have the mini-specs; phases have the build order."),React.createElement("div",{className:"cob-ratify-bar mono"},React.createElement("span",null,"RATIFIED \xB7 ",h," / ",o.length),React.createElement("span",{className:"cob-ratify-pill cob-ratify-accept"},"\u2713 ",g),React.createElement("span",{className:"cob-ratify-pill cob-ratify-modify"},"\u21AA ",y),React.createElement("span",{className:"cob-ratify-pill cob-ratify-reject"},"\u2717 ",f))),React.createElement("div",{className:"cob-stats"},React.createElement("div",{className:"cob-stat"},React.createElement("div",{className:"cob-stat-v"},"14"),React.createElement("div",{className:"cob-stat-l mono"},"briefs shipped")),React.createElement("div",{className:"cob-stat"},React.createElement("div",{className:"cob-stat-v"},"~9k"),React.createElement("div",{className:"cob-stat-l mono"},"lines of spec")),React.createElement("div",{className:"cob-stat"},React.createElement("div",{className:"cob-stat-v"},"~180"),React.createElement("div",{className:"cob-stat-l mono"},"open Qs answered")),React.createElement("div",{className:"cob-stat"},React.createElement("div",{className:"cob-stat-v"},"3"),React.createElement("div",{className:"cob-stat-l mono"},"phases")))),React.createElement("div",{className:"cob-tabs"},[{id:"themes",label:"Themes",count:o.length},{id:"surfaces",label:"Surface sweep",count:c.length},{id:"phases",label:"P1 / P2 / P3",count:a.length},{id:"handoff",label:"Eng handoff",count:m.length},{id:"phase2",label:"Phase 2 deferred",count:p.length},{id:"memory",label:"Memory updates",count:4}].map(e=>React.createElement("button",{key:e.id,className:`cob-tab ${i===e.id?"on":""}`,onClick:()=>b(e.id)},React.createElement("span",null,e.label),React.createElement("span",{className:"cob-tab-count mono"},e.count)))),i==="themes"&&React.createElement("div",{className:"cob-themes"},o.map(e=>{const t=`T${e.id}`,s=n[t];return React.createElement("article",{key:e.id,className:`cob-theme ${s?`cob-theme-${s.decision}`:""}`},React.createElement("div",{className:"cob-theme-head"},React.createElement("span",{className:"cob-theme-id mono"},"T",e.id),React.createElement("h3",{className:"cob-theme-title"},e.title),React.createElement("span",{className:"cob-theme-touches mono"},"touches: ",e.touches.join(" \xB7 "))),React.createElement("div",{className:"cob-theme-q"},"Q \xB7 ",e.question),React.createElement("div",{className:"cob-theme-rec"},React.createElement("span",{className:"cob-rec-tag mono"},"RECOMMEND"),React.createElement("span",null,e.recommendation)),React.createElement("div",{className:"cob-theme-ratify"},React.createElement("button",{className:`cob-rb cob-rb-accept ${s?.decision==="accept"?"on":""}`,onClick:()=>d(t,"accept")},React.createElement(MIcon,{name:"check",size:14}),"Accept"),React.createElement("button",{className:`cob-rb cob-rb-modify ${s?.decision==="modify"?"on":""}`,onClick:()=>d(t,"modify")},React.createElement(MIcon,{name:"edit_note",size:14}),"Modify"),React.createElement("button",{className:`cob-rb cob-rb-reject ${s?.decision==="reject"?"on":""}`,onClick:()=>d(t,"reject")},React.createElement(MIcon,{name:"close",size:14}),"Push back"),s&&s.decision!=="accept"&&React.createElement("input",{className:"cob-theme-note mono",placeholder:"Note (optional)\u2026",defaultValue:s.note||"",onBlur:l=>d(t,s.decision,l.target.value)})))})),i==="surfaces"&&React.createElement("div",{className:"cob-surfaces"},c.map(e=>React.createElement("div",{key:e.id,className:`cob-surface cob-surface-${e.status}`},React.createElement("div",{className:"cob-surface-head"},React.createElement("span",{className:`cob-surface-status mono cob-status-${e.status}`},e.status),React.createElement("span",{className:"cob-surface-id mono"},"A.",e.id),React.createElement("span",{className:"cob-surface-title"},e.title),React.createElement("span",{className:"cob-surface-route mono"},e.route)),React.createElement("div",{className:"cob-surface-body"},e.body)))),i==="phases"&&React.createElement("div",{className:"cob-phases"},a.map(e=>React.createElement("article",{key:e.id,className:`cob-phase cob-phase-${e.id}`},React.createElement("div",{className:"cob-phase-head"},React.createElement("div",{className:"cob-phase-id"},e.id.toUpperCase()),React.createElement("div",null,React.createElement("div",{className:"cob-phase-window mono"},e.window),React.createElement("div",{className:"cob-phase-title"},e.title)),React.createElement("div",{className:"cob-phase-count mono"},e.items.length," surfaces")),React.createElement("div",{className:"cob-phase-items"},e.items.map((t,s)=>React.createElement("span",{key:s,className:"cob-phase-item"},t)))))),i==="handoff"&&React.createElement("div",{className:"cob-roadmap"},m.map(e=>React.createElement("article",{key:e.id,className:`cob-rm cob-rm-${e.priority}`},React.createElement("div",{className:"cob-rm-head"},React.createElement("span",{className:`cob-rm-pri mono cob-rm-pri-${e.priority}`},e.priority),React.createElement("div",{className:"cob-rm-title"},e.title),React.createElement("span",{className:"cob-rm-owner mono"},"\u2192 ",e.owner)),React.createElement("div",{className:"cob-rm-body"},e.scope),React.createElement("div",{className:"cob-rm-foot mono"},React.createElement("span",null,e.weeks," weeks"),React.createElement("span",null,"\xB7 ",e.entry),React.createElement("span",null,"\xB7 exit: ",e.exit))))),i==="phase2"&&React.createElement("div",{className:"cob-phase2"},p.map(e=>React.createElement("article",{key:e.id,className:"cob-p2"},React.createElement("div",{className:"cob-p2-head"},React.createElement("span",{className:"cob-p2-tag mono"},"PHASE 2"),React.createElement("div",{className:"cob-p2-title"},e.title),React.createElement("span",{className:"cob-p2-when mono"},e.when)),React.createElement("div",{className:"cob-p2-body"},e.body),React.createElement("div",{className:"cob-p2-foot mono"},"depends on: ",e.depends)))),i==="memory"&&React.createElement("div",{className:"cob-memory"},React.createElement("div",{className:"cob-memory-head mono"},"4 prior-claimed-facts in memory need updating"),React.createElement("div",{className:"cob-memory-row"},React.createElement("div",{className:"cob-memory-key"},"reference_vault_*"),React.createElement("div",{className:"cob-memory-was"},"was: ",React.createElement("em",null,'"vault stores secrets"')),React.createElement("div",{className:"cob-memory-is"},"\u2192 Vault is the ",React.createElement("strong",null,"Skill Library")," (5,400+ skills from GitHub manifest)."),React.createElement("span",{className:"cob-memory-src mono"},"#1749")),React.createElement("div",{className:"cob-memory-row"},React.createElement("div",{className:"cob-memory-key"},".diy pricing"),React.createElement("div",{className:"cob-memory-was"},"was: ",React.createElement("em",null,'".diy is free, community templates only"')),React.createElement("div",{className:"cob-memory-is"},"\u2192 .diy has ",React.createElement("strong",null,"Free $0 / Pro $12 / Team $29 USD"),"."),React.createElement("span",{className:"cob-memory-src mono"},"#1737 + #1739")),React.createElement("div",{className:"cob-memory-row"},React.createElement("div",{className:"cob-memory-key"},"aaas.name"),React.createElement("div",{className:"cob-memory-was"},"was: ",React.createElement("em",null,'"aaas.name = 301-redirect"')),React.createElement("div",{className:"cob-memory-is"},"\u2192 .name is ",React.createElement("strong",null,"591 LoC platform page + 651 LoC standalone app"),"."),React.createElement("span",{className:"cob-memory-src mono"},"#1750")),React.createElement("div",{className:"cob-memory-row"},React.createElement("div",{className:"cob-memory-key"},"reference_aaas_notebooklm_kb"),React.createElement("div",{className:"cob-memory-was"},"was: ",React.createElement("em",null,'"megadocs at ~/.claude/docs/"')),React.createElement("div",{className:"cob-memory-is"},"\u2192 migrated to repo ",React.createElement("strong",null,"docs/ecosystem-megadoc-2026-05-24/"),"."),React.createElement("span",{className:"cob-memory-src mono"},"#1749 Q15"))))}window.VIEWS.closeoutBoard=CloseoutBoardView,window.VIEW_OPTIONS.push({value:"closeoutBoard",label:"Closeout",icon:"verified"}),(function(){const o=window.KIND_REGISTRY||{};o.intelCloseout={id:"intelCloseout",label:"Closeout \xB7 14-brief sweep",workspaceLabel:"Closeout",workspaceIcon:"verified",description:"Final completeness sweep across the 14-brief Canvas series \xB7 17 themes \xB7 40+ surfaces \xB7 P1/P2/P3 phasing \xB7 memory updates.",defaultView:"closeoutBoard",defaultDetail:"none",agentTreatment:"implicit",primaryAction:{label:"Open the full brief",kind:"primary",icon:"open_in_new"},secondaryActions:[{label:"Memory updates",icon:"memory"},{label:"Export to PDF",icon:"download"}],heroKpis:[{label:"Briefs",value:"14",trend:"flat"},{label:"Themes",value:"17",trend:"flat"},{label:"Surfaces",value:"40+",trend:"flat"},{label:"Open Qs",value:"180",trend:"flat"},{label:"Memory fix",value:"3",trend:"flat"}],schema:[],mockItems:[],themes:[{id:1,title:"Canvas IA structure",question:"New sections as top-level modules or nested?",recommendation:"8 top-level modules \xB7 DESIGN / PODCAST / COSTS / OPS / QUALITY / MARKETING + new CONTENT + new INTELLIGENCE. No further top-level additions. Everything else nests; Domains route via 3-bucket left-rail grouping (CONTENT/MARKET/COMMUNITY).",touches:["#1735","#1742 Q3","#1744","#1749","#1750","#1751","#1753","#1755"]},{id:2,title:"Subscription tier retention + budget",question:"Same retention scheme across every surface?",recommendation:"Uniform 7d-free / 30d-paid / 90d-enterprise \xB7 across Decisions traces \xB7 query history \xB7 inference history \xB7 Pics images \xB7 Diy private transcripts \xB7 Tasks \xB7 Agent runs. Public sources cache forever; rejected inferences retain longer as training data.",touches:["#1741 Q12","#1749 Q7","#1750 Q12","#1751 Q8","#1753 Q6","#1755 Q13"]},{id:3,title:"RBAC scope",question:"Admin-only or role-tiered?",recommendation:"Tiered. v1 admin-only for context-editing + Vault tier promotion + Prompt edits. v2 = 9-role model (owner/admin/brand_editor/product_owner/sales_lead/legal_editor/ops_editor/hr_editor/viewer). Prompts inherit RBAC from tags.",touches:["#1750 Q5+Q6+Q10","#1751 Q2","#1755 Q6"]},{id:4,title:"Component library packaging",question:"New package or extend?",recommendation:"Extend @supraforge/ui with canvas/ sub-export \xB7 canvas/content/ \xB7 canvas/finance/ \xB7 canvas/intelligence/. No new package.",touches:["#1742 Q9+Q13","#1744 Q11+Q13"]},{id:5,title:"Public TLD subdomains vs Canvas",question:"Keep TLDs or sunset?",recommendation:'Keep all TLDs alive forever \xB7 user portals + SEO + email-signature value. Canvas = operator + power-user lens \xB7 two render contexts via mode: "operator" | "user" prop. aaas.love stays deferred.',touches:["#1737","#1744 Q5+Q10+Q14","#1750 Q15","#1751","#1753 Q12"]},{id:6,title:"Memory corrections",question:"Which prior claims need updating?",recommendation:"3 corrections \xB7 Vault = Skill Library (not secrets) \xB7 .diy has paid tiers \xB7 aaas.name is a real platform page (not 301). Plus update reference_aaas_notebooklm_kb path migration.",touches:["#1737","#1739","#1749 Q2+Q15","#1750"]},{id:7,title:"Currency + locale",question:"EUR primary or per-product?",recommendation:"EUR primary across operator surfaces. .diy displays USD-primary + EUR-secondary (product pricing in USD). USD upstream converts at Stripe-recorded rate, not today's. Operator locale de-DE; user locale per-product.",touches:["#1737 Q1+Q11","#1739","#1735","#1751","#1753"]},{id:8,title:"Auto-apply / approval gates",question:"When does system auto-apply?",recommendation:"Severity-gated. Trivial (typo/casing/dedup) auto-apply with 30-day revert + audit. Low/medium/high require user review. One-shot operator actions immediate, reversible via audit log.",touches:["#1750 Q3","#1755 Q5"]},{id:9,title:"A/B testing infrastructure",question:"Stateless or sticky per-uid?",recommendation:"Stateless per-call in v1 \xB7 sticky per-uid in P3. Outcome scoring auto-eval is primary signal (was it accepted/re-run/shared); human ratings as override.",touches:["#1751 Q4","#1755 Q4+Q5"]},{id:10,title:"NotebookLM federation",question:"User-facing or operator-only?",recommendation:"Operator-only v1; user-side gets Gemini-grounded fallback on same megadoc corpus. NotebookLM Enterprise only after 100+ users actively ask ecosystem questions. Remote-trigger sync-now.sh via Cloud Function in P1.",touches:["#1749 Q3+Q4+Q14"]},{id:11,title:"Cross-Canvas notifications",question:"Single inbox or per-source?",recommendation:"Single NotificationCenter with per-source tabs inside the drawer. Sources: inferences \xB7 subscription events \xB7 cost anomalies \xB7 edge-review \xB7 agent failures \xB7 content reports \xB7 DSAR. Per-domain unread badges on rail.",touches:["#1744","#1750 Q8"]},{id:12,title:"Migration sequencing",question:"What order?",recommendation:"3-phase. P1 (10 weeks Q3): 8-module IA \xB7 Costs+Subs \xB7 Decisions inbox \xB7 Services Toggle \xB7 KB \xB7 Ask MVP \xB7 Context Inbox \xB7 top-5 content kit \xB7 .diy P1 \xB7 .pics P1 \xB7 Toolbox \xB7 Prompt Lib read \xB7 Agent Catalog read. P2 (10 weeks Q4): Email Editor \xB7 5 ops dashboards \xB7 per-domain integrations one-per-sprint \xB7 Prompt write+A/B \xB7 R1 migration first batch \xB7 funnel analytics \xB7 RBAC enforcement. P3 (16 weeks Q1-Q2 2027): compliance suite \xB7 support console \xB7 brand book \xB7 AP/Receipt/RevRec \xB7 status page \xB7 webhook log \xB7 cross-pipeline tracer \xB7 A0 teardown \xB7 SPA migration complete \xB7 NotebookLM user-side \xB7 embedding pipeline \xB7 builder workshop migration.",touches:["all"]},{id:13,title:"Two-Canvas R1 timing",question:"When does apps/canvas SPA merge into platform?",recommendation:'R1 over 2-quarter window. Start P2, complete P3. R3 "Studio" is interim posture. Module-by-module: .diy \u2192 /select/diy (P1) \xB7 .builders (P2) \xB7 .today (P2) \xB7 rest P3. Each batch: build Next route \u2192 copy \u2192 ship behind flag \u2192 A/B \u2192 flip \u2192 retire SPA.',touches:["#1744 Q1+Q12"]},{id:14,title:"Data source naming + reconciliation",question:"Unify duplicate registries?",recommendation:"Single Firestore SoT with code-mirrors for static-build SEO. /agents/{id} \u2190 select-agents.ts + registry.json. /prompts/{id} \u2190 scattered prompt files. /services_catalog/{id} \u2190 auth-core (with sku_tiers vs defaultEntitlement separation). Codegen back to TS for SEO preservation.",touches:["#1745 Q12","#1755 Q1+Q3+Q12"]},{id:15,title:"Pricing + tier consistency",question:"How do tiers gate features?",recommendation:"Tier check via available_to_tier server-side, surfaced as ServiceUnlockModal (Mode C) when locked. Free 7d/free skills/10 packages-month/3 sources/no Pics. Pro all skills/unlimited/11 sources/Pics. Team +MCP+SSO+team library. Enterprise custom. All checks via canAccessFeature(uid, feature_id).",touches:["#1737","#1745 Q5","all per-product briefs"]},{id:16,title:"Vendor health + cost reconciliation",question:"Real-time + daily?",recommendation:'Two-layer. Real-time /canvas/ops/integrations for up/down per 13 vendors. Daily BigQuery cost-export flagged "gesch\xE4tzt" until invoice closes. Outage triggers AnomalyCard auto. Over-budget triggers BudgetRing red + gates dependent agent runs (operator-override).',touches:["#1735","#1742 \xA73 #5","#1751 Q3"]},{id:17,title:"Closeout meta",question:"When do per-domain briefs ship?",recommendation:"Per-domain briefs are P2-onwards. This closeout closes structural design phase. Operator ratifies these 17 themes \u2192 claude.ai/design ingests 14-brief corpus + this closeout to design Canvas v2 in October \u2192 per-domain implementation briefs come AFTER design lands, one per sprint at engineering pace.",touches:["#1742 Q11","this closeout"]}],surfaces:[{id:"1",status:"needs-brief",title:"Tasks system",route:"/canvas/intelligence/tasks",body:"Operator browse/search/triage across all agents' tasks. Virtualized table + kanban toggle. lib/tasks.ts CRUD + bulk reassign + retry. Cross-link Zooey/cost/agent."},,{id:"3",status:"extend",title:"Daily AI Podcast pipeline overview",route:"/canvas/podcast/pipeline",body:"End-to-end view: aggregator (4 sources) \u2192 Gemini ranker \u2192 NotebookLM Cloud Run Job \u2192 MP3 \u2192 RSS+WebSub \u2192 Postiz. Per-stage health + failure-replay."},{id:"4",status:"needs-brief",title:"Funnel architecture v1 ops",route:"/canvas/marketing/funnel",body:"5-surface funnel viz (landing \u2192 signup \u2192 onboarding \u2192 first-task \u2192 paid) + per-stream attribution + UTM breakdown + 13 cutpoints Q2-Q4 2026."},{id:"5",status:"needs-brief",title:"EIE / Hetzner SMTP port-25",route:"/canvas/ops/email-infra",body:"3 VPS health table + port-25 unblock-ticket status + deliverability score + bounce rate + Resend fallback toggle."},{id:"6",status:"cleanup",title:"A0 retirement verification",route:"/canvas/ops/legacy-systems",body:"4-step teardown checklist. Remove page once verified. Cost-recovery KPI vs A0 burn."},{id:"7",status:"cleanup",title:"apps/canvas SPA migration tracker",route:"/canvas/ops/spa-migration",body:"Per-module migration status table + LoC + 308-redirect + burndown chart. Remove after R1 complete."},{id:"8",status:"inventory",title:"Email Template Editor \xB7 67 templates",route:"/canvas/marketing/email-templates",body:"Split MJML/React-Email source + live HTML preview + send-test + variable tester. Diff/rollback + A/B same pattern as Prompt Library."},{id:"9",status:"inventory",title:"Cloud Scheduler \xB7 62 jobs",route:"/canvas/ops/scheduler",body:"Table: cron + target + status + last-fired + last-error. Bulk enable/disable with reason. Per-job audit. Trigger-now."},{id:"10",status:"inventory",title:"Firestore Index Audit \xB7 119 indexes",route:"/canvas/ops/firestore-indexes",body:"Sync from firestore.indexes.json + drift detector vs GCP + unused-index flag + cost-impact estimate."},{id:"11",status:"inventory",title:"Secrets Dashboard",route:"/canvas/ops/secrets",body:"All Secret Manager entries + rotation reminder (>90d) + per-secret usage map. Read-only; rotation via gcloud only."},{id:"12",status:"inventory",title:"Integration Health \xB7 13 vendors",route:"/canvas/ops/integrations",body:"13-vendor grid + status + last-response + monthly spend + last-incident. Status history strip + credentials health cross-link."},{id:"13",status:"inventory",title:"Apps Health \xB7 18 apps",route:"/canvas/ops/apps",body:"18-app grid + Cloud Run / Hosting + last-deploy + p50/p95 + error rate + cost. Per-app drill: deploy history + traffic split + rollback."},{id:"14",status:"inventory",title:"DLQ Inspector",route:"/canvas/ops/dlq",body:"All Pub/Sub DLQ subscriptions + message count + oldest age + per-message inspector (JSONInspector) + replay + acknowledge-and-drop."},{id:"15",status:"inventory",title:"Cross-Pipeline Tracer \xB7 11 flows",route:"/canvas/ops/tracer",body:"11-flow registry + per-flow live trace (composes DecisionTimeline) + Cloud Trace p50/p95 + failure-pattern dashboard."},{id:"16",status:"compliance",title:"Compliance suite \xB7 6 surfaces",route:"/canvas/ops/compliance/*",body:"Audit Log \xB7 DSAR Queue \xB7 Consent Records \xB7 ToS Versions \xB7 Cookie Consent \xB7 DPA Registry. 90-day audit retention; export to GCS for legal hold."},{id:"17",status:"needs-brief",title:"Support Queue + Chat Console",route:"/canvas/quality/support",body:"Inbound triage (email/form/pics-report) + priority + tags + SLA timer. Chat console with template library + context auto-populated from agentContext."},{id:"18",status:"needs-brief",title:"AP Inbox + Receipt OCR + FX + RevRec",route:"/canvas/costs/*",body:"Vendor bills + receipt OCR (Gemini Vision) + USD-EUR rate history (ECB) + deferred-revenue waterfall (ASC 606-light)."},{id:"19",status:"needs-brief",title:"Status Page + Changelog + Announcements",route:"/canvas/marketing/*",body:"Incident posts to status.aaas.today \xB7 markdown changelog with RSS \xB7 in-app banners with cohort targeting \xB7 email blasts consent-gated \xB7 web-push composer."},{id:"20",status:"inventory",title:"Brand Book + Logo Library + Voice + A11y",route:"/canvas/design/brandbook",body:"Canonical single-page reference \xB7 logos with usage rules \xB7 voice/tone do/don't \xB7 a11y contrast/aria scan across deployed surfaces."},{id:"21",status:"needs-brief",title:"KYC Queue + Demo Seeder + Onboarding Editor",route:"/canvas/ops/onboarding/*",body:"High-tier KYC queue \xB7 one-click fake-tenant generator \xB7 6-step v2 flow editor with conditional + A/B."}],phases:[{id:"p1",title:"Q3 2026 \xB7 10 weeks",window:"Q3 2026",items:["8-module IA shell \xB7 INTELLIGENCE + CONTENT modules","Costs + Subscriptions dashboards","Decisions/Zooey inbox","Services Toggle adaptive Canvas","KB editor + Knowledge Ask MVP","Context Inbox","Top-5 content surface kit (Article \xB7 Video \xB7 Podcast \xB7 Template \xB7 Gallery)",".diy upgrade P1",".pics operator overlay P1","Toolbox surfacer","Prompt Library read-only","Agent Catalog read-only"]},{id:"p2",title:"Q4 2026 \xB7 10 weeks",window:"Q4 2026",items:["Email Template Editor","Cloud Scheduler + Firestore Index + Secrets + Integration Health + Apps Health (5 ops dashboards)","Per-domain integrations (.academy \xB7 .builders \xB7 .boutique \xB7 .quest one per sprint)","Prompt Library write + A/B testing","Two-Canvas R1 migration first batch","Funnel + Audience + Coverage analytics","RBAC enforcement (Capability C of #1750)"]},{id:"p3",title:"Q1-Q2 2027 \xB7 16 weeks",window:"Q1-Q2 2027",items:["Compliance suite (GDPR Audit + DSAR + Consent + ToS + Cookie + DPA)","Support console + KB articles","Brand book + a11y","AP Inbox + Receipt OCR + RevRec","Status Page + Changelog + Announcements","Webhook Log + Query Runner + Log Explorer","Cross-pipeline tracer","A0 teardown verification",".canvas SPA migration completion","NotebookLM user-side fallback","Knowledge embedding pipeline","Builder workshop migration","Vibrant-name + Vibrant-app polish"]}]};const a=(window.STREAMS||{}).intelligence;a&&a.subPages&&!a.subPages.find(c=>c.id==="closeout")&&a.subPages.push({id:"closeout",label:"Closeout \xB7 14 briefs",kind:"intelCloseout"})})();
