{
  "checker": {
    "details": {
      "argv": [
        "/workspace/.venv/bin/ironjarvis",
        "demo"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "2026-10-17 05:01:36,318 INFO  ironjarvis.events :: session.created {'task': 'Create a file summarizing what Iron Jarvis just did.', 'agent': 'builder', 'workspace': '/workspace/.ironjarvis/workspaces/session_701c0ef246cc'}\n2026-10-17 05:01:36,326 INFO  ironjarvis.events :: agent.state_changed {'run_id': 'run_91dec2003323', 'from': 'created', 'to': 'initializing'}\n2026-10-17 05:01:36,327 INFO  ironjarvis.events :: agent.started {'agent': 'builder', 'run_id': 'run_91dec2003323', 'task': 'Create a file summarizing what Iron Jarvis just did.'}\n2026-10-17 05:01:36,328 INFO  ironjarvis.events :: agent.state_changed {'run_id': 'run_91dec2003323', 'from': 'initializing', 'to': 'running'}\n2026-10-17 05:01:46,062 INFO  ironjarvis.events :: llm.completed {'run_id': 'run_91dec2003323', 'step': 1, 'provider': 'mock', 'model': 'mock-1', 'input_tokens': 0, 'output_tokens': 0, 'cost_usd': 0.0, 'task_class': 'builder'}\n2026-10-17 05:01:46,071 INFO  ironjarvis.events :: tool.executed {'tool': 'write_file', 'ok': True, 'mode': 'allow', 'invocation_id': 'tool_5d91f5b774e3', 'reversibility': 'reversible', 'risk_class': 'external_commit'}\n2026-10-17 05:01:46,079 INFO  ironjarvis.events :: llm.completed \n[excerpt truncated]",
      "stdout": "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Iron Jarvis - offline demo \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nSession   : session_701c0ef246cc\nProvider  : mock / mock-1\nStatus    : completed\nWorkspace : /workspace/.ironjarvis/workspaces/session_701c0ef246cc\n                       Tool invocations                       \n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 tool       \u2503 verdict \u2503 ok   \u2503 output                       \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 write_file \u2502 allow   \u2502 True \u2502 wrote 137 bytes to RESULT.md \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 RESULT.md \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n[excerpt truncated]",
      "working": true
    },
    "status": "PASS"
  },
  "main_blocker": null,
  "operation": "Offline end-to-end demo: `uv run ironjarvis demo` (plan -> act -> write_file tool -> workspace artifact), run from the Python daemon install with no keys and no network. Exit code 0; session status completed, write_file tool ok, artifact demo-report v1 generated.",
  "operation_scope": "Covers the Python backend (uv sync --extra dev, ironjarvis CLI demo) only. Not covered: dashboard (Next.js) install and build, desktop/Electron app, `ironjarvis up`/serve, and any live provider. Unmet: dashboard `pnpm install --frozen-lockfile` fails with ERR_PNPM_FETCH_500 from registry.npmjs.org, so `next` is not installed and `pnpm build` cannot run. Full test suites were not run, per the smoke-task rules.",
  "outcome": "working",
  "steps": [
    "Read README.md (From source section)",
    "Installed uv 0.13.1 via astral.sh install script",
    "uv sync --extra dev (Python 3.12.3) - succeeded",
    "Installed Node v20.20.2 and npm 10.8.2 via NodeSource setup_20.x and apt nodejs; installed pnpm 9.15.9 globally",
    "cd dashboard && pnpm install - failed ERR_PNPM_FETCH_504 (x1), then ERR_PNPM_FETCH_500 on 3 retries and 1 more after 60s wait",
    "cd dashboard && pnpm build - not run successfully (next: not found because install failed)",
    "uv run ironjarvis --help - succeeded",
    "uv run ironjarvis demo - succeeded, exit 0"
  ],
  "stuck_step": "cd dashboard && pnpm install (README 'From source' section, dashboard step)",
  "suggested_fix": "Retry `cd dashboard && pnpm install --frozen-lockfile` later, or configure a working registry mirror/proxy via pnpm config (registry=...) in the guest. Then run `pnpm build`. Re-running the demo does not depend on this step."
}
