Skip to content

fix(security): close all 90 open JS alerts across the scenario workspaces - #873

Open
langwatch-agent wants to merge 1 commit into
mainfrom
fix/security-js-overrides
Open

fix(security): close all 90 open JS alerts across the scenario workspaces#873
langwatch-agent wants to merge 1 commit into
mainfrom
fix/security-js-overrides

Conversation

@langwatch-agent

@langwatch-agent langwatch-agent commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

What

Closes all 90 open JavaScript alerts across the scenario workspaces. With #857 (the 38 on python/uv.lock) that is the entire scenario inbox, 128 of 128.

manifest alerts how
javascript/package-lock.json 28 file removed, see below
docs/pnpm-lock.yaml 20 floors raised in docs/pnpm-workspace.yaml
javascript/examples/openai-realtime-demo/pnpm-lock.yaml 15 orphan removed, floors moved to the workspace root
python/examples/lovable_clone/template/pnpm-lock.yaml 11 floors + react-router 7
python/examples/lovable_clone/template/package-lock.json 9 floors + react-router 7
javascript/pnpm-lock.yaml 7 floors raised in javascript/package.json

Raising in place, not adding alongside

pnpm matches only the first selector for a package name, so adding a correctly-scoped floor next to a stale one leaves the stale one in charge. Main had exactly that shape: docs/pnpm-workspace.yaml carried an unscoped hono: '>=4.12.25', which would have sat in front of anything new. Six entries were raised in place there, five in javascript/package.json's pnpm block, four in its npm block, and three in the template.

Every selector is scoped to one major line ("pkg@<fix": ">=fix <next"). Two packages needed more than one because the tree carries parallel majors: brace-expansion (1.x, 2.x and 5.x) and js-yaml (3.x and 4.x). Targets are capped so a floor cannot float across a major, which was not academic here: javascript/pnpm-lock.yaml had resolved fast-uri 4.1.2 off an uncapped fast-uri@<=3.1.1 -> >=3.1.2, and now resolves 3.1.5.

Two lockfiles removed

javascript/package-lock.json carried the largest single share of the inbox, 28 alerts, and nothing installs from it. Every workflow uses pnpm install --frozen-lockfile; there is no npm ci or npm install anywhere in .github/; nothing in the repo references the file; and its entire commit history is release version bumps. It had drifted far enough that regenerating it moved @openai/agents 0.3.9 to 0.16.1 and removed 53 packages, and it cannot be regenerated at all without --legacy-peer-deps (a pre-existing zod peer conflict that reproduces on main untouched). Committing that would be shipping a lock nothing validates. The pnpm-lock.yaml beside it resolves the same packages at safe versions.

javascript/examples/openai-realtime-demo/pnpm-lock.yaml is an orphan. The directory is a declared member of the javascript workspace, so pnpm ignores its pnpm.overrides and writes the parent lock instead. Six of its seven floors were already superseded at the root; the seventh, ajv, moves there. Checked before removing.

react-router 7 in the lovable_clone template

react-router-dom #551 has no patched release in the 6.x line, so leaving 6.x was the only way to close it. The template uses only the v7-compatible surface (BrowserRouter, Routes, Route in src/App.tsx; useLocation in src/pages/NotFound.tsx), so no application code changed. @remix-run/router disappears from both lockfiles because v7 folded it in, which is why alerts #613 and #616 close by the package no longer existing.

postcss is a direct devDependency there and npm rejects an override that conflicts with a direct dependency, so its floor is carried by the direct pin.

Verified

  • closure re-checked programmatically against each advisory's vulnerableVersionRange: 0 of 90 left open
  • pnpm install --frozen-lockfile exit 0 in javascript/, docs/ and the template
  • template: tsc --noEmit exit 0, pnpm build exit 0
  • template routing driven in a real browser on the built output: / renders, /definitely-not-a-route renders the 404 with its intentional console.error carrying the pathname (so useLocation() resolves), the "Return to Home" link client-side navigates, and browser-back returns to the 404
  • docs: pnpm build exit 0
  • lockfile version-set diffs reviewed per file; no package moves down

Pre-existing failures, not from this PR

