2.0 KiB
Integration — the client↔server seam
Populated by phase 2 — not yet written, except the OpenAPI snapshot, which phase 0 refreshed. Until then the contract lives in dev/contracts/ (frozen 2026-07-13) and the deployment shape in DEPLOY.md.
The two projects have no shared build. Everything that crosses between them — envelope shape, casing,
pagination, idempotency, cookies and refresh, CORS, NEXT_PUBLIC_API_URL, three containers behind Caddy,
a remote SQL Server and the OTP relay — is described here, as one thing. Today it is described
nowhere as one thing, which is the gap this section closes.
Planned contents
| File | Covers |
|---|---|
api-contract.md |
Envelope, casing, pagination, error shape, idempotency, auth headers/cookies |
domains/ |
One file per service domain, refreshed against the live swagger |
openapi/ |
The machine contract — snapshot is current as of 2026-07-29 |
config-matrix.md |
Every env var and appsettings key: client, server, docker, the bot |
topology.md |
The runtime dependency graph — 3 containers + Caddy + remote SQL + OTP relay |
What phase 0 already established
The machine contract barely drifted. Between the 2026-07-13 snapshot and the live server on 2026-07-29:
one endpoint added (POST /api/v1/webhooks/payouts/{provider}), one schema changed
(GeneratePayoutBatchCommand), nothing removed. Full diff in
_plan/open-contradictions.md § OpenAPI drift.
So phase 2's real work is the 17 hand-written dev/contracts/domains/*.md files, which were frozen
the same day and have never been checked against anything mechanically — not the JSON.
Also open for this section: C-2 (SET_VIA_USER_SECRETS_OR_ENV names a store that was removed),
C-3 (https://localhost:5002 in 18 places vs http:// in launchSettings.json), C-8 (two
contract files for messaging), C-9 (a v1.1 OpenAPI document that may not exist).