Skip to content

feat(makie): implement venn-labeled-items#9505

Merged
MarkusNeusinger merged 6 commits into
mainfrom
implementation/venn-labeled-items/makie
Jun 25, 2026
Merged

feat(makie): implement venn-labeled-items#9505
MarkusNeusinger merged 6 commits into
mainfrom
implementation/venn-labeled-items/makie

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Implementation: venn-labeled-items - julia/makie

Implements the julia/makie version of venn-labeled-items.

File: plots/venn-labeled-items/implementations/julia/makie.jl

Parent Issue: #5364


🤖 impl-generate workflow

@claude

claude Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

AI Review - Attempt 1/3

Image Description

Light render (plot-light.png): Three-circle Venn diagram on a warm off-white #FAF8F1 background. The top circle is green ("Goes Viral"), bottom-left is lavender ("Actually Works"), bottom-right is blue ("Still Around in 5 Years"). All three circles have semi-transparent fills (~18% alpha) with coloured outlines. Category labels are rendered outside each circle in their respective circle colours (green, lavender, blue). Item labels inside zones use the dark INK token (#1A1A17): A-only zone has NFTs/Metaverse/Clubhouse; B-only has PostgreSQL/Nginx/Bash; C-only has Email/Excel/PDF; AB has ChatGPT/Figma; AC has Agile/The Cloud; BC has Git/Docker; ABC centre has JavaScript. Outside items Google+ and Vine appear at the bottom with a muted "— already gone —" separator in grey. Title "Tech Taxonomy · venn-labeled-items · julia · makie · anyplot.ai" is visible in dark ink at the top. All text is readable against the light background. Layout note: there is ~20% empty whitespace below the separator at the bottom of the canvas.

Dark render (plot-dark.png): Same layout on a warm near-black #1A1A17 background. The three circle fill colours and outline colours are identical to the light render — green (#009E73), lavender (#C475FD), blue (#4467A3) — confirming Imprint data colours are theme-invariant. Item labels inside the circles render in the light INK token (#F0EFE8) providing strong contrast on the dark fills. Category labels ("Goes Viral", "Actually Works", "Still Around in 5 Years") retain their circle-matching colours and are clearly readable on the dark background. The "— already gone —" separator uses the dark-theme INK_MUTED (#A8A79F), subtly readable. Title text is light-coloured and fully legible. No dark-on-dark failures detected. The same bottom whitespace excess is present in the dark render.

Both paragraphs are required. A review that only describes one render is invalid.

Score: 85/100

Category Score Max
Visual Quality 28 30
Design Excellence 11 20
Spec Compliance 15 15
Data Quality 15 15
Code Quality 10 10
Library Mastery 6 10
Total 85 100

