Free readiness scan for teams with a stuck major upgrade
Is your repo ready for a staged Next.js upgrade?
Request a free readiness scan for a staged Next.js upgrade. The report is a static mapping: fit check, staged upgrade outline, test map and touch list. No proof run on your repo.
- Free. We email it to you.
- A static mapping only. No proof run on your repo.
- Any example number says what was run, and what was not.
AI made the upgrade PR cheap. It did not make trusting it cheap.
Local run, CI not run. NOT a container. Targeted mutation proof.
The free readiness scan Not live yet
The form above is step 1. Here is what happens next. The free scan checks whether your repo is ready for a staged Next.js upgrade. It does not do the upgrade, and it does not promise any result.
V1 covers JS/TS repos on npm with a package-lock.json, upgrading Next.js 14 to 15 to 16. pnpm and yarn are not yet supported.
- Enter your repo or website URL. Public GitHub repos only. We do not contact anyone at your company.
- We read your public repo. A person reads its files at one pinned commit. Files only.
- You can add comments. For example which repo or which stuck upgrade to look at. This step is optional.
- We check that it fits V1. npm with a package-lock.json and Next.js 14 or 15. The free scan does not need tests. A proof run is a separate job and needs tests that already pass. If it does not fit, we tell you plainly.
- You get a short scope report by email. The fit check and the staged upgrade outline.
- Confirm your email for the longer readiness report. It adds the test map and touch list. Still a static mapping: no proof run on your repo, and no upgrade result promised.
No public repo? Pick your stack in the optional drop-down in the form. You get a sample report, clearly labeled EXAMPLE and not from your code. If you use pnpm, yarn or something other than Next.js, we tell you that V1 does not cover it yet.
What the readiness reports contain
Short report: items 1 and 2, by email. Longer report: items 1 to 3, after you confirm your email. Item 4 is an example only, not part of your report. All of it is a static mapping, limited to what the engine can produce today.
Fit check Short report
Is it an npm repo with a package-lock.json, on Next.js 14 or 15? Free scan: tests not required. Proof run: needs tests that already pass.
Source: V1 scope. File checks only.Staged upgrade outline Short report
What Scan, Fix, Prove and Merge would involve for your repo, step by step. An outline, not a promise we can do your upgrade.
Source: the engagement steps below. Fix recipes are scripted for one repo, not general.Test map and touch list Longer report
How many mapped functions have a linked test, and which sit in files that import Next.js. A static map from reading files, and a linked test is not a proof. If we find no tests in the files we read, the report says so. A proof run needs tests that already pass. Our test map does not count end-to-end or HTTP tests, and it may not recognise some test file names, so the number of functions with a linked test can be lower than your tests suggest. The report is made from reading files. We may miss things or be wrong. It is not a test run, not a promise about your upgrade and not a safety statement.
Source: OrangePro 0.2.58 with the node:test patch (experimental), a static map made by reading files, with the model option and test running switched off.Proof receipt preview Example only
The EXAMPLE below is modeled on one proof run on a showcase app: the before and after counts match that run. It is not about your repo. A proof N of M on your repo appears only after a proof run, a later step that does not exist yet.
Source: the EXAMPLE receipt below. Local run, CI not run.A sample proof receipt Example
This is an example, from one showcase run on a Next.js app. The before and after counts come from one proof run on the showcase app. A proof run on your repo does not exist yet: it is a later step and not part of the free scan or your readiness report.
OrangePro proof status: green_unproven. 5 of 11 candidate functions proven, 6 not proven. Targeted mutation proof.
| Function (11 candidate functions) | Before | After |
|---|---|---|
| app/api/morph-chat/route.ts · POST | Proven | Proven |
| app/api/chat/route.ts · POST | Proven | Proven |
| lib/models.ts · getClientApiKey | Proven | Proven |
| lib/models.ts · getModelParams | Proven | Proven |
| lib/templates.ts · getTemplateId | Proven | Proven |
| lib/api-errors.ts · createRateLimitResponse | Not proven (attempted) | Not proven (attempted) |
| lib/api-errors.ts · handleAPIError | Not proven (attempted) | Not proven (attempted) |
| app/api/sandbox/route.ts · POST | Not proven (not attempted, no linked test signal) | Not proven (not attempted, no linked test signal) |
| lib/auth.ts · getUserTeam | Not proven (not attempted, no linked test signal) | Not proven (not attempted, no linked test signal) |
| app/actions/validate-email.ts · validateEmail | Not proven (not attempted, no linked test signal) | Not proven (not attempted, no linked test signal) |
| app/layout.tsx · RootLayout | Not proven (not attempted, no linked test signal) | Not proven (not attempted, no linked test signal) |
Proven 5 of 11: 2 had tests that did not catch the change, 4 had no proof attempt.
Not proven (attempted): OrangePro broke the function and tried to prove it, but the outcome was "mutant failed, but not with a trusted assertion failure", so it is not counted as proven. Not proven (not attempted, no linked test signal): no linked test signal, so nothing was attempted. Both are listed, not hidden. In this run, 4 of the 5 proven functions were proven through the node:test runner (experimental, bundled) and 1 through Vitest (recorded in the run's traceability files). Local run, CI not run.
Source: documented command on a clean clone of build b56bc15, exit 0, Oct 25, 2026, 5:57 PM PT (local run, CI not run). OrangePro 0.2.58 with the node:test patch (experimental), 9 attempts per side, 11 candidate functions.
How it was run: local run, CI not run, NOT a container. The fix step used scripted fix recipes for this repo, not general. Two lint rules were downgraded to warnings in this showcase (8 to 14 warnings, hides 6 findings).
The upgrade command ran in 373 s on one sample, over the 360 s limit. Earlier runs of the same command on earlier builds took 355 to 390 s. Local run, CI not run.
Regression check: in one seeded run in our own harness on build b56bc15 (run 20261025-180635-a30c14, Oct 25, 2026, 6:06 to 6:12 PM PT), a lock-in test for getTemplateId was deleted in a temporary copy, so proof status moved from 5 of 11 to 4 of 11, naming getTemplateId. The run flagged it and exited with an error; nothing was reverted. This is our own seeded test, not a result on anyone's repo. Local run, CI not run, NOT a container.
How an engagement works
The free scan is the first step. If you want us to finish the upgrade, it goes like this. We will talk about terms after the free scan.
Scan
The free scan: a static mapping. We find the code that touches the package and which tests are linked to it. A proof run on your repo is a later step.
Fix
Our supervised agent does the upgrade step by step. Each upgrade stage is checked by install, lint, type, test, build and smoke checks. In our tests, a failing test stage stops the run with an error. Lint warnings do not stop it, and the report lists the two rules we downgraded to warnings. In the showcase, fixes came from scripted recipes for this repo, not general.
Prove
Proven means a test fails when we break the function once. We run the proof before and after the upgrade on the same candidate functions, and the report shows any that were proven before and are not proven after. The proof covers candidate functions only. A passing proof does not show the behavior is the one you want.
Merge
A person on our side reviews first, then you review and merge. You get the upgraded branch and the report. The final proof runs on the merged base build: after merge, before release.
Why not just a bot PR? Green CI says your tests pass. It does not say they would catch a break.
Who it is for
Teams with a stuck major upgrade and tests they only half trust. V1 covers JS/TS repos upgrading Next.js 14 to 15 to 16, on npm with package-lock.json. pnpm and yarn are not yet supported. Targeted mutation proof is built for Jest, Vitest and Mocha for JavaScript and TypeScript.
Honest limits
- Local run, CI not run. NOT a container.
- Targeted mutation proof: one break per function, covering the 11 candidate functions only, not the whole app.
- Targeted mutation proof is built for Jest, Vitest and Mocha for JavaScript and TypeScript. node:test is experimental and bundled with ProvenUpgrade; in this run 4 of the 5 proven functions were proven through it (local run, CI not run). End-to-end and HTTP-only tests are not counted.
- The 11 candidate functions are a fixed set. 6 of the 11 are not proven, before and after.
- The fix step in the showcase used scripted fix recipes for this repo, not general.
- In the showcase, two lint rules (react-hooks/immutability and react-hooks/set-state-in-effect) were downgraded to warnings: warnings 8 to 14, which hides 6 findings (2 and 4). The report discloses it.
- In the showcase, OrangePro was run on the showcase app's base build and its upgraded builds, not on a merge to your repo. In the planned upgrade job (not live yet) it is meant to run on the merged base build, after merge.
- We wrote the 33 lock-in tests ourselves, so they are not an independent check.
- Proof does not mean behavior is identical.
- In the planned upgrade job (not live yet), the final proof is meant to run on the merged base build: after merge, before release. It is not a pull-request check and not a release check.
- V1 scope: JS/TS, Next.js 14 to 15 to 16. npm repos with package-lock.json only. pnpm and yarn are not yet supported. Runners: Jest, Vitest and Mocha.
- We ran one showcase repo. One repo is not a track record.
Attribution
ProvenUpgrade builds on other people's work.
- ProvenUpgrade includes third-party components. Each is used under its own licence or with its author's OK. The full notices are available on request at hello@provenupgrade.com. See the notice page.
- OrangePro MCP 0.2.58 (with a node:test patch), MIT License. Proof powered by OrangePro.
Got a major upgrade stuck in a PR?
Request the free scan. Or write to us: hello@provenupgrade.com