Upgrade Prisma Next (user app)
This skill upgrades a project that
consumes Prisma Next via the public package API (
,
, the contract files in
, etc.). If the project is itself a Prisma Next
extension, use the
prisma-next-extension-upgrade
skill instead — or both, if the repo contains both an app and an extension package.
Step 0 — Ensure the skill is up to date
Before anything else, ensure this skill is installed at
and reload it. Bug fixes to
old per-transition upgrade instructions ship in the latest skill release as part of its cumulative set; running against a stale skill can apply a known-broken translation.
If the agent runtime supports an in-session refresh, perform it now. Otherwise, exit and ask the user to re-install (
pnpm dlx skills add prisma/prisma-next/skills/upgrade --all
), then re-invoke. The upgrade-skill subpath is intentionally unpinned (always
) — the cumulative instruction set is the source of truth, and the latest release fixes apply to every prior transition.
Pre-flight — extension compatibility
Before changing any code, refuse to upgrade past any installed extension's pinned Prisma Next version. Extensions in Prisma Next pin every
dependency to a single exact version (no carets, no ranges); that pin is the highest version the extension has been validated against. Upgrading the user app past that pin would silently desynchronise the extension's type identity from the app's.
Steps:
- Read (or its TS-discoverable equivalent at the project root) and enumerate the list of extension packages it imports. Each entry corresponds to an installed npm package.
- For each extension, read its installed from
node_modules/<extension-package-name>/package.json
and find any entry under , , or . By construction those entries are exact-version pins (e.g. ), set when the extension author last ran their own upgrade.
- Compute the lowest pinned version across all extensions. That is the highest Prisma Next version reachable by this app on its current extension set.
- Compare to the user's target. If the target exceeds the lowest pin, halt with a structured message naming each lagging extension and its pinned version, and offer two paths:
- (a) Wait for the lagging extension to publish a compatible release, then re-run.
- (b) Re-run with (or whatever flag/option the user is using to set the target).
Do not auto-downgrade the target; do not skip the lagging extension; do not bump past it. If the user explicitly overrides the halt, surface the risk clearly first.
If
is absent or names no extensions, skip the pre-flight.
Role detection
This skill applies when the project consumes Prisma Next:
- declares one or more packages under / , and
- the package is not itself an extension (no (or other SPI) under /; name does not match ; not referenced from a sibling app's ).
If the project also matches the extension-author role, install the
prisma-next-extension-upgrade
skill (
pnpm dlx skills add prisma/prisma-next/skills/extension-author --all
) and run
this flow first, then that one in the same session. If detection is ambiguous, ask the user.
Version detection
- From-version. Read the currently-installed Prisma Next version from (or / ) by inspecting the resolved version of any package. If the lockfile shows multiple packages at different minors (already broken), the lowest minor is the from-version.
- To-version. Either the version the user specified, or the latest stable from
npm view @prisma-next/postgres dist-tags.latest
.
Report both back to the user before continuing.
Transition chain
If the from-to delta spans multiple minor versions (e.g.
), build the chain of one-minor steps:
Apply each step in order, fully: bump, install, run instructions, validate, commit — before moving to the next. Halt the chain on the first failed step; do not skip ahead.
The chain order does not depend on which extensions are installed; the pre-flight has already established the target is reachable.
Per-step flow
For each
step in the chain:
-
Bump deps. Rewrite every
entry in the project's
to the exact
version (no caret, no tilde). All entries advance to the same version. Cover
and
. The upgrade skill itself is delivered through
and lives under
.agents/skills/prisma-next-upgrade/
(or the equivalent CLI-managed directory) — there is no
@prisma-next/upgrade-skill
npm entry to bump.
-
Install. Run
(or the project's lockfile-managing command). The project's code is now broken against the new types — the upgrade instructions for
exist to fix it.
-
Read the upgrade instructions. Load
upgrades/<from>-to-<to>/instructions.md
from this skill package. Parse the YAML frontmatter and pay particular attention to its
array.
-
Apply each change. For each entry in
:
- If the entry has a block (glob + content predicate), run it; skip the change if no files match. No → apply unconditionally.
- If the entry names a (relative path next to ), invoke it from the project root: via , via , codemods per the script's own prose. No → follow the prose body directly.
Empty
(placeholder shape for transitions with no user-side breaking changes) is a no-op — proceed to validation.
-
Validate. Run
pnpm typecheck && pnpm test
(or the project's equivalent — the
field of the project's
is the discovery surface). If anything is red, halt the chain. Do
not auto-roll-back; surface the failure to the user with the failing change's
(from the frontmatter), the file paths the change operated on, and the inferred remediation.
-
Commit. One commit per step containing the
bump, lockfile churn, and any source rewrites:
text
chore: upgrade @prisma-next/* to <to-version>
(Or the project's own commit-message convention.) Never squash steps. The user may squash on merge; the in-flight history must be per-step so a failed step is bisectable.
Then move on to the next step.
When the chain is done
Report back to the user: the number of steps applied, the SHAs of the commits you made, and any open follow-ups (e.g. tests that were already red before the upgrade and still are).
Failure surfaces
When a step fails: surface a structured error with code
, the failing change's
, the file paths touched (or the lockfile, or the validation command), and the inferred remediation. Do not retry automatically; do not auto-roll-back. The user can revert if they want a clean slate.
If a pre-flight halt fires, do not bump anything; the project is left unchanged.