release(v3.0.0): TTI-UX 3.0 prime-time release & communications team handover #65

Merged
A-Guevara merged 65 commits from status-palette into main 2026-10-06 00:07:08 +00:00
Owner

TTI-UX 3.0: Prime-Time Release & Communications Team Handover

This release marks the landmark v3.0.0 of the Texas A&M Transportation Institute Design System (TTI-UX / TUX), transitioning the repository to 100% turnkey autonomy for the TTI Communications & Marketing team.

Summary of Major Additions

  1. Brand Foundations & Tokens:

    • tokens.json single source of truth across 11 platform targets.
    • 6th status state (maintenance) with OKLab perceptual lightness uniformity and WCAG AAA compliance.
    • 5-band institutional division spectrum (Mobility, Infrastructure, Safety, Planning, Operations).
  2. Components & Interactive Workbenches (183 Primitives):

    • 183 auto-imported Nuxt 4 primitives with interactive TuxPlayground workbenches, live props knobs, format presets, and multi-framework code tabs.
    • 3D interactive roadway cross-section visualizer with real-time lane configuration and volumetric geotechnical layering.
    • Flagship <TuxEditorialArticle> layout with 5 interchangeable heroes, reading ergonomics, and APA/BibTeX citation export.
    • Native SVG charts + Apache ECharts interactive storytelling suite (UTP drilldowns, shockwave flow simulator).
  3. Multi-Platform Distribution (11 Synchronized Targets):

    • @tti/tti-ux-react (React 19 / TSX).
    • @tti/tti-ux-elements (177 zero-dependency Web Components).
    • Tti.Tux.AspNetCore & Blazor components (.NET 8/9).
    • Turnkey Kadence child theme (kadence-child-tti) and tti-ux-core plugin for WordPress.
    • Power BI PBIR report templates and DAX measures.
    • Python dataclasses (Streamlit/Dash), Swift, and Kotlin tokens.
  4. Turnkey Communications Handover:

    • COMM_HANDOVER.md operational runbook at repo root.
    • /docs/comm-handover web guide with copyable shortcodes and quickstart terminal commands.
    • Nuxt Studio visual in-browser editing starter (templates/tux-starter-content).
    • 60-second WCAG AAA retrofitting bridge (tux-bridge.css).
  5. Institutional Quality Harness & Compliance:

    • 100% WCAG 2.2 AAA compliance (7:1 text contrast, 44px touch targets).
    • 764 Vitest mounted component tests passing.
    • 0 axe-core accessibility violations across all 255 prerendered HTML pages.
    • 0 px horizontal overflow across mobile (375px), tablet (768px), and desktop (1024px).
    • Push-button verification via node scripts/test-all-suites.mjs.
## TTI-UX 3.0: Prime-Time Release & Communications Team Handover This release marks the landmark **v3.0.0** of the Texas A&M Transportation Institute Design System (TTI-UX / TUX), transitioning the repository to 100% turnkey autonomy for the TTI Communications & Marketing team. ### Summary of Major Additions 1. **Brand Foundations & Tokens**: - `tokens.json` single source of truth across 11 platform targets. - 6th status state (`maintenance`) with OKLab perceptual lightness uniformity and WCAG AAA compliance. - 5-band institutional division spectrum (Mobility, Infrastructure, Safety, Planning, Operations). 2. **Components & Interactive Workbenches (183 Primitives)**: - 183 auto-imported Nuxt 4 primitives with interactive TuxPlayground workbenches, live props knobs, format presets, and multi-framework code tabs. - 3D interactive roadway cross-section visualizer with real-time lane configuration and volumetric geotechnical layering. - Flagship `<TuxEditorialArticle>` layout with 5 interchangeable heroes, reading ergonomics, and APA/BibTeX citation export. - Native SVG charts + Apache ECharts interactive storytelling suite (UTP drilldowns, shockwave flow simulator). 3. **Multi-Platform Distribution (11 Synchronized Targets)**: - `@tti/tti-ux-react` (React 19 / TSX). - `@tti/tti-ux-elements` (177 zero-dependency Web Components). - `Tti.Tux.AspNetCore` & Blazor components (.NET 8/9). - Turnkey Kadence child theme (`kadence-child-tti`) and `tti-ux-core` plugin for WordPress. - Power BI PBIR report templates and DAX measures. - Python dataclasses (Streamlit/Dash), Swift, and Kotlin tokens. 4. **Turnkey Communications Handover**: - `COMM_HANDOVER.md` operational runbook at repo root. - `/docs/comm-handover` web guide with copyable shortcodes and quickstart terminal commands. - Nuxt Studio visual in-browser editing starter (`templates/tux-starter-content`). - 60-second WCAG AAA retrofitting bridge (`tux-bridge.css`). 5. **Institutional Quality Harness & Compliance**: - 100% WCAG 2.2 AAA compliance (7:1 text contrast, 44px touch targets). - 764 Vitest mounted component tests passing. - 0 axe-core accessibility violations across all 255 prerendered HTML pages. - 0 px horizontal overflow across mobile (375px), tablet (768px), and desktop (1024px). - Push-button verification via `node scripts/test-all-suites.mjs`.
color.semantic is a sentiment palette — good / neutral / bad — and it cannot
express the five states an operations surface has to separate at a glance.
Building the Nagios Core overlay surfaced two failures that are properties of
the palette, not of that consumer:

  - semantic.success #3D5328 is a deep olive tuned to clear AAA as text on
    white. Used as a cell tint it loses its hue and reads grey-green.
  - There is no orange, so UNKNOWN had to borrow chart.5 #8C5A3C, a clay brown
    that reads as a weak red beside CRITICAL — after which PENDING's neutral
    grey sat too close to that near-grey brown and read as UNKNOWN.

Both survived review because the code referenced canonical tokens throughout
and passed every contrast check. What failed was legibility as a RAMP, which
nothing in the system was measuring.

Adds themes.<t>.status for tti, tti-dark and tti-hc: five states x three roles
(base for text and edges, fill for a chip, ink for the word inside it). Hues are
inherited from what Nagios Core itself ships, because green -> yellow -> orange
-> red is operator muscle memory and a prettier ramp would be a legibility
regression dressed as a brand win. tti-hc renders outlined chips so no state
depends on a colour-on-colour pair.

Values were derived in OKLCH and are authored in tokens.json like everything
else. scripts/audit-status-palette.mjs re-derives the constraints and fails on
any breach: hue identity within 14deg, chips >= 0.075 apart in OKLab, chip
lightness descending with severity, no status colour within 0.10 of brand
maroon, and WCAG 2.2 AA as the floor with tti-hc held to AAA. It needs neither a
browser nor a Nuxt build, unlike audit:contrast, so it can gate every commit.
Each rule was negative-tested.

Three of those guards exist because the unconstrained solve actually broke them:
CRITICAL landed at #77020b, 0.076 from brand maroon — "down" painted the colour
of the chrome.

Power BI's good/neutral/bad still resolve to the semantic palette. Re-pointing
them would change every report already built on tti-theme.json, and sentiment is
arguably right for a KPI card; ADR-0013 records that as an open decision rather
than an oversight.
The warning chip was #D2D331, a yellow-green. Cause was rule 3, which required
chip lightness to descend ok > warning > unknown > critical. sRGB gives each hue
a very different lightness at full chroma — yellow ~0.97, green ~0.87, orange
~0.77, red ~0.64 — so a monotonic ramp across all four forces yellow below
green, and yellow does not survive being darkened: it turns olive almost
immediately.

Hue identity outranks weight ordering. The ordering exists to keep ADJACENT
WARM hues apart, which is where the collision actually was (pale orange beside
pale salmon); green is far enough away in hue that its weight does not matter.

  - warning fill: #D2D331 -> #ECEE55 (tti), #C6C618 -> #E6E74C (tti-dark)
  - rule 3 now covers warning > unknown > critical only
  - separation is unchanged at 0.101 / 0.111 OKLab, well over the 0.075 floor,
    and ink clears AAA on both

ADR-0013 and palette.md record why the rule stops short of ok, so it does not
get "fixed" back into a full ramp later.
Nagios already distinguishes acknowledged (…ACK) from in scheduled downtime
(…SCHED), and those are different facts: one means somebody is on it, the other
means we planned this. The five-state ramp had no way to say the second, so the
first consumer collapsed both into one "handled" grey — throwing away the
distinction an operator most wants at 3am.

maintenance is the one state whose hue does NOT come from Nagios. Nagios ships
no colour for it because it is not a point on the severity ramp at all: it means
expected, not a fault. It takes TTI's own blue instead — the hue of
brand.secondary #15457E at 255.2deg, far from all five severity hues and the
conventional colour for planned work across monitoring tools. It is exempt from
the severity-weight rule for the same reason ok is: it is not on the ramp.

Chip lightness is 0.78 rather than the 0.86 a first pass suggested, because at
0.86 the pale blue landed 0.081 from the pending grey — only just over the
0.075 floor. At 0.78 it clears by 0.166 (tti) / 0.139 (tti-dark) and the ink
still reaches AAA.

Adding it now rather than later: the ramp has one consumer today, and
retrofitting a sixth state after Atlas adopts it costs more than deriving it
while the guards are still fresh.
- Audit and rewrite copy across all documentation, components, tokens, and example pages
- Eliminate marketing buzzwords, AI tropes, and self-congratulatory claims in favor of concise, technical prose
- Restrict all institutional naming exclusively to TTI / Texas A&M Transportation Institute
- Implement interactive version era simulation with dynamic CSS token shifts and animated archive notice
- Implement sliding active pill and underline navigation menu transitions
- Create dedicated error boundaries for 404/503/401/403/500 with zero-a11y-violation unit test coverage
- Resolve local icon loading via Nitro endpoint handler and CSS scan configuration
- Maintain 100% WCAG 2.2 Level AAA compliance and 183 component test passes
- Overhaul TuxHeroCanvas core origin (elevated cx=74%, cy=22%) and restrict gradient mask strictly to canvas layers, eliminating foreground title/dek readability conflicts
- Remove (Sol) naming references from news and editorial showcase
- Add TuxRoadwayCrossSection with 3D spatial pitch/yaw controls, 2D CAD blueprint profile, pavement structural strata, and embankment hydrology
- Overhaul ECharts particle-flow Exhibit 2.5 with AASHTO highway cross-section geometric bands and responsive box-fitting
- Integrate TuxRoadwayCrossSection into geospatial and corridor analytics pages
- Register TuxRoadwayCrossSection in tuxCatalog, tuxHealthCatalog, design/components.md, and ports manifest
- Meet 100% WCAG 2.2 AAA, token wash ladder discipline, and pass all 6 test runner tiers
- Restore seamless bottom bleed dissolving into var(--surface-page) with an extended 14rem easing curve
- Place bleed gradient at z-index: 1 at the back behind content layer (z-index: 10)
- Remove hard 1px bottom border on seamless hero blend for an uninterrupted transition into page body
- Ensure stardust alpha mask dissolves harmoniously (55% to 100%) alongside the background transition
- Maintain 100% WCAG 2.2 AAA compliance, wash ladder discipline, and pass all 6 test runner tiers
- Elevate index.vue into an institutional flagship featuring the interactive hero canvas, 3D AASHTO roadway corridor visualizer, multimodal data intelligence, complete component arsenal taxonomy, token foundations, and enterprise blueprints
- Enhance app.vue top navigation with frosted glassmorphic backdrop-blur (16px), refined sliding active indicator pill with subtle Warm Gold glow, and zero raw hex literals
- Refine TuxReactiveSidebar active states to maintain strict token invariance
- Ensure strict sequential heading order (h1 -> h2 -> h3) for 100% WCAG 2.2 Level AAA compliance and zero axe violations across all 254 prerendered routes
- Pass all Tier 1 through Tier 5 quality gateway tests
- Restore authentic TTI DESIGN SYSTEM identity, title, lede, actions, and iconic maroon TTI UX banner with roadway lines
- Restore Visual Identity at-a-glance section with tokens, live TuxBadge, TuxAlert, and corner-drop preview
- Add Interactive Component Showcase featuring live 3D Roadway Visualizer, Interactive Particle Canvas, and UI primitives
- Maintain Recent Updates feed, Application Examples, Foundations, and Multi-Framework codegen pipeline
- Pass all 6 tiers of institutional quality and accessibility test gates (100% WCAG 2.2 AAA, 0 undefined tokens, 0 axe violations)
- Replace transparent/blurred header with solid, crisp, non-transparent institutional navbar
- Stage authentic TTI DESIGN SYSTEM split hero within cinematic TuxHeroCanvas with ambient warm radial glow and constellation particle physics
- Elevate right panel into TTI UX Monument Card with live Level AAA contrast indicator
- Add full 8-family Component Arsenal taxonomy (189 units) proving enterprise-grade design system scope
- Retain Visual Identity at-a-glance, Interactive Component Showcase, Application Examples, Foundations, and Multi-Framework pipeline
- Pass all 6 tiers of institutional quality and accessibility test gates (100% WCAG 2.2 AAA, 0 undefined tokens, 0 axe violations)
- Integrate <TuxPlayground> across visualization catalog pages (histogram, sunburst, geographic, sparkline, donut, gauge, heatmap, bar, line, scatter, area, frame, metro-inset, embed)
- Add live telemetry dataset switchers for transportation metrics (travel times, control delays, spot speeds, crash severities, CAV sensor trees, and corridor TTI matrices)
- Wire Power BI PBIR fragments (:powerbi) with chart-cartesian and card-chrome fragments
- Enable full multi-framework syntax tabs (Vue, React, Web Component, Blazor, Python, Swift, Kotlin, HTML, Source)
- Update /visualizations catalog parity index with expanded fragment coverage
- Transform /kits into interactive Workflow Kits & Application Suites Hub
  - Add interactive live viewport simulator (Desktop, Laptop, Tablet, Mobile)
  - Add 10 institutional application suite presets with category metadata
  - Add Architecture & Slots inspector, component composition graphs, and doctrine rules
  - Add copyable starter scaffolding in Nuxt 4 SFC and React 19 TSX
  - Add legacy frozen reference mapping table and prototype viewer
  - Add multi-platform kit distribution targets breakdown
- Upgrade /examples compositions gallery
  - Add archetype filter categories (Ops, Marcom, Intranet, Academic, Shells)
  - Add instant real-time search input for titles, blurbs, and components
  - Add component count badges, archetype tags, and direct kit simulation links
  - Add institutional Application Archetypes architecture guide
- Polish /preview standalone specimen gallery
  - Add category filter tabs and real-time specimen search
- Eliminate 2px header overflow at lg (1024px) breakpoint in app.vue with tuned nav padding and gap
- Make /components card grid responsive with xl:grid-cols-3 and flex-wrap on ecosystem targets footer
- Make TuxSectionHeader two-tone-rule text wrap smoothly on narrow mobile screens
- Allow action buttons and quality distribution header in /components/health to wrap on mobile
- Add flex-wrap to live markdown editor controls toolbar in /components/markdown-editor
- Add min-w-0 and max-w-full containment to TuxExample and TuxPlayground containers and code viewers
- Create dedicated /docs Hub at app/pages/docs/index.vue with multi-platform SDK matrix across 8 target stacks, instant search filter, core system guides, and ADR catalog
- Pare down verbose filler and 26 redundant property cards in app/pages/install/react.vue to a compact categorized matrix linked to live Component Lab demos, resolving 221px mobile overflow
- Streamline app/pages/install/wordpress.vue from 774 lines of verbose copy into a concise 4-tab integration reference with horizontally scrolling mobile tabs, resolving 62px mobile overflow
- Fix app/app.vue localBreadcrumbPrefixes to prevent duplicate breadcrumbs on /docs
- Verify 24/24 responsive viewport permutations pass with 0px overflow across 375px, 768px, and 1024px
- Maintain 764/764 passing unit tests and 0 token audit errors
- Normalize localBreadcrumbPrefixes in app/app.vue to prevent duplicate shell breadcrumbs
- Fix dummy internal routes in breadcrumbs component workbench to eliminate 404 crawler warnings
- Achieve 0 axe-core violations across all 253 prerendered pages in audit:a11y
Merge remote-tracking branch 'forgejo/main' into status-palette
Some checks failed
scan / trivy-fs (push) Failing after 1m20s
baseline-security / baseline (push) Failing after 1m29s
ai-review / review (pull_request) Successful in 1m27s
scan / trivy-fs (pull_request) Failing after 1m2s
baseline-security / baseline (pull_request) Failing after 1m24s
c2acccbad8

🔧 Security-gate fix map

The gate failed on these dependency findings — fastest path to green for each:

finding package installed → fixed do this
CVE-2026-63671 (HIGH) @nuxtjs/mdc 0.21.1 → 0.22.1 merge #59 — fix(security): @nuxtjs/mdc ^0.22.2 (CVE-2026-63671) — hold f
CVE-2026-102276 (HIGH) brace-expansion 5.0.9 → 5.0.10, 3.0.7, 2.1.5, 1.1.19 merge #62 — chore(deps): update dependency brace-expansion to v5.0.12 [s
CVE-2026-102278 (HIGH) brace-expansion 5.0.9 → 5.0.11, 3.0.8, 2.1.6, 1.1.20 merge #62 — chore(deps): update dependency brace-expansion to v5.0.12 [s
CVE-2026-93687 (HIGH) braces 3.0.3 → ? no fix PR yet — npm update braces --package-lock-only
CVE-2026-92708 (HIGH) devalue 5.8.2 → 5.9.3 no fix PR yet — npm update devalue --package-lock-only
GHSA-mcm9-63f2-9j32 (HIGH) devalue 5.8.2 → 5.9.3 no fix PR yet — npm update devalue --package-lock-only
GHSA-r9w8-h9r3-54w4 (HIGH) devalue 5.8.2 → 5.9.3 no fix PR yet — npm update devalue --package-lock-only
GHSA-x5rw-q4pp-hg5g (HIGH) devalue 5.8.2 → 5.9.3 no fix PR yet — npm update devalue --package-lock-only
CVE-2026-84375 (HIGH) js-yaml 4.3.1 → 4.3.2, 3.15.2 no fix PR yet — npm update js-yaml --package-lock-only
CVE-2026-85393 (HIGH) node-forge 1.4.0 → ? no fix PR yet — npm update node-forge --package-lock-only
GHSA-rgj7-g3m4-5g8c (HIGH) sharp 0.35.3 → 0.35.4 no fix PR yet — npm update sharp --package-lock-only
CVE-2026-84370 (HIGH) svgo 4.0.2 → 2.8.4, 3.3.5, 4.1.0 no fix PR yet — npm update svgo --package-lock-only
CVE-2026-19534 (HIGH) undici 8.10.0 → 6.28.1, 7.29.1, 8.10.2 no fix PR yet — npm update undici --package-lock-only
CVE-2026-84961 (HIGH) undici 8.10.0 → 7.29.1, 8.10.2 no fix PR yet — npm update undici --package-lock-only
CVE-2026-85152 (HIGH) undici 8.10.0 → 8.10.2 no fix PR yet — npm update undici --package-lock-only

⚠ main is itself red right now — this PR likely inherits the backlog rather than adding it. Fixing main (rows above) unblocks every open PR at once.

Posted once per head commit by the baseline gate (M2). A Renovate PR that only touches a manifest with no lockfile change is a broken pre-2026-08-06 artifact — check its diff before merging.

### 🔧 Security-gate fix map <!-- tti-fixmap:c2acccbad8c7154b80cda9409136bf9bfbfbed8c --> The gate failed on these dependency findings — fastest path to green for each: | finding | package | installed → fixed | do this | |---|---|---|---| | CVE-2026-63671 (HIGH) | `@nuxtjs/mdc` | 0.21.1 → 0.22.1 | merge #59 — fix(security): @nuxtjs/mdc ^0.22.2 (CVE-2026-63671) — hold f | | CVE-2026-102276 (HIGH) | `brace-expansion` | 5.0.9 → 5.0.10, 3.0.7, 2.1.5, 1.1.19 | merge #62 — chore(deps): update dependency brace-expansion to v5.0.12 [s | | CVE-2026-102278 (HIGH) | `brace-expansion` | 5.0.9 → 5.0.11, 3.0.8, 2.1.6, 1.1.20 | merge #62 — chore(deps): update dependency brace-expansion to v5.0.12 [s | | CVE-2026-93687 (HIGH) | `braces` | 3.0.3 → ? | no fix PR yet — `npm update braces --package-lock-only` | | CVE-2026-92708 (HIGH) | `devalue` | 5.8.2 → 5.9.3 | no fix PR yet — `npm update devalue --package-lock-only` | | GHSA-mcm9-63f2-9j32 (HIGH) | `devalue` | 5.8.2 → 5.9.3 | no fix PR yet — `npm update devalue --package-lock-only` | | GHSA-r9w8-h9r3-54w4 (HIGH) | `devalue` | 5.8.2 → 5.9.3 | no fix PR yet — `npm update devalue --package-lock-only` | | GHSA-x5rw-q4pp-hg5g (HIGH) | `devalue` | 5.8.2 → 5.9.3 | no fix PR yet — `npm update devalue --package-lock-only` | | CVE-2026-84375 (HIGH) | `js-yaml` | 4.3.1 → 4.3.2, 3.15.2 | no fix PR yet — `npm update js-yaml --package-lock-only` | | CVE-2026-85393 (HIGH) | `node-forge` | 1.4.0 → ? | no fix PR yet — `npm update node-forge --package-lock-only` | | GHSA-rgj7-g3m4-5g8c (HIGH) | `sharp` | 0.35.3 → 0.35.4 | no fix PR yet — `npm update sharp --package-lock-only` | | CVE-2026-84370 (HIGH) | `svgo` | 4.0.2 → 2.8.4, 3.3.5, 4.1.0 | no fix PR yet — `npm update svgo --package-lock-only` | | CVE-2026-19534 (HIGH) | `undici` | 8.10.0 → 6.28.1, 7.29.1, 8.10.2 | no fix PR yet — `npm update undici --package-lock-only` | | CVE-2026-84961 (HIGH) | `undici` | 8.10.0 → 7.29.1, 8.10.2 | no fix PR yet — `npm update undici --package-lock-only` | | CVE-2026-85152 (HIGH) | `undici` | 8.10.0 → 8.10.2 | no fix PR yet — `npm update undici --package-lock-only` | > ⚠ `main` is itself red right now — this PR likely **inherits** the backlog rather than adding it. Fixing `main` (rows above) unblocks every open PR at once. <sub>Posted once per head commit by the baseline gate (M2). A Renovate PR that only touches a manifest with no lockfile change is a broken pre-2026-08-06 artifact — check its diff before merging.</sub>
ai-review-bot left a comment

AI review · advisory

Verdict: 7 things worth fixing (1 high · 4 medium · 2 low) — 8 confirmed, near-duplicates merged.

Findings that didn't map to a diff line:

tokens.css:20 · HIGH — Spectrum token values in :root don't match CHANGELOG or COMM_HANDOVER.md
The actual spectrum tokens defined in tokens.css for the light theme use different hex values (#701D35, #566A8A, etc.) than the ones documented in CHANGELOG.md (#500000, #005480, etc.) and COMM_HANDOVER.md, creating a discrepancy between documentation and implementation

Fix: Align all documentation and implementation by either updating tokens.css to match the intended brand colors or updating CHANGELOG.md and COMM_HANDOVER.md to match the actual tokens.css values

⚑ panel: Muse Glimmer 30B · Gemma 4 31B · Mistral Medium 3.5 128B · Laguna S 2.1 — 11 distinct, 8 confirmed, 1 below threshold, 2 refuted · web: not used · context: 9 files under review · 89 codebase · 5 standards chunks (best-grounded: Muse Glimmer 30B; smaller windows saw less)

Panel debate — how this review was reached

Grounding — context: 9 files under review · 89 codebase · 5 standards chunks (best-grounded: Muse Glimmer 30B; smaller windows saw less)

Round 1 — independent reviews

  • Muse Glimmer 30B (2 findings, confidence 0.78 · thought 4.0k + wrote 792 of 32.8k tokens · 68 s): The release adds handover docs and UI chrome but ships spectrum token values that do not match the documented Comm brand palette, and the heading accent is now gated behind .style--bold, breaking defa
  • Gemma 4 31B (1 finding, confidence 0.95 · thought 7.0k + wrote 546 of 16.0k tokens · 206 s): The PR introduces a major release (v3.0.0) with significant shell overhauls and brand alignment. The overall implementation is highly sophisticated, featuring a robust version simulation system and de
  • Mistral Medium 3.5 128B (4 findings, confidence 0.92 · wrote 921 of 16.0k tokens · 85 s): Found 4 cross-cutting inconsistencies between documentation and implementation of spectrum tokens. CHANGELOG references hex values (#500000 blue) that don't match tokens.css (#566A8A) and are missing
  • Laguna S 2.1 (4 findings, confidence 0.86 · wrote 938 of 65.5k tokens · 533 s over 2 attempts): The PR delivers a strong v3.0.0 release with comprehensive branding and tokens, but two medium issues need fixing before ship: package.json (and packages/react/package.json) are still at 2.2.0, causin

Round 2 — cross-examination

  • Muse Glimmer 30B#1 Spectrum token values diverge from documented 5-band brand · confirmed: Gemma 4 31B, Mistral Medium 3.5 128B, Laguna S 2.1 · refuted: — · support 3
  • Mistral Medium 3.5 128B#4 Spectrum token values in :root don't match CHANGELOG or COMM_HANDOVER.md · confirmed: Muse Glimmer 30B, Gemma 4 31B, Laguna S 2.1 · refuted: — · support 3
  • Gemma 4 31B#1 Missing Tailwind mapping for brand wash tokens · confirmed: Muse Glimmer 30B, Mistral Medium 3.5 128B, Laguna S 2.1 · refuted: — · support 3
  • Mistral Medium 3.5 128B#3 Missing Tailwind @theme entries for new spectrum tokens · confirmed: — · refuted: Muse Glimmer 30B, Gemma 4 31B, Laguna S 2.1 · support 0
  • Laguna S 2.1#1 package.json version not bumped for v3.0.0 release · confirmed: Muse Glimmer 30B, Gemma 4 31B, Mistral Medium 3.5 128B · refuted: — · support 3
  • Laguna S 2.1#2 Duplicate .style--bold .heading--bold::after rule conflicts with globals.css · confirmed: Muse Glimmer 30B, Gemma 4 31B · refuted: Mistral Medium 3.5 128B · support 2
  • Muse Glimmer 30B#2 heading--bold accent rule now opt-in only, breaking existing editorial headings · confirmed: Gemma 4 31B, Laguna S 2.1 · refuted: Mistral Medium 3.5 128B · support 2
  • Laguna S 2.1#3 Unreachable /contrast-audit breadcrumb branch · confirmed: Muse Glimmer 30B, Gemma 4 31B, Mistral Medium 3.5 128B · refuted: — · support 3
  • Mistral Medium 3.5 128B#1 Inconsistent color format in CHANGELOG · confirmed: — · refuted: Muse Glimmer 30B, Gemma 4 31B, Laguna S 2.1 · support 0
  • Mistral Medium 3.5 128B#2 Inconsistent component count · confirmed: — · refuted: Gemma 4 31B, Laguna S 2.1 · support 0
  • Laguna S 2.1#4 Incorrect token file path in handover document · confirmed: Muse Glimmer 30B, Gemma 4 31B, Mistral Medium 3.5 128B · refuted: — · support 3

Not posted (support < 2, or contested at a severity where one refutation vetoes)

  • Mistral Medium 3.5 128B#2 Inconsistent component count (support 0)

Raised but refuted (left out of the review above)

  • Mistral Medium 3.5 128B#3 Missing Tailwind @theme entries for new spectrum tokens — The PR adds --color-spectrum-maroon, --color-spectrum-blue, --color-spectrum-teal, --color-spectrum-green and --color-spectrum-gold to the @theme bloc
  • Mistral Medium 3.5 128B#1 Inconsistent color format in CHANGELOG — CHANGELOG lists the 5-band spectrum once with #500000, #005480, #006F79, #285C4D, #CFA935. There is no second, conflicting hex for the same token insi

Synthesis — Laguna S 2.1 wrote the final review from 8 confirmed findings (+1 below threshold) · promotion: support ≥ 2, and no refutation at high severity.

Transcript rv-20261005235357-9baf22 — full round outputs, web results, and model reasoning are viewable by anyone with access to this repository via the AI gateway.

Advisory — never a merge gate. Findings are ordered by how well the panel's own evidence checks out, strongest first. React 👍/👎 on any inline comment to tell it whether it was worth flagging — that is the only feedback this system gets, and every threshold in it is tuned from those reactions. Transcript rv-20261005235357-9baf22.

### AI review · advisory <!-- tti-rv:rv-20261005235357-9baf22: --> **Verdict: 7 things worth fixing** (1 high · 4 medium · 2 low) — 8 confirmed, near-duplicates merged. Findings that didn't map to a diff line: **` tokens.css:20`** · HIGH — Spectrum token values in :root don't match CHANGELOG or COMM_HANDOVER.md The actual spectrum tokens defined in tokens.css for the light theme use different hex values (#701D35, #566A8A, etc.) than the ones documented in CHANGELOG.md (#500000, #005480, etc.) and COMM_HANDOVER.md, creating a discrepancy between documentation and implementation > **Fix:** Align all documentation and implementation by either updating tokens.css to match the intended brand colors or updating CHANGELOG.md and COMM_HANDOVER.md to match the actual tokens.css values <sub>⚑ panel: Muse Glimmer 30B · Gemma 4 31B · Mistral Medium 3.5 128B · Laguna S 2.1 — 11 distinct, 8 confirmed, 1 below threshold, 2 refuted · web: not used · context: 9 files under review · 89 codebase · 5 standards chunks (best-grounded: Muse Glimmer 30B; smaller windows saw less)</sub> <details> <summary>Panel debate — how this review was reached</summary> **Grounding** — context: 9 files under review · 89 codebase · 5 standards chunks (best-grounded: Muse Glimmer 30B; smaller windows saw less) **Round 1 — independent reviews** - **Muse Glimmer 30B** (2 findings, confidence 0.78 · thought 4.0k + wrote 792 of 32.8k tokens · 68 s): The release adds handover docs and UI chrome but ships spectrum token values that do not match the documented Comm brand palette, and the heading accent is now gated behind .style--bold, breaking defa - **Gemma 4 31B** (1 finding, confidence 0.95 · thought 7.0k + wrote 546 of 16.0k tokens · 206 s): The PR introduces a major release (v3.0.0) with significant shell overhauls and brand alignment. The overall implementation is highly sophisticated, featuring a robust version simulation system and de - **Mistral Medium 3.5 128B** (4 findings, confidence 0.92 · wrote 921 of 16.0k tokens · 85 s): Found 4 cross-cutting inconsistencies between documentation and implementation of spectrum tokens. CHANGELOG references hex values (#500000 blue) that don't match tokens.css (#566A8A) and are missing - **Laguna S 2.1** (4 findings, confidence 0.86 · wrote 938 of 65.5k tokens · 533 s over 2 attempts): The PR delivers a strong v3.0.0 release with comprehensive branding and tokens, but two medium issues need fixing before ship: package.json (and packages/react/package.json) are still at 2.2.0, causin **Round 2 — cross-examination** - `Muse Glimmer 30B#1` Spectrum token values diverge from documented 5-band brand · confirmed: Gemma 4 31B, Mistral Medium 3.5 128B, Laguna S 2.1 · refuted: — · support 3 - `Mistral Medium 3.5 128B#4` Spectrum token values in :root don't match CHANGELOG or COMM_HANDOVER.md · confirmed: Muse Glimmer 30B, Gemma 4 31B, Laguna S 2.1 · refuted: — · support 3 - `Gemma 4 31B#1` Missing Tailwind mapping for brand wash tokens · confirmed: Muse Glimmer 30B, Mistral Medium 3.5 128B, Laguna S 2.1 · refuted: — · support 3 - `Mistral Medium 3.5 128B#3` Missing Tailwind @theme entries for new spectrum tokens · confirmed: — · refuted: Muse Glimmer 30B, Gemma 4 31B, Laguna S 2.1 · support 0 - `Laguna S 2.1#1` package.json version not bumped for v3.0.0 release · confirmed: Muse Glimmer 30B, Gemma 4 31B, Mistral Medium 3.5 128B · refuted: — · support 3 - `Laguna S 2.1#2` Duplicate .style--bold .heading--bold::after rule conflicts with globals.css · confirmed: Muse Glimmer 30B, Gemma 4 31B · refuted: Mistral Medium 3.5 128B · support 2 - `Muse Glimmer 30B#2` heading--bold accent rule now opt-in only, breaking existing editorial headings · confirmed: Gemma 4 31B, Laguna S 2.1 · refuted: Mistral Medium 3.5 128B · support 2 - `Laguna S 2.1#3` Unreachable /contrast-audit breadcrumb branch · confirmed: Muse Glimmer 30B, Gemma 4 31B, Mistral Medium 3.5 128B · refuted: — · support 3 - `Mistral Medium 3.5 128B#1` Inconsistent color format in CHANGELOG · confirmed: — · refuted: Muse Glimmer 30B, Gemma 4 31B, Laguna S 2.1 · support 0 - `Mistral Medium 3.5 128B#2` Inconsistent component count · confirmed: — · refuted: Gemma 4 31B, Laguna S 2.1 · support 0 - `Laguna S 2.1#4` Incorrect token file path in handover document · confirmed: Muse Glimmer 30B, Gemma 4 31B, Mistral Medium 3.5 128B · refuted: — · support 3 **Not posted** (support < 2, or contested at a severity where one refutation vetoes) - `Mistral Medium 3.5 128B#2` Inconsistent component count (support 0) **Raised but refuted** (left out of the review above) - `Mistral Medium 3.5 128B#3` Missing Tailwind @theme entries for new spectrum tokens — The PR adds --color-spectrum-maroon, --color-spectrum-blue, --color-spectrum-teal, --color-spectrum-green and --color-spectrum-gold to the @theme bloc - `Mistral Medium 3.5 128B#1` Inconsistent color format in CHANGELOG — CHANGELOG lists the 5-band spectrum once with #500000, #005480, #006F79, #285C4D, #CFA935. There is no second, conflicting hex for the same token insi **Synthesis** — Laguna S 2.1 wrote the final review from 8 confirmed findings (+1 below threshold) · promotion: support ≥ 2, and no refutation at high severity. <sub>Transcript `rv-20261005235357-9baf22` — full round outputs, web results, and model reasoning are viewable by anyone with access to this repository via the AI gateway.</sub> </details> <sub>Advisory — never a merge gate. Findings are ordered by how well the panel's own evidence checks out, strongest first. React 👍/👎 on any inline comment to tell it whether it was worth flagging — that is the only feedback this system gets, and every threshold in it is tuned from those reactions. Transcript `rv-20261005235357-9baf22`.</sub>
@ -0,0 +27,4 @@
## 2. The 3 Primary Consumption Vectors for Comm
### Vector A: WordPress & Kadence Websites
Member

COMM_HANDOVER.md:30 · LOW — Incorrect token file path in handover document
COMM_HANDOVER.md states 'tokens.json in repository root' but the canonical token source is design/tokens.json (confirmed by README.md, design/roadmap.md, design/tux.md, and kit/README.md). A Comm team member following this reference would not find the file at the repository root.

Fix: Change the reference from 'tokens.json in repository root' to 'design/tokens.json'.

Evidence: partly verified — two or more reviewers, quote or anchor verified (panel 4/4).
👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.

**`COMM_HANDOVER.md:30`** · LOW — Incorrect token file path in handover document COMM_HANDOVER.md states 'tokens.json in repository root' but the canonical token source is design/tokens.json (confirmed by README.md, design/roadmap.md, design/tux.md, and kit/README.md). A Comm team member following this reference would not find the file at the repository root. > **Fix:** Change the reference from 'tokens.json in repository root' to 'design/tokens.json'. <sub>Evidence: **partly verified** — two or more reviewers, quote or anchor verified (panel 4/4).<br>👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.</sub> <!-- tti-rv:rv-20261005235357-9baf22:Laguna S 2.1#4 -->
@ -98,0 +552,4 @@
children: [
{ label: "Document Verification", to: "/admin", icon: "lucide:shield-check" },
{ label: "Review Cadence", to: "/admin", icon: "lucide:calendar-clock" },
{ label: "Reader Issues Triage", to: "/admin", icon: "lucide:life-buoy" },
Member

app/app.vue:555 · MEDIUM — package.json version not bumped for v3.0.0 release
The release PR advertises v3.0.0 (CHANGELOG, README) but package.json still declares "version": "2.2.0". The new onMounted handler reads pkg.version to set the default data-tux-version attribute and version switcher state, so the default visual era defaults to v2.2.0 instead of v3.0.0 — affecting button geometry, header ribbon, and the archive banner logic.

Fix: Bump version in package.json (and packages/react/package.json) from "2.2.0" to "3.0.0" before cutting the release tag.

Evidence: partly verified — two or more reviewers, quote or anchor verified (panel 4/4).
👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.

**`app/app.vue:555`** · MEDIUM — package.json version not bumped for v3.0.0 release The release PR advertises v3.0.0 (CHANGELOG, README) but package.json still declares "version": "2.2.0". The new onMounted handler reads pkg.version to set the default data-tux-version attribute and version switcher state, so the default visual era defaults to v2.2.0 instead of v3.0.0 — affecting button geometry, header ribbon, and the archive banner logic. > **Fix:** Bump version in package.json (and packages/react/package.json) from "2.2.0" to "3.0.0" before cutting the release tag. <sub>Evidence: **partly verified** — two or more reviewers, quote or anchor verified (panel 4/4).<br>👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.</sub> <!-- tti-rv:rv-20261005235357-9baf22:Laguna S 2.1#1 -->
@ -37,0 +309,4 @@
}
const crumbs: Crumb[] = [{ label: "Home", to: "/" }];
Member

app/app.vue:312 · LOW — Unreachable /contrast-audit breadcrumb branch
The if (p === '/contrast-audit') check sits inside the if (p.startsWith('/tokens') || p.startsWith('/design/')) block, but /contrast-audit matches neither prefix, so the branch is dead code. The breadcrumb falls through to the generic handler, producing "Contrast Audit" instead of the intended "Contrast Audit (WCAG AAA)".

Fix: Add /contrast-audit to the outer path condition so the inner check becomes reachable: if (p.startsWith("/tokens") || p.startsWith("/design/") || p === "/contrast-audit") {

Proposed replacement (one-click ⚡ Apply on the findings board at the top of this PR):

  if (p.startsWith("/tokens") || p.startsWith("/design/") || p === "/contrast-audit") {

Evidence: partly verified — two or more reviewers, quote or anchor verified (panel 4/4).
👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.

**`app/app.vue:312`** · LOW — Unreachable /contrast-audit breadcrumb branch The `if (p === '/contrast-audit')` check sits inside the `if (p.startsWith('/tokens') || p.startsWith('/design/'))` block, but /contrast-audit matches neither prefix, so the branch is dead code. The breadcrumb falls through to the generic handler, producing "Contrast Audit" instead of the intended "Contrast Audit (WCAG AAA)". > **Fix:** Add /contrast-audit to the outer path condition so the inner check becomes reachable: `if (p.startsWith("/tokens") || p.startsWith("/design/") || p === "/contrast-audit") {` **Proposed replacement** (one-click ⚡ Apply on the findings board at the top of this PR): ``` if (p.startsWith("/tokens") || p.startsWith("/design/") || p === "/contrast-audit") { ``` <sub>Evidence: **partly verified** — two or more reviewers, quote or anchor verified (panel 4/4).<br>👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.</sub> <!-- tti-rv:rv-20261005235357-9baf22:Laguna S 2.1#3 -->
@ -329,0 +1051,4 @@
<span
class="w-1.5 h-1.5 rounded-full shrink-0"
:class="selectedVersion === `v${pkgVersion}` ? 'bg-status-ok' : 'bg-status-warning animate-pulse'"
/>
Member

app/app.vue:1054 · MEDIUM — Missing Tailwind mapping for brand wash tokens
The Tailwind utility class bg-wash-brand-12 used in the version switcher will not resolve because the --wash-brand-* tokens are not mapped in the @theme block of globals.css.

Fix: Add the brand wash tokens to the @theme block in app/assets/css/globals.css using the --color- prefix.

Proposed replacement (one-click ⚡ Apply on the findings board at the top of this PR):

  --color-wash-brand-4: var(--wash-brand-4);
  --color-wash-brand-6: var(--wash-brand-6);
  --color-wash-brand-8: var(--wash-brand-8);
  --color-wash-brand-12: var(--wash-brand-12);
  --color-wash-brand-18: var(--wash-brand-18);
  --color-wash-brand-22: var(--wash-brand-22);
  --color-wash-brand-35: var(--wash-brand-35);

Evidence: partly verified — two or more reviewers, quote or anchor verified (panel 4/4).
👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.

**`app/app.vue:1054`** · MEDIUM — Missing Tailwind mapping for brand wash tokens The Tailwind utility class `bg-wash-brand-12` used in the version switcher will not resolve because the `--wash-brand-*` tokens are not mapped in the `@theme` block of `globals.css`. > **Fix:** Add the brand wash tokens to the `@theme` block in `app/assets/css/globals.css` using the `--color-` prefix. **Proposed replacement** (one-click ⚡ Apply on the findings board at the top of this PR): ``` --color-wash-brand-4: var(--wash-brand-4); --color-wash-brand-6: var(--wash-brand-6); --color-wash-brand-8: var(--wash-brand-8); --color-wash-brand-12: var(--wash-brand-12); --color-wash-brand-18: var(--wash-brand-18); --color-wash-brand-22: var(--wash-brand-22); --color-wash-brand-35: var(--wash-brand-35); ``` <sub>Evidence: **partly verified** — two or more reviewers, quote or anchor verified (panel 4/4).<br>👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.</sub> <!-- tti-rv:rv-20261005235357-9baf22:Gemma 4 31B#1 -->
@ -133,3 +143,3 @@
padding-bottom: 0.5rem;
padding-bottom: 0.625rem;
}
Member

app/assets/css/globals.css:145 · MEDIUM — heading--bold accent rule now opt-in only, breaking existing editorial headings
The .heading--bold::after accent rule was moved to .style--bold .heading--bold::after and .heading--bold-roadway::after. Pages that use .heading--bold without a .style--bold ancestor lose the Warm Gold roadway rule entirely, changing visual language for the default style.

Fix: Restore the default editorial accent for .heading--bold while keeping the roadway variant opt-in; keep the rule on .heading--bold itself.

Proposed replacement (one-click ⚡ Apply on the findings board at the top of this PR):

.heading--bold::after {
  content: "";
  display: block;
  width: 64px;
  height: 7px;
  margin-top: 0.625rem;
  background-image:
    linear-gradient(var(--brand-accent), var(--brand-accent)),
    repeating-linear-gradient(to right, var(--brand-accent) 0px, var(--brand-accent) 8px, transparent 8px, transparent 14px);
  background-size: 100% 2px, 100% 2px;
  background-position: 0 0, 0 5px;
  background-repeat: no-repeat, no-repeat;
}

Evidence: partly verified — two or more reviewers, quote or anchor verified (panel 3/4).
👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.

**`app/assets/css/globals.css:145`** · MEDIUM — heading--bold accent rule now opt-in only, breaking existing editorial headings The .heading--bold::after accent rule was moved to .style--bold .heading--bold::after and .heading--bold-roadway::after. Pages that use .heading--bold without a .style--bold ancestor lose the Warm Gold roadway rule entirely, changing visual language for the default style. > **Fix:** Restore the default editorial accent for .heading--bold while keeping the roadway variant opt-in; keep the rule on .heading--bold itself. **Proposed replacement** (one-click ⚡ Apply on the findings board at the top of this PR): ``` .heading--bold::after { content: ""; display: block; width: 64px; height: 7px; margin-top: 0.625rem; background-image: linear-gradient(var(--brand-accent), var(--brand-accent)), repeating-linear-gradient(to right, var(--brand-accent) 0px, var(--brand-accent) 8px, transparent 8px, transparent 14px); background-size: 100% 2px, 100% 2px; background-position: 0 0, 0 5px; background-repeat: no-repeat, no-repeat; } ``` <sub>Evidence: **partly verified** — two or more reviewers, quote or anchor verified (panel 3/4).<br>👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.</sub> <!-- tti-rv:rv-20261005235357-9baf22:Muse Glimmer 30B#2 -->
@ -19,6 +19,11 @@
--tti-teal: #4A8892;
--tti-sage: #66814F;
--tti-charcoal: #221F1F;
Member

app/assets/css/tokens.css:21 · HIGH — Spectrum token values diverge from documented 5-band brand
The generated token file defines the 5-band spectrum colors with hex values that do not match the values documented in CHANGELOG.md and COMM_HANDOVER.md for TUX 3.0, making the shipped UI brand-inconsistent and breaking the Comm rebrand contract.

Fix: Regenerate tokens.css from design/tokens.json so the 5-band spectrum variables match the ratified Comm brand values #500000 / #005480 / #006F79 / #285C4D / #CFA935.

Proposed replacement (one-click ⚡ Apply on the findings board at the top of this PR):

  --spectrum-maroon: #500000;
  --spectrum-blue: #005480;
  --spectrum-teal: #006F79;
  --spectrum-green: #285C4D;
  --spectrum-gold: #CFA935;

Evidence: strong evidence — two or more reviewers, quote verified against the diff, anchored on a changed line (panel 4/4).
👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.

**`app/assets/css/tokens.css:21`** · HIGH — Spectrum token values diverge from documented 5-band brand The generated token file defines the 5-band spectrum colors with hex values that do not match the values documented in CHANGELOG.md and COMM_HANDOVER.md for TUX 3.0, making the shipped UI brand-inconsistent and breaking the Comm rebrand contract. > **Fix:** Regenerate tokens.css from design/tokens.json so the 5-band spectrum variables match the ratified Comm brand values #500000 / #005480 / #006F79 / #285C4D / #CFA935. **Proposed replacement** (one-click ⚡ Apply on the findings board at the top of this PR): ``` --spectrum-maroon: #500000; --spectrum-blue: #005480; --spectrum-teal: #006F79; --spectrum-green: #285C4D; --spectrum-gold: #CFA935; ``` <sub>Evidence: **strong evidence** — two or more reviewers, quote verified against the diff, anchored on a changed line (panel 4/4).<br>👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.</sub> <!-- tti-rv:rv-20261005235357-9baf22:Muse Glimmer 30B#1 -->
@ -358,3 +362,4 @@
padding-bottom: 0.625rem;
margin: 0;
}
Member

app/assets/css/tux.css:365 · MEDIUM — Duplicate .style--bold .heading--bold::after rule conflicts with globals.css
Both tux.css and globals.css define ::after for .style--bold .heading--bold with different patterns (dot-grid radial gradient in tux.css vs roadway solid+dashed pattern in globals.css). Same selector and specificity — whichever file loads later wins, making one pattern unreachable and creating inconsistent heading decoration depending on CSS load order.

Fix: Remove the .style--bold .heading--bold::after rule block from tux.css since globals.css now owns this selector with the roadway pattern.

Evidence: corroborated, evidence not machine-checked — two or more reviewers, neither the quote nor the anchor could be checked (panel 3/4).
👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.

**`app/assets/css/tux.css:365`** · MEDIUM — Duplicate .style--bold .heading--bold::after rule conflicts with globals.css Both tux.css and globals.css define ::after for .style--bold .heading--bold with different patterns (dot-grid radial gradient in tux.css vs roadway solid+dashed pattern in globals.css). Same selector and specificity — whichever file loads later wins, making one pattern unreachable and creating inconsistent heading decoration depending on CSS load order. > **Fix:** Remove the .style--bold .heading--bold::after rule block from tux.css since globals.css now owns this selector with the roadway pattern. <sub>Evidence: **corroborated, evidence not machine-checked** — two or more reviewers, neither the quote nor the anchor could be checked (panel 3/4).<br>👍 if this was worth flagging · 👎 if it was not — a reaction on this comment is the whole feedback loop.</sub> <!-- tti-rv:rv-20261005235357-9baf22:Laguna S 2.1#2 -->
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
tti/tti-ux!65
No description provided.