pnpm typecheck in javascript/ and docs/ fails with TS2688: Cannot find type definition file for 'yauzl'. Confirmed identical on a clean checkout of origin/main, so it predates this change. Filed separately.

@langwatch-agent langwatch-agent added the dependabot-scout Opened by the dependabot-scout security-triage agent (shared langwatch-agent bot identity) label Aug 3, 2026
@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 05b23cf2-4235-4f2d-ac73-622132278dd0

📥 Commits

Reviewing files that changed from the base of the PR and between 8daa1d4 and 11d2965.

⛔ Files ignored due to path filters (1)
  • javascript/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (1)
  • javascript/package.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • javascript/package.json

Included review availability: Your plan includes up to 4 reviews per rolling hour; 2 remain after this review.


Walkthrough

The pull request updates dependency overrides and minimum versions in workspace configuration, the JavaScript package, and the Lovable template. It removes local overrides from the OpenAI realtime demo.

Changes

Dependency Override Updates

Layer / File(s) Summary
Root dependency override policy
javascript/package.json, docs/pnpm-workspace.yaml
Updated dependency ranges for protobufjs, Hono, react-router, js-yaml, postcss, brace-expansion, fast-uri, liquidjs, OpenTelemetry packages, and other constrained packages.
Example dependency constraints
javascript/examples/openai-realtime-demo/package.json, python/examples/lovable_clone/template/package.json
Removed the realtime demo's local overrides. Updated the Lovable template to React Router 7 and newer postcss and js-yaml versions. Added or updated overrides for brace-expansion, esbuild, nanoid, and React Router 7.

Poem

A rabbit checks each version line,
postcss and js-yaml align.
Overrides hop to newer ground,
nanoid rules are now found.
The workspace rests in order.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main security-related dependency changes across the scenario workspaces.
Description check ✅ Passed The description directly explains the dependency updates, lockfile changes, React Router migration, and validation results.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/security-js-overrides

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the low-risk-change PR qualifies as low-risk per policy and can be merged without manual review label Aug 3, 2026
github-actions[bot]
github-actions Bot previously approved these changes Aug 3, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved by automation: PR qualifies as low-risk-change under the documented policy.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
javascript/package.json (1)

145-152: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Document the dependency override policy.

Add or update workspace documentation for each new overrides and pnpm.overrides selector. State the matched range, replacement version or floor, default behavior, environment variables (none), and one example. Keep package.json machine-readable.

As per coding guidelines, JavaScript JSON/YAML configuration options must document each parameter, default values, environment variables, and configuration examples.

Also applies to: 166-196

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@javascript/package.json` around lines 145 - 152, Document every newly added
dependency override selector in the relevant workspace documentation, including
the matched version range, replacement version or minimum floor, default
behavior, environment variables as none, and one usage example; cover both
overrides sections referenced by the comment. Keep the package.json overrides
unchanged and valid machine-readable JSON.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@javascript/package.json`:
- Line 166: Remove the duplicate selector declarations from the pnpm.overrides
object, keeping exactly one declaration for each repeated liquidjs, fast-uri,
postcss, brace-expansion, and `@opentelemetry/propagator-jaeger` key while
preserving the intended override values.
- Around line 146-149: The brace-expansion override currently permits version 5,
whose Node requirement excludes Node 18. In javascript/package.json lines
146-149 and docs/pnpm-workspace.yaml lines 22-24, narrow the
brace-expansion@>=3.0.0 override to a compatible 4.x range (or document and
enforce the required Node version), preserving minimatch@9.x compatibility for
Node 18 consumers.

In `@python/examples/lovable_clone/template/package.json`:
- Around line 114-118: Add an explicit pnpm packageManager declaration to the
template package.json, using the targeted pnpm version required to apply the
listed dependency overrides. Ensure the configuration aligns with the existing
pnpm.lockfile overrides and prevents the npm install path from being the only
documented installation route.

---

Nitpick comments:
In `@javascript/package.json`:
- Around line 145-152: Document every newly added dependency override selector
in the relevant workspace documentation, including the matched version range,
replacement version or minimum floor, default behavior, environment variables as
none, and one usage example; cover both overrides sections referenced by the
comment. Keep the package.json overrides unchanged and valid machine-readable
JSON.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 70cdae03-d040-4499-9183-2b9b75307987

