release v1.2.2: edge HTTP/3 stall fix + db-size dashboard threshold #121

Merged
developer merged 4 commits from development into master 2026-06-22 19:50:58 +00:00
Owner

Release v1.2.2 — promote developmentmaster

Two fixes, both config/dashboard only — no schema migration, so the rollout is
image/config-only, rollback-safe, and needs no maintenance window.

Included

  • #119 fix(edge): suppress dead HTTP/3 advert (Alt-Svc: clear). The edge
    advertised HTTP/3 but UDP/443 is never exposed (compose maps only TCP, ufw opens
    443/tcp), so clients cached the 30-day Alt-Svc: h3 and stalled on a dead QUIC path
    before falling back to h2 — the Telegram Mini App intermittently hung on load.
    Emitting Alt-Svc: clear site-wide pins clients to h2/h1 and actively flushes the
    poisoned cache. Confirmed live on the test contour (host caddy). Background +
    alternatives: docs/EDGE_HTTP3.md.
  • #120 fix(grafana): real byte thresholds for the Database size stat. The panel had
    no thresholds, so Grafana's default (red at >=80) painted a healthy ~9 MiB DB
    permanently red. Now green / yellow 8 GiB / red 16 GiB, sized to the 40 GiB prod disk.

Scope: affects the main host only (caddy + grafana); the bot host is untouched.

After merge (manual, owner)

  1. Tag v1.2.2 on master HEAD.
  2. Prod deploy: prod-deploy.yaml, workflow_dispatch, confirm=deploy from master.
    The h3 fix takes effect on prod only after this deploy (and then flushes already-cached
    h3 entries on real clients via Alt-Svc: clear).
# Release v1.2.2 — promote `development` → `master` Two fixes, both **config/dashboard only — no schema migration**, so the rollout is image/config-only, rollback-safe, and needs no maintenance window. ## Included - **#119 `fix(edge)`: suppress dead HTTP/3 advert (`Alt-Svc: clear`).** The edge advertised HTTP/3 but UDP/443 is never exposed (compose maps only TCP, ufw opens 443/tcp), so clients cached the 30-day `Alt-Svc: h3` and stalled on a dead QUIC path before falling back to h2 — the **Telegram Mini App intermittently hung on load**. Emitting `Alt-Svc: clear` site-wide pins clients to h2/h1 and actively flushes the poisoned cache. Confirmed live on the test contour (host caddy). Background + alternatives: `docs/EDGE_HTTP3.md`. - **#120 `fix(grafana)`: real byte thresholds for the Database size stat.** The panel had no thresholds, so Grafana's default (red at `>=80`) painted a healthy ~9 MiB DB permanently red. Now green / yellow 8 GiB / red 16 GiB, sized to the 40 GiB prod disk. Scope: affects the **main host** only (caddy + grafana); the bot host is untouched. ## After merge (manual, owner) 1. Tag `v1.2.2` on `master` HEAD. 2. Prod deploy: `prod-deploy.yaml`, `workflow_dispatch`, `confirm=deploy` from `master`. The h3 fix takes effect on prod only after this deploy (and then flushes already-cached `h3` entries on real clients via `Alt-Svc: clear`).
developer added 4 commits 2026-06-22 19:42:37 +00:00
fix(edge): suppress dead HTTP/3 advert with Alt-Svc: clear
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 17s
CI / ui (pull_request) Successful in 54s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m21s
9253b1bdca
Caddy enables HTTP/3 by default on any TLS listener and emits
Alt-Svc: h3=":443"; ma=2592000, but UDP/443 is never reachable: the prod
compose maps only "443:443" (TCP) and ufw opens 443/tcp (test contour: the
host caddy publishes only :443/tcp). A client that cached the 30-day advert
tries QUIC first on later opens, gets no response, and waits for the QUIC
attempt to time out before falling back to h2 -- which surfaced as the
Telegram Mini App intermittently hanging on load (a barely-noticeable pause
up to a blank window). The h2/TCP serving path itself is healthy (~10ms TTFB).

Emit Alt-Svc: clear site-wide at the contour caddy so clients actively drop
any cached alternative and stay on h2/h1. This caddy terminates TLS in prod
(the fix target); in the test contour it serves plain :80 and the host caddy
re-stamps its own Alt-Svc, so the live test fix lives in the host caddy. Add
docs/EDGE_HTTP3.md (symptom, diagnosis method, verify, and option B -- serving
h3 for real -- if it recurs) and link it from ARCHITECTURE.md.
fix(grafana): give "Database size" stat real byte thresholds
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 17s
CI / ui (pull_request) Successful in 54s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m18s
46d569720c
The "Database size" stat had no thresholds, so Grafana applied its stat
default (green base, red at >=80). The query is pg_database_size_bytes, so a
healthy ~9 MiB database (9.4M >> 80) rendered permanently RED on the
Scrabble - Resources dashboard (test + prod), reading as a false alert; the
neighbouring percentunit cache-hit stat stayed green only because its 0..1
values fall under 80.

Add absolute byte thresholds sized to the 40 GiB prod disk (4.6 GiB used,
observability bounded -- Tempo <=1 GiB, Prometheus 7d -- so the DB is the
only unbounded grower): green up to 8 GiB, yellow at 8 GiB (~20% of disk),
red at 16 GiB (~40%), an early warning with ample runway before the disk
tightens, not a panic line. Cosmetic panel coloring only; there are no
Grafana alert rules provisioned.
Merge pull request 'fix(edge): suppress dead HTTP/3 advert with Alt-Svc: clear' (#119) from feature/edge-suppress-http3-altsvc into development
CI / changes (push) Successful in 3s
CI / unit (push) Successful in 10s
CI / integration (push) Successful in 20s
CI / ui (push) Successful in 55s
CI / gate (push) Successful in 0s
CI / deploy (push) Successful in 1m18s
6cb88b28c4
Merge pull request 'fix(grafana): real byte thresholds for the Database size stat' (#120) from feature/grafana-db-size-thresholds into development
CI / changes (push) Successful in 2s
CI / changes (pull_request) Successful in 2s
CI / unit (push) Successful in 10s
CI / integration (push) Successful in 16s
CI / ui (push) Successful in 54s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 15s
CI / ui (pull_request) Successful in 54s
CI / gate (push) Successful in 0s
CI / deploy (push) Successful in 1m20s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Has been skipped
ba57687430
owner approved these changes 2026-06-22 19:45:08 +00:00
developer merged commit dc946a1faf into master 2026-06-22 19:50:58 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: developer/scrabble-game#121