Scrum4Me/prisma/migrations
Janpeter Visser 7ae8a24372
Sprint: pbi-55 (#156)
* ST-cmovs79lt: Schema + migratie PushSubscription model

Voeg PushSubscription model toe aan prisma/schema.prisma met
snake_case-conventie, relation field op User, en bijbehorende
migratie (push_subscriptions tabel, FK + index op user_id).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs7e3o: web-push dependency + VAPID env vars feature-gated

Voeg web-push + @types/web-push toe aan package.json.
Registreer NEXT_PUBLIC_VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY,
VAPID_SUBJECT en INTERNAL_PUSH_SECRET als .optional() in lib/env.ts.
Documenteer alle vier in .env.example en README.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs7jgr: lib/push-server.ts met sendPushToUser + stale-cleanup

Server-only push-lib met VAPID feature-gate, send naar alle
subscriptions van een user, en automatische cleanup bij 404/410.
Unit tests: success-pad, 410 verwijdert sub, 404 verwijdert sub,
andere errors loggen zonder delete.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs7ouz: lib/push-client.ts client-side push helpers + stub actions/push.ts

Client-side helpers: isPushSupported, isIOSSafari, isStandalonePWA,
urlBase64ToUint8Array, subscribeToPush, unsubscribeFromPush.
Stub actions/push.ts zodat imports resolven (implementatie volgt
in volgende taak). Unit tests voor urlBase64ToUint8Array.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs7ut4: actions/push.ts subscribeToPushAction + unsubscribeFromPushAction

Vervangt stub met volledige implementatie: requireUser via getSession,
demo-block, Zod-validatie, upsert met user_id-scoping en user-scoped
deleteMany. Tests (8): idempotentie, demo-block, unauthenticated, invalid input.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs80c1: POST /api/internal/push/send met constant-time Bearer check

Route: 503 als INTERNAL_PUSH_SECRET uitstaat, 401 bij verkeerd secret
(timingSafeEqual), 400 bij invalid JSON, 422 bij Zod-fout, 204 bij succes.
push-server.ts: env-import vervangen door process.env om SESSION_SECRET
validatie tijdens build te omzeilen. Tests aangepast.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs862j: Admin test-send route + public/sw.js service worker

POST /api/internal/push/test-send: requireAdmin check (redirect bij
niet-admin), optioneel body met defaults, roept sendPushToUser aan, 204.
public/sw.js: push-handler met showNotification, notificationclick met
same-origin guard, focus bestaand venster of openWindow.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs8jvq: PushToggle component met 3 states + iOS-banner

Client component met states loading/unsupported/ios-needs-install/
denied/subscribed/unsubscribed. useEffect detecteert initial status,
permission-prompt alleen via user-click. iOS-banner NL, denied-uitleg,
subscribe/unsubscribe knoppen met sonner-toasts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs8psg: notifications-sheet + iOS meta-tags in layout

notifications-sheet.tsx: PushToggle onderin met sectie
'Notificatie-instellingen' en visuele scheidslijn.
app/layout.tsx: appleWebApp.capable, statusBarStyle en
mobile-web-app-capable meta-tags toegevoegd via Next.js Metadata API.
manifest.json had al display: standalone.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ST-cmovs8vxj: docs/patterns/web-push.md pattern-documentatie

Architectuur-diagram, payload-shape, foutcodes, VAPID-config,
iOS-quirks, demo-users blokkade, trigger-voorbeelden (server +
HTTP) en admin-testroute curl-voorbeeld.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 21:46:01 +02:00
..
20260424123750_init fix: SQLite migraties vervangen door PostgreSQL migratie voor Neon 2026-04-24 14:38:01 +02:00
20260425102419_add_task_implementation_plan feat: ProductMember — team management for product backlogs 2026-04-25 13:09:44 +02:00
20260425103147_add_todo_product_id feat: Todo altijd gekoppeld aan product backlog 2026-04-25 12:35:40 +02:00
20260425110346_add_product_members feat: ProductMember — team management for product backlogs 2026-04-25 13:09:44 +02:00
20260425112843_add_user_profile feat: gebruikersprofiel met avatar, bio en uitgebreide beschrijving 2026-04-25 13:30:38 +02:00
20260425210710_add_review_task_status feat(ST-350): add Story.assignee_id schema migration 2026-04-26 16:03:29 +02:00
20260426140229_add_story_assignee feat(ST-350): add Story.assignee_id schema migration 2026-04-26 16:03:29 +02:00
20260426193458_add_user_email feat(ST-507): add optional email field to User schema 2026-04-26 19:37:38 +02:00
20260426195800_add_todo_description feat(ST-509): add optional description column (max 2000 chars) to Todo 2026-04-26 19:59:52 +02:00
20260426202231_add_entity_codes feat(ST-507): add optional code fields to Product, Pbi and Story 2026-04-26 20:36:26 +02:00
20260426214905_add_story_log_metadata Todo description, entity codes, REST API extensions and Claude Code hardening (ST-509/511/512/513) (#2) 2026-04-26 23:40:54 +02:00
20260426230316_add_solo_realtime_triggers feat(M8): Realtime Solo Paneel via Postgres LISTEN/NOTIFY (ST-801..ST-806) (#8) 2026-04-27 13:59:32 +02:00
20260427000216_extend_realtime_payload feat(M8): Realtime Solo Paneel via Postgres LISTEN/NOTIFY (ST-801..ST-806) (#8) 2026-04-27 13:59:32 +02:00
20260427165329_add_user_active_product_id feat(M9): active product backlog — persistent active PB, NavBar splits, sprint card styling (#10) 2026-04-27 20:25:13 +02:00
20260427200734_add_login_pairing M10: Password-loze inlog via QR-pairing (ST-1001..ST-1008) (#12) 2026-04-28 00:01:04 +02:00
20260427224849_add_claude_questions M11: Claude vraagt, gebruiker antwoordt (ST-1101..ST-1108) (#13) 2026-04-29 11:38:23 +02:00
20260429150643_add_pbi_status M12 / ST-1109: PBI krijgt een status (Ready / Blocked / Done) (#16) 2026-04-29 17:52:34 +02:00
20260429165857_add_claude_job M13: Claude job queue — 'Voer uit'-knop + worker presence (ST-1111) (#18) 2026-04-29 19:51:48 +02:00
20260429171047_add_claude_worker M13: Claude job queue — 'Voer uit'-knop + worker presence (ST-1111) (#18) 2026-04-29 19:51:48 +02:00
20260430171227_add_claude_job_plan_snapshot feat: plan_snapshot field on ClaudeJob + architecture doc (#23) 2026-04-30 19:43:47 +02:00
20260501095454_add_claude_job_pushed_at Promote task naar IN_PROGRESS bij ClaudeJob CLAIMED/RUNNING (#25) 2026-05-01 12:01:27 +02:00
20260501100629_add_verify_result_and_verify_only M13: Veilige Claude-agent-workflow (Scrum4Me-side) (#26) 2026-05-01 13:42:18 +02:00
20260501110000_sync_task_status_from_claude_job Solo Paneel header refactor + agent-workflow hardening (#24) 2026-05-01 11:41:35 +02:00
20260501111511_add_claude_job_retry_count M13: Veilige Claude-agent-workflow (Scrum4Me-side) (#26) 2026-05-01 13:42:18 +02:00
20260501112415_add_product_auto_pr M13: Veilige Claude-agent-workflow (Scrum4Me-side) (#26) 2026-05-01 13:42:18 +02:00
20260501112642_add_claude_job_pr_url M13: Veilige Claude-agent-workflow (Scrum4Me-side) (#26) 2026-05-01 13:42:18 +02:00
20260501130000_promote_task_to_in_progress_on_claim Promote task naar IN_PROGRESS bij ClaudeJob CLAIMED/RUNNING (#25) 2026-05-01 12:01:27 +02:00
20260502132322_add_sprint_dates_and_jobs_index Foundation: route, recharts, sprint-dates migration, chart-colors helper (#46) 2026-05-02 15:58:15 +02:00
20260502153500_add_task_verify_required Verify-gate uitbreiden: DIVERGENT/PARTIAL vereist agent-acknowledgement (#53) 2026-05-02 17:45:19 +02:00
20260502175000_add_task_repo_url feat(schema): Task.repo_url — cross-repo override for agent worktree (#54) 2026-05-02 18:02:01 +02:00
20260502190200_add_pbi_notify_trigger feat(schema): add notify_pbi_change trigger so PBI INSERT/UPDATE/DELETE emits NOTIFY on scrum4me_changes (#58) 2026-05-02 21:10:03 +02:00
20260503145506_add_pbi_pr_link ST-migvir40: Schema: Pbi.pr_url + pr_merged_at + Prisma-migratie (#67) 2026-05-03 17:02:47 +02:00
20260504055000_codes_required_and_task_code feat(codes): code NOT NULL voor PBI/Story + Task.code + product_id denorm 2026-05-04 08:36:19 +02:00
20260504172747_add_ideas_and_grill_jobs db: M12 migration — ideas + idea_logs + check-constraints + pg_notify update (T-492) 2026-05-04 19:35:28 +02:00
20260505000000_add_admin_role_must_reset_cancelled feat(ST-nma6ylbl): Prisma-migratie ADMIN enum + must_reset_password + CANCELLED-status 2026-05-05 14:18:10 +02:00
20260505120000_add_user_question_plan_chat feat(ST-bsjoqjnr): UserQuestion model + PLAN_CHAT enum-waarde 2026-05-05 17:26:22 +02:00
20260505230512_add_skipped_to_claude_job_status feat(T-571): voeg SKIPPED toe aan ClaudeJobStatus enum 2026-05-05 23:05:38 +02:00
20260506001700_story_logs_notify feat(T-559): pg_notify-trigger op story_logs voor sync-tab realtime 2026-05-06 00:16:52 +02:00
20260506010000_add_idea_product_secondary feat(schema): IdeaProduct junction model + relaties op Idea en Product 2026-05-06 02:16:26 +02:00
20260506010013_add_token_usage_fields feat(ST-mgsu85hr): Prisma schema — token-velden op ClaudeJob + ModelPrice model (#112) 2026-05-06 03:02:00 +02:00
20260506014222_add_worker_quota_gate feat(ST-qfpqpxzy): DB schema + settings-UI voor min_quota_pct worker-drempel (#118) 2026-05-06 03:45:59 +02:00
20260506101436_restore_todos_table fix(db): restore todos table after out-of-band drop (#131) 2026-05-06 10:18:20 +02:00
20260506114500_sprint_run_and_failed_statuses PBI-46: Sprint-niveau jobflow met cascade-FAIL (F1/F2/F4 Scrum4Me) (#136) 2026-05-06 16:43:57 +02:00
20260506182000_add_job_shas_and_pause_context PBI-47: schema, pause_context Zod, resumePausedSprintRunAction, PAUSED-banner UI (#137) 2026-05-06 22:17:11 +02:00
20260507000000_migrate_todos_to_ideas ST-1239: Atomische database-migratie — todos naar ideas + droppen todos-tabel (#132) 2026-05-06 12:25:37 +02:00
20260507103000_sprint_implementation PBI-50: SPRINT_IMPLEMENTATION single-session sprint runner (Scrum4Me-side) (#139) 2026-05-07 13:05:02 +02:00
20260507195507_add_sprint_code feat(PBI-59): Sprint.code (SP-N sequentieel per product) (#153) 2026-05-07 20:10:16 +02:00
20260507200000_add_push_subscriptions Sprint: pbi-55 (#156) 2026-05-07 21:46:01 +02:00
migration_lock.toml fix: SQLite migraties vervangen door PostgreSQL migratie voor Neon 2026-04-24 14:38:01 +02:00