Skip to content

Design Decisions

These are intentional v0.2.x product choices. Prefer deleting and replacing over compatibility layers unless a change explicitly scopes legacy work.

Local-First, No Hosted Data Service

Why: keeps MIT distribution, data ownership, and rate limits honest; avoids shipping production data in the canonical tree.

See Scope and non-goals.

No Warehouse Migrations

Layout and mart contracts may break between 0.2.x releases. Operators with an older DuckDB file should delete oddsfox.duckdb* and rebuild.

Why: the project is too new to carry a migration surface; reset is smaller and safer than dual-read shims.

Fixed Scopes, Not Runtime Selectors

run_scope.py accepts only the shipped refs (polymarket:wc2026, polymarket:soccer, kalshi:wc2026). Dedicated advanced jobs such as Polygon settlement sit outside that chooser. Dagster asset configs do not accept arbitrary runtime scope strings.

Why: keeps asset keys, dbt selectors, contracts, and docs aligned; prevents half-wired scopes.

See Choose a scope.

Polygon Settlement Isolation

Why: historical on-chain evidence has different trust, privacy, and operational boundaries than quote/CLOB history.

See Scope and non-goals, Recreate Polygon settlement mart, and Data contracts.