Haiku 5.5
Native agent · Checked operation passedChecked 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
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.
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>run JSON · checker evidence · agent report + check · transcript excerpt · error excerpt unavailable