Skip to content

fix(e2e): the chrome destinations are a named gap, not a mystery failure - #549

Merged
rubenvdlinde merged 1 commit into
developmentfrom
fix/chrome-destinations-are-a-named-gap
Sep 5, 2026
Merged

fix(e2e): the chrome destinations are a named gap, not a mystery failure#549
rubenvdlinde merged 1 commit into
developmentfrom
fix/chrome-destinations-are-a-named-gap

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

LaunchPad declares nine pages in its manifest and serves one. On the last development push run, /store, /reports and /flows each redirected to /dashboard, and /reports/dashboards rendered the workspace grid.

That is not a bug in these tests. It is the app.

What the investigation found

  • LaunchPad has no vue-router at all. createRouter appears nowhere in src/. Navigation is Pinia state — dashboard.js and orgNavigation.js switch what the grid shows, in place, without touching the URL.
  • It is the only app in the fleet that does not root on CnAppRoot. App.vue records that decision where it writes its own skip link, because not rooting on NcContent means not inheriting Nextcloud's.
  • main.js has 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-107 reads the manifest and reports 5 of 5 chrome items present. It cannot see that nothing routes them. And tests/e2e/app-chrome.spec.ts has 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 — whether CnAppRoot hosts WorkspaceApp or the reverse, which shell owns the single skip link, and whether a dashboard finally gets a URL (dashboard-deeplinking wants 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 a test.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:manifest and check:schema-l10n — this repo's three frontend checks — all pass, as do lint and playwright test --list (8 tests collect). Every manifest assertion was dry-run against the real src/manifest.json.

The E2E leg itself runs on the development push. This should be the run that ends the red streak that started on 2026-09-03.

🤖 Generated with Claude Code

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>
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/launchpad @ 64d2e05

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.

@rubenvdlinde
rubenvdlinde merged commit 5aacaf1 into development Sep 5, 2026
43 checks passed
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