fix(e2e): the sbom locator matched the name AND the purl - #735
Merged
Conversation
'quality / E2E Tests (Playwright)' has been red on development. The product
is fine; the assertion was ambiguous.
Each component row renders the NAME and its purl, so getByText('lodash')
substring-matched two spans — <span>lodash</span> and
<span>pkg:npm/lodash@4.17.21</span> — and Playwright's strict mode failed
the assertion rather than choosing one. Adding the purl column is what made
a previously-unique string match twice, so this broke without either the
component or the test being edited.
The express assertion had the identical defect and never ran: the lodash
line failed first and masked it. Fixing only the reported line would have
surfaced express as the next failure. Verified against the fixtures —
cyclonedx-1.5-valid.json is express/pkg:npm/express@4.19.2 and vue.
The absence assertion is deliberately left as a substring match: for
'is it gone' the looser match is the STRONGER claim, since it also fails if
the purl survives, and toHaveCount tolerates multiple matches so strict mode
never applies there.
Contributor
Quality Report — ConductionNL/stackiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue-demi | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| composer | ✅ | ✅ 130/130 | |||
| npm | ✅ | ✅ 720/720 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ✅ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-24 19:07 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.
The failure
quality / E2E Tests (Playwright)is red ondevelopment(job) — 26 passed, 1 failed, and it fails on retry too, so it is not flake.The product is fine. Each component row renders the NAME and its purl, so a substring match on
lodashresolves to two spans, and Playwright's strict mode fails the assertion rather than silently picking one. Adding the purl column is what turned a previously-unique string into an ambiguous one — this broke without either the component or the test being edited.The second one, which never ran
Identical defect. It never surfaced because the lodash assertion failed first and masked it — fixing only the reported line would have shown this as the next failure. Verified against the fixtures rather than assumed:
cyclonedx-1.6-valid.jsonlodash/pkg:npm/lodash@4.17.21,log4j-core,opensslcyclonedx-1.5-valid.jsonexpress/pkg:npm/express@4.19.2,vueThe fix, and why it is deliberately asymmetric
{ exact: true }— they must be unambiguous or strict mode rejects them.toHaveCounttolerates multiple matches, so strict mode never applies there.Both cases are commented in place so the asymmetry does not read as an oversight and get "tidied" later.
Verification
Parses clean (
node --experimental-strip-types --check). The assertion change is exactly what Playwright's own error message recommends — it printsaka getByText('lodash', { exact: true })as the disambiguation.Found while auditing Playwright e2e state across all 18 core apps: 11 green on their
developmentHEAD, stackiq the only genuine failure, the rest either pending or sitting on a version-bump commit whose parent is green.