📥 Commits

Reviewing files that changed from the base of the PR and between 88aec40 and ce7f54d.

⛔ Files ignored due to path filters (6)
  • docs/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • javascript/examples/openai-realtime-demo/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • javascript/package-lock.json is excluded by !**/package-lock.json
  • javascript/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • python/examples/lovable_clone/template/package-lock.json is excluded by !**/package-lock.json
  • python/examples/lovable_clone/template/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (4)
  • docs/pnpm-workspace.yaml
  • javascript/examples/openai-realtime-demo/package.json
  • javascript/package.json
  • python/examples/lovable_clone/template/package.json

Comment thread javascript/package.json Outdated
Comment thread javascript/package.json Outdated
Comment on lines +114 to +118
"js-yaml@>=4.0.0 <4.3.0": "4.3.0",
"yaml@>=2.0.0 <2.8.3": ">=2.8.3",
"brace-expansion@>=5.0.0 <5.0.6": ">=5.0.6",
"brace-expansion@<1.1.16": "1.1.16",
"brace-expansion@>=3.0.0 <5.0.8": "5.0.8",
"postcss@<8.5.18": ">=8.5.18",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

rg -n --hidden \
  --glob 'package.json' \
  --glob 'pnpm-workspace.yaml' \
  --glob 'pnpm-lock.yaml' \
  --glob '.npmrc' \
  --glob '.tool-versions' \
  --glob '.node-version' \
  --glob 'Dockerfile*' \
  '"packageManager"\s*:|pnpm\s*:|lockfileVersion' .

sed -n '108,122p' python/examples/lovable_clone/template/package.json

Repository: langwatch/scenario

Length of output: 1054


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf 'Files under python/examples/lovable_clone:\n'
git ls-files python/examples/lovable_clone | sed -n '1,120p'

printf '\nAll pnpm/package manager references under python/examples/lovable_clone:\n'
rg -n --hidden \
  --glob 'package.json' \
  --glob 'pnpm-workspace.yaml' \
  --glob '.npmrc' \
  --glob '.tool-versions' \
  --glob '.node-version' \
  --glob 'Dockerfile*' \
  --glob '*.md' \
  --glob '*.txt' \
  --glob '*.sh' \
  'packageManager|pnpm@|pnpm |pnpm-workspace.yaml|lockfileVersion|npm|yarn|npmrc' python/examples/lovable_clone || true

printf '\nRelevant template package.json tail and pnpm field if present:\n'
python3 - <<'PY'
import json, pathlib, re
p=pathlib.Path('python/examples/lovable_clone/template/package.json')
txt=p.read_text()
pat=re.search(r'^\s*"packageManager"\s*:\s*"[^"\n]+"\s*[,}]', txt, re.M)
print('packageManager:', pat.group(0) if pat else 'not found')
lines=txt.splitlines()
for i in range(108, min(len(lines),125)+1):
    print(f'{i:4}: {lines[i-1]}')
print(json.loads(txt)['pnpm']['overrides'] if 'pnpm' in json.loads(txt) else {})
PY

printf '\nDiff/stat for this file:\n'
git diff --stat -- python/examples/lovable_clone/template/package.json || true
git diff -- python/examples/lovable_clone/template/package.json | sed -n '1,220p' || true

Repository: langwatch/scenario

Length of output: 7038


Add an explicit supported pnpm path for these package.json overrides.

