fix(deps): sync package-lock.json — npm ci failed, taking all six frontend jobs with it - #92
Merged
Merged
Conversation
…rontend jobs with it
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.
Contributor
Quality Report — ConductionNL/openbuild @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 659/659 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Coverage: 89.4% (17/19 statements)
Quality workflow — 2026-08-02 15:22 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.
Six jobs have been red on
development: Vue Quality (eslint), Vue Quality (stylelint), License (npm), Security (npm), SBOM, Quality Report. They share one cause — and it is not any of the tools they are named after.What was actually failing
Every one of those jobs runs
npm cifirst, andnpm cirefused to install:No linter ever ran. The jobs weren't reporting lint failures — they were reporting that install died before reaching a linter, which reads identically on the dashboard.
Where they came from
The missing entries are transitive. Nothing declares
pinia@4orvite@8; the declared ranges are^2.1.7and^5.4.0. They arrived with the@conduction/nextcloud-vue2.1.0-vue3.15 bump (#87), whose lockfile regeneration didn't capture the new transitive graph.Why nobody noticed locally
An existing
node_modulesalready contains the packages, sonpm run lintpasses on a dev machine andnpm lsreports the tree resolves fine. Onlynpm ci— which installs from the lockfile rather than the tree — can see it. I only reproduced it by running under CI's node 20 instead of my local node 22.The diff is purely additive
Verified under node:20 after the fix
Audit reports 10 vulnerabilities (5 low, 4 moderate, 1 high) — all below the critical gate the job enforces.
One licence fell outside my first hand-written allowlist replica —
domain-browser@5.7.0(Artistic-2.0, vianode-polyfill-webpack-plugin). It is on the shared workflow's real allowlist; my replica was incomplete, not the licence.