apps/teach) runs as a native TanStack Start app on Vite+ and Void through
@tuturuuu/start-bridge, produced by the
conversion codemod. All 44 App Router pages
render unchanged through the generic RSC adapter and every route handler is served
by the bridge API registry. next build (package build) remains the Vercel path;
production publication stays held in tuturuuu.ci.ts until a cutover PR.
Cutover packet
Unlike Track and Tasks,
start-bridge.config.ts does not set
unknownHost: 'reject', so the Worker is not restricted to its two declared hosts.
The cutover artifact keeps workers_dev off and declares no routes; attach only the Teach route during the production cutover.
Rollback
Remove only theteach.tuturuuu.com/* Worker route, or restore the captured DNS
record, so the hostname returns to the captured immutable Vercel deployment. Do not
rebuild and do not promote the Vercel project. The Worker holds no state; Teach
data stays in Supabase and Storage, which the rollback does not touch.
Smoke
--expect legacy.
Qualification
teach-cloudflare.yaml builds the native output, rejects route-tree drift,
type-checks (type-check:cloudflare), seals the emitted Worker with
scripts/ci/teach-native-artifact.py and runs the emitted-Worker suite in workerd
(bun run --cwd apps/teach test:runtime, 7 tests, egress denied). The 404 probe
uses /login/__native-smoke-missing__ because every non-public path redirects
signed-out users to login. /api/build-info is public to GET and HEAD through
proxy.ts, with ambient cookies and authorization removed, as in Track and Tasks.
Heavy builds run on a remote host, not the local hub.