[{"data":1,"prerenderedAt":2463},["ShallowReactive",2],{"design-doc:unification-plan":3},{"data":4,"body":7,"toc":2441},{"title":5,"description":6},"Unification plan — one suite, one system","",{"type":8,"children":9},"root",[10,18,112,116,123,191,194,199,209,287,328,341,344,349,356,361,485,513,519,538,581,587,715,721,741,747,782,814,820,898,904,1031,1037,1083,1089,1124,1241,1246,1249,1254,1279,1417,1445,1448,1453,1529,1532,1537,1904,1907,1912,1917,2055,2058,2063,2068],{"type":11,"tag":12,"props":13,"children":15},"element","h1",{"id":14},"unification-plan-one-suite-one-system",[16],{"type":17,"value":5},"text",{"type":11,"tag":19,"props":20,"children":21},"blockquote",{},[22,69],{"type":11,"tag":23,"props":24,"children":25},"p",{},[26,32,34,39,41,46,48,53,55,60,62,67],{"type":11,"tag":27,"props":28,"children":29},"strong",{},[30],{"type":17,"value":31},"Status:",{"type":17,"value":33}," doctrine (2026-07-28, reconstructed + extended 2026-07-30).\nThe cross-portal unification plan for the TTI product family —\n",{"type":11,"tag":27,"props":35,"children":36},{},[37],{"type":17,"value":38},"Landscape",{"type":17,"value":40}," (landscape.tti.tamu.edu), ",{"type":11,"tag":27,"props":42,"children":43},{},[44],{"type":17,"value":45},"TTI Code",{"type":17,"value":47},"\n(code.tti.tamu.edu), the ",{"type":11,"tag":27,"props":49,"children":50},{},[51],{"type":17,"value":52},"TUX docs site",{"type":17,"value":54},", and ",{"type":11,"tag":27,"props":56,"children":57},{},[58],{"type":17,"value":59},"TTI AI Studio",{"type":17,"value":61},"\n(Tauri desktop) — plus the satellite consumers (TTI docs platform,\nPower BI reporting, external collaboration stacks). The original v4\nplan document was authored in-session on 2026-07-28 and reviewed\nthrough seven lenses; this file is its permanent, public-safe home.\nRatified decisions below are ",{"type":11,"tag":27,"props":63,"children":64},{},[65],{"type":17,"value":66},"law",{"type":17,"value":68}," unless a dated amendment\nsupersedes them.",{"type":11,"tag":23,"props":70,"children":71},{},[72,74,86,88,98,100,110],{"type":17,"value":73},"Companion to ",{"type":11,"tag":75,"props":76,"children":78},"a",{"href":77},".\u002Fcompositions.md",[79],{"type":11,"tag":80,"props":81,"children":83},"code",{"className":82},[],[84],{"type":17,"value":85},"compositions.md",{"type":17,"value":87}," §Suite chrome\n(how to build the chrome), ",{"type":11,"tag":75,"props":89,"children":91},{"href":90},".\u002Fcomponents.md",[92],{"type":11,"tag":80,"props":93,"children":95},{"className":94},[],[96],{"type":17,"value":97},"components.md",{"type":17,"value":99}," (the\ncatalog), and ",{"type":11,"tag":75,"props":101,"children":103},{"href":102},".\u002Fplatform-awareness.md",[104],{"type":11,"tag":80,"props":105,"children":107},{"className":106},[],[108],{"type":17,"value":109},"platform-awareness.md",{"type":17,"value":111},"\n(per-platform chrome doctrine).",{"type":11,"tag":113,"props":114,"children":115},"hr",{},[],{"type":11,"tag":117,"props":118,"children":120},"h2",{"id":119},"index",[121],{"type":17,"value":122},"Index",{"type":11,"tag":124,"props":125,"children":126},"ul",{},[127,137,146,155,164,173,182],{"type":11,"tag":128,"props":129,"children":130},"li",{},[131],{"type":11,"tag":75,"props":132,"children":134},{"href":133},"#why--the-diagnosis",[135],{"type":17,"value":136},"Why — the diagnosis",{"type":11,"tag":128,"props":138,"children":139},{},[140],{"type":11,"tag":75,"props":141,"children":143},{"href":142},"#ratified-laws",[144],{"type":17,"value":145},"Ratified laws",{"type":11,"tag":128,"props":147,"children":148},{},[149],{"type":11,"tag":75,"props":150,"children":152},{"href":151},"#distribution-artifacts",[153],{"type":17,"value":154},"Distribution artifacts",{"type":11,"tag":128,"props":156,"children":157},{},[158],{"type":11,"tag":75,"props":159,"children":161},{"href":160},"#guardrails",[162],{"type":17,"value":163},"Guardrails",{"type":11,"tag":128,"props":165,"children":166},{},[167],{"type":11,"tag":75,"props":168,"children":170},{"href":169},"#execution-log",[171],{"type":17,"value":172},"Execution log",{"type":11,"tag":128,"props":174,"children":175},{},[176],{"type":11,"tag":75,"props":177,"children":179},{"href":178},"#satellite-workstreams",[180],{"type":17,"value":181},"Satellite workstreams",{"type":11,"tag":128,"props":183,"children":184},{},[185],{"type":11,"tag":75,"props":186,"children":188},{"href":187},"#open-owner-decisions",[189],{"type":17,"value":190},"Open owner decisions",{"type":11,"tag":113,"props":192,"children":193},{},[],{"type":11,"tag":117,"props":195,"children":197},{"id":196},"why-the-diagnosis",[198],{"type":17,"value":136},{"type":11,"tag":23,"props":200,"children":201},{},[202,204],{"type":17,"value":203},"A 2026-07 survey of every product in the estate reached one clear\nconclusion: ",{"type":11,"tag":27,"props":205,"children":206},{},[207],{"type":17,"value":208},"the unification gap is adoption, enforcement, and\ndistribution — not component inventory.",{"type":11,"tag":124,"props":210,"children":211},{},[212,217,246,282],{"type":11,"tag":128,"props":213,"children":214},{},[215],{"type":17,"value":216},"tti-ux ships ~140 components; the two largest Vue consumers used\n7–11 of them, reaching past the system for raw Nuxt UI primitives,\nraw HTML elements, and hand-rolled equivalents of components that\nalready exist.",{"type":11,"tag":128,"props":218,"children":219},{},[220,222,228,230,236,238,244],{"type":17,"value":221},"Non-Vue consumers (the Forgejo overlay, Power BI theming, external\ncollaboration stacks) each independently invented a token\ntranslation layer and a hand-sync step — three parallel token\nvocabularies for one design system, with palettes drifting apart at\nevery stop (",{"type":11,"tag":80,"props":223,"children":225},{"className":224},[],[226],{"type":17,"value":227},"#500000",{"type":17,"value":229}," vs ",{"type":11,"tag":80,"props":231,"children":233},{"className":232},[],[234],{"type":17,"value":235},"#5C0025",{"type":17,"value":237}," anchors, stale ramps, dead\n",{"type":11,"tag":80,"props":239,"children":241},{"className":240},[],[242],{"type":17,"value":243},"--tamu-*",{"type":17,"value":245}," names).",{"type":11,"tag":128,"props":247,"children":248},{},[249,251,257,259,265,266,272,274,280],{"type":17,"value":250},"Consumers invented semantic tokens the system never defined\n(",{"type":11,"tag":80,"props":252,"children":254},{"className":253},[],[255],{"type":17,"value":256},"--surface-base",{"type":17,"value":258},", ",{"type":11,"tag":80,"props":260,"children":262},{"className":261},[],[263],{"type":17,"value":264},"--text-default",{"type":17,"value":258},{"type":11,"tag":80,"props":267,"children":269},{"className":268},[],[270],{"type":17,"value":271},"--status-*",{"type":17,"value":273},") — undefined\nreferences that render transparent, precisely the bug class\n",{"type":11,"tag":80,"props":275,"children":277},{"className":276},[],[278],{"type":17,"value":279},"audit:tokens",{"type":17,"value":281}," exists to catch, but no consumer runs the audits.",{"type":11,"tag":128,"props":283,"children":284},{},[285],{"type":17,"value":286},"The system's own registries (sidebar nav, index grid, doctrine\ntables, homepage count) were four hand-maintained lists that\ndisagreed with each other and with the filesystem.",{"type":11,"tag":23,"props":288,"children":289},{},[290,292,297,299,304,306,311,313,318,320,326],{"type":17,"value":291},"So the plan invests in four things, in order: ",{"type":11,"tag":27,"props":293,"children":294},{},[295],{"type":17,"value":296},"doctrine written down",{"type":17,"value":298},"\n(this file), ",{"type":11,"tag":27,"props":300,"children":301},{},[302],{"type":17,"value":303},"truthful self-description",{"type":17,"value":305}," (registry consolidation +\nCI), ",{"type":11,"tag":27,"props":307,"children":308},{},[309],{"type":17,"value":310},"the missing 10%",{"type":17,"value":312}," (toast, layout primitives, semantic-token\ngaps, upstream debt fixes), and ",{"type":11,"tag":27,"props":314,"children":315},{},[316],{"type":17,"value":317},"distribution + guardrails as\nproducts",{"type":17,"value":319}," (the kit, brand.env, Power BI themes, ",{"type":11,"tag":80,"props":321,"children":323},{"className":322},[],[324],{"type":17,"value":325},"tux-audit",{"type":17,"value":327},").",{"type":11,"tag":23,"props":329,"children":330},{},[331,333,339],{"type":17,"value":332},"What it deliberately does ",{"type":11,"tag":334,"props":335,"children":336},"em",{},[337],{"type":17,"value":338},"not",{"type":17,"value":340}," do: rebuild form controls, add\nspeculative components, or flatten per-product identity. The estate\ndoes not need more parts; it needs the existing parts reachable,\nenforced, and adopted.",{"type":11,"tag":113,"props":342,"children":343},{},[],{"type":11,"tag":117,"props":345,"children":347},{"id":346},"ratified-laws",[348],{"type":17,"value":145},{"type":11,"tag":350,"props":351,"children":353},"h3",{"id":352},"the-two-shape-identity-rule-2026-07-28-user-confirmed",[354],{"type":17,"value":355},"The two-shape identity rule (2026-07-28, user-confirmed)",{"type":11,"tag":23,"props":357,"children":358},{},[359],{"type":17,"value":360},"Every portal's chrome fits one of exactly two shapes, and identity has\nexactly one blessed home in each:",{"type":11,"tag":362,"props":363,"children":364},"table",{},[365,394],{"type":11,"tag":366,"props":367,"children":368},"thead",{},[369],{"type":11,"tag":370,"props":371,"children":372},"tr",{},[373,379,384,389],{"type":11,"tag":374,"props":375,"children":376},"th",{},[377],{"type":17,"value":378},"Shell shape",{"type":11,"tag":374,"props":380,"children":381},{},[382],{"type":17,"value":383},"Products",{"type":11,"tag":374,"props":385,"children":386},{},[387],{"type":17,"value":388},"Waffle (app switcher)",{"type":11,"tag":374,"props":390,"children":391},{},[392],{"type":17,"value":393},"Identity\u002Faccount",{"type":11,"tag":395,"props":396,"children":397},"tbody",{},[398,445],{"type":11,"tag":370,"props":399,"children":400},{},[401,412,417,427],{"type":11,"tag":402,"props":403,"children":404},"td",{},[405,410],{"type":11,"tag":27,"props":406,"children":407},{},[408],{"type":17,"value":409},"Site shape",{"type":17,"value":411}," — global top header",{"type":11,"tag":402,"props":413,"children":414},{},[415],{"type":17,"value":416},"Landscape, TTI Code, TUX docs",{"type":11,"tag":402,"props":418,"children":419},{},[420,422],{"type":17,"value":421},"Top-right, ",{"type":11,"tag":27,"props":423,"children":424},{},[425],{"type":17,"value":426},"second-from-last",{"type":11,"tag":402,"props":428,"children":429},{},[430,435,437,443],{"type":11,"tag":27,"props":431,"children":432},{},[433],{"type":17,"value":434},"Last",{"type":17,"value":436}," item, top-right (",{"type":11,"tag":80,"props":438,"children":440},{"className":439},[],[441],{"type":17,"value":442},"TuxUserMenu placement=\"cluster\"",{"type":17,"value":444},")",{"type":11,"tag":370,"props":446,"children":447},{},[448,458,462,467],{"type":11,"tag":402,"props":449,"children":450},{},[451,456],{"type":11,"tag":27,"props":452,"children":453},{},[454],{"type":17,"value":455},"Workbench shape",{"type":17,"value":457}," — persistent left rail",{"type":11,"tag":402,"props":459,"children":460},{},[461],{"type":17,"value":59},{"type":11,"tag":402,"props":463,"children":464},{},[465],{"type":17,"value":466},"Titlebar, second-from-last",{"type":11,"tag":402,"props":468,"children":469},{},[470,475,477,483],{"type":11,"tag":27,"props":471,"children":472},{},[473],{"type":17,"value":474},"Rail footer",{"type":17,"value":476}," (",{"type":11,"tag":80,"props":478,"children":480},{"className":479},[],[481],{"type":17,"value":482},"TuxUserMenu placement=\"rail-footer\"",{"type":17,"value":484},") — the Copilot\u002FClaude\u002FChatGPT genre convention",{"type":11,"tag":23,"props":486,"children":487},{},[488,490,495,497,503,505,511],{"type":17,"value":489},"There is ",{"type":11,"tag":27,"props":491,"children":492},{},[493],{"type":17,"value":494},"never a third home",{"type":17,"value":496},". Component anatomy and menu content\norder are identical in both mounts. The utility cluster's DOM order is\nlaw-fixed: ",{"type":11,"tag":80,"props":498,"children":500},{"className":499},[],[501],{"type":17,"value":502},"search · notifications · theme · waffle · identity",{"type":17,"value":504},"\n(",{"type":11,"tag":80,"props":506,"children":508},{"className":507},[],[509],{"type":17,"value":510},"TuxUtilityCluster",{"type":17,"value":512}," enforces it).",{"type":11,"tag":350,"props":514,"children":516},{"id":515},"one-chrome-many-voices-2026-07-28",[517],{"type":17,"value":518},"One chrome, many voices (2026-07-28)",{"type":11,"tag":23,"props":520,"children":521},{},[522,524,529,531,536],{"type":17,"value":523},"The chrome band is ",{"type":11,"tag":27,"props":525,"children":526},{},[527],{"type":17,"value":528},"identical across portals",{"type":17,"value":530}," — same components,\nsame order, same behavior. Products differentiate through their\n",{"type":11,"tag":27,"props":532,"children":533},{},[534],{"type":17,"value":535},"wordmark",{"type":17,"value":537}," and content voice, never through chrome structure.",{"type":11,"tag":124,"props":539,"children":540},{},[541,568],{"type":11,"tag":128,"props":542,"children":543},{},[544,546,551,553,559,561,566],{"type":17,"value":545},"Per-product accent colors are ",{"type":11,"tag":27,"props":547,"children":548},{},[549],{"type":17,"value":550},"deferred",{"type":17,"value":552},"; the ",{"type":11,"tag":80,"props":554,"children":556},{"className":555},[],[557],{"type":17,"value":558},"toneIndex",{"type":17,"value":560},"\nmechanism was ",{"type":11,"tag":27,"props":562,"children":563},{},[564],{"type":17,"value":565},"rejected",{"type":17,"value":567}," (chart colors are data colors; teal is\ntriple-booked and off-limits as an accent).",{"type":11,"tag":128,"props":569,"children":570},{},[571,573,579],{"type":17,"value":572},"The replacement identity workstream is: product lockup spec +\n",{"type":11,"tag":80,"props":574,"children":576},{"className":575},[],[577],{"type":17,"value":578},"TuxIdentity level=\"product\"",{"type":17,"value":580}," + a status-chip grammar.",{"type":11,"tag":350,"props":582,"children":584},{"id":583},"registry-doctrine-2026-07-28-security-reviewed",[585],{"type":17,"value":586},"Registry doctrine (2026-07-28, security-reviewed)",{"type":11,"tag":124,"props":588,"children":589},{},[590,657,675,700],{"type":11,"tag":128,"props":591,"children":592},{},[593,603,605,610,612,617,619,625,627,633,635,641,642,648,650,655],{"type":11,"tag":75,"props":594,"children":596},{"href":595},".\u002Fapps.json",[597],{"type":11,"tag":80,"props":598,"children":600},{"className":599},[],[601],{"type":17,"value":602},"design\u002Fapps.json",{"type":17,"value":604}," is the ",{"type":11,"tag":27,"props":606,"children":607},{},[608],{"type":17,"value":609},"TTI Portals registry",{"type":17,"value":611}," —\npublic tile metadata ",{"type":11,"tag":27,"props":613,"children":614},{},[615],{"type":17,"value":616},"only",{"type":17,"value":618}," (id, name, tagline, icon, url,\naudience, kind, glyph — corrected 2026-08-30 to the shipped\n",{"type":11,"tag":80,"props":620,"children":622},{"className":621},[],[623],{"type":17,"value":624},"TuxRegistryApp",{"type":17,"value":626}," shape; ",{"type":11,"tag":80,"props":628,"children":630},{"className":629},[],[631],{"type":17,"value":632},"blurb",{"type":17,"value":634},"\u002F",{"type":11,"tag":80,"props":636,"children":638},{"className":637},[],[639],{"type":17,"value":640},"accessUrl",{"type":17,"value":634},{"type":11,"tag":80,"props":643,"children":645},{"className":644},[],[646],{"type":17,"value":647},"discoverable",{"type":17,"value":649}," were\ndrafted here but never built). It is ",{"type":11,"tag":27,"props":651,"children":652},{},[653],{"type":17,"value":654},"baked at build\u002Fdeploy time,\nnever fetched at runtime",{"type":17,"value":656},", and never served from a third-party CDN\nin a runtime path.",{"type":11,"tag":128,"props":658,"children":659},{},[660,665,667,673],{"type":11,"tag":27,"props":661,"children":662},{},[663],{"type":17,"value":664},"Entitlement mappings live server-side, per portal",{"type":17,"value":666}," (distributed\n\"my-apps\" resolvers sharing a mapping file). No central directory\nendpoint; no group identifiers in client-delivered artifacts —\n",{"type":11,"tag":80,"props":668,"children":670},{"className":669},[],[671],{"type":17,"value":672},"tests\u002FuseTuxApps.test.ts",{"type":17,"value":674}," asserts the shipped registry contains\nnone.",{"type":11,"tag":128,"props":676,"children":677},{},[678,680,684,686,691,693,698],{"type":17,"value":679},"Tile order is a pure function of the registry (spatial constancy —\ncurrent app sorts in place, never last). Audience filtering:\npublic \u002F authenticated \u002F entitled, Tier-0 fail-open. A ",{"type":11,"tag":27,"props":681,"children":682},{},[683],{"type":17,"value":647},{"type":17,"value":685},"\nnot-entitled portal renders a visible tile with a lock and a\nrequest-access affordance, never a dead-disabled tile; a\n",{"type":11,"tag":27,"props":687,"children":688},{},[689],{"type":17,"value":690},"non-discoverable",{"type":17,"value":692}," one is hidden entirely. ",{"type":11,"tag":27,"props":694,"children":695},{},[696],{"type":17,"value":697},"TTI Code ships the\nnon-discoverable branch for Landscape (2026-08-30)",{"type":17,"value":699}," — the tile is\nnever baked into the page and never published in the anonymous\nregistry artifact, and is added per-caller by a server-side resolver\nkeyed on Entra security-group membership. That resolver is the first\nimplementation of the \"my-apps\" slot named above.",{"type":11,"tag":128,"props":701,"children":702},{},[703,705,713],{"type":17,"value":704},"Behavior law (focus, same-tab default, \"Desktop app\" affix, heading\n\"TTI Portals\") lives in ",{"type":11,"tag":75,"props":706,"children":707},{"href":77},[708],{"type":11,"tag":80,"props":709,"children":711},{"className":710},[],[712],{"type":17,"value":85},{"type":17,"value":714},"\n§Cross-app navigation — one home, not duplicated here.",{"type":11,"tag":350,"props":716,"children":718},{"id":717},"web-component-waffle-cut-2026-07-28-round-2-review",[719],{"type":17,"value":720},"Web-component waffle: cut (2026-07-28, round-2 review)",{"type":11,"tag":23,"props":722,"children":723},{},[724,726,731,733,739],{"type":17,"value":725},"The Forgejo (TTI Code) waffle is a ",{"type":11,"tag":27,"props":727,"children":728},{},[729],{"type":17,"value":730},"server-rendered Go-template\npartial, permanently",{"type":17,"value":732}," — not the ADR-0012 web-component build. The WC\npath stays justified for WordPress; it is the wrong tool for the forge\n(payload size, light-DOM CSS collisions, NuxtLink\u002Ficon coverage).\n",{"type":11,"tag":80,"props":734,"children":736},{"className":735},[],[737],{"type":17,"value":738},"apps.json",{"type":17,"value":740}," public metadata is baked into the overlay at\napply-branding time from a pinned tti-ux ref.",{"type":11,"tag":350,"props":742,"children":744},{"id":743},"desktop-links-launcher-interstitial-never-raw-scheme-2026-07-28",[745],{"type":17,"value":746},"Desktop links: launcher interstitial, never raw scheme (2026-07-28)",{"type":11,"tag":23,"props":748,"children":749},{},[750,752,757,759,765,767,773,775,780],{"type":17,"value":751},"Waffle tiles for the desktop app point at a ",{"type":11,"tag":27,"props":753,"children":754},{},[755],{"type":17,"value":756},"parameter-free launcher\npage",{"type":17,"value":758}," (e.g. ",{"type":11,"tag":80,"props":760,"children":762},{"className":761},[],[763],{"type":17,"value":764},"\u002Flaunch\u002Fai-studio",{"type":17,"value":766}," on the forge), which fires the\nregistered URL scheme with a fixed route and offers an install\nfallback. Raw ",{"type":11,"tag":80,"props":768,"children":770},{"className":769},[],[771],{"type":17,"value":772},"tti-ai-studio:\u002F\u002F",{"type":17,"value":774}," URLs never appear in tiles, and\nlauncher pages accept and forward ",{"type":11,"tag":27,"props":776,"children":777},{},[778],{"type":17,"value":779},"zero",{"type":17,"value":781}," query parameters.\nDesktop-side, outbound navigation goes through an allowlisted opener\ncommand (exact-host https allowlist), and the single-instance plugin\nis a prerequisite for desktop tiles.",{"type":11,"tag":23,"props":783,"children":784},{},[785,790,792,798,800,805,807,812],{"type":11,"tag":27,"props":786,"children":787},{},[788],{"type":17,"value":789},"Amendment 2026-08-30:",{"type":17,"value":791}," the roster currently carries no\n",{"type":11,"tag":80,"props":793,"children":795},{"className":794},[],[796],{"type":17,"value":797},"kind:\"desktop\"",{"type":17,"value":799}," entry (AI Studio was retired from it), so this law is\n",{"type":11,"tag":27,"props":801,"children":802},{},[803],{"type":17,"value":804},"dormant, not repealed",{"type":17,"value":806}," — it governs the next desktop tile added.\n",{"type":11,"tag":80,"props":808,"children":810},{"className":809},[],[811],{"type":17,"value":672},{"type":17,"value":813}," asserts the zero-count explicitly so the\ndormancy is visible rather than a silently vacuous test.",{"type":11,"tag":350,"props":815,"children":817},{"id":816},"pinning-release-discipline-2026-07-28",[818],{"type":17,"value":819},"Pinning + release discipline (2026-07-28)",{"type":11,"tag":124,"props":821,"children":822},{},[823,874,886],{"type":11,"tag":128,"props":824,"children":825},{},[826,828,833,835,841,842,848,850,856,858,864,866,872],{"type":17,"value":827},"Consumers pin ",{"type":11,"tag":27,"props":829,"children":830},{},[831],{"type":17,"value":832},"immutable git tags",{"type":17,"value":834},": ",{"type":11,"tag":80,"props":836,"children":838},{"className":837},[],[839],{"type":17,"value":840},"github:ttitamu\u002Ftti-ux#vX.Y.Z",{"type":17,"value":504},{"type":11,"tag":80,"props":843,"children":845},{"className":844},[],[846],{"type":17,"value":847},"extends",{"type":17,"value":849}," + ",{"type":11,"tag":80,"props":851,"children":853},{"className":852},[],[854],{"type":17,"value":855},"package.json",{"type":17,"value":857}," dependency, lockfile committed). Never\na branch, never a sibling ",{"type":11,"tag":80,"props":859,"children":861},{"className":860},[],[862],{"type":17,"value":863},"file:",{"type":17,"value":865}," path in CI or production builds.\n",{"type":11,"tag":80,"props":867,"children":869},{"className":868},[],[870],{"type":17,"value":871},"file:..\u002Ftti-ux",{"type":17,"value":873}," is for local development only.",{"type":11,"tag":128,"props":875,"children":876},{},[877,879,884],{"type":17,"value":878},"npm publishing is reserved for the framework-neutral ",{"type":11,"tag":27,"props":880,"children":881},{},[882],{"type":17,"value":883},"kit",{"type":17,"value":885}," only.",{"type":11,"tag":128,"props":887,"children":888},{},[889,891,896],{"type":17,"value":890},"Estate CI verification is ",{"type":11,"tag":27,"props":892,"children":893},{},[894],{"type":17,"value":895},"unit tests + fixtures + container CI",{"type":17,"value":897},"\n(local Forgejo container for overlay changes; mocked dev servers for\nconsumers) — not a live four-portal browser battery (Entra MFA and\nTauri webviews make that battery brittle by construction).",{"type":11,"tag":350,"props":899,"children":901},{"id":900},"theming-laws",[902],{"type":17,"value":903},"Theming laws",{"type":11,"tag":124,"props":905,"children":906},{},[907,951,977,1019],{"type":11,"tag":128,"props":908,"children":909},{},[910,912,918,920,926,927,933,935,941,943,949],{"type":17,"value":911},"Three shipped themes: ",{"type":11,"tag":80,"props":913,"children":915},{"className":914},[],[916],{"type":17,"value":917},"tti",{"type":17,"value":919}," (light), ",{"type":11,"tag":80,"props":921,"children":923},{"className":922},[],[924],{"type":17,"value":925},"tti-dark",{"type":17,"value":258},{"type":11,"tag":80,"props":928,"children":930},{"className":929},[],[931],{"type":17,"value":932},"tti-hc",{"type":17,"value":934},"\n(WCAG-AAA high contrast), applied via ",{"type":11,"tag":80,"props":936,"children":938},{"className":937},[],[939],{"type":17,"value":940},"data-theme",{"type":17,"value":942}," on ",{"type":11,"tag":80,"props":944,"children":946},{"className":945},[],[947],{"type":17,"value":948},"\u003Chtml>",{"type":17,"value":950},".\nHigh-contrast must remain reachable in every product (footer\naffordance per ADR-0006).",{"type":11,"tag":128,"props":952,"children":953},{},[954,959,961,967,969,975],{"type":11,"tag":27,"props":955,"children":956},{},[957],{"type":17,"value":958},"Fixed-brand surfaces",{"type":17,"value":960}," (always-maroon mastheads, footers, CTAs)\nmust use theme-invariant on-brand text — never ",{"type":11,"tag":80,"props":962,"children":964},{"className":963},[],[965],{"type":17,"value":966},"--text-inverse",{"type":17,"value":968},",\nwhich flips in dark mode. (Token lands as ",{"type":11,"tag":80,"props":970,"children":972},{"className":971},[],[973],{"type":17,"value":974},"--text-on-brand",{"type":17,"value":976},",\nv1.8.0.)",{"type":11,"tag":128,"props":978,"children":979},{},[980,982,990,991,997,999,1004,1005,1010,1012,1017],{"type":17,"value":981},"The canonical light anchor is ",{"type":11,"tag":27,"props":983,"children":984},{},[985],{"type":11,"tag":80,"props":986,"children":988},{"className":987},[],[989],{"type":17,"value":235},{"type":17,"value":476},{"type":11,"tag":80,"props":992,"children":994},{"className":993},[],[995],{"type":17,"value":996},"--tti-maroon",{"type":17,"value":998},");\n",{"type":11,"tag":80,"props":1000,"children":1002},{"className":1001},[],[1003],{"type":17,"value":227},{"type":17,"value":604},{"type":11,"tag":334,"props":1006,"children":1007},{},[1008],{"type":17,"value":1009},"high-contrast",{"type":17,"value":1011}," theme's anchor and the legacy\nAggie deep-maroon. Any consumer whose \"light\" palette anchors at\n",{"type":11,"tag":80,"props":1013,"children":1015},{"className":1014},[],[1016],{"type":17,"value":227},{"type":17,"value":1018}," has vendored the wrong theme (this happened — see\nSatellite workstreams).",{"type":11,"tag":128,"props":1020,"children":1021},{},[1022,1024,1029],{"type":17,"value":1023},"Dark mode already reads as one family estate-wide; ",{"type":11,"tag":27,"props":1025,"children":1026},{},[1027],{"type":17,"value":1028},"light mode is\nwhere the visual-unification effort belongs",{"type":17,"value":1030},". The light-mode\nfamily signature (working proposal: editorial-white chrome + maroon\nwordmark + gold keyline + tracked eyebrow) awaits owner\nratification — see Open decisions.",{"type":11,"tag":350,"props":1032,"children":1034},{"id":1033},"feel-native-workstreams-2026-07-28-round-2-review",[1035],{"type":17,"value":1036},"Feel + native workstreams (2026-07-28, round-2 review)",{"type":11,"tag":124,"props":1038,"children":1039},{},[1040,1057],{"type":11,"tag":128,"props":1041,"children":1042},{},[1043,1048,1050,1055],{"type":11,"tag":27,"props":1044,"children":1045},{},[1046],{"type":17,"value":1047},"Feel",{"type":17,"value":1049},": motion signature derives from the existing tempo tokens;\na waffle coach-mark may appear on the second session (never the\nfirst); guided tours use a shared composable with the \"last step is\na verb\" grammar; ",{"type":11,"tag":27,"props":1051,"children":1052},{},[1053],{"type":17,"value":1054},"Reveille appears only where a live assistant\nanswers",{"type":17,"value":1056}," — the mascot is never decorative chrome. Kitsch is\nwritten, never gamified onto people.",{"type":11,"tag":128,"props":1058,"children":1059},{},[1060,1065,1067,1073,1075,1081],{"type":11,"tag":27,"props":1061,"children":1062},{},[1063],{"type":17,"value":1064},"Native",{"type":17,"value":1066},": the menu-mirror law (native macOS menus mirror in-app\ncommands — Settings ⌘,, mode switching, a Portals section); 52px\nmacOS titlebar; banners render below the titlebar in Tauri;\nWindows snap-layouts are implemented, not asserted; DWM theme sync;\nwindow-state persistence; ",{"type":11,"tag":80,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":17,"value":1072},"presentation",{"type":17,"value":1074}," prop reserved on\n",{"type":11,"tag":80,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":17,"value":1080},"TuxAppSwitcher",{"type":17,"value":1082}," for the sheet variant ahead of Tauri Mobile.",{"type":11,"tag":350,"props":1084,"children":1086},{"id":1085},"form-controls-the-hybrid-doctrine-2026-07-30-owner-decided",[1087],{"type":17,"value":1088},"Form controls: the hybrid doctrine (2026-07-30, owner-decided)",{"type":11,"tag":23,"props":1090,"children":1091},{},[1092,1094,1100,1101,1107,1109,1115,1117,1122],{"type":17,"value":1093},"The estate's form drift (hundreds of raw ",{"type":11,"tag":80,"props":1095,"children":1097},{"className":1096},[],[1098],{"type":17,"value":1099},"UButton",{"type":17,"value":634},{"type":11,"tag":80,"props":1102,"children":1104},{"className":1103},[],[1105],{"type":17,"value":1106},"UInput",{"type":17,"value":1108}," call\nsites; raw ",{"type":11,"tag":80,"props":1110,"children":1112},{"className":1111},[],[1113],{"type":17,"value":1114},"\u003Cbutton>",{"type":17,"value":1116}," elements with bespoke CSS) is fixed by\n",{"type":11,"tag":27,"props":1118,"children":1119},{},[1120],{"type":17,"value":1121},"theming, not wrapping",{"type":17,"value":1123},":",{"type":11,"tag":124,"props":1125,"children":1126},{},[1127,1161,1215],{"type":11,"tag":128,"props":1128,"children":1129},{},[1130,1132,1138,1140,1146,1148,1159],{"type":17,"value":1131},"The layer's Nuxt UI theme is hardened (fonts, radii, focus rings,\nsizes, density via ",{"type":11,"tag":80,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":17,"value":1137},"app.config.ts",{"type":17,"value":1139}," ",{"type":11,"tag":80,"props":1141,"children":1143},{"className":1142},[],[1144],{"type":17,"value":1145},"ui.*",{"type":17,"value":1147},") so ",{"type":11,"tag":27,"props":1149,"children":1150},{},[1151,1157],{"type":11,"tag":80,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":17,"value":1156},"U*",{"type":17,"value":1158}," controls are\nbranded automatically in every consumer",{"type":17,"value":1160}," at pin-bump.",{"type":11,"tag":128,"props":1162,"children":1163},{},[1164,1184,1185,1190,1192,1198,1200,1206,1208,1213],{"type":11,"tag":27,"props":1165,"children":1166},{},[1167,1169,1175,1176,1182],{"type":17,"value":1168},"No ",{"type":11,"tag":80,"props":1170,"children":1172},{"className":1171},[],[1173],{"type":17,"value":1174},"TuxInput",{"type":17,"value":634},{"type":11,"tag":80,"props":1177,"children":1179},{"className":1178},[],[1180],{"type":17,"value":1181},"TuxSelect",{"type":17,"value":1183}," wrapper set ships.",{"type":17,"value":1139},{"type":11,"tag":80,"props":1186,"children":1188},{"className":1187},[],[1189],{"type":17,"value":1156},{"type":17,"value":1191}," is the\nblessed spelling for app controls. ",{"type":11,"tag":80,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":17,"value":1197},"TuxFormField",{"type":17,"value":1199}," (label\u002Fhelp\u002Ferror\nanatomy) stays; ",{"type":11,"tag":80,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":17,"value":1205},"TuxButton",{"type":17,"value":1207}," is re-scoped as the ",{"type":11,"tag":27,"props":1209,"children":1210},{},[1211],{"type":17,"value":1212},"editorial",{"type":17,"value":1214},"\nbutton (gold-bar signature, CTA contexts).",{"type":11,"tag":128,"props":1216,"children":1217},{},[1218,1220,1225,1226,1232,1234,1239],{"type":17,"value":1219},"Lint\u002Fguardrails target what is unambiguously wrong in any doctrine:\nraw ",{"type":11,"tag":80,"props":1221,"children":1223},{"className":1222},[],[1224],{"type":17,"value":1114},{"type":17,"value":634},{"type":11,"tag":80,"props":1227,"children":1229},{"className":1228},[],[1230],{"type":17,"value":1231},"\u003Cinput>",{"type":17,"value":1233}," elements and hex literals — never ",{"type":11,"tag":80,"props":1235,"children":1237},{"className":1236},[],[1238],{"type":17,"value":1156},{"type":17,"value":1240},".",{"type":11,"tag":23,"props":1242,"children":1243},{},[1244],{"type":17,"value":1245},"This amends the earlier \"form input → Nuxt UI native, no wrappers yet\"\nline in components.md with an explicit division of labor: Nuxt UI owns\nbehavior and a11y; the layer owns the brand.",{"type":11,"tag":113,"props":1247,"children":1248},{},[],{"type":11,"tag":117,"props":1250,"children":1252},{"id":1251},"distribution-artifacts",[1253],{"type":17,"value":154},{"type":11,"tag":23,"props":1255,"children":1256},{},[1257,1259,1269,1271,1277],{"type":17,"value":1258},"One source of truth, four artifacts, each generated from\n",{"type":11,"tag":75,"props":1260,"children":1262},{"href":1261},".\u002Ftokens.json",[1263],{"type":11,"tag":80,"props":1264,"children":1266},{"className":1265},[],[1267],{"type":17,"value":1268},"design\u002Ftokens.json",{"type":17,"value":1270}," by ",{"type":11,"tag":80,"props":1272,"children":1274},{"className":1273},[],[1275],{"type":17,"value":1276},"npm run build:tokens",{"type":17,"value":1278}," and\nsiblings — hand-vendored hex is a defect everywhere:",{"type":11,"tag":362,"props":1280,"children":1281},{},[1282,1303],{"type":11,"tag":366,"props":1283,"children":1284},{},[1285],{"type":11,"tag":370,"props":1286,"children":1287},{},[1288,1293,1298],{"type":11,"tag":374,"props":1289,"children":1290},{},[1291],{"type":17,"value":1292},"Artifact",{"type":11,"tag":374,"props":1294,"children":1295},{},[1296],{"type":17,"value":1297},"Consumer shape",{"type":11,"tag":374,"props":1299,"children":1300},{},[1301],{"type":17,"value":1302},"Path",{"type":11,"tag":395,"props":1304,"children":1305},{},[1306,1328,1356,1390],{"type":11,"tag":370,"props":1307,"children":1308},{},[1309,1314,1319],{"type":11,"tag":402,"props":1310,"children":1311},{},[1312],{"type":17,"value":1313},"Nuxt layer",{"type":11,"tag":402,"props":1315,"children":1316},{},[1317],{"type":17,"value":1318},"Vue\u002FNuxt products",{"type":11,"tag":402,"props":1320,"children":1321},{},[1322],{"type":11,"tag":80,"props":1323,"children":1325},{"className":1324},[],[1326],{"type":17,"value":1327},"extends: [\"github:ttitamu\u002Ftti-ux#vX.Y.Z\"]",{"type":11,"tag":370,"props":1329,"children":1330},{},[1331,1340,1345],{"type":11,"tag":402,"props":1332,"children":1333},{},[1334],{"type":11,"tag":80,"props":1335,"children":1337},{"className":1336},[],[1338],{"type":17,"value":1339},"kit\u002Fcss\u002Ftux-tokens.css",{"type":11,"tag":402,"props":1341,"children":1342},{},[1343],{"type":17,"value":1344},"Any framework (link or vendor at a pinned tag)",{"type":11,"tag":402,"props":1346,"children":1347},{},[1348,1354],{"type":11,"tag":80,"props":1349,"children":1351},{"className":1350},[],[1352],{"type":17,"value":1353},"kit\u002Fcss\u002F",{"type":17,"value":1355}," + jsDelivr CDN",{"type":11,"tag":370,"props":1357,"children":1358},{},[1359,1374,1379],{"type":11,"tag":402,"props":1360,"children":1361},{},[1362,1368,1369],{"type":11,"tag":80,"props":1363,"children":1365},{"className":1364},[],[1366],{"type":17,"value":1367},"kit\u002Fenv\u002Fbrand.env",{"type":17,"value":1139},{"type":11,"tag":334,"props":1370,"children":1371},{},[1372],{"type":17,"value":1373},"(v1.8.0)",{"type":11,"tag":402,"props":1375,"children":1376},{},[1377],{"type":17,"value":1378},"Shell\u002FGo\u002FPython theming scripts (Forgejo overlay, compose stacks)",{"type":11,"tag":402,"props":1380,"children":1381},{},[1382,1384],{"type":17,"value":1383},"generated flat ",{"type":11,"tag":80,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":17,"value":1389},"KEY=#hex",{"type":11,"tag":370,"props":1391,"children":1392},{},[1393,1407,1412],{"type":11,"tag":402,"props":1394,"children":1395},{},[1396,1402,1403],{"type":11,"tag":80,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":17,"value":1401},"kit\u002Fpowerbi\u002F*.json",{"type":17,"value":1139},{"type":11,"tag":334,"props":1404,"children":1405},{},[1406],{"type":17,"value":1373},{"type":11,"tag":402,"props":1408,"children":1409},{},[1410],{"type":17,"value":1411},"Power BI \u002F Fabric report themes",{"type":11,"tag":402,"props":1413,"children":1414},{},[1415],{"type":17,"value":1416},"generated light + dark",{"type":11,"tag":23,"props":1418,"children":1419},{},[1420,1422,1428,1430,1435,1437,1443],{"type":17,"value":1421},"Consumers never rename tokens. A translation prefix (",{"type":11,"tag":80,"props":1423,"children":1425},{"className":1424},[],[1426],{"type":17,"value":1427},"--tux-*",{"type":17,"value":1429},",\n",{"type":11,"tag":80,"props":1431,"children":1433},{"className":1432},[],[1434],{"type":17,"value":243},{"type":17,"value":1436},", private ",{"type":11,"tag":80,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":17,"value":1442},"--bg\u002F--panel",{"type":17,"value":1444}," namespaces) is a migration smell —\nvendor the artifact verbatim and reference canonical names.",{"type":11,"tag":113,"props":1446,"children":1447},{},[],{"type":11,"tag":117,"props":1449,"children":1451},{"id":1450},"guardrails",[1452],{"type":17,"value":163},{"type":11,"tag":124,"props":1454,"children":1455},{},[1456,1497,1519],{"type":11,"tag":128,"props":1457,"children":1458},{},[1459,1464,1466,1471,1473,1479,1481,1487,1489,1495],{"type":11,"tag":27,"props":1460,"children":1461},{},[1462],{"type":17,"value":1463},"In-repo",{"type":17,"value":1465},": lint, typecheck, unit tests (registry + catalog\ninvariants), ",{"type":11,"tag":80,"props":1467,"children":1469},{"className":1468},[],[1470],{"type":17,"value":279},{"type":17,"value":1472}," (every ",{"type":11,"tag":80,"props":1474,"children":1476},{"className":1475},[],[1477],{"type":17,"value":1478},"var(--x)",{"type":17,"value":1480}," resolves),\n",{"type":11,"tag":80,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":17,"value":1486},"audit:a11y",{"type":17,"value":1488}," (axe across all prerendered routes), ",{"type":11,"tag":80,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":17,"value":1494},"audit:contrast",{"type":17,"value":1496},"\n(AAA across all three themes) — all blocking in CI.",{"type":11,"tag":128,"props":1498,"children":1499},{},[1500,1505,1506,1510,1511,1517],{"type":11,"tag":27,"props":1501,"children":1502},{},[1503],{"type":17,"value":1504},"For consumers",{"type":17,"value":1139},{"type":11,"tag":334,"props":1507,"children":1508},{},[1509],{"type":17,"value":1373},{"type":17,"value":834},{"type":11,"tag":80,"props":1512,"children":1514},{"className":1513},[],[1515],{"type":17,"value":1516},"tux-audit tokens",{"type":17,"value":1518}," ships as a bin —\nzero-dependency, catches the undefined-token bug class in any\nconsumer's CSS in one CI line. Contrast\u002Fa11y audits delegate\nhonestly (they need the consumer's own puppeteer\u002Faxe devDeps).",{"type":11,"tag":128,"props":1520,"children":1521},{},[1522,1527],{"type":11,"tag":27,"props":1523,"children":1524},{},[1525],{"type":17,"value":1526},"Known blind spot",{"type":17,"value":1528},": the audits check token pairs, not rendered\ncompositions (a composition-level dark-mode failure once passed AAA\nCI). Composition visual regression is the ADR-0012 follow-up, not\nyet built.",{"type":11,"tag":113,"props":1530,"children":1531},{},[],{"type":11,"tag":117,"props":1533,"children":1535},{"id":1534},"execution-log",[1536],{"type":17,"value":172},{"type":11,"tag":362,"props":1538,"children":1539},{},[1540,1561],{"type":11,"tag":366,"props":1541,"children":1542},{},[1543],{"type":11,"tag":370,"props":1544,"children":1545},{},[1546,1551,1556],{"type":11,"tag":374,"props":1547,"children":1548},{},[1549],{"type":17,"value":1550},"Date",{"type":11,"tag":374,"props":1552,"children":1553},{},[1554],{"type":17,"value":1555},"Slice",{"type":11,"tag":374,"props":1557,"children":1558},{},[1559],{"type":17,"value":1560},"What shipped",{"type":11,"tag":395,"props":1562,"children":1563},{},[1564,1604,1647,1679,1696,1722,1782,1859,1877],{"type":11,"tag":370,"props":1565,"children":1566},{},[1567,1572,1577],{"type":11,"tag":402,"props":1568,"children":1569},{},[1570],{"type":17,"value":1571},"2026-07-28",{"type":11,"tag":402,"props":1573,"children":1574},{},[1575],{"type":17,"value":1576},"Pre-flight",{"type":11,"tag":402,"props":1578,"children":1579},{},[1580,1582,1587,1589,1595,1597,1602],{"type":17,"value":1581},"v1.6.1 — ",{"type":11,"tag":80,"props":1583,"children":1585},{"className":1584},[],[1586],{"type":17,"value":1080},{"type":17,"value":1588}," A2b semantic pre-flight (registry order, focusable current tile, list semantics, same-tab default) + ",{"type":11,"tag":80,"props":1590,"children":1592},{"className":1591},[],[1593],{"type":17,"value":1594},"TuxSiteNav",{"type":17,"value":1596}," focus-restoration fix (A2c) + dependency hygiene. Consumers moved from sibling-checkout ",{"type":11,"tag":80,"props":1598,"children":1600},{"className":1599},[],[1601],{"type":17,"value":863},{"type":17,"value":1603}," deps to pinned git tags.",{"type":11,"tag":370,"props":1605,"children":1606},{},[1607,1611,1616],{"type":11,"tag":402,"props":1608,"children":1609},{},[1610],{"type":17,"value":1571},{"type":11,"tag":402,"props":1612,"children":1613},{},[1614],{"type":17,"value":1615},"v1.7.0 \"suite chrome\"",{"type":11,"tag":402,"props":1617,"children":1618},{},[1619,1624,1625,1631,1633,1638,1639,1645],{"type":11,"tag":80,"props":1620,"children":1622},{"className":1621},[],[1623],{"type":17,"value":602},{"type":17,"value":849},{"type":11,"tag":80,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":17,"value":1630},"useTuxApps()",{"type":17,"value":1632}," registry, ",{"type":11,"tag":80,"props":1634,"children":1636},{"className":1635},[],[1637],{"type":17,"value":510},{"type":17,"value":258},{"type":11,"tag":80,"props":1640,"children":1642},{"className":1641},[],[1643],{"type":17,"value":1644},"TuxUserMenu",{"type":17,"value":1646}," (cluster + rail-footer), registry-invariant unit tests, docs site dogfoods the cluster.",{"type":11,"tag":370,"props":1648,"children":1649},{},[1650,1654,1659],{"type":11,"tag":402,"props":1651,"children":1652},{},[1653],{"type":17,"value":1571},{"type":11,"tag":402,"props":1655,"children":1656},{},[1657],{"type":17,"value":1658},"B1 (Landscape)",{"type":11,"tag":402,"props":1660,"children":1661},{},[1662,1664,1670,1672,1677],{"type":17,"value":1663},"One ",{"type":11,"tag":80,"props":1665,"children":1667},{"className":1666},[],[1668],{"type":17,"value":1669},"LandscapeUtilityCluster",{"type":17,"value":1671}," wrapper wires the cluster + identity + waffle; triplicated layout chrome deleted. ",{"type":11,"tag":27,"props":1673,"children":1674},{},[1675],{"type":17,"value":1676},"Two portals wear the family chrome",{"type":17,"value":1678}," (docs site + Landscape).",{"type":11,"tag":370,"props":1680,"children":1681},{},[1682,1686,1691],{"type":11,"tag":402,"props":1683,"children":1684},{},[1685],{"type":17,"value":1571},{"type":11,"tag":402,"props":1687,"children":1688},{},[1689],{"type":17,"value":1690},"B3 handoff",{"type":11,"tag":402,"props":1692,"children":1693},{},[1694],{"type":17,"value":1695},"AI Studio's unification work (allowlisted opener, titlebar waffle, rail-footer identity, single-instance) handed to its own dedicated workstream. One session per working tree.",{"type":11,"tag":370,"props":1697,"children":1698},{},[1699,1704,1709],{"type":11,"tag":402,"props":1700,"children":1701},{},[1702],{"type":17,"value":1703},"2026-07-30",{"type":11,"tag":402,"props":1705,"children":1706},{},[1707],{"type":17,"value":1708},"Plan reconstruction",{"type":11,"tag":402,"props":1710,"children":1711},{},[1712,1714,1720],{"type":17,"value":1713},"This document committed; estate survey folded in; owner decisions #1–4 below resolved. v1.7.1: catalog single-source (",{"type":11,"tag":80,"props":1715,"children":1717},{"className":1716},[],[1718],{"type":17,"value":1719},"app\u002Futils\u002FtuxCatalog.ts",{"type":17,"value":1721}," + invariant test), doc truth pass, tests wired into CI.",{"type":11,"tag":370,"props":1723,"children":1724},{},[1725,1735,1740],{"type":11,"tag":402,"props":1726,"children":1727},{},[1728,1733],{"type":11,"tag":27,"props":1729,"children":1730},{},[1731],{"type":17,"value":1732},"done",{"type":17,"value":1734}," (2026-08-28)",{"type":11,"tag":402,"props":1736,"children":1737},{},[1738],{"type":17,"value":1739},"B2 (TTI Code)",{"type":11,"tag":402,"props":1741,"children":1742},{},[1743,1745,1751,1753,1758,1760,1765,1767,1773,1775,1780],{"type":17,"value":1744},"Landed in forgejo-stack (PRs #74–#81): kit artifact vendored verbatim + full ~280-var forgejo bridge; shell fragments consolidated (",{"type":11,"tag":80,"props":1746,"children":1748},{"className":1747},[],[1749],{"type":17,"value":1750},"tux-shell.{css,js}",{"type":17,"value":1752}," — one navbar\u002Ffooter\u002Ftheme-boot for every standalone page, live-mirrored from the forge navbar); waffle shipped as the ratified server-rendered partial baked from ",{"type":11,"tag":80,"props":1754,"children":1756},{"className":1755},[],[1757],{"type":17,"value":602},{"type":17,"value":1759},"; ",{"type":11,"tag":80,"props":1761,"children":1763},{"className":1762},[],[1764],{"type":17,"value":764},{"type":17,"value":1766}," interstitial live behind Caddy; overlay integrity manifest written at apply + ",{"type":11,"tag":80,"props":1768,"children":1770},{"className":1769},[],[1771],{"type":17,"value":1772},"audit-overlay.sh",{"type":17,"value":1774}," drift check. Remaining nuance: vendoring is pin+copy with a recorded ref (VENDORED.md), not deploy-from-git-ref. ",{"type":11,"tag":80,"props":1776,"children":1778},{"className":1777},[],[1779],{"type":17,"value":932},{"type":17,"value":1781}," shipped on all portal pages (footer seat per ADR-0006).",{"type":11,"tag":370,"props":1783,"children":1784},{},[1785,1793,1798],{"type":11,"tag":402,"props":1786,"children":1787},{},[1788],{"type":11,"tag":334,"props":1789,"children":1790},{},[1791],{"type":17,"value":1792},"(next)",{"type":11,"tag":402,"props":1794,"children":1795},{},[1796],{"type":17,"value":1797},"v1.8.0",{"type":11,"tag":402,"props":1799,"children":1800},{},[1801,1806,1807,1813,1815,1821,1822,1828,1829,1835,1837,1843,1844,1850,1852,1857],{"type":11,"tag":80,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":17,"value":974},{"type":17,"value":849},{"type":11,"tag":80,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":17,"value":1812},"--border-subtle",{"type":17,"value":1814}," + spacing scale + warning→gold, typography doctrine fix, ",{"type":11,"tag":80,"props":1816,"children":1818},{"className":1817},[],[1819],{"type":17,"value":1820},"TuxStatusToast",{"type":17,"value":258},{"type":11,"tag":80,"props":1823,"children":1825},{"className":1824},[],[1826],{"type":17,"value":1827},"TuxPageContainer",{"type":17,"value":258},{"type":11,"tag":80,"props":1830,"children":1832},{"className":1831},[],[1833],{"type":17,"value":1834},"TuxAvatar",{"type":17,"value":1836},", Nuxt UI theme hardening, consumer-debt fixes (mega-menu cap, measured nav height, demo-route stripping, dark-bridge tolerance), kit shipped in package ",{"type":11,"tag":80,"props":1838,"children":1840},{"className":1839},[],[1841],{"type":17,"value":1842},"files",{"type":17,"value":258},{"type":11,"tag":80,"props":1845,"children":1847},{"className":1846},[],[1848],{"type":17,"value":1849},"brand.env",{"type":17,"value":1851}," + Power BI artifacts, ",{"type":11,"tag":80,"props":1853,"children":1855},{"className":1854},[],[1856],{"type":17,"value":325},{"type":17,"value":1858}," bin.",{"type":11,"tag":370,"props":1860,"children":1861},{},[1862,1867,1872],{"type":11,"tag":402,"props":1863,"children":1864},{},[1865],{"type":17,"value":1866},"2026-08-12",{"type":11,"tag":402,"props":1868,"children":1869},{},[1870],{"type":17,"value":1871},"v1.9.0 \"chart engineering\"",{"type":11,"tag":402,"props":1873,"children":1874},{},[1875],{"type":17,"value":1876},"Audit-driven day: TuxChartGeographic per-kind async split (348KB → 12–163KB per kind), shared chart scale\u002Fhover\u002Ftone modules + one palette file under 39 behavior-lock tests, tooltip\u002Fkeyboard contract extended to treemap\u002Fdonut\u002Fsunburst + scatter roving cursor, mounted-test foundation (vitest + @nuxt\u002Ftest-utils, 66 tests), VueUse\u002FTanStack dead weight dropped for tux-owned composables, TuxRichDataGrid virtualized mode, universal focus-ring consolidation, fix wave (tux-audit jsdom gate, useId ids, radial SSR float mismatch, TuxExample formatter crash).",{"type":11,"tag":370,"props":1878,"children":1879},{},[1880,1888,1893],{"type":11,"tag":402,"props":1881,"children":1882},{},[1883],{"type":11,"tag":334,"props":1884,"children":1885},{},[1886],{"type":17,"value":1887},"(later)",{"type":11,"tag":402,"props":1889,"children":1890},{},[1891],{"type":17,"value":1892},"—",{"type":11,"tag":402,"props":1894,"children":1895},{},[1896,1902],{"type":11,"tag":80,"props":1897,"children":1899},{"className":1898},[],[1900],{"type":17,"value":1901},"TuxKanban",{"type":17,"value":1903}," family promotion (from AI Studio, re-implemented tokens-clean), lint-rule guardrails.",{"type":11,"tag":113,"props":1905,"children":1906},{},[],{"type":11,"tag":117,"props":1908,"children":1910},{"id":1909},"satellite-workstreams",[1911],{"type":17,"value":181},{"type":11,"tag":23,"props":1913,"children":1914},{},[1915],{"type":17,"value":1916},"Slices owned by other sessions\u002Frepos; listed here so the doctrine and\nsequencing stay in one place.",{"type":11,"tag":124,"props":1918,"children":1919},{},[1920,1975,2000,2038],{"type":11,"tag":128,"props":1921,"children":1922},{},[1923,1928,1930,1935,1937,1942,1944,1949,1951,1957,1959,1965,1967,1973],{"type":11,"tag":27,"props":1924,"children":1925},{},[1926],{"type":17,"value":1927},"TTI docs platform",{"type":17,"value":1929}," (docs site consolidation repo) — pin bump to\ncurrent; ",{"type":11,"tag":27,"props":1931,"children":1932},{},[1933],{"type":17,"value":1934},"SSO login surface rebrand first",{"type":17,"value":1936}," (it ships off-brand\ntoday and every authenticated user sees it); maroon-ramp\nreconciliation onto the canonical ramp; chrome migration\nsmallest-first (identity + theme toggle → ",{"type":11,"tag":80,"props":1938,"children":1940},{"className":1939},[],[1941],{"type":17,"value":1644},{"type":17,"value":1943}," +\n",{"type":11,"tag":80,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":17,"value":510},{"type":17,"value":1950},", footer → ",{"type":11,"tag":80,"props":1952,"children":1954},{"className":1953},[],[1955],{"type":17,"value":1956},"TuxFooter",{"type":17,"value":1958},", search →\n",{"type":11,"tag":80,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":17,"value":1964},"TuxCommandPalette",{"type":17,"value":1966},", TOC → ",{"type":11,"tag":80,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":17,"value":1972},"TuxTOC",{"type":17,"value":1974},", navbar last); legacy\nAggieUX-era vocabulary retired alias-then-delete over two releases.",{"type":11,"tag":128,"props":1976,"children":1977},{},[1978,1983,1985,1990,1992,1998],{"type":11,"tag":27,"props":1979,"children":1980},{},[1981],{"type":17,"value":1982},"Power BI reporting",{"type":17,"value":1984}," — generate report themes from\n",{"type":11,"tag":80,"props":1986,"children":1988},{"className":1987},[],[1989],{"type":17,"value":1268},{"type":17,"value":1991}," (consumes ",{"type":11,"tag":80,"props":1993,"children":1995},{"className":1994},[],[1996],{"type":17,"value":1997},"kit\u002Fpowerbi\u002F",{"type":17,"value":1999}," once v1.8.0 ships, or\nbuilds locally from the same source); refresh its token snapshot\n(pinned to v1.1.0 as of the survey — six minors stale); reconcile\nits spec\u002Fvalidator\u002Ftheme three-way drift; keep brand surfaces\ntheme-invariant (already its documented, correct decision).",{"type":11,"tag":128,"props":2001,"children":2002},{},[2003,2008,2010,2015,2017,2022,2024,2029,2031,2036],{"type":11,"tag":27,"props":2004,"children":2005},{},[2006],{"type":17,"value":2007},"External collaboration stack",{"type":17,"value":2009}," — its \"light\" theme vendored the\n",{"type":11,"tag":80,"props":2011,"children":2013},{"className":2012},[],[2014],{"type":17,"value":932},{"type":17,"value":2016}," values by accident (owner-confirmed 2026-07-30): re-vendor\n",{"type":11,"tag":80,"props":2018,"children":2020},{"className":2019},[],[2021],{"type":17,"value":1339},{"type":17,"value":2023}," verbatim after v1.8.0 and swap its bespoke\non-brand token for ",{"type":11,"tag":80,"props":2025,"children":2027},{"className":2026},[],[2028],{"type":17,"value":974},{"type":17,"value":2030},". Its token→env fan-out script\nand per-surface contrast gate are the upstream inspiration for\n",{"type":11,"tag":80,"props":2032,"children":2034},{"className":2033},[],[2035],{"type":17,"value":1849},{"type":17,"value":2037}," and the kit's on-brand recipe — credit where due.",{"type":11,"tag":128,"props":2039,"children":2040},{},[2041,2045,2047,2053],{"type":11,"tag":27,"props":2042,"children":2043},{},[2044],{"type":17,"value":59},{"type":17,"value":2046}," — owns B3 (see execution log). Its ",{"type":11,"tag":80,"props":2048,"children":2050},{"className":2049},[],[2051],{"type":17,"value":2052},"TuxKanban*",{"type":17,"value":2054},"\ncomponents migrate upstream in v1.9.0; the app deletes its copies\nat its own pin-bump.",{"type":11,"tag":113,"props":2056,"children":2057},{},[],{"type":11,"tag":117,"props":2059,"children":2061},{"id":2060},"open-owner-decisions",[2062],{"type":17,"value":190},{"type":11,"tag":23,"props":2064,"children":2065},{},[2066],{"type":17,"value":2067},"Carried so they stop living only in session state. Resolved decisions\nmove to the laws above with a date.",{"type":11,"tag":362,"props":2069,"children":2070},{},[2071,2092],{"type":11,"tag":366,"props":2072,"children":2073},{},[2074],{"type":11,"tag":370,"props":2075,"children":2076},{},[2077,2082,2087],{"type":11,"tag":374,"props":2078,"children":2079},{},[2080],{"type":17,"value":2081},"#",{"type":11,"tag":374,"props":2083,"children":2084},{},[2085],{"type":17,"value":2086},"Decision",{"type":11,"tag":374,"props":2088,"children":2089},{},[2090],{"type":17,"value":2091},"State",{"type":11,"tag":395,"props":2093,"children":2094},{},[2095,2118,2152,2180,2221,2243,2265,2287,2309,2345,2380,2414],{"type":11,"tag":370,"props":2096,"children":2097},{},[2098,2103,2113],{"type":11,"tag":402,"props":2099,"children":2100},{},[2101],{"type":17,"value":2102},"1",{"type":11,"tag":402,"props":2104,"children":2105},{},[2106,2111],{"type":11,"tag":27,"props":2107,"children":2108},{},[2109],{"type":17,"value":2110},"Family name",{"type":17,"value":2112}," — waffle heading ships as \"TTI Portals\"; the umbrella marketing name (\"TTI Research Suite\"? \"TTI Tools\"?) is unratified",{"type":11,"tag":402,"props":2114,"children":2115},{},[2116],{"type":17,"value":2117},"open",{"type":11,"tag":370,"props":2119,"children":2120},{},[2121,2126,2136],{"type":11,"tag":402,"props":2122,"children":2123},{},[2124],{"type":17,"value":2125},"2",{"type":11,"tag":402,"props":2127,"children":2128},{},[2129,2134],{"type":11,"tag":27,"props":2130,"children":2131},{},[2132],{"type":17,"value":2133},"Light-mode family signature",{"type":17,"value":2135}," — editorial-white chrome + maroon wordmark + gold keyline + tracked eyebrow, incl. whether TTI Code keeps its maroon navbar or adopts the white chrome",{"type":11,"tag":402,"props":2137,"children":2138},{},[2139],{"type":11,"tag":27,"props":2140,"children":2141},{},[2142,2144,2150],{"type":17,"value":2143},"ratified 2026-08-27 — TTI Code retired the maroon navbar and adopted the editorial white\u002Fwarm-black chrome (TuxSiteNav recipe); maroon survives as ",{"type":11,"tag":80,"props":2145,"children":2147},{"className":2146},[],[2148],{"type":17,"value":2149},"--brand-fill",{"type":17,"value":2151}," surfaces per the on-brand rule",{"type":11,"tag":370,"props":2153,"children":2154},{},[2155,2160,2176],{"type":11,"tag":402,"props":2156,"children":2157},{},[2158],{"type":17,"value":2159},"3",{"type":11,"tag":402,"props":2161,"children":2162},{},[2163,2168,2170,2175],{"type":11,"tag":27,"props":2164,"children":2165},{},[2166],{"type":17,"value":2167},"Landscape anonymous surface",{"type":17,"value":2169}," — purpose-built anonymous endpoints vs authenticated-only (path-exclusion on the auth proxy was reviewed and ",{"type":11,"tag":27,"props":2171,"children":2172},{},[2173],{"type":17,"value":2174},"withdrawn as unsafe",{"type":17,"value":444},{"type":11,"tag":402,"props":2177,"children":2178},{},[2179],{"type":17,"value":2117},{"type":11,"tag":370,"props":2181,"children":2182},{},[2183,2188,2216],{"type":11,"tag":402,"props":2184,"children":2185},{},[2186],{"type":17,"value":2187},"4",{"type":11,"tag":402,"props":2189,"children":2190},{},[2191,2200,2202,2207,2209,2214],{"type":11,"tag":2192,"props":2193,"children":2194},"del",{},[2195],{"type":11,"tag":27,"props":2196,"children":2197},{},[2198],{"type":17,"value":2199},"AI Studio in the anonymous waffle",{"type":17,"value":2201}," — ",{"type":11,"tag":27,"props":2203,"children":2204},{},[2205],{"type":17,"value":2206},"withdrawn 2026-08-30",{"type":17,"value":2208},": the AI Studio tile was retired from the roster (owner call); the ",{"type":11,"tag":80,"props":2210,"children":2212},{"className":2211},[],[2213],{"type":17,"value":764},{"type":17,"value":2215}," interstitial and the desktop-link law both survive",{"type":11,"tag":402,"props":2217,"children":2218},{},[2219],{"type":17,"value":2220},"withdrawn",{"type":11,"tag":370,"props":2222,"children":2223},{},[2224,2229,2239],{"type":11,"tag":402,"props":2225,"children":2226},{},[2227],{"type":17,"value":2228},"5",{"type":11,"tag":402,"props":2230,"children":2231},{},[2232,2237],{"type":11,"tag":27,"props":2233,"children":2234},{},[2235],{"type":17,"value":2236},"Follow-OS theme default for web portals",{"type":17,"value":2238}," (+ maroon floor); desktop shell already ratified follow-OS",{"type":11,"tag":402,"props":2240,"children":2241},{},[2242],{"type":17,"value":2117},{"type":11,"tag":370,"props":2244,"children":2245},{},[2246,2251,2261],{"type":11,"tag":402,"props":2247,"children":2248},{},[2249],{"type":17,"value":2250},"6",{"type":11,"tag":402,"props":2252,"children":2253},{},[2254,2259],{"type":11,"tag":27,"props":2255,"children":2256},{},[2257],{"type":17,"value":2258},"Classification-banner scope",{"type":17,"value":2260}," — which portals carry the data-classification banner (compliance question)",{"type":11,"tag":402,"props":2262,"children":2263},{},[2264],{"type":17,"value":2117},{"type":11,"tag":370,"props":2266,"children":2267},{},[2268,2273,2283],{"type":11,"tag":402,"props":2269,"children":2270},{},[2271],{"type":17,"value":2272},"7",{"type":11,"tag":402,"props":2274,"children":2275},{},[2276,2281],{"type":11,"tag":27,"props":2277,"children":2278},{},[2279],{"type":17,"value":2280},"Vibrancy\u002FMica asymmetry",{"type":17,"value":2282}," — macOS gets vibrancy, Windows does not; ratify or converge",{"type":11,"tag":402,"props":2284,"children":2285},{},[2286],{"type":17,"value":2117},{"type":11,"tag":370,"props":2288,"children":2289},{},[2290,2295,2305],{"type":11,"tag":402,"props":2291,"children":2292},{},[2293],{"type":17,"value":2294},"8",{"type":11,"tag":402,"props":2296,"children":2297},{},[2298,2303],{"type":11,"tag":27,"props":2299,"children":2300},{},[2301],{"type":17,"value":2302},"Forge-registry seed package",{"type":17,"value":2304}," — regenerate from canonical tokens (recommended) vs retire, pending whether any registry consumer installed the stale version",{"type":11,"tag":402,"props":2306,"children":2307},{},[2308],{"type":17,"value":2117},{"type":11,"tag":370,"props":2310,"children":2311},{},[2312,2317,2340],{"type":11,"tag":402,"props":2313,"children":2314},{},[2315],{"type":17,"value":2316},"9",{"type":11,"tag":402,"props":2318,"children":2319},{},[2320,2325,2326,2331,2333,2338],{"type":11,"tag":2192,"props":2321,"children":2322},{},[2323],{"type":17,"value":2324},"Form controls",{"type":17,"value":2201},{"type":11,"tag":27,"props":2327,"children":2328},{},[2329],{"type":17,"value":2330},"resolved 2026-07-30",{"type":17,"value":2332},": hybrid (theme ",{"type":11,"tag":80,"props":2334,"children":2336},{"className":2335},[],[2337],{"type":17,"value":1156},{"type":17,"value":2339},", no wrapper set)",{"type":11,"tag":402,"props":2341,"children":2342},{},[2343],{"type":17,"value":2344},"ratified",{"type":11,"tag":370,"props":2346,"children":2347},{},[2348,2353,2376],{"type":11,"tag":402,"props":2349,"children":2350},{},[2351],{"type":17,"value":2352},"10",{"type":11,"tag":402,"props":2354,"children":2355},{},[2356,2361,2362,2366,2368,2374],{"type":11,"tag":2192,"props":2357,"children":2358},{},[2359],{"type":17,"value":2360},"Warning semantic",{"type":17,"value":2201},{"type":11,"tag":27,"props":2363,"children":2364},{},[2365],{"type":17,"value":2330},{"type":17,"value":2367},": TTI gold backs ",{"type":11,"tag":80,"props":2369,"children":2371},{"className":2370},[],[2372],{"type":17,"value":2373},"warning",{"type":17,"value":2375}," (v1.8.0)",{"type":11,"tag":402,"props":2377,"children":2378},{},[2379],{"type":17,"value":2344},{"type":11,"tag":370,"props":2381,"children":2382},{},[2383,2388,2410],{"type":11,"tag":402,"props":2384,"children":2385},{},[2386],{"type":17,"value":2387},"11",{"type":11,"tag":402,"props":2389,"children":2390},{},[2391,2396,2397,2401,2403,2408],{"type":11,"tag":2192,"props":2392,"children":2393},{},[2394],{"type":17,"value":2395},"Collab-stack hc-as-light",{"type":17,"value":2201},{"type":11,"tag":27,"props":2398,"children":2399},{},[2400],{"type":17,"value":2330},{"type":17,"value":2402},": accident; fix to canonical ",{"type":11,"tag":80,"props":2404,"children":2406},{"className":2405},[],[2407],{"type":17,"value":917},{"type":17,"value":2409}," light",{"type":11,"tag":402,"props":2411,"children":2412},{},[2413],{"type":17,"value":2344},{"type":11,"tag":370,"props":2415,"children":2416},{},[2417,2422,2437],{"type":11,"tag":402,"props":2418,"children":2419},{},[2420],{"type":17,"value":2421},"12",{"type":11,"tag":402,"props":2423,"children":2424},{},[2425,2430,2431,2435],{"type":11,"tag":2192,"props":2426,"children":2427},{},[2428],{"type":17,"value":2429},"Docs-platform ownership",{"type":17,"value":2201},{"type":11,"tag":27,"props":2432,"children":2433},{},[2434],{"type":17,"value":2330},{"type":17,"value":2436},": separate workstream, spawned with a handoff",{"type":11,"tag":402,"props":2438,"children":2439},{},[2440],{"type":17,"value":2344},{"title":6,"searchDepth":2442,"depth":2442,"links":2443},2,[2444,2445,2446,2458,2459,2460,2461,2462],{"id":119,"depth":2442,"text":122},{"id":196,"depth":2442,"text":136},{"id":346,"depth":2442,"text":145,"children":2447},[2448,2450,2451,2452,2453,2454,2455,2456,2457],{"id":352,"depth":2449,"text":355},3,{"id":515,"depth":2449,"text":518},{"id":583,"depth":2449,"text":586},{"id":717,"depth":2449,"text":720},{"id":743,"depth":2449,"text":746},{"id":816,"depth":2449,"text":819},{"id":900,"depth":2449,"text":903},{"id":1033,"depth":2449,"text":1036},{"id":1085,"depth":2449,"text":1088},{"id":1251,"depth":2442,"text":154},{"id":1450,"depth":2442,"text":163},{"id":1534,"depth":2442,"text":172},{"id":1909,"depth":2442,"text":181},{"id":2060,"depth":2442,"text":190},1788285288916]