You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fleet totals for context: 3,041 specs passing, 0 failing — so this is the only material gap in E2E coverage.
Why these are not benign
The recurring shape is a skip conditioned on seeded data that the CI seeder never creates:
// decidiq/tests/e2e/integration-registry.spec.ts (21 tests)test.skip(!first,'no meeting objects on this instance — seed at least one')// shillinq/tests/e2e/budget-grid-view.spec.ts (5 tests)test.skip(!rendered,'no LedgerGroup seeded for this administration')
Both seeders deliberately provision registers and schemas only — decidiq's ci-seed.sh header calls the register import "the ONLY legitimate seed source". So the object never exists unless an earlier spec happened to create one, which makes coverage depend on spec execution order and reports nothing-was-tested as success.
A skip cannot distinguish "not applicable here" from "the thing this needed was never created", and it reports the second as a pass.
The gate for this exists and now works
e2e-skip-blocking in the shared quality workflow reads the run's Playwright report — the only place a runtime test.skip(cond, reason) is visible, since the CI log prints counts with no reasons. It reports a spec file that executed zero tests, a skip deferring to a deploy state CI itself decides, and a skip carrying no reason.
It had never run in any app. Four independent breaks, each hiding the next:
check_e2e_skips.py existed only on .github main and was in none of the last 12 release tags → fixed by cutting v1.10.0
All four are now merged. launchpad is the first app with the gate genuinely enforcing.
Suggested path per app
Seed what the specs need, following each repo's documented fixture-marker convention — create through the established helper, track in a per-run ledger, delete in afterAll, and add any new schema to TEARDOWN_ORDER (a schema in the ledger but absent from that array leaks silently).
Where a skip really is legitimate — a genuinely absent optional app or external service — leave it, and make the reason say which service.
Then set e2e-skip-blocking: true for that app, so it can only stay clean.
Worked example: ConductionNL/decidiq#941 converts the 21-test integration-registry cluster using decidiq's existing governance-fixture helper (meeting was already in its TEARDOWN_ORDER).
178 Playwright specs skip fleet-wide, and a skip is counted as a pass
Measured 2026-08-27 from the Playwright job logs of each app's most recent completed E2E run on
development.hydra-console12,spec-coverage/buildiq-runtime11,nldesign-theme-selection6,chat-companion-streaming6,docudesk-document-templates5integration-registry21,spec-coverage/resolution-minutes5,rbac-authorization-workflow4brp-kvk-initiator6,pages6,workflow-editor-canvas3,related-case-linking3budget-grid-view5,budget-charts4,receipt-extraction-consume3,budget-known-costs3spec-coverage/connector-catalog6,synchronization-workflow2Fleet totals for context: 3,041 specs passing, 0 failing — so this is the only material gap in E2E coverage.
Why these are not benign
The recurring shape is a skip conditioned on seeded data that the CI seeder never creates:
Both seeders deliberately provision registers and schemas only — decidiq's
ci-seed.shheader calls the register import "the ONLY legitimate seed source". So the object never exists unless an earlier spec happened to create one, which makes coverage depend on spec execution order and reports nothing-was-tested as success.A skip cannot distinguish "not applicable here" from "the thing this needed was never created", and it reports the second as a pass.
The gate for this exists and now works
e2e-skip-blockingin the shared quality workflow reads the run's Playwright report — the only place a runtimetest.skip(cond, reason)is visible, since the CI log prints counts with no reasons. It reports a spec file that executed zero tests, a skip deferring to a deploy state CI itself decides, and a skip carrying no reason.It had never run in any app. Four independent breaks, each hiding the next:
check_e2e_skips.pyexisted only on.githubmain and was in none of the last 12 release tags → fixed by cutting v1.10.0hydra-gates/path segment composer installs it under → fix(quality): a missing skip-discipline gate must fail, not warn #595All four are now merged.
launchpadis the first app with the gate genuinely enforcing.Suggested path per app
afterAll, and add any new schema toTEARDOWN_ORDER(a schema in the ledger but absent from that array leaks silently).e2e-skip-blocking: truefor that app, so it can only stay clean.Worked example: ConductionNL/decidiq#941 converts the 21-test
integration-registrycluster using decidiq's existinggovernance-fixturehelper (meetingwas already in itsTEARDOWN_ORDER).