Merge pull request #85 from madhura68/feat/sentry-error-monitoring

feat(ops): Sentry error-monitoring (v1-readiness #2)
This commit is contained in:
Janpeter Visser 2026-05-04 13:35:17 +02:00 committed by GitHub
commit 43778e3bcb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 2516 additions and 30 deletions

View file

@ -86,6 +86,10 @@ scrum4me/
│ └── seed.ts # Testdata uit Product Backlog document
├── proxy.ts # Next.js 16 proxy voor route protection
├── prisma.config.ts # Prisma v7 config (DATABASE_URL)
├── instrumentation.ts # Next.js hook → koppelt Sentry-config aan runtime
├── instrumentation-client.ts # Sentry client-init + router-transitions
├── sentry.server.config.ts # Sentry node-runtime init (no-op zonder DSN)
├── sentry.edge.config.ts # Sentry edge-runtime init (proxy.ts)
└── .env.example
```
@ -133,6 +137,11 @@ scrum4me/
**Rationale:** Dialog-fullscreen op mobile op vier plekken bewaken zou drift introduceren. De gedeelde constant geeft één bron van waarheid. Het regressie-vangnet (`__tests__/components/shared/entity-dialog-layout.test.ts`) verifieert dat elke dialog deze constant blijft gebruiken.
**Trade-off:** Eén dialog kan niet afwijken zonder de constant te verlaten — bewuste keuze voor consistentie.
### Beslissing: Sentry voor error-monitoring (v1-readiness item 2)
**Keuze:** `@sentry/nextjs` met vier config-files in repo-root: `instrumentation.ts`, `instrumentation-client.ts`, `sentry.server.config.ts`, `sentry.edge.config.ts`. DSN via `NEXT_PUBLIC_SENTRY_DSN`. Zonder DSN draait de SDK als no-op — geen overhead in dev of bij ontbrekende creds in CI.
**Rationale:** Een echte v1-launch zonder runtime-monitoring is een blinde vlek; build-fouten vangen we in CI maar productie-fouten zien we anders pas via een gebruiker. Vercel + Sentry koppelen via env-vars (geen native marketplace-integratie nodig). Source-maps uploaden alleen als `SENTRY_AUTH_TOKEN` aanwezig is — anders skip-build voor lokale dev. Tunnel-route `/monitoring` omzeilt ad-blockers die `*.sentry.io` blokkeren.
**Trade-off:** Extra dependency (~150 KB client-bundle additioneel). Sample-rates conservatief (10% performance in productie, 100% errors). Geen Replay-integratie — vereist eigen privacy-review en is overkill voor MVP.
### Beslissing: Gescheiden SplitPane cookie-key voor mobile (PBI-11)
**Keuze:** `BacklogSplitPane` op `app/(mobile)/m/products/[id]/page.tsx` gebruikt `cookieKey={\`backlog-${id}-mobile\`}` (versus desktop `backlog-${id}`).
**Rationale:** Op mobile rendert de `SplitPane` in tab-mode (`<1024px`), waar split-percentages niet aangepast worden. Zonder gescheiden key zou dezelfde cookie hergebruikt worden — telefoon-rotaties of orientatie-wisselingen hadden anders ongewenste interactie met de desktop-split-state.

View file

@ -21,6 +21,7 @@ De kernfunctionaliteit (auth, producten, PBI/story/task-hiërarchie, sprints, so
## What's already done
- **#1 Edit-icoon op Product** (todo `cmoq3ox51`) — pencil-icoon op dashboard-card via PR [#83](https://github.com/madhura68/Scrum4Me/pull/83); product-detail-header behoudt tekst
- v0.9.0 ([release](https://github.com/madhura68/Scrum4Me/releases/tag/v0.9.0)): mobile-shell met landscape-lock (PBI-11, 7 stories, 21 tasks)
- v0.4.0 t/m v0.8.x: ondermeer sprint-screen filter-popover + edit-iconen, PBI/story/task edit-icons, code-velden verplicht, demo read-only, M11 Claude-vragen-kanaal, M10 QR-pairing
- CI op `main` en PR's: lint + typecheck + prisma validate + test + build via [`.github/workflows/ci.yml`](../../.github/workflows/ci.yml)
@ -33,14 +34,9 @@ De kernfunctionaliteit (auth, producten, PBI/story/task-hiërarchie, sprints, so
Korte lijst (3-5 items) die je vóór de v1.0-tag wil afronden. Deze blokkeren een betekenisvolle launch.
### 1. Edit-icoon op Product — todo `cmoq3ox51` ([dashboard + product-detail])
### 1. ~~Edit-icoon op Product~~ ✅ klaar in PR [#83](https://github.com/madhura68/Scrum4Me/pull/83)
`ProductDialog` en `updateProductAction` bestaan al (commits `4103e36`, `1b94f32`), maar er is **nergens een zichtbare edit-trigger** voor de eindgebruiker. Op story-niveau hetzelfde patroon als ST-1109 PBI/Story/Task edit-iconen die we deze sprint geshipt hebben.
Concreet:
- Pen-icoon in product-card ([components/dashboard/product-list.tsx](../../components/dashboard/product-list.tsx)) → opent `<ProductDialog mode="edit">` via `<EditProductButton>` (bestaat al, alleen niet zichtbaar voor non-owners?)
- Pen-icoon in product-header op `/products/[id]` is al aanwezig sinds PR#76 — verifieer of die voor de owner wel werkt en breed genoeg
- Demo-blok: `EditProductButton` heeft al `disabled={isDemo}`-check; verifieer
Verschoven naar *What's already done*. Pencil-icoon op dashboard-card; product-detail page-header behoudt tekst (matched naast andere text-acties).
### 2. Error monitoring (Sentry of vergelijkbaar)