Skip to content

fix(deps): bump @conduction/nextcloud-vue to 2.1.0-vue3.15 — non-admins can use the app - #87

Merged
rubenvdlinde merged 1 commit into
developmentfrom
wip/bump-ncvue-vue3-14
Aug 2, 2026
Merged

fix(deps): bump @conduction/nextcloud-vue to 2.1.0-vue3.15 — non-admins can use the app#87
rubenvdlinde merged 1 commit into
developmentfrom
wip/bump-ncvue-vue3-14

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Completes the thread started in #76/#81: a non-admin with an app role can now actually use OpenBuild.

Why a dependency bump was needed at all

#81 gave non-admins OpenRegister-level read on the schemas. They still could not use the app — an editor navigating to the builder landed on "Welcome to OpenBuild / Set up this app" with .openbuild-schema-list count 0. Setup endpoints are admin-only and answer 403; useSetupStatus read that as "setup unfinished" and the shell rendered the wizard over the app.

Fixed upstream in ConductionNL/nextcloud-vue#576, published as 2.1.0-vue3.15.

That upstream fix took two attempts. The first (#575) short-circuited completed — which CnAppRoot never reads; it gates on requiredUnmet/optionalUnmet. It shipped, published, and was inert. Caught only by live verification.

Version drift found on the way

node_modules held 2.1.0-vue3.7 while package.json and the lockfile both said 2.1.0-vue3.13. No install had been run since that bump, so local builds were linking a library three versions behind the pin. This branch was built from a clean npm ci.

New: tests/e2e/non-admin-access.spec.ts

Two consecutive fixes for this looked green while the app stayed broken for the user. Each layer's own tests passed; the user-visible outcome didn't change. The only assertion that would have caught both is "a non-admin sees the app" — so that is what this suite asserts:

test guards
an editor reaches the schema designer and no setup wizard both halves — asserting the wizard's absence alone passes on a blank page
an editor sees the app they were granted the #76 regression: OR filtering every row out below openbuild's own check
an outsider sees none the control — proves openbuild's row-level filter still runs on top of OR's coarse authenticated grant

Verification

🤖 Generated with Claude Code

…ns can use the app

Picks up ConductionNL/nextcloud-vue#576: a 401/403 from /api/setup/status now
empties the unmet-steps lists, so a non-admin is no longer shown the
first-time-setup wizard.

Why this bump matters more than the version delta suggests: after #81 gave
non-admins OpenRegister-level read on the schemas, an editor still could not
use OpenBuild. They landed on "Welcome to OpenBuild / Set up this app" with
.openbuild-schema-list count 0 — the setup endpoints are admin-only, they
answer 403, and useSetupStatus read that as "setup unfinished".

Also corrects a drift found on the way: node_modules held 2.1.0-vue3.7 while
package.json and the lockfile both said 2.1.0-vue3.13. Nobody had run an
install since that bump, so local builds were linking a library three versions
behind the pin. This commit was built from a clean `npm ci`.

New: tests/e2e/non-admin-access.spec.ts, a regression suite for the OUTCOME
rather than any one layer. Two consecutive fixes for this looked green while
the app stayed broken for the user — openbuild#76's grant, then a nc-vue fix
that short-circuited `completed`, which CnAppRoot never reads. The only
assertion that would have caught both is "a non-admin sees the app", so that
is what these three tests assert:

  - an editor reaches the schema designer AND no setup wizard (both halves —
    asserting the wizard's absence alone passes on a blank page)
  - an editor sees the app they were granted
  - an outsider sees none — the control proving openbuild's row-level filter
    still runs on top of OR's coarse `authenticated` read grant

Verified live against the disposable instance: 3 passed.
@rubenvdlinde
rubenvdlinde merged commit 6dbb85e into development Aug 2, 2026
14 of 18 checks passed
@rubenvdlinde
rubenvdlinde deleted the wip/bump-ncvue-vue3-14 branch August 2, 2026 07:44
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openbuild @ a3f36c8

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 100/100
npm
PHPUnit ⏭️
Newman ⏭️
Playwright ⏭️

Quality workflow — 2026-08-02 07:45 UTC

Download the full PDF report from the workflow artifacts.

rubenvdlinde added a commit that referenced this pull request Aug 2, 2026
…rontend jobs with it (#92)

Six jobs have been red on development: Vue Quality (eslint), Vue Quality
(stylelint), License (npm), Security (npm), SBOM, and Quality Report. They share
one cause, and it is not any of the tools they are named after.

Every one of those jobs runs `npm ci` first, and `npm ci` refused to install:

    npm error `npm ci` can only install packages when your package.json and
    package-lock.json are in sync.
    npm error Missing: pinia@4.0.2 from lock file
    npm error Missing: vite@8.2.0 from lock file
    npm error Missing: esbuild@0.28.1 from lock file

So no linter ever ran. The jobs were not reporting lint failures — they were
reporting that the install step died before reaching a linter, which reads
identically on the dashboard.

The missing entries are TRANSITIVE: nothing declares pinia@4 or vite@8, and the
declared ranges are ^2.1.7 and ^5.4.0. They arrived with the
@conduction/nextcloud-vue 2.1.0-vue3.15 bump (#87), whose lockfile regeneration
did not capture the new transitive graph.

This is invisible locally: an existing node_modules already contains the packages,
so `npm run lint` passes on a developer machine and `npm ls` reports the tree
resolves. Only `npm ci` — which installs from the LOCKFILE rather than the tree —
can see it. Reproduced under CI's node 20 rather than the local node 22.

The diff is purely additive and verified as such:

    declared dependency versions changed:  0
    packages added:                       63
    packages removed:                      0

Verified under node:20 after the fix:

    npm ci        OK (previously EUSAGE)
    npm run lint  clean
    npm stylelint clean
    npm audit --audit-level=critical --omit=dev  exit 0
      (10 vulns: 5 low, 4 moderate, 1 high — all below the critical gate)

The one licence outside my first hand-written allowlist replica, domain-browser
5.7.0 (Artistic-2.0, via node-polyfill-webpack-plugin), is on the shared
workflow's real allowlist — my replica was incomplete, not the licence.

Co-authored-by: Ruben van der Linde <juan.claude@conduction.nl>
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.

2 participants