Skip to content

v2.3.0 — 10 new plot types & end-to-end auto-merge

Choose a tag to compare

@MarkusNeusinger MarkusNeusinger released this 07 May 20:36
· 3472 commits to main since this release
62c9883

✨ New

  • /map page — force-directed spec map clustered by tag similarity, with a teaser on the landing page (#5647, #5649, #5665).
  • OG images redesigned in the any.plot() visual identity — branded cards with light/dark variants (#5659).
  • Mobile debug: on-device console + richer ErrorBoundary so crashes on phones are inspectable (#5808).
  • Legal page gained an avatar in the operator block (#5726).
  • 10 new plot types × 9 libraries: area-stacked, bar-horizontal, bland-altman-basic, count-basic, ice-basic, radar-multi, scatter-embedding, scatter-regression-polynomial, shap-waterfall, spiral-timeseries.
  • Coverage filled: horizon-basic got seaborn (#5851).

🛠️ Fixes

  • iOS Safari: polyfilled requestIdleCallback so the site loads on iOS (#5816).
  • POTD: GitHub source link now includes the language segment (#5663); letterbox strips around the preview image removed (#5943).
  • Frontend lint: 32 → 0 errors. Five react-hooks/set-state-in-effect violations refactored to React 19's "adjust state on prop change" pattern; Math.random purity issue extracted to a module-level helper (#5818).
  • Analytics safety: fire-and-forget tasks in api/analytics.py could be GC'd mid-flight; now held in a module-level set (#5727).

🏷️ Tag-vocabulary policy

The auto-polish step was stripping valid niche tags (bioinformatics, confidence-interval, ohlc, …) because it treated the recommended-values tables as canonical for every dimension. Vocabulary policy is now asymmetric (#5856, #5859):

  • plot_type is canonical — table is authoritative; new types added via PR.
  • data_type / domain / features are advisory — any well-formed, recognized data-viz term is valid; polish only moves misclassified tags or canonicalizes synonyms.

Tables expanded with legitimate tags surfaced by an audit of all 327 specs.

🔧 Pipeline

  • End-to-end auto-merge: polish PRs and impl PRs squash-merge themselves once green. gh pr merge --auto is set on creation (#5955); auto-update-pr-branches.yml keeps behind branches in sync after every push to main (#5957, #5958).
  • Autonomous spec polish + cross-library similarity audit in daily-regen pre-flight (#5714).
  • Daily-regen defaults to Haiku, gained spec_id and model inputs (#5706).
  • Resumable regen — split into single-step invocations for local-model workflows (#5650).
  • Transient retry hardened across impl-generate / impl-review (#5819, #5725, #5724).
  • evaluate-plot.py switched to the canonical 6-category rubric and bumped claude_model default to claude-sonnet-4-6 (#5818).

🗂️ Repo

  • Plot implementations moved under plots/{spec}/implementations/python/{library}.py (metadata under metadata/python/) to make room for other languages (#5648).
  • 64 Optional[X]X | None modernizations via UP007/UP045 (#5727).

📚 Docs

  • Library expansion roadmap (#5951).
  • Plausible: FCP/TTFB Web-Vitals events documented (#5818).
  • /seo-proxy/map handler so bots get a real <title> for the network map (#5818).

Full Changelog: v2.2.0...v2.3.0