Repository navigation
build(deps): combine Dependabot updates #920, #922–#926, #928 and repair main CI - #935
Conversation
… 2 updates Bumps the bun-minor-patch group with 2 updates in the /examples/aidlc-portfolio directory: [yaml](https://github.com/eemeli/yaml) and [@types/bun](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/bun). Bumps the bun-minor-patch group with 1 update in the /examples/aidlc-portfolio/skills/aidlc-portfolio directory: [yaml](https://github.com/eemeli/yaml). Updates `yaml` from 2.9.0 to 2.9.1 - [Release notes](https://github.com/eemeli/yaml/releases) - [Commits](eemeli/yaml@v2.9.0...v2.9.1) Updates `@types/bun` from 1.3.14 to 1.4.2 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/bun) Updates `yaml` from 2.9.0 to 2.9.1 - [Release notes](https://github.com/eemeli/yaml/releases) - [Commits](eemeli/yaml@v2.9.0...v2.9.1) --- updated-dependencies: - dependency-name: yaml dependency-version: 2.9.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: bun-minor-patch - dependency-name: "@types/bun" dependency-version: 1.4.2 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: bun-minor-patch - dependency-name: yaml dependency-version: 2.9.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: bun-minor-patch ... Signed-off-by: dependabot[bot] <[email protected]>
… 13 updates Bumps the npm-minor-patch group with 7 updates in the /cao_mcp_apps directory: | Package | From | To | | --- | --- | --- | | [@playwright/test](https://github.com/microsoft/playwright) | `1.61.1` | `1.63.0` | | [@testing-library/dom](https://github.com/testing-library/dom-testing-library) | `10.4.1` | `10.4.2` | | [@testing-library/react](https://github.com/testing-library/react-testing-library) | `16.3.2` | `16.3.3` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.3` | `6.1.2` | | [happy-dom](https://github.com/capricorn86/happy-dom) | `20.10.6` | `20.14.5` | | [prettier](https://github.com/prettier/prettier) | `3.9.4` | `3.9.9` | | [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.1.0` | `8.3.3` | Bumps the npm-minor-patch group with 3 updates in the /docusaurus directory: [react](https://github.com/react/react/tree/HEAD/packages/react), [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) and [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom). Bumps the npm-minor-patch group with 2 updates in the /examples/ag-ui/ag-ui-construct-demos/tools directory: [@playwright/test](https://github.com/microsoft/playwright) and [ffmpeg-static](https://github.com/eugeneware/ffmpeg-static). Bumps the npm-minor-patch group with 1 update in the /examples/ag-ui/ag-ui-eventsource-viewer/tools directory: [@playwright/test](https://github.com/microsoft/playwright). Bumps the npm-minor-patch group with 2 updates in the /examples/agent-plugins/agent-plugins-dogfood/tools directory: [@playwright/test](https://github.com/microsoft/playwright) and [ffmpeg-static](https://github.com/eugeneware/ffmpeg-static). Bumps the npm-minor-patch group with 5 updates in the /web directory: | Package | From | To | | --- | --- | --- | | [@testing-library/react](https://github.com/testing-library/react-testing-library) | `16.3.2` | `16.3.3` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.2` | `6.1.2` | | [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.0.16` | `8.3.3` | | [autoprefixer](https://github.com/postcss/autoprefixer) | `10.4.27` | `10.6.1` | | [postcss](https://github.com/postcss/postcss) | `8.5.25` | `8.5.29` | Updates `@playwright/test` from 1.61.1 to 1.63.0 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.61.1...v1.63.0) Updates `@testing-library/dom` from 10.4.1 to 10.4.2 - [Release notes](https://github.com/testing-library/dom-testing-library/releases) - [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md) - [Commits](testing-library/dom-testing-library@v10.4.1...v10.4.2) Updates `@testing-library/react` from 16.3.2 to 16.3.3 - [Release notes](https://github.com/testing-library/react-testing-library/releases) - [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md) - [Commits](testing-library/react-testing-library@v16.3.2...v16.3.3) Updates `@vitejs/plugin-react` from 6.0.3 to 6.1.2 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/[email protected]/packages/plugin-react) Updates `happy-dom` from 20.10.6 to 20.14.5 - [Release notes](https://github.com/capricorn86/happy-dom/releases) - [Commits](capricorn86/happy-dom@v20.10.6...v20.14.5) Updates `prettier` from 3.9.4 to 3.9.9 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](prettier/prettier@3.9.4...3.9.9) Updates `vite` from 8.1.0 to 8.3.3 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.3.3/packages/vite) Updates `react` from 19.2.8 to 19.3.0 - [Release notes](https://github.com/react/react/releases) - [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/react/react/commits/v19.3.0/packages/react) Updates `@types/react` from 19.2.17 to 19.3.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) Updates `react-dom` from 19.2.8 to 19.3.0 - [Release notes](https://github.com/react/react/releases) - [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/react/react/commits/v19.3.0/packages/react-dom) Updates `@types/react` from 19.2.17 to 19.3.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) Updates `@playwright/test` from 1.56.1 to 1.63.0 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.61.1...v1.63.0) Updates `ffmpeg-static` from 5.2.0 to 5.3.0 - [Release notes](https://github.com/eugeneware/ffmpeg-static/releases) - [Commits](eugeneware/ffmpeg-static@5.2.0...5.3.0) Updates `@playwright/test` from 1.56.1 to 1.63.0 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.61.1...v1.63.0) Updates `@playwright/test` from 1.56.1 to 1.63.0 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.61.1...v1.63.0) Updates `ffmpeg-static` from 5.2.0 to 5.3.0 - [Release notes](https://github.com/eugeneware/ffmpeg-static/releases) - [Commits](eugeneware/ffmpeg-static@5.2.0...5.3.0) Updates `@testing-library/react` from 16.3.2 to 16.3.3 - [Release notes](https://github.com/testing-library/react-testing-library/releases) - [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md) - [Commits](testing-library/react-testing-library@v16.3.2...v16.3.3) Updates `@vitejs/plugin-react` from 6.0.2 to 6.1.2 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/[email protected]/packages/plugin-react) Updates `vite` from 8.0.16 to 8.3.3 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.3.3/packages/vite) Updates `autoprefixer` from 10.4.27 to 10.6.1 - [Release notes](https://github.com/postcss/autoprefixer/releases) - [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md) - [Commits](postcss/autoprefixer@10.4.27...10.6.1) Updates `postcss` from 8.5.25 to 8.5.29 - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](postcss/postcss@8.5.25...8.5.29) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-version: 1.63.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: "@testing-library/dom" dependency-version: 10.4.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch - dependency-name: "@testing-library/react" dependency-version: 16.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch - dependency-name: "@vitejs/plugin-react" dependency-version: 6.1.2 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: happy-dom dependency-version: 20.14.5 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: prettier dependency-version: 3.9.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch - dependency-name: vite dependency-version: 8.3.3 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: react dependency-version: 19.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: "@types/react" dependency-version: 19.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: react-dom dependency-version: 19.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: "@types/react" dependency-version: 19.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: "@playwright/test" dependency-version: 1.63.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: ffmpeg-static dependency-version: 5.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: "@playwright/test" dependency-version: 1.63.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: "@playwright/test" dependency-version: 1.63.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: ffmpeg-static dependency-version: 5.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: "@testing-library/react" dependency-version: 16.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch - dependency-name: "@vitejs/plugin-react" dependency-version: 6.1.2 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: vite dependency-version: 8.3.3 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: autoprefixer dependency-version: 10.6.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: postcss dependency-version: 8.5.29 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch ... Signed-off-by: dependabot[bot] <[email protected]>
There was a problem hiding this comment.
🔵 Needs a closer look
It combines several major frontend and test-toolchain upgrades across 32 files, warranting final human review.
0 open findings
What changed in this PR
Combines scheduled dependency upgrades, adds React/Vitest compatibility changes, and repairs Dependabot coverage for composite-action pins.
Changes:
- Upgrades React, Vitest, Vite, Playwright, fast-check, and related dependencies.
- Adds React 19 JSX typing and Vitest 5 jest-dom compatibility.
- Updates CI runtimes and Dependabot coverage for local actions.
| File | Description |
|---|---|
.github/actions/dependency-security/action.yml |
Updates the Trivy setup pin. |
.github/dependabot.yml |
Watches local composite actions. |
.github/workflows/ci.yml |
Uses Node 22 for Vitest jobs. |
CHANGELOG.md |
Documents dependency and CI changes. |
cao_mcp_apps/README.md |
Updates Node prerequisites. |
cao_mcp_apps/package-lock.json |
Locks upgraded MCP app dependencies. |
cao_mcp_apps/package.json |
Upgrades React and test tooling. |
cao_mcp_apps/scripts/check-bundle-size.mjs |
Updates measured graph bundle size. |
cao_mcp_apps/src/agent/AgentView.tsx |
Uses React’s JSX namespace. |
cao_mcp_apps/src/dashboard/Dashboard.tsx |
Uses React’s JSX namespace. |
cao_mcp_apps/src/event-stream/EventStreamView.tsx |
Uses React’s JSX namespace. |
cao_mcp_apps/src/graph/GraphView.tsx |
Uses React’s JSX namespace. |
cao_mcp_apps/src/shared/AgentStatus.tsx |
Uses React’s JSX namespace. |
cao_mcp_apps/src/shared/EventStream.tsx |
Uses React’s JSX namespace. |
cao_mcp_apps/src/shared/HeaderBar.tsx |
Uses React’s JSX namespace. |
cao_mcp_apps/src/shared/TaskControl.tsx |
Uses React’s JSX namespace. |
docusaurus/package-lock.json |
Locks updated React dependencies. |
docusaurus/package.json |
Upgrades React and its types. |
examples/ag-ui/ag-ui-construct-demos/tools/package-lock.json |
Locks recorder tooling updates. |
examples/ag-ui/ag-ui-construct-demos/tools/package.json |
Upgrades Playwright and FFmpeg. |
examples/ag-ui/ag-ui-eventsource-viewer/tools/package-lock.json |
Locks the Playwright update. |
examples/ag-ui/ag-ui-eventsource-viewer/tools/package.json |
Upgrades Playwright. |
examples/agent-plugins/agent-plugins-dogfood/tools/package-lock.json |
Locks recorder tooling updates. |
examples/agent-plugins/agent-plugins-dogfood/tools/package.json |
Upgrades Playwright and FFmpeg. |
examples/aidlc-portfolio/bun.lock |
Locks Bun dependency updates. |
examples/aidlc-portfolio/package.json |
Upgrades YAML and Bun types. |
examples/aidlc-portfolio/skills/aidlc-portfolio/bun.lock |
Locks the YAML update. |
examples/aidlc-portfolio/skills/aidlc-portfolio/package.json |
Upgrades YAML. |
test/test_workflow_pins.py |
Verifies composite actions are watched. |
web/package-lock.json |
Locks upgraded web tooling. |
web/package.json |
Upgrades Vite, Vitest, and related tools. |
web/src/test/setup.ts |
Restores jest-dom types under Vitest 5. |
Files not reviewed (6)
- cao_mcp_apps/package-lock.json: Generated file
- docusaurus/package-lock.json: Generated file
- examples/ag-ui/ag-ui-construct-demos/tools/package-lock.json: Generated file
- examples/ag-ui/ag-ui-eventsource-viewer/tools/package-lock.json: Generated file
- examples/agent-plugins/agent-plugins-dogfood/tools/package-lock.json: Generated file
- web/package-lock.json: Generated file
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
fanhongy
left a comment
There was a problem hiding this comment.
Great dependency update.
# Conflicts: # examples/aidlc-portfolio/bun.lock # examples/aidlc-portfolio/package.json
The github-actions group update (#927) moved setup-trivy to v0.3.1 in ci.yml only. The dependency-security composite action still pins v0.2.6, so test_real_inventory_regression_has_a_required_scanner_in_ci fails on main. Use the same v0.3.1 pin in the composite action. Co-authored-by: Copilot <[email protected]>
Apply these Dependabot updates: - #923: @types/node ^26.6.4 (cao_mcp_apps) - #924: fast-check ^4.10.2 (cao_mcp_apps) - #925: vitest ^5.0.3 (cao_mcp_apps) - #926: react and @types/react ^19.3.0 (cao_mcp_apps) - #928: vitest ^5.0.3 (web) Add the companion updates that npm ci needs. Without them, npm ci fails with ERESOLVE: - @vitest/coverage-v8 ^5.0.3: version 4 has a peer on vitest 4. - react-dom ^19.3.0: version 18 has a peer on react ^18. - @types/react-dom ^19.3.0: version 18 has a peer on @types/react ^18. Fix the type errors that the updates cause: - @types/react 19 removes the global JSX namespace. Use React.JSX.Element in the 8 components that declare a return type. - jest-dom declares its matcher types in the Vitest 4 shape (testing-library/jest-dom#738). Add the Vitest 5 Matchers augmentation in web/src/test/setup.ts. Co-authored-by: Copilot <[email protected]>
6845ad7 to
4e4b6f5
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Required Node 22 and Dependabot configuration changes are absent, and the matcher augmentation weakens argument typing.
4 open findings
Files not reviewed (6)
- cao_mcp_apps/package-lock.json: Generated file
- docusaurus/package-lock.json: Generated file
- examples/ag-ui/ag-ui-construct-demos/tools/package-lock.json: Generated file
- examples/ag-ui/ag-ui-eventsource-viewer/tools/package-lock.json: Generated file
- examples/agent-plugins/agent-plugins-dogfood/tools/package-lock.json: Generated file
- web/package-lock.json: Generated file
🧠 Review effort: Balanced
| "vite": "^8.3.3", | ||
| "vite-plugin-singlefile": "^2.1.0", | ||
| "vitest": "^4.1.11" | ||
| "vitest": "^5.0.3" |
There was a problem hiding this comment.
Not changed in this PR. The PR scope is only the changes that CI needs. CI passes on Node 20.20.2 at 4e4b6f5: the CAO MCP Apps job runs 78/78 Vitest 5.0.3 tests, and the coverage ratchet is OK (frontend 90.04%). npm shows only EBADENGINE warnings, and .npmrc does not set engine-strict.
I removed the Node 22 change from this PR on purpose. This review used the earlier PR description. The current description lists the move to Node 22 as a separate follow-up under "Items for maintainers".
| "vite": "^8.0.16", | ||
| "vitest": "^4.1.11" | ||
| "vite": "^8.3.3", | ||
| "vitest": "^5.0.3" |
There was a problem hiding this comment.
Not changed in this PR, for the same reason as in the CAO MCP Apps thread. CI passes on Node 20.20.2 at 4e4b6f5: the Web UI Build job runs 335/335 Vitest 5.0.3 tests, and tsc --noEmit and npm run build pass.
This review used the earlier PR description. The current description lists the move to Node 22 as a separate follow-up.
| import type { TestingLibraryMatchers } from '@testing-library/jest-dom/matchers' | ||
|
|
||
| // Vitest 5 reads custom matcher types only from its own `Matchers<R, T>` | ||
| // interface. jest-dom still declares the Vitest 4 shape, so its matcher types | ||
| // are lost under Vitest 5 (testing-library/jest-dom#738). Remove this block | ||
| // when jest-dom ships Vitest 5 types. The type parameter names must stay the | ||
| // same as in Vitest's declaration, or TypeScript does not merge the interface. | ||
| declare module 'vitest' { | ||
| interface Matchers<R, T> extends TestingLibraryMatchers<unknown, R> {} | ||
| } |
There was a problem hiding this comment.
No change. The shim does not weaken the typing that main has:
- jest-dom 6.9.1 uses
anyforEin its own Vitest types (types/vitest.d.ts:TestingLibraryMatchers<any, T>). - On
main,webgets the matchers from jest-domtypes/jest.d.ts, whereEisReturnType<typeof expect.stringContaining>.webdoes not install@types/jest, so this type is alsoany. - In Vitest 5.0.3,
expect.stringContainingreturnsany, andvitestdoes not exportAsymmetricMatcher. Thus the jest-dom form also givesany.
I ran the same tsc probe on main (Vitest 4.1.11) and on 4e4b6f5 (Vitest 5.0.3). On both, toHaveAccessibleName(42) and toHaveAccessibleDescription(42) compile, and the toHaveClass(42) control fails. The result is the same. A stricter type for E is a separate change.
| steps: | ||
| - name: Install Trivy | ||
| uses: aquasecurity/setup-trivy@3fb12ec12f41e471780db15c232d5dd185dcb514 # v0.2.6 | ||
| uses: aquasecurity/setup-trivy@81e514348e19b6112ce2a7e3ecbafe19c1e1f567 # v0.3.1 |
There was a problem hiding this comment.
Not changed in this PR. This PR includes only the changes that CI needs. The pin change alone repairs main: at 4e4b6f5, test_real_inventory_regression_has_a_required_scanner_in_ci passes in the Unit Tests and CAO MCP Apps jobs.
This review used the earlier PR description. The current description lists the directories: ["/", "/.github/actions/*"] change as a separate follow-up under "Items for maintainers".
gutosantos82
left a comment
There was a problem hiding this comment.
PR Review: #935 — build(deps): combine Dependabot updates #920, #922–#926, #928 and repair main CI
Summary
This PR merges Dependabot #920/#922 verbatim, re-does #923–#926/#928 with the companion peer-dependency bumps they were missing (react-dom/@types/react-dom 19, @vitest/coverage-v8 5), makes the two code changes the upgrades force (JSX.Element → React.JSX.Element in 8 cao_mcp_apps components; a Vitest 5 jest-dom matcher type shim in web/src/test/setup.ts), and aligns the setup-trivy pin in .github/actions/dependency-security/action.yml with ci.yml — which is what turns main green again (test_real_inventory_regression_has_a_required_scanner_in_ci). The description is unusually faithful to the diff (file counts, component count, companion-bump table, lockfile provenance all verified), lockfiles are clean (all 146 added resolved URLs on registry.npmjs.org, all sha512, no new install scripts, 7-day cooldown respected), and every peer dependency resolves. At the current head (4e4b6f5) the author deliberately cut scope to "only what CI needs", dropping the Node 22 CI move, dependabot.yml directories, CHANGELOG/README/bundle-size-comment edits that were in the previous head. Recommendation: merge (squash), with two one-line doc fixes as optional nits and the Dependabot-coverage follow-up tracked so this drift cannot recur.
Important (should fix)
- [conventions] cao_mcp_apps/README.md:124 — the V8-coverage note still reads "Vitest 4 /
@vitest/coverage-v84 compute V8 line coverage via AST-based remapping…" while this PR movescao_mcp_appsto Vitest 5 / coverage-v8 5. The substance still holds; only the major is wrong. The previous head updated this line and the scope cut reverted it. CODEBASE.md's documentation-maintenance rule asks that version claims move with the package metadata in the same change — a one-word fix. - [tests] .github/dependabot.yml (follow-up to track) — the repair is detection-only:
test_real_inventory_regression_has_a_required_scanner_in_ciwill catch the nextsetup-trivydrift, but because thegithub-actionsecosystem still lists onlydirectory: "/", Dependabot will again bumpci.ymlwithout touching the composite action, andmainre-reddens until someone hand-fixes it. Deferringdirectories: ["/", "/.github/actions/*"](plus its regression assertion) out of this PR is a reasonable scope call; please make sure the follow-up actually lands, since it is the root-cause fix for exactly the incident this PR repairs.
Nits (optional)
- [consistency] cao_mcp_apps/scripts/check-bundle-size.mjs:8 — comment says
graph.htmlwas "measured ~86.3 KB gz … ~28% headroom"; after React 19 the PR's own table puts it at 108.5 KB (≈10% headroom under the 120 KB limit). The enforced budget is unchanged and correct; only the comment is now misleading. Also an acknowledged deferral from the scope cut. - [conventions] merge commits — the branch carries two non-Conventional
Merge commit 'refs/pr/92x'commits. They disappear under squash (the PR title becomes the landed subject and is a validbuild(deps):), so use squash rather than rebase-and-merge for this one. - [conventions] CHANGELOG — no written rule requires an entry for dependency bumps, but React 18 → 19 in
cao_mcp_appsis user-visible to anyone who builds MCP Apps from source (as the body notes). A one-line Unreleased note would be reasonable; not required.
Tests
test/test_dependency_security.py::test_real_inventory_regression_has_a_required_scanner_in_ci compares ci.yml's setup-trivy step (uses, with, if) against steps[0] of the composite action; at 4e4b6f5 both read aquasecurity/setup-trivy@81e51434… # v0.3.1 with version: v0.70.0, so the pin bump alone satisfies it. test_every_action_is_pinned_to_a_commit_sha still parametrizes over .github/actions/**/action.yml. The jest-dom shim is exercised by tsc --noEmit in the Web UI Build job (web/tsconfig.json includes src, and matcher call sites live under src/**/*.test.tsx), so a future jest-dom whose own Vitest 5 types conflict would surface at the call sites; a merely-redundant shim would not fail anything, so its removal relies on the code comment. cao_mcp_apps fast-check usage passes explicit numRuns, vitest.config.ts declares no coverage thresholds (the ratchet script reads coverage-summary.json, still emitted under Vitest 5), and a grep for React-19-removed APIs (defaultProps, propTypes, forwardRef, ReactDOM.render, findDOMNode, string refs) finds none — entry points already use createRoot. CI at this head: 29/29 checks green (78/78 cao_mcp_apps, 335/335 web, Python 3.10–3.12 unit suites).
Verification
Dynamic verification did not return in time; not covered. Static evidence above (pin equality in both files at the worktree, peer-dep resolution in the lockfiles, CI green at 4e4b6f5) stands on its own.
Verdict
Approve with nits — the change does exactly what it says, repairs main, and all angles are clean; the two stale doc/comment strings are one-line fixes and the Dependabot-coverage follow-up should be tracked so the drift does not recur. Squash on merge.


Summary
This PR puts the open Dependabot updates #920, #922, #923, #924, #925, #926 and #928 into one change. It adds only the changes that CI needs to pass. It also repairs
main: oneb2c9d3, Unit Tests (3.12) and CAO MCP Apps fail.#921 and #927 are already merged, so this PR does not include them.
Supersedes #920, #922, #923, #924, #925, #926, #928. Dependabot closes these PRs when
mainhas the updates.The PR changes 26 files. 16 files are the Dependabot changes. The other 10 files are the necessary fixes below.
Commits
1. Merge #922 and #920
These are the Dependabot commits with no change. #921 changed the adjacent
typescriptline inexamples/aidlc-portfolio, so the #920 merge had a conflict inpackage.jsonandbun.lock. The resolution keeps the two changes.2.
ci:align the setup-trivy pin (repairsmain)#927 moved
aquasecurity/setup-trivyinci.ymlto v0.3.1 (81e5143…). The Dependency Security composite action (.github/actions/dependency-security/action.yml) stayed on v0.2.6.test_real_inventory_regression_has_a_required_scanner_in_cirequires the same pin in the two files, so it fails onmain. This commit uses the v0.3.1 pin in the composite action. v0.3.1 has the same inputs as v0.2.6.3.
build(deps): React 19, Vitest 5, fast-check 4,@types/node26cao_mcp_apps@types/node22 → 26cao_mcp_appsfast-check3 → 4cao_mcp_appsvitest4 → 5.0.3@vitest/coverage-v85.0.3cao_mcp_appsreactand@types/react18 → 19.3react-domand@types/react-dom19.3webvitest4 → 5.0.3Without the companion updates,
npm cifails withERESOLVE. That is why CI failed on #925 and #926:@vitest/coverage-v84 has a peer dependency onvitest4.react-dom18 has a peer dependency onreact^18.@types/react-dom18 has a peer dependency on@types/react^18.Code changes that the updates need:
@types/react19 (cao_mcp_apps). It removes the globalJSXnamespace. Eight components now returnReact.JSX.Elementinstead ofJSX.Element. All of them already importReact.web). jest-dom declares its matcher types in the Vitest 4 shape, sotscgave 282 errors. That is why CI failed on build(deps-dev): bump vitest from 4.1.11 to 5.0.3 in /web #928 (Vitest 5: matcher types are lost —Assertion<T>augmentation no longer merges with Vitest'sAssertion<R, T>testing-library/jest-dom#738, fix pending in feat: support vitest 5 testing-library/jest-dom#742).web/src/test/setup.tsadds the jest-dom matchers to the Vitest 5Matchersinterface. Remove this block when jest-dom ships Vitest 5 types.I made the lockfiles with npm 10.9.9 and
--before=2026-10-06T05:00:00Z, to keep the seven-day release cooldown. A minimalnpm installfrom themainlockfiles (npm 11.21.0) gives the same package versions.Items for maintainers
Node 20 and Vitest 5. Vitest 5 declares Node
^22.12.0 || ^24.0.0 || >=26.0.0. Theweb-buildandcao-mcp-appsjobs stay on Node 20, because CI passes on it. npm shows onlyEBADENGINEwarnings, and.npmrcdoes not setengine-strict. A separate PR can move these jobs to Node 22.Dependabot scope. The
github-actionsentry in.github/dependabot.ymlusesdirectory: "/". Dependabot thus does not update the pins in.github/actions/*, and the setup-trivy mismatch can occur again. A separate PR can adddirectories: ["/", "/.github/actions/*"].Bundle size. React 19 adds about 22 KB gzip to each view bundle. All bundles stay under their limits, but
graph.htmlhas less headroom:maindashboard.htmlagent.htmlevent-stream.htmlgraph.htmlFrontend coverage. The total changes from 90.06% to 90.04%. The floor is 90.00%.
Released wheels.
publish-to-pypi.ymlbuilds onlyweb, so React 19 affects only users who buildcao_mcp_appsfrom source.Local validation
On Node 20.20.2 and npm 10.8.2 (the CI versions):
web:npm ci,tsc --noEmitclean, 24 files / 335 tests pass on Vitest 5.0.3,npm run buildpasses.cao_mcp_apps:npm ci, typecheck clean, 78/78 tests pass with coverage (lines 90.04%),build:allpasses,scan:jitclean,check:sizeOK.test/test_workflow_pins.pyandtest/test_dependency_security.py: 94 passed, 7 skipped.