coldpass

ashishsinha1602/schemagate

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works · Linux / Luna: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/ashishsinha1602--schemagate.svg).

mcp-server

Works

The recorded run passed on 2 setups.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyesyes

Linux / Haiku 5.5: yes · Oct 27, 2026 · 0a1c23ae0ec9 · claude-code / 2.1.310 (Claude Code)
Recorded operation: <guest-path> --url demo · local stdio MCP start + initialize + tools/list

Linux / Luna: yes · Oct 27, 2026 · 0a1c23ae0ec9 · codex / codex-cli 0.164.0
Recorded operation: /tmp/sgvenv/bin/schemagate demo 'salary by employee'

Does what it says
1 of 1 claims checked out
  • Demo filters a restricted table for the caller: Real input produced the expected result: hr_compensation is restricted to the 'payroll' role.

    Source: schemagate demo "salary by employee" # hr_compensation absent

    Input: salary by employee

    Expected: hr_compensation is restricted to the 'payroll' role.

    Command: /tmp/sgvenv/bin/schemagate demo 'salary by employee'

    Observed: hr_compensation is restricted to the 'payroll' role. > salary by employee 10 of 42 objects selected main.hr_employee main.v_employee_headcount main.sales_order_status main.sales_invoice_draft main.core_country main.billing_credit_note main.core_party main.hr_department main.sales_order main.billing_invoice

MCP
Documented only
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 0 days ago; 382 commits and 173 merged PRs in 90 days; 0 open issues, 1 open PRs; latest release 2026-10-27

Last commit Oct 27, 2026

Setup time
1 min 18 s
1 min 18 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • Select relevant objects from bundled demo schema: command completed successfully

    Source: README.md, Same question, two callers

    Input: salary by employee

    Expected: restricted hr_compensation is omitted

    Command: /tmp/sgvenv/bin/schemagate demo 'salary by employee'

    Observed: schemagate 1.14.0 -- demo schema, 42 objects, caller demo:analyst roles=- hr_compensation is restricted to the 'payroll' role. > salary by employee 10 of 42 objects selected main.hr_employee main.v_employee_headcount main.sales_order_status main.sales_invoice_draft main.core_country main.billing_credit_note main.core_party main.hr_department main.sales_order main.billing_invoice

Evidence
README behavior checked
Agent interfaces
CLI, MCP (documented only)
CLI, MCP (documented only)

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

Tested with
Codex / Luna
  • Linux: Codex / Luna · agent codex-cli 0.164.0 · Checked operation passed · Oct 27, 2026 on 0a1c23ae0ec9

Each entry describes its recorded operation and source revision.

Safety
No unexpected network or file activity found in these checks

No problems traced to this repository code in these checks; a short run cannot prove safety. 2 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict.

Gitleaks found a possible hardcoded secret; value withheld. scripts/build_site.py

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation <guest-path> --url demo · local stdio MCP start + initialize + tools/list

Agent-reported scope: Install schemagate from the pinned source and run its text-to-SQL schema selection: the demo CLI and the schemagate-mcp server (select_schema tool), which filter the schema by the caller's roles so restricted tables are absent or present.

MCP server returned: schemagate · version 1.14.0.

MCP tools returned: select_schema, list_objects, describe_object, run_query, semantic_query, answer, deep_answer, refresh_catalog, health. Tool listing does not establish authenticated tool-call success.

Run details
run
ashishsinha1602--schemagate-claude-haiku-5-5-1793152981068694457
date
Oct 27, 2026
time to working
384.3s
product hosting / execution
Local stdio MCP server in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.310 (Claude Code)
platform
linux
reported cost
$0.021775
Recorded source
https://github.com/ashishsinha1602/schemagate
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "0a1c23ae0ec9038cfe97260154d973311a864839", "url": "https://github.com/ashishsinha1602/schemagate"}
Test version
readme-c03644542c69939a9374958136a8b3431f7456269d3fb4b3c433785f59cfd637
revision
0a1c23ae0ec9038cfe97260154d973311a864839
Whose fault: not assigned · resolved

Safety: Review signals: 1 hardcoded secret.

Review signals: 1 hardcoded secret.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

Gitleaks found a possible hardcoded secret; value withheld. scripts/build_site.py

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Restricted tables are scoped to the caller's roles: with the payroll role, hr_compensation is selected: Real input produced the expected result: hr_compensation

    Source: Absent, not ranked low. A table the caller may not read never enters the

    Input: {"tool": "select_schema", "arguments": {"question": "salary by employee", "principal": "okta:hr", "roles": ["payroll"]}}

    Expected: hr_compensation is in the selection

    Command: <guest-path> --url demo tools/call {"tool": "select_schema", "arguments": {"question": "salary by employee", "principal": "okta:hr", "roles": ["payroll"]}}

    Observed: …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 \"main.core_party\",\n \"main.hr_department\",\n \"main.sales_order\"\n ],\n \"ddl\": \"-- salary history; restricted\\nTABLE main.hr_compensation (\\n id INTEGER PK,\\n id_employee INTEGER,\\n effective_from TEXT,\\n annual_amount REAL,\\n currency TEXT,\\n pay_grade TEXT\\n)\\n-- FK hr_compensation(id_employee) -> hr_employee\\n\\nTABLE main.hr_employee (\\n id INTEGER PK,\\n id_party INTEGER,\\

  • The demo CLI with --principal okta:hr --role payroll ranks hr_compensation as selected: Real input produced the expected result: main.hr_compensation

    Source: schemagate demo "salary by employee" --principal okta:hr --role payroll # now it is first

    Input: salary by employee, principal okta:hr, role payroll

    Expected: main.hr_compensation listed

    Command: <guest-path> demo 'salary by employee' --principal okta:hr --role payroll

    Observed: …main.hr_compensation main.hr_employee main.v_employee_headcount main.sales_order_status main.sales_invoice_draft main.core_country main.core_party main.hr_department main.sales_order

Examples

  • demo --prompt prints the DDL the model gets: command completed successfully

    Source: README.md: schemagate demo "late shipments by carrier" --prompt # the DDL the model gets

    Input: late shipments by carrier --prompt

    Expected: DDL with TABLE main.ship_carrier

    Command: <guest-path> demo 'late shipments by carrier' --prompt

    Observed: count_pct REAL, line_net REAL ) -- FK sales_order_line(id_product) -> cat_product -- FK sales_order_line(id_order) -> sales_order TABLE main.core_party ( id INTEGER PK, display_name TEXT, party_type TEXT, id_primary_address INTEGER, status TEXT, created_at TEXT ) -- FK core_party(id_primary_address) -> core_address TABLE main.cat_product ( id INTEGER PK, sku TEXT, name TEXT, id_category INTEGER, unit_of_measure TEXT, list_price REAL, status TEXT, is_serialised INTEGER ) -- FK cat_product(id_category) -> cat_category (inferred from the column name, not declared)

  • offline CLI test suite runs under pytest: command completed successfully

    Source: TESTING.md: everything on this page runs from `pytest`

    Input: tests/test_cli.py

    Expected: 13 passed

    Command: <guest-path> tests/test_cli.py -q -p no:cacheprovider

    Observed: ............. [100%] 13 passed in 34.73s

Local or hosted: local

What the agent did

Install schemagate from the pinned source and run its text-to-SQL schema selection: the demo CLI and the schemagate-mcp server (select_schema tool), which filter the schema by the caller's roles so restricted tables are absent or present.

