What
js-yaml is pinned to the 4.x line. Dependabot is configured to skip its major bumps (.github/dependabot.yml, added in 27bf393); minor and patch updates still come through normally.
Why it's blocked
CVX loads YAML by two paths:
- Node export path —
src/pdf/loadContent.js imports js-yaml directly.
- Browser/Vite preview path — parses through
@rollup/plugin-yaml, which declares its own js-yaml dependency.
js-yaml 5 removed the CommonJS default export that @rollup/plugin-yaml relies on. Bumping only our direct dependency therefore splits the majors across those two paths, and the preview could parse YAML differently from the exported PDF.
test/deps.test.js ("js-yaml alignment across content-loading paths (R4)") guards exactly this. It caught the attempt in #3, failing on all 10 CI legs while the other 309 tests passed. The guard is working as designed — this is not a flake and not something to work around.
When it can be picked up
When @rollup/plugin-yaml ships support for js-yaml 5. Worth re-checking periodically:
npm view @rollup/plugin-yaml peerDependencies dependencies
What to do then
- Remove the
js-yaml ignore entry from .github/dependabot.yml.
- Bump
js-yaml and @rollup/plugin-yaml together.
- Confirm
test/deps.test.js passes — it verifies both paths resolve to the same major, either by dedupe or by matching nested copies.
- Sanity-check that the browser preview and
npx cvx build still agree on a CV containing YAML edge cases (multi-line strings, quoted specials, empty lists such as referees: []).
Alternatives, if upstream stays behind
- Drop
@rollup/plugin-yaml and parse YAML in the browser path with the same js-yaml import the Node path uses, removing the second copy entirely — this deletes the whole class of problem, at the cost of a small Vite config change.
- Stay on js-yaml 4 indefinitely. It is not deprecated and has no known advisory;
npm audit/osv-scanner are clean. There is no urgency here.
Context
Closed PR: #3
Guard: test/deps.test.js
Dependabot rule: 27bf393
What
js-yamlis pinned to the 4.x line. Dependabot is configured to skip its major bumps (.github/dependabot.yml, added in 27bf393); minor and patch updates still come through normally.Why it's blocked
CVX loads YAML by two paths:
src/pdf/loadContent.jsimportsjs-yamldirectly.@rollup/plugin-yaml, which declares its ownjs-yamldependency.js-yaml5 removed the CommonJS default export that@rollup/plugin-yamlrelies on. Bumping only our direct dependency therefore splits the majors across those two paths, and the preview could parse YAML differently from the exported PDF.test/deps.test.js("js-yaml alignment across content-loading paths (R4)") guards exactly this. It caught the attempt in #3, failing on all 10 CI legs while the other 309 tests passed. The guard is working as designed — this is not a flake and not something to work around.When it can be picked up
When
@rollup/plugin-yamlships support forjs-yaml5. Worth re-checking periodically:What to do then
js-yamlignoreentry from.github/dependabot.yml.js-yamland@rollup/plugin-yamltogether.test/deps.test.jspasses — it verifies both paths resolve to the same major, either by dedupe or by matching nested copies.npx cvx buildstill agree on a CV containing YAML edge cases (multi-line strings, quoted specials, empty lists such asreferees: []).Alternatives, if upstream stays behind
@rollup/plugin-yamland parse YAML in the browser path with the samejs-yamlimport the Node path uses, removing the second copy entirely — this deletes the whole class of problem, at the cost of a small Vite config change.npm audit/osv-scannerare clean. There is no urgency here.Context
Closed PR: #3
Guard:
test/deps.test.jsDependabot rule: 27bf393