From fca8fd038b149455a14559606afeaace24203f40 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 2 Jul 2026 23:47:13 +0200 Subject: [PATCH] docs: settle the export docs on the final delivery matrix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ARCHITECTURE: the time zone rides the URL too; 'only degraded platform' (legacy TG) instead of 'only remaining branch' — the delivery is per-platform by design now. CLAUDE.md: the renderer joins the build/test commands and the Dockerfile list. --- CLAUDE.md | 3 ++- docs/ARCHITECTURE.md | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index b3f0cdd..dc03378 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -128,7 +128,7 @@ platform/telegram/ # Telegram side-service: cmd/validator (HMAC, no VP renderer/ # image-render sidecar (Node + skia-canvas): runs ui/src/lib/gameimage.ts server-side for the finished-game PNG export loadtest/ # module scrabble/loadtest: the load/stress harness docs/ .gitea/workflows/ CLAUDE.md README.md -backend/Dockerfile gateway/Dockerfile platform/telegram/Dockerfile loadtest/Dockerfile # multi-stage distroless; gateway/Dockerfile has the `landing` target, platform/telegram/Dockerfile has `validator`+`bot` targets +backend/Dockerfile gateway/Dockerfile platform/telegram/Dockerfile loadtest/Dockerfile renderer/Dockerfile # multi-stage distroless (renderer: node:22-slim + skia-canvas + fonts); gateway/Dockerfile has the `landing` target, platform/telegram/Dockerfile has `validator`+`bot` targets deploy/ # docker-compose (+ prod overlay + bot host) + ansible provisioning + caddy + landing + otelcol (OTLP + docker_stats) + prometheus/tempo/grafana + node_exporter + postgres_exporter; prod-deploy.sh ``` @@ -144,6 +144,7 @@ go run ./backend/cmd/backend # /healthz, /readyz on :8080 cd ui && pnpm install && pnpm check && pnpm test:unit && pnpm build # the UI pnpm start # UI mock mode: lobby -> game, no backend +cd renderer && pnpm install && pnpm test # image-render sidecar (bundles ui/src/lib/gameimage.ts, skia smoke) docker build --build-arg DICT_VERSION=v1.3.0 -f backend/Dockerfile -t scrabble-backend . # DICT_VERSION required (no default); gateway embeds the SPA docker build -f gateway/Dockerfile --target gateway -t scrabble-gateway . diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index a212635..5fa3631 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -813,12 +813,12 @@ authenticated caller on a finished game. The PNG is rasterized on demand by the **`renderer` sidecar** (internal-only Node + skia-canvas running the same `ui/src/lib/gameimage.ts` the web project unit-tests — one renderer, no drift; `renderer/README.md`); the backend rebuilds the render payload from the journal + -`engine.AlphabetTable`, and the client's date locale plus its UI-localized non-play -labels ride the signed URL so the server render matches the player's presentation. -Nothing is stored: the artifact is re-derived from the immutable finished journal on -each GET. The only remaining platform branch is a legacy Telegram client predating -`downloadFile`, where the GCG falls back to the old clipboard copy and the image option -is not offered. +`engine.AlphabetTable`, and the client's date locale, IANA time zone and UI-localized +non-play labels ride the signed URL so the server render matches the player's +presentation. Nothing is stored: the artifact is re-derived from the immutable +finished journal on each GET. The only degraded platform is a legacy Telegram client +predating `downloadFile`, where the GCG falls back to the old clipboard copy and the +image option is not offered. The alphabet-on-the-wire transport does **not** touch this invariant: the live edge exchanges alphabet indices, but the persisted journal (and everything derived from it —