{
  "checker": {
    "claims": [
      {
        "claim": "sqlty check reports a narrow-type error and exits non-zero when an annotation is too narrow for the schema",
        "command": "<guest-path> check .",
        "evidence": "[narrow-type] SQL[tuple[int, str]] should be SQL[tuple[int, str | None]]\nFound 1 error(s)\n",
        "expected": "finding printed and exit code 1",
        "input": "queries.py annotates email as str but schema has it nullable",
        "kind": "claim",
        "outcome": "Real input produced the expected result: [narrow-type] SQL[tuple[int, str]] should be SQL[tuple[int, str | None]]",
        "returncode": 1,
        "source": "`narrow-type` is an error, so CI fails on",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "rewrite only touches the wrapper and never the SQL string",
        "command": "<guest-path> rewrite --diff .",
        "evidence": "SQL[tuple[int, str]](\"--sql\\nSELECT id::INTEGER, name::TEXT FROM users\")\n",
        "expected": "diff adds SQL[tuple[int, str]] wrapper around the unchanged SQL text",
        "input": "queries.py with q = \"--sql\\nSELECT id::INTEGER, name::TEXT FROM users\" (plain string)",
        "kind": "claim",
        "outcome": "Real input produced the expected result: SQL[tuple[int, str]](\"--sql\\nSELECT id::INTEGER, name::TEXT FROM users\")",
        "returncode": 1,
        "source": "`rewrite` and `strip` only touch the wrapper, never the SQL, so you can adopt",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected: sqlty has subcommands rewrite, strip, check, breaking, rule, skill, version (sqlty --help). Each runs once and exits; grep of src/sqlty for cron, schedule, --once, --now, daemon, webhook and while-loops found no scheduler or loop. No product cycle exists, so nothing was triggered.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected: sqlty has subcommands rewrite, strip, check, breaking, rule, skill, version (sqlty --help). Each runs once and exits; grep of src/sqlty for cron, schedule, --once, --now, daemon, webhook and while-loops found no scheduler or loop. No product cycle exists, so nothing was triggered.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "check",
        "."
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 1,
      "scope": "product operation",
      "stderr": "",
      "stdout": "queries.py:3: [narrow-type] SQL[tuple[int, str]] should be SQL[tuple[int, str | None]]\nFound 1 error(s)",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "quick start project passes sqlty check",
        "command": "<guest-path> check .",
        "deferred": false,
        "evidence": "",
        "expected": "exit 0, no findings",
        "input": "sqlty check . in a copy of examples/01_quick_start",
        "kind": "example",
        "outcome": "command completed successfully with no output",
        "returncode": 0,
        "source": "examples/01_quick_start/README.md",
        "verdict": "yes"
      },
      {
        "claim": "schema inference project passes sqlty check without casts",
        "command": "<guest-path> check .",
        "deferred": false,
        "evidence": "",
        "expected": "exit 0, no findings",
        "input": "sqlty check . in a copy of examples/02_schema_inference",
        "kind": "example",
        "outcome": "command completed successfully with no output",
        "returncode": 0,
        "source": "examples/02_schema_inference/README.md",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "README requires Python 3.14+; guest default python3 is 3.12.3, so installed CPython 3.14.9 with uv (uv venv --python 3.14). Repo .python-version says 3.15; README is followed.",
    "Installed sqlty from PyPI as the README documents (pip install \"sqlty[psycopg]\"), not from the pinned checkout source.",
    "examples/02_schema_inference round trip (strip then rewrite) is not a no-diff: rewrite reflowed one long wrapped SQL[...] call onto a single line. Source README says 'round trip, no diff'. Cosmetic only.",
    "check --fix was verified by hand in a scratch project but is not a replayed claim, because it mutates files and would not be repeatable on replay.",
    "Checker path /inputs/coldpass-preflight.py does not exist in this VM; ran <guest-path> with the same --validate --replay flags instead.",
    "Examples were run on copies under <guest-path> so the checkout stays unmodified; claim and probe fixtures live under <guest-path>"
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Type-check raw SQL strings with the sqlty CLI: sqlty check reports a narrow-type mismatch against a schema, sqlty rewrite wraps --sql strings in SQL[T], and check --fix updates the annotation",
  "operation_scope": "Linux x86_64 guest, Python 3.14.9 (installed via uv because the README requires 3.14+; guest default is 3.12.3), sqlty 0.2.2 from PyPI with the psycopg extra, no database connection needed",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "uv venv --python 3.14 <guest-path>",
    "uv pip install --python <guest-path> \"sqlty[psycopg]\"",
    "sqlty rewrite -v . (fresh project in <guest-path>)",
    "sqlty check . (exit 0)",
    "sqlty strip . (back to plain string)",
    "sqlty check . on schema fixture (narrow-type finding, exit 1)",
    "sqlty check --fix . (annotation became SQL[tuple[int, str | None]], recheck exit 0)",
    "examples/01_quick_start and examples/02_schema_inference: sqlty check . (exit 0) on copies"
  ],
  "stuck_step": null,
  "suggested_fix": "None required for the tested behavior. Optional: make example 02's round trip match its 'no diff' wording, or have rewrite keep the original line wrapping."
}
