{
  "checker": {
    "details": {
      "argv": [
        "xvfb-run",
        "-a",
        "/workspace/.venv/bin/caddiff",
        "diff",
        "/workspace/examples/fixtures/moved_old.stp",
        "/workspace/examples/fixtures/moved_new.stp",
        "-o",
        "/tmp/caddiff_probe_report"
      ],
      "blocker": "an expected operation error cannot prove working behavior: {\"returncode\": 1, \"stdout\": \"Old version parts (before merging): 4\\nNew version parts (before merging): 4\\nREMOVED (old only): 0 -> []\\nADDED   (new only): 0 -> []\\nCANDIDATE (in both, sent to the geometric diff): 4\\n  of which instance count differs (a difference in itself): 0 -> []\\nWrote: /tmp/caddiff_probe_report/bom_diff.json\\nLoaded old version: 0.0s (11 objects)\\nLoaded new version: 0.0s (11 objects)\\n[1/4] BASEPLATE_01... no change (0.0s)\\n[2/4] BRACKET_03... 1 changes (moved=0), unpaired=[] (0.1s)\\n[3/4] MovedFixture... skipped (assembly container)\\n[4/4] SLIDER_02... 1 changes (moved=1), unpaired=[] (0.0s)\\n\\nTotal candidates: 4\\nGeometric differences: 2\\n  BRACKET_03: 1 change(s)\\n  SLIDER_02: 1 change(s)\\nSkipped parts (1):\\n  MovedFixture: assembly_container\\nWrote: /tmp/caddiff_probe_report/geom_diff.json\\nTraceback (most recent call last):\\n  File \\\"<string>\\\", line 1, in <module>\\n<class 'ModuleNotFoundError'>: No module named 'AttachmentEditor'\\nInitializing GUI...\\nLoading new-version STP...\\n  11 objects\\nLoading old-version STP (to compute diff geometry for color highlighting + render the old-version side-by-side image)...\\n  11 objects\\n\\n[Stage 1/3] Precomputing diff geometry (must run before any visibility change)...\\n  BRACKET_03: symmetric difference V=192.000000mm3 (removed 192.0000 / added 0.0000) 0.0s\\n    1 clusters (removed 1 / added 0), 0 fragments filtered: #1rem V=192.0000\\n  SLIDER_02: moved diff, skipping boolean ops (translation 5.0mm / rotation 0.0\\u00b0)\\n\\n[Stage 2/3] Injecting highlight bodies and old-version proxy objects...\\n  Injected 5 objects\\n\\n[Stage 3/3] Rendering...\\n\\n[1/2] BRACKET_03  [shape_changed]\\n  Rendering overview image (scanning candidate view directions)...\\n    Selected view -1+0-1 (score=0.8000 magenta_in_box=432 components=1 solidity=1.0 body_pct=0.2133 readability=0.8), runner-up +1+0+1\\n  !! WARNING: no font from FONT_CANDIDATES was found; in-image text will render as tofu boxes. Install a CJK font or add this machine's font path to FONT_CANDIDATES.\\n    Overview magenta_px=3566  rects=1\\n  Rendering new-version close-up...\\n    New close-up magenta_px=0  rects=1\\n  Rendering old-version close-up (reusing the new-version camera, view unchanged)...\\n    Old close-up magenta_px=26175\\n\\n[2/2] SLIDER_02  [moved]\\n  Rendering overview image (scanning candidate view directions)...\\n    Overview magenta_px=8091  view=-1+1+1\\n  Rendering new-position close-up...\\n    New-position image magenta_px=202167\\n  Rendering old-position close-up (reusing the new-position camera, view unchanged)...\\n    Old-position image magenta_px=206729\\n\\nRendering complete, 2 screenshot sets\\nManifest: /tmp/caddiff_probe_report/images/render_manifest.json\\n\\n============================================================\\n  [Step 1/5: BOM diff]\\n============================================================\\n  CMD: /workspace/.venv/bin/python3 /workspace/.venv/lib/python3.12/site-packages/caddiff/bom_diff.py /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /tmp/caddiff_probe_report/bom_diff.json\\n  OK (0s)\\n\\n============================================================\\n  [Step 2/5: geometric diff]\\n============================================================\\n  CMD: /usr/bin/python3 /workspace/.venv/lib/python3.12/site-packages/caddiff/geom_diff.py /tmp/caddiff_probe_report/bom_diff.json /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /tmp/caddiff_probe_report/geom_diff.json --lang en\\n  OK (0s)\\n\\n============================================================\\n  [Step 3/5: render diff images]\\n============================================================\\n  CMD: /usr/bin/python3 /workspace/.venv/lib/python3.12/site-packages/caddiff/render_diff.py /tmp/caddiff_probe_report/geom_diff.json /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /tmp/caddiff_probe_report/images --lang en\\n  OK (25s)\\n\\n============================================================\\n  [Step 4/5: report]\\n============================================================\\nReport written: /tmp/caddiff_probe_report/report.html\\nReport written: /tmp/caddiff_probe_report/report.md\\n\\n============================================================\\n  Pipeline finished\\n============================================================\\n  Output dir: /tmp/caddiff_probe_report\\n  Manifest  : /tmp/caddiff_probe_report/diff_manifest.json\\n  Geometry  : 2 difference(s) (shape_changed=1, moved=1)\\n  NOTE: 1 part(s) were not compared \\u2014 see summary.skipped_parts\\n\", \"stderr\": \"\", \"needs_credentials\": false, \"needs_browser\": false}",
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 1,
      "stderr": "",
      "stdout": "Old version parts (before merging): 4\nNew version parts (before merging): 4\nREMOVED (old only): 0 -> []\nADDED   (new only): 0 -> []\nCANDIDATE (in both, sent to the geometric diff): 4\n  of which instance count differs (a difference in itself): 0 -> []\nWrote: /tmp/caddiff_probe_report/bom_diff.json\nLoaded old version: 0.0s (11 objects)\nLoaded new version: 0.0s (11 objects)\n[1/4] BASEPLATE_01... no change (0.0s)\n[2/4] BRACKET_03... 1 changes (moved=0), unpaired=[] (0.1s)\n[3/4] MovedFixture... skipped (assembly container)\n[excerpt truncated]",
      "working": false
    },
    "status": "FAIL"
  },
  "earlier_failure": "Earlier run stuck at 'xvfb-run -a /workspace/.venv/bin/caddiff diff ...' hit the attempt ceiling. Cause in this VM: FreeCAD was not installed and the Ubuntu noble archive has no freecad package, so caddiff could not import FreeCAD. Fixed by installing the PPA package and python3-venv. The diff then ran in about 26 s.",
  "fault_owner": "prerequisite",
  "main_blocker": "an expected operation error cannot prove working behavior: {\"returncode\": 1, \"stdout\": \"Old version parts (before merging): 4\\nNew version parts (before merging): 4\\nREMOVED (old only): 0 -> []\\nADDED   (new only): 0 -> []\\nCANDIDATE (in both, sent to the geometric diff): 4\\n  of which instance count differs (a difference in itself): 0 -> []\\nWrote: /tmp/caddiff_probe_report/bom_diff.json\\nLoaded old version: 0.0s (11 objects)\\nLoaded new version: 0.0s (11 objects)\\n[1/4] BASEPLATE_01... no change (0.0s)\\n[2/4] BRACKET_03... 1 changes (moved=0), unpaired=[] (0.1s)\\n[3/4] MovedFixture... skipped (assembly container)\\n[4/4] SLIDER_02... 1 changes (moved=1), unpaired=[] (0.0s)\\n\\nTotal candidates: 4\\nGeometric differences: 2\\n  BRACKET_03: 1 change(s)\\n  SLIDER_02: 1 change(s)\\nSkipped parts (1):\\n  MovedFixture: assembly_container\\nWrote: /tmp/caddiff_probe_report/geom_diff.json\\nTraceback (most recent call last):\\n  File \\\"<string>\\\", line 1, in <module>\\n<class 'ModuleNotFoundError'>: No module named 'AttachmentEditor'\\nInitializing GUI...\\nLoading new-version STP...\\n  11 objects\\nLoading old-version STP (to compute diff geometry for color highlighting + render the old-version side-by-side image)...\\n  11 objects\\n\\n[Stage 1/3] Precomputing diff geometry (must run before any visibility change)...\\n  BRACKET_03: symmetric difference V=192.000000mm3 (removed 192.0000 / added 0.0000) 0.0s\\n    1 clusters (removed 1 / added 0), 0 fragments filtered: #1rem V=192.0000\\n  SLIDER_02: moved diff, skipping boolean ops (translation 5.0mm / rotation 0.0\\u00b0)\\n\\n[Stage 2/3] Injecting highlight bodies and old-version proxy objects...\\n  Injected 5 objects\\n\\n[Stage 3/3] Rendering...\\n\\n[1/2] BRACKET_03  [shape_changed]\\n  Rendering overview image (scanning candidate view directions)...\\n    Selected view -1+0-1 (score=0.8000 magenta_in_box=432 components=1 solidity=1.0 body_pct=0.2133 readability=0.8), runner-up +1+0+1\\n  !! WARNING: no font from FONT_CANDIDATES was found; in-image text will render as tofu boxes. Install a CJK font or add this machine's font path to FONT_CANDIDATES.\\n    Overview magenta_px=3566  rects=1\\n  Rendering new-version close-up...\\n    New close-up magenta_px=0  rects=1\\n  Rendering old-version close-up (reusing the new-version camera, view unchanged)...\\n    Old close-up magenta_px=26175\\n\\n[2/2] SLIDER_02  [moved]\\n  Rendering overview image (scanning candidate view directions)...\\n    Overview magenta_px=8091  view=-1+1+1\\n  Rendering new-position close-up...\\n    New-position image magenta_px=202167\\n  Rendering old-position close-up (reusing the new-position camera, view unchanged)...\\n    Old-position image magenta_px=206729\\n\\nRendering complete, 2 screenshot sets\\nManifest: /tmp/caddiff_probe_report/images/render_manifest.json\\n\\n============================================================\\n  [Step 1/5: BOM diff]\\n============================================================\\n  CMD: /workspace/.venv/bin/python3 /workspace/.venv/lib/python3.12/site-packages/caddiff/bom_diff.py /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /tmp/caddiff_probe_report/bom_diff.json\\n  OK (0s)\\n\\n============================================================\\n  [Step 2/5: geometric diff]\\n============================================================\\n  CMD: /usr/bin/python3 /workspace/.venv/lib/python3.12/site-packages/caddiff/geom_diff.py /tmp/caddiff_probe_report/bom_diff.json /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /tmp/caddiff_probe_report/geom_diff.json --lang en\\n  OK (0s)\\n\\n============================================================\\n  [Step 3/5: render diff images]\\n============================================================\\n  CMD: /usr/bin/python3 /workspace/.venv/lib/python3.12/site-packages/caddiff/render_diff.py /tmp/caddiff_probe_report/geom_diff.json /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /tmp/caddiff_probe_report/images --lang en\\n  OK (25s)\\n\\n============================================================\\n  [Step 4/5: report]\\n============================================================\\nReport written: /tmp/caddiff_probe_report/report.html\\nReport written: /tmp/caddiff_probe_report/report.md\\n\\n============================================================\\n  Pipeline finished\\n============================================================\\n  Output dir: /tmp/caddiff_probe_report\\n  Manifest  : /tmp/caddiff_probe_report/diff_manifest.json\\n  Geometry  : 2 difference(s) (shape_changed=1, moved=1)\\n  NOTE: 1 part(s) were not compared \\u2014 see summary.skipped_parts\\n\", \"stderr\": \"\", \"needs_credentials\": false, \"needs_browser\": false}",
  "operation": "caddiff diff on the bundled synthetic fixture examples/fixtures/moved_old.stp vs moved_new.stp, run under xvfb-run, producing diff_manifest.json, report.html and report.md. Expected result: exit 1 (differences found) with 2 differences: BRACKET_03 shape_changed (removed volume 192 mm^3) and SLIDER_02 moved (5.0 mm translation).",
  "operation_scope": "Linux x86_64 Ubuntu 24.04 with FreeCAD 0.21.2 (PPA freecad-maintainers/freecad-stable) and Xvfb. Geometry and render steps ran in the system python3 with PYTHONPATH=/usr/lib/freecad/lib. The Docker image path and the Windows FreeCAD path were not exercised. Only the one documented diff operation was run; repo unit and lint suites were not run per task instructions.",
  "outcome": "blocked",
  "readme_gap": "README Local install > Linux says to set FREECAD_PYTHON=/usr/bin/python3 and PYTHONPATH=/usr/lib/freecad/lib but does not say how to install FreeCAD on Ubuntu 24.04, where the archive has no freecad package. Suggested README addition: sudo add-apt-repository ppa:freecad-maintainers/freecad-stable && sudo apt install freecad xvfb. This is a documentation gap, not a code defect, so no repo patch was made.",
  "repo_patch": null,
  "steps": [
    "Read README.md (Quick start > Local install; Linux FreeCAD notes) and docs/pipeline.md Environment constraints",
    "apt-get update; apt-get install -y xvfb xauth (Ubuntu archive)",
    "apt-cache policy freecad: no candidate in Ubuntu noble archive",
    "add-apt-repository -y ppa:freecad-maintainers/freecad-stable; apt-get update; apt-get install -y freecad (0.21.2)",
    "apt-get install -y python3-venv; python3 -m venv /workspace/.venv; .venv/bin/pip install /workspace (caddiff 0.3.7, zero runtime deps)",
    "PYTHONPATH=/usr/lib/freecad/lib /usr/bin/python3 -c 'import FreeCAD, Part' -> FreeCAD 0.21.2 OK",
    "FREECAD_PYTHON=/usr/bin/python3 PYTHONPATH=/usr/lib/freecad/lib xvfb-run -a /workspace/.venv/bin/caddiff diff examples/fixtures/moved_old.stp examples/fixtures/moved_new.stp -o /tmp/caddiff_run_report -> rc=1, 2 differences, report written",
    "Removed build/ and caddiff.egg-info/ created by pip install in /workspace; no product source changed"
  ],
  "stuck_step": "xvfb-run -a /workspace/.venv/bin/caddiff diff /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp -o /tmp/caddiff_probe_report",
  "suggested_fix": null
}
