diff --git a/app/api/cron/expire-questions/route.ts b/app/api/cron/expire-questions/route.ts index ba72bd1..7f60c8f 100644 --- a/app/api/cron/expire-questions/route.ts +++ b/app/api/cron/expire-questions/route.ts @@ -1,6 +1,8 @@ // ST-1107: Vercel cron handler die verlopen Claude-vragen op 'expired' zet. // -// Wordt elke 6 uur door Vercel POST'd (zie vercel.ts crons-config). Auth is +// Wordt dagelijks om 04:00 UTC door Vercel POST'd (zie vercel.json crons- +// config; Vercel Hobby-plan staat alleen daily crons toe — Pro ondersteunt +// fijnmaziger). Auth is // via een gedeeld secret in de Authorization-header — Vercel injecteert // `Authorization: Bearer ` automatisch wanneer de env-var op de // project-omgeving staat. diff --git a/docs/API.md b/docs/API.md index a1268a9..c1c3345 100644 --- a/docs/API.md +++ b/docs/API.md @@ -461,11 +461,11 @@ const source = new EventSource('/api/realtime/notifications', { withCredentials: ### `POST /api/cron/expire-questions` -Vercel cron handler die elke 6 uur draait. Markeert verlopen open vragen als `expired` en verlopen pending login_pairings als `cancelled`. +Vercel cron handler die dagelijks draait. Markeert verlopen open vragen als `expired` en verlopen pending login_pairings als `cancelled`. **Auth:** `Authorization: Bearer ${CRON_SECRET}` — header die Vercel automatisch injecteert wanneer de env-var op de project-omgeving staat. Zonder secret of bij mismatch: 401. -**Schedule:** `0 */6 * * *` (4× per dag). +**Schedule:** `0 4 * * *` (dagelijks om 04:00 UTC; Vercel Hobby-plan staat alleen daily crons toe — Pro ondersteunt fijnmazigere schedules). **Response 200:** ```json diff --git a/docs/patterns/claude-question-channel.md b/docs/patterns/claude-question-channel.md index 855f2af..d451e41 100644 --- a/docs/patterns/claude-question-channel.md +++ b/docs/patterns/claude-question-channel.md @@ -79,8 +79,9 @@ weert. - **MCP-tool wait_seconds**: max 600 s — Claude wacht maximaal 10 min op een antwoord; daarna `status: 'pending'` zodat hij later kan terugkomen via `get_question_answer` -- **Cron schedule**: `0 */6 * * *` — 4× per dag genoeg om 'expired' op te - ruimen zonder Vercel-cron-budget te belasten +- **Cron schedule**: `0 4 * * *` — daily op een rustig tijdstip (Vercel Hobby + staat alleen daily crons toe; Pro ondersteunt fijnmaziger). 24 u TTL + + daily cleanup houdt de tabel klein zonder cron-budget te belasten --- diff --git a/docs/plans/M11-claude-questions.md b/docs/plans/M11-claude-questions.md index d1a8e61..ce5ce90 100644 --- a/docs/plans/M11-claude-questions.md +++ b/docs/plans/M11-claude-questions.md @@ -348,7 +348,7 @@ Backlog-entries: zie [scrum4me-backlog.md § M11](../scrum4me-backlog.md#m11-cla ```ts export const config: VercelConfig = { // ... bestaande config - crons: [{ path: '/api/cron/expire-questions', schedule: '0 */6 * * *' }], + crons: [{ path: '/api/cron/expire-questions', schedule: '0 4 * * *' }], } ``` diff --git a/docs/scrum4me-architecture.md b/docs/scrum4me-architecture.md index a0c3175..ec455d4 100644 --- a/docs/scrum4me-architecture.md +++ b/docs/scrum4me-architecture.md @@ -638,7 +638,7 @@ sequenceDiagram | **Demo-account misbruik** | `requireWriteAccess` op MCP-write-tools (PERMISSION_DENIED), early-return op `session.isDemo` in answerQuestion Server Action, disabled submit + tooltip in AnswerModal | | **Cross-product leak** | `productAccessFilter` op DB-query én SSE-server-side-filter (Set met user's accessible product-IDs) | | **Cron-endpoint misbruik** | `Authorization: Bearer ${CRON_SECRET}` — Vercel injecteert automatisch; faalt 401 als secret niet gezet (geen open endpoint in dev) | -| **Onbeperkte vragen-groei** | `expires_at` 24 u + Vercel cron `0 */6 * * *` markeert `status='expired'` → uit notifications-bell | +| **Onbeperkte vragen-groei** | `expires_at` 24 u + Vercel cron `0 4 * * *` (dagelijks; Hobby-plan-limiet) markeert `status='expired'` → uit notifications-bell | | **Gevoelige info in logs** | Logging alleen `question_id`, nooit vraag- of antwoord-tekst | ### Waarom hergebruik scrum4me_changes-kanaal diff --git a/docs/scrum4me-backlog.md b/docs/scrum4me-backlog.md index e1f4bea..689063a 100644 --- a/docs/scrum4me-backlog.md +++ b/docs/scrum4me-backlog.md @@ -707,7 +707,7 @@ Persistent vraag-antwoord-kanaal tussen Claude Code (via MCP) en de actieve Scru - [ ] **ST-1107** Vercel cron `expire-questions` - **`app/api/cron/expire-questions/route.ts`** — POST handler beveiligd via `Authorization: Bearer ${CRON_SECRET}`; `updateMany WHERE status='open' AND expires_at