Releases: Moonweave-Research/figure-agent
Release list
figure-agent v0.9.3
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
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
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
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 testsfigure-agent full render tests
Local release-hardening verification before merge passed:
uv run pytest -q->1337 passed, 3 skipped, 1 xfaileduv run ruff check .git diff --checkclaude plugin validate .claude-plugin/plugin.jsonclaude plugin validate .claude plugin validate ../../.claude-plugin/marketplace.json
figure-agent v0.6.0
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
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.pngwith a clear stderr message.scripts/export_svg.sh: same defense for.svgoutputs.tests/test_export_svg.py(new) and an additional case intests/test_svg_to_png.pylock 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
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_noteshelper: warns to stderr (naming the example dir and encountered type) and coerces to str whenselection_notesis non-string (int, list, dict, bare YAML date such as2026-04-29).scripts/llm_author_prompt.py: warn to stderr whenselection_notesis 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 withselected_previewand 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 dogfoodfig3_trap_schematic_v97/spec.yamlshows 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
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 notessection with priority order text directing the LLM to honorbriefing.md§6 invariants over selection notes.commands/fig_preview_select.mdstep 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.mdscaffoldsspec.yamlwith an emptyselection_notes: ""key.docs/design-v0.1.mdper-figure folder contract listsselection_notesas a recognizedspec.yamlkey.docs/roadmap-v0.1.7-selection-notes.mdrecords the audit-driven rationale for plumbing this orphan field instead of adding a/fig_decomposeslash command.tests/test_llm_author_prompt.pyfour 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.pyreadsspec.yaml.selection_notes, strips HTML comments usinginputs._HTML_COMMENT(parity withparse_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
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_compileas pre-compile gate./fig_status <name>— read-only stage inference from filesystem + spec.yaml.lint_tex.pyWARN tier:flagship_macros_unusedandthin_stroke.prompts/llm_author_tikz.md— parameterised LLM TikZ authoring prompt template.scripts/llm_author_prompt.py— CLI andbuild_prompt()helper.styles/polymer-paper-preamble.sty—% \IsoBlock{w}{d}{h}{color}{hook}signature comment.
Fixed
lint_tex.pyplugged three Style Lock bypasses (positional colors in option blocks, brace-enclosed values, escape-sequence consumption in comment stripping).lint_tex.pyparse_palettereturns an empty set whenpolymer-paper-preamble.styis missing./fig_statusfreshness source set matches/fig_review; addsstale_exportandselected_preview_missingnotes; no longer crashes whenpreviewsis a file.
Changed
- All six command docs end with a single-line Next: footer.
SKILL.mdtrimmed (145→84 lines).ViolationNamedTuple gainsseverityfield.
See CHANGELOG.md for full v0.1.6 entry.
figure-agent v0.1.5
[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.