V3 QA — Scenario 1: DB Schema (Task 0c)
=========================================

Test file: experiments/v3/tests/test_db_schema.py
Result: 6/6 PASSED

TestCreateTables::test_creates_all_tables PASSED
TestCreateTables::test_idempotent_if_not_exists PASSED
TestVerifySchema::test_returns_true_for_full_schema PASSED
TestVerifySchema::test_returns_false_if_table_missing PASSED
TestVerifySchema::test_returns_false_if_column_missing PASSED
TestVerifySchema::test_orderbook_snapshots_exists PASSED

Tables verified:
- markets (ticker PRIMARY KEY, strike_type, floor_strike, ceiling_strike, ...)
- forecast_snapshots (ticker, timestep, forecast_temp_f, source, ...)
- market_prices (ticker, timestep, yes_price, no_price, trade_count, ...)
- settlement_results (ticker PRIMARY KEY, actual_temp_f, settlement_result, ...)
- forecast_accuracy (city, lead_time, mae, bias, sample_count, ...)
- orderbook_snapshots (ticker, timestep, yes_bids_json, best_yes_bid, ...)
- treatment_decisions (run_id, ticker, timestep, treatment_name, replicate, decision, ...)
- experiment_runs (run_id, treatment_names_json, status, ...)

EDGE CASE: Empty :memory: DB
  → verify_schema returns false for missing tables (correct behavior)
  → Querying nonexistent table raises OperationalError (caught gracefully by verify-data)

VERDICT: PASS
