Skip to content

fix(e2e): 9 fixmes carried their reason where the report could not see it - #1423

Merged
rubenvdlinde merged 3 commits into
developmentfrom
fix/e2e-skip-discipline-dossiq
Aug 28, 2026
Merged

fix(e2e): 9 fixmes carried their reason where the report could not see it#1423
rubenvdlinde merged 3 commits into
developmentfrom
fix/e2e-skip-discipline-dossiq

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Nine test.fixme('title', fn) calls across eight files. That form records
NO reason in the Playwright report, which is the only place the
skip-discipline gate — or anyone reading a run — can find one. Each
already HAD a good reason in a comment; it is lifted into the annotation.

document-zaakdossier 3
admin-settings 1
case-email-integration 1
deelzaak-support 1
workflow-operations 1
cases-crud 1
deelzaak-case-email 1

Nothing about what runs changes: the same 9 tests are excluded, for the
same reasons, and the comments stay.

WHAT IS DELIBERATELY NOT DONE HERE, and why it matters:

pages.spec.ts has 6 more of these, and lifting their comment verbatim
would have made the report WORSE, not better. The comment says:

DEPLOY-MISMATCH: ... The build deployed to this environment is v0.2.0,
whose /voorstellen route renders the generic index shell instead.

The gate's DEPLOY_STATE list matches "deploy mismatch" and "deployed
build", so that reason classifies as V2 — "CI decides this state:
impossible for the app under test, it IS the head commit". The six would
have moved from V3 to V2 and the violation count would not have dropped
at all.

Checked before writing anything, and the premise turns out to be false in
a more interesting way than the comment claims:

development is 0.3.1-unstable — well past the v0.2.8 the comment waits for
/voorstellen IS declared in src/manifest.json, and VoorstelDetail.vue exists
"Nieuw voorstel" 0 occurrences in src/
"Geen actieve voorstellen" 0 occurrences in src/

So this is not a stale deployment. The route exists; the bespoke view with
those exact strings was never built. "Deploy mismatch" was hiding "this
was never implemented", which is precisely the substitution the V2 rule
exists to prevent.

Those six need a decision this commit should not make: build the view, or
drop the tests. Raised separately.

Verified: npm ci rc=0 · lint rc=0 · prettier clean · 181 tests across 41
files, unchanged · 9 new annotations, 0 of which classify as V2 (checked
against the gate's own DEPLOY_STATE and ENVIRONMENT_ABSENCE lists,
multiline-aware).

Part of ConductionNL/.github#609.

…e it

Nine `test.fixme('title', fn)` calls across eight files. That form records
NO reason in the Playwright report, which is the only place the
skip-discipline gate — or anyone reading a run — can find one. Each
already HAD a good reason in a comment; it is lifted into the annotation.

  document-zaakdossier    3
  admin-settings          1
  case-email-integration  1
  deelzaak-support        1
  workflow-operations     1
  cases-crud              1
  deelzaak-case-email     1

Nothing about what runs changes: the same 9 tests are excluded, for the
same reasons, and the comments stay.

WHAT IS DELIBERATELY NOT DONE HERE, and why it matters:

pages.spec.ts has 6 more of these, and lifting their comment verbatim
would have made the report WORSE, not better. The comment says:

  DEPLOY-MISMATCH: ... The build deployed to this environment is v0.2.0,
  whose /voorstellen route renders the generic index shell instead.

The gate's DEPLOY_STATE list matches "deploy mismatch" and "deployed
build", so that reason classifies as V2 — "CI decides this state:
impossible for the app under test, it IS the head commit". The six would
have moved from V3 to V2 and the violation count would not have dropped
at all.

Checked before writing anything, and the premise turns out to be false in
a more interesting way than the comment claims:

  development is 0.3.1-unstable — well past the v0.2.8 the comment waits for
  /voorstellen IS declared in src/manifest.json, and VoorstelDetail.vue exists
  "Nieuw voorstel"           0 occurrences in src/
  "Geen actieve voorstellen" 0 occurrences in src/

So this is not a stale deployment. The route exists; the bespoke view with
those exact strings was never built. "Deploy mismatch" was hiding "this
was never implemented", which is precisely the substitution the V2 rule
exists to prevent.

Those six need a decision this commit should not make: build the view, or
drop the tests. Raised separately.

Verified: npm ci rc=0 · lint rc=0 · prettier clean · 181 tests across 41
files, unchanged · 9 new annotations, 0 of which classify as V2 (checked
against the gate's own DEPLOY_STATE and ENVIRONMENT_ABSENCE lists,
multiline-aware).

Part of ConductionNL/.github#609.
… for three tests that are not missing

The six remaining fixmes in pages.spec.ts shared one blanket comment
blaming a stale deployment. Checking it split them three ways, and only
one third was what the comment claimed.