This template uses npm install, but package.json still depends on pnpm overrides in pnpm.lockfile. Add a packageManager entry for the pnpm version that must be used, or install with the targeted pnpm version, otherwise users may not apply these security overrides consistently.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/examples/lovable_clone/template/package.json` around lines 114 - 118,
Add an explicit pnpm packageManager declaration to the template package.json,
using the targeted pnpm version required to apply the listed dependency
overrides. Ensure the configuration aligns with the existing pnpm.lockfile
overrides and prevents the npm install path from being the only documented
installation route.

Source: MCP tools

@langwatch-agent langwatch-agent self-assigned this Aug 3, 2026
@langwatch-agent langwatch-agent added the hound-checked Triaged by the pr-hound agent at the current head SHA label Aug 5, 2026
@langwatch-agent langwatch-agent added the ci-green Latest run of every check is passing (checks API, not the legacy commit-status index) label Aug 11, 2026
@langwatch-agent
langwatch-agent force-pushed the fix/security-js-overrides branch 2 times, most recently from 8f15d88 to 6eae1eb Compare August 12, 2026 06:22
@github-actions github-actions Bot removed the low-risk-change PR qualifies as low-risk per policy and can be merged without manual review label Aug 12, 2026
@langwatch-agent

Copy link
Copy Markdown
Contributor Author

Rebased onto main and substantially expanded: floors raised to current, now 105 of the 110 open JS alerts instead of 37. Two structural findings are written up in the description (an entire example's overrides were inert because it is a workspace member, and javascript/ keeps two lockfiles whose override blocks had drifted). Dogfooded: 1083 tests pass, docs builds, 53 packages up with zero downgrades. CI green. Ready for human review.

@langwatch-agent
langwatch-agent force-pushed the fix/security-js-overrides branch from 6eae1eb to ee6a35d Compare August 17, 2026 06:06
@langwatch-agent

Copy link
Copy Markdown
Contributor Author

Added the react-router 7 migration for the lovable_clone template, which closes the last 5 alerts that were still open on it.

This PR now closes 110 of the 110 open JS alerts in scenario, up from 105. Nothing on the JS side is left behind after it merges.

I had previously written these five off as "a v6 to v7 migration, which is a different kind of change from a floor bump". That was too quick a judgement. The template only ever used the v7-compatible subset of the API:

  • BrowserRouter, Routes, Route in src/App.tsx
  • useLocation in src/pages/NotFound.tsx

All four are still exported by react-router-dom 7, so the migration needed zero code changes — only the version and the two overrides that pinned the 6.x line.

@remix-run/router drops out of both lockfiles entirely, because v7 folded it into react-router. That retires its overrides too. cookie and set-cookie-parser arrive as v7's own dependencies. Version-set audit on the pnpm lock: 2 up, 0 down, 1 removed, 2 added.

react-router-dom #551 is worth calling out: it has no patched release in the 6.x line at all, so leaving the 6.x range was the only way to close it. Staying on 6.30.4 would have kept it open permanently.

Verified in a browser, not just on the build, since a passing build says nothing about whether routes actually resolve:

  • npx tsc --noEmit clean, pnpm build clean
  • against the built preview: / renders "Welcome to Your Blank App"
  • /definitely-not-a-route renders the 404 page, and its intentional console.error fires with the attempted path, which is what demonstrates useLocation() still resolves under v7

@langwatch-agent
langwatch-agent force-pushed the fix/security-js-overrides branch from 8daa1d4 to 11d2965 Compare August 18, 2026 06:37
@langwatch-agent

Copy link
Copy Markdown
Contributor Author

Rebased onto current main, which added the openai-realtime-demo example and two release commits. pnpm install --frozen-lockfile in javascript/ is exit 0 against the rebased lockfile, so nothing in main's four commits moved a dependency.

Re-ran the closure check across the whole scenario inbox afterwards. All 148 open alerts are live (no stale manifests in this repo), and this PR plus #857 close every one of them: 110 here, 38 there, 0 left over. The only two entries the checker cannot see a resolved version for are @remix-run/router #613 and #616, and that is because react-router 7 folded the package in and it no longer exists in either template lockfile.

Ready for human review.

@langwatch-agent
langwatch-agent force-pushed the fix/security-js-overrides branch from 11d2965 to df36631 Compare August 20, 2026 06:49
@langwatch-agent langwatch-agent changed the title fix(security): raise JS transitive override floors across the four workspaces fix(security): close all 90 open JS alerts across the scenario workspaces Aug 20, 2026
@langwatch-agent
langwatch-agent force-pushed the fix/security-js-overrides branch from df36631 to b2c733f Compare August 20, 2026 06:55
@langwatch-agent

Copy link
Copy Markdown
Contributor Author

CI caught a real regression in the first push of this branch, and it is fixed in b2c733f4. Worth recording because the failure mode is not obvious.

ci-checks (24.x) failed at Lint with:

TypeError: expand is not a function
    at Minimatch.braceExpand (.../minimatch@3.1.5/minimatch.js:271:10)

The cause was my own override selector. I had written the floors as pkg@<fix, but a bare upper bound with no lower bound also matches every lower major: brace-expansion@<5.0.7 matches 1.1.14 just as happily as 5.0.6. So minimatch@3.1.5, which declares brace-expansion: ^1.1.7, was handed brace-expansion 5.0.9, whose export shape is not a callable, and eslint crashed before linting anything.

Main's original selectors had lower bounds (brace-expansion@>=5.0.0 <5.0.6, js-yaml@>=4.0.0 <4.2.0). I dropped that property while raising them to the current advisory versions. That was the mistake.

Every selector this PR touches now carries one, pkg@>=N.0.0 <fix, and the tree keeps each major line patched within itself:

minimatch@3.1.3 -> brace-expansion 1.1.18     (was 5.0.9)
minimatch@3.1.5 -> brace-expansion 1.1.18     (was 5.0.9)
minimatch@9.0.7 -> brace-expansion 5.0.9      (declares ^5.0.2, correct)
minimatch@10.x  -> brace-expansion 5.0.9
js-yaml: 3.15.1, 4.3.1, 5.2.2                 (3.x had vanished entirely)

I only added bounds to the selectors this PR introduces or raises. Pre-existing entries are untouched, deliberately: esbuild@<0.28.1 and friends are 0.x, where the semver major is the minor, so the same rewrite would be wrong there.

Re-verified after the fix: closure still 90 of 90; pnpm install --frozen-lockfile exit 0 in all three workspaces; pnpm lint:all in javascript/ no longer crashes and now reports exactly what a clean origin/main checkout reports (516 problems, 8 errors, all import/no-unresolved in examples/vitest that need the package built first); template tsc --noEmit and pnpm build exit 0, and the browser pass over the built output still goes 404 to Link to back cleanly.

Two failures remain on this branch that are not from it, both reproduced on an untouched origin/main: pnpm typecheck and the dts step of pnpm build fail with TS2688: Cannot find type definition file for 'yauzl'.

@langwatch-agent

Copy link
Copy Markdown
Contributor Author

Second CI finding, and this one is not from this branch: javascript-complete is red on origin/main too, with the identical failure. Fixed here in d20e19db because it otherwise keeps this PR unmergeable.

FAIL tests/scenario-expert-realtime.test.ts
TypeError: Cannot read properties of undefined (reading 'type')
  ❯ Module.create ../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js:2474:68
  ❯ @openai+agents-core@0.16.0_ws@8.21.3_zod@3.25.76/src/types/protocol.ts:802:30
  ❯ ../openai-realtime-demo/agents/realtime-user-simulator.agent.ts:1:1

Same file, same error, same 1 failed | 34 passed | 21 skipped on main's own run of ci-checks (24.x). Note the resolution key in the path: agents-core@0.16.0_zod@3.25.76.

Cause. @openai/agents 0.16 declares a zod@^4.0.0 peer. javascript/examples/openai-realtime-demo/package.json depends on @openai/agents but declares no zod of its own, so pnpm satisfied the peer from the javascript root, which is on zod@^3.25.76. The package's schema construction then fails at import, so the test dies before running an assertion. examples/vitest was unaffected because it already declares zod: ^4.1.13.

Fix. Declare the same zod: ^4.1.13 in the demo. The importer moves from 0.16.0(ws@8.21.3)(zod@3.25.76) to 0.16.0(ws@8.21.3)(zod@4.4.3). No package version changes anywhere in the lockfile, only that peer resolution:

-        version: 0.16.0(ws@8.21.3)(zod@3.25.76)
+        version: 0.16.0(ws@8.21.3)(zod@4.4.3)

Verified locally. The import-time TypeError is gone; the suite now gets into the test body and stops at RealtimeAgentAdapter.connect requires an API key, which is this sandbox having no OPENAI_REALTIME_API_KEY. CI has one, so this should now pass there.

Alert closure is unchanged at 90 of 90.

Worth flagging separately: this went red on main and stayed red. If the intent is for javascript-complete to gate merges, something is letting it through.

…aces

Raises the transitive override floors in the three files that own them
and retires two lockfiles that nothing installs from.

Every selector carries an explicit lower bound, `pkg@>=N.0.0 <fix`. A
bare `pkg@<fix` also matches every lower major, so a floor written for
one line silently captures the others: `brace-expansion@<5.0.7` matches
1.1.14 too, which handed minimatch 3.1.5 a brace-expansion 5 and made
eslint die with `TypeError: expand is not a function`. With the bounds
the tree keeps brace-expansion 1.1.18 and 5.0.9 side by side, and js-yaml
3.15.1, 4.3.1 and 5.2.2, each patched within its own line.

Where main already carried a floor it is raised in place rather than
added alongside. pnpm matches only the first selector for a package name,
so a second entry would have been shadowed by the stale one: docs had an
unscoped `hono: '>=4.12.25'` sitting in front of the advisory floor, and
dompurify, js-yaml, mermaid, postcss, liquidjs and fast-uri were all
pinned below their current advisory ranges. Targets are capped as well as
bounded; javascript/pnpm-lock.yaml had resolved fast-uri 4.1.2 off an
uncapped floor and now resolves 3.1.5.

javascript/package-lock.json is removed. Every workflow installs with
`pnpm install --frozen-lockfile`, nothing in the repo reads the npm lock,
and its only commits are release version bumps, so it had drifted far
enough that regenerating it moved @openai/agents 0.3.9 to 0.16.1 and
dropped 53 packages. It was carrying 28 alerts on a file no install
touches. The pnpm lockfile beside it resolves the same packages safely.

javascript/examples/openai-realtime-demo/ is a declared member of the
javascript workspace, so its pnpm.overrides block is inert and its
lockfile is an orphan that pnpm never writes. Six of its seven floors
were already superseded at the root; the seventh, ajv, moves there.

The lovable_clone template moves to react-router 7. react-router-dom
#551 has no patched release in the 6.x line, so leaving 6.x was the only
way to close it. The template uses only the v7-compatible surface,
BrowserRouter/Routes/Route in App.tsx and useLocation in NotFound.tsx, so
no code changed. @remix-run/router disappears from both lockfiles because
v7 folded it in, which also retires the overrides that pinned it.

postcss is a direct devDependency of the template, and npm refuses an
override that conflicts with one, so its floor is carried by the direct
pin instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@langwatch-agent
langwatch-agent force-pushed the fix/security-js-overrides branch from d20e19d to ae7184a Compare August 21, 2026 06:05
@langwatch-agent

Copy link
Copy Markdown
Contributor Author

Rebased onto current main. Two notes on state.

Main absorbed the zod fix from this branch. javascript/examples/openai-realtime-demo/package.json now carries zod: ^4.1.13 on main, so the rebase dropped that commit as already upstream. This PR is back to a single commit, the 90-alert closure work. Re-verified after the rebase: closure still 90 of 90, and pnpm install --frozen-lockfile is exit 0 in docs/, javascript/ and the template with no lockfile regeneration needed.

The red on this PR is not from this PR. ci-checks (24.x) fails with:

code: 'invalid_api_key', message: 'Incorrect API key provided: sk-proj-****GpwA'

main fails identically, with the same 5 failed | 30 passed | 21 skipped, and has done on every run since 2026-08-20T13:03. This branch was green on the same content yesterday morning, before that started. Details and the run list are in #882; it needs the OPENAI_API_KEY secret rotated, which I have no access to.

So javascript-complete here will stay red until that secret is fixed, independently of anything in this branch.

@langwatch-agent langwatch-agent removed the ci-green Latest run of every check is passing (checks API, not the legacy commit-status index) label Aug 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Automated low-risk assessment

This PR was evaluated against the repository's Low-Risk Pull Requests procedure and does not qualify as low risk.

This PR's diff could not be evaluated automatically: Diff too large for automated evaluation (659540 chars exceeds 100000-char limit). Manual review required.

This PR requires a manual review before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependabot-scout Opened by the dependabot-scout security-triage agent (shared langwatch-agent bot identity) hound-checked Triaged by the pr-hound agent at the current head SHA

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant