[{"data":1,"prerenderedAt":315},["ShallowReactive",2],{"doc-page:adr\u002F0002-tux-prefix-naming":3},{"data":4,"body":7,"toc":309},{"title":5,"description":6},"ADR 0002 — Tux* as the component prefix","",{"type":8,"children":9},"root",[10,28,54,61,83,88,215,227,233,278,284],{"type":11,"tag":12,"props":13,"children":15},"element","h1",{"id":14},"adr-0002-tux-as-the-component-prefix",[16,19,26],{"type":17,"value":18},"text","ADR 0002 — ",{"type":11,"tag":20,"props":21,"children":23},"code",{"className":22},[],[24],{"type":17,"value":25},"Tux*",{"type":17,"value":27}," as the component prefix",{"type":11,"tag":29,"props":30,"children":31},"ul",{},[32,44],{"type":11,"tag":33,"props":34,"children":35},"li",{},[36,42],{"type":11,"tag":37,"props":38,"children":39},"strong",{},[40],{"type":17,"value":41},"Date",{"type":17,"value":43},": 2026-04-24",{"type":11,"tag":33,"props":45,"children":46},{},[47,52],{"type":11,"tag":37,"props":48,"children":49},{},[50],{"type":17,"value":51},"Status",{"type":17,"value":53},": Accepted",{"type":11,"tag":55,"props":56,"children":58},"h2",{"id":57},"context",[59],{"type":17,"value":60},"Context",{"type":11,"tag":62,"props":63,"children":64},"p",{},[65,67,73,75,81],{"type":17,"value":66},"When tti-ux extracted from PECAN, the components inherited PECAN's ",{"type":11,"tag":20,"props":68,"children":70},{"className":69},[],[71],{"type":17,"value":72},"Pecan*",{"type":17,"value":74},"\nprefix (PecanAlert, PecanCard, etc.). If tti-ux is the source of truth,\nthe prefix needs to be app-agnostic — otherwise a consuming app like\ntti-ai-chat importing ",{"type":11,"tag":20,"props":76,"children":78},{"className":77},[],[79],{"type":17,"value":80},"PecanAlert",{"type":17,"value":82}," reads as a leaky abstraction.",{"type":11,"tag":62,"props":84,"children":85},{},[86],{"type":17,"value":87},"Candidate prefixes considered:",{"type":11,"tag":89,"props":90,"children":91},"table",{},[92,116],{"type":11,"tag":93,"props":94,"children":95},"thead",{},[96],{"type":11,"tag":97,"props":98,"children":99},"tr",{},[100,106,111],{"type":11,"tag":101,"props":102,"children":103},"th",{},[104],{"type":17,"value":105},"Prefix",{"type":11,"tag":101,"props":107,"children":108},{},[109],{"type":17,"value":110},"Pro",{"type":11,"tag":101,"props":112,"children":113},{},[114],{"type":17,"value":115},"Con",{"type":11,"tag":117,"props":118,"children":119},"tbody",{},[120,143,165,192],{"type":11,"tag":97,"props":121,"children":122},{},[123,133,138],{"type":11,"tag":124,"props":125,"children":126},"td",{},[127],{"type":11,"tag":20,"props":128,"children":130},{"className":129},[],[131],{"type":17,"value":132},"Tti*",{"type":11,"tag":124,"props":134,"children":135},{},[136],{"type":17,"value":137},"Org-aligned, matches the file naming elsewhere",{"type":11,"tag":124,"props":139,"children":140},{},[141],{"type":17,"value":142},"Org rebrands happen; reads awkward in text",{"type":11,"tag":97,"props":144,"children":145},{},[146,155,160],{"type":11,"tag":124,"props":147,"children":148},{},[149],{"type":11,"tag":20,"props":150,"children":152},{"className":151},[],[153],{"type":17,"value":154},"Ux*",{"type":11,"tag":124,"props":156,"children":157},{},[158],{"type":17,"value":159},"Short, generic",{"type":11,"tag":124,"props":161,"children":162},{},[163],{"type":17,"value":164},"Collides with the literal term \"UX\"",{"type":11,"tag":97,"props":166,"children":167},{},[168,176,187],{"type":11,"tag":124,"props":169,"children":170},{},[171],{"type":11,"tag":20,"props":172,"children":174},{"className":173},[],[175],{"type":17,"value":25},{"type":11,"tag":124,"props":177,"children":178},{},[179,181],{"type":17,"value":180},"Short, unique, maps to repo name ",{"type":11,"tag":20,"props":182,"children":184},{"className":183},[],[185],{"type":17,"value":186},"tti-ux",{"type":11,"tag":124,"props":188,"children":189},{},[190],{"type":17,"value":191},"Not a word — requires a one-time learning",{"type":11,"tag":97,"props":193,"children":194},{},[195,205,210],{"type":11,"tag":124,"props":196,"children":197},{},[198,203],{"type":11,"tag":20,"props":199,"children":201},{"className":200},[],[202],{"type":17,"value":72},{"type":17,"value":204}," (keep)",{"type":11,"tag":124,"props":206,"children":207},{},[208],{"type":17,"value":209},"Zero churn in PECAN",{"type":11,"tag":124,"props":211,"children":212},{},[213],{"type":17,"value":214},"Wrong semantics for a shared library",{"type":11,"tag":62,"props":216,"children":217},{},[218,220,225],{"type":17,"value":219},"The ",{"type":11,"tag":20,"props":221,"children":223},{"className":222},[],[224],{"type":17,"value":25},{"type":17,"value":226}," option has the additional win of a built-in visual identity — a\ntuxedo icon in TTI colors (maroon jacket, gold bow tie) works as the repo\nmark and carries forward into merch \u002F internal slide decks without feeling\ncorporate-generic.",{"type":11,"tag":55,"props":228,"children":230},{"id":229},"decision",[231],{"type":17,"value":232},"Decision",{"type":11,"tag":62,"props":234,"children":235},{},[236,238,244,246,252,254,260,262,268,270,276],{"type":17,"value":237},"Component filenames are PascalCase with a ",{"type":11,"tag":20,"props":239,"children":241},{"className":240},[],[242],{"type":17,"value":243},"Tux",{"type":17,"value":245}," prefix (",{"type":11,"tag":20,"props":247,"children":249},{"className":248},[],[250],{"type":17,"value":251},"TuxAlert.vue",{"type":17,"value":253},").\nTemplates can use either ",{"type":11,"tag":20,"props":255,"children":257},{"className":256},[],[258],{"type":17,"value":259},"\u003CTuxAlert>",{"type":17,"value":261}," or ",{"type":11,"tag":20,"props":263,"children":265},{"className":264},[],[266],{"type":17,"value":267},"\u003Ctux-alert>",{"type":17,"value":269}," — Nuxt auto-imports\nresolve both. Imports in ",{"type":11,"tag":20,"props":271,"children":273},{"className":272},[],[274],{"type":17,"value":275},"\u003Cscript setup>",{"type":17,"value":277}," use PascalCase.",{"type":11,"tag":55,"props":279,"children":281},{"id":280},"consequences",[282],{"type":17,"value":283},"Consequences",{"type":11,"tag":29,"props":285,"children":286},{},[287,299,304],{"type":11,"tag":33,"props":288,"children":289},{},[290,292,297],{"type":17,"value":291},"PECAN's existing ",{"type":11,"tag":20,"props":293,"children":295},{"className":294},[],[296],{"type":17,"value":72},{"type":17,"value":298}," components keep working in place until the\nNuxt-layer migration lands; at that point we delete them and add a\nre-export shim in PECAN if call-site churn gets painful.",{"type":11,"tag":33,"props":300,"children":301},{},[302],{"type":17,"value":303},"The style guide runs at port 3030 (not 3000) to coexist with PECAN and\ndocs-tti-tamu-edu local dev servers.",{"type":11,"tag":33,"props":305,"children":306},{},[307],{"type":17,"value":308},"The tuxedo logo is explicitly load-bearing — this ADR assumes the mark\nsurvives. If TTI brand guidance ever disallows the tuxedo, we'd supersede\nthis ADR with a new naming decision rather than awkwardly divorce the\nprefix from the visual.",{"title":6,"searchDepth":310,"depth":310,"links":311},2,[312,313,314],{"id":57,"depth":310,"text":60},{"id":229,"depth":310,"text":232},{"id":280,"depth":310,"text":283},1793225761655]