[{"data":1,"prerenderedAt":892},["ShallowReactive",2],{"doc-page:adr\u002F0008-data-display-and-reports-section":3},{"data":4,"body":7,"toc":881},{"title":5,"description":6},"ADR 0008 — Data-display stays flat; reports + visualizations are separate sections","",{"type":8,"children":9},"root",[10,18,44,51,57,79,134,153,158,185,191,207,253,258,352,385,391,396,451,464,482,488,493,532,559,565,570,588,601,607,612,686,699,705,814,820],{"type":11,"tag":12,"props":13,"children":15},"element","h1",{"id":14},"adr-0008-data-display-stays-flat-reports-visualizations-are-separate-sections",[16],{"type":17,"value":5},"text",{"type":11,"tag":19,"props":20,"children":21},"ul",{},[22,34],{"type":11,"tag":23,"props":24,"children":25},"li",{},[26,32],{"type":11,"tag":27,"props":28,"children":29},"strong",{},[30],{"type":17,"value":31},"Date",{"type":17,"value":33},": 2026-04-28",{"type":11,"tag":23,"props":35,"children":36},{},[37,42],{"type":11,"tag":27,"props":38,"children":39},{},[40],{"type":17,"value":41},"Status",{"type":17,"value":43},": Accepted (revised 2026-04-28: split Reports from\nVisualizations after first review surfaced that TTI uses the two\nwords for distinct things)",{"type":11,"tag":45,"props":46,"children":48},"h2",{"id":47},"context",[49],{"type":17,"value":50},"Context",{"type":11,"tag":52,"props":53,"children":54},"p",{},[55],{"type":17,"value":56},"A handful of components in the catalog look like they belong together\nunder a \"data\" or \"reports\" umbrella: TuxBigStat, TuxFactoid,\nTuxTreemap, TuxDescriptionList, TuxTable. The argument is that they're\nall \"display the numbers\" components and naming-wise feel like a family.",{"type":11,"tag":52,"props":58,"children":59},{},[60,62,69,71,77],{"type":17,"value":61},"Separately, the design-kit port (2026-04-28, see ",{"type":11,"tag":63,"props":64,"children":66},"code",{"className":65},[],[67],{"type":17,"value":68},"CHANGELOG.md",{"type":17,"value":70},")\nintroduced two related but ",{"type":11,"tag":72,"props":73,"children":74},"em",{},[75],{"type":17,"value":76},"distinct",{"type":17,"value":78}," surfaces:",{"type":11,"tag":19,"props":80,"children":81},{},[82,108],{"type":11,"tag":23,"props":83,"children":84},{},[85,90,92,98,100,106],{"type":11,"tag":27,"props":86,"children":87},{},[88],{"type":17,"value":89},"Reports",{"type":17,"value":91}," — paper \u002F PDF \u002F print. Finished narratives meant to be\nread top-to-bottom. The toolkit: ",{"type":11,"tag":63,"props":93,"children":95},{"className":94},[],[96],{"type":17,"value":97},"TuxReportFrame",{"type":17,"value":99}," (page chrome) and\n",{"type":11,"tag":63,"props":101,"children":103},{"className":102},[],[104],{"type":17,"value":105},"TuxReportPrintSheet",{"type":17,"value":107}," (print stylesheet).",{"type":11,"tag":23,"props":109,"children":110},{},[111,116,118,124,126,132],{"type":11,"tag":27,"props":112,"children":113},{},[114],{"type":17,"value":115},"Visualizations",{"type":17,"value":117}," — interactive data surfaces (BI dashboards, R\nartifacts, future native charts). The reader pivots and filters\nrather than reading top-to-bottom. The toolkit: ",{"type":11,"tag":63,"props":119,"children":121},{"className":120},[],[122],{"type":17,"value":123},"TuxVizEmbed",{"type":17,"value":125},"\n(Tableau \u002F Power BI \u002F Superset \u002F Grafana iframe wrapper) and\n",{"type":11,"tag":63,"props":127,"children":129},{"className":128},[],[130],{"type":17,"value":131},"TuxVizRPlot",{"type":17,"value":133}," (R artifact wrapper).",{"type":11,"tag":52,"props":135,"children":136},{},[137,139,144,146,151],{"type":17,"value":138},"The first cut of this batch lumped all four under one \"Reports\"\nsection. First review pushed back: at TTI, ",{"type":11,"tag":72,"props":140,"children":141},{},[142],{"type":17,"value":143},"reports",{"type":17,"value":145}," and\n",{"type":11,"tag":72,"props":147,"children":148},{},[149],{"type":17,"value":150},"visualizations",{"type":17,"value":152}," are different deliverables with different\naudiences. Sponsored-research quarterlies, IRB submissions, and\naccreditation packages are reports. Tableau dashboards, Grafana\nboards, Power BI exec overviews, and R-rendered facet plots are\nvisualizations. Conflating them buried the institutional vocabulary.",{"type":11,"tag":52,"props":154,"children":155},{},[156],{"type":17,"value":157},"Three questions to resolve:",{"type":11,"tag":159,"props":160,"children":161},"ol",{},[162,175,180],{"type":11,"tag":23,"props":163,"children":164},{},[165,167,173],{"type":17,"value":166},"Should TuxBigStat \u002F TuxFactoid \u002F TuxTreemap \u002F TuxDescriptionList\nmove into a new ",{"type":11,"tag":63,"props":168,"children":170},{"className":169},[],[171],{"type":17,"value":172},"app\u002Fcomponents\u002Freports\u002F",{"type":17,"value":174}," folder?",{"type":11,"tag":23,"props":176,"children":177},{},[178],{"type":17,"value":179},"Where do the new report + viz components live, and how do they\nrelate to the data-display family?",{"type":11,"tag":23,"props":181,"children":182},{},[183],{"type":17,"value":184},"Reports and visualizations — one section or two?",{"type":11,"tag":45,"props":186,"children":188},{"id":187},"decision",[189],{"type":17,"value":190},"Decision",{"type":11,"tag":52,"props":192,"children":193},{},[194],{"type":11,"tag":27,"props":195,"children":196},{},[197,199,205],{"type":17,"value":198},"TuxBigStat, TuxFactoid, TuxTreemap, TuxDescriptionList, and TuxTable\nstay flat in ",{"type":11,"tag":63,"props":200,"children":202},{"className":201},[],[203],{"type":17,"value":204},"app\u002Fcomponents\u002F",{"type":17,"value":206}," as general-purpose display primitives.",{"type":11,"tag":52,"props":208,"children":209},{},[210,220,222,228,230,251],{"type":11,"tag":27,"props":211,"children":212},{},[213,215],{"type":17,"value":214},"The deliverables-shaped components live flat in ",{"type":11,"tag":63,"props":216,"children":218},{"className":217},[],[219],{"type":17,"value":204},{"type":17,"value":221},"\n— naming, file-system shape, and Vue auto-import work the same as\nevery other ",{"type":11,"tag":63,"props":223,"children":225},{"className":224},[],[226],{"type":17,"value":227},"Tux*",{"type":17,"value":229},". ",{"type":11,"tag":27,"props":231,"children":232},{},[233,235,241,243,249],{"type":17,"value":234},"What's different is route layout: there are\ntwo new route groups, ",{"type":11,"tag":63,"props":236,"children":238},{"className":237},[],[239],{"type":17,"value":240},"\u002Freports\u002F",{"type":17,"value":242}," and ",{"type":11,"tag":63,"props":244,"children":246},{"className":245},[],[247],{"type":17,"value":248},"\u002Fvisualizations\u002F",{"type":17,"value":250},", each with\nits own landing and per-component demos.",{"type":17,"value":252}," Two matching sidebar\ngroups land between \"Composition\" and \"Tooling\".",{"type":11,"tag":52,"props":254,"children":255},{},[256],{"type":17,"value":257},"The split:",{"type":11,"tag":19,"props":259,"children":260},{},[261,295],{"type":11,"tag":23,"props":262,"children":263},{},[264,272,274,279,281,286,288,293],{"type":11,"tag":27,"props":265,"children":266},{},[267],{"type":11,"tag":63,"props":268,"children":270},{"className":269},[],[271],{"type":17,"value":240},{"type":17,"value":273}," → ",{"type":11,"tag":63,"props":275,"children":277},{"className":276},[],[278],{"type":17,"value":97},{"type":17,"value":280}," (page chrome) +\n",{"type":11,"tag":63,"props":282,"children":284},{"className":283},[],[285],{"type":17,"value":105},{"type":17,"value":287}," (print stylesheet). Both are about\n",{"type":11,"tag":72,"props":289,"children":290},{},[291],{"type":17,"value":292},"delivering paper",{"type":17,"value":294},".",{"type":11,"tag":23,"props":296,"children":297},{},[298,306,307,312,314,319,321,326,328,334,336,342,344,350],{"type":11,"tag":27,"props":299,"children":300},{},[301],{"type":11,"tag":63,"props":302,"children":304},{"className":303},[],[305],{"type":17,"value":248},{"type":17,"value":273},{"type":11,"tag":63,"props":308,"children":310},{"className":309},[],[311],{"type":17,"value":123},{"type":17,"value":313}," (BI iframe wrapper) +\n",{"type":11,"tag":63,"props":315,"children":317},{"className":316},[],[318],{"type":17,"value":131},{"type":17,"value":320}," (R artifact wrapper). Both are about ",{"type":11,"tag":72,"props":322,"children":323},{},[324],{"type":17,"value":325},"embedding\ninteractive data surfaces",{"type":17,"value":327},". Future native chart components\n(",{"type":11,"tag":63,"props":329,"children":331},{"className":330},[],[332],{"type":17,"value":333},"TuxChartBar",{"type":17,"value":335},", ",{"type":11,"tag":63,"props":337,"children":339},{"className":338},[],[340],{"type":17,"value":341},"TuxChartLine",{"type":17,"value":343}," — see ",{"type":11,"tag":63,"props":345,"children":347},{"className":346},[],[348],{"type":17,"value":349},"design\u002Froadmap.md",{"type":17,"value":351},"\nPriority B) will land in the same section.",{"type":11,"tag":52,"props":353,"children":354},{},[355,357,363,364,370,372,377,378,383],{"type":17,"value":356},"The earlier ",{"type":11,"tag":63,"props":358,"children":360},{"className":359},[],[361],{"type":17,"value":362},"TuxReportEmbed",{"type":17,"value":242},{"type":11,"tag":63,"props":365,"children":367},{"className":366},[],[368],{"type":17,"value":369},"TuxReportRPlot",{"type":17,"value":371}," names were renamed\nto ",{"type":11,"tag":63,"props":373,"children":375},{"className":374},[],[376],{"type":17,"value":123},{"type":17,"value":242},{"type":11,"tag":63,"props":379,"children":381},{"className":380},[],[382],{"type":17,"value":131},{"type":17,"value":384}," to match the section vocabulary.",{"type":11,"tag":45,"props":386,"children":388},{"id":387},"why-keep-data-display-flat",[389],{"type":17,"value":390},"Why keep data-display flat",{"type":11,"tag":52,"props":392,"children":393},{},[394],{"type":17,"value":395},"Looking at where the four candidates already appear:",{"type":11,"tag":19,"props":397,"children":398},{},[399,413,427,441],{"type":11,"tag":23,"props":400,"children":401},{},[402,411],{"type":11,"tag":27,"props":403,"children":404},{},[405],{"type":11,"tag":63,"props":406,"children":408},{"className":407},[],[409],{"type":17,"value":410},"\u002Fexamples\u002Fpecan-dashboard",{"type":17,"value":412}," — BigStat (header hero) + Factoid\n(3-up stats) + Treemap (budget) + DescriptionList (metadata).",{"type":11,"tag":23,"props":414,"children":415},{},[416,425],{"type":11,"tag":27,"props":417,"children":418},{},[419],{"type":11,"tag":63,"props":420,"children":422},{"className":421},[],[423],{"type":17,"value":424},"\u002Fexamples\u002Fresearch-landing",{"type":17,"value":426}," — BigStat (hero) + Factoid\n(achievements row).",{"type":11,"tag":23,"props":428,"children":429},{},[430,439],{"type":11,"tag":27,"props":431,"children":432},{},[433],{"type":11,"tag":63,"props":434,"children":436},{"className":435},[],[437],{"type":17,"value":438},"\u002Fexamples\u002Ftti-ai-studio-session",{"type":17,"value":440}," — DescriptionList (session\nmetadata) + Factoid (usage).",{"type":11,"tag":23,"props":442,"children":443},{},[444,449],{"type":11,"tag":27,"props":445,"children":446},{},[447],{"type":17,"value":448},"tti-ai-chat kit",{"type":17,"value":450}," — BigFigure (React analog of BigStat) sits in\nthe conversation context panel for corpus + usage stats.",{"type":11,"tag":52,"props":452,"children":453},{},[454,456,462],{"type":17,"value":455},"These aren't \"report\" components — they're general display primitives\nthat happen to show up in dashboards, landings, and chat panels alike.\nSplitting them into a ",{"type":11,"tag":63,"props":457,"children":459},{"className":458},[],[460],{"type":17,"value":461},"reports\u002F",{"type":17,"value":463}," folder would:",{"type":11,"tag":19,"props":465,"children":466},{},[467,472,477],{"type":11,"tag":23,"props":468,"children":469},{},[470],{"type":17,"value":471},"Fragment discoverability — a developer building a chat side-panel\nshouldn't have to think \"is this a reports component?\"",{"type":11,"tag":23,"props":473,"children":474},{},[475],{"type":17,"value":476},"Force decisions on edge cases — TuxTable is used for \"exact tabular\nnumbers\" everywhere, and TuxDescriptionList is used for both\nmetadata tables and compliance event details.",{"type":11,"tag":23,"props":478,"children":479},{},[480],{"type":17,"value":481},"Add zero functional value — file location doesn't change behavior.",{"type":11,"tag":45,"props":483,"children":485},{"id":484},"why-give-reports-and-visualizations-their-own-route-groups",[486],{"type":17,"value":487},"Why give reports and visualizations their own route groups",{"type":11,"tag":52,"props":489,"children":490},{},[491],{"type":17,"value":492},"These components are different in kind from TuxBigStat:",{"type":11,"tag":19,"props":494,"children":495},{},[496,522],{"type":11,"tag":23,"props":497,"children":498},{},[499,504,506,512,514,520],{"type":11,"tag":27,"props":500,"children":501},{},[502],{"type":17,"value":503},"Deliverable-specific chrome.",{"type":17,"value":505}," TuxReportFrame draws an 8.5×11\nsheet on screen and goes borderless under ",{"type":11,"tag":63,"props":507,"children":509},{"className":508},[],[510],{"type":17,"value":511},"@media print",{"type":17,"value":513}," —\ndifferent mental model from \"fits in a flexible Vue layout.\"\nTuxVizEmbed carries a provider chip, sandbox config, and a poster\nfallback for when the live tenant isn't reachable. TuxVizRPlot\nhas a source-line caption gutter for ",{"type":11,"tag":63,"props":515,"children":517},{"className":516},[],[518],{"type":17,"value":519},"sessionInfo()",{"type":17,"value":521},". None of\nthis fits the chrome the rest of the catalog ships with.",{"type":11,"tag":23,"props":523,"children":524},{},[525,530],{"type":11,"tag":27,"props":526,"children":527},{},[528],{"type":17,"value":529},"Discoverability follows institutional vocabulary.",{"type":17,"value":531}," A\nresearch-IT staffer asking \"how do I produce a quarterly\nreport?\" wants Frame + PrintSheet on one landing. A staffer\nasking \"how do I embed our Tableau corridor dashboard?\" wants\nEmbed + RPlot on a different landing. Lumping them buries the\nfact that TTI uses these words for different things.",{"type":11,"tag":52,"props":533,"children":534},{},[535,537,542,544,550,551,557],{"type":17,"value":536},"Keeping the components flat in ",{"type":11,"tag":63,"props":538,"children":540},{"className":539},[],[541],{"type":17,"value":204},{"type":17,"value":543}," means auto-import\nworks as usual (",{"type":11,"tag":63,"props":545,"children":547},{"className":546},[],[548],{"type":17,"value":549},"\u003CTuxReportFrame>",{"type":17,"value":335},{"type":11,"tag":63,"props":552,"children":554},{"className":553},[],[555],{"type":17,"value":556},"\u003CTuxVizEmbed>",{"type":17,"value":558}," from anywhere)\nwhile the route grouping and sidebar groups surface the sections\nin the IA.",{"type":11,"tag":45,"props":560,"children":562},{"id":561},"when-to-add-another-route-group",[563],{"type":17,"value":564},"When to add another route group",{"type":11,"tag":52,"props":566,"children":567},{},[568],{"type":17,"value":569},"Use this same pattern (flat components, grouped routes) when a family:",{"type":11,"tag":159,"props":571,"children":572},{},[573,578,583],{"type":11,"tag":23,"props":574,"children":575},{},[576],{"type":17,"value":577},"Carries chrome that's awkward in normal page composition.",{"type":11,"tag":23,"props":579,"children":580},{},[581],{"type":17,"value":582},"Has a discoverability story stronger than \"I want a button.\"",{"type":11,"tag":23,"props":584,"children":585},{},[586],{"type":17,"value":587},"Has at least four members so the grouping is worth its weight.",{"type":11,"tag":52,"props":589,"children":590},{},[591,593,599],{"type":17,"value":592},"Don't do it speculatively — three components plus a tile-of-tiles is\ncheaper as a ",{"type":11,"tag":63,"props":594,"children":596},{"className":595},[],[597],{"type":17,"value":598},"\u002Fcomponents\u002F\u003Ckebab>",{"type":17,"value":600}," page with cross-links.",{"type":11,"tag":45,"props":602,"children":604},{"id":603},"decision-criteria-components-vs-reports-vs-visualizations",[605],{"type":17,"value":606},"Decision criteria — Components vs. Reports vs. Visualizations",{"type":11,"tag":52,"props":608,"children":609},{},[610],{"type":17,"value":611},"When adding a new component, ask in this order:",{"type":11,"tag":159,"props":613,"children":614},{},[615,638,662],{"type":11,"tag":23,"props":616,"children":617},{},[618,623,625,630,632,637],{"type":11,"tag":27,"props":619,"children":620},{},[621],{"type":17,"value":622},"Would a developer composing a generic page reach for this\nfirst?",{"type":17,"value":624}," (e.g., a button, a card, a stat block, a description\nlist.) → ",{"type":11,"tag":27,"props":626,"children":627},{},[628],{"type":17,"value":629},"Component.",{"type":17,"value":631}," Sidebar group \"Components\", route\n",{"type":11,"tag":63,"props":633,"children":635},{"className":634},[],[636],{"type":17,"value":598},{"type":17,"value":294},{"type":11,"tag":23,"props":639,"children":640},{},[641,646,648,653,655,661],{"type":11,"tag":27,"props":642,"children":643},{},[644],{"type":17,"value":645},"Does it deliver a finished narrative meant to leave the app\non paper or as a PDF?",{"type":17,"value":647}," (Page chrome, print stylesheet, page\nnumbers, paper sizes.) → ",{"type":11,"tag":27,"props":649,"children":650},{},[651],{"type":17,"value":652},"Report.",{"type":17,"value":654}," Sidebar group \"Reports\",\nroute ",{"type":11,"tag":63,"props":656,"children":658},{"className":657},[],[659],{"type":17,"value":660},"\u002Freports\u002F\u003Ckebab>",{"type":17,"value":294},{"type":11,"tag":23,"props":663,"children":664},{},[665,670,672,677,679,685],{"type":11,"tag":27,"props":666,"children":667},{},[668],{"type":17,"value":669},"Does it embed or render an interactive data surface that\nstays inside the app?",{"type":17,"value":671}," (BI iframe, R artifact, future\nnative chart.) → ",{"type":11,"tag":27,"props":673,"children":674},{},[675],{"type":17,"value":676},"Visualization.",{"type":17,"value":678}," Sidebar group\n\"Visualizations\", route ",{"type":11,"tag":63,"props":680,"children":682},{"className":681},[],[683],{"type":17,"value":684},"\u002Fvisualizations\u002F\u003Ckebab>",{"type":17,"value":294},{"type":11,"tag":52,"props":687,"children":688},{},[689,691,697],{"type":17,"value":690},"If the answer to (1) is yes, stop — don't double-classify. A stat\nblock lives in ",{"type":11,"tag":63,"props":692,"children":694},{"className":693},[],[695],{"type":17,"value":696},"\u002Fcomponents\u002Fbig-stat",{"type":17,"value":698}," even if it ends up being\nrendered inside both a Report and a Visualization.",{"type":11,"tag":45,"props":700,"children":702},{"id":701},"consequences",[703],{"type":17,"value":704},"Consequences",{"type":11,"tag":19,"props":706,"children":707},{},[708,729,734,753,758,783],{"type":11,"tag":23,"props":709,"children":710},{},[711,713,719,721,727],{"type":17,"value":712},"New folders: ",{"type":11,"tag":63,"props":714,"children":716},{"className":715},[],[717],{"type":17,"value":718},"app\u002Fpages\u002Freports\u002F",{"type":17,"value":720}," (index + 2 demos) and\n",{"type":11,"tag":63,"props":722,"children":724},{"className":723},[],[725],{"type":17,"value":726},"app\u002Fpages\u002Fvisualizations\u002F",{"type":17,"value":728}," (index + 2 demos).",{"type":11,"tag":23,"props":730,"children":731},{},[732],{"type":17,"value":733},"Two new sidebar groups: \"Reports\" then \"Visualizations\" between\n\"Composition\" and \"Tooling\".",{"type":11,"tag":23,"props":735,"children":736},{},[737,739,744,746,751],{"type":17,"value":738},"All four deliverable components stay flat in ",{"type":11,"tag":63,"props":740,"children":742},{"className":741},[],[743],{"type":17,"value":204},{"type":17,"value":745},",\nprefixed ",{"type":11,"tag":63,"props":747,"children":749},{"className":748},[],[750],{"type":17,"value":227},{"type":17,"value":752}," like everything else.",{"type":11,"tag":23,"props":754,"children":755},{},[756],{"type":17,"value":757},"TuxBigStat \u002F Factoid \u002F Treemap \u002F DescriptionList \u002F Table stay\nwhere they are. No migration.",{"type":11,"tag":23,"props":759,"children":760},{},[761,763,768,769,774,776,781],{"type":17,"value":762},"Future native chart components (",{"type":11,"tag":63,"props":764,"children":766},{"className":765},[],[767],{"type":17,"value":333},{"type":17,"value":335},{"type":11,"tag":63,"props":770,"children":772},{"className":771},[],[773],{"type":17,"value":341},{"type":17,"value":775},",\nper ",{"type":11,"tag":63,"props":777,"children":779},{"className":778},[],[780],{"type":17,"value":349},{"type":17,"value":782}," Priority B) land in the Visualizations\nsection.",{"type":11,"tag":23,"props":784,"children":785},{},[786,788,793,794,799,801,806,807,812],{"type":17,"value":787},"The mid-batch rename (",{"type":11,"tag":63,"props":789,"children":791},{"className":790},[],[792],{"type":17,"value":362},{"type":17,"value":273},{"type":11,"tag":63,"props":795,"children":797},{"className":796},[],[798],{"type":17,"value":123},{"type":17,"value":800},",\n",{"type":11,"tag":63,"props":802,"children":804},{"className":803},[],[805],{"type":17,"value":369},{"type":17,"value":273},{"type":11,"tag":63,"props":808,"children":810},{"className":809},[],[811],{"type":17,"value":131},{"type":17,"value":813},") is documented in the\nUnreleased CHANGELOG section. No published consumer was on the\nold names yet, so no migration is needed.",{"type":11,"tag":45,"props":815,"children":817},{"id":816},"what-we-considered-and-rejected",[818],{"type":17,"value":819},"What we considered and rejected",{"type":11,"tag":19,"props":821,"children":822},{},[823,839,864],{"type":11,"tag":23,"props":824,"children":825},{},[826,837],{"type":11,"tag":27,"props":827,"children":828},{},[829,831,836],{"type":17,"value":830},"Move data-display into ",{"type":11,"tag":63,"props":832,"children":834},{"className":833},[],[835],{"type":17,"value":172},{"type":17,"value":294},{"type":17,"value":838}," Would require\ntouching every existing example and dashboard import. No functional\nwin. Rejected — see \"Why keep data-display flat\".",{"type":11,"tag":23,"props":840,"children":841},{},[842,854,856,862],{"type":11,"tag":27,"props":843,"children":844},{},[845,847,853],{"type":17,"value":846},"Put TuxReport* under ",{"type":11,"tag":63,"props":848,"children":850},{"className":849},[],[851],{"type":17,"value":852},"app\u002Fcomponents\u002Freports\u002FTux*.vue",{"type":17,"value":294},{"type":17,"value":855}," Breaks\nNuxt's flat auto-import without a ",{"type":11,"tag":63,"props":857,"children":859},{"className":858},[],[860],{"type":17,"value":861},"components\u002Freports\u002F",{"type":17,"value":863}," config\noverride. The route grouping already gives us the IA story; nesting\nthe source files just makes imports noisier.",{"type":11,"tag":23,"props":865,"children":866},{},[867,879],{"type":11,"tag":27,"props":868,"children":869},{},[870,872,878],{"type":17,"value":871},"No new route group; demo TuxReport* under ",{"type":11,"tag":63,"props":873,"children":875},{"className":874},[],[876],{"type":17,"value":877},"\u002Fcomponents\u002F",{"type":17,"value":294},{"type":17,"value":880},"\nBuries the deliverables story. The user explicitly asked for\nreports to be a section, and the four components together are\nenough mass to justify the IA cost.",{"title":6,"searchDepth":882,"depth":882,"links":883},2,[884,885,886,887,888,889,890,891],{"id":47,"depth":882,"text":50},{"id":187,"depth":882,"text":190},{"id":387,"depth":882,"text":390},{"id":484,"depth":882,"text":487},{"id":561,"depth":882,"text":564},{"id":603,"depth":882,"text":606},{"id":701,"depth":882,"text":704},{"id":816,"depth":882,"text":819},1792952322256]