Release: merge development into beta - #444
Conversation
…ed the E2E failures (#443) DELIBERATE EXPERIMENT, and revertible in one commit. CI bisected launchpad's 11 E2E failures to the 9.9.0 -> 9.11.0 move: f93f767 9.11.0 E2E failure d158755 9.9.0 E2E success (the pin) But an isolated reproduction contradicts it. Running the same specs against a launchpad-demo instance on :8605, seeded exactly as CI seeds (tests/e2e/seed.sh: e2e-grantee, recipient, firstrunwizard disabled, demo-data skipped), with a local build against 9.11: conditional-visibility-editor.spec.ts 13 passed <- the 7 CI failures do NOT reproduce dashboard-sharing.spec.ts 4 failed <- but at line 83, on the switcher row, NOT on CI's .sharee-option So two runs correlate the version with the failure, and a controlled run says 9.11 passes those tests. Correlation across two CI runs is not causation, and the difference may be load rather than version. This puts 9.11 back so CI can answer it: the 7 recur -> the NcSelect rework really is the cause, and the specs get adapted to the new component the 7 pass -> they were load-flakes, the pin was incidental, and the other ten apps on 9.11 need nothing Either answer is worth more than shipping a pin whose justification does not survive a controlled test. Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
#446) The experiment in #443 has its answer, and it is the one that keeps the pin: E2E on 9.11 failed with the SAME ELEVEN tests and the SAME signatures as before. 127 passed, 11 failed 7x conditional-visibility-editor waiting for '.vs__dropdown-option' 4x dashboard-sharing waiting for '.sharee-option' That is deterministic, not load. Two independent CI runs on 9.11 produce an identical failure set, and 9.9.0 produces none, so the NcSelect rework is the cause. My isolated reproduction said otherwise -- those same specs passed on a 9.11 build against a seeded launchpad-demo -- and I have not yet found what differs between that environment and CI. That gap is real and worth closing before the specs are adapted, because adapting them against an environment that does not reproduce the failure fixes nothing. So development goes back to green on the pin while that work happens, rather than sitting red. The adaptation is still the plan; this is not a retreat from it. The one adaptation already understood and shipped separately is stackiq's (#841): 9.10 turned .vs__search from the <input> into a wrapper div around it, measured on a live build. launchpad's two failure modes are different and not yet explained. Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
…260830153148 chore(sync): carry beta back into development
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 | ✅ | ✅ 526/526 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-30 15:37 UTC
Download the full PDF report from the workflow artifacts.
Adapts to @nextcloud/vue 9.11 rather than pinning away from it, and
takes the pin off.
The eleven E2E failures were never an unstable element. The Playwright
trace from CI says so directly:
- locator resolved to <li class="vs__dropdown-option">
- attempting click action
- element is visible, enabled and stable <- stable
- scrolling into view if needed
- <div class="visibility-rule-row__actions"> ... intercepts
The option was VISIBLE, ENABLED AND STABLE. The click was intercepted by
the element painted on top of it.
Both failing areas are the same shape. A column of blocks; a select in
one of them; its dropdown opens downward over the LATER siblings; those
siblings have no stacking context, so they paint last and win:
conditional-visibility <div class="visibility-rule-row__actions">
dashboard-sharing <div class="dashboard-config__field ...public">
<p class="dashboard-config__hint">
9.10's floating-label rework (#8570) is what made it reachable: the
control got taller, so the dropdown now extends far enough to reach them.
That is why 9.9.0 was green and 9.11 is not, without either version being
broken.
The fix is a stacking context on the block that holds the select, in both
places. Nothing else changes, and the dropdown is only raised where a
select actually lives.
⚠️ This could not be verified locally. The same specs PASS against a
seeded launchpad-demo on :8605 built with 9.11 -- the layout there does
not put the dropdown over those siblings. The trace from CI is the
evidence this rests on, and CI is where it has to be confirmed.
Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
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 | ✅ | ✅ 526/526 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-30 16:10 UTC
Download the full PDF report from the workflow artifacts.
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 | ✅ | ✅ 526/526 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-30 16:33 UTC
Download the full PDF report from the workflow artifacts.
…e modal mask (#452) The stacking fix in #450 was built on the trace and was not enough. E2E on 9.11 with it merged is still 127 passed / 11 failed, the same eleven. The second trace names a bigger interceptor than the first one did: 70x class="modal-mask" 24x class="checkbox-content__text checkbox-radio-switch__text" 20x class="dashboard-config__hint" 18x class="visibility-rule-row__actions" 8x class="dashboard-config__field dashboard-config__public" is Nextcloud's own modal backdrop, and it dominates. A z-index inside the modal cannot lift the dropdown above the mask if the dropdown is no longer INSIDE the modal: 9.10's NcSelect appears to render its menu outside the dialog (appended/teleported), which puts it beneath the backdrop in stacking order. That is a different defect from the one #450 addressed, and it needs the menu kept in place or lifted above the mask -- not more per-component z-index. The CSS from #450 is KEPT. Those three smaller interceptors are real, the rule is documented against its trace, and it is inert while the dropdown renders inline on 9.9.0. So the pin goes back while that is worked out, because leaving development red to hold a position is not a trade worth making. This is not a decision that 9.11 is unusable -- it is a decision not to sit red while the portal behaviour is understood. Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
…#454) EXPERIMENT. Reverted in one commit if CI stays red. A real difference between the two versions, verified in the published packages: 9.9.0 --vs-dropdown-z-index: 9999 declared on body 9.11.0 --vs-dropdown-z-index: 9999 declared on .nc-select.v-select.select NcSelect renders its menu with appendToBody: true in BOTH versions -- so the menu is a child of <body> and is NOT a descendant of the select root. A custom property declared on the root therefore cannot reach it, while one declared on body can. That is a plausible mechanism for the modal-mask interception the trace shows, and it is the only substantive CSS difference I found between the versions. WHAT I HAVE NOT SHOWN is that it is the cause. Probing a live 9.11 build on an isolated instance: with the rule: body --vs-dropdown-z-index=9999, menu z-index=100001 without the rule: body --vs-dropdown-z-index=9999, menu z-index=100001 Identical. Something else already declares the variable on body there, so that environment cannot tell the two states apart -- and it is the same environment that fails to reproduce the 11 failures at all. The probe is not evidence for the fix; it is evidence that the probe cannot judge it. CI is the only place the failure reproduces, so CI is where this gets judged. The rule is harmless either way: identical value, and inert once upstream fixes the scope. Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
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 | ✅ | ✅ 526/526 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ✅ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-30 17:14 UTC
Download the full PDF report from the workflow artifacts.
…260830174035 chore(sync): carry beta back into development
…pdates (#460) Bumps the npm_and_yarn group with 14 updates in the /docs directory: | Package | From | To | | --- | --- | --- | | [dompurify](https://github.com/cure53/DOMPurify) | `3.4.1` | `3.4.14` | | [body-parser](https://github.com/expressjs/body-parser) | `1.20.4` | `1.20.6` | | [brace-expansion](https://github.com/juliangruber/brace-expansion) | `1.1.14` | `1.1.18` | | [fast-uri](https://github.com/fastify/fast-uri) | `3.1.2` | `3.1.6` | | [js-yaml](https://github.com/nodeca/js-yaml) | `3.14.2` | `3.15.2` | | [launch-editor](https://github.com/vitejs/launch-editor) | `2.13.1` | `2.14.1` | | [nanoid](https://github.com/ai/nanoid) | `3.3.12` | `3.3.18` | | [postcss](https://github.com/postcss/postcss) | `8.5.14` | `8.5.26` | | [qs](https://github.com/ljharb/qs) | `6.14.2` | `6.15.3` | | [webpack-dev-server](https://github.com/webpack/webpack-dev-server) | `5.2.3` | `5.2.6` | | [ws](https://github.com/websockets/ws) | `7.5.10` | `7.5.13` | | [mermaid](https://github.com/mermaid-js/mermaid) | `11.12.3` | `11.17.2` | | [svgo](https://github.com/svg/svgo) | `3.3.3` | `3.3.5` | | [websocket-driver](https://github.com/faye/websocket-driver-node) | `0.7.4` | `0.7.5` | Updates `dompurify` from 3.4.1 to 3.4.14 - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](cure53/DOMPurify@3.4.1...3.4.14) Updates `body-parser` from 1.20.4 to 1.20.6 - [Release notes](https://github.com/expressjs/body-parser/releases) - [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md) - [Commits](expressjs/body-parser@1.20.4...1.20.6) Updates `brace-expansion` from 1.1.14 to 1.1.18 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](juliangruber/brace-expansion@v1.1.14...v1.1.18) Updates `fast-uri` from 3.1.2 to 3.1.6 - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](fastify/fast-uri@v3.1.2...v3.1.6) Updates `js-yaml` from 3.14.2 to 3.15.2 - [Changelog](https://github.com/nodeca/js-yaml/blob/3.15.2/CHANGELOG.md) - [Commits](nodeca/js-yaml@3.14.2...3.15.2) Updates `launch-editor` from 2.13.1 to 2.14.1 - [Commits](vitejs/launch-editor@v2.13.1...v2.14.1) Updates `nanoid` from 3.3.12 to 3.3.18 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/3.3.18/CHANGELOG.md) - [Commits](ai/nanoid@3.3.12...3.3.18) Updates `postcss` from 8.5.14 to 8.5.26 - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](postcss/postcss@8.5.14...8.5.26) Updates `qs` from 6.14.2 to 6.15.3 - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](ljharb/qs@v6.14.2...v6.15.3) Updates `shell-quote` from 1.8.3 to 1.10.0 - [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md) - [Commits](ljharb/shell-quote@v1.8.3...v1.10.0) Updates `webpack-dev-server` from 5.2.3 to 5.2.6 - [Release notes](https://github.com/webpack/webpack-dev-server/releases) - [Changelog](https://github.com/webpack/webpack-dev-server/blob/v5.2.6/CHANGELOG.md) - [Commits](webpack/webpack-dev-server@v5.2.3...v5.2.6) Updates `ws` from 7.5.10 to 7.5.13 - [Release notes](https://github.com/websockets/ws/releases) - [Commits](websockets/ws@7.5.10...7.5.13) Updates `mermaid` from 11.12.3 to 11.17.2 - [Release notes](https://github.com/mermaid-js/mermaid/releases) - [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.12.3...mermaid@11.17.2) Updates `svgo` from 3.3.3 to 3.3.5 - [Release notes](https://github.com/svg/svgo/releases) - [Commits](svg/svgo@v3.3.3...v3.3.5) Updates `websocket-driver` from 0.7.4 to 0.7.5 - [Changelog](https://github.com/faye/websocket-driver-node/blob/main/CHANGELOG.md) - [Commits](faye/websocket-driver-node@0.7.4...0.7.5) --- updated-dependencies: - dependency-name: dompurify dependency-version: 3.4.14 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: body-parser dependency-version: 1.20.6 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: brace-expansion dependency-version: 1.1.18 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: fast-uri dependency-version: 3.1.6 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: js-yaml dependency-version: 3.15.2 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: launch-editor dependency-version: 2.14.1 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: nanoid dependency-version: 3.3.18 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: postcss dependency-version: 8.5.26 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: qs dependency-version: 6.15.3 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: shell-quote dependency-version: 1.10.0 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: webpack-dev-server dependency-version: 5.2.6 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: ws dependency-version: 7.5.13 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: mermaid dependency-version: 11.17.2 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: svgo dependency-version: 3.3.5 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: websocket-driver dependency-version: 0.7.5 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
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 | ✅ | ✅ 526/526 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ✅ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-30 17:57 UTC
Download the full PDF report from the workflow artifacts.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
The 1.0.20 release bumped the version on main. Without this, development stays behind main and the next development -> main promotion conflicts on the version file. Version files resolve to development's side, which is the higher line, so this never moves a version backwards.
Quality Report — ConductionNL/launchpad @
|
| 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-08-30 18:29 UTC
Download the full PDF report from the workflow artifacts.
…0.20 chore(release): sync main back into development
…468) Dependabot re-proposes these on every run, and each one takes `npm ci` or `npm run build` from green to red with no code change in this repository that can fix it. Closing the pull requests does nothing: without an ignore rule they come straight back. Each is blocked by a package we do not control, verified against the registry rather than assumed: - typescript 7 typescript-eslint hard-throws on TS >= 7 (a `versionMajor >= 7` guard in its dist/index.js) and every published version still peers `typescript: ">=4.8.4 <6.1.0"`. - webpack-cli 7 @nextcloud/webpack-vue-config 7.0.4, the LATEST, peers `webpack-cli: ^6.0.1`. - @babel/core 8 the same package peers `@babel/core: ^7.22.9`. - @babel/preset-env preset-env 8 requires core 8, so the pair moves together or not at all. Splitting them is what broke filinq. These are COMPATIBILITY limits, not security ones. `npm audit` reports no advisory against any version pinned here, so holding them costs no exposure. Lift each the moment its blocker ships support. Deliberately NOT held: stylelint 17, vitest 4 and pinia 4. All three were blocked earlier today and all three are now adoptable, so dependabot should keep proposing them. Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
Quality Report — ConductionNL/launchpad @
|
| 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-08-30 18:53 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/launchpad @
|
| 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-08-30 20:58 UTC
Download the full PDF report from the workflow artifacts.
Automated PR to sync development changes to beta for beta release.
Merging this PR will trigger the beta release workflow.