{
  "checker": {
    "claims": [
      {
        "claim": "The add-on builds a wheel with uv build",
        "command": "uv build",
        "evidence": "Successfully built dist/orange3_nnviewer-0.1.0-py3-none-any.whl\n",
        "expected": "Successfully built dist/orange3_nnviewer-0.1.0-py3-none-any.whl",
        "input": "uv build",
        "kind": "claim",
        "outcome": "Real input produced the expected result: Successfully built dist/orange3_nnviewer-0.1.0-py3-none-any.whl",
        "returncode": 0,
        "source": "Build a wheel (a single self-contained plugin file):",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected (ow_nn_viewer.py __main__ block, orangecontrib/nnviewer/__init__.py, pyproject.toml, README). The widget is a one-shot Orange Canvas widget driven by user interaction; there is no scheduler, cron, loop, webhook, or --once/--now flag in the product.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected (ow_nn_viewer.py __main__ block, orangecontrib/nnviewer/__init__.py, pyproject.toml, README). The widget is a one-shot Orange Canvas widget driven by user interaction; there is no scheduler, cron, loop, webhook, or --once/--now flag in the product.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "-m",
        "orangecontrib.nnviewer.widgets.ow_nn_viewer"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "<guest-path> ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n  warnings.warn(\nThis plugin does not support propagateSizeHints()\nThis plugin does not support propagateSizeHints()\nThis plugin does not support raise()",
      "stdout": "",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Documented full test suite",
        "command": "",
        "deferred": false,
        "evidence": "README '## Tests' command 'python -m pytest -q' was run in the VM with QT_QPA_PLATFORM=offscreen: 13 passed, 1 failed. The failure is tests/test_render.py::test_boxes_render_white_over_lines (box pixel #fceded is not white, a red edge shows through a label box). Not a harness issue; README documents no nonzero result, so the failing full run is not replayed as an example.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "README '## Tests' command 'python -m pytest -q' was run in the VM with QT_QPA_PLATFORM=offscreen: 13 passed, 1 failed. The failure is tests/test_render.py::test_boxes_render_white_over_lines (box pixel #fceded is not white, a red edge shows through a label box). Not a harness issue; README documents no nonzero result, so the failing full run is not replayed as an example.",
        "source": "README.md",
        "verdict": "blocked"
      },
      {
        "claim": "Hover and tooltip tests run with the Python that runs Orange",
        "command": "<guest-path> -m pytest -q tests/test_tooltip.py tests/test_hover.py",
        "deferred": false,
        "evidence": "s/localization/si.py:5: DeprecationWarning: import 'orangecanvas.localization.si', not 'orangecanvas.utils.localization.si'\n    warnings.warn(\n\ntests/test_tooltip.py::test_node_tooltip_is_instant\ntests/test_hover.py::test_hover_fills_nodes_and_tints_labels\n  <guest-path> ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n    warnings.warn(\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n4 passed, 5 warnings in 1.42s",
        "expected": "4 passed",
        "input": "python -m pytest -q tests/test_tooltip.py tests/test_hover.py",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md ## Tests",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "The workspace was not a git repo; ran git init and the pinned fetch/reset from the task.",
    "README tests failed on import: no Qt binding. Installed PyQt6 with uv pip install --python <guest-path> PyQt6 (test comments say PyQt6).",
    "PyQt6 import then failed: libGL.so.1 missing. Ran sudo -n apt-get -o DPkg::Lock::Timeout=300 update and install -y libgl1 libegl1 libxkbcommon0 libdbus-1-3 libfontconfig1.",
    "python -m pytest -q: 13 passed, 1 failed. Failing test tests/test_render.py::test_boxes_render_white_over_lines: box pixel #fceded is not white, so a red edge shows through a label box. This is an assertion in the repo, not a harness error. Not edited (no source edits allowed). Because the README documents no nonzero result, this full run is recorded as a reason-based example, not a replayed nonzero example.",
    "Claim with stays_running for the widget timed out at the 120 s claim window; moved the widget check into probe.json (stays_running) and kept the uv build README claim as the replayed claim.",
    "Widget stays open, so it is kind cli with stays_running; expected_text 'propagateSizeHints' is the plugin load message on stderr.",
    "Used the wheel install (README) which replaced the earlier editable install in the same venv; the version reports 0.1.0 from the wheel.",
    "No product cycle: the widget is one-shot and interactive, so cycles.json has detected false."
  ],
  "fault_owner": "repo",
  "main_blocker": null,
  "operation": "Build the orange3-nnviewer wheel with uv build, install it into the Orange Python 3.12 venv, and open the NN Viewer widget standalone (python -m orangecontrib.nnviewer.widgets.ow_nn_viewer) with trained housing MLP model.",
  "operation_scope": "Linux guest (Ubuntu, non-root with sudo), Python 3.12.3, uv, Orange3 installed from the package dependencies, PyQt6 added, offscreen Qt. Pinned commit f3363285b6694b6d4949d915b8b52d06409a7c45. Canvas (python -m Orange.canvas) not exercised because it is a GUI with no CLI readback.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "git init; git remote add origin https://github.com/tcorbettclark/orange3-nnviewer; git fetch --depth 1 origin f3363285b6694b6d4949d915b8b52d06409a7c45; git reset --mixed FETCH_HEAD",
    "uv venv -p 3.12 <guest-path>",
    "uv pip install --python <guest-path> -e <guest-path>",
    "uv build",
    "uv pip install --python <guest-path> --no-deps dist/orange3_nnviewer-0.1.0-py3-none-any.whl",
    "python -m orangecontrib.nnviewer.widgets.ow_nn_viewer (QT_QPA_PLATFORM=offscreen)",
    "python -m pytest -q (README ## Tests)"
  ],
  "stuck_step": null,
  "suggested_fix": "Fix the failing render test in the repo: test_boxes_render_white_over_lines expects label boxes to mask edge lines, but a red line shows through in this environment. Either the label box background is not drawn over the lines in the scene z-order, or the test threshold/rendering is font- or Qt-version dependent. Also add PyQt6 and libGL to the README's install steps, since the tests cannot import without them."
}
