Uh oh!
There was an error while loading. Please reload this page.
fix(deps): override deepmerge-ts to clear GHSA-ggr8-5vv4-36mx - #785
Conversation
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
AI Automated Review
Full PR review.
Analysis engine: dsv4f@https://litellm.jory.dev/v1 (openai) — primary route
Recommendation
Approve. This PR adds an npm overrides pin for deepmerge-ts ^8.0.0 to remediate GHSA-ggr8-5vv4-36mx, which reaches the repo transitively via prisma > @prisma/config. The change is minimal (package.json + lockfile), the rationale is documented in the existing "//" overrides block, and all CI checks — including npm audit, Typecheck, Lint, Tests, and Build — pass on the head commit.
Change-by-Change Findings
package.json
- Adds
"deepmerge-ts": "^8.0.0"to the existingoverridesblock, alongside the pre-existingpostcssandsharppins. This is consistent with the repository's established pattern for remediating transitive advisories. - The
"//"rationale block is updated to explain the advisory (GHSA-ggr8-5vv4-36mx, stack exhaustion, published 2026-08-17), the transitive path (prisma > @prisma/config), and why an override is preferred over npm's only advertised stable fix (downgradingprismato 6.12.0, which would be breaking). This matches the documented convention that overrides must not be removed without verifying the originating transitive deps have shipped patched versions.
package-lock.json
deepmerge-tsresolves from 7.1.5 to 8.0.1 with a matching integrity hash and updated funding metadata. The lockfile change is consistent with the override.
Breaking-Change Assessment
The override forces deepmerge-ts from 7.1.5 to 8.0.1, and v8.0.0 is a major release with breaking changes (deep Map-value merging by default, renamed DeepMergeMetaMetaData/DeepMergeIntoFunctionUtils types, and deepmergeInto no longer leak-mutating inputs). However, deepmerge-ts is a transitive dependency here — the repo does not import it directly — so the breaking changes only matter if @prisma/config (the consumer) is incompatible with v8. The full test suite (2288 tests across 126 files, per the PR body) and the Typecheck CI job both pass, which is strong evidence that Prisma's use of the library is compatible with v8.0.1. No direct usage of deepmerge-ts exists in the repo's source.
Standards Compliance
- The change follows the repository's documented override convention: pins live in the top-level
overridesblock, and the rationale is recorded in the"//"field because npm validatesoverridesentries strictly. - No secrets, env files, or build output are committed.
- The PR is a dependency-update task, which AGENTS.md classifies as NORMAL-lane work; the change is scoped and testable.
Tool Harness Findings
- GitHub release data for
deepmerge-tsconfirms v8.0.1 (2026-08-16) is a bug-fix release on top of v8.0.0, and v8.0.0 (2026-08-16) is the major release containing the breaking changes and the security-relevant fixes. The resolved lockfile version 8.0.1 is the latest available. - The GitHub advisory page for GHSA-ggr8-5vv4-36mx could not be fetched directly (the API endpoint returned 404 and the HTML fetch returned an unparseable page), so the advisory's exact affected-range and patched-version metadata could not be independently confirmed from the advisory itself. The PR body and the package.json rationale both cite the advisory ID and describe it as a stack-exhaustion issue; the
npm auditCI check passing on the head commit is the authoritative confirmation that the override clears the finding.
Unknowns or Needs Verification
- The advisory page itself was not directly verifiable during this review (fetch/API 404). The passing
npm auditCI check on the head commit is the primary evidence that the override resolves the finding; if the advisory page becomes available, it would be worth confirming the patched range includes 8.0.1. - No host-platform compatibility matrix applies here: this is a pure npm dependency override, not a bump to a component that runs on a pinned host OS or alongside a pinned peer platform.
Must-Check Items
- Check for breaking API changes in updated dependencies: Verified.
deepmerge-tsv8.0.0 has breaking changes, but the package is transitive-only (viaprisma > @prisma/config); Typecheck and the full test suite pass, indicating no incompatibility with the consumer. - Run full test suite after upgrade: Verified. The
TestsCI check is green on the head commit, and the PR body reports 126 files / 2288 tests passing.
| }, | ||
| "//": { | ||
| "overrides": "These pins exist to remediate npm advisories (originally added in #350). DO NOT remove without verifying the originating transitive deps have shipped patched versions: postcss ^8.5.10 (XSS-class advisory), sharp ^0.35.0 (libvips CVE-2026-33327/33328/35590/35591, #675 — already satisfied transitively by next@16.3.0's optional dep `sharp: ^0.35.3`, but the override survives any future `next` downgrade). npm validates every entry of `overrides` strictly, so this rationale lives at the top level rather than inside the `overrides` block." | ||
| "overrides": "These pins exist to remediate npm advisories (originally added in #350). DO NOT remove without verifying the originating transitive deps have shipped patched versions: postcss ^8.5.10 (XSS-class advisory), sharp ^0.35.0 (libvips CVE-2026-33327/33328/35590/35591, #675 \u2014 already satisfied transitively by next@16.3.0's optional dep `sharp: ^0.35.3`, but the override survives any future `next` downgrade, deepmerge-ts ^8.0.0 (stack-exhaustion GHSA-ggr8-5vv4-36mx, published 2026-08-17 \u2014 reaches us transitively via prisma > @prisma/config; npm's only advertised stable fix is downgrading prisma to 6.12.0, a breaking change, so the override is the cheaper path)). npm validates every entry of `overrides` strictly, so this rationale lives at the top level rather than inside the `overrides` block." |
There was a problem hiding this comment.
Info: The GHSA-ggr8-5vv4-36mx advisory page could not be fetched during review; the passing npm audit CI check is the authoritative confirmation that the override clears the finding.
Automated finding from AI PR review.
…ADME.md The previous PR (#785) only pinned deepmerge-ts in package.json/package-lock.json to clear the npm audit failure, but the original issue (#763) asked for the ~20 env vars read by src/ to be documented in .env.example (with AGENTS gaining its first documented entry) and for the README env tables to agree with .env.example. This commit completes that work: - .env.example gains commented examples for AGENTS, AUTH_URL, DISPATCH_EXCLUDED_LABELS, DISPATCH_LANE_CONFIG_JSON, DISPATCH_QUEUE_AGING_DAYS_PER_TIER, DISPATCH_QUEUE_AGING_MAX_TIERS, DISPATCH_SYNC_LOCK_MAX_AGE_MS, DISPATCH_HOSTED_GROOMER_ENABLED, DISPATCH_GROOMER_*, DISPATCH_LLM_API_KEY, DISPATCH_LLM_BASE_URL, DISPATCH_AGENT_NAME, DISPATCH_CLOSED_ISSUE_RETENTION_DAYS, DISPATCH_DONE_RETENTION_DAYS, DISPATCH_SCHEDULER_*, DISPATCH_SYNC_INTERVAL_MS, DISPATCH_GROOMER_INTERVAL_MS, DISPATCH_PR_FOLLOWUP_INTERVAL_MS, DISPATCH_PRUNE_CLOSED_INTERVAL_MS, WEBHOOK_SECRET, WEBHOOK_GATEWAY_MODE, PR_FOLLOWUP_BOT_IDENTITIES, PR_FOLLOWUP_BRANCH_OWNERS, OPENAI_API_KEY, OPENAI_BASE_URL, and OPENAI_MODEL. - .env.example also explicitly excludes the framework/build-time vars (NODE_ENV, NEXT_RUNTIME, NEXT_PUBLIC_DISPATCH_VERSION) and the legacy aliases (MISSION_CONTROL_URL, MISSION_CONTROL_AGENT_TOKEN) with comments explaining why. - README.md gains a new "Auth, Triage, Queue, and Webhooks" table that matches the new .env.example entries, so the two documents agree. The deepmerge-ts override added in 2f0d8c1 is left in place; `npm audit` reports 0 vulnerabilities. Full vitest suite (2288 tests), `tsc --noEmit`, and `eslint .` all pass. Fixes#763 Signed-off-by: Saffron <263493777+itsmiso-ai@users.noreply.github.com>
The previous PR (#785) only pinned deepmerge-ts in package.json/package-lock.json to clear the npm audit failure, but the original issue (#763) asked for the ~20 env vars read by src/ to be documented in .env.example (with AGENTS gaining its first documented entry) and for the README env tables to agree with .env.example. This commit completes that work: - .env.example gains commented examples for AGENTS, AUTH_URL, DISPATCH_EXCLUDED_LABELS, DISPATCH_LANE_CONFIG_JSON, DISPATCH_QUEUE_AGING_DAYS_PER_TIER, DISPATCH_QUEUE_AGING_MAX_TIERS, DISPATCH_SYNC_LOCK_MAX_AGE_MS, DISPATCH_HOSTED_GROOMER_ENABLED, DISPATCH_GROOMER_*, DISPATCH_LLM_API_KEY, DISPATCH_LLM_BASE_URL, DISPATCH_AGENT_NAME, DISPATCH_CLOSED_ISSUE_RETENTION_DAYS, DISPATCH_DONE_RETENTION_DAYS, DISPATCH_SCHEDULER_*, DISPATCH_SYNC_INTERVAL_MS, DISPATCH_GROOMER_INTERVAL_MS, DISPATCH_PR_FOLLOWUP_INTERVAL_MS, DISPATCH_PRUNE_CLOSED_INTERVAL_MS, WEBHOOK_SECRET, WEBHOOK_GATEWAY_MODE, PR_FOLLOWUP_BOT_IDENTITIES, PR_FOLLOWUP_BRANCH_OWNERS, OPENAI_API_KEY, OPENAI_BASE_URL, and OPENAI_MODEL. - .env.example also explicitly excludes the framework/build-time vars (NODE_ENV, NEXT_RUNTIME, NEXT_PUBLIC_DISPATCH_VERSION) and the legacy aliases (MISSION_CONTROL_URL, MISSION_CONTROL_AGENT_TOKEN) with comments explaining why. - README.md gains a new "Auth, Triage, Queue, and Webhooks" table that matches the new .env.example entries, so the two documents agree. The deepmerge-ts override added in 2f0d8c1 is left in place; `npm audit` reports 0 vulnerabilities. Full vitest suite (2288 tests), `tsc --noEmit`, and `eslint .` all pass. Fixes#763 Signed-off-by: Saffron <263493777+itsmiso-ai@users.noreply.github.com> Co-authored-by: Saffron <263493777+itsmiso-ai@users.noreply.github.com>
Summary
overrides.deepmerge-ts: ^8.0.0to clear GHSA-ggr8-5vv4-36mx, and record the rationale in the existing"//"block.Why
npm auditfails onmainright now with 3 high-severity findings.deepmerge-tsreaches us transitively throughprisma > @prisma/config, and npm's only advertised stable fix is downgradingprismato 6.12.0, which is breaking — so an override is the cheaper path, consistent with howpostcssandsharpare already handled.The advisory published
2026-08-17T13:32:13Z, 48 minutes aftermain's lastnpm auditrun passed at12:44:47Z. Somain's green check is stale rather than accurate, and every PR opened since has failed an audit for something it did not introduce.That is not hypothetical: four open foreman PRs (#779, #780, #781, #783) each independently added their own copy of this same pin while trying to work unrelated issues. Fixing it once here removes the trigger.
Notes
dependabot_alerts_enabled_for_new_repositories: false, and the alerts endpoint returns an empty array for this repo). Renovate's scan logged "No vulnerability alerts found" and correctly did nothing. Enabling org-level alerts is the durable fix and is out of scope here.osvVulnerabilityAlertswould not have helped either — it covers direct dependencies only, and this is transitive.Verification
npm audit --omit=dev: 3 high →found 0 vulnerabilitiesnpx tsc --noEmit: cleannpm run test: 126 files, 2288 tests passingdeepmerge-ts@8.0.1