Visual Quality (28/30)

  • VQ-01: Text Legibility (7/8) — All font sizes explicitly set (titlesize=20, category 18, items 13, separator 11); readable in both themes. Item labels at fontsize=13 (26px effective on 2400px) are slightly on the small side for mobile-scaled views; bump to 14–15 for better legibility at ~400px viewport.
  • VQ-02: No Overlap (6/6) — No text collisions; items stacked cleanly within each zone.
  • VQ-03: Element Visibility (6/6) — All circles, labels, and text elements clearly visible in both themes.
  • VQ-04: Color Accessibility (2/2) — Imprint palette (green/lavender/blue), CVD-safe; item labels use high-contrast INK token.
  • VQ-05: Layout & Canvas (3/4) — Square canvas 2400×2400 correct for symmetric Venn; circles fill ~65% of vertical canvas, but the bottom ~20% below the outside items is largely empty, creating unbalanced margins.
  • VQ-06: Axis Labels & Title (2/2) — No axis labels needed (correct); descriptive title with editorial prefix.
  • VQ-07: Palette Compliance (2/2) — First circle (#009E73 brand green) correct; canonical Imprint order (lavender, blue) for circles 2–3; backgrounds #FAF8F1 / #1A1A17 correct; data colours identical across themes.

Design Excellence (11/20)

  • DE-01: Aesthetic Sophistication (5/8) — Above a bare default: editorial category names, colour-matched circle labels, and clean semi-transparent fills convey intentional design. Falls short of publication-quality: no serif editorial font, no subtitle, item labels have no visual hierarchy.
  • DE-02: Visual Refinement (3/6) — Spines fully removed, no grid (appropriate for Venn), generous whitespace. Semi-transparent fills are a deliberate refinement. Not minimal-chrome at library-default level, but no further polishing of typography or spacing.
  • DE-03: Data Storytelling (3/6) — The taxonomy narrative is cohesive (NFTs/Metaverse/Clubhouse as hype-only; JavaScript in ABC centre; "already gone" outside zone). However, all 18 item labels render at identical size and colour — no visual emphasis guides the reader to the most insightful intersections (ABC or BC). Visual hierarchy through size/colour contrast would elevate this.

Spec Compliance (15/15)

  • SC-01: Plot Type (5/5) — Correct three-circle symmetric Venn with labeled items in each zone.
  • SC-02: Required Features (4/4) — All 7 interior zones + outside populated; semi-transparent fills; category labels outside circles; outside zone with separator.
  • SC-03: Data Mapping (3/3) — Items correctly assigned to their declared zones; symmetric layout with clear overlaps.
  • SC-04: Title & Legend (3/3) — Title format: {Descriptive Title} · {spec-id} · julia · makie · anyplot.ai ✓. No legend needed.

Data Quality (15/15)

  • DQ-01: Feature Coverage (6/6) — All 7 zones + outside used; 18 items (within 10–25 spec range); all zone types represented.
  • DQ-02: Realistic Context (5/5) — Real, neutral tech trends and tools; editorial "Tech Taxonomy" theme matches spec's Chartgeist style. Neutral, no controversial content.
  • DQ-03: Appropriate Scale (4/4) — Circle sizes and overlap proportions geometrically correct; item distribution across zones is balanced.

Code Quality (10/10)

  • CQ-01: KISS Structure (3/3) — Constants → data → figure → save; no unnecessary functions (circle_poly is a minimal helper).
  • CQ-02: Reproducibility (2/2) — Random.seed!(42) set.
  • CQ-03: Clean Imports (2/2) — Only CairoMakie, Colors, Random; all used.
  • CQ-04: Code Elegance (2/2) — Clean idiomatic loop over items; named constants for geometry; no fake UI elements.
  • CQ-05: Output & API (1/1) — save("plot-$(THEME).png", fig; px_per_unit = 2) ✓.

Library Mastery (6/10)

  • LM-01: Idiomatic Usage (4/5) — poly! for polygon circles, DataAspect() for correct geometry, hidexdecorations!/hideydecorations!/hidespines!, text! with alignment options — all idiomatic CairoMakie patterns.
  • LM-02: Distinctive Features (2/5) — poly! + DataAspect() for circle geometry is a Makie-distinctive approach. Does not leverage more advanced Makie features (Theme customisation, Observables, or layout utilities).

Score Caps Applied

  • None applied.

Strengths

  • Perfect spec compliance: all 7 Venn zones + outside populated with coherent, witty tech-taxonomy items matching the editorial Chartgeist brief.
  • Correct full theme adaptation — INK, INK_SOFT, INK_MUTED tokens thread through title, item labels, and separator in both renders with no dark-on-dark failures.
  • Correct Imprint palette (#009E73 → #C475FD → #4467A3) in canonical order for the three circles; semi-transparent fills with distinct strokes create clear circle identity.
  • Idiomatic CairoMakie: poly! + DataAspect() for geometrically correct circles; clean hidexdecorations!/hidespines! usage.
  • Excellent code quality: clean KISS structure, named geometry constants, no abstraction overhead.

Weaknesses

  • Bottom whitespace excessive (~20% of canvas below outside items empty) — tighten ylims or shift the circle group down to balance top/bottom margins; try ylims!(ax, -0.05f0, 1.05f0).
  • Item labels have no visual hierarchy — all 18 items render at identical size and colour (INK), missing the opportunity to emphasise multi-circle overlaps. Consider slightly larger fontsize (14–15) for ABC/overlap zone items, or a subtle colour tint.
  • No subtitle — spec explicitly mentions "optional witty title/subtitle in a serif editorial font"; adding a one-line editorial subtitle (e.g. via a second text! call below the title) would significantly lift the magazine aesthetic and DE score.
  • Item label fontsize=13 (26px effective on 2400×2400) is on the small side for mobile readability; bump to 14–15.

Issues Found

  1. VQ-05 MINOR / DE-02 MINOR: ~20% of canvas empty below the "— already gone —" separator. Tighten ylims!(ax, -0.05f0, 1.05f0) or shift the circle geometry down slightly so the diagram is vertically centred.
  2. DE-01 / DE-03: No visual hierarchy among item labels — all render at the same fontsize and colour. Making ABC-zone and overlap-zone labels slightly more prominent (fontsize 15, or slightly bolder colour) would guide the reader toward the most editorially interesting intersections.
  3. DE-01: No subtitle despite spec suggestion. A brief editorial subtitle in a second text! call at INK_MUTED fontsize=12 would add the magazine-print feel the spec calls for.

AI Feedback for Next Attempt

Improve design excellence: (1) tighten ylims to -0.05f0, 1.05f0 to eliminate the bottom whitespace and centre the diagram; (2) add a short editorial subtitle (e.g., text!(ax, 0.50f0, 0.99f0; text = "Where tech lives, works, and refuses to die", color = INK_MUTED, align = (:center, :top), fontsize = 12)); (3) give ABC-zone and multi-overlap items a slightly larger fontsize (15) to create visual hierarchy that guides the reader; (4) bump single-zone item labels to fontsize=14 for better mobile readability.

Verdict: REJECTED

@github-actions github-actions Bot added quality:85 Quality score 85/100 ai-rejected Quality not OK, triggers update labels Jun 25, 2026
@github-actions github-actions Bot added ai-attempt-1 First repair attempt and removed ai-rejected Quality not OK, triggers update labels Jun 25, 2026
Attempt 1/3 - fixes based on AI review
@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

@github-actions

Copy link
Copy Markdown
Contributor Author

🔧 AI Review Produced No Score — Auto-Retrying

The Claude Code Action ran but didn't write quality_score.txt. Auto-retrying review once...


🤖 impl-review

@claude

claude Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

AI Review - Attempt 2/3

Image Description

Light render (plot-light.png): Warm off-white background (#FAF8F1). Title "Tech Taxonomy · venn-labeled-items · julia · makie · anyplot.ai" in dark INK, clearly readable. Subtitle "Going viral is easy. Actually working is hard. Surviving is rarer still." in muted INK_SOFT tone. Three overlapping circles: green (#009E73, top "Goes Viral"), lavender (#C475FD, bottom-left "Actually Works"), blue (#4467A3, bottom-right "Still Around in 5 Years") with semi-transparent fills showing overlap regions. Item labels in dark INK across all 7 zones (NFTs/Metaverse/Clubhouse in viral-only; PostgreSQL/Nginx/Bash in works-only; Email/Excel/PDF in still-around-only; ChatGPT/Figma in viral+works; Agile/The Cloud in viral+still; Git/Docker in works+still; JavaScript in center triple-overlap); outside items Google+/Vine in muted color with "— already gone —" separator. Minor crowding between "Actually Works" category label and "PostgreSQL" item at left; "Still Around in 5 Years" label close to right canvas edge but no clipping. All text clearly readable against light background. Legibility verdict: PASS.

Dark render (plot-dark.png): Warm near-black background (#1A1A17). Title in light INK (#F0EFE8), clearly readable. Subtitle visible in lighter muted tone. Item labels render in light INK throughout all zones including overlapping regions — no dark-on-dark failure observed. Category labels remain in their respective Imprint colors (green/lavender/blue), clearly visible against the dark surface. Data colors are identical to the light render — only background and chrome flipped. No "dark-on-dark" failure anywhere. All text readable. Legibility verdict: PASS.

Both paragraphs are required. A review that only describes one render is invalid.

Score: 85/100

Category Score Max
Visual Quality 26 30
Design Excellence 13 20
Spec Compliance 15 15
Data Quality 15 15
Code Quality 10 10
Library Mastery 6 10
Total 85 100

Visual Quality (26/30)

  • VQ-01: Text Legibility (6/8) — Font sizes explicitly set (titlesize=20, category=18, items=13–16, subtitle=12); all text readable in both themes; subtitle at 12pt is marginal for mobile scaling
  • VQ-02: No Overlap (5/6) — Minor crowding between "Actually Works" category label and "PostgreSQL" item at left side; no outright collision but spacing is tighter than ideal
  • VQ-03: Element Visibility (6/6) — All three circles clearly visible with strokewidth=2.5 outlines; semi-transparent fills reveal overlap regions; all 18 item labels distinguishable
  • VQ-04: Color Accessibility (2/2) — Three distinct Imprint hues (green/lavender/blue) with good separation; no red-green sole-signal use
  • VQ-05: Layout & Canvas (3/4) — Square 2400×2400 correct for symmetric Venn; good centering; "Still Around in 5 Years" label sits close to right canvas boundary with minimal breathing room
  • VQ-06: Axis Labels & Title (2/2) — Title in correct format with descriptive prefix; no traditional axis labels (appropriate for Venn)
  • VQ-07: Palette Compliance (2/2) — First circle = #009E73 (brand green); circles 2–3 use Imprint positions 2 and 3 in canonical order; PAGE_BG correct for both themes; data colors theme-invariant

Design Excellence (13/20)

  • DE-01: Aesthetic Sophistication (5/8) — Editorial "Tech Taxonomy" framing and witty subtitle; visual hierarchy via font-size-by-overlap-level is a thoughtful design choice; above generic defaults but short of full sophistication
  • DE-02: Visual Refinement (4/6) — All spines/ticks/decorations hidden; no grid (correct for Venn); generous whitespace; circles rendered cleanly
  • DE-03: Data Storytelling (4/6) — Items chosen (NFTs/Metaverse/Clubhouse viral-only; Git/Docker survivors; JavaScript in center) tell a coherent tech-longevity story; "— already gone —" separator is a genuine editorial touch

Spec Compliance (15/15)

  • SC-01: Plot Type (5/5) — Three-circle Venn with labeled items in zones; editorial/Chartgeist aesthetic
  • SC-02: Required Features (4/4) — Semi-transparent fills; category names outside circles; item labels in zones; 18 items; outside zone populated; editorial separator
  • SC-03: Data Mapping (3/3) — All 7 interior zones plus outside covered; logical zone assignments throughout
  • SC-04: Title & Legend (3/3) — Title matches {Descriptive Title} · {spec-id} · {language} · {library} · anyplot.ai format

Data Quality (15/15)

  • DQ-01: Feature Coverage (6/6) — All 7 interior zones plus outside; diverse distribution; both pairwise and triple overlaps represented
  • DQ-02: Realistic Context (5/5) — Tech taxonomy relatable and neutral; items are recognizable contemporary tech references
  • DQ-03: Appropriate Scale (4/4) — 18 items within 10–25 spec range; balanced zone distribution

Code Quality (10/10)

  • CQ-01: KISS Structure (3/3) — Single-level script; one necessary helper (circle_poly); no unnecessary abstraction
  • CQ-02: Reproducibility (2/2) — Random.seed!(42) present; all data is deterministic
  • CQ-03: Clean Imports (2/2) — CairoMakie, Colors, Random — all three used
  • CQ-04: Code Elegance (2/2) — Clean item iteration; parametric circle generation; idiomatic color-tuple alpha blending
  • CQ-05: Output & API (1/1) — Saves as plot-$(THEME).png with px_per_unit=2

Library Mastery (6/10)

  • LM-01: Idiomatic Usage (4/5) — poly!, text!, hidespines!, DataAspect(), xlims!/ylims!, theme-adaptive tokens — all idiomatic Makie
  • LM-02: Distinctive Features (2/5) — Uses basic Makie primitives without leveraging distinctively Makie-specific features (Observable system, custom recipes, Legend API); implementation could work in any vector graphics library

Score Caps Applied

  • None

Strengths

  • Perfect spec compliance: all 7 interior Venn zones plus outside populated, 18 items in the 10–25 range, semi-transparent fills, category labels outside each circle, editorial "— already gone —" separator for outside items
  • Full theme-adaptive chrome: INK/INK_SOFT/INK_MUTED/PAGE_BG tokens correctly wired to both renders — no dark-on-dark failure, backgrounds are correct warm off-white and near-black
  • Genuine editorial voice: witty subtitle, font-size scaled by overlap level (single=14, pair=15, triple=16), muted color for outside items, and "Tech Taxonomy" framing echo the Chartgeist magazine aesthetic the spec requested
  • Clean, idiomatic Makie code: KISS structure with one helper function, proper Random.seed!(42), DataAspect() for equal-proportion circles, canonical save pattern

Weaknesses

  • "Actually Works" category label sits close to "PostgreSQL" item label at the left side — nudge the category anchor further left (e.g. CX_B - r*0.85 - 0.05) or add a small y-offset to "PostgreSQL" for breathing room
  • "Still Around in 5 Years" category label on the right is close to the canvas boundary — extend xlims to (-0.15, 1.25) or shift the anchor slightly inward to add a comfortable right margin
  • Subtitle at fontsize=12 is marginal for mobile-scale readability (~4px at 400px thumbnail width) — raise to fontsize=13 or 14
  • LM-02 (Distinctive Features) is limited — leverage Makie-specific features such as the Legend API, custom scatter overlay on circle centers, or Observable-driven layout to demonstrate library distinctiveness

Issues Found

  1. VQ-02 MINOR: "Actually Works" category label crowded against "PostgreSQL" item label
    • Fix: Shift category anchor to CX_B - r*0.85 - 0.05 or add y-offset to nearby items
  2. VQ-05 MINOR: "Still Around in 5 Years" label has minimal right margin
    • Fix: xlims!(ax, -0.15f0, 1.25f0) to widen right whitespace
  3. LM-02 LOW: Only basic Makie primitives used
    • Fix: Use Makie's Legend API for circle swatches, or add scatter! markers at circle centers for visual anchoring

AI Feedback for Next Attempt

The editorial concept and spec compliance are strong — keep the "Tech Taxonomy" framing, font-size hierarchy by overlap level, and the "— already gone —" separator. Focus fixes on: (1) add right-margin breathing room for the "Still Around in 5 Years" label by widening xlims; (2) nudge the "Actually Works" label further left to clear "PostgreSQL"; (3) raise subtitle fontsize from 12 to 14; (4) demonstrate a Makie-distinctive feature — for example, use Legend(fig[2,1], [PolyElement(color=(c, 0.5), strokecolor=c) for c in [col_A, col_B, col_C]], ["Goes Viral", "Actually Works", "Still Around in 5 Years"]) instead of raw text! calls for the category labels.

Verdict: APPROVED

@github-actions github-actions Bot added the ai-approved Quality OK, ready for merge label Jun 25, 2026
@MarkusNeusinger MarkusNeusinger merged commit 626635e into main Jun 25, 2026
@MarkusNeusinger MarkusNeusinger deleted the implementation/venn-labeled-items/makie branch June 25, 2026 12:05
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:85 Quality score 85/100

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant