Skip to content

Upgrade stable runtimes and dependencies - #79

Merged
evertonschuster merged 1 commit into
mainfrom
chore/upgrade-all-dependencies
Aug 3, 2026
Merged

Upgrade stable runtimes and dependencies#79
evertonschuster merged 1 commit into
mainfrom
chore/upgrade-all-dependencies

Conversation

@evertonschuster

@evertonschuster evertonschuster commented Aug 3, 2026

Copy link
Copy Markdown
Owner

What changed

  • upgrades Node to 26.5.1 and npm to 12.0.2
  • upgrades Python to 3.14.6, uv to 0.11.32, FastAPI to 0.141.1, Uvicorn to 0.52.1, Ruff to 0.16.1, and refreshes uv.lock
  • keeps .NET SDK 10.0.302 (latest stable) while updating Asp.Versioning.Mvc to 10.0.1 and Scalar.AspNetCore to 2.16.17
  • updates the remaining npm minor/patch releases and refreshes package-lock.json
  • aligns CI, local runtime pins, documentation, and the architecture guard

Compatibility fixes

  • pins TypeScript to 5.9.3 because typescript-eslint 8.65.0 does not yet resolve TypeScript 7 types correctly
  • keeps Microsoft.OpenApi 2.11.0 because 3.9.0 is incompatible with the ASP.NET Core 10.0.10 OpenAPI source generator
  • makes React type peers and jsdom visible at the workspace root for npm 12's hoisted layout
  • disables Node 26's experimental native web storage in Vitest workers so jsdom owns localStorage
  • records the temporary pins and their removal criteria in ADR 0032

Validation

  • clean npm 12 install with no unreviewed install scripts
  • frontend: Prettier, ESLint, production build, 305 tests; coverage 87.55% lines, 83.25% branches, 81.42% functions
  • backend: warning-free build, 242 tests
  • assistant service on Python 3.14.6: Ruff, format, 13 tests; 87.04% coverage
  • governance: sync check, governance check, architecture guard, 95 script tests
  • Aspire smoke: Identity, Services, Assistant, and frontend all returned HTTP 200; PostgreSQL and all resources cleaned up afterward

Summary by CodeRabbit

  • Updates

    • Standardized supported runtimes to Python 3.14.6 and Node.js 26.5.1, with npm 12.0.2.
    • Updated local development and CI tooling to use uv 0.11.32.
    • Refreshed Python, frontend, API, and development tool packages.
    • Added React type definitions and jsdom development support.
  • Bug Fixes

    • Improved frontend test reliability by preventing conflicting browser storage behavior.
  • Documentation

    • Documented runtime compatibility requirements, version pins, and upgrade guidance across project documentation.

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR aligns local and CI runtimes with Python 3.14.6, Node.js 26.5.1, npm 12.0.2, and updated tool dependencies. It also updates AI service packages, frontend tooling, backend package pins, Vitest configuration, documentation, and architecture validation.

Changes

Runtime and toolchain alignment

Layer / File(s) Summary
Python runtime and AI service alignment
.github/workflows/*, ai-services/assistant-service/*, scripts/architecture_guard.py, docs/MONOREPO.md, docs/QUALITY.md, README.md
AI service configuration and CI now use Python 3.14.6 and uv 0.11.32. Python support, service dependencies, Ruff, tests, documentation, and parity checks are updated.
Node and frontend toolchain alignment
.nvmrc, package.json, apps/admin-frontend/*, README.md, docs/adr/0032-*
Node.js and npm minimum versions increase to 26.5.1 and 12.0.2. Frontend dependencies, TypeScript, root development dependencies, npm permissions, Vitest options, and compatibility guidance are updated.
Backend package pin updates
backend/Directory.Packages.props
Asp.Versioning.Mvc and Scalar.AspNetCore receive patch-version upgrades.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary changes: stable runtime and dependency upgrades across the project.
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.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/upgrade-all-dependencies

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.

@evertonschuster
evertonschuster marked this pull request as ready for review August 3, 2026 00:00
@evertonschuster
evertonschuster merged commit 5bc004b into main Aug 3, 2026
17 of 18 checks passed
@evertonschuster
evertonschuster deleted the chore/upgrade-all-dependencies branch August 3, 2026 00:08

@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

🤖 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 `@package.json`:
- Around line 27-28: Update the allowScripts entry for msw to use the resolved
package identity key "msw@2.15.0" instead of the unversioned "msw" key,
preserving the existing approval value.
- Around line 6-8: Update the package bootstrap and CI command paths associated
with the packageManager declaration to explicitly activate npm 12.0.2 before
running npm commands, or validate the active version with npm --version and fail
on mismatch. Keep the existing packageManager value as the single version source
and ensure all relevant bare-npm execution paths enforce it.

In `@README.md`:
- Around line 48-52: Align the README Python requirement with
ai-services/assistant-service/pyproject.toml’s requires-python range: document
3.14 as the minimum, while identifying 3.14.6 only as the CI/local
.python-version and uv.lock pin. Alternatively, raise requires-python to
>=3.14.6,<3.15 if that pin is the intended minimum.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d1b5e47f-d060-42bc-86ff-8a86befa878c

📥 Commits

Reviewing files that changed from the base of the PR and between 3eaa009 and 990d805.

⛔ Files ignored due to path filters (2)
  • ai-services/assistant-service/uv.lock is excluded by !**/*.lock
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (18)
  • .github/workflows/agent-governance.yml
  • .github/workflows/ai-services-ci.yml
  • .github/workflows/frontend-ci.yml
  • .github/workflows/sonar.yml
  • .nvmrc
  • README.md
  • ai-services/assistant-service/.python-version
  • ai-services/assistant-service/README.md
  • ai-services/assistant-service/pyproject.toml
  • ai-services/assistant-service/tests/test_verify_token.py
  • apps/admin-frontend/package.json
  • apps/admin-frontend/vitest.config.ts
  • backend/Directory.Packages.props
  • docs/MONOREPO.md
  • docs/QUALITY.md
  • docs/adr/0032-stable-runtime-and-toolchain-compatibility-pins.md
  • package.json
  • scripts/architecture_guard.py