cd <guest-path> && pwd && ls -la && git status 2>&1 | head -3; id -u; python3 --version; cat README.md 2>/dev/null | head -150
cd <guest-path> && grep -n -i "requires-python\|^## \|^### " README.md | head -80; grep -n "requires-python" pyproject.toml; ls <guest-path> /inputs 2>&1
cd <guest-path> && sed -n 184,300p README.md
cd /tmp && python3 -m venv <guest-path> 2>&1; <guest-path> --version; <guest-path> install -q --upgrade pip 2>&1 | tail -3
cd /tmp && <guest-path> install <guest-path> 2>&1 | tail -5; <guest-path> --version 2>&1 | head -3
cd /tmp && S=<guest-path>; $S demo "salary by employee"; echo "rc=$?"; echo ----; $S demo "salary by employee" --principal okta:hr --role payroll; echo "rc=$?"
cd <guest-path> && sed -n 1021,1100p README.md | cut -c1-400
cd /tmp && <guest-path> install '<guest-path>' 2>&1 | tail -2; ls <guest-path> | grep -i schemagate; which uv
cd <guest-path> && grep -n "^def \|^async def \<email>\<email>" src/schemagate/mcp_server.py | head -60
cd <guest-path> && sed -n 906,925p src/schemagate/mcp_server.py; sed -n 1509,1530p src/schemagate/mcp_server.py | head -30
cd <guest-path> && cat > .coldpass/probe.json <<'EOF'
{"kind":"mcp","argv":["<guest-path>","--url","demo"],"cwd":"<guest-path>","tool":"select_schema","arguments":{"question":"salary by employee","principal":"okta:hr","roles":["payroll"]},"expected_text":"hr_compensation"}
EOF
python3 -m json.tool .coldpass/probe.json >/dev/null && echo ok; sed -n 1,60p <guest-path> | grep -n "argv\|--validate\|--replay\|argparse\|add_argument" | head -30
cd <guest-path> && grep -n "add_argument\|def main\|expected_text\|probe.json\|claims.json\|examples.json\|cycles.json\|report.json" check.py | head -50
cd <guest-path> && grep -rn -i "cron\|--once\|schedule\|webhook\|while True" src/schemagate/*.py | head -15; echo ----; ls examples tests | head -40; echo ----; grep -n "pytest\|python -m\|make " README.md TESTING.md | head -20
cd <guest-path> && sed -n 300,380p README.md | cut -c1-300
cd <guest-path> && cat > .coldpass/claims.json <<'EOF'
[
{"kind":"claim","claim":"Restricted tables are scoped to the caller's roles: with the payroll role, hr_compensation is selected","source":"README.md","quote_line":"","source_file":"README.md","input":"salary by employee, principal okta:hr, role payroll","expected":"hr_compensation is in the selection","probe_kind":"mcp","argv":["<guest-path>","--url","demo"],"tool":"select_schema","arguments":{"question":"salary by employee","principal":"okta:hr","roles":["payroll"]},"expected_text":"hr_compensation","cwd":"<guest-path>","quote":"Absent, not ranked low. A table the caller may not read never enters the"},
{"kind":"claim","claim":"The demo CLI with --principal okta:hr --role payroll ranks hr_compensation as selected","source":"README.md","input":"salary by employee, principal okta:hr, role payroll","expected":"main.hr_compensation listed","probe_kind":"cli","argv":["<guest-path>","demo","salary by employee","--principal","okta:hr","--role","payroll"],"expected_text":"main.hr_compensation","cwd":"<guest-path>","quote":"schemagate demo \"salary by employee\" --principal okta:hr --role payroll  # now it is first"}
]
EOF
python3 -m json.tool .coldpass/claims.json >/dev/null && echo ok
cd <guest-path> && cat > .coldpass/claims.json <<'EOF'
[
{"kind":"claim","claim":"Restricted tables are scoped to the caller's roles: with the payroll role, hr_compensation is selected","source":"Absent, not ranked low. A table the caller may not read never enters the","input":"salary by employee, principal okta:hr, role payroll","expected":"hr_compensation is in the selection","probe_kind":"mcp","argv":["<guest-path>","--url","demo"],"tool":"select_schema","arguments":{"question":"salary by employee","principal":"okta:hr","roles":["payroll"]},"expected_text":"hr_compensation","cwd":"<guest-path>"},
{"kind":"claim","claim":"The demo CLI with --principal okta:hr --role payroll ranks hr_compensation as selected","source":"schemagate demo \"salary by employee\" --principal okta:hr --role payroll  # now it is first","input":"salary by employee, principal okta:hr, role payroll","expected":"main.hr_compensation listed","probe_kind":"cli","argv":["<guest-path>","demo","salary by employee","--principal","okta:hr","--role","payroll"],"expected_text":"main.hr_compensation","cwd":"<guest-path>"}
]
EOF
python3 -m json.tool .coldpass/claims.json >/dev/null && echo ok && cd <guest-path> && grep -c "Absent, not ranked low. A table the caller may not read never enters the" README.md; grep -c 'schemagate demo "salary by employee" --principal okta:hr --role payroll  # now it is first' README.md
cd /tmp && <guest-path> demo "late shipments by carrier" --prompt > <guest-path> 2>&1; echo rc=$?; head -c 900 <guest-path>; echo; grep -c "CREATE" <guest-path>
cd <guest-path> && sed -n 1,40p TESTING.md | cut -c1-250
cd <guest-path> && <guest-path> install -q pytest 2>&1 | tail -2; timeout 600 <guest-path> -m pytest tests/test_cli.py -q -p no:cacheprovider 2>&1 | tail -8
cd <guest-path> && cat > .coldpass/examples.json <<'EOF'
[
{"kind":"example","claim":"demo --prompt prints the DDL the model gets","source":"README.md: schemagate demo \"late shipments by carrier\" --prompt   # the DDL the model gets","input":"late shipments by carrier --prompt","expected":"DDL with TABLE main.ship_carrier","argv":["<guest-path>","demo","late shipments by carrier","--prompt"],"cwd":"<guest-path>","expected_text":"TABLE main.ship_carrier ("},
{"kind":"example","claim":"offline CLI test suite runs under pytest","source":"TESTING.md: everything on this page runs from `pytest`","input":"tests/test_cli.py","expected":"13 passed","argv":["<guest-path>","tests/test_cli.py","-q","-p","no:cacheprovider"],"cwd":"<guest-path>","expected_text":"13 passed"}
]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Entry points inspected: schemagate CLI (demo, select, studio, describe, certify) and schemagate-mcp are one-shot commands or servers that answer requests; grep of src/schemagate for cron, schedule, --once, webhook and while-True loops found no scheduler or product cycle. Each command runs once per invocation.","checks":[]}
EOF
python3 -m json.tool .coldpass/examples.json >/dev/null && python3 -m json.tool .coldpass/cycles.json >/dev/null && echo ok
cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay 2>&1 | tail -c 4000
cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > <guest-path> 2><guest-path>; echo rc=$?; python3 -I -c "
import json,sys
d=json.load(open('<guest-path>'))
print({k:(v if not isinstance(v,(dict,list)) else type(v).__name__) for k,v in d.items()})
p=d.get('probe') or d.get('probe_check')
print('PROBE:', json.dumps(p)[:600])
for c in d.get('claim_checks',[]): print('CLAIM:', c.get('verdict'), c.get('outcome'))
" ; tail -c 600 <guest-path>
cd <guest-path> && python3 -I -c "
import json
d=json.load(open('<guest-path>'))
print('problems:', d['problems'])
r=d['replay']; print('replay keys:', list(r.keys()))
for k,v in r.items():
    if isinstance(v,dict): print(k, {kk:(str(vv)[:200]) for kk,vv in v.items()})
    elif isinstance(v,list):
        for x in v: print(k, str({kk:str(vv)[:160] for kk,vv in x.items() if kk in ('kind','verdict','outcome','returncode','claim')}))
    else: print(k, str(v)[:200])
"
cd <guest-path> && cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Install schemagate from the pinned source and run its text-to-SQL schema selection: the demo CLI and the schemagate-mcp server (select_schema tool), which filter the schema by the caller's roles so restricted tables are absent or present.","operation_scope":"Local, offline, bundled 42-object demo schema (no database, no API key, no model call). Python 3.12.3 in a venv at <guest-path> Not covered: --answer (needs a model provider key), describe, studio, certify, and real database engines.","steps":["python3 -m venv <guest-path>","<guest-path> install <guest-path>  (README: pip install schemagate; installed from the pinned checkout instead)","<guest-path> demo \"salary by employee\"  -> hr_compensation absent for caller demo:analyst","<guest-path> demo \"salary by employee\" --principal okta:hr --role payroll  -> main.hr_compensation listed","<guest-path> install '<guest-path>'  (README MCP section needs the mcp extra; uvx was not used)","<guest-path> --url demo  (MCP tool select_schema with principal okta:hr, roles [payroll] -> 9 objects including main.hr_compensation)","<guest-path> demo \"late shipments by carrier\" --prompt  -> DDL with TABLE main.ship_carrier","<guest-path> tests/test_cli.py -q -p no:cacheprovider  -> 13 passed"],"deviations":["Installed from the pinned local checkout (pip install <guest-path>) instead of PyPI 'pip install schemagate'; the installed version is 1.14.0.","Installed MCP extra with pip into the venv instead of the README's uvx route (uv is present but was not used).","The first test run used 'python -m pytest'; the recorded example uses the pytest executable from the venv.","The checker path /inputs/coldpass-preflight.py does not exist in this guest; used <guest-path> as instructed by the environment.","Not exercised because they need a model key or a real database: schemagate demo --answer, select against a real engine, describe, studio, certify.","No product scheduler or cycle exists, so cycles.json has detected:false."],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
python3 -m json.tool .coldpass/report.json >/dev/null && echo report-ok; ls .coldpass; rm -f <guest-path> <guest-path>
Earlier attempts (1)

Luna

Native agent · Checked operation passed

Checked operation /tmp/sgvenv/bin/schemagate demo 'salary by employee'

Agent-reported scope: Run schemagate demo against the bundled schema

Run details
run
ashishsinha1602--schemagate-gpt-6-luna-1793153351813344367
date
Oct 27, 2026
time to working
77.7s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.164.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/ashishsinha1602/schemagate
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "0a1c23ae0ec9038cfe97260154d973311a864839", "url": "https://github.com/ashishsinha1602/schemagate"}
Test version
readme-3be879002729975eaa9c9bc49f02188330eb783b8fc02944604e0325529353be
revision
0a1c23ae0ec9038cfe97260154d973311a864839
Whose fault: not assigned · resolved

Safety: Review signals: 1 hardcoded secret.

Review signals: 1 hardcoded secret.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

Gitleaks found a possible hardcoded secret; value withheld. scripts/build_site.py

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Demo filters a restricted table for the caller: Real input produced the expected result: hr_compensation is restricted to the 'payroll' role.

    Source: schemagate demo "salary by employee" # hr_compensation absent

    Input: salary by employee

    Expected: hr_compensation is restricted to the 'payroll' role.

    Command: /tmp/sgvenv/bin/schemagate demo 'salary by employee'

    Observed: hr_compensation is restricted to the 'payroll' role. > salary by employee 10 of 42 objects selected main.hr_employee main.v_employee_headcount main.sales_order_status main.sales_invoice_draft main.core_country main.billing_credit_note main.core_party main.hr_department main.sales_order main.billing_invoice

Examples

  • Select relevant objects from bundled demo schema: command completed successfully

    Source: README.md, Same question, two callers

    Input: salary by employee

    Expected: restricted hr_compensation is omitted

    Command: /tmp/sgvenv/bin/schemagate demo 'salary by employee'

    Observed: schemagate 1.14.0 -- demo schema, 42 objects, caller demo:analyst roles=- hr_compensation is restricted to the 'payroll' role. > salary by employee 10 of 42 objects selected main.hr_employee main.v_employee_headcount main.sales_order_status main.sales_invoice_draft main.core_country main.billing_credit_note main.core_party main.hr_department main.sales_order main.billing_invoice

Local or hosted: local

What the agent did

Run schemagate demo against the bundled schema

pwd; git rev-parse --is-inside-work-tree; git status --short; sed -n '1,240p' README.md; python3 --version; id -u
rg -n '^##|schemagate demo|pip install|pytest|uv |python' README.md; rg --files -g 'pyproject.toml' -g 'setup.py' -g 'src/**' | head -40
git init; git remote add origin https://github.com/ashishsinha1602/schemagate; git fetch --depth 1 origin 0a1c23ae0ec9038cfe97260154d973311a864839; git reset --mixed FETCH_HEAD
sed -n '1,240p' README.md; ls -la
python3 -m venv /tmp/sgvenv; /tmp/sgvenv/bin/pip install -e .; /tmp/sgvenv/bin/schemagate demo "salary by employee";
mkdir -p .coldpass; cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["/tmp/sgvenv/bin/schemagate","demo","salary by employee"],"cwd":"<guest-path>","expected_text":"hr_compensation is restricted to the 'payroll' role."}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"Demo filters a restricted table for the caller","source":"schemagate demo \"salary by employee\"                                     # hr_compensation absent","input":"salary by employee","expected":"hr_compensation is restricted to the 'payroll' role.","probe_kind":"cli","argv":["/tmp/sgvenv/bin/schemagate","demo","salary by employee"],"expected_text":"hr_compensation is restricted to the 'payroll' role.","cwd":"<guest-path>"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"README documents direct CLI selection and an interactive studio; inspected product entry points do not expose a scheduler, recurring cycle, webhook, or one-shot cycle trigger.","checks":[]}
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Select relevant objects from bundled demo schema","source":"README.md, Same question, two callers","input":"salary by employee","expected":"restricted hr_compensation is omitted","argv":["/tmp/sgvenv/bin/schemagate","demo","salary by employee"],"cwd":"<guest-path>","expected_text":"hr_compensation is restricted to the 'payroll' role."}]
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Run schemagate demo against the bundled schema","operation_scope":"Python 3.12.3 virtual environment; installed editable package and SQLAlchemy","steps":["python3 -m venv /tmp/sgvenv","/tmp/sgvenv/bin/pip install -e .","/tmp/sgvenv/bin/schemagate demo \"salary by employee\"","Validated and replayed probe, README claim, and example successfully"],"deviations":[],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF