docs: close WP-69, record verification result
CI / changes (push) Successful in 8s
CI / lint (push) Successful in 1m6s
CI / frontend (push) Successful in 2m19s
CI / backend (push) Successful in 1m53s
CI / e2e (push) Successful in 3m13s
CI / semgrep (push) Successful in 1m4s
CI / api-client-drift (push) Successful in 1m51s
CI / storybook-a11y (push) Successful in 10m43s
CI / changes (push) Successful in 8s
CI / lint (push) Successful in 1m6s
CI / frontend (push) Successful in 2m19s
CI / backend (push) Successful in 1m53s
CI / e2e (push) Successful in 3m13s
CI / semgrep (push) Successful in 1m4s
CI / api-client-drift (push) Successful in 1m51s
CI / storybook-a11y (push) Successful in 10m43s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -119,7 +119,7 @@ for its existing violations, so every WP ends green.
|
|||||||
| [WP-66](WP-66-behandelportal-openzaak-write.md) | Wire the decision into OpenZaak | 11 · Behandelportal | done |
|
| [WP-66](WP-66-behandelportal-openzaak-write.md) | Wire the decision into OpenZaak | 11 · Behandelportal | done |
|
||||||
| [WP-67](WP-67-monorepo-behandelportal.md) | Merge behandelportal into this repo as a monorepo | 11 · Behandelportal | done |
|
| [WP-67](WP-67-monorepo-behandelportal.md) | Merge behandelportal into this repo as a monorepo | 11 · Behandelportal | done |
|
||||||
| [WP-68](WP-68-ddd-aggregate-hardening.md) | Aggregate invariants + status modelling (architecture review) | 12 · DDD hardening | done |
|
| [WP-68](WP-68-ddd-aggregate-hardening.md) | Aggregate invariants + status modelling (architecture review) | 12 · DDD hardening | done |
|
||||||
| [WP-69](WP-69-intake-scholing-threshold-enforcement.md) | Enforce the scholing threshold server-side | 12 · DDD hardening | todo |
|
| [WP-69](WP-69-intake-scholing-threshold-enforcement.md) | Enforce the scholing threshold server-side | 12 · DDD hardening | done |
|
||||||
| [WP-70](WP-70-test-data-builders.md) | Test-data builders: illegal fixtures unrepresentable (ADR-0006) | 12 · DDD hardening | done |
|
| [WP-70](WP-70-test-data-builders.md) | Test-data builders: illegal fixtures unrepresentable (ADR-0006) | 12 · DDD hardening | done |
|
||||||
| [WP-71](WP-71-test-framework-coherence.md) | Test framework coherence: BDD/DDD alignment, close the escape hatches | 12 · DDD hardening | done |
|
| [WP-71](WP-71-test-framework-coherence.md) | Test framework coherence: BDD/DDD alignment, close the escape hatches | 12 · DDD hardening | done |
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,28 @@
|
|||||||
# WP-69 — Enforce the scholing threshold server-side
|
# WP-69 — Enforce the scholing threshold server-side
|
||||||
|
|
||||||
Status: todo
|
Status: done (5d73ca2)
|
||||||
Phase: 12 — DDD hardening
|
Phase: 12 — DDD hardening
|
||||||
|
|
||||||
|
## Verification result (2026-08-18)
|
||||||
|
|
||||||
|
Backend 230 → 245 tests (+8 `Domain/IntakeRuleTests`, +7 `Acceptance/IntakeSubmissionTests`);
|
||||||
|
frontend ssp 238 → 242. `npm run ci` green incl. `check:seam` (`OK … (1000)`), api-client and
|
||||||
|
behaviour-spec drift.
|
||||||
|
|
||||||
|
**The bypass was proven closed against a running backend, not just by green tests:**
|
||||||
|
`POST /api/v1/intakes {"uren": 500}` with no scholing fields → **400** with the Dutch detail;
|
||||||
|
an intake-typed Concept submitted via `POST /applications/{id}/submit {"uren": 500}` → **400**,
|
||||||
|
and `GET /applications/{id}` afterwards still reports `"tag":"Concept"` (no state change, still
|
||||||
|
retryable); the same request plus `"aanvullendeScholing": false` → **200** with a referentie and
|
||||||
|
`InBehandeling`.
|
||||||
|
|
||||||
|
**Deviation from the Files list:** `EndpointTests.Worked_hours_submission_succeeds` had to be
|
||||||
|
touched despite being on the do-not-modify list — it posts `{ uren: 40 }` with no scholing
|
||||||
|
answer, which _is_ the crafted-POST bypass this WP closes, so the existing test was itself
|
||||||
|
asserting the vulnerable behaviour. Fixed minimally by adding `aanvullendeScholing = false`
|
||||||
|
(unknown to and ignored by `HerregistratieRequest`, so the paired `/herregistraties` row is
|
||||||
|
unaffected). The zero-hours 422 rows — the ordering regression net — are unmodified as planned.
|
||||||
|
|
||||||
## Why
|
## Why
|
||||||
|
|
||||||
WP-68 (F5) found that `IntakePolicy`'s doc-comment claimed _"the backend re-validates on
|
WP-68 (F5) found that `IntakePolicy`'s doc-comment claimed _"the backend re-validates on
|
||||||
|
|||||||
Reference in New Issue
Block a user