M5: Railway staging results ADR (ENG-271) #34

Merged demi.dev
targeting main from stoopkidddd/eng-271-railway-deploy-adr
Merged opened by and assigned to demi.dev
targeting main from stoopkidddd/eng-271-railway-deploy-adr
Linear: https://linear.app/engineereddev/issue/ENG-271 Docs only (2 files). Records the staging results the issue requires in an ADR: - New `docs/adr/0004-railway-staging-verification.md`: - §18.1: Railway Buckets accept `PutBucketCors`; both environments resolve `UPLOAD_MODE=auto` to direct. Staging smoke all PASS (incl. 2 MB file); a real Chromium upload from the staging origin got PUT 200 to the bucket, push 201, no CORS errors. - §18.2: keep overlap 0 s / draining 15 s. 150 notes sent across a staging redeploy: 0 send failures, 0 missing, 0 duplicates; the listener reconnected ~3 s after the old instance stopped. (Which instance wrote each push wasn't recorded.) - An idle WebSocket held ~11 min through Railway's proxy (one upgrade), and a note after 10 idle minutes arrived live. - ADR 0001's settings and the §12.3 bucket-reference variables were applied through the Railway API/MCP rather than committed IaC (avoids adding the Railway SDK for one service); ENG-273's template carries them. - `docs/SPEC.md` §18.1 and §18.2: each gets a "Verified on 2026-11-01" note linking ADR 0004. Verify: `mise run check:infra` exit 0. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Commits 2

M5: Say Railway settings are applied through the Railway API (ENG-271)
M5: Record Railway staging results for uploads and deploy handoff (ENG-271)