feat(avg-d): gecureerde DigiPlein content_policy-seed (Scrum4Me) #86

Merged
janpeter merged 2 commits from claude/avg-gate-d-seed into main 2026-06-14 21:02:06 +02:00
Owner

Wat & waarom (sub-project C — deel D)

De live Copilot content-policy-gate (create_idea/update_idea, fail-closed via @shared/content-policy) dwingt pas een product-AVG-beleid af als Product.content_policy geset is. Voor het DigiPlein-product is dat veld leeg → de gate blokkeert voor DigiPlein nog niets. Deze PR seedt een gecureerde content_policy.

Inhoud

  • prisma/content-policies.ts — gecureerde policy-data (entry-array, keyed op immutable product-id). Afgeleid van DigiPlein lib/avg.ts, gecureerd voor de substring-semantiek van de checker (forbiddenFieldHit = masked.includes, geen woordgrens): bare niveau/afkomst/politiek/adres/diagnose gedropt/gekwalificeerd om false-positives te vermijden.
  • prisma/seed-content-policies.ts — idempotente applier: validate-all (parseContentPolicy, fail-closed) → --dry-run-pad → findUnique + expected_code-guard (fail-loud) → update-by-id (products.code is niet standalone-uniek: @@unique([user_id, code])). try/finally met $disconnect+pool.end (gespiegeld op scripts/sync-model-prices.ts).
  • prisma/__tests__/content-policies.test.ts — curatie-assertietest (metadata + lijst-asserties + checker block/allow tegen de échte @shared/content-policy).
  • package.json — script seed:content-policies.

Verificatie

  • npx vitest run content-policies7/7 groen.
  • npx tsx prisma/seed-content-policies.ts --dry-run[dry-run] 1 content_policy/ies gevalideerd; @shared-import resolved. Geen DB-write. (bewijst @shared resolvet onder tsx).
  • npm run typecheck → schoon op de 2 nieuwe bestanden. (De 4 resterende fouten in manual.generated/manual-server.ts zijn pre-existing — dat bestand wordt door npm run manual:build gegenereerd, niet in de worktree gedraaid; los van deze PR.)

Deploy (productie, JP's go)

154 draait npm run seed:content-policies met DATABASE_URL → de live scrum4me-DB (127.0.0.1:5432/scrum4me, host-prisma-conventie — niet de build-dummy). Geen mcp/copilot-herstart (de gate leest content_policy per request — 154-bevestigd). Spec + plan: scrum4me-copilot docs/superpowers/ (cross-review-cleared: codex + 154 akkoord).

🤖 Generated with Claude Code

## Wat & waarom (sub-project C — deel D) De live Copilot content-policy-gate (`create_idea`/`update_idea`, fail-closed via `@shared/content-policy`) dwingt pas een product-AVG-beleid af als `Product.content_policy` geset is. Voor het **DigiPlein**-product is dat veld leeg → de gate blokkeert voor DigiPlein nog niets. Deze PR seedt een **gecureerde** `content_policy`. ## Inhoud - `prisma/content-policies.ts` — gecureerde policy-data (entry-array, keyed op immutable product-id). Afgeleid van DigiPlein `lib/avg.ts`, **gecureerd** voor de substring-semantiek van de checker (`forbiddenFieldHit` = `masked.includes`, geen woordgrens): bare `niveau`/`afkomst`/`politiek`/`adres`/`diagnose` gedropt/gekwalificeerd om false-positives te vermijden. - `prisma/seed-content-policies.ts` — idempotente applier: validate-all (`parseContentPolicy`, fail-closed) → `--dry-run`-pad → `findUnique` + `expected_code`-guard (fail-loud) → **update-by-id** (`products.code` is niet standalone-uniek: `@@unique([user_id, code])`). `try/finally` met `$disconnect`+`pool.end` (gespiegeld op `scripts/sync-model-prices.ts`). - `prisma/__tests__/content-policies.test.ts` — curatie-assertietest (metadata + lijst-asserties + checker block/allow tegen de échte `@shared/content-policy`). - `package.json` — script `seed:content-policies`. ## Verificatie - `npx vitest run content-policies` → **7/7 groen**. - `npx tsx prisma/seed-content-policies.ts --dry-run` → `[dry-run] 1 content_policy/ies gevalideerd; @shared-import resolved. Geen DB-write.` (bewijst `@shared` resolvet onder tsx). - `npm run typecheck` → schoon op de 2 nieuwe bestanden. (De 4 resterende fouten in `manual.generated`/`manual-server.ts` zijn **pre-existing** — dat bestand wordt door `npm run manual:build` gegenereerd, niet in de worktree gedraaid; los van deze PR.) ## Deploy (productie, JP's go) 154 draait `npm run seed:content-policies` met `DATABASE_URL` → de **live** scrum4me-DB (127.0.0.1:5432/scrum4me, host-prisma-conventie — niet de build-dummy). Geen mcp/copilot-herstart (de gate leest `content_policy` per request — 154-bevestigd). Spec + plan: scrum4me-copilot `docs/superpowers/` (cross-review-cleared: codex + 154 akkoord). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(avg-d): idempotente content_policy-seed-applier (update-by-id, dry-run, fail-loud)
All checks were successful
CI / Lint, Typecheck, Test & Build (pull_request) Successful in 3m24s
CI / Deploy Manual (workflow_dispatch) (pull_request) Has been skipped
CI / Detect deploy-relevant changes (pull_request) Has been skipped
CI / Deploy Preview (PR) (pull_request) Has been skipped
CI / Deploy Production (main) (pull_request) Has been skipped
d1d2521ad0
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/Scrum4Me!86
No description provided.