fix(e2e): three reasons this leg is red — the demo-data choice, the Suggest-feature link, and a stale page-type copy - #1845
Merged
Conversation
The demo-data step is a choice followed by a load step now, and the CI seed settles the optional steps by posting `skip-demo-data` — which records `demo_dataset = none`. The load action then correctly imports nothing and answers "No example data was loaded", so `installing the demo data reports HOW MUCH landed` asserted against a decision it never made. It went red on every app whose seed reaches that line. It picks the shipped dataset first now, and it reads the id from `/api/setup/status` rather than writing a literal: the choice step reads its options from exactly that list, so a hardcoded id can pass while the list an operator sees is empty. The `api()` helper gained a body, which it needed to post the choice at all. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
nextcloud-vue 2.36.4 deleted CnSuggestFeatureModal — team decision 2026-09-04, the forge is where the conversation happens. The Features & roadmap header CTA became an anchor to the forge feature-request issue form, and an <a href> has role link, not button. So the assertion matched nothing on a page that renders perfectly well, and this leg has been red on development on every push since the app took ^2.36.4. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
Quality Report — ConductionNL/integriq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ⏭️ | ||||
| phpmd | ⏭️ | ||||
| psalm | ⏭️ | ||||
| phpstan | ⏭️ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ⏭️ | ||||
| build | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| composer | ⏭️ | ⏭️ | |||
| npm | ✅ | ⏭️ | |||
| app:check-code | ⏭️ | ||||
| info.xml | ⏭️ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ❌ | ||||
| Newman | ❌ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-09-05 12:39 UTC
Download the full PDF report from the workflow artifacts.
…d from it Two failures, one root: `manifest-pages.spec.ts` kept a hand-written copy of the schema page-type enum, and the copy fell behind. `reports` has been a type the manifest schema accepts for a while, the manifest started using it, and this test called it unknown. The set is read from the vendored schema now. It throws if the enum is not there rather than falling back: a test that cannot find the schema must say so, not quietly accept every type it is shown. Five types the copy was missing come back with it — reports, store, search, flows and flow-detail. The Reports page also joins MANIFEST_PAGES, which is what the sibling anti-staleness guard was telling us: a page nothing navigates to is a page that stops being smoke-tested with nothing going red. The table drives one test per entry, so the page is driven now. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
Quality Report — ConductionNL/integriq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ⏭️ | ||||
| phpcs | ⏭️ | ||||
| phpmd | ⏭️ | ||||
| psalm | ⏭️ | ||||
| phpstan | ⏭️ | ||||
| phpmetrics | ⏭️ | ||||
| eslint | ⏭️ | ||||
| stylelint | ⏭️ | ||||
| build | ⏭️ | ||||
| composer | ⏭️ | ⏭️ | |||
| npm | ⏭️ | ⏭️ | |||
| app:check-code | ⏭️ | ||||
| info.xml | ⏭️ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ❌ | ||||
| Newman | ❌ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-09-05 12:46 UTC
Download the full PDF report from the workflow artifacts.
Contributor
Quality Report — ConductionNL/integriq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| build | ✅ | ||||
| check-specs | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 141/141 | |||
| npm | ✅ | ✅ 537/537 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-09-05 13:03 UTC
Download the full PDF report from the workflow artifacts.
rubenvdlinde
added a commit
that referenced
this pull request
Sep 6, 2026
…is-broken development landed the Reports regression guards independently (#1845), and did it better: MANIFEST_PAGES now reads the page-type enum from the schema instead of copying it, so the copy cannot drift again. That side is kept and my hand-written STANDARD set is dropped. What survives from this branch is the part development does not have: the OperationalHealth entry in the page table, and the 501 APP_NOT_AVAILABLE console filter for MappingDetail. The merged tree is byte-identical to the rebase this replaces, which was the tree verified against all 80 applicable gates.
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.
Three failures on the E2E leg, unrelated to each other, all making
developmentred on every push. It has not been green since 2026-09-03.1. The demo-data test never chose a dataset
installing the demo data reports HOW MUCH landed, not just successposts the load action and then asserts the message names a non-zero object count. It never says which dataset to load.That was fine while the step was a bare run-action. The step is a choice followed by a load step now, and the CI seed settles the optional steps by posting
skip-demo-data, which recordsdemo_dataset = none. The load then does exactly the right thing and imports nothing, so the test asserted against a decision it never made.api()gained a body parameter. It had none, so a test could not post a choice at all.pickShippedDataset(page)first, reading the id fromGET /api/setup/statusrather than writing'demo'as a literal. The choice step declaresoptionsSource: datasetsand carries no options of its own, so that response is the list an operator sees.2. The Suggest-feature CTA is a link now
nextcloud-vue 2.36.4 deleted
CnSuggestFeatureModal(team decision 2026-09-04: the forge is where the conversation happens). The header CTA became an anchor to the forge's feature-request issue form, and an<a href>has rolelink, sogetByRole('button')matched nothing on a page that renders perfectly well.The interactive test reads the target instead of clicking it. Clicking now leaves the app for a real issue form on a real forge, which in CI means navigating off the instance under test and out to the network.
3. The page-type list was a copy of an enum, and it drifted
manifest-pages.spec.tskept twelve hand-written page types.reportshas been in the manifest schema for a while, the manifest started using it, and this test called it unknown. Five types the copy was missing come back:reports,store,search,flows,flow-detail.The set is read from the vendored schema now, and it throws if the enum is not there rather than falling back to a default — a test that cannot find the schema must say so, not quietly accept every type it is shown.
The
Reportspage also joinsMANIFEST_PAGES, which is exactly what the sibling anti-staleness guard was reporting: a page nothing navigates to stops being smoke-tested with nothing going red. The table drives one test per entry, so/reportsis driven now.Verified
prettier,eslintandplaywright test --listare green on all three changed files; the list collects 41 tests inmanifest-pages.spec.ts, one per manifest page plus the four guards. The E2E leg isskippingon pull requests and runs on thedevelopmentpush, so the run after this merges is where it is proven.🤖 Generated with Claude Code