Clear six dependency advisories, and let Dependabot open PRs - #215
Merged
Conversation
browserslist comes in via a caret range, so `npm update` reaches the patched 4.28.8 (>= the 4.28.7 fix) along with its data packages. js-yaml has no upgrade path: @redocly/openapi-core pins it at exactly 4.2.0, and openapi-typescript is already on the newest release, so the redocly version that moved to js-yaml ^5 isn't reachable from it. An override forces 4.3.1, which clears both advisories against it and stays inside 4.x. Neither was reachable here — browserslist's needs an untrusted browserslist-stats.json, and the only YAML openapi-typescript sees is our own generated schema — so this is hygiene, not a fix for a live hole. `just check-types-fresh` passes, so 4.3.1 emits byte-identical types. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Qzxns3a3Q12RfayHZRrGZ
Alerts were on with nothing behind them: no config, no PRs, so an advisory sat until someone noticed a push warning. Same detection-without-remediation gap #209 closed for the image's OS packages. Grouped weekly PRs for npm and the workflow action versions. No Python stanza: Dependabot has no `uv` ecosystem and its `pip` one reads only pip/pipenv/pip-compile/poetry files, so it would edit pyproject.toml, leave uv.lock behind, and fail every `uv sync --frozen` build. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Qzxns3a3Q12RfayHZRrGZ
brace-expansion (2.1.2 -> 2.1.4 and 5.0.8 -> 5.0.9, both reachable instances), fflate (0.8.2 -> 0.8.3) and nanoid (3.3.16 -> 3.3.18). All patch bumps, lockfile only, and all dev-scope: eslint and openapi-typescript pull brace-expansion, @types/three carries fflate as types-only, and nanoid arrives under vite's postcss. None reach the built bundle. GitHub's advisory database hadn't flagged these, so they would have sat until npm's did. `npm audit` now reports 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Qzxns3a3Q12RfayHZRrGZ
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.
Closes #214
Six advisories closed, and the mechanism that should have surfaced them added.
The three Dependabot alerts
browserslistjs-yamloverrides)Neither was reachable here.
browserslist's advisory needs an untrustedbrowserslist-stats.jsoncustom stats file — there is none, and no custom browserslist config.js-yaml's two need attacker-controlled YAML, and the only thingopenapi-typescriptparses is.local/openapi.generated.json, produced byscripts/gen_openapi.pyfrom our own Pydantic models. Both arescope: developmentand neither reaches the built bundle. Hygiene, not an incident.They differ in one important way:
browserslistarrives via^4.24.0, sonpm updatereaches the fix.js-yamlhad no upgrade path at all.@redocly/openapi-core@1.34.17pins it at exactly4.2.0, andopenapi-typescriptis already on its newest release (7.13.0), so the redocly version that moved tojs-yaml ^5.2.2isn't reachable from it. No amount ofnpm updatewould ever have fixed this. Anoverridesentry forcing 4.3.1 was the only route, and it stays inside 4.x.Three more that Dependabot never flagged
npm auditand GitHub's advisory database disagreed. Once the first two were cleared, npm still reported:brace-expansionfflate@types/three— types-only, no runtime codenanoidAll dev-scope, all patch bumps, lockfile-only.
npm auditnow reports 0.Dependabot config
There was no
.github/dependabot.ymland no open Dependabot PRs — alerts were on with nothing behind them, so an advisory sat until someone noticed a push warning. The same detection-without-remediation gap #209 closed for the image's OS packages.Added grouped weekly PRs for npm (
app/) andgithub-actions, with production and development deps grouped separately so they land as reviewable PRs rather than thirty individual ones.No Python stanza, deliberately. Dependabot has no
uvecosystem, and per GitHub's docs itspipone reads only pip/pipenv/pip-compile/poetry files. On this repo it would editpyproject.toml, leaveuv.lockbehind, and fail everyuv sync --frozenbuild. Python deps stay manual; the config says so.Verification
npm audit→ 0 vulnerabilities, confirmed again inside the CI container's ownnpm cijust check-types-fresh→ exit 0, sojs-yaml4.3.1 emits byte-identical generated types (manifest.generated.tsis diff-checked, so any drift would fail)npm run build→ exit 0prettier --check .→ exit 0caniuse-lite,electron-to-chromium,node-releases,update-browserslist-db,baseline-browser-mapping) plus the five patched packages — no orphan churn, no majorsNot included
Nothing in CI runs
npm audit, so the npm half of the split above still depends on someone running it by hand. Wiring it into the gate would fail CI on any new advisory in any transitive dev dependency — a policy call rather than a cleanup, so it's left alone here.🤖 Generated with Claude Code
https://claude.ai/code/session_011Qzxns3a3Q12RfayHZRrGZ