THE PREMISE WAS FALSE. development is 0.3.1-unstable, past the v0.2.8 the
comment waited for, and /voorstellen IS declared in src/manifest.json with
VoorstelDetail.vue present. Nothing was waiting on a deployment.

  1. NEVER BUILT (3 tests) — the bespoke B&W Voorstellen LIST view.
     Measured against src/: "B&W Voorstellen" 0 hits, "Nieuw voorstel" 0,
     "Geen actieve voorstellen" 0. The route falls through to the generic
     index shell because that is all there is.

     Now tracked in openspec/changes/bw-voorstellen-view/ — three
     requirements (bespoke index, lifecycle filters, Dutch empty state)
     and tasks 4.1-4.3 to un-skip exactly these tests. Task 1.2 records
     that the "Actief / Afgerond / Alle" filter set is a guess taken FROM
     a test, not a contract, and must be checked against the register.

  2. PARTLY REAL (2 tests) — "New Case" exists in src/manifest.json;
     "New Task", "Refresh dashboard" and "Set location" do not. These
     assert a MIX of shipped and never-built controls, so neither "pending
     work" nor "stale selector" describes them whole. Their reasons now
     say so, and say they should be split before being fixed or dropped.

  3. NOT MISSING AT ALL (1 test) — "Case Type Management" IS present in
     src/views/settings/AdminRoot.vue. It is in the head commit, so a
     deploy could never have been the reason. Almost certainly a
     navigation or selector problem, and the reason now says to debug it
     rather than wait for it.

Case 3 is the one that matters: a blanket reason had been asserting
something demonstrably false about a feature that ships today, and it
would have kept doing so for as long as the comment was believed.

All six reasons are checked against the gate's DEPLOY_STATE list and
classify as allowed — 0 of 6 are V2. That check is the point: lifting the
old comment verbatim would have matched "deploy mismatch" and "deployed
build" and moved all six from V3 to V2 while looking like progress.

Verified: prettier clean · lint rc=0 · 181 tests across 41 files,
unchanged · 0 reasonless fixmes left in this file.
@rubenvdlinde
rubenvdlinde requested a review from Rem-Dam as a code owner August 28, 2026 13:52
dossiq's six V2 findings share one claim — the surface is not in the
deployed build. Checked against src/, five of the six are demonstrably in
the head commit, and the sixth is too. CI deploys the head commit, so
none of them could have been a deploy gap; that is exactly what the V2
rule says.

  related-cases sidebar tab   src/views/cases/components/RelatedCasesSection.vue
  substitution settings       SubstitutionAdmin.vue, registered in src/registry.js
  delete-case control         "Delete case" in 3 files, "Delete parent case" in 1

Three distinct defects were hiding behind that one wrong reason:

1. A LOCATOR THAT COULD NEVER MATCH A DUTCH INSTANCE.
   handler-vervanging-waarneming looked for /Substitution/ and
   /Register substitution/. l10n/nl.json translates:

       Substitution          -> Vervanging
       Register substitution -> Waarneming registreren

   So on a Dutch instance the heading is "Vervanging" and the English-only
   regex could not match it — the surface was there and the test could
   not see it. The locators now accept both.

2. `count()` PROBES THAT CANNOT RETRY.
   Four guards decided a control was absent from a single snapshot taken
   immediately after navigation, then blamed a deployment. They now wait
   for the element to attach before concluding it is missing.

3. A FILE-LEVEL GATE THAT STOOD DOWN THE WHOLE FILE.
   related-case-linking's `openFirstCaseOrSkip` used the same
   non-retrying `count()`, and it gives EVERY test in the file its
   verdict. Firing early is why that file reads 3 skipped / 0 executed —
   a V1 "spec file that ran nothing". It now waits 8s for a row.

Every reason is rewritten to state what is true and to name the file that
proves the surface ships, so the next reader starts from evidence rather
than from a deployment theory. All nine skip sites across the three files
are checked against the gate's DEPLOY_STATE list: 9 allowed, 0 V2.

This does not assert the tests now PASS — that needs a run against a
seeded instance. What it removes is the reason they could never pass and
the claim that a build was to blame.

Verified: prettier clean · lint rc=0 · 181 tests across 41 files,
unchanged.
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ 98b1114

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-vue3-compile
test-l10n
format
check-schema-l10n
check-l10n-js
composer ✅ 106/106
npm ✅ 552/552
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman ⏭️
Playwright 🚨 NO VERDICT — enabled but never ran
Hydra gates

Quality workflow — 2026-08-28 13:58 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/dossiq @ 1f9f2fd

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
check-vue3-compile
test-l10n
format
check-schema-l10n
check-l10n-js
composer ✅ 106/106
npm ✅ 552/552
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman ⏭️
Playwright 🚨 NO VERDICT — enabled but never ran
Hydra gates

Quality workflow — 2026-08-28 14:16 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit cce909b into development Aug 28, 2026
44 checks passed
@rubenvdlinde
rubenvdlinde deleted the fix/e2e-skip-discipline-dossiq branch August 28, 2026 18:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant