Skip to content

feat(muix): implement icicle-basic - #12365

Merged
MarkusNeusinger merged 6 commits into
mainfrom
implementation/icicle-basic/muix
Oct 24, 2026
Merged

MarkusNeusinger merged 6 commits into
mainfrom
implementation/icicle-basic/muix

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Implementation: icicle-basic - javascript/muix

Implements the javascript/muix version of icicle-basic.

File: plots/icicle-basic/implementations/javascript/muix.tsx

Generation: adopted from 5b2bcb3e5e4dc5b3685a669c07cf3ab1b9918f69 (5b2bcb3) by gemini-4-argon; the model below runs repair

Model: opus

Parent Issue: #2497

Regeneration: previous quality 86 (forced: adopted from 5b2bcb3, fresh-generation review path)


🤖 impl-generate workflow

Adopted from 5b2bcb3 (5b2bcb3), written by gemini-4-argon outside the pipeline.
@github-actions github-actions Bot added the regen:forced Regeneration of an implementation that is live on main label Oct 24, 2026
@github-actions github-actions Bot added the watchdog:review-bootstrap Watchdog bootstrapped initial review label Oct 24, 2026
@claude

claude Bot commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

AI Review - Attempt 1/3

Image Description

Light render (plot-light.png): Warm off-white #FAF8F1 surface. Title "icicle-basic · javascript · muix · anyplot.ai" top-left in dark ink with a mono subtitle "4 levels · 25 leaves · 2,100 KB total · width ∝ Size (KB)"; top-right legend with swatches for node_modules/ (950 KB), src/ (600 KB), tests/ (350 KB), docs/ (200 KB). Four full-width rows: a gray root "repo/ · 2,100 KB total", then the four top-level directories in #009E73, #C475FD, #4467A3, #BD8233, then two rows of progressively lighter tints of each branch hue. Labels (bold name + mono size) appear only where they fit; most leaves are unlabeled narrow rectangles. All text is readable against the light background.

Dark render (plot-dark.png): Same layout on the warm near-black #1A1A17 surface. Title, subtitle and legend flip to light ink and are fully readable; no dark-on-dark text. All fills are identical to the light render; only the page color and the gutters between rectangles changed.

Score: 86/100

Category Score Max
Visual Quality 30 30
Design Excellence 12 20
Spec Compliance 15 15
Data Quality 14 15
Code Quality 9 10
Library Mastery 6 10
Total 86 100

Visual Quality (30/30)

  • VQ-01: Text Legibility (8/8)
  • VQ-02: No Overlap (6/6)
  • VQ-03: Element Visibility (6/6)
  • VQ-04: Color Accessibility (2/2)
  • VQ-05: Layout & Canvas (4/4)
  • VQ-06: Axis Labels & Title (2/2)
  • VQ-07: Palette Compliance (2/2)

Design Excellence (12/20)

  • DE-01: Aesthetic Sophistication (5/8) - bold sans names over mono size sublabels, font size stepping down by depth
  • DE-02: Visual Refinement (4/6) - page-colored gutters, rounded corners, consistent label inset, luminance-picked label ink
  • DE-03: Data Storytelling (3/6) - branch hue + depth tint makes each subtree one color family

Spec Compliance (15/15)

  • SC-01: Plot Type (5/5)
  • SC-02: Required Features (4/4)
  • SC-03: Data Mapping (3/3)
  • SC-04: Title & Legend (3/3)

Data Quality (14/15)

  • DQ-01: Feature Coverage (6/6)
  • DQ-02: Realistic Context (5/5)
  • DQ-03: Appropriate Scale (3/4)

Code Quality (9/10)

  • CQ-01: KISS Structure (3/3)
  • CQ-02: Reproducibility (2/2)
  • CQ-03: Clean Imports (2/2)
  • CQ-04: Code Elegance (1/2)
  • CQ-05: Output & API (1/1)

Library Mastery (6/10)

  • LM-01: Idiomatic Usage (4/5)
  • LM-02: Distinctive Features (2/5) - MUI X composition API (useDrawingArea) to build a chart type the library lacks

Score Caps Applied

  • None

Strengths

  • Clean four-row icicle: root on top, each child partition nested exactly within its parent's width, page-colored gutters separating siblings
  • Branch hue from the Imprint palette in canonical order with lighter tints per depth keeps each subtree one color family in both themes
  • Label ink chosen per fill by luminance, and labels are width-gated so small nodes stay unlabeled as the spec asks
  • Idiomatic MUI X composition: a custom SVG layer inside ChartsContainer driven by useDrawingArea, with native SVG <title> tooltips for the HTML view

Weaknesses

  • DQ-03 (both): node_modules totals 950 KB with typescript/ at 250 KB and react/index.js at 180 KB, implausibly small for these packages (real installs run to tens of MB) → scale the node_modules branch to realistic sizes, e.g. in MB, keeping it the largest branch. Likely cause: the hard-coded VALUE numbers in the node_modules rows (lines 59–72).
  • CQ-04 (code): lines 215–227 write out the WCAG relative-luminance formula (13 lines) → getLuminance(node.fill) (@mui/material/styles), which uses the same 0.03928 / 2.4 transfer. Likely cause: hand-rolled contrast check.
  • Suggestion: use the theme-adaptive muted anchor (#6B6A63 light / #A8A79F dark) for the root instead of the fixed #6E6A61.
  • Suggestion: most leaf rectangles are tall but too narrow for a horizontal label; a vertical label would let more leaves be named.

@github-actions github-actions Bot added quality:86 Quality score 86/100 ai-rejected Quality not OK, triggers update labels Oct 24, 2026
@github-actions github-actions Bot added ai-attempt-1 First repair attempt and removed ai-rejected Quality not OK, triggers update labels Oct 24, 2026
Attempt 1/4 - fixes based on AI review

- DQ-03: replace the node_modules/ branch (implausible KB sizes for real
  packages) with a dist/ build-output branch (js/, assets/, fonts/, css/)
  whose KB sizes are realistic; values and layout unchanged.
- CQ-04: use getLuminance from @mui/material/styles instead of the
  hand-written WCAG relative-luminance formula.

Declined:
- "Suggestion: theme-adaptive muted anchor for the root" — suggestion, not taken
- "Suggestion: vertical labels on narrow leaves" — suggestion, not taken
@github-actions

Copy link
Copy Markdown
Contributor Author

🔧 Repair Attempt 1/4

Applied fixes based on AI review feedback.

Status: Repair completed, re-triggering review...


🤖 impl-repair

@claude

claude Bot commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

AI Review - Attempt 2/3

Image Description

Light render (plot-light.png): On the warm #FAF8F1 surface, the title "icicle-basic · javascript · muix · anyplot.ai" sits top left in dark bold sans, with a monospace subtitle ("4 levels · 25 leaves · 2,100 KB total · width ∝ Size (KB)") below it and a four-swatch legend at top right (dist/ 950 KB, src/ 600 KB, tests/ 350 KB, docs/ 200 KB). The chart has four equal rows. The root "repo/ · 2,100 KB total" is one full-width grey block. Below it are dist/ (#009E73), src/ (#C475FD), tests/ (#4467A3) and docs/ (#BD8233), with widths proportional to their sizes. Next come 11 subdirectories in lighter tints of their branch hue, then 25 files in the lightest tints. Only vendor.js, hero.webp and api.ts are labelled; the other leaves are too narrow. Children sit within their parents, separated by thin page-colored gutters. All text is readable against the light background.

Dark render (plot-dark.png): On the #1A1A17 surface, the title, subtitle and legend text flip to light ink and are clearly readable, with no dark-on-dark text. The gutters turn near-black. Rectangle fills match the light render exactly (sampled pixels are identical), and the label ink inside each rectangle is chosen by the fill's luminance, so it stays readable. Brand green is clearly visible.

Score: 83/100

Category Score Max
Visual Quality 29 30
Design Excellence 10 20
Spec Compliance 15 15
Data Quality 15 15
Code Quality 9 10
Library Mastery 5 10
Total 83 100

Visual Quality (29/30)

  • VQ-01: Text Legibility (8/8)
  • VQ-02: No Overlap (6/6)
  • VQ-03: Element Visibility (6/6)
  • VQ-04: Color Accessibility (2/2)
  • VQ-05: Layout & Canvas (4/4)
  • VQ-06: Axis Labels & Title (2/2) - N/A for axes
  • VQ-07: Palette Compliance (1/2) - custom root hex

Design Excellence (10/20)

  • DE-01: Aesthetic Sophistication (5/8) - two-tier sans/mono label typography with font size stepped by depth
  • DE-02: Visual Refinement (3/6) - depth tints toward the paper tone, consistent label insets
  • DE-03: Data Storytelling (2/6) - color by branch as the Notes ask, no further focal point

Spec Compliance (15/15)

  • SC-01: Plot Type (5/5)
  • SC-02: Required Features (4/4)
  • SC-03: Data Mapping (3/3)
  • SC-04: Title & Legend (3/3)

Data Quality (15/15)

  • DQ-01: Feature Coverage (6/6)
  • DQ-02: Realistic Context (5/5)
  • DQ-03: Appropriate Scale (4/4) - checked dist 950 = 320+280+250+100, src 600, tests 350, docs 200, total 2,100 KB

Code Quality (9/10)

  • CQ-01: KISS Structure (3/3)
  • CQ-02: Reproducibility (2/2)
  • CQ-03: Clean Imports (2/2)
  • CQ-04: Code Elegance (1/2)
  • CQ-05: Output & API (1/1)

Library Mastery (5/10)

  • LM-01: Idiomatic Usage (3/5)
  • LM-02: Distinctive Features (2/5) - custom SVG layer composed through useDrawingArea

Score Caps Applied

  • None

Strengths

  • Correct icicle layout: one row per level with the root at the top, every child within its parent's extent, siblings adjacent with thin gutters; sizes are aggregated bottom-up and add up correctly
  • Color by top-level branch in canonical Imprint order, tinted lighter per depth, so branch and level read at once and identically in both themes
  • Label ink chosen per rectangle from the fill's luminance (MUI getLuminance), so every label is readable in both themes
  • Two-tier label typography (bold sans names over monospace values) with depth-stepped sizes; labels suppressed on rectangles too narrow to hold them
  • ChartsContainer composition with a custom SVG layer positioned by useDrawingArea; native <title> tooltips give path, size and share of parent in the HTML

Weaknesses

  • VQ-07 (both): the root block is filled with the custom hex #6E6A61, which is neither an Imprint position nor the theme-adaptive muted anchor → the muted anchor (#6B6A63 light / #A8A79F dark), with label ink still chosen by luminance. Likely cause: the ROOT_FILL constant.
  • CQ-04 (code): lines 205–214 parse the hex and blend each channel toward the paper by hand, which @mui/material/styles' lighten(color, coefficient) computes in one call → node.fill = lighten(hex, tintFactor). Likely cause: a written-out color blend instead of the MUI color helper already imported alongside getLuminance.
  • Suggestion: 21 of the 25 leaf rectangles carry no label although each is about 235 px tall; a vertical (rotated) name for the tall narrow leaves would identify the files in the static PNG.
  • Suggestion: the root row spends a quarter of the chart height on one grey block; a shorter root row would give the leaf row more room.

@github-actions github-actions Bot added quality:83 Quality score 83/100 ai-approved Quality OK, ready for merge and removed quality:86 Quality score 86/100 labels Oct 24, 2026
@MarkusNeusinger
MarkusNeusinger merged commit bae6fab into main Oct 24, 2026
1 check passed
@MarkusNeusinger
MarkusNeusinger deleted the implementation/icicle-basic/muix branch October 24, 2026 18:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-approved Quality OK, ready for merge ai-attempt-1 First repair attempt quality:83 Quality score 83/100 regen:forced Regeneration of an implementation that is live on main watchdog:review-bootstrap Watchdog bootstrapped initial review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant