{
  "checker": {
    "details": {
      "argv": [
        "/opt/caddiff-venv/bin/caddiff",
        "diff",
        "examples/fixtures/moved_old.stp",
        "examples/fixtures/moved_new.stp",
        "-o",
        ".coldpass/probe-out"
      ],
      "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: /workspace/.coldpass/probe-out/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: /workspace/.coldpass/probe-out/geom_diff.json\\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: /workspace/.coldpass/probe-out/images/render_manifest.json\\n\\n============================================================\\n  [Step 1/5: BOM diff]\\n============================================================\\n  CMD: /opt/caddiff-venv/bin/python3 /opt/caddiff-venv/lib/python3.12/site-packages/caddiff/bom_diff.py /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /workspace/.coldpass/probe-out/bom_diff.json\\n  OK (0s)\\n\\n============================================================\\n  [Step 2/5: geometric diff]\\n============================================================\\n  CMD: /usr/bin/python3 /opt/caddiff-venv/lib/python3.12/site-packages/caddiff/geom_diff.py /workspace/.coldpass/probe-out/bom_diff.json /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /workspace/.coldpass/probe-out/geom_diff.json --lang en\\n  OK (0s)\\n\\n============================================================\\n  [Step 3/5: render diff images]\\n============================================================\\n  CMD: /usr/bin/python3 /opt/caddiff-venv/lib/python3.12/site-packages/caddiff/render_diff.py /workspace/.coldpass/probe-out/geom_diff.json /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /workspace/.coldpass/probe-out/images --lang en\\n  OK (25s)\\n\\n============================================================\\n  [Step 4/5: report]\\n============================================================\\nReport written: /workspace/.coldpass/probe-out/report.html\\nReport written: /workspace/.coldpass/probe-out/report.md\\n\\n============================================================\\n  Pipeline finished\\n============================================================\\n  Output dir: /workspace/.coldpass/probe-out\\n  Manifest  : /workspace/.coldpass/probe-out/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\": \"Traceback (most recent call last):\\n  File \\\"<string>\\\", line 1, in <module>\\n<class 'ModuleNotFoundError'>: No module named 'AttachmentEditor'\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 1,
      "stderr": "Traceback (most recent call last):\n  File \"<string>\", line 1, in <module>\n<class 'ModuleNotFoundError'>: No module named 'AttachmentEditor'",
      "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: /workspace/.coldpass/probe-out/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"
  },
  "deviations": [
    "README 'Local install' -> FreeCAD via apt: the package is not in default Ubuntu 24.04 repos; installed from ppa:freecad-maintainers/freecad-stable (0.21.2) instead.",
    "README 'Local install' -> `caddiff diff` without display: render_diff.py exited -6 (SIGABRT) at step 3 because FreeCAD needs an OpenGL context. Fixed by installing xvfb + libgl1-mesa-dri + full freecad package and running a persistent Xvfb on :99 with DISPLAY=:99 (set in probe env). The README does not document this requirement.",
    "README 'Local install' -> `pip install caddiff`: installed from the pinned source copy at /opt/caddiff-src into /opt/caddiff-venv instead of PyPI, so the version matches commit 0d862a2.",
    "Not run: the repo's unit tests and lint, per task instructions."
  ],
  "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: /workspace/.coldpass/probe-out/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: /workspace/.coldpass/probe-out/geom_diff.json\\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: /workspace/.coldpass/probe-out/images/render_manifest.json\\n\\n============================================================\\n  [Step 1/5: BOM diff]\\n============================================================\\n  CMD: /opt/caddiff-venv/bin/python3 /opt/caddiff-venv/lib/python3.12/site-packages/caddiff/bom_diff.py /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /workspace/.coldpass/probe-out/bom_diff.json\\n  OK (0s)\\n\\n============================================================\\n  [Step 2/5: geometric diff]\\n============================================================\\n  CMD: /usr/bin/python3 /opt/caddiff-venv/lib/python3.12/site-packages/caddiff/geom_diff.py /workspace/.coldpass/probe-out/bom_diff.json /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /workspace/.coldpass/probe-out/geom_diff.json --lang en\\n  OK (0s)\\n\\n============================================================\\n  [Step 3/5: render diff images]\\n============================================================\\n  CMD: /usr/bin/python3 /opt/caddiff-venv/lib/python3.12/site-packages/caddiff/render_diff.py /workspace/.coldpass/probe-out/geom_diff.json /workspace/examples/fixtures/moved_old.stp /workspace/examples/fixtures/moved_new.stp /workspace/.coldpass/probe-out/images --lang en\\n  OK (25s)\\n\\n============================================================\\n  [Step 4/5: report]\\n============================================================\\nReport written: /workspace/.coldpass/probe-out/report.html\\nReport written: /workspace/.coldpass/probe-out/report.md\\n\\n============================================================\\n  Pipeline finished\\n============================================================\\n  Output dir: /workspace/.coldpass/probe-out\\n  Manifest  : /workspace/.coldpass/probe-out/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\": \"Traceback (most recent call last):\\n  File \\\"<string>\\\", line 1, in <module>\\n<class 'ModuleNotFoundError'>: No module named 'AttachmentEditor'\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
  "operation": "caddiff diff on the bundled synthetic fixture pair examples/fixtures/moved_old.stp vs moved_new.stp; runs BOM diff, FreeCAD geometric diff, offscreen-rendered images and report generation, and writes diff_manifest.json + report.html/md.",
  "operation_scope": "Verified on Ubuntu 24.04 with FreeCAD 0.21.2 (PPA) under Xvfb software GL. Expected result: exit 1 with 'Geometry  : 2 difference(s) (shape_changed=1, moved=1)' and 1 part not compared (summary.skipped_parts). Does not exercise the GitHub Action, Docker image, git difftool or PPTX output. No browser was needed and none was used; the shared CDP endpoint was not used.",
  "outcome": "blocked",
  "steps": [
    "Read README.md; Quick start 'Local install' requires FreeCAD python (FREECAD_PYTHON + PYTHONPATH=/usr/lib/freecad/lib).",
    "apt-get update && apt-get install -y python3-pip python3-venv (python3 3.12.3 present)",
    "apt-get install freecad-python3 -> 'Unable to locate package' (not in default Ubuntu 24.04 repos)",
    "add-apt-repository -y universe; apt-get update -> freecad still has no candidate",
    "add-apt-repository -y ppa:freecad-maintainers/freecad-stable; apt-get update -> freecad 2:0.21.2 (matches README Docker image FreeCAD version)",
    "apt-get install --no-install-recommends freecad-python3 freecad-common; PYTHONPATH=/usr/lib/freecad/lib /usr/bin/python3 -c 'import FreeCAD' -> 0.21.2",
    "apt-get install xvfb xauth libgl1-mesa-dri libglu1-mesa freecad (GUI modules + software GL)",
    "cp -r /workspace /opt/caddiff-src; python3 -m venv /opt/caddiff-venv; /opt/caddiff-venv/bin/pip install /opt/caddiff-src (source copy keeps /workspace unchanged)",
    "caddiff --help -> usage ok",
    "caddiff diff examples/fixtures/moved_old.stp examples/fixtures/moved_new.stp -o out -> exit 1, 2 differences (shape_changed=1, moved=1), report written"
  ],
  "stuck_step": "/opt/caddiff-venv/bin/caddiff diff examples/fixtures/moved_old.stp examples/fixtures/moved_new.stp -o .coldpass/probe-out",
  "suggested_fix": null
}
