You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Browse filesBrowse the repository at this point in the historyBrowse files
authored
fix(e2e): the chrome destinations are a named gap, not a mystery failure (#549)
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: Conduction Release Bot <release-bot@conduction.nl>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
-[ ] Settle whether `CnAppRoot` hosts `WorkspaceApp` or the workspace shell keeps the page and only borrows the footer chrome.
6
+
-[ ] Settle the skip link: one bypass target, not two.
7
+
-[ ] Settle whether a dashboard gets a URL, and whether that is this change or `dashboard-deeplinking`.
8
+
9
+
## Routing
10
+
11
+
-[ ] Add `vue-router` and create the router in `src/main.js` in **path** mode (`createWebHistory`), matching the fleet: a hash route would be ignored and land silently on the dashboard.
12
+
-[ ] Derive the route table from `manifest.pages` rather than hand-wiring it, so a declared page is a routed page by construction.
13
+
-[ ]`/dashboard` (and `/`) render `WorkspaceApp`; `#launchpad-main-content` keeps `tabindex="-1"` and stays the bypass target.
14
+
-[ ]`/store`, `/reports`, `/reports/dashboards` and `/features-roadmap` render their declared page types.
15
+
16
+
## Shell
17
+
18
+
-[ ] Root on `CnAppRoot` per the decision above, keeping the org navigation rail and slide-in sidebar working.
19
+
-[ ] One skip link.
20
+
-[ ]`.workspace-shell` still renders on the dashboard route — the chrome spec's tripwire test asserts the shell, and it should keep passing.
21
+
22
+
## Tests
23
+
24
+
-[ ] Remove the four `test.fail()` markers in `tests/e2e/app-chrome.spec.ts`. They are expected-to-fail today; Playwright fails the run if a `test.fail()` test passes, so landing routing turns them red until the markers come off. That is the intended signal.
25
+
-[ ] The tripwire test `the shell is LaunchPad's own, not the shared CnAppNav one` asserts `cn-nav` has count 0. If `CnAppRoot` is adopted it must be rewritten, not deleted.
26
+
-[ ] A route test per declared page, so a page added to the manifest without a component fails.
27
+
28
+
## Verify
29
+
30
+
-[ ] gate-107 still reports 5 of 5, and now truthfully.
31
+
-[ ] The E2E leg is green on the `development` push run — it has not been since 2026-09-03.
0 commit comments