- Date: 2026-05-21
- Status: Accepted
- Phase: 8
Context
Phase 8 нужен HTTP backend для workflow + composition persistence. Cloudflare даёт два пути:
A. Pages Functions — функции рядом со static site в apps/web/functions/api/*.ts. Деплоятся вместе с CF Pages, тот же origin.
B. Dedicated Worker — отдельный CF Workers project, своя wrangler config, свой subdomain arno-api.{account}.workers.dev.
Decision
Dedicated Worker (apps/api/).
Главный driver — Workers Paid features нужны в фазах 11/13/16:
- Durable Objects (Phase 11 push mutex per §I.3.3) — недоступны в Pages Functions даже на Paid Pages plan
- Cloudflare Queues (Phase 13 webhook DAG ordering, retry queue per §I.3.8) — Workers-only
- Cron Triggers (Phase 16 probes, reconciliation, token refresh per §III.2.4) — Workers-only
Pages Functions покрывают только REST CRUD scenarios. Phase 11+ всё равно потребовал бы переезд:
- Сменить routing (
arno-ijr.pages.dev/api/*→arno-api.workers.dev) - Сменить CORS topology (same-origin → cross-origin)
- Перенос session / auth cookies (domain change)
- ~2 дня work + риск регрессии
Выбираем dedicated Worker сразу = pay-once архитектурное решение.
Trade-offs vs Pages Functions
Cons dedicated Worker:
- Cross-origin: нужен CORS middleware (минимальный — hono/cors)
- Auth куки доменно ограничены — Phase 9 решит через Bearer JWT в Authorization header (per master spec §III.2.6), что и так planned
- Два deploy target'а (Pages для frontend, Worker для API) — manageable, оба через wrangler
Pros:
- Architectural consistency с master spec §III (Workers paid backend)
- Full feature set с Phase 8 day-one
- Скейлится независимо от frontend
- Easier observability (отдельный Worker logs / metrics)
Workers Paid cost
$5/mo activation. Master spec §III.6 сознательно проектировал стек вокруг этой цифры. Без Paid — Phase 11/13/16 ломаются.
Setup
# apps/api/wrangler.toml — name="arno-api", compatibility_flags=["nodejs_compat"]
cd apps/api
wrangler login
wrangler secret put DATABASE_URL # paste Neon connection string
wrangler deploy # → https://arno-api.{account}.workers.devFrontend apps/web/src/lib/api-client.ts указывает на этот URL hardcoded (Phase 13 сделает per-project через .arno/config.json).
Cross-references
- ADR-0001 — static export CF Pages для frontend (stays)
- Master spec §III.1 — Workers Paid в stack
- Master spec §III.2.1 — backend module structure (routes/, services/, repositories/)
- Master spec §III.6 — cost ladder