plugins/lt-dev/skills/nest-server-updating/SKILL.md
Provides migration guides, release notes, and error solutions for updating @lenne.tech/nest-server to a newer version. Covers version-specific breaking changes, stepwise upgrade strategies, and starter project comparisons. Activates for nest-server version updates, upgrades, migrations, breaking changes between versions, "pnpm run update", TypeScript errors after upgrading, or stepwise migration planning. Delegates execution to the lt-dev:nest-server-updater agent. NOT for writing NestJS code or building features (use generating-nest-servers). NOT for general npm package updates (use maintaining-npm-packages).
npx skillsauth add lennetech/claude-code nest-server-updatingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides knowledge and resources for updating @lenne.tech/nest-server. For automated execution, use the lt-dev:nest-server-updater agent via /lt-dev:backend:update-nest-server.
Important: After updating nest-server, also check if @lenne.tech/nuxt-extensions in projects/app/ needs a compatible update, as nuxt-extensions is aligned with nest-server.
nest-server-starter timeline the test runner migrated from jest+ts-jest to vitest+unplugin-swc (check the starter's package.json for the current truth — if vitest-e2e.config.ts exists, the boundary is behind you). Updating an existing project across that boundary needs more than a pnpm install: every @Prop whose property is a TypeScript union ('a' | 'b', null | string, an alias for either) must add type: String (or type: Object for record-likes), every import * as supertest must become a default import, every jest.* call must become vi.*, and jest-e2e.json + babel.config.js must be removed. Without these, vitest fails with "Cannot determine a type for the X field" from Mongoose, or "is not a function" from supertest. The full recipe lives in the modernizing-toolchain skill — apply Phases 2 and 3 before running pnpm test.useDefineForClassFields mismatch — When migrating to vitest, both the tsconfig.json compilerOptions.useDefineForClassFields AND the swc plugin in vitest-e2e.config.ts MUST be set to true. Mixing them (e.g. swc=false, ts=true) silently breaks NestJS DI: securityCheck gets the wrong currentUser, so user signUp returns createdBy: null even though the override service set it. There is no error, only test failures that look like business logic regressions.@lenne.tech/nest-server follows a "stepwise update" policy even on minor versions. Jumping from 7.5.x directly to 7.9.x in one step is likely to miss breaking changes that were introduced sub-minor. Always run the update step-by-step via pnpm run update, even if the version gap looks small.pnpm run update requires the target version in package.json FIRST — The update script reads the current/target from package.json. Running it before bumping the version does nothing or produces confusing errors. Order: (1) bump package.json → (2) pnpm install → (3) pnpm run update.nuxt-extensions alignment breaks silently — @lenne.tech/nuxt-extensions is version-aligned with @lenne.tech/nest-server. Updating nest-server to 7.19.0 without also updating nuxt-extensions to 7.19.x leaves the frontend consuming an outdated API contract. Types generated via generate-types may still pass locally but break at runtime on production.7.12 to 7.19, migration guides for 7.13, 7.14, 7.15, 7.16, 7.17, 7.18, 7.19 ALL apply. Don't skip reading them — each introduces non-trivial behavior changes.nest-server-starter's current package.json via GitHub raw. It reflects the canonical working constellation for the target version.This skill covers the npm-mode update flow (bumping @lenne.tech/nest-server in package.json, applying migration guides from the upstream repo, re-running tests). Its companion for vendored projects (those where <api-root>/src/core/VENDOR.md exists) is the nest-server-core-vendoring skill + the nest-server-core-updater agent via /lt-dev:backend:update-nest-server-core.
The two flows share one migration-guide corpus (the upstream migration-guides/ directory applies to code regardless of consumption mode — it describes API deltas in the framework, not in the distribution channel). Everything in this skill about per-version breaking changes, error patterns, and error messages is equally valid in vendored mode. What differs is:
| Aspect | npm mode | vendored mode |
|--------|----------|---------------|
| Detection | no src/core/VENDOR.md | src/core/VENDOR.md exists |
| Bump command | pnpm update @lenne.tech/nest-server | /lt-dev:backend:update-nest-server-core --target <v> |
| Framework source location | node_modules/@lenne.tech/nest-server/src/core/... | <api-root>/src/core/... |
| Baseline version lookup | pnpm list @lenne.tech/nest-server --depth=0 | grep Baseline-Version <api-root>/src/core/VENDOR.md |
| Source of truth for framework code | npm package dist/ + shipped src/ | local src/core/ (committed, may carry patches) |
| Local patches | not persisted (lost on pnpm install) | expected; logged in VENDOR.md |
| Import statements in consumer code | from '@lenne.tech/nest-server' | relative: from '../../src/core' etc. |
The nest-server-updater agent auto-detects the project mode (Phase 0 in its workflow) and delegates to nest-server-core-updater when VENDOR.md is present, so users only ever need to invoke /lt-dev:backend:update-nest-server — the right flow kicks in automatically.
| User Intent | Correct Skill | |------------|---------------| | "Update nest-server to v14" | THIS SKILL | | "Migrate to latest nest-server" | THIS SKILL | | "Breaking changes in nest-server" | THIS SKILL | | "Create a NestJS module" | generating-nest-servers | | "Update all npm packages" | maintaining-npm-packages | | "npm audit fix" | maintaining-npm-packages |
| Element | Purpose |
|---------|---------|
| Agent: lt-dev:nest-server-updater | Automated execution of updates |
| Command: /lt-dev:backend:update-nest-server | User invocation |
| Skill: generating-nest-servers | Code modifications after update |
| Skill: maintaining-npm-packages | Package optimization |
| Resource | URL | Purpose | |----------|-----|---------| | nest-server | https://github.com/lenneTech/nest-server | Main package repository | | Releases | https://github.com/lenneTech/nest-server/releases | Release notes, changelogs | | Migration Guides | https://github.com/lenneTech/nest-server/tree/main/migration-guides | Version-specific migration instructions | | Reference Project | https://github.com/lenneTech/nest-server-starter | Current compatible code & package versions |
# Package info
pnpm view @lenne.tech/nest-server
# Current installed version
pnpm list @lenne.tech/nest-server --depth=0
# All available versions
pnpm view @lenne.tech/nest-server versions --json
Complete guide selection logic, fallback strategy, and fetch commands: reference/migration-guides.md
IMPORTANT: In @lenne.tech/nest-server, Major versions are reserved for NestJS Major versions. Therefore, Minor versions are treated like Major versions and may contain breaking changes.
11.6.0 → 11.6.5 - direct update OK11.6.0 → 11.8.0 becomes 11.6 → 11.7 → 11.811.6.0 → 12.2.0 becomes:
11.6 → 11.7 → ... → 11.latest (all minors)11.latest → 12.0 (major jump)12.0 → 12.1 → 12.2 (all minors)TypeScript errors, runtime errors, and test failures after update: reference/error-patterns.md
How to use nest-server-starter as source of truth: reference/reference-project.md
Impact of Rest/GraphQL/Both modes on updates: reference/api-modes.md
The lt-dev:nest-server-updater agent supports these modes:
| Mode | Flag | Behavior |
|------|------|----------|
| Full | (default) | Complete update with all migrations |
| Dry-Run | --dry-run | Analysis only, no changes |
| Target Version | --target-version X.Y.Z | Update to specific version |
| Skip Packages | --skip-packages | Skip npm-package-maintainer optimization |
# Check current version
pnpm list @lenne.tech/nest-server --depth=0
# Check latest version
pnpm view @lenne.tech/nest-server version
# List migration guides
gh api repos/lenneTech/nest-server/contents/migration-guides --jq '.[].name'
IMPORTANT: The pnpm run update script requires a specific workflow:
First: Update the version in package.json to the desired target version
"@lenne.tech/nest-server": "^X.Y.Z"
Then: Run the update script
pnpm run update
What pnpm run update does:
@lenne.tech/nest-server at the version from package.json@lenne.tech/nest-server were updatedManual update (only if pnpm run update script is not available):
pnpm add -E @lenne.tech/[email protected]
pnpm install
Note: This skips the automatic dependency synchronization that pnpm run update provides.
After pnpm run update completes, run comprehensive package maintenance:
# Via command (recommended)
/lt-dev:maintenance:maintain
# Or via agent (Agent tool with lt-dev:npm-package-maintainer in FULL MODE)
This ensures:
pnpm run build # Must pass
pnpm run lint # Must pass
pnpm test # Must pass (no skips)
pnpm audit # Should show no new vulnerabilities
| Scenario | Recommendation |
|----------|----------------|
| Routine update to latest | Use agent: /lt-dev:backend:update-nest-server |
| Check what would change | Use agent with --dry-run |
| Update to specific version | Use agent with --target-version X.Y.Z |
| Complex issues during update | Use this skill's knowledge + manual fixes |
| Understanding breaking changes | Read this skill + migration guides |
development
Single source of truth for the lenne.tech fullstack production-readiness checklist. Defines the eight pillars (configuration & secrets, observability & logging, health & lifecycle, security hardening, data durability, resilience under load, deployment hygiene, runbook & rollback) with concrete file/line evidence requirements per pillar, severity classification (Critical / Major / Minor), and a canonical machine-parseable report block. Activates whenever an agent or command needs to gate a release on production-readiness — currently used by /lt-dev:production-ready, lt-dev:production-readiness-orchestrator, and the devops-reviewer (read-only). NOT for OWASP-style code-level security review (use security-reviewer). NOT for npm dependency audits (use maintaining-npm-packages).
development
Single source of truth for executing GitLab CI/CD pipelines locally with the same image, env vars, and service containers as the real runner — so pipeline failures are caught before push. Defines pipeline discovery (.gitlab-ci.yml + includes), per-job execution via gitlab-runner exec, service-container orchestration (Mongo, Redis, MailHog), env injection without secrets, cache/artifact handling, and a job-by-job verdict report. Also describes the GitHub Actions equivalent via act for projects that mirror to GitHub. Activates whenever an agent or command needs to validate that the CI pipeline will pass — currently used by /lt-dev:production-ready and lt-dev:production-readiness-orchestrator. NOT for running the local check script (use running-check-script). NOT for writing or refactoring CI configs (use the devops agent).
development
Single source of truth for designing, running, and interpreting k6 load tests against lenne.tech fullstack APIs. Defines installation paths (brew, docker, npm), the three canonical scenarios (smoke / load / soak), endpoint discovery from the generated SDK, realistic Better-Auth login flows, threshold defaults for ~10 concurrent users (p95 < 500ms, error rate < 1%, http_req_failed < 1%), result interpretation, and the optimisation ladder when the system fails (DB indices, query rewrites, caching, connection pool sizing, rate-limit relaxation, payload trimming). Activates whenever an agent or command needs to validate that the API is stable for ~10 concurrent users performing many actions in short time, or to detect performance regressions via k6. Currently used by /lt-dev:production-ready, lt-dev:production-readiness-orchestrator, and lt-dev:performance-reviewer. NOT for Lighthouse frontend performance (use a11y-reviewer). NOT for unit performance assertions (use the test runner directly).
tools
Migrates lenne.tech projects from the legacy jest+eslint+prettier toolchain to the current vitest+oxlint+oxfmt baseline used by nest-server-starter and nuxt-base-starter. Covers swc decoratorMetadata config, the @Prop union-type fix for SWC, supertest default-import correction, ESM/CJS interop, the Nitro PORT-vs-NITRO_PORT bug, ANSI escape stripping in workspace runners (lerna/nx), free-port logic for check-server-start.sh, the offers-pattern config.env.ts (NSC__-only + fail-fast + auto-derived appUrl), and the multi-phase check-envs.sh smoke test. Activates whenever someone is migrating an existing project to the new toolchain, debugging "Cannot determine a type for the X field" Mongoose errors, ERR_SOCKET_BAD_PORT crashes from check-server-start, or wants to align an existing project with the current starter conventions.