{
  "checker": {
    "claims": [
      {
        "claim": "A table the caller may not read is never selected as a candidate, so it cannot reach the prompt",
        "command": "<guest-path> demo 'salary by employee'",
        "evidence": "10 of 42 objects selected\n\n  main.hr_employee\n  main.v_employee_headcount\n  main.sales_order_status\n  main.sales_invoice_draft\n  main.core_country\n  main.billing_credit_note\n  main.core_party\n  main.hr_department\n  main.sales_order\n  main.billing_invoice\n\n",
        "expected": "10 of 42 objects selected for a default caller without the payroll role",
        "input": "salary by employee",
        "kind": "claim",
        "outcome": "Real input produced the expected result: 10 of 42 objects selected",
        "returncode": 0,
        "source": "A table the caller can't read is never a candidate, so it can't",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected: langchain_schemagate/__init__.py exports only SchemagateRetriever and prompt_fragment (a BaseRetriever library, no CLI, server, cron, scheduler, loop, webhook or --once/--now option). The schemagate dependency's CLI has no scheduler either. Nothing in this repo runs on a schedule, so no product cycle exists.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected: langchain_schemagate/__init__.py exports only SchemagateRetriever and prompt_fragment (a BaseRetriever library, no CLI, server, cron, scheduler, loop, webhook or --once/--now option). The schemagate dependency's CLI has no scheduler either. Nothing in this repo runs on a schedule, so no product cycle exists.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "demo",
        "salary by employee",
        "--principal",
        "okta:hr",
        "--role",
        "payroll"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "",
      "stdout": "schemagate 1.14.0 -- demo schema, 42 objects, caller okta:hr roles=['payroll']\nhr_compensation is restricted to the 'payroll' role.\n\n> salary by employee\n9 of 42 objects selected\n\n  main.hr_compensation\n  main.hr_employee\n  main.v_employee_headcount\n  main.sales_order_status\n  main.sales_invoice_draft\n  main.core_country\n[excerpt truncated]",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "repo test suite (CI command pytest -q) runs LangChain standard retriever tests and the access-control test",
        "command": "<guest-path> -q",
        "deferred": false,
        "evidence": "te-packages/pytest_asyncio/plugin.py:300: PytestDeprecationWarning: The configuration option \"asyncio_default_fixture_loop_scope\" is unset.\nThe event loop scope for asynchronous fixtures will default to the \"fixture\" caching scope. Future versions of pytest-asyncio will default the loop scope for asynchronous fixtures to \"function\" scope. Set the default fixture loop scope explicitly in order to avoid unexpected behavior in the future. Valid fixture loop scopes are: \"function\", \"class\", \"module\", \"package\", \"session\"\n\n  warnings.warn(PytestDeprecationWarning(_DEFAULT_FIXTURE_LOOP_SCOPE_UNSET))",
        "expected": "all tests pass",
        "input": "pytest -q",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": ".github/workflows/ci.yml",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "The README's Python quickstart (Catalog().bootstrap on localhost Postgres) was not run: no Postgres database in the guest.",
    "The README has no CLI; the probe uses the schemagate CLI (documented in the schemagate dependency's packaged README, which the langchain README links to) as the real product entry point.",
    "Python 3.12.3 was used (requires-python >=3.10;"
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Select the tables a question needs, filtered by the caller's roles, using the schemagate engine that langchain-schemagate wraps",
  "operation_scope": "Offline selection against schemagate's bundled 42-object demo schema, run via the documented schemagate demo CLI. The README's Postgres bootstrap (Catalog().bootstrap('postgresql://localhost/app')) and the LangChain retriever Python API were not run directly: no database is available in the guest, and the README gives Python code, not a CLI.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "pip install -e \".[test]\"  (in a Python 3.12 venv at <guest-path>; CI command from .github/workflows/ci.yml)",
    "pytest -q  (7 passed)",
    "schemagate demo \"salary by employee\"  (analyst caller: 10 of 42 objects selected, hr_compensation absent)",
    "schemagate demo \"salary by employee\" --principal okta:hr --role payroll  (9 of 42 selected, main.hr_compensation present)"
  ],
  "stuck_step": null,
  "suggested_fix": "None for the tested path. To cover the README quickstart, run it against a Postgres instance and check that the retriever returns only tables the caller may read."
}
