Open items as of 2026-09-06. Delete a line when it is done.
- Roll out. The last successful rollout predates the pnpm 10 revert, the resume error handling, and the p99 work below. Everything here is committed but not live.
- Point Prometheus at production.
METRICS_TOKENnow exists in Secret Manager and is wired intoapphosting.yaml, so/api/metricsanswers after the next rollout. Read the value withgcloud secrets versions access latest --secret=METRICS_TOKEN --project=dsgt-websiteand scrape withAuthorization: Bearer <token>. A 404 means the token did not match — that is the endpoint's designed answer, not an outage.
- Decide on
minInstances. Held at 0 deliberately: one always-warm instance atcpu: 2/ 1 GiB is roughly $30-50/month. The boot-time pool warmup insites/mainweb/instrumentation.tsshortens a cold start; only min-instances removes it. Revisit if the scrape shows cold starts dominating the tail. - Read the histogram before optimising further.
dsgt_trpc_duration_secondsis bucketed for the tail. Everything below is a guess until it is scraped. - Stripe reconcile N+1 (
routers/stripe.ts,reconcileMyPayments). OnestripePaymentslookup per intent, bounded at 20, on a user-triggered backstop — low value, and the surrounding grant logic is delicate. - Metrics are per-instance. In-memory registry,
maxInstances: 10, scale to zero: a scrape samples one instance and counters reset when it dies. Fleet-wide numbers need aggregation.
- Confirm the
/eventsstaleness call. The page wasforce-dynamicand is nowrevalidate = 300, matching/projects.proxy.tsalready serves that pathmax-age=3600, so nobody could observe the old freshness — but it was an explicit choice, so it is worth a second opinion.