After submitting, the self-service portal held the registration only in in-memory signals, so a page refresh stranded an in-flight registration — the reference and its "Documenten aanleveren" / "Trek aanvraag in" actions were lost, with no way back (the reference wasn't in the URL and there was no read endpoint). This is the gap a citizen hit in testing.
Now the portal resumes on load:
Domain:IRegistrationStore.FindOpenByBsnAsync (the citizen's non-terminal INGEDIEND/IN_BEHANDELING registration) + GET /registrations/current?bsn=.
BFF: owner-scoped GET /self-service/registrations (bsn from the DigiD token) → the current registration, or 204 when none. Regenerated services/bff/openapi.json.
Frontend:registration-page calls it on init and restores the submitted view (reference + actions); 204 shows the submit form as before. api-client regenerated (orval).
e2e (fresh CI stack): all 3 specs pass — registration, resume, withdrawal (29.5s, single worker).
Mutation: domain 91.04%, bff 100% (break 90%). make lint clean.
Notes for reviewers
Shared-stack isolation: resume-on-load restores any open registration for the logged-in bsn, so the self-service e2e specs can no longer share jan-burger (the verify-* API checks submit as jan-burger/123456782 before the e2e). Each spec now has its own DigiD citizen (emma/sanne/lars-burger); jan-burger stays the documented citizen for the verify checks. This is the fix for the two intermittent e2e failures seen during development.
Scope: resumes the current in-flight registration only (terminal ones aren't resumed), per the issue's out-of-scope note.
## What & why
After submitting, the self-service portal held the registration only in in-memory signals, so a **page refresh stranded an in-flight registration** — the reference and its "Documenten aanleveren" / "Trek aanvraag in" actions were lost, with no way back (the reference wasn't in the URL and there was no read endpoint). This is the gap a citizen hit in testing.
Now the portal **resumes on load**:
- **Domain:** `IRegistrationStore.FindOpenByBsnAsync` (the citizen's non-terminal INGEDIEND/IN_BEHANDELING registration) + `GET /registrations/current?bsn=`.
- **BFF:** owner-scoped `GET /self-service/registrations` (bsn from the DigiD token) → the current registration, or **204** when none. Regenerated `services/bff/openapi.json`.
- **Frontend:** `registration-page` calls it on init and restores the submitted view (reference + actions); 204 shows the submit form as before. api-client regenerated (orval).
Closes #111
## Definition of Done
- [x] Linked issue (#111).
- [x] TDD — store `FindOpenByBsnAsync` tests, BFF endpoint tests, an Angular component test (resume-on-load), a Playwright e2e (submit → reload → restored).
- [x] Conventional Commits referencing #111.
- [x] CI green — validated locally (below); runner CI running.
- [x] `docker compose up` reaches green health — fresh stack + full e2e (3 specs) green.
- [x] Docs — `docs/synthetic-data.md` (new e2e users).
- [ ] ADR — N/A (follows existing BFF/domain patterns; no boundary change).
- [ ] Demo note — the flow is unchanged for the demo; no new demo-script section (happy to add one if wanted).
## Verified locally
- Unit: Big 141 (+7 store tests), Bff 36 (+3 endpoint tests), all suites green.
- Frontend: 12 self-service component tests (incl. resume-on-load); lint + build green.
- **e2e (fresh CI stack): all 3 specs pass** — `registration`, `resume`, `withdrawal` (29.5s, single worker).
- Mutation: domain **91.04%**, bff **100%** (break 90%). `make lint` clean.
## Notes for reviewers
- **Shared-stack isolation:** resume-on-load restores any open registration for the logged-in bsn, so the self-service e2e specs can no longer share `jan-burger` (the verify-* API checks submit as `jan-burger`/`123456782` before the e2e). Each spec now has its own DigiD citizen (`emma`/`sanne`/`lars`-burger); `jan-burger` stays the documented citizen for the verify checks. This is the fix for the two intermittent e2e failures seen during development.
- **Scope:** resumes the current **in-flight** registration only (terminal ones aren't resumed), per the issue's out-of-scope note.
Backend half of S-26. The domain gains IRegistrationStore.FindOpenByBsnAsync (the
citizen's non-terminal INGEDIEND/IN_BEHANDELING registration) + GET
/registrations/current?bsn=; the BFF adds owner-scoped GET /self-service/registrations
(bsn from the DigiD token) returning that registration or 204 when none. Regenerated
services/bff/openapi.json for the new endpoint (the api-client is generated from it).
Store + BFF endpoint unit tests; acceptance/BFF fakes updated for the new members.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Frontend half of S-26. registration-page asks the BFF for the caller's current open
registration on init (regenerated api-client → getSelfServiceRegistrations) and
restores the submitted view — reference + the documenten/withdraw actions — instead
of dropping back to the blank form after a refresh; 204 (none) shows the form as
before. Component test covers resume-on-load; a Playwright e2e submits, reloads, and
asserts the reference + actions persist.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resume-on-load (S-26) restores any open registration for the logged-in bsn, so on the
shared verify stack the specs can no longer share jan-burger: verify-domain submits as
jan-burger (123456782) before the e2e, and that open registration was being resumed on
login. Each self-service spec now uses its own citizen — registration→emma-burger,
resume→sanne-burger, withdrawal→lars-burger — none touched by the verify-* checks or
each other. jan-burger stays the documented citizen for the API-level verify checks.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
not
merged commit 5f8ab4dbcd into main2026-07-23 07:22:09 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What & why
After submitting, the self-service portal held the registration only in in-memory signals, so a page refresh stranded an in-flight registration — the reference and its "Documenten aanleveren" / "Trek aanvraag in" actions were lost, with no way back (the reference wasn't in the URL and there was no read endpoint). This is the gap a citizen hit in testing.
Now the portal resumes on load:
IRegistrationStore.FindOpenByBsnAsync(the citizen's non-terminal INGEDIEND/IN_BEHANDELING registration) +GET /registrations/current?bsn=.GET /self-service/registrations(bsn from the DigiD token) → the current registration, or 204 when none. Regeneratedservices/bff/openapi.json.registration-pagecalls it on init and restores the submitted view (reference + actions); 204 shows the submit form as before. api-client regenerated (orval).Closes #111
Definition of Done
FindOpenByBsnAsynctests, BFF endpoint tests, an Angular component test (resume-on-load), a Playwright e2e (submit → reload → restored).docker compose upreaches green health — fresh stack + full e2e (3 specs) green.docs/synthetic-data.md(new e2e users).Verified locally
registration,resume,withdrawal(29.5s, single worker).make lintclean.Notes for reviewers
jan-burger(the verify-* API checks submit asjan-burger/123456782before the e2e). Each spec now has its own DigiD citizen (emma/sanne/lars-burger);jan-burgerstays the documented citizen for the verify checks. This is the fix for the two intermittent e2e failures seen during development.