{
  "checker": {
    "details": {
      "argv": [
        "/usr/bin/xvfb-run",
        "-a",
        "/opt/caddiff-venv/bin/caddiff",
        "diff",
        "examples/fixtures/moved_old.stp",
        "examples/fixtures/moved_new.stp",
        "-o",
        "/tmp/caddiff-checker-out"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 1,
      "scope": "product operation",
      "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-checker-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": true
    },
    "status": "PASS"
  },
  "deviations": [
    "README 'Local install': 'pip install caddiff' -> not run from PyPI; installed the pinned source instead from a copy at /tmp/caddiff-src (keeps /workspace unchanged, avoids in-tree build artifacts). Installed into /opt/caddiff-venv because Ubuntu 24.04 blocks system-wide pip (PEP 668).",
    "README 'Local install': 'sudo add-apt-repository' -> not preinstalled in guest; installed software-properties-common first, then the PPA.",
    "Probe uses absolute paths to xvfb-run and the venv caddiff binary, and sets FREECAD_PYTHON/PYTHONPATH in env, because the checker runs in a clean process.",
    "Guest has no git; not needed for the diff operation. No browser was used or installed. Full test/lint suites were not run."
  ],
  "main_blocker": null,
  "operation": "caddiff diff on the bundled synthetic fixture examples/fixtures/moved_old.stp vs moved_new.stp, producing diff_manifest.json, report.html/md and images. Result: 2 differences (shape_changed=1 on BRACKET_03, moved=1 on SLIDER_02 by 5.0 mm), exit code 1 as documented.",
  "operation_scope": "Local CLI run under Xvfb with FreeCAD 0.21.2 (system python3 + PYTHONPATH). Covers the Local install path only; Docker and GitHub Action paths were not exercised. One part (MovedFixture, assembly_container) is skipped by design. No credentials or browser needed.",
  "outcome": "working",
  "steps": [
    "apt-get update",
    "apt-get install -y software-properties-common",
    "add-apt-repository -y ppa:freecad-maintainers/freecad-stable",
    "apt-get update && apt-get install -y freecad xvfb python3-venv  (FreeCAD 0.21.2)",
    "python3 -m venv /opt/caddiff-venv",
    "cp -r /workspace /tmp/caddiff-src && /opt/caddiff-venv/bin/pip install /tmp/caddiff-src  (README 'pip install caddiff' from the pinned source copy)",
    "FREECAD_PYTHON=/usr/bin/python3 PYTHONPATH=/usr/lib/freecad/lib xvfb-run -a caddiff diff examples/fixtures/moved_old.stp examples/fixtures/moved_new.stp -o <out>  (exit 1 = differences found)"
  ],
  "stuck_step": null,
  "suggested_fix": null
}
