Skip to content

v2.3.0 — repairable axis titles, self-explaining repair rounds

Choose a tag to compare

@photonn photonn released this 21 Aug 09:19
· 30 commits to main since this release

Three fixes, all from reading real visual_repair_slides output where every round came
back "operations_applied": 0, "operations_skipped": 4.

1. Chart axis titles are repairable now

The whitelist covered chart legends, data labels and font size — but not axis titles. So
when the reviewer correctly reported "the axis titles are swapped", the planner had no
operation to express the fix and every attempt was rejected as an unknown op. The issue
could be found forever and never repaired.

{"op": "set_axis_title", "slide": N, "shape_index": N, "axis": "category", "text": "..."}

Axes are named by rolecategory and value — never by screen position, and
describe_slides now reports each chart's current titles so the planner can see what it
is changing.

2. The swapped titles were this repo's own doing

format_chart maps x_axis_title → category axis and y_axis_title → value axis
unconditionally. On a column or line chart that reads as expected. On a bar chart the
bars run sideways: the category axis is vertical, so x_axis_title lands on the vertical
axis. Any agent naming axes by where they appear on screen gets them swapped every single
time — and add_chart's entire docstring was "Add a chart to a slide with comprehensive
formatting options."

The docstring now spells the mapping out, which fixes the defect at the source rather than
repairing it after the fact. Behaviour is unchanged: renaming those parameters would
silently break decks that use them correctly today.

3. A round that changes nothing now says why

"operations_applied": 0 reads as "repair is disabled". It never was — the plan was
rejected by validation. Each round now carries the reason counts:

{"iteration": 1, "issues_found": 2, "operations_applied": 0,
 "operations_skipped": 4, "skipped_reasons": {"bad shape_index": 4}}

and the result carries a repair_note explaining that repairs ran, that bad shape_index
usually means the target belongs to the slide layout or master (slide numbers, footers,
date fields — slide.shapes does not expose them, and no operation can reach them), and
that repeating the call will not help.

Worth knowing for that last class: a slide number rendering as stacked digits is often a
LibreOffice artifact, not a defect in the deck. Check it in PowerPoint before chasing it.

Suite is 153 tests, green.