flaky: verify-e2e hangs on catalogus.spec.ts (beheerder ziet catalogus) #161
Closed
opened 2026-09-03 12:23:47 +00:00 by eho
·
1 comment
No Branch/Tag Specified
main
ci/175-deploy-on-merge
feat/177-public-tls-edge
ci/168-helm-chart-ci-gate
docs/169-mkdocs-nav
feat/25-helm-kubernetes-caddy
fix/161-e2e-bounded-and-diagnosable
feat/162-werkbak-live-refresh
feat/132-medewerker-mfa
fix/156-tempo-ingester-healthcheck
feat/153-projection-sourced-from-objecten
feat/152-objecten-publishes-to-nrc
feat/149-acl-writes-registerrecord
feat/141-registerrecord-objecttype
perf/verify-stack-uwsgi-oz-nrc
fix/144-verify-stack-uwsgi
feat/140-objecten-up
feat/139-objecttypen-up
feat/131-default-fill-crud
chore/136-ci-job-summaries
fix/134-verify-stack-scheduling
feat/130-beheer-catalogi
feat/124-metrics-dashboards
ci/127-parallel-jobs
feat/123-distributed-traces
feat/111-self-service-resume
feat/113-acl-zaaktype-by-identificatie
fix/110-compose-local-flow
fix/115-e2e-single-worker
docs/111-backlog-s26
feat/106-close-zaak-on-timeout
feat/103-diploma-upload-documenten
feat/102-document-wait-timeout
feat/14-dmn-diploma-eligibility
feat/15-beoordeling-escalation
fix/portal-nginx-resolver
fix/local-eventsubscriber-acl
feat/12-withdrawal-portal
fix/91-local-compose-parity
feat/12-withdrawal-bff
feat/12-withdrawal-workflow
feat/12-withdrawal
feat/13-behandel-portal
feat/13-behandel-decide
feat/13-behandel-bff-auth-werkbak
feat/13-workflow-user-tasks
feat/13-behandel-decision-model
chore/release-2026.07.0
feat/78-reference-correlation
feat/75-approval-flow
feat/10-openbaar-portal
chore/73-ci-speedups
feat/68-e2e
feat/67-self-service-form
feat/66-api-client
feat/65-nx-workspace
feat/8-bff
feat/6-domain-service
feat/7-event-subscriber-projection
feat/56-nrc-notification-wiring
test/46-acl-openzaak-integration
feat/47-acl-mutation-baseline
ci/30-gitea-actions-ci
feat/5-acl-open-zaak
feat/4-flowable
feat/3-keycloak
feat/2-opennotificaties
feat/2-catalogus-seed
feat/10-openzaak-compose
feat/32-docs-scaffold
feat/31-contributor-workflow
feat/30-gitea-actions-ci
feat/29-bff-docker-compose
chore/remove-bootstrap-scripts
feat/28-bff-health
docs/split-s00
v2026.07.0
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
eho (Edwin van den Houdt)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: eho/register-referentie#161
Reference in New Issue
Block a user
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 happened
CI / verify-stackfailed on PR #160 (a documentation-only change — markdown andmkdocs.yml).Every check before the e2e suite passed: stack health, observability, objecttypen, objecten,
registerrecord, all 8 ACL integration tests, tracing, metrics. The job then entered
make verify-e2eand failed on the first of 5 Playwright tests:That is
tests/e2e/catalogus.spec.ts— S-15a, the beheerder login → catalogus walking skeleton.Why this looks like a flake, not a regression
path from a docs/mkdocs change to a beheer-portal login flow.
verify-stackjob on the same day and passed cleanly, so the job is not broken outright.
mainthree days earlier (94742a2) also failedverify-stack, but at adifferent point entirely — Tempo container startup — fixed by the very next commit (#157,
"stop single-binary Tempo evicting its only ingester"). Two distinct, unrelated
verify-stackfailures inside one week points at general instability in that job rather than one root cause.
The odd part: a ~24-minute gap
The job's total run time was 35m55s. The log stream above stops at the failure line, roughly
11.5 minutes after the job started (
09:38:59→09:50:30). The remaining ~24 minutesproduced no further log output before the job was marked failed. Worth checking whether
Playwright hung capturing a trace/video after the assertion failure, or whether the runner is
waiting out a default timeout before killing the job — either way, that gap is its own thing
to look at, separate from why the login/assertion failed the first time.
Evidence
eho/register-referentiedocs(architecture): import the FDS architecture decisions from the lab repo (closes #159) (#160)actions/runs/739, jobverify-stack(job id 2836, task id 2660)actions/runs/733, job id 2807, commit94742a2actions/runs/737Suggested next step
Re-run
make verify-e2e(or the fullverify-stack) against currentmaina few times outsidea PR to see how often
catalogus.spec.tsactually fails, and check whether Playwright'strace/video artifact is retained on that failed run — the job log gives no assertion detail
beyond the one-line summary, so the artifact (if the runner kept it) is the next thing to pull.
CLAUDE.md is explicit that flaky tests are fixed, not retried — filing this instead of retrying
CI on #160.
Picked this up — PR #165. Two findings worth recording here, since one of them changes how the issue reads.
The ~24-minute gap is the job being stopped, not silence. Run 739's job metadata (job id 2836,
attempt 1) shows the e2e step running 09:48:17 → 10:14:54 and then every later step as a
zero-length
failurestamped at that same instant:if: always()only covers an earlier step failing — it does not survive the job itself beingstopped, so the per-spec summary, the container-log dump and the teardown never ran, and the log
lost whatever the killed process had buffered. That is why the only surviving output was one
✘line. Also note run 739 now reports
run_attempt: 2(hence its green conclusion today), andconcurrency.cancel-in-progress: truecancels an in-flight run on any re-run or new push — so thestop may simply have been the re-run, and there may never have been a 24-minute hang at all.
Recorded as gotchas §9, including how to read step timings via the API instead of trusting a
truncated log.
Why the spec cost 1.8 minutes rather than failing at an expect timeout. Playwright actions
(
fill,click) auto-wait until the test timeout, notexpect.timeout— so when the login formnever appears,
#username.fill()burns the full 90s and reportslocator.fill: Test timeout of 90000ms exceeded: the symptom, with no hint at the cause. The suspected shape is a portal thatserves its page but never bootstraps (
main.tsdoes a one-shotfetch('config.json').then(bootstrap).catch(console.error), andauthorize()needs the OIDCdiscovery document), which leaves a blank page with nothing in the DOM and nothing on screen.
What #165 changes:
globalTimeoutbounds the run so Playwright stops and reports (the reportand the
if: always()steps survive); both Keycloak forms are asserted visible first with a 20sbudget and a message naming the step that never happened — verified against a deliberately broken
portal, failing in 20.2s instead of 90; and the per-spec summary now carries the failing spec's
error, so a red e2e explains itself without a log dive.
What it does not do: prove why the login failed that once — the evidence for that was destroyed
by the second defect. I ran the suite green five times locally today (catalogus.spec 1.1–5.3s), but
a local box is not the loaded CI runner, so that is weak evidence. Suggest keeping this issue open
until the next occurrence reports itself with the new diagnostics, and closing it then — #165 says
closes #161, so say the word and I will drop that footer and let this issue stand on its own.Spun out of the investigation, not included: all four portals show a permanently blank page if
their startup fetch fails, with no UI and no recovery. That is a product gap rather than test
infra and wants its own slice — happy to file it.