Comment thread package.json
Comment on lines +6 to +8
"node": ">=26.5.1"
},
"packageManager": "npm@10.9.3",
"packageManager": "npm@12.0.2",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Expect an explicit npm 12.0.2 activation and version check.
rg -n -C 3 'corepack|npm@12\.0\.2|setup-node|npm[[:space:]]+--version' \
  .github README.md package.json

Repository: evertonschuster/Agenza

Length of output: 1695


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '--- package files ---\n'
for f in package.json .nvmrc README.md; do
  if [ -f "$f" ]; then
    echo "== $f =="
    sed -n '1,120p' "$f"
  fi
done

printf '\n--- workflow files ---\n'
fd -a '\.y(a)?ml$' .github/workflows | sed 's#^\./##' | sort | while read -r f; do
  echo "== $f =="
  sed -n '1,180p' "$f"
done

printf '\n--- npm/bootstrap script references ---\n'
rg -n -C 3 --hidden --glob '!node_modules/**' 'npm[[:space:]]|corepack[[:space:]]|setup-node|npm install|ci|test|build|pnpm|yarn|bun' .

Repository: evertonschuster/Agenza

Length of output: 251


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- package files ---'
for f in package.json .nvmrc README.md; do
  if [ -f "$f" ]; then
    echo "== $f =="
    sed -n '1,120p' "$f"
  fi
done

echo
echo '--- workflow files ---'
fd '\.y(a)?ml$' .github/workflows | sort | while read -r f; do
  echo "== $f =="
  sed -n '1,200p' "$f"
done

echo
echo '--- npm/bootstrap script references ---'
rg -n -C 3 --hidden --glob '!node_modules/**' 'npm[[:space:]]|corepack[[:space:]]|setup-node|npm install|ci|test|build|pnpm|yarn|bun' .

Repository: evertonschuster/Agenza

Length of output: 50379


🌐 Web query:

Node 26 npm version

💡 Result:

As of August 3, 2026, Node.js 26 is in its "Current" release phase [1][2][3]. The most recent versions of Node.js 26 include npm version 11.x [4]. Specifically, the Node.js 26.6.0 release includes npm 11.18.0 [5]. Because Node.js bundles npm, the version of npm included depends on the specific minor/patch release of Node.js 26 you are using [4]. You can verify the version installed in your environment by running the command node -e 'console.log(require("child_process").execSync("npm -v").toString)' or simply running npm -v in your terminal.

Citations:


🌐 Web query:

Corepack not enabled by default npm --version npm 26

💡 Result:

Corepack is not enabled by default, and it is not intended to manage npm by default even when Corepack itself is enabled [1][2]. Key details regarding your query: 1. Manual Enablement Required: Regardless of the Node.js version, Corepack must be explicitly enabled by running the command corepack enable [1][2]. It is never enabled by default upon installation [1][2]. 2. Interaction with npm: Even when Corepack is enabled, its shims for npm are not installed unless explicitly requested, because npm is already distributed with Node.js [3][4]. Consequently, Corepack does not intercept calls to npm; the global npm remains the default [1][2]. 3. Distribution Status: Corepack is distributed with Node.js versions 14.19.0 up to (but not including) 25.0.0 [3][5]. Future versions of Node.js will no longer include Corepack [5]. If you are using a specific version like npm 26 (or any other version), the behavior remains consistent: Corepack requires manual activation and does not manage npm by default [1][2].

Citations:


🌐 Web query:

Node v26.3.0 npm version

💡 Result:

Node.js version 26.3.0, released on June 1, 2026 [1][2], includes npm version 11.16.0 [3][4][5].

Citations:


🌐 Web query:

npm 12.0.2 release notes Node 26

💡 Result:

npm 12.0.2 was released on July 27, 2026 [1][2][3]. It is a maintenance release for the npm 12 CLI that includes bug fixes and minor internal improvements [1][4]. Key changes in npm 12.0.2 include: - Bug fixes: Included patches for 'pack' command behavior (honoring min-release-age-exclude) and 'owner' command improvements (using scoped registries for user lookups) [1][4]. - Documentation: Clarified breaking changes related to 'unknown-config' in the npm 12 changelogs [1][4]. - Chores: Updated internal node integration to correctly parse 'pack --json' object output [1][4]. Regarding Node.js 26: Node.js 26 is the current active release line as of August 3, 2026, having been first released on May 5, 2026 [5][6][7]. It is scheduled to enter Long-Term Support (LTS) on October 28, 2026 [5][7][8]. npm 12.0.2 is included in the Node.js 26 ecosystem via dependency updates in the Node.js repository [4]. While npm 12 is the current version associated with newer Node.js releases, the npm project and Node.js release teams have confirmed that npm 12 will not be backported to older Node.js versions [4].

Citations:


Activate npm 12.0.2 explicitly before npm commands.

packageManager: "npm@12.0.2" only identifies the intended package manager; it does not make bare npm use npm 12.0.2. With engines.node set to >=26.5.1, every bootstrap and CI path that runs npm should explicitly activate the specified version or assert npm --version.

🤖 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 `@package.json` around lines 6 - 8, Update the package bootstrap and CI command
paths associated with the packageManager declaration to explicitly activate npm
12.0.2 before running npm commands, or validate the active version with npm
--version and fail on mismatch. Keep the existing packageManager value as the
single version source and ensure all relevant bare-npm execution paths enforce
it.

Comment thread package.json
Comment on lines +27 to +28
"allowScripts": {
"msw": true

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 | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

npm ls msw --all --json
npm install-scripts ls

Repository: evertonschuster/Agenza

Length of output: 1765


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '--- package.json relevant allowScripts ---\n'
node - <<'JS'
const fs = require('fs');
const pkg = JSON.parse(fs.readFileSync('package.json','utf8'));
console.log(JSON.stringify(pkg.allowScripts, null, 2));
JS

printf '\n--- package-lock.json msw entries ---\n'
node - <<'JS'
const fs = require('fs');
const lock = JSON.parse(fs.readFileSync('package-lock.json','utf8'));
const entries = [];
for (const [k,v] of Object.entries(lock.packages || {})) {
  if (k.includes('/msw') || k === 'node_modules/msw') {
    entries.push({path:k, version:(v.version||'-'), resolved:(v.resolved||'-'), dev:(v.dev||false)});
  }
}
for (const e of entries) console.log(JSON.stringify(e));
JS

printf '\n--- npm version and available npm-approve-scripts ---\n'
npm --version
npm help npm-approve-scripts >/tmp/npm-help-approve.txt 2>&1 || true
sed -n '1,120p' /tmp/npm-help-approve.txt

Repository: evertonschuster/Agenza

Length of output: 251


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- package.json relevant allowScripts ---'
node - <<'JS'
const fs = require('fs');
const pkg = JSON.parse(fs.readFileSync('package.json','utf8'));
console.log(JSON.stringify(pkg.allowScripts, null, 2));
JS

printf '%s\n' ''
printf '%s\n' '--- package-lock.json msw entries ---'
node - <<'JS'
const fs = require('fs');
const lock = JSON.parse(fs.readFileSync('package-lock.json','utf8'));
const entries = [];
for (const [k,v] of Object.entries(lock.packages || {})) {
  if (k.includes('/msw') || k === 'node_modules/msw') {
    entries.push({path:k, version:(v.version||'-'), resolved:(v.resolved||'-'), dev:(v.dev||false)});
  }
}
for (const e of entries) console.log(JSON.stringify(e));
JS

printf '%s\n' ''
printf '%s\n' '--- npm version and npm-approve-scripts help ---'
npm --version
npm help npm-approve-scripts >/tmp/npm-help-approve.txt 2>&1 || true
sed -n '1,120p' /tmp/npm-help-approve.txt

Repository: evertonschuster/Agenza

Length of output: 631


🏁 Script executed:

#!/bin/bash
set -euo pipefail
printf '%s\n' '--- npm approve-scripts docs ---'
npm help approve-scripts >/tmp/npm-help-approve.txt 2>&1 || true
sed -n '1,160p' /tmp/npm-help-approve.txt

Repository: evertonschuster/Agenza

Length of output: 383


🌐 Web query:

npm-cli approve-scripts allowScripts package name version documented behavior

💡 Result:

The npm-cli commands npm approve-scripts and npm deny-scripts are utilities for managing the allowScripts field in a project's package.json file [1][2]. This field provides a mechanism to control which dependency install scripts (preinstall, install, postinstall, and prepare for non-registry sources) are permitted to run [1][3][4]. In newer versions of the npm CLI, these operations have been namespaced under npm install-scripts (e.g., npm install-scripts approve and npm install-scripts deny), with approve-scripts and deny-scripts remaining as supported aliases [3][5]. Key behavioral and documentation details include: Project Context Requirement: These commands operate only within projects that contain a package.json file [1][3]. They cannot be used globally (e.g., npm install -g), where the allow-scripts configuration or CLI flags must be used instead [1][4]. Asymmetric Pinning: By default, npm approve-scripts writes pinned entries (e.g., pkg@1.2.3) to the allowScripts field to restrict approval to the specific version reviewed [1][6][7]. Users can opt for "name-only" approval (allowing any version) by using the --no-allow-scripts-pin flag [1][3][6]. Conversely, npm deny-scripts always writes name-only entries ("pkg": false) to ensure a denied package is blocked regardless of its version [2]. Command Operations: --all: Approves or denies every package currently containing unreviewed install scripts in the project [1][2]. --allow-scripts-pending: A read-only flag for approve-scripts (or npm install-scripts ls) that lists packages with install scripts not yet covered by the allowScripts policy [1][5][2]. Identity Matching: The commands match against the dependency's resolved identity (the registry's resolved URL), not the package's self-reported name, preventing issues with aliased dependencies [8][4][9]. Explicit Denials: If a package is listed with false in allowScripts, it is explicitly blocked; existing allow entries for that package are removed if it is subsequently denied [2][7]. The approve-scripts command will not override existing false entries [7].

Citations:


Pin the msw install-script approval to the resolved version.

"msw": true approves install scripts by package name, so a lockfile update to another msw version would pass approval without changing this entry. Use the current resolved identity from package-lock.json: "msw@2.15.0": true.

🤖 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 `@package.json` around lines 27 - 28, Update the allowScripts entry for msw to
use the resolved package identity key "msw@2.15.0" instead of the unversioned
"msw" key, preserving the existing approval value.

Comment thread README.md
Comment on lines +48 to 52
| Node | 26.5.1 (`.nvmrc`, `engines.node`) | Same — `nvm use` picks it up automatically |
| npm | 12.0.2 (`packageManager`) | Same |
| .NET | 10.0.302 (`backend/global.json`, `rollForward: latestPatch`) | Same |
| Python | 3.12 (`requires-python`, CI) | 3.12 (`.python-version`, `uv.lock`) |
| Python | 3.14.6 (`requires-python`, CI) | 3.14.6 (`.python-version`, `uv.lock`) |
| Docker | 29.5 | Same (container runtime for Aspire Postgres) |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

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

rg -n 'requires-python|python-version:|^\| Python|^3\.14' \
  ai-services/assistant-service/pyproject.toml \
  ai-services/assistant-service/.python-version \
  .github/workflows \
  README.md \
  docs

Repository: evertonschuster/Agenza

Length of output: 721


Align the Python minimum with requires-python.

ai-services/assistant-service/pyproject.toml uses requires-python = ">=3.14,<3.15", so the supported package floor is Python 3.14, not Python 3.14.6. Keep the documented minimum at 3.14 and list 3.14.6 only as the CI/local .python-version and uv.lock pin, or raise requires-python to >=3.14.6,<3.15 if older 3.14 patches are not supported.

🤖 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 `@README.md` around lines 48 - 52, Align the README Python requirement with
ai-services/assistant-service/pyproject.toml’s requires-python range: document
3.14 as the minimum, while identifying 3.14.6 only as the CI/local
.python-version and uv.lock pin. Alternatively, raise requires-python to
>=3.14.6,<3.15 if that pin is the intended minimum.

Source: Coding guidelines

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