fix(e2e): the chrome destinations are a named gap, not a mystery failure - #549
Merged
Merged
Conversation
LaunchPad declares nine pages in its manifest and serves ONE. /store, /reports and /flows each redirect to /dashboard, and /reports/dashboards renders the workspace grid. That is not a bug in these tests. It is the app: LaunchPad has no vue-router at all — createRouter appears nowhere in src/ — because navigation is Pinia state that never touches the URL, and it is the only app in the fleet that does not root on CnAppRoot. main.js has called this Tier 1 since manifest adoption landed and named the change that would fix it. That change was never filed, so it is filed here: openspec/changes/launchpad-manifest-tier-3/. The four route-dependent assertions are marked test.fail() against it. Not skipped: a skipped test proves nothing and stops being read, while Playwright FAILS the run when a test.fail() test passes — so landing routing turns these red until the markers come off, in the change that earns it. What stays a live assertion is the half that is true today and worth guarding: the manifest declares four footer destinations in ADR-114's order, each with an icon, Documentation as an external href, and each of the other three naming a page the manifest hosts. The admin settings section splits out of the old foldout test and keeps passing, because it is a Nextcloud settings route rather than one of this app's own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn and
remko48
as code owners
September 5, 2026 14:50
Contributor
Quality Report — ConductionNL/launchpad @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| composer | ✅ | ✅ 104/104 | |||
| npm | ✅ | ✅ 527/527 | |||
| 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 14:54 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.
LaunchPad declares nine pages in its manifest and serves one. On the last
developmentpush run,/store,/reportsand/flowseach redirected to/dashboard, and/reports/dashboardsrendered the workspace grid.That is not a bug in these tests. It is the app.
What the investigation found
createRouterappears nowhere insrc/. Navigation is Pinia state —dashboard.jsandorgNavigation.jsswitch what the grid shows, in place, without touching the URL.CnAppRoot.App.vuerecords that decision where it writes its own skip link, because not rooting onNcContentmeans not inheriting Nextcloud's.main.jshas said so since Tier 1 adoption: "The vue-router definition below remains hand-wired (Tier 1 — not yet manifest-driven). Tier 3 (launchpad-manifest-tier-3) will replace hand-wired routes." That change was never filed.Meanwhile
gate-107reads the manifest and reports 5 of 5 chrome items present. It cannot see that nothing routes them. Andtests/e2e/app-chrome.spec.tshas never passed: it landed 2026-09-03 asserting[data-testid="cn-nav"], and that is the run in which this app first went red. It has not been green since. #547 retargeted it to the shell LaunchPad actually renders, which only moved the failure onto the true cause.What this PR does
Files the change.
openspec/changes/launchpad-manifest-tier-3/now exists, with the shape of the problem written down: the routing work, and the three decisions it needs first — whetherCnAppRoothostsWorkspaceAppor the reverse, which shell owns the single skip link, and whether a dashboard finally gets a URL (dashboard-deeplinkingwants one). It also records the alternative — make LaunchPad a documented ADR-114 exception — and why that is not the default.Marks the four route-dependent assertions
test.fail()against it. Not skipped, deliberately: a skipped test proves nothing and quietly stops being read, while Playwright fails the run when atest.fail()test passes. So landing routing turns these red until the markers come off, in the change that earns it.Keeps the half that is true today. The manifest declares four footer destinations in ADR-114's order, each with an icon, Documentation as an external
https://href, and each of the other three naming a page the manifest hosts. The admin settings section splits out of the old foldout test and keeps passing, because it is a Nextcloud settings route rather than one of this app's own.Verified
format,check:manifestandcheck:schema-l10n— this repo's three frontend checks — all pass, as dolintandplaywright test --list(8 tests collect). Every manifest assertion was dry-run against the realsrc/manifest.json.The E2E leg itself runs on the
developmentpush. This should be the run that ends the red streak that started on 2026-09-03.🤖 Generated with Claude Code