{
  "checker": {
    "claims": [
      {
        "claim": "The no-Jev ablation (free baseline) runs headless and seed 1 stays stuck near 18 m",
        "command": "<guest-path> run.py --no-jev --fast --seconds 65 --seeds 0 1 2",
        "evidence": "\"max_x_m\": 18.4, \"crossed_barrier\": false, \"crashed_at_s\": null, \"flew_s\": 65.0}\n{\"seed\": 2, \"jev\": false, \"collisions\": 0, \"target_visible_pct\": 21.8, \"mean_standoff_m\": 28.49, \"max_standoff_m\": 63.87, \"final_gap_m\": 63.87, \"distance_flown_m\": 16.0, \"steps_jev_acted_pct\": 0.0, \"steps_reflex_pct\": 76.6, \"max_x_m\": 18.2, \"crossed_barrier\": false, \"crashed_at_s\": null, \"flew_s\": 65.0}\n",
        "expected": "seed 1 max_x 18.4 m, not crossed; NOTE seed 0 reached 77.2 m and crossed, contradicting 'every single time'",
        "input": "run.py --no-jev --fast --seconds 65 --seeds 0 1 2",
        "kind": "claim",
        "outcome": "Real input produced the expected result: \"max_x_m\": 18.4, \"crossed_barrier\": false",
        "returncode": 0,
        "source": "The baseline stops dead at station 2 every single time.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected (run.py, tactics.py, replay.py, flight.py, hud.py): no cron, scheduler, webhook, --once/--now. run.py runs a finite episode loop per seed for --seconds, and tactics.py has an in-episode ~2.5 Hz judgment thread; these are control loops, not product cycles.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected (run.py, tactics.py, replay.py, flight.py, hud.py): no cron, scheduler, webhook, --once/--now. run.py runs a finite episode loop per seed for --seconds, and tactics.py has an in-episode ~2.5 Hz judgment thread; these are control loops, not product cycles.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "run.py",
        "--no-jev",
        "--fast",
        "--seconds",
        "65",
        "--seeds",
        "0",
        "1",
        "2"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "",
      "stdout": "{\"seed\": 0, \"jev\": false, \"collisions\": 3, \"target_visible_pct\": 60.1, \"mean_standoff_m\": 8.19, \"max_standoff_m\": 19.91, \"final_gap_m\": 3.95, \"distance_flown_m\": 75.7, \"steps_jev_acted_pct\": 0.0, \"steps_reflex_pct\": 20.5, \"max_x_m\": 77.2, \"crossed_barrier\": true, \"crashed_at_s\": null, \"flew_s\": 65.0}\n{\"seed\": 1, \"jev\": false, \"collisions\": 1, \"target_visible_pct\": 21.0, \"mean_standoff_m\": 28.57, \"max_standoff_m\": 64.24, \"final_gap_m\": 64.24, \"distance_flown_m\": 15.9, \"steps_jev_acted_pct\": 0.0, \"steps_reflex_pct\": 78.0, \"max_x_m\": 18.4, \"crossed_barrier\": false, \"crashed_at_s\": null, \"flew_s\": 65.0}\n{\"seed\": 2, \"jev\": false, \"collisions\": 0, \"target_visible_pct\": 21.8, \"mean_standoff_m\": 28.49, \"max_standoff_m\": 63.87, \"final_gap_m\": 63.87, \"distance_flown_m\": 16.0, \"steps_jev_acted_pct\": 0.0, \"steps_reflex_pct\": 76.6, \"max_x_m\": 18.2, \"crossed_barrier\": false, \"crashed_at_s\": null, \"flew_s\": 65.0}",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Free no-Jev ablation command from the Run it section",
        "command": "<guest-path> run.py --no-jev --fast --seconds 65 --seeds 0 1 2",
        "deferred": false,
        "evidence": "1, \"jev\": false, \"collisions\": 1, \"target_visible_pct\": 21.0, \"mean_standoff_m\": 28.57, \"max_standoff_m\": 64.24, \"final_gap_m\": 64.24, \"distance_flown_m\": 15.9, \"steps_jev_acted_pct\": 0.0, \"steps_reflex_pct\": 78.0, \"max_x_m\": 18.4, \"crossed_barrier\": false, \"crashed_at_s\": null, \"flew_s\": 65.0}\n{\"seed\": 2, \"jev\": false, \"collisions\": 0, \"target_visible_pct\": 21.8, \"mean_standoff_m\": 28.49, \"max_standoff_m\": 63.87, \"final_gap_m\": 63.87, \"distance_flown_m\": 16.0, \"steps_jev_acted_pct\": 0.0, \"steps_reflex_pct\": 76.6, \"max_x_m\": 18.2, \"crossed_barrier\": false, \"crashed_at_s\": null, \"flew_s\": 65.0}",
        "expected": "one JSON metrics line per seed, exit 0",
        "input": "--no-jev --fast --seconds 65 --seeds 0 1 2",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Run it: `.venv/bin/python run.py --no-jev --fast --seconds 65 --seeds 0 1 2   # ablation (free)`",
        "verdict": "yes"
      },
      {
        "claim": "Jev-engaged flight from the Run it section",
        "command": "",
        "deferred": false,
        "evidence": "Needs TYPESAFE_API_KEY (from .env.example). Not provided; the documented call fails with 'RuntimeError: set TYPESAFE_API_KEY (see .env.example)'. Not obtained or faked.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Needs TYPESAFE_API_KEY (from .env.example). Not provided; the documented call fails with 'RuntimeError: set TYPESAFE_API_KEY (see .env.example)'. Not obtained or faked.",
        "source": "README.md Run it: .venv/bin/python run.py --seconds 65 --seeds 1 # Jev engaged",
        "verdict": "blocked"
      },
      {
        "claim": "replay.py re-renders a recorded flight without API calls",
        "command": "",
        "deferred": false,
        "evidence": "Needs course.mp4.tape.npy from a --video run; that run writes binary mp4 output and no fresh UTF-8 expected text is possible for it. Not run.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Needs course.mp4.tape.npy from a --video run; that run writes binary mp4 output and no fresh UTF-8 expected text is possible for it. Not run.",
        "source": "README.md Run it: replay.py course.mp4.tape.npy out.mp4",
        "verdict": "blocked"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "setup.sh failed: python3 -m venv could not run ensurepip. Fixed by sudo apt-get install python3.12-venv (Python 3.12.3), then re-ran ./setup.sh unchanged; succeeded.",
    "MUJOCO_GL=egl failed at import (OpenGL EGL platform None). Fixed by sudo apt-get install libegl1 libgl1 libgl1-mesa-dri libosmesa6 libglfw3 (system libraries, not product source). README does not list these.",
    "Jev-engaged run not executed successfully: no TYPESAFE_API_KEY. Not faked; credentials_error recorded in examples.json.",
    "README claim 'The baseline stops dead at station 2 every single time' was NOT reproduced for seed 0: --no-jev --fast seed 0 reached max_x 77.2 m and crossed_barrier true (seeds 1 and 2 stayed at ~18 m as claimed). The README table lists 17.7 m for baseline. Possible cause: --fast/sim-time settings or repo version; not investigated further.",
    "git init and the pinned fetch were run as instructed; setup.sh itself does not need git metadata of the repo."
  ],
  "fault_owner": "prerequisite",
  "main_blocker": null,
  "operation": "Run the jev-drone MuJoCo quadrotor obstacle-course simulation from the README 'Run it' section",
  "operation_scope": "Free no-Jev ablation (run.py --no-jev --fast, seeds 0 1 2) works end-to-end headless. The headline Jev-engaged flight needs a TypeSafe API key (TYPESAFE_API_KEY), which was not provided and was not obtained. Replay of a recorded flight was not run (needs a tape from a video run).",
  "outcome": "working",
  "plain_failure": "The drone simulation installs and flies the free no-AI baseline correctly. The part the README is mainly about, the AI-assisted flight, cannot run without a paid TypeSafe API key, which was not provided. Also, one README claim (baseline always stuck at the second station) did not hold for one of the three test seeds.",
  "steps": [
    "git init; git remote add origin https://github.com/RomanSlack/jev-drone; git fetch --depth 1 origin 974b47378c14c6dcf7d11f7c813fba0f5f4d8b6a; git reset --mixed FETCH_HEAD (HEAD now 974b473, clean tree)",
    "./setup.sh (failed first: ensurepip missing; see deviations) then, after install, ./setup.sh exit 0 (venv, pip install -r requirements.txt, git clone mujoco_menagerie sparse skydio_x2, asset symlink)",
    "export MUJOCO_GL=egl; .venv/bin/python run.py --no-jev --fast --seconds 65 --seeds 0 1 2  -> exit 0, three JSON metric lines",
    "env -u TYPESAFE_API_KEY .venv/bin/python run.py --seconds 65 --seeds 1 (Jev engaged) -> RuntimeError: set TYPESAFE_API_KEY (see .env.example), exit 1",
    "<env-var>=<guest-path> python3 -I <guest-path> --validate --replay -> valid true, no problems, replay PASS"
  ],
  "stuck_step": "Jev-engaged flight: .venv/bin/python run.py --seconds 65 --seeds 1 (needs TYPESAFE_API_KEY)",
  "suggested_fix": "Provide TYPESAFE_API_KEY (copy .env.example to .env and add a key) to run the Jev-engaged flight and its replay. Document apt packages python3.12-venv and Mesa EGL/OSMesa libraries in the README for headless setup. Re-check the baseline seed 0 result against the README table."
}
