{
  "checker": {
    "claims": [
      {
        "claim": "The development command starts the FastAPI app on localhost port 8000.",
        "command": "./scripts/dev.sh --no-bot --no-frontend",
        "evidence": "Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStanda",
        "expected": "{\"status\":\"ok\"}",
        "input": "GET /api/v1/health",
        "kind": "claim",
        "outcome": "Real input produced the expected result: Swagger UI",
        "source": "starts the FastAPI app (`http://127.0.0.1:8000`, docs at `/docs`), the",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "The product runs schedule polling loops inside the API process; a hand-triggered routine cycle requires configured engine activity, beyond this useful server startup operation.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "The product runs schedule polling loops inside the API process; a hand-triggered routine cycle requires configured engine activity, beyond this useful server startup operation.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "./scripts/dev.sh",
        "--no-bot",
        "--no-frontend"
      ],
      "bytes": 1006,
      "kind": "http",
      "response_checked": true,
      "response_excerpt": "Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStanda",
      "scope": "product operation",
      "status": 200,
      "url": "http://127.0.0.1:8000/docs",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Install the web UI dependencies with the documented command.",
        "command": "npm install",
        "deferred": false,
        "evidence": "up to date, audited 417 packages in 2s\n\n151 packages are looking for funding\n  run `npm fund` for details\n\n3 vulnerabilities (2 high, 1 critical)\n\nTo address issues that do not require attention, run:\n  npm audit fix\n\nTo address all issues, run:\n  npm audit fix --force\n\nRun `npm audit` for details.",
        "expected": "documented command completes successfully",
        "input": "npm install",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md, Development setup / Run manually: npm install && npm run dev",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "The initial npm install was interrupted and left a partial node_modules; reran npm install successfully.",
    "Used the documented --no-frontend option during API replay so the checker confirms the API documentation endpoint; frontend dependency installation was separately completed."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Start Open Duet's API and web interface with the documented development script, use SQLite, and request the API documentation page.",
  "operation_scope": "Local SQLite development startup; Boat and Telegram credentials are optional and omitted.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "Installed uv and Python 3.14.9 required by backend/pyproject.toml.",
    "Installed Node.js 22.23.4 and npm 10.9.9.",
    "Ran ./scripts/dev.sh --no-bot with SQLite; migrations completed and the API returned HTTP 200.",
    "Ran npm install in frontend and confirmed the frontend package installation completed.",
    "Replayed the documented stack and confirmed Swagger UI at /docs."
  ],
  "stuck_step": null,
  "suggested_fix": null
}
