[{"data":1,"prerenderedAt":425},["ShallowReactive",2],{"$fLqPXMM96jJ87AWb24PR2z7zMyYUtlZ9zWeRxpynAR4U":3},{"newThing":4,"project":5,"cycle":8,"sections":23,"threads":389,"otherDocs":390,"images":392,"archiveItems":415,"links":424},null,{"id":6,"label":7,"liveBase":4},"design","Design",{"id":9,"num":10,"dir":11,"name":12,"title":13,"focus":14,"status":15,"statusNote":4,"created":16,"completed":4,"mode":4,"recordless":17,"thumbnail":18,"imageCount":19,"artifactCount":20,"lastActivity":21,"hasPickup":17,"hasInitialPrompt":22},"c28",28,"c28.data-component-consolidation","data-component-consolidation","Data Component Audit & Rationalization","Audit, classify, and document the relationship between data\u002F and data-metric\u002F component families","archived","2026-03-17",false,"\u002Fcycles\u002Fdesign\u002Fc28-data-components.png",7,4,"2026-09-11",true,[24,78,88,155,372],{"key":25,"title":26,"empty":17,"ast":27},"why","Why",{"type":28,"children":29},"root",[30,47,73],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35,38,45],{"type":36,"value":37},"text","The layer has two overlapping component families in ",{"type":31,"tag":39,"props":40,"children":42},"code",{"className":41},[],[43],{"type":36,"value":44},"components\u002Fdata\u002F",{"type":36,"value":46},":",{"type":31,"tag":48,"props":49,"children":50},"ul",{},[51,63],{"type":31,"tag":52,"props":53,"children":54},"li",{},[55,61],{"type":31,"tag":56,"props":57,"children":58},"strong",{},[59],{"type":36,"value":60},"data\u002F",{"type":36,"value":62}," — 10 standalone components built over time for various display needs",{"type":31,"tag":52,"props":64,"children":65},{},[66,71],{"type":31,"tag":56,"props":67,"children":68},{},[69],{"type":36,"value":70},"data\u002Fmetric\u002F",{"type":36,"value":72}," — 12 composable building blocks focused on single-value display with optional decorations (sparkline, trend, percent bar)",{"type":31,"tag":32,"props":74,"children":75},{},[76],{"type":36,"value":77},"Both are actively used in app.qpoint.io production. The data-metric components were built as a more composable replacement for some (not all) of the data components, but the two families were never reconciled. The \"data-metric\" name also doesn't communicate what it actually does. Without a clear map, contributors don't know which to reach for.",{"key":79,"title":80,"empty":17,"ast":81},"objective","Objective",{"type":28,"children":82},[83],{"type":31,"tag":32,"props":84,"children":85},{},[86],{"type":36,"value":87},"Produce a clear classification of every data component (replaced \u002F keep \u002F evaluate), a migration guide with before\u002Fafter examples, and a naming recommendation for the data-metric family. No code changes to app.qpoint.io in this cycle.",{"key":89,"title":90,"empty":17,"ast":91},"scope","Scope",{"type":28,"children":92},[93,101,129,137],{"type":31,"tag":32,"props":94,"children":95},{},[96],{"type":31,"tag":56,"props":97,"children":98},{},[99],{"type":36,"value":100},"In scope:",{"type":31,"tag":48,"props":102,"children":103},{},[104,109,114,119,124],{"type":31,"tag":52,"props":105,"children":106},{},[107],{"type":36,"value":108},"Component-by-component classification with rationale",{"type":31,"tag":52,"props":110,"children":111},{},[112],{"type":36,"value":113},"Production usage audit across app.qpoint.io",{"type":31,"tag":52,"props":115,"children":116},{},[117],{"type":36,"value":118},"Migration guide (before\u002Fafter for each replaceable component)",{"type":31,"tag":52,"props":120,"children":121},{},[122],{"type":36,"value":123},"Naming evaluation for the data-metric family",{"type":31,"tag":52,"props":125,"children":126},{},[127],{"type":36,"value":128},"Updated design site documentation",{"type":31,"tag":32,"props":130,"children":131},{},[132],{"type":31,"tag":56,"props":133,"children":134},{},[135],{"type":36,"value":136},"Not in scope:",{"type":31,"tag":48,"props":138,"children":139},{},[140,145,150],{"type":31,"tag":52,"props":141,"children":142},{},[143],{"type":36,"value":144},"Migrating deprecated data\u002F components to data-metric equivalents in app.qpoint.io (future cycle)",{"type":31,"tag":52,"props":146,"children":147},{},[148],{"type":36,"value":149},"Removing deprecated data\u002F components from the layer (future cycle)",{"type":31,"tag":52,"props":151,"children":152},{},[153],{"type":36,"value":154},"New component development",{"key":156,"title":157,"empty":17,"ast":158},"key-changes","Key Changes",{"type":28,"children":159},[160,167,185,191,209,215,228,234,270,276],{"type":31,"tag":161,"props":162,"children":164},"h3",{"id":163},"phase-1-classification",[165],{"type":36,"value":166},"Phase 1: Classification",{"type":31,"tag":48,"props":168,"children":169},{},[170,175,180],{"type":31,"tag":52,"props":171,"children":172},{},[173],{"type":36,"value":174},"Read every data and data-metric component source",{"type":31,"tag":52,"props":176,"children":177},{},[178],{"type":36,"value":179},"Classify into: replaced by data-metric, unique purpose (keep), needs deeper look",{"type":31,"tag":52,"props":181,"children":182},{},[183],{"type":36,"value":184},"Resolve the DataVal question (radio-button features used in prod?)",{"type":31,"tag":161,"props":186,"children":188},{"id":187},"phase-2-production-usage-audit",[189],{"type":36,"value":190},"Phase 2: Production Usage Audit",{"type":31,"tag":48,"props":192,"children":193},{},[194,199,204],{"type":31,"tag":52,"props":195,"children":196},{},[197],{"type":36,"value":198},"Grep app.qpoint.io for every data component",{"type":31,"tag":52,"props":200,"children":201},{},[202],{"type":36,"value":203},"Document file locations, props used, and migration paths",{"type":31,"tag":52,"props":205,"children":206},{},[207],{"type":36,"value":208},"Distinguish production usage from dev\u002Ftest pages",{"type":31,"tag":161,"props":210,"children":212},{"id":211},"phase-3-naming-evaluation",[213],{"type":36,"value":214},"Phase 3: Naming Evaluation",{"type":31,"tag":48,"props":216,"children":217},{},[218,223],{"type":31,"tag":52,"props":219,"children":220},{},[221],{"type":36,"value":222},"Evaluate rename options for data-metric (metric\u002F, stat\u002F, measure\u002F, keep as-is)",{"type":31,"tag":52,"props":224,"children":225},{},[226],{"type":36,"value":227},"Document scope of rename (component count, registry, demo impact)",{"type":31,"tag":161,"props":229,"children":231},{"id":230},"phase-4-deliverables",[232],{"type":36,"value":233},"Phase 4: Deliverables",{"type":31,"tag":48,"props":235,"children":236},{},[237,248,259],{"type":31,"tag":52,"props":238,"children":239},{},[240,246],{"type":31,"tag":39,"props":241,"children":243},{"className":242},[],[244],{"type":36,"value":245},"classification.md",{"type":36,"value":247}," — Component-by-component status",{"type":31,"tag":52,"props":249,"children":250},{},[251,257],{"type":31,"tag":39,"props":252,"children":254},{"className":253},[],[255],{"type":36,"value":256},"migration-guide.md",{"type":36,"value":258}," — Before\u002Fafter examples",{"type":31,"tag":52,"props":260,"children":261},{},[262,268],{"type":31,"tag":39,"props":263,"children":265},{"className":264},[],[266],{"type":36,"value":267},"naming-recommendation.md",{"type":36,"value":269}," — Rename analysis",{"type":31,"tag":161,"props":271,"children":273},{"id":272},"phase-5-rename-execution",[274],{"type":36,"value":275},"Phase 5: Rename Execution",{"type":31,"tag":48,"props":277,"children":278},{},[279,300,305,310,315,349,362,367],{"type":31,"tag":52,"props":280,"children":281},{},[282,284,290,292,298],{"type":36,"value":283},"Renamed ",{"type":31,"tag":39,"props":285,"children":287},{"className":286},[],[288],{"type":36,"value":289},"components\u002Fdata\u002Fmachine\u002F",{"type":36,"value":291}," → ",{"type":31,"tag":39,"props":293,"children":295},{"className":294},[],[296],{"type":36,"value":297},"components\u002Fdata\u002Fmetric\u002F",{"type":36,"value":299}," in q-nuxt-layer",{"type":31,"tag":52,"props":301,"children":302},{},[303],{"type":36,"value":304},"Updated all 12 layer component files and internal cross-references",{"type":31,"tag":52,"props":306,"children":307},{},[308],{"type":36,"value":309},"Renamed 12 demo files in design site, updated component registry (group, tags, slugs, source paths)",{"type":31,"tag":52,"props":311,"children":312},{},[313],{"type":36,"value":314},"Updated ~79 files in app.qpoint.io (production pages, lib docs, dev pages, registry, skills, agents)",{"type":31,"tag":52,"props":316,"children":317},{},[318,319,325,326,332,334,340,341,347],{"type":36,"value":283},{"type":31,"tag":39,"props":320,"children":322},{"className":321},[],[323],{"type":36,"value":324},"app\u002Fpages\u002Flib\u002Fdata-machine\u002F",{"type":36,"value":291},{"type":31,"tag":39,"props":327,"children":329},{"className":328},[],[330],{"type":36,"value":331},"app\u002Fpages\u002Flib\u002Fdata-metric\u002F",{"type":36,"value":333}," and ",{"type":31,"tag":39,"props":335,"children":337},{"className":336},[],[338],{"type":36,"value":339},"app\u002Fpages\u002Fdev\u002Fdata-machine\u002F",{"type":36,"value":291},{"type":31,"tag":39,"props":342,"children":344},{"className":343},[],[345],{"type":36,"value":346},"app\u002Fpages\u002Fdev\u002Fdata-metric\u002F",{"type":36,"value":348}," in app.qpoint.io",{"type":31,"tag":52,"props":350,"children":351},{},[352,354,360],{"type":36,"value":353},"Added ",{"type":31,"tag":39,"props":355,"children":357},{"className":356},[],[358],{"type":36,"value":359},"\u002Flayer\u002Fdata-components",{"type":36,"value":361}," page to design site with classification, architecture, and decision guide",{"type":31,"tag":52,"props":363,"children":364},{},[365],{"type":36,"value":366},"Added Layer nav dropdown linking to Tree Shaking and Data Components sub-pages",{"type":31,"tag":52,"props":368,"children":369},{},[370],{"type":36,"value":371},"Zero references to \"DataMachine\" or \"data-machine\" remain across all three repos (verified via grep)",{"key":373,"title":374,"empty":17,"ast":375},"outcome","Outcome",{"type":28,"children":376},[377],{"type":31,"tag":32,"props":378,"children":379},{},[380,382,387],{"type":36,"value":381},"Completed. All 22 data components classified (6 replaced, 4 kept). DataMachine renamed to DataMetric across all three repos (layer, design, app). Design site documents the relationship at ",{"type":31,"tag":39,"props":383,"children":385},{"className":384},[],[386],{"type":36,"value":359},{"type":36,"value":388},". Migration of deprecated data\u002F components to their data-metric replacements deferred to a future cycle.",[],[245,391,256,267],"initial-prompt.md",[393,396,400,403,405,408,411],{"src":18,"kind":394,"order":395},"hero",4999,{"src":397,"kind":398,"order":399},"\u002Fcycles\u002Fdesign\u002Fc28-data-components-2.png","slice",2,{"src":401,"kind":398,"order":402},"\u002Fcycles\u002Fdesign\u002Fc28-data-components-3.png",3,{"src":404,"kind":398,"order":20},"\u002Fcycles\u002Fdesign\u002Fc28-data-components-4.png",{"src":406,"kind":398,"order":407},"\u002Fcycles\u002Fdesign\u002Fc28-data-components-5.png",5,{"src":409,"kind":398,"order":410},"\u002Fcycles\u002Fdesign\u002Fc28-data-components-6.png",6,{"src":412,"kind":413,"order":414},"\u002Fcycles\u002Fdesign\u002Fc28-data-components-full.png","full",9000,[416],{"path":417,"title":418,"image":18,"gallery":419},"archive\u002F2026-q3\u002F2026-03-28-c28-data-components","Data Components Rationalized",[420,422],{"src":18,"alt":421},"The data-components reference page.",{"src":412,"alt":423},"Data Components Rationalized — full page",[],1789151086850]