[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:
- 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) |
[inkscape]
path union/difference/intersectionreport success but emitd="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 operandsare gone.
Reproduce
Output:
b.svg:Both circles have been removed from the object list. The result is an empty path.
Same for
path difference;intersection,exclusionandconvertare presumably inthe 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.mddescribes the strategy as: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 noin-Python fallback either, hence
M 0,0.Inkscape 1.4.4 was on
PATHthroughout, so this is not a missing-dependency case.Suggested fix
Route these through
inkscape --actionsas 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
bc536c9(2026-07-09)