[{"data":1,"prerenderedAt":380},["ShallowReactive",2],{"$fpAochlFdhHq1pjzt89Dr-Vi9xTB3PXbugWN5PAkFA8U":3},{"newThing":4,"project":5,"cycle":8,"sections":24,"threads":358,"otherDocs":359,"images":362,"archiveItems":370,"links":379},null,{"id":6,"label":7,"liveBase":4},"design","Design",{"id":9,"num":10,"dir":11,"name":12,"title":13,"focus":14,"status":15,"statusNote":16,"created":17,"completed":4,"mode":4,"recordless":18,"thumbnail":19,"imageCount":20,"artifactCount":21,"lastActivity":22,"hasPickup":18,"hasInitialPrompt":23},"c51",51,"c51.app-consolidation","app-consolidation","App Consolidation","Understand the fractured qcontrol app ecosystem and consolidate it into a simple, clean, demoable product on a Nuxt + q-nuxt-layer front-end","flagged","flagged in c69 sweep — umbrella dispersed into c54–c68","2026-07-14",false,"\u002Farchive\u002F2026-q3\u002Fc51-consolidation-gaps.png",2,3,"2026-09-11",true,[25,48,181,259],{"key":26,"title":27,"empty":18,"ast":28},"why","Why",{"type":29,"children":30},"root",[31],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36,39,46],{"type":37,"value":38},"text","The product shifted to AI agent security & monitoring and took shape organically in the engineers' hands inside the ",{"type":32,"tag":40,"props":41,"children":43},"code",{"className":42},[],[44],{"type":37,"value":45},"qcontrol",{"type":37,"value":47}," Rust monorepo. The result is a fractured application state: three separate front-ends (qdash fleet dashboard with two coexisting UIs, qglass live log inspector on a different Vue stack, qtray native macOS menu bar) plus the cloud control plane (qplane \u002F app.qpoint.io) and a marketing product lineup (qcontrol \u002F qtap \u002F qplane \u002F devtools \u002F qscan) that doesn't map cleanly to the actual surfaces. A design effort is needed to understand everything, converge on one coherent ecosystem, and make every use case clearly demonstrable.",{"key":49,"title":50,"empty":18,"ast":51},"objective","Objective",{"type":29,"children":52},[53,58],{"type":32,"tag":33,"props":54,"children":55},{},[56],{"type":37,"value":57},"Six hard objectives:",{"type":32,"tag":59,"props":60,"children":61},"ol",{},[62,82,116,126,136,155],{"type":32,"tag":63,"props":64,"children":65},"li",{},[66,72,74,80],{"type":32,"tag":67,"props":68,"children":69},"strong",{},[70],{"type":37,"value":71},"Understand what each app does",{"type":37,"value":73}," — captured in ",{"type":32,"tag":40,"props":75,"children":77},{"className":76},[],[78],{"type":37,"value":79},"research\u002F",{"type":37,"value":81}," (done at cycle creation).",{"type":32,"tag":63,"props":83,"children":84},{},[85,90,92,98,100,106,108,114],{"type":32,"tag":67,"props":86,"children":87},{},[88],{"type":37,"value":89},"Implement a Nuxt front-end using q-nuxt-layer",{"type":37,"value":91}," — building on the engineers' existing beachhead at ",{"type":32,"tag":40,"props":93,"children":95},{"className":94},[],[96],{"type":37,"value":97},"qcontrol\u002Fcrates\u002Fqdash\u002Fui\u002F",{"type":37,"value":99}," (Nuxt 4 on ",{"type":32,"tag":40,"props":101,"children":103},{"className":102},[],[104],{"type":37,"value":105},"@qpoint-io\u002Fq-nuxt-layer",{"type":37,"value":107},", branch ",{"type":32,"tag":40,"props":109,"children":111},{"className":110},[],[112],{"type":37,"value":113},"feat\u002Fqdash-nuxt-redesign",{"type":37,"value":115},"). New components created where appropriate (design-site-first, then released to the layer). Subtle dark mode — human-driven.",{"type":32,"tag":63,"props":117,"children":118},{},[119,124],{"type":32,"tag":67,"props":120,"children":121},{},[122],{"type":37,"value":123},"Use-case-driven structure",{"type":37,"value":125}," — every core use case (run, scan, tap, monitor, inspect, dashboard) is clearly demonstrable and demo-able. Simple, makes sense.",{"type":32,"tag":63,"props":127,"children":128},{},[129,134],{"type":32,"tag":67,"props":130,"children":131},{},[132],{"type":37,"value":133},"Docs site",{"type":37,"value":135}," — design + populate a new dedicated docs project (docs.qpoint.io) consuming q-nuxt-layer.",{"type":32,"tag":63,"props":137,"children":138},{},[139,153],{"type":32,"tag":67,"props":140,"children":141},{},[142,144],{"type":37,"value":143},"Fix the cookies permission on ",{"type":32,"tag":145,"props":146,"children":150},"a",{"href":147,"rel":148},"http:\u002F\u002Fwww.qpoint.io",[149],"nofollow",[151],{"type":37,"value":152},"www.qpoint.io",{"type":37,"value":154}," — research shows this is a build, not a fix: no consent system exists in code.",{"type":32,"tag":63,"props":156,"children":157},{},[158,163,165,171,173,179],{"type":32,"tag":67,"props":159,"children":160},{},[161],{"type":37,"value":162},"Adopt useful qcontrol agent processes",{"type":37,"value":164}," — the ",{"type":32,"tag":40,"props":166,"children":168},{"className":167},[],[169],{"type":37,"value":170},"to-prd",{"type":37,"value":172}," → ",{"type":32,"tag":40,"props":174,"children":176},{"className":175},[],[177],{"type":37,"value":178},"to-plan",{"type":37,"value":180}," pipeline transfers to design work.",{"key":182,"title":183,"empty":18,"ast":184},"scope","Scope",{"type":29,"children":185},[186],{"type":32,"tag":187,"props":188,"children":189},"ul",{},[190,201,212,217,228,239],{"type":32,"tag":63,"props":191,"children":192},{},[193,199],{"type":32,"tag":40,"props":194,"children":196},{"className":195},[],[197],{"type":37,"value":198},"..\u002Fqcontrol\u002Fcrates\u002Fqdash\u002Fui\u002F",{"type":37,"value":200}," — the consolidation target front-end",{"type":32,"tag":63,"props":202,"children":203},{},[204,210],{"type":32,"tag":40,"props":205,"children":207},{"className":206},[],[208],{"type":37,"value":209},"..\u002Fq-nuxt-layer\u002F",{"type":37,"value":211}," — new\u002Fextended components and dark-mode tokens",{"type":32,"tag":63,"props":213,"children":214},{},[215],{"type":37,"value":216},"New docs project (to be scaffolded, sibling directory)",{"type":32,"tag":63,"props":218,"children":219},{},[220,226],{"type":32,"tag":40,"props":221,"children":223},{"className":222},[],[224],{"type":37,"value":225},"..\u002Fwww.qpoint.io\u002F",{"type":37,"value":227}," — cookie consent build",{"type":32,"tag":63,"props":229,"children":230},{},[231,237],{"type":32,"tag":40,"props":232,"children":234},{"className":233},[],[235],{"type":37,"value":236},"design\u002F.claude\u002Fskills\u002F",{"type":37,"value":238}," — adopted process skills",{"type":32,"tag":63,"props":240,"children":241},{},[242,244,249,251,257],{"type":37,"value":243},"This cycle's docs: ",{"type":32,"tag":40,"props":245,"children":247},{"className":246},[],[248],{"type":37,"value":79},{"type":37,"value":250}," (four research docs), ",{"type":32,"tag":40,"props":252,"children":254},{"className":253},[],[255],{"type":37,"value":256},"plan.md",{"type":37,"value":258}," (workstream plan)",{"key":260,"title":261,"empty":18,"ast":262},"key-changes","Key Changes",{"type":29,"children":263},[264],{"type":32,"tag":187,"props":265,"children":266},{},[267,307,320,332,345],{"type":32,"tag":63,"props":268,"children":269},{},[270,272,277,279,285,287,293,294,300,301],{"type":37,"value":271},"✓ Researched the qcontrol suite (17 crates, 3 UIs, CLI surface, event contract, qdash API\u002FDB), the qcontrol team's agent process skills, ",{"type":32,"tag":145,"props":273,"children":275},{"href":147,"rel":274},[149],[276],{"type":37,"value":152},{"type":37,"value":278}," cookie state, qplane\u002Fapp.qpoint.io, and docs-site state — saved as ",{"type":32,"tag":40,"props":280,"children":282},{"className":281},[],[283],{"type":37,"value":284},"research\u002Fapps.md",{"type":37,"value":286},", ",{"type":32,"tag":40,"props":288,"children":290},{"className":289},[],[291],{"type":37,"value":292},"research\u002Fuse-cases.md",{"type":37,"value":286},{"type":32,"tag":40,"props":295,"children":297},{"className":296},[],[298],{"type":37,"value":299},"research\u002Fagent-process.md",{"type":37,"value":286},{"type":32,"tag":40,"props":302,"children":304},{"className":303},[],[305],{"type":37,"value":306},"research\u002Fweb-properties.md",{"type":32,"tag":63,"props":308,"children":309},{},[310,312,318],{"type":37,"value":311},"✓ Decisions: build on ",{"type":32,"tag":40,"props":313,"children":315},{"className":314},[],[316],{"type":37,"value":317},"crates\u002Fqdash\u002Fui\u002F",{"type":37,"value":319}," (not a fresh app); docs site is a new dedicated project",{"type":32,"tag":63,"props":321,"children":322},{},[323,325,330],{"type":37,"value":324},"✓ Wrote ",{"type":32,"tag":40,"props":326,"children":328},{"className":327},[],[329],{"type":37,"value":256},{"type":37,"value":331}," — five workstreams (ecosystem understanding, consolidated front-end, docs site, cookie consent, process adoption)",{"type":32,"tag":63,"props":333,"children":334},{},[335,337,343],{"type":37,"value":336},"✓ Component gap analysis (",{"type":32,"tag":40,"props":338,"children":340},{"className":339},[],[341],{"type":37,"value":342},"research\u002Fcomponent-gaps.md",{"type":37,"value":344},") — inventoried qdash UI + qglass against the layer's 116 components. qdash locals mostly wrap layer primitives (promote: Panel, AppSidebar shell, AttentionStrip, BarList; converge DataTable\u002FPermissionTable); true new builds come from qglass absorption: tabs, resizable side panel, tree multi-select, virtualized table",{"type":32,"tag":63,"props":346,"children":347},{},[348,350,356],{"type":37,"value":349},"✓ App inventory (",{"type":32,"tag":40,"props":351,"children":353},{"className":352},[],[354],{"type":37,"value":355},"research\u002Fapp-inventory.md",{"type":37,"value":357},") — product-level catalog of every piece of data and every affordance across qdash's 13 Nuxt pages, qglass's inspector (incl. the event-family taxonomy), and the 8 legacy-dashboard surfaces the port lacks. Key finding: the Nuxt port is 100% read-only — every write path (finding workflow, egress decisions, teams, channels, attestations, campaigns, controls) lives only in the legacy UI",[],[360,256,361],"initial-prompt.md","sarah-runbook.md",[363,366],{"src":19,"kind":364,"order":365},"hero",4999,{"src":367,"kind":368,"order":369},"\u002Farchive\u002F2026-q3\u002Fc51-consolidation-gaps-full.png","full",9000,[371],{"path":372,"title":373,"image":19,"gallery":374},"archive\u002F2026-q3\u002F2026-08-06-c51-consolidation-gaps","Consolidation Gaps",[375,377],{"src":19,"alt":376},"The consolidation-gaps page comparing qdash and qglass components against the layer's catalog.",{"src":367,"alt":378},"Consolidation Gaps — full page",[],1789151084299]