{
  "checker": {
    "details": {
      "argv": [
        "<host-path>",
        "--workers",
        "1",
        "--threads",
        "8",
        "--keep-alive",
        "0",
        "--config",
        "python:little_sister.gunicorn_hooks",
        "--bind",
        "0.0.0.0:8888",
        "wsgi:app"
      ],
      "bytes": 6685,
      "kind": "http",
      "scope": "product operation",
      "status": 200,
      "url": "http://localhost:8888/login",
      "working": true
    },
    "status": "PASS"
  },
  "deviations": [
    "README 'From a checkout' says uv is needed but the guest lacks it; installed uv into a venv at /tmp/uvenv (pip --user blocked by PEP 668) and put it on PATH for uv sync/start.sh.",
    "Installed python3-venv, lsof, curl via apt (start.sh needs lsof and curl)."
  ],
  "main_blocker": null,
  "operation": "Start the little sister web app with the README's checkout gunicorn command (wsgi:app with the gunicorn_hooks config) and fetch the /login page over HTTP (HTTP 200).",
  "operation_scope": "Covers install (uv sync), first-time setup.sh, and serving the web UI/login. The JSON API was also checked manually with a bearer token from .env (GET /status returned the status tree), but the probe uses /login because the API needs a token the checker does not send. No checks are configured (config/checks has only examples), so the monitoring itself is not exercised.",
  "outcome": "working",
  "steps": [
    "pip/apt: installed python3-venv, lsof, curl; created /tmp/uvenv and pip-installed uv 0.13.1 (uv not present on guest)",
    "uv sync (README: From a checkout) - 36 packages resolved and installed",
    "./setup.sh (README: First-time setup) with stdin closed - wrote config/users/users.yaml and .env",
    "./start.sh (README: From a checkout) - little-sister up on http://0.0.0.0:8888, GET /login 200",
    "Bearer GET /status via LITTLE_SISTER_API_TOKENS - returned status JSON",
    "./stop.sh - stopped; port 8888 confirmed closed"
  ],
  "stuck_step": null,
  "suggested_fix": null
}
