fix(e2e): 9 fixmes carried their reason where the report could not see it - #1423
Merged
Conversation
…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.
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.
Contributor
Quality Report — ConductionNL/dossiq @
|
| 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.
Contributor
Quality Report — ConductionNL/dossiq @
|
| 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Nine
test.fixme('title', fn)calls across eight files. That form recordsNO 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.