Session 3fd51510 · generated 2026-09-26 10:19:04 UTC
react ^17.0.2 → 18.3.1
Analysed
- Analyse — done
- Rules — current step
- Risk — not started
- Plan — not started
- Approve — not started
- Implement — not started
- Verify — not started
- Pull request — not started
Next action
Load the migration rules (load_migration_requirements), optionally with the migration guide text.
01Risk & priority
Which files matter most, scored from concrete API evidence.
Risk has not been scored yet. calculate_migration_blast_radius scores every file from concrete API evidence (see the severity guide).
02Breaking changes
The rules that apply to this repository — and why.
Rules have not been loaded yet. load_migration_requirements uses the built-in knowledge base, optionally validated by the migration guide you attach.
03Compatibility
Declared packages whose peer ranges could block the install.
Checked 602 packages via package-lock.json (lockfileVersion 3).
| Package | Requires | Source | Resolution |
|---|---|---|---|
@testing-library/react@12.1.5 | react <18.0.0 | lockfile | auto upgraded to ^14.3.1 in the dependency step |
04Migration plan
What will change, in order, and what has happened so far.
No plan yet. generate_migration_plan orders the work (dependencies first, then high-severity changes) and waits for your approval.
05Affected files
Every file that uses the package family, with line-level evidence.
11 files
src/App.jsx 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React, { useReducer } from 'react'; | — |
| 1 | useReducer · react | import React, { useReducer } from 'react'; | — |
| 23 | useReducer · react | const [items, dispatch] = useReducer(itemsReducer, []); | — |
src/App.test.jsx test 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React from 'react'; | — |
src/components/AddItemForm.jsx 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React, { useState } from 'react'; | — |
| 1 | useState · react | import React, { useState } from 'react'; | — |
| 4 | useState · react | const [name, setName] = useState(''); | — |
src/components/ItemList.jsx 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React from 'react'; | — |
| 3 | Component · react | export default class ItemList extends React.Component { | — |
src/components/SyncStatus.jsx 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React, { useState } from 'react'; | — |
| 1 | useState · react | import React, { useState } from 'react'; | — |
| 7 | useState · react | const [status, setStatus] = useState('idle'); | — |
| 8 | useState · react | const [syncedAt, setSyncedAt] = useState(null); | — |
src/components/SyncStatus.test.jsx test 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React from 'react'; | — |
src/index.jsx 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React from 'react'; | — |
| 2 | import react-dom | import ReactDOM from 'react-dom'; | — |
| 5 | render · react-dom | ReactDOM.render( | — |
| 6 | StrictMode · react | <React.StrictMode> | — |
src/legacy/store.js 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react-dom | import ReactDOM from 'react-dom'; | — |
| 13 | unstable_batchedUpdates · react-dom | ReactDOM.unstable_batchedUpdates(() => { | — |
src/legacy/toast.jsx 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React from 'react'; | — |
| 2 | import react-dom | import ReactDOM from 'react-dom'; | — |
| 17 | render · react-dom | ReactDOM.render(<Toast message={message} />, host); | — |
| 19 | unmountComponentAtNode · react-dom | ReactDOM.unmountComponentAtNode(host); | — |
src/legacy/toast.test.jsx test 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React from 'react'; | — |
| 2 | import react-dom | import ReactDOM from 'react-dom'; | — |
| 3 | import react-dom/test-utils | import { act } from 'react-dom/test-utils'; | — |
| 3 | act · react-dom/test-utils | import { act } from 'react-dom/test-utils'; | — |
| 13 | act · react-dom/test-utils | act(() => { | — |
| 18 | act · react-dom/test-utils | act(() => { | — |
| 27 | act · react-dom/test-utils | act(() => { | — |
| 28 | render · react-dom | ReactDOM.render(<p>host</p>, container); | — |
src/ssr-entry.jsx 0
| Line | Usage | Source | Rules |
|---|---|---|---|
| 1 | import react | import React from 'react'; | — |
| 2 | import react-dom | import ReactDOM from 'react-dom'; | — |
| 6 | hydrate · react-dom | ReactDOM.hydrate(<App />, document.getElementById('root')); | — |
06Changes
Each step's commit on the migration branch.
Nothing has been changed — the plan is not approved, and the backend refuses to modify the repository until it is.
07Verification
Does the upgraded code pass the repository's own checks?
Verification has not run yet. It runs after the plan is approved and applied: verify_migration checks the installed versions, then runs the repository's own lint, test and build scripts.
08Remaining work
What still needs a human before (or after) merging.
The plan has not been generated yet.
09Metrics
Measured values, labelled estimates, and what is not measured.
measured
| Files using react | 11 |
|---|---|
| Files with breaking-change evidence | not calculated |
| Files changed on branch | branch not created |
| Steps applied automatically | 0 / 0 |
| Steps completed manually | 0 |
| Steps still open (manual / skipped / failed) | 0 |
| Elapsed session time (wall-clock) | 0 min |
estimate
- Manual effort
- ~0 h0 affected files × 30 min/file (heuristic, not benchmarked)
- Time saved
- ~0 hestimated manual effort − measured elapsed time
not measured
- Bobcoin consumption — not measured (not exposed to the MCP server)
- Accuracy — not measured (no ground-truth benchmark)
10Repository
How the repository was analysed.
| Repository | codebase-doctor-sandbox/pantry-list |
|---|---|
| Default branch | main |
| Migration branch | codebase-doctor/react-18.3.1-upgrade |
| Language | javascript |
| Package manager | npm |
| Test framework | jest |
| Lint / test / build | npm run lint · npm run test · npm run build |
| Source files scanned | 13 |
| Rule set | not loaded |
| Session | 3fd51510-5cd8-41f8-8271-285c542bb72f |