Quality and observability (SRC-1397)
Source: owner chat 14.10.2026 (SRC-1397). Goal: find a broken page or API before a parent does, and spend fewer CI minutes doing it.
The five parts
| Part | What it does | Doc | Status |
|---|---|---|---|
| Sentry | Error and exception reporting for the web apps and workers, with a release tag per deploy | sentry.md | Done in code, needs owner account and secrets |
| Context7 | Current library docs for every Claude session via MCP, so code matches the pinned version, not model memory | this page and .claude/rules/library-docs.md | Done: .mcp.json entry and rule |
| Selective E2E | Run only the Playwright specs a change affects on PRs (import graph aware); full suite on nightly/* PRs and on main unless the PR already ran it on the same tree | e2e-select.md | Done |
| Synthetic checks | Scheduled probes of key production URLs and API endpoints, after deploy and on a timer | synthetic-checks.md | Done in code, version checks need two owner tokens |
| RUM | Real-user Core Web Vitals (LCP, INP, CLS) via web-vitals, written to Workers Analytics Engine | rum.md | Done in code, needs Analytics Engine token |
Context7
.mcp.json at the repo root declares the remote MCP server context7 (https://mcp.context7.com/mcp), so every Claude Code session on this repo, local or cloud, gets it. No key is committed: the header reads the environment variable CONTEXT7_API_KEY, and the server works without a key at a lower rate limit. The rule .claude/rules/library-docs.md tells sessions to query it before using or upgrading motion, shadcn/Radix, Tailwind v4, Remotion, HyperFrames, wrangler, @sentry/*, web-vitals, Playwright or vitest.
Owner setup checklist
- [ ] Create a free Sentry account and one project; turn on Prevent Storing of IP Addresses and Data Scrubber in its Security & Privacy settings; then add GitHub secrets
SENTRY_DSN,VITE_SENTRY_DSN,SENTRY_AUTH_TOKEN,SENTRY_ORGandSENTRY_PROJECT(details in sentry.md). - [ ] Create a Cloudflare API token with Account Analytics read access for Workers Analytics Engine queries; set it as the Worker secret
RUM_SQL_TOKENonnemo12-api(details in rum.md). - [ ] For the deployed-version checks, set two
nemo12-apisecrets:SYNTHETIC_CF_TOKEN(Cloudflare, Workers Scripts Read) andSYNTHETIC_GITHUB_TOKEN(fine-grained, Contents Read on this repo); details in synthetic-checks.md. The GitHub token expires: note its renewal date. - [ ] Optional: get a Context7 API key and export
CONTEXT7_API_KEYin your shell or cloud environment for a higher rate limit.