Skip to content

fix(deps): refresh dependencies + clear esbuild CVE (GHSA-g7r4-m6w7-qqqr)#230

Merged
theagenticguy merged 1 commit into
mainfrom
chore/dep-refresh-2026-06-13
Jun 13, 2026
Merged

fix(deps): refresh dependencies + clear esbuild CVE (GHSA-g7r4-m6w7-qqqr)#230
theagenticguy merged 1 commit into
mainfrom
chore/dep-refresh-2026-06-13

Conversation

@theagenticguy

Copy link
Copy Markdown
Owner

Summary

Consolidated dependency refresh that clears the open esbuild CVE and folds in all 5 open Dependabot PRs (#210#214) plus the remaining outdated minors/patches.

Why one branch instead of merging the 5 Dependabot PRs: branch protection on main is strict + linear-history + squash-only. Merging the 5 PRs one at a time forces each survivor to rebase against a changed pnpm-lock.yaml and re-run the full CI matrix — a 5-cycle cascade. Folding them into one validated branch is a single CI cycle; the Dependabot PRs then close as superseded.

Security

  • esbuild → 0.28.1 via pnpm override (>=0.27.3 <0.28.10.28.1) — clears GHSA-g7r4-m6w7-qqqr (LOW, dev-server path traversal via \ on Windows). Dependabot could not auto-fix this: astro pins esbuild@^0.27.3 and never widens it, so the security update returned security_update_not_possible. Override follows the existing devalue security-override pattern in pnpm-workspace.yaml. OSV scan after the bump: no issues.

Bumps (none breaking)

Package From To Covered Dependabot PR
astro 6.4.4 6.4.6 #210
@astrojs/starlight 0.39.3 0.40.0 #211
@aws-sdk/client-bedrock-runtime 3.1064.0 3.1068.0 #212
@aws-sdk/client-sagemaker-runtime 3.1064.0 3.1068.0 #213
starlight-page-actions 0.6.0 0.6.1 #214
@biomejs/biome 2.4.16 2.5.0
@ladybugdb/core 0.16.1 0.17.1
piscina 5.1.4 5.2.0
sharp 0.34.5 0.35.1
starlight-links-validator 0.24.0 0.24.1
@types/node 25.9.2 25.9.3
commitizen 4.3.1 4.3.2

Ran biome migrate for the 2.5.0 bump: recommended: truepreset: "recommended", schema → 2.5.0.

Held — both require Node 24; repo is Node 22 + engine-strict=true

  • license-checker-rseidelsohn 4 → 5: engines node >=24. Powers the required licenses CI gate, which runs on Node 22 → install would fail. Hard blocker until the repo baselines to Node 24.
  • write-file-atomic 7 → 8: only change is narrowing the Node floor to ^22.22.2, conflicting with the declared engines.node: >=22.12.0; no functional or security benefit.

Validation (local, mirrors required CI checks)

Gate Result
frozen-lockfile install ✅ no drift
build (all packages)
lint (biome 2.5.0) ✅ 0 infos
typecheck (CI-mirror, excl. docs)
test (19 packages) ✅ 0 fail, 0 not ok
banned-strings
license allowlist
OSV scan ✅ no issues
astro docs build ✅ 64 pages, links valid

After merge

Close #210#214 as superseded (the squash commit folds them all in). The esbuild override resolves itself when astro widens its esbuild range (likely 6.5+); revisit then.

🤖 Generated with Bonk — OpenCodeHub nightly maintenance

Consolidated dependency refresh. Branch protection on main is
strict + linear-history + squash-only, so 5 separate Dependabot merges
would cascade pnpm-lock.yaml rebases; folding them into one validated
branch avoids that and lets the 5 Dependabot PRs (#210-214) close as
superseded.

Security:
- Pin esbuild >=0.27.3 <0.28.1 -> 0.28.1 (first patched release) to
  clear GHSA-g7r4-m6w7-qqqr (LOW, dev-server path traversal, Windows).
  Dependabot could not auto-fix: astro pins esbuild@^0.27.3 and never
  widens it (security_update_not_possible). Follows the existing devalue
  override pattern in pnpm-workspace.yaml.

Bumps (none breaking):
- astro 6.4.4->6.4.6, @astrojs/starlight 0.39.3->0.40.0,
  starlight-page-actions 0.6.0->0.6.1, starlight-links-validator
  0.24.0->0.24.1 (the 4 docs/starlight bumps + the 2 below cover all 5
  open Dependabot PRs)
- @aws-sdk/client-bedrock-runtime + client-sagemaker-runtime
  3.1064.0->3.1068.0
- @biomejs/biome 2.4.16->2.5.0 (ran 'biome migrate': recommended->preset,
  schema 2.5.0), @ladybugdb/core 0.16.1->0.17.1, piscina 5.1.4->5.2.0,
  sharp 0.34.5->0.35.1, @types/node 25.9.2->25.9.3, commitizen 4.3.1->4.3.2

Held (require Node 24; repo is Node 22 + engine-strict):
- license-checker-rseidelsohn 4->5 (needs node>=24; would break the
  required licenses gate's install), write-file-atomic 7->8 (narrows
  node floor below repo engines >=22.12.0, no benefit).

Validated: build, lint, typecheck (CI-mirror), 19-package test suite
(0 fail), banned-strings, license allowlist, OSV (no issues), and the
astro docs build (64 pages, links valid) all pass.
@theagenticguy theagenticguy merged commit 75b687f into main Jun 13, 2026
42 checks passed
@theagenticguy theagenticguy deleted the chore/dep-refresh-2026-06-13 branch June 13, 2026 13:35
@github-actions github-actions Bot mentioned this pull request Jun 13, 2026
theagenticguy added a commit that referenced this pull request Jun 13, 2026
…c@8) + fix snyk phantom debug dep (#232)

## Summary

Lifts the Node baseline to **24** and applies the two major dependency
bumps that were held back in #230 solely because they require Node ≥ 24.
Also addresses the `snyk-nodejs-lockfile-parser` phantom `debug`
dependency surfaced by the Node 24 global-install smoke test.

**BREAKING:** minimum Node is now **24.15.0** (was 22.12.0). Node 22 is
dropped. `24.15.0` is the floor where both majors below install under
`engine-strict=true`.

## Node 24 baseline
- `engines.node` `>=22.12.0` → `>=24.15.0` across the root + all 18
packages
- `mise.toml` node pin `22` → `24`; `.nvmrc` / `.node-version` `22` →
`24`
- `ci.yml`: both test matrices drop Node 22 (now `[24]`)
- `verify-global-install.yml`: the six Node-22 legs flip to 24 (dropping
the now-duplicate `linux-x64-node24-mise`), keeping every installer × OS
× arch combo (mise/nvm/homebrew/volta across linux x64/arm64, macOS
arm64/x64)
- `README`: "Node 22 or 24" → "Node 24+"

## Held majors (unblocked by Node 24)
| Package | From | To | Notes |
|---|---|---|---|
| license-checker-rseidelsohn | 4.4.2 | 5.0.1 | needs `node>=24`; powers
the required `licenses` gate |
| write-file-atomic | 7.0.1 | 8.0.0 | runtime dep in cli, ingestion,
analysis, wiki |

**License allowlist update (required by lcr@5):** v5 walks the tree via
`@npmcli/arborist` and reports raw SPDX expressions instead of
normalizing them, so it surfaces permissive licenses v4 hid. Added to
all four callers (`ci.yml`, `pre-release-gate.yml`,
`scripts/acceptance.sh`, `mise.toml`):
- `Python-2.0` — argparse (via js-yaml); PSF, OSI-approved permissive
- `CC-BY-3.0` — spdx-exceptions (a data package, not code)
- `MIT OR Apache-2.0`, `(Apache-2.0 AND MIT)`, `(BSD-3-Clause AND
Apache-2.0)`, `(BSD-2-Clause OR MIT OR Apache-2.0)`, `(MIT OR CC0-1.0)`
— compound expressions of already-allowed licenses

## snyk phantom `debug` dependency
`snyk-nodejs-lockfile-parser@2.8.0` does `require("debug")` without
declaring it — it relied on npm's flat hoisting. Added a pnpm
`packageExtensions` entry injecting `debug@4.4.3` into snyk's deps,
which fixes resolution for `pnpm install` (the dev workspace + anyone
installing from our lockfile + CI).

**Honest scope note:** a bare `pnpm add -g <tarball>` global install
still can't see it — global installs don't read workspace
`packageExtensions`, and bundling snyk into the dist isn't viable (it
does a dynamic `require("fs")` that breaks ESM bundling). The
**documented and CI-tested global path is `npm install -g`**, which
flat-hoists `debug` and works end-to-end. I verified `codehub analyze`
of an external repo via `npm install -g` on Node 24 (7040 nodes, 17841
edges, clean).

## Validation (Node 24.16.0, mirrors required CI)
| Gate | Result |
|---|---|
| frozen-lockfile install | ✅ no drift |
| build (all packages) | ✅ |
| lint (biome 2.5.0) | ✅ |
| typecheck (CI-mirror) | ✅ |
| test (19 packages) | ✅ 2169 tests, 0 fail |
| banned-strings | ✅ |
| license allowlist (lcr@5) | ✅ |
| OSV scan | ✅ |
| pack determinism | ✅ |
| `npm install -g` → `codehub analyze` | ✅ external repo, end-to-end |

🤖 Generated with [Bonk](https://github.com/theagenticguy/opencodehub) —
OpenCodeHub maintenance
theagenticguy pushed a commit that referenced this pull request Jun 13, 2026
🤖 Automated release via release-please
---


<details><summary>root: 0.9.0</summary>

##
[0.9.0](root-v0.8.6...root-v0.9.0)
(2026-06-13)


### ⚠ BREAKING CHANGES

* baseline Node 24 + apply held majors (lcr@5, write-file-atomic@8) +
fix snyk phantom debug dep
([#232](#232))

### Bug Fixes

* **deps:** refresh dependencies + clear esbuild CVE
(GHSA-g7r4-m6w7-qqqr)
([#230](#230))
([75b687f](75b687f))


### Chores

* baseline Node 24 + apply held majors (lcr@5, write-file-atomic@8) +
fix snyk phantom debug dep
([#232](#232))
([93c90e9](93c90e9))
</details>

<details><summary>cli: 0.9.0</summary>

##
[0.9.0](cli-v0.8.6...cli-v0.9.0)
(2026-06-13)


### ⚠ BREAKING CHANGES

* baseline Node 24 + apply held majors (lcr@5, write-file-atomic@8) +
fix snyk phantom debug dep
([#232](#232))

### Bug Fixes

* **deps:** refresh dependencies + clear esbuild CVE
(GHSA-g7r4-m6w7-qqqr)
([#230](#230))
([75b687f](75b687f))


### Chores

* baseline Node 24 + apply held majors (lcr@5, write-file-atomic@8) +
fix snyk phantom debug dep
([#232](#232))
([93c90e9](93c90e9))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

1 participant