platform/architecture/tanstack-rust-migration.
Purpose
Use this runbook when proving the new production target is ready:apps/tanstack-webserves the frontend.apps/backendserves Rust-owned backend routes.- the dual stack runs from production Docker artifacts.
- compare mode proves the legacy and new frontend paths can pass the same smoke suite before traffic moves.
Local Dual-Stack Commands
Validate the compose file without starting anything:docker-compose.tanstack-dual.yml, waits for backend-dual
and tanstack-web-dual to become healthy, runs Playwright in
apps/tanstack-web, and tears the stack down unless --keep-up is passed to
the runner.
Run the focused compare smoke used by CI:
Services And Ports
docker-compose.tanstack-dual.yml exposes only loopback ports by default:
| Service | Container | Default port |
|---|---|---|
| Rust backend | backend-dual | 7820 |
| TanStack frontend | tanstack-web-dual | 7824 |
CI Coverage
The E2E workflow includes a migration matrix:tanstack-dual-stackruns the minimal dual-stack compose runner againstapps/tanstack-web/e2e.compare-smokerunsscripts/run-web-e2e-docker.js --frontend compareagainst a focused public no-auth spec.
tmp/e2e artifacts for failure triage.
Evidence For Gates
The final cutover gate consumes fresh evidence reports:--skip-* evidence flags.
Final Checklist
bun migration:tanstack:cutover-checkpasses with zerolegacy-nextartifacts.- dual-stack Docker E2E passes against
docker-compose.tanstack-dual.yml. - compare-mode Docker E2E passes for both Next and TanStack frontends.
- benchmark compare evidence is fresh and within thresholds.
- Cloudflare smoke probes pass for backend and TanStack origins.
bun migration:tanstack:gatesexits0with all evidence present.- final
bun checkpasses or has only documented unrelated blockers.
apps/web available as rollback fallback until the cutover window is
complete and the post-cutover smoke has stayed green.