From c1e4006d8aad1d1f1fc31ddb7998ae03cc51f17e Mon Sep 17 00:00:00 2001 From: "uptide-release[bot]" <338861287+uptide-release[bot]@users.noreply.github.com> Date: Sun, 18 Oct 2026 16:43:05 +0000 Subject: [PATCH] chore(release): version packages --- .changeset/agent-led-unsafe-pins.md | 5 --- .changeset/agent-phase-wall-time.md | 9 ----- .changeset/baseline-test-artifacts.md | 5 --- .changeset/check-possible-impact-count.md | 5 --- .changeset/companion-pack-context.md | 5 --- .changeset/docs-packs-breaking-found.md | 5 --- .changeset/eresolve-staged-retry.md | 5 --- .../feedback-gate-format-request-options.md | 5 --- .changeset/final-head-build.md | 5 --- .changeset/fold-downstream-errors.md | 5 --- .changeset/low-precision-assisted.md | 5 --- .changeset/pack-test-generators.md | 5 --- .changeset/pr-body-never-too-large.md | 7 ---- .changeset/zod-uuid-ts7-libs.md | 5 --- packages/cli/CHANGELOG.md | 38 +++++++++++++++++++ packages/cli/package.json | 2 +- 16 files changed, 39 insertions(+), 77 deletions(-) delete mode 100644 .changeset/agent-led-unsafe-pins.md delete mode 100644 .changeset/agent-phase-wall-time.md delete mode 100644 .changeset/baseline-test-artifacts.md delete mode 100644 .changeset/check-possible-impact-count.md delete mode 100644 .changeset/companion-pack-context.md delete mode 100644 .changeset/docs-packs-breaking-found.md delete mode 100644 .changeset/eresolve-staged-retry.md delete mode 100644 .changeset/feedback-gate-format-request-options.md delete mode 100644 .changeset/final-head-build.md delete mode 100644 .changeset/fold-downstream-errors.md delete mode 100644 .changeset/low-precision-assisted.md delete mode 100644 .changeset/pack-test-generators.md delete mode 100644 .changeset/pr-body-never-too-large.md delete mode 100644 .changeset/zod-uuid-ts7-libs.md diff --git a/.changeset/agent-led-unsafe-pins.md b/.changeset/agent-led-unsafe-pins.md deleted file mode 100644 index e26be94e..00000000 --- a/.changeset/agent-led-unsafe-pins.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -With an assisting agent, a root pin Uptide cannot update safely (a nested override such as `overrides > pkg > peerDependencies > react`) no longer stops `fix` with exit 2: the run continues as an agent-led draft that leaves the pin as written and names it, with its exact path and value, at the top of the PR body. The agent-led peer reason now names each blocker's first release that accepts the target, or says none does. An agent-led draft must pass the repository's clean install (`npm ci` or the manager's frozen install) before delivery; if it does not, the PR says so at the top. Without an agent, with `--no-llm`, or on a safety refusal, `fix` still exits 2. diff --git a/.changeset/agent-phase-wall-time.md b/.changeset/agent-phase-wall-time.md deleted file mode 100644 index d46dcd5a..00000000 --- a/.changeset/agent-phase-wall-time.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"uptide": patch ---- - -`uptide fix` spends less wall time on test runs and dependency copies: - -- The agent's own `run_tests` check runs only its runner's related tests when the `test` script builds first and then runs a script that is just the runner (`pnpm run build && pnpm run test:unit`). The gate after the agent's edits and the final verification run exactly what they ran before. -- The upgrade's install moves the installed `node_modules` out of its temporary worktree instead of copying it. -- Each phase of the fix report lists the repository's commands it ran (installs, generators, builds, type-checks, tests, lint, format) with their count and summed wall time. An agent-led run's clean install has its own phase. diff --git a/.changeset/baseline-test-artifacts.md b/.changeset/baseline-test-artifacts.md deleted file mode 100644 index 47c77755..00000000 --- a/.changeset/baseline-test-artifacts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`fix` no longer stops with "baseline tests modified the working tree" when the test run only writes new untracked files, such as a junit `test-report.xml` that is not gitignored. Those files are recorded as test artifacts (`testArtifacts` in the report), kept out of every commit, the agent's diff and the pending-changes check, and removed before each later test run, `uptide verify` included. A change to a tracked file during baseline tests still refuses the run. diff --git a/.changeset/check-possible-impact-count.md b/.changeset/check-possible-impact-count.md deleted file mode 100644 index b93f5bc2..00000000 --- a/.changeset/check-possible-impact-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`check` no longer lists possible impact (type changes nothing confirmed as breaking) on its first screen: each package says it in one line, `+N possible impact in M files, not counted as breaking`, and `--details` and `--json` still have every site. A package whose types were partly verified no longer repeats its coverage line in the heading, and a monorepo's unbuilt workspace chains are one count on that line. diff --git a/.changeset/companion-pack-context.md b/.changeset/companion-pack-context.md deleted file mode 100644 index 33a50631..00000000 --- a/.changeset/companion-pack-context.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -A companion pack that moves with the lead's fix (react beside next) now gets its own scan context and inventory, and the PR body carries a section with its review notes. diff --git a/.changeset/docs-packs-breaking-found.md b/.changeset/docs-packs-breaking-found.md deleted file mode 100644 index fa203583..00000000 --- a/.changeset/docs-packs-breaking-found.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`pack test --write` records how many breaking sites a finding landed on at any severity and as breaking, out of all breaking sites it scored, and the pack tables show both ("Found, any severity", "Found as breaking") in place of the single recall column. Packs recorded before it show `—`. diff --git a/.changeset/eresolve-staged-retry.md b/.changeset/eresolve-staged-retry.md deleted file mode 100644 index 248f8520..00000000 --- a/.changeset/eresolve-staged-retry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`fix` on npm no longer stops when the lock-only install hits ERESOLVE from the old lockfile. It retries without the lockfile entries of the moved packages, their companions and the packages whose peers they satisfy, and only then with the whole lockfile re-resolved; the report says which step worked, and the lockfile check reports the churn as usual. It never uses `--legacy-peer-deps` or `--force`. When every step fails, `fix` ends blocked, naming the conflicting packages from npm's ERESOLVE report. `fix --json` now prints JSON on every exit, a failure included; when the run already has its report (a PR body over GitHub's size limit), that report comes with the error. diff --git a/.changeset/feedback-gate-format-request-options.md b/.changeset/feedback-gate-format-request-options.md deleted file mode 100644 index 2ab8e0e0..00000000 --- a/.changeset/feedback-gate-format-request-options.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`fix` no longer rejects an agent patch for test files the parent commit already failed, whichever test scope ran them: when the test script builds first and the build failed on the error being fixed, the start had no test results to compare with, so a correct patch was reverted every round. The patch's tests also run with the pack's follow-ups in place (a test asserting the old Stripe API version), which `fix` still applies and reports after the agent. When a PR body cannot fit, the stored report.json the error points to is now written first. `check` and `fix` now also analyze files that reach a package's wrapper through a barrel (`import { getStripeClient } from '../stripe'` with `export * from './client'`). Edited files are formatted with oxfmt and dprint as well as biome and prettier, from the workspace that holds them, with its own configuration, else the root's. The stripe pack adds `request-options`: request options passed in the params slot (`subscriptions.cancel(id, { idempotencyKey })`), which SDK 22 rejects, move to the third argument. It runs assisted until a ground-truth repository exercises it. diff --git a/.changeset/final-head-build.md b/.changeset/final-head-build.md deleted file mode 100644 index 556ca125..00000000 --- a/.changeset/final-head-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`uptide fix` judges consumed workspace builds on the final head, not on the tree right after the bump. A build that failed after the bump and passes once the edits land no longer starts a feedback round, adds an "Agent-led draft" reason or shows "Build failed" in the PR body. The builds run again only when the tree changed since their last result, and not at all when the verification build already built those workspaces. The fix report's `buildRuns` gives the number of builds the run executed and their wall time. diff --git a/.changeset/fold-downstream-errors.md b/.changeset/fold-downstream-errors.md deleted file mode 100644 index 5ed8a7c9..00000000 --- a/.changeset/fold-downstream-errors.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`check` folds a compile error into the breaking site it comes from when the compiler traces its value there (an `errors.map(e => e.message)` under a `result.error.errors` that zod 4 no longer types, and the narrowing that depended on it). The rule's line shows `+N downstream errors`, `--details` lists them under their site, and `--json` carries them as that finding's `downstream`. They are no longer separate breaking sites. `fix` still verifies against every error. diff --git a/.changeset/low-precision-assisted.md b/.changeset/low-precision-assisted.md deleted file mode 100644 index 8a322444..00000000 --- a/.changeset/low-precision-assisted.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -A rewrite rule below 80% precision over at least 5 scored ground-truth sites now runs as assisted in `fix` (react-router `dom-imports`); smaller samples (next `middleware-proxy`) stay mechanical and are flagged in the compatibility table. Pack status is unchanged. diff --git a/.changeset/pack-test-generators.md b/.changeset/pack-test-generators.md deleted file mode 100644 index ad875249..00000000 --- a/.changeset/pack-test-generators.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -pack test runs a ground-truth repository's code generators (prisma generate, local graphql-codegen) after its install, as fix does. It fetches the Prisma engines the locked version needs itself, so generators stay off the network. A repository whose generator still fails is incomplete and fails the pack, unless its ground truth declares `withoutGenerated` diff --git a/.changeset/pr-body-never-too-large.md b/.changeset/pr-body-never-too-large.md deleted file mode 100644 index e5c407c0..00000000 --- a/.changeset/pr-body-never-too-large.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"uptide": patch ---- - -A migration whose evidence is larger than GitHub's PR description limit no longer stops `fix` with "Required migration evidence exceeds the PR body budget" and loses the run. Long required lists get a compact form when they do not fit. Lockfile churn shows counts per kind of change and the first packages. Manual sites are grouped by rule, with counts and the first locations. Remaining type errors show the first entries. Every full list stays in report.json and, in the Uptide Action, in the job summary, which the description links to. If even the compact form does not fit, the description is a short summary that says so at the top: the verdict, the checks, the counts and where the full report is. The branch and report.json are always kept. - -An agent's decisions under "Decisions for you" name the files the agent changed, five at most, and count the rest, instead of every file in the task's scope. A verification-feedback task scoped to the whole repository made each of its decisions a list of hundreds of files. diff --git a/.changeset/zod-uuid-ts7-libs.md b/.changeset/zod-uuid-ts7-libs.md deleted file mode 100644 index b380a831..00000000 --- a/.changeset/zod-uuid-ts7-libs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`fix zod` rewrites `z.string().uuid()` to `z.guid()` by rule without `--include-deprecated`: zod 4's `uuid()` also checks the RFC version and variant, so ids zod 3 accepted stop validating, and `check` now counts the site as breaking. `fix` no longer reports false pre-existing type errors on a TypeScript 7 repository whose `lib` names a library newer than its `target` (`lib: ["ES2023"]` under `ES2022`). diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 7a823121..4a82135b 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,43 @@ # uptide +## 0.15.1 + +### Patch Changes + +- [#220](https://github.com/uptide-dev/uptide/pull/220) [`cf86d65`](https://github.com/uptide-dev/uptide/commit/cf86d6598c9cf2f8d6e023554ec6f7ab202f1632) Thanks [@lucasbraum](https://github.com/lucasbraum)! - With an assisting agent, a root pin Uptide cannot update safely (a nested override such as `overrides > pkg > peerDependencies > react`) no longer stops `fix` with exit 2: the run continues as an agent-led draft that leaves the pin as written and names it, with its exact path and value, at the top of the PR body. The agent-led peer reason now names each blocker's first release that accepts the target, or says none does. An agent-led draft must pass the repository's clean install (`npm ci` or the manager's frozen install) before delivery; if it does not, the PR says so at the top. Without an agent, with `--no-llm`, or on a safety refusal, `fix` still exits 2. + +- [#232](https://github.com/uptide-dev/uptide/pull/232) [`e4a2885`](https://github.com/uptide-dev/uptide/commit/e4a2885e81115cb56df883df69070de46894ddb1) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `uptide fix` spends less wall time on test runs and dependency copies: + + - The agent's own `run_tests` check runs only its runner's related tests when the `test` script builds first and then runs a script that is just the runner (`pnpm run build && pnpm run test:unit`). The gate after the agent's edits and the final verification run exactly what they ran before. + - The upgrade's install moves the installed `node_modules` out of its temporary worktree instead of copying it. + - Each phase of the fix report lists the repository's commands it ran (installs, generators, builds, type-checks, tests, lint, format) with their count and summed wall time. An agent-led run's clean install has its own phase. + +- [#223](https://github.com/uptide-dev/uptide/pull/223) [`2dc2162`](https://github.com/uptide-dev/uptide/commit/2dc21626cfd1826c8fdde9971a423ed4e7bd28dd) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `fix` no longer stops with "baseline tests modified the working tree" when the test run only writes new untracked files, such as a junit `test-report.xml` that is not gitignored. Those files are recorded as test artifacts (`testArtifacts` in the report), kept out of every commit, the agent's diff and the pending-changes check, and removed before each later test run, `uptide verify` included. A change to a tracked file during baseline tests still refuses the run. + +- [#215](https://github.com/uptide-dev/uptide/pull/215) [`abddcb3`](https://github.com/uptide-dev/uptide/commit/abddcb394415c73eecf08e3bdf1c3969c6ddb87c) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `check` no longer lists possible impact (type changes nothing confirmed as breaking) on its first screen: each package says it in one line, `+N possible impact in M files, not counted as breaking`, and `--details` and `--json` still have every site. A package whose types were partly verified no longer repeats its coverage line in the heading, and a monorepo's unbuilt workspace chains are one count on that line. + +- [#213](https://github.com/uptide-dev/uptide/pull/213) [`2de3a18`](https://github.com/uptide-dev/uptide/commit/2de3a180955b19736aa6c81bb2ec3ddf2a160bed) Thanks [@lucasbraum](https://github.com/lucasbraum)! - A companion pack that moves with the lead's fix (react beside next) now gets its own scan context and inventory, and the PR body carries a section with its review notes. + +- [#212](https://github.com/uptide-dev/uptide/pull/212) [`733cfbe`](https://github.com/uptide-dev/uptide/commit/733cfbe7a9d9509f4d6dc40e9f6e14d77c6a2f2a) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `pack test --write` records how many breaking sites a finding landed on at any severity and as breaking, out of all breaking sites it scored, and the pack tables show both ("Found, any severity", "Found as breaking") in place of the single recall column. Packs recorded before it show `—`. + +- [#224](https://github.com/uptide-dev/uptide/pull/224) [`09f68df`](https://github.com/uptide-dev/uptide/commit/09f68df4a22c52a2ba30e20f196b0136583187c9) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `fix` on npm no longer stops when the lock-only install hits ERESOLVE from the old lockfile. It retries without the lockfile entries of the moved packages, their companions and the packages whose peers they satisfy, and only then with the whole lockfile re-resolved; the report says which step worked, and the lockfile check reports the churn as usual. It never uses `--legacy-peer-deps` or `--force`. When every step fails, `fix` ends blocked, naming the conflicting packages from npm's ERESOLVE report. `fix --json` now prints JSON on every exit, a failure included; when the run already has its report (a PR body over GitHub's size limit), that report comes with the error. + +- [#221](https://github.com/uptide-dev/uptide/pull/221) [`ff8de8e`](https://github.com/uptide-dev/uptide/commit/ff8de8e078b9837f9d1bb09792717f168847cee2) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `fix` no longer rejects an agent patch for test files the parent commit already failed, whichever test scope ran them: when the test script builds first and the build failed on the error being fixed, the start had no test results to compare with, so a correct patch was reverted every round. The patch's tests also run with the pack's follow-ups in place (a test asserting the old Stripe API version), which `fix` still applies and reports after the agent. When a PR body cannot fit, the stored report.json the error points to is now written first. `check` and `fix` now also analyze files that reach a package's wrapper through a barrel (`import { getStripeClient } from '../stripe'` with `export * from './client'`). Edited files are formatted with oxfmt and dprint as well as biome and prettier, from the workspace that holds them, with its own configuration, else the root's. The stripe pack adds `request-options`: request options passed in the params slot (`subscriptions.cancel(id, { idempotencyKey })`), which SDK 22 rejects, move to the third argument. It runs assisted until a ground-truth repository exercises it. + +- [#226](https://github.com/uptide-dev/uptide/pull/226) [`448c3cb`](https://github.com/uptide-dev/uptide/commit/448c3cbf98305f23c21fa699db873e996ccfa4a4) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `uptide fix` judges consumed workspace builds on the final head, not on the tree right after the bump. A build that failed after the bump and passes once the edits land no longer starts a feedback round, adds an "Agent-led draft" reason or shows "Build failed" in the PR body. The builds run again only when the tree changed since their last result, and not at all when the verification build already built those workspaces. The fix report's `buildRuns` gives the number of builds the run executed and their wall time. + +- [#218](https://github.com/uptide-dev/uptide/pull/218) [`13e343b`](https://github.com/uptide-dev/uptide/commit/13e343b65b544c2b1f6372a373a51ca01778baab) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `check` folds a compile error into the breaking site it comes from when the compiler traces its value there (an `errors.map(e => e.message)` under a `result.error.errors` that zod 4 no longer types, and the narrowing that depended on it). The rule's line shows `+N downstream errors`, `--details` lists them under their site, and `--json` carries them as that finding's `downstream`. They are no longer separate breaking sites. `fix` still verifies against every error. + +- [#214](https://github.com/uptide-dev/uptide/pull/214) [`195ae10`](https://github.com/uptide-dev/uptide/commit/195ae106e36fa2e3c054f993477055ba8dd74089) Thanks [@lucasbraum](https://github.com/lucasbraum)! - A rewrite rule below 80% precision over at least 5 scored ground-truth sites now runs as assisted in `fix` (react-router `dom-imports`); smaller samples (next `middleware-proxy`) stay mechanical and are flagged in the compatibility table. Pack status is unchanged. + +- [#218](https://github.com/uptide-dev/uptide/pull/218) [`13e343b`](https://github.com/uptide-dev/uptide/commit/13e343b65b544c2b1f6372a373a51ca01778baab) Thanks [@lucasbraum](https://github.com/lucasbraum)! - pack test runs a ground-truth repository's code generators (prisma generate, local graphql-codegen) after its install, as fix does. It fetches the Prisma engines the locked version needs itself, so generators stay off the network. A repository whose generator still fails is incomplete and fails the pack, unless its ground truth declares `withoutGenerated` + +- [#227](https://github.com/uptide-dev/uptide/pull/227) [`ae175a9`](https://github.com/uptide-dev/uptide/commit/ae175a9fbb32ed394a6749dda95387e910b43837) Thanks [@lucasbraum](https://github.com/lucasbraum)! - A migration whose evidence is larger than GitHub's PR description limit no longer stops `fix` with "Required migration evidence exceeds the PR body budget" and loses the run. Long required lists get a compact form when they do not fit. Lockfile churn shows counts per kind of change and the first packages. Manual sites are grouped by rule, with counts and the first locations. Remaining type errors show the first entries. Every full list stays in report.json and, in the Uptide Action, in the job summary, which the description links to. If even the compact form does not fit, the description is a short summary that says so at the top: the verdict, the checks, the counts and where the full report is. The branch and report.json are always kept. + + An agent's decisions under "Decisions for you" name the files the agent changed, five at most, and count the rest, instead of every file in the task's scope. A verification-feedback task scoped to the whole repository made each of its decisions a list of hundreds of files. + +- [#219](https://github.com/uptide-dev/uptide/pull/219) [`12dc612`](https://github.com/uptide-dev/uptide/commit/12dc6127fd85d7079bb44bf213a7a165b6aa1021) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `fix zod` rewrites `z.string().uuid()` to `z.guid()` by rule without `--include-deprecated`: zod 4's `uuid()` also checks the RFC version and variant, so ids zod 3 accepted stop validating, and `check` now counts the site as breaking. `fix` no longer reports false pre-existing type errors on a TypeScript 7 repository whose `lib` names a library newer than its `target` (`lib: ["ES2023"]` under `ES2022`). + ## 0.15.0 ### Minor Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index c6490ecc..542f11b1 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "uptide", - "version": "0.15.0", + "version": "0.15.1", "description": "Uptide finds what a dependency upgrade breaks in your code, migrates it, and proves it with your compiler and tests.", "license": "Apache-2.0", "type": "module",