V-Trade is an auditable, paper-only prediction-market experiment. The active release
is vtrade-kalshi-v1: it discovers ordinary binary Kalshi markets, exposes YES/NO
outcomes, and simulates IOC/FOK orders against real public market data without
submitting orders to a venue.
The active release has one experiment, one clean seven-migration database chain, and
no compatibility loader, dual venue, dual write, legacy upgrade, or real-execution
fallback. Historical research is retained only under
docs/archive/predictionarena/; that archive is
read-only evidence and is never imported or loaded by the application.
Python 3.12 and the locked development environment are required:
$env:UV_CACHE_DIR='.uv-cache'
uv sync --extra dev
uv run --extra dev python -m pytest
uv run --extra dev python -m ruff check src tests
uv run --extra dev python -m mypy src/vtrade
uv run --extra dev python -m vtrade.release_verification
uv run --extra dev python scripts/verify_kalshi_cutover_evidence.py
docker compose -f compose.coolify.yaml config --quietThe release verifier checks frozen artifact hashes, the exact migration chain, the archive boundary, the fixture manifest, and the zero-active-legacy-venue sweep. The cutover evidence verifier binds the recorded six-gate handoff to those hashes and reports a partial record as blocked; local tests do not claim external checks.
Deploy a disposable empty PostgreSQL target with the real private object store. The
sequence is migrate -> authenticated API readiness -> worker. /health/live is
cheap and provider-independent. /health/ready checks the database, latest
migration, private configuration, storage, and active artifact contract; it does not
call Kalshi, model, or research providers.
The image verifies active artifacts before dropping privileges. Missing private resources, reviewed external fixture evidence, or migrations fail closed; the operator cutover evidence check also fails closed before worker startup. Real Kalshi authentication, signing, WebSockets, and order submission are not part of this release.
See docs/runtime-operations.md for the operator
runbook and docs/adr/0002-kalshi-only-paper-cutover.md
for the irreversible fresh-database cutover decision.