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.

Get your free readiness scan

Not live yet: this form only collects your request, and we reply by email. Static mapping, no proof run on your repo.

Public GitHub repos only. Private repos are not supported. We make each report by hand from the repo's public files only.

We use your email only to send this report and follow up about it. We keep your email and repo URL for up to 37 days from the date you submit, then a person deletes them from our mailbox and files. To delete sooner, email hello@provenupgrade.com.

Prefer plain email? Send the same request by email (works without JavaScript).

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.

What you get today: nothing is scanned yet. The form only collects your request, and a person replies by email. What the free scan will give you once it is live: a static mapping only. That is a fit check, a staged upgrade outline, and a test map and touch list. No proof run on your repo. A proof N of M for your repo would come only after a proof run. That run does not exist yet, and it is a later step, not part of the free scan.
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.
Flow, in six steps. Dashed boxes are the branch for visitors with no public repo. Not live yet: no automated scan exists. When it opens, a person makes each report by hand, reading public files only. Today step 1 is a request by email. No step runs a proof on your repo.
Free readiness scan flowSix steps from left to right: enter a repo or website URL; we read your public repo, files only; you can add comments; we check that it fits V1; a short scope report is emailed; you confirm your email for the longer readiness report. All of it is a static mapping with no proof run on your repo. Below, a branch for visitors with no public repo: pick your stack from a drop-down, then see a labeled sample report that is not from your code, then continue to the emailed report. The live scan is not live yet.1Enter your repoor website URL2We read yourpublic repo(files only)3You can addcomments(optional)4We check itfits V15Short scopereport by email6Confirm your emailfor the longerreadiness reportno public repoNo public repofound?You pick yourstack from adrop-downLabeled samplereport: EXAMPLE,not your codeFree readiness scan flowSix steps from top to bottom: enter a repo or website URL; we read your public repo, files only; you can add comments; we check that it fits V1; a short scope report is emailed; you confirm your email for the longer readiness report. All of it is a static mapping with no proof run on your repo. A branch for visitors with no public repo follows: pick your stack from a drop-down, then see a labeled sample report that is not from your code, then continue to the emailed report. The live scan is not live yet.Enter your repoor website URL1We read yourpublic repo(files only)2You can addcomments(optional)3We check itfits V14Short scopereport by email5Confirm your emailfor the longerreadiness report6If you have no public repoNo public repofound?You pick yourstack from adrop-downLabeled samplereport: EXAMPLE,not your codethen continues at step 5
  1. Enter your repo or website URL. Public GitHub repos only. We do not contact anyone at your company.
  2. We read your public repo. A person reads its files at one pinned commit. Files only.
  3. You can add comments. For example which repo or which stuck upgrade to look at. This step is optional.
  4. 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.
  5. You get a short scope report by email. The fit check and the staged upgrade outline.
  6. 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.

1

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.
2

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.
3

Test map and touch list

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.
4

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.
Not in the free scan: a proof run on your repo, the upgrade itself, the after-upgrade proof, new tests, or a price. Those are later steps. We will talk about terms after the free scan. The scan does not tell you your upgrade will work.

Start with the free scan form

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.

ExampleExample: Next.js 14 to 15 to 16, staged

OrangePro proof status: green_unproven. 5 of 11 candidate functions proven, 6 not proven. Targeted mutation proof.

5 of 11Proven before the upgrade
5 of 11Proven after the upgrade
0Proofs lost (proven before, not after)
Function (11 candidate functions)BeforeAfter
app/api/morph-chat/route.ts · POSTProvenProven
app/api/chat/route.ts · POSTProvenProven
lib/models.ts · getClientApiKeyProvenProven
lib/models.ts · getModelParamsProvenProven
lib/templates.ts · getTemplateIdProvenProven
lib/api-errors.ts · createRateLimitResponseNot proven (attempted)Not proven (attempted)
lib/api-errors.ts · handleAPIErrorNot proven (attempted)Not proven (attempted)
app/api/sandbox/route.ts · POSTNot proven (not attempted, no linked test signal)Not proven (not attempted, no linked test signal)
lib/auth.ts · getUserTeamNot proven (not attempted, no linked test signal)Not proven (not attempted, no linked test signal)
app/actions/validate-email.ts · validateEmailNot proven (not attempted, no linked test signal)Not proven (not attempted, no linked test signal)
app/layout.tsx · RootLayoutNot 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.

Request the free scan

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.

1

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.

2

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.

3

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.

4

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

Request the free scan