Skip to content

CI and Cloudflare publication

The trading droplet was retired on September 14, 2026. All active checks and Cloudflare publication jobs run on ephemeral GitHub-hosted ubuntu-latest runners. No workflow can restart the trading runtime.

Workflow Trigger Checks
CI (Fast) Pull requests to main Ruff, format, strict mypy, hermetic pytest
CI Main pushes and manual Same plus coverage
Cloudflare Terminal Web/edge/workflow changes in pull requests and main Worker authentication tests, frontend lint/static build, Pages Functions build
Security Scan Security-relevant changes and manual SBOM and Grype
Backtest regression Manual definition; disabled in repository UI Golden tests; no broker credentials

The old nightly/report/watchdog schedules are removed. The droplet API deploy and other historical operations are unconditionally disabled. See hosting and retirement status.

Local validation

Use the repository virtualenv, without loading a broker environment file:

ruff check .
ruff format --check .
make lint
pytest -n auto --dist loadscope -m "not slow and not paper and not integration"
pytest -n auto --dist loadscope --cov -m "not slow and not paper and not integration"

The strict-mypy module subset is listed in both CI workflows. CI excludes tests requiring external services or paper-account credentials; those checks are not required for publishing the Cloudflare app and must not be run against a broker.

The shared setup action caches dependencies separately from historical droplet caches. PostgreSQL and Redis service containers are job-local test fixtures, not production services.

Cloudflare publication jobs use QGTMAI secrets. The web workflow deploys the private qgtm-terminal-api authentication Worker and qgtm-trading Pages project with a service binding. It preserves the existing founder password hashes as Worker secrets and verifies public health plus anonymous-session rejection. A successful software build does not approve trading, strategy promotion, or a replacement runtime.