[inkscape] path union/difference report success but emit d="M 0,0" and destroy both operands

Author: SleepyOldOrbsCreated Jul 22, 2026Updated Jul 22, 2026

[inkscape] path union / difference / intersection report success but emit d="M 0,0"

Severity: high — silent data loss; the source shapes are consumed and replaced by nothing

Summary

The boolean path operations print a success message, consume both input objects, and produce a path whose entire geometry is M 0,0. No error, no warning, and the operands are gone.

Reproduce

cli-anything-inkscape document new --name B -w 800 -h 400 -o b.json
cli-anything-inkscape --project b.json -s shape add-circle --cx 250 --cy 200 --r 70 -n A -s "fill:#06d6a0"
cli-anything-inkscape --project b.json -s shape add-circle --cx 320 --cy 200 --r 70 -n B -s "fill:#118ab2"
cli-anything-inkscape --project b.json -s path union 0 1 -n merged
cli-anything-inkscape --project b.json -s export svg b.svg

Output:

Union created: merged
id: path1
name: merged
type: path

b.svg:

<path id="path1" style="fill:#06d6a0" d="M 0,0" />

Both circles have been removed from the object list. The result is an empty path. Same for path difference; intersection, exclusion and convert are presumably in the same state.

Impact

Worse than a plain failure, because it is destructive and silent. An agent following the documented workflow — draw two shapes, combine them — ends up with fewer objects than it started with, a success message in its context, and no signal that anything went wrong until something renders blank much later.

Context

INKSCAPE.md describes the strategy as:

  1. Inkscape CLI — If available, use inkscape --actions for advanced operations (PDF export, path boolean ops, text-to-path conversion).

PDF export does correctly shell out to Inkscape — the harness reports rendered_by: inkscape. Boolean ops do not appear to attempt it, and there is no in-Python fallback either, hence M 0,0.

Inkscape 1.4.4 was on PATH throughout, so this is not a missing-dependency case.

Suggested fix

Route these through inkscape --actions as the SOP already describes (select-by-id, path-union, export-filename, export-do), or — until that exists — fail loudly. A clear "boolean operations require Inkscape and are not yet implemented" error would be strictly better than the current behaviour, and would stop the operands being destroyed.

Environment

OS Windows 11 Pro 10.0.26100
Inkscape 1.4.4 (dcaf3e7), on PATH
Python 3.14.6
Repo bc536c9 (2026-07-09)