Scrum4Me/components
Madhura68 a0a10001d5 feat(rate-limit): per-user mutation-rate-limiting (v1-readiness #3)
lib/rate-limit.ts: 11 nieuwe scope-configs + enforceUserRateLimit(scope, userId)
helper. Returnt { error, code: 429 } shape voor consistent foutbeleid.

Toegepast op de high-value mutation-paths:
- actions/pbis.ts createPbiAction
- actions/stories.ts createStoryAction
- actions/tasks.ts saveTask (alleen create-path) + createTaskAction
- actions/todos.ts createTodoAction
- actions/sprints.ts createSprintAction
- actions/products.ts createProductAction + createProductFormAction
- actions/api-tokens.ts createApiTokenAction
- actions/questions.ts answerQuestion
- actions/claude-jobs.ts enqueueClaudeJobAction + enqueueClaudeJobsBatchAction
- app/api/profile/avatar/route.ts POST
- app/api/stories/[id]/log/route.ts POST

Limits zijn ruim genoeg voor normaal gebruik, eng genoeg voor abuse-loops:
create-task 100/min, create-todo 60/min, create-pbi 30/min, create-product
5/min, create-token 10/uur, etc. Per-user scope (geen globale block).

Niet aangeraakt: reorder/status-toggle (intra-session frequent, lage abuse),
update/delete (laag-volume), cron-routes (CRON_SECRET-gated).

Consumer-tweaks: 'success' in result narrowing waar TS de bredere union niet
meer accepteerde. Tests: 9 nieuwe op rate-limit-helper.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 13:48:59 +02:00
..
auth feat: ST-006-ST-008 auth pages, middleware, nav shell en dashboard 2026-04-24 11:18:42 +02:00
backlog feat(story-dialog): conform aan dialog-pattern + AlertDialog delete 2026-05-04 07:26:56 +02:00
dashboard feat(dashboard): pencil-icoon edit-trigger op product-card (todo cmoq3ox51) 2026-05-04 11:21:14 +02:00
dialogs feat(product-dialog): conform aan dialog-pattern + entity-profile 2026-05-04 07:18:39 +02:00
entity-dialog M14: TaskDialog (create/edit) + story auto-promotion (#21) 2026-04-30 16:55:20 +02:00
mobile feat(ST-1136): mobile Settings-pagina + LogoutButton (T-325/T-326/T-327) 2026-05-04 10:12:19 +02:00
notifications feat(answer-modal): conform aan dialog-pattern + entity-profile 2026-05-04 07:34:56 +02:00
products feat(dashboard,nav): edit-knop op productlijst + zichtbare product-switch 2026-05-04 06:30:00 +02:00
settings feat(rate-limit): per-user mutation-rate-limiting (v1-readiness #3) 2026-05-04 13:48:59 +02:00
shared feat(ST-1133): entityDialogContentClasses → full-screen op <640px (T-316/T-317/T-318) 2026-05-04 10:06:21 +02:00
solo fix(solo): TaskDetailDialog body scrollt + sticky header/footer 2026-05-04 08:44:48 +02:00
split-pane feat(M14): 3-pane backlog — generic SplitPane, BacklogStore, SSE realtime, card-grid TaskPanel (#22) 2026-04-30 18:16:07 +02:00
sprint feat(sprint): edit-icoon op taak in Taken-kolom 2026-05-04 09:21:35 +02:00
todos feat(rate-limit): per-user mutation-rate-limiting (v1-readiness #3) 2026-05-04 13:48:59 +02:00
ui M12 / ST-1109: PBI krijgt een status (Ready / Blocked / Done) (#16) 2026-04-29 17:52:34 +02:00
markdown.tsx M14: TaskDialog (create/edit) + story auto-promotion (#21) 2026-04-30 16:55:20 +02:00