Skip to content

Releases: Moonweave-Research/figure-agent

figure-agent v0.9.3

Choose a tag to compare

@moonweave moonweave released this 03 Jul 02:09

Summary

  • Release-candidate baseline for the current figure-agent tool workflow.
  • Includes publication/readiness gate hardening, SVG-polish retirement cleanup, status/driver readiness fixes, layout/label gate improvements, and fig1 detector dogfood updates.
  • Adds semantic arrow label-crossing detection coverage used by the fig1 overview repair pass.

Validation

  • claude plugin validate .claude-plugin/plugin.json: passed with existing fig_context_pack.md frontmatter warning.
  • claude plugin validate .: passed with the same warning.
  • claude plugin validate ../../.claude-plugin/marketplace.json: passed.
  • uv run ruff check .: passed.
  • uv run pytest -q -m "not render": 2601 passed, 26 skipped, 37 deselected, 5 xfailed.

No binary or figure artifact assets are attached to this release.

figure-agent v0.9.2

Choose a tag to compare

@moonweave moonweave released this 01 Jun 15:17

Patch release for the first Issue 100 hardening wave after v0.9.1.

Added:

  • Final warning-budget visibility in release mode, so high-confidence detector warning debt remains visible before human roll-forward decisions.
  • Optional inspection_trace.yaml validation and critique-lint surfacing for reviewed crops, commands, verdicts, and outstanding doubts.
  • critique_adjudication.py sync --preview, which shows the decision diff before mutating adjudication state.
  • SVG polish positive-route recipe templates via svg_polish_recipe.py --template --write-template, producing a hash-bound starter file for conservative polish edits.

Guardrails:

  • The new evidence and template surfaces are review aids only. They do not execute SVG edits, force golden, set accepted state, bypass release gates, or convert optional-improvement findings into blocking release decisions.

Verification:

  • uv run pytest -q: 1666 passed, 1 skipped, 1 xfailed, 10 warnings
  • uv run ruff check .: passed
  • git diff --check: passed
  • claude plugin validate plugin manifest, plugin directory, and marketplace: passed

figure-agent v0.8.1

Choose a tag to compare

@moonweave moonweave released this 28 May 08:27
82bafba

Summary

  • Ships Issue 63 reference-learning and non-model aesthetic audit signals after v0.8.0.
  • Adds opt-in reference-learning contracts, deterministic reference-aesthetic metrics, status/loop/critique surfacing, loop-basin detection, and v1.13 crop anomaly accountability.
  • Keeps reference metrics as suspicion/routing signals only; they do not bypass human, golden, accepted, publication, or SVG-polish gates.

Verification

  • uv lock --check
  • uv run pytest -q: 1371 passed, 1 skipped, 1 xfailed
  • uv run ruff check .
  • git diff --check
  • claude plugin validate .claude-plugin/plugin.json
  • claude plugin validate .
  • claude plugin validate ../../.claude-plugin/marketplace.json
  • GitHub PR #71 test check passed

Guardrails

  • No provider API calls.
  • No hidden auto-patching.
  • No accepted/golden mutation.
  • No source drawing or SVG polish editing work.

figure-agent v0.8.0

Choose a tag to compare

@moonweave moonweave released this 28 May 05:25

Release-hardening pass for the v0.8 audit kernel after Issues 57-61.

Highlights

  • Real-fixture audit adoption matrix for explicit text-boundary, label-path, reference, aesthetic, paper-wide, and journal-playbook coverage.
  • Shared single next-action summary across status, driver, loop, and closeout surfaces.
  • SVG polish promotion dogfood evidence showing the route stays blocked behind stale critique gates until source-level evidence is fresh.
  • Journal style-pack catalog with opt-in Nature Communications, Nature Materials, Science, and graphical-abstract playbook/context packs.
  • Optional external vision review evidence import for local second-opinion reviews without provider API calls.

Guardrails

  • figure-agent remains a quality/audit kernel, not a hidden auto-designer.
  • This release does not claim automatic Nature/Science acceptance.
  • External vision review is opt-in evidence only; conflicts route to human judgment.
  • SVG polish remains bounded finalization/handoff, not semantic repair or hidden source mutation.

Verification

Latest main at 39d21e0 passed:

  • figure-agent tests
  • figure-agent full render tests

Local release-hardening verification before merge passed:

  • uv run pytest -q -> 1337 passed, 3 skipped, 1 xfailed
  • uv run ruff check .
  • git diff --check
  • claude plugin validate .claude-plugin/plugin.json
  • claude plugin validate .
  • claude plugin validate ../../.claude-plugin/marketplace.json

figure-agent v0.6.0

Choose a tag to compare

@moonweave moonweave released this 25 May 06:24

Summary

  • Adds aesthetic intent schema v2 with explicit aesthetic lever grammar.
  • Adds critique v1.11 aesthetic_lever_audit and fixture-aware lint accountability.
  • Surfaces aesthetic lever bottlenecks through /fig_loop and protects driver/polish routing from bypassing human/export gates.
  • Includes real fixture dogfood evidence for fig1_overview_v2_pair_001_vault.

Verification

  • uv lock --check
  • uv run pytest -q -> 1143 passed, 1 skipped, 1 xfailed
  • uv run ruff check . -> passed
  • git diff --check -> clean
  • claude plugin validate .claude-plugin/plugin.json -> passed
  • claude plugin validate . -> passed
  • claude plugin validate ../../.claude-plugin/marketplace.json -> passed

Notes

  • uv build is not a release gate for this source-only Claude plugin.
  • This release strengthens audit and handoff contracts; it does not add autonomous illustration or SVG auto-editing.

figure-agent v0.1.7.2

Choose a tag to compare

@moonweave moonweave released this 29 Apr 11:01

Cleanup release closing the v0.1.6-era pending bugfix.

CHANGELOG v0.1.6 flagged a stray no-extension file that "occasionally appears in exports/" after a /fig_export pass, with the suspected root cause being svg_to_png.sh passing a no-suffix output to rsvg-convert. Reproduction confirmed: both rsvg-convert and pdftocairo -svg write to the exact path given, so a caller (LLM following /fig_export, hand-typed shell) that drops .png or .svg silently produces a stray file the user has to rm manually.

Fixed

  • scripts/svg_to_png.sh: reject output paths that do not end with .png with a clear stderr message.
  • scripts/export_svg.sh: same defense for .svg outputs.
  • tests/test_export_svg.py (new) and an additional case in tests/test_svg_to_png.py lock the suffix guards against regression.

Verified

  • 110 pytest pass (108 → 110), ruff clean.
  • Live export sanity (proper-suffix paths still work end-to-end on smoke_trap_demo).

figure-agent v0.1.7.1

Choose a tag to compare

@moonweave moonweave released this 29 Apr 10:48

Hardening release driven by the 4-agent mid-review of v0.1.7 before its first remote push.

Findings: non-string YAML scalars crashed the strip with TypeError, all-HTML-comment input silently fell back without a warning, the fallback string was prose an LLM might mis-read, and the priority-order paragraph was placed after the user-supplied content.

Fixed

  • scripts/llm_author_prompt.py _coerce_selection_notes helper: warns to stderr (naming the example dir and encountered type) and coerces to str when selection_notes is non-string (int, list, dict, bare YAML date such as 2026-04-29).
  • scripts/llm_author_prompt.py: warn to stderr when selection_notes is non-empty before HTML-comment stripping but reduces to empty afterward.
  • scripts/llm_author_prompt.py: shorten the missing-key fallback from prose "(none — only preview filename selected)" to "(none)" for parity with selected_preview and the briefing _section_body (empty) sentinel.

Changed

  • prompts/llm_author_tikz.md: priority-order paragraph is now placed before the {{selection_notes}} placeholder so the LLM absorbs the precedence rule before reading user content.
  • prompts/llm_author_tikz.md: priority paragraph extended to cover the extension pattern (selection notes adding visual detail consistent with §6) — the dogfood fig3_trap_schematic_v97/spec.yaml shows this is the real common pattern, not contradiction.

Tests

  • Three regression tests in tests/test_llm_author_prompt.py: non-string coercion, empty-after-strip warning, priority paragraph survival.

108 pytest pass (105 → 108), ruff clean.

See CHANGELOG.md for the v0.1.7 entry that introduced selection_notes plumbing, and docs/roadmap-v0.1.7-selection-notes.md for the full audit-driven design rationale.

figure-agent v0.1.7

Choose a tag to compare

@moonweave moonweave released this 29 Apr 10:48

v0.1.7 plumbed the previously-orphan spec.yaml.selection_notes field into the LLM TikZ authoring prompt.

This release was hardened pre-publish: see v0.1.7.1 for the agent-team mid-review fixes that landed before the first remote push.

Added

  • prompts/llm_author_tikz.md ### Selection notes section with priority order text directing the LLM to honor briefing.md §6 invariants over selection notes.
  • commands/fig_preview_select.md step 6: recommended 4-heading template (Visual motifs to preserve / Preview errors to fix in TikZ / Labels to lift / Style overrides). Free-form remains accepted; HTML-comment author-only notes are stripped.
  • commands/fig_new.md scaffolds spec.yaml with an empty selection_notes: "" key.
  • docs/design-v0.1.md per-figure folder contract lists selection_notes as a recognized spec.yaml key.
  • docs/roadmap-v0.1.7-selection-notes.md records the audit-driven rationale for plumbing this orphan field instead of adding a /fig_decompose slash command.
  • tests/test_llm_author_prompt.py four new tests: plumbing, HTML strip, fallback, backslash safety.
  • examples/fig3_trap_schematic_v97/ activated as tracked dogfood demonstrating the 4-heading convention.

Changed

  • scripts/llm_author_prompt.py reads spec.yaml.selection_notes, strips HTML comments using inputs._HTML_COMMENT (parity with parse_briefing), and substitutes the result into {{selection_notes}} with a fallback when the field is missing or whitespace-only.

105 pytest pass, ruff clean.

figure-agent v0.1.6

Choose a tag to compare

@moonweave moonweave released this 29 Apr 10:58

Retroactive release — commit 1225ab0 was bumped to v0.1.6 on 2026-04-29 but the tag was never pushed at the time. Tagged after the fact for traceability.

Added

  • scripts/lint_tex.py — BLOCKER-tier Style Lock check (\definecolor, font override, raw hex, non-palette TikZ colors). Integrated into /fig_compile as pre-compile gate.
  • /fig_status <name> — read-only stage inference from filesystem + spec.yaml.
  • lint_tex.py WARN tier: flagship_macros_unused and thin_stroke.
  • prompts/llm_author_tikz.md — parameterised LLM TikZ authoring prompt template.
  • scripts/llm_author_prompt.py — CLI and build_prompt() helper.
  • styles/polymer-paper-preamble.sty% \IsoBlock{w}{d}{h}{color}{hook} signature comment.

Fixed

  • lint_tex.py plugged three Style Lock bypasses (positional colors in option blocks, brace-enclosed values, escape-sequence consumption in comment stripping).
  • lint_tex.py parse_palette returns an empty set when polymer-paper-preamble.sty is missing.
  • /fig_status freshness source set matches /fig_review; adds stale_export and selected_preview_missing notes; no longer crashes when previews is a file.

Changed

  • All six command docs end with a single-line Next: footer.
  • SKILL.md trimmed (145→84 lines).
  • Violation NamedTuple gains severity field.

See CHANGELOG.md for full v0.1.6 entry.

figure-agent v0.1.5

Choose a tag to compare

@moonweave moonweave released this 28 Apr 14:10

[0.1.5] - 2026-04-28

Fixed

  • Force white background in PNG raster export so figures without explicit
    panel-background fills render correctly in PNG viewers that treat transparency
    as black.