v1.8.0 + v1.9.0 — estate tokens, kit distribution + the chart-engineering minor #17
No reviewers
Labels
No labels
idea
points
1
points
13
points
2
points
3
points
5
points
8
priority
p0
priority
p1
priority
p2
priority
p3
state
blocked
state
done
state
in-progress
state
ready
state
review
state
triage
status
declined
status
in-progress
status
planned
status
proposed
status
shipped
status
under-review
type
bug
type
epic
type
feature
type
spike
type
story
type
task
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
tti/tti-ux!17
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/v1.8.0-tokens-typography"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This branch carries TWO releases: the v1.8.0 slice (estate tokens, TuxStatusToast, theme hardening, kit distribution, tux-audit bin — frozen 2026-07-30) and today's v1.9.0 chart-engineering minor.
v1.9.0 (2026-08-12)
One audit-driven day, ten commits.
Payload — TuxChartGeographic per-kind async split: 348KB eager geo becomes 12–163KB per kind (geo data modules split byte-identical; build-geo.mjs emits the new layout).
Chart internals — shared scale/hover/tone modules (tuxChartScale, useTuxChartHover) + one palette file replace four drifted copies (two tick algorithms, a first-tick-dropping ceil, clamp-vs-wrap tones, four margin conventions) under 39 behavior-lock tests; ~135 pasted palette declarations collapse to tux-chart-palette.css, colors verified computed-identical per surface.
Interaction contract — treemap cells become real keyboard buttons (focus tooltip, Enter drill, Backspace up); donut + sunburst gain the full tooltip contract; scatter swaps 500 per-point tab stops for a roving cursor. components.md doctrine updated.
Testing — first mounted component tests in the repo: vitest.config.ts + @nuxt/test-utils nuxt environment; 66 tests total.
Deps (owner-decided) — @vueuse/* + @tanstack/vue-table dropped; tux-owned useTuxPersistedRef + useTuxClipboard; @tanstack/vue-virtual now backs TuxRichDataGrid's opt-in virtualized mode (17–25 rendered rows while scrolling 5,000, live-measured).
Focus rings — ten divergent recipes removed; the universal two-ring system owns focus, with the two sanctioned exceptions documented.
Fix wave — tux-audit a11y gate (jsdom, not puppeteer), Math.random() ids → useId(), radial-chart SSR float mismatches (2dp rounding), TuxExample formatter depth-leak/RangeError that was corrupting hydration on heavy pages.
Gates run locally: lint · typecheck · 66/66 tests · token audit · axe (targeted, 0 violations) · contrast AAA (all pairs pass).
Tags after merge: v1.8.0 → its bump commit (
c48c44c), v1.9.0 → the merge; v1.7.1 backfilled (34b29f2). Consumers pin tags.AI review · advisory
Verdict: 7 things worth fixing (4 high · 1 medium · 2 low).
app/components/TuxSiteNav.vue:108· HIGH — Missing import for onBeforeUnmountThe component uses
onBeforeUnmountwithout importing it, causing a runtime error when the component tries to clean up resources.app/composables/useTuxToast.ts:39· HIGH — Missing imports for Nuxt composables and platform helperThe file uses
useStateanduseTuxPlatformwithout importing them, leading to undefined errors when the composable runs.app/components/TuxAvatar.vue:31· HIGH — Missing Vue composition API importsThe component uses
computed,ref, andwatchwithout importing them, resulting in a runtime error.app/components/TuxStatusToast.vue:23· HIGH — Missing import for useTuxToast composableThe component calls
useTuxToast()without importing it, causing an undefined function error.app/composables/useTuxToast.ts:60· MEDIUM — Potential memory leak with window.setTimeoutThe
showfunction creates timeouts to dismiss toasts but does not clear them if the component unmounts orclear()is called, risking memory leaks or errors.app/components/TuxAvatar.vue:56· LOW — Unsafe array access in initials derivationThe code uses
p[0]!which will throw an error if a name contains an empty string or whitespace that bypasses the filter.app/composables/useTuxToast.ts:1· LOW — Missing type safety for Tauri notificationThe Tauri notification escalation lacks type safety, which could lead to runtime errors if the imported module does not match expected types.
⚑ panel: GPT-OSS 120B · Gemma 4 31B · Devstral 2 123B — 12 raised, 7 confirmed, 3 refuted · web: not used · context: 3 files · 6 codebase · 4 standards chunks
Panel debate — how this review was reached
Grounding — context: 3 files · 6 codebase · 4 standards chunks
Round 1 — independent reviews
Round 2 — cross-examination
GPT-OSS 120B#1Missing import for onBeforeUnmount · confirmed: Gemma 4 31B, Devstral 2 123B · refuted: —GPT-OSS 120B#2Missing imports for Nuxt composables and platform helper · confirmed: Devstral 2 123B · refuted: Gemma 4 31BGPT-OSS 120B#3Missing Vue composition API imports · confirmed: Devstral 2 123B · refuted: Gemma 4 31BGPT-OSS 120B#4Missing import for useTuxToast composable · confirmed: Devstral 2 123B · refuted: Gemma 4 31BGPT-OSS 120B#5Missing import for withDefaults macro (optional but recommended) · confirmed: — · refuted: Gemma 4 31B, Devstral 2 123BGemma 4 31B#1Potential Memory Leak with window.setTimeout · confirmed: Devstral 2 123B · refuted: —Gemma 4 31B#2Unsafe Array Access in Initials Derivation · confirmed: Devstral 2 123B · refuted: GPT-OSS 120BDevstral 2 123B#1Missing unit test gate in CI · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#2Inconsistent comment style · confirmed: — · refuted: Gemma 4 31BDevstral 2 123B#3Missing accessibility attributes · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#4Missing error handling for Tauri notification · confirmed: — · refuted: Gemma 4 31BDevstral 2 123B#5Missing type safety for Tauri notification · confirmed: GPT-OSS 120B · refuted: Gemma 4 31BRaised but refuted (left out of the review above)
GPT-OSS 120B#5Missing import for withDefaults macro (optional but recommended) —withDefaultsanddefinePropsare compiler macros in Vue<script setup>and specifically should not be imported.Devstral 2 123B#1Missing unit test gate in CI — The workflow runsnpm testas a step withoutcontinue-on-error. If the tests fail, the step (and thus the job) fails, already acting as a gate inDevstral 2 123B#3Missing accessibility attributes —TuxAvataralready setsaria-hidden,role, andaria-label(when not decorative). These are the core accessibility attributes required for the eSynthesis — Devstral 2 123B wrote the final review from 7 confirmed findings (+2 unconfirmed).
Transcript
rv-20260730202040-66d858— full round outputs, web results, and model reasoning are viewable by anyone with access to this repository via the AI gateway.Full transcript: http://host.containers.internal:3939/-/ai/v1/review/rv-20260730202040-66d858
Three superPOD models reviewed this independently and cross-examined each other; only what survived is shown. Advisory — never a merge gate.
feat(v1.8.0): estate tokens + TuxStatusToast + theme hardening + kit distribution + tux-auditto v1.8.0 + v1.9.0 — estate tokens, kit distribution + the chart-engineering minorAI review · advisory
Verdict: 5 things worth fixing (2 medium · 3 low).
Findings that didn't map to a diff line:
app/assets/css/globals.css:68· LOW — Potential missing newline in .nuxtrc may cause parser warningsThe newly added .nuxtrc file ends without a newline character, which can trigger warnings in strict parsers or CI tools.
⚑ panel: GPT-OSS 120B · Gemma 4 31B · Devstral 2 123B · Laguna S 2.1 — 5 distinct, 5 confirmed, 0 refuted · web: not used · context: 9 files · 90 codebase · 14 standards chunks (best-grounded: Laguna S 2.1; smaller windows saw less)
Panel debate — how this review was reached
Grounding — context: 9 files · 90 codebase · 14 standards chunks (best-grounded: Laguna S 2.1; smaller windows saw less)
Round 1 — independent reviews
Round 2 — cross-examination
GPT-OSS 120B#1Outdated version pin instructions · confirmed: Devstral 2 123B · refuted: —Gemma 4 31B#1Overly broad typography selector may cause regressions in third-party components · confirmed: GPT-OSS 120B · refuted: —GPT-OSS 120B#3Comment does not reflect updated heading style · confirmed: Devstral 2 123B · refuted: —GPT-OSS 120B#2Stale comment about warning colour · confirmed: Devstral 2 123B · refuted: —GPT-OSS 120B#4Potential missing newline in .nuxtrc may cause parser warnings · confirmed: Devstral 2 123B · refuted: —Synthesis — Devstral 2 123B wrote the final review from 5 confirmed findings.
Transcript
rv-20260812203837-6b47fb— 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. Disagree with a finding? Reply on it, or use the finding board under this review. Transcript
rv-20260812203837-6b47fb.@ -16,2 +16,3 @@**Current release:** v1.4.2 · WCAG 2.2 AA conformance · color contrast**Current release:** see [`CHANGELOG.md`](CHANGELOG.md) — consumers pin agit tag (never a branch) · WCAG 2.2 AA conformance · color contrastverified at AAA across all three themes (light, dark, high-contrast) ·README.md:18· MEDIUM — Outdated version pin instructionsThe README instructs users to pin the package to v1.4.2, but the current release is v1.7.0. This can lead to confusion or outdated dependencies.
panel tally 2/4 · reply here or use the finding board to agree/disagree
@ -10,0 +9,4 @@* green. `warning` is backed by the TTI gold ramp (#DDAC37 anchor,* --color-gold-*) — owner-ratified 2026-07-30, replacing the amber* stand-in. Landscape's local warning→gold override becomes redundant at* its next pin-bump.app/app.config.ts:12· LOW — Stale comment about warning colourThe comment states that
warninguses the amber palette, but the code now maps it to the gold palette.Proposed replacement (one-click ⚡ Apply on the findings board at the top of this PR):
panel tally 2/4 · reply here or use the finding board to agree/disagree
@ -30,3 +32,4 @@font-weight: 700;text-transform: uppercase;letter-spacing: -0.01em;line-height: 1.1;app/assets/css/tux.css:35· LOW — Comment does not reflect updated heading styleThe comment describes
.heading--displayas "italic," but the implementation no longer uses italic styling.Proposed replacement (one-click ⚡ Apply on the findings board at the top of this PR):
panel tally 2/4 · reply here or use the finding board to agree/disagree
@ -655,3 +674,32 @@color-mix(in srgb, var(--brand-primary) 6%, transparent) 12pxapp/assets/css/tux.css:674· MEDIUM — Overly broad typography selector may cause regressions in third-party componentsApplying
font-family: var(--font-bold)to all buttons, inputs, and form elements globally can override intended styles in third-party components or accessibility-focused UI elements.Proposed replacement (one-click ⚡ Apply on the findings board at the top of this PR):
panel tally 2/4 · reply here or use the finding board to agree/disagree