diff --git a/.changeset/build-broken-by-upgrade.md b/.changeset/build-broken-by-upgrade.md deleted file mode 100644 index 709ac87..0000000 --- a/.changeset/build-broken-by-upgrade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -A repository build that fails on the final head is no longer published as a ready PR. When it fails, `fix` builds the parent commit in the same clone to compare. If the parent fails too, the build line says "already failing before this upgrade" and nothing is blocked. If the parent passes, the upgrade broke the build: verification fails, and the PR opens only as a draft with "Build broken by this upgrade" at the top. If the parent can't be checked out, installed or built, verification still fails and the PR says "Build fails on this upgrade; the parent build could not be checked" with the reason, never that the parent passed. The GitHub Action opens these runs as draft PRs, the same way it opens agent-led runs. The head build also skips workspaces already built on that head, so a workspace whose output a consumer reads is no longer built twice. diff --git a/.changeset/build-line-states-result.md b/.changeset/build-line-states-result.md deleted file mode 100644 index 603e8a8..0000000 --- a/.changeset/build-line-states-result.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -The PR description's build check now gives the build's actual result: passed, failed with its first error, or not run and why. When a migration pack doesn't require a build, `fix` still runs the repository's build once on the final head, and `uptide verify` runs it again, and reports what happened. "Not required by the pack" now appears next to that result instead of replacing it. Before, the line read "build not required" even when the repository's build failed. A build the pack doesn't require still doesn't block verification or publishing. diff --git a/.changeset/flaky-test-rerun.md b/.changeset/flaky-test-rerun.md deleted file mode 100644 index 292fc8b..0000000 --- a/.changeset/flaky-test-rerun.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -An SDK session's edits are no longer thrown away because of one flaky test. Before the gate rejects a session on test failures, it runs the failing test files once more, alone, with their runner and the same isolation as the full run. A file that passes then is recorded as flaky (`llm.tasks[].flaky` in `report.json`, and a line in the PR body's review list) and the edits stay. A file that fails twice still rejects them, and a failure that names no test file (a build, a timeout) is never rerun. Final verification keeps its full gate: it runs the flaky files again, and if one fails there, verification fails and the PR body says so. `fix` also stops starting verification feedback sessions when what is left of `--max-cost` is below the mean cost of the run's sessions so far, so it no longer starts a session it can't afford; the PR's feedback line says when this happened. diff --git a/.changeset/keep-undeclared-imports.md b/.changeset/keep-undeclared-imports.md deleted file mode 100644 index 73c3a8c..0000000 --- a/.changeset/keep-undeclared-imports.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": patch ---- - -`fix` on npm no longer loses a package the repo imports without declaring it when the ERESOLVE retry re-resolves the lockfile. If the retry drops such a package from the top of `node_modules`, it runs again keeping that package and the locked packages that require it at their old versions; if that conflicts, the first retry stands. Either way the summary and the PR body name the package under "Imported but not declared" and suggest adding it to package.json. `fix` never adds it for you. diff --git a/.changeset/sdk-executor-by-default.md b/.changeset/sdk-executor-by-default.md deleted file mode 100644 index 7462b90..0000000 --- a/.changeset/sdk-executor-by-default.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": minor ---- - -`npx uptide fix` gets the Agent SDK executor. The package stays as small as before: `@anthropic-ai/claude-agent-sdk` is not installed with Uptide. An SDK installed next to Uptide is used as it is; otherwise the first `fix` that needs it installs the version Uptide is tested with into Uptide's cache (`~/.cache/uptide/agent-sdk/`), says so in one line with its size, and later runs reuse it. When that install fails (offline, a proxy) or the SDK cannot run, `fix` runs the patch executor and says so on the first line of its output and at the top of the PR body, with the reason and how to get the SDK executor. `report.json` records `llm.executor` and, after a fallback, the reason in `llm.sdkMissing`. The privacy notice names the SDK only when the SDK will run, and the LLM line names the executor. `--agent sdk` without a usable SDK stops before any work instead of failing mid-run. diff --git a/.changeset/sdk-required.md b/.changeset/sdk-required.md deleted file mode 100644 index f4c87ec..0000000 --- a/.changeset/sdk-required.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"uptide": minor ---- - -`uptide fix` runs only with the Claude Agent SDK; if it can't, it doesn't run. Before the first download, an interactive terminal asks once: `uptide fix needs the Claude Agent SDK (about 300 MB, downloaded once to ). Download now? [Y/n]` (default yes). With `--yes`, or without a terminal, it downloads and says so in one line. Once cached, it never asks again. Answering `n`, an SDK that can't be fetched or loaded (offline, a proxy, no binary for the platform), a missing `ANTHROPIC_API_KEY`, another provider, or `llm.enabled: false` / `executor: patch` in `uptide.yml` all stop `fix` with exit 2 before any clone or spending. The run prints one message with the reason and the fix, and `--json` returns it as `error.code: "SDK_UNAVAILABLE"`. There is no fallback to the patch executor anywhere: the Uptide Action stops the run with the same message. `--no-llm`, `--agent` and `--provider` are gone from help and docs. `llm.sdkMissing` is gone from `report.json`, and `uptide init` no longer writes `executor`. diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 4a82135..58d6507 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,23 @@ # uptide +## 0.16.0 + +### Minor Changes + +- [#237](https://github.com/uptide-dev/uptide/pull/237) [`717468a`](https://github.com/uptide-dev/uptide/commit/717468acbf267c977da52bbe2f87a299a217d367) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `npx uptide fix` gets the Agent SDK executor. The package stays as small as before: `@anthropic-ai/claude-agent-sdk` is not installed with Uptide. An SDK installed next to Uptide is used as it is; otherwise the first `fix` that needs it installs the version Uptide is tested with into Uptide's cache (`~/.cache/uptide/agent-sdk/`), says so in one line with its size, and later runs reuse it. When that install fails (offline, a proxy) or the SDK cannot run, `fix` runs the patch executor and says so on the first line of its output and at the top of the PR body, with the reason and how to get the SDK executor. `report.json` records `llm.executor` and, after a fallback, the reason in `llm.sdkMissing`. The privacy notice names the SDK only when the SDK will run, and the LLM line names the executor. `--agent sdk` without a usable SDK stops before any work instead of failing mid-run. + +- [#239](https://github.com/uptide-dev/uptide/pull/239) [`e1e8c40`](https://github.com/uptide-dev/uptide/commit/e1e8c4000fabe811bf9ac1275a1280e7d7193114) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `uptide fix` runs only with the Claude Agent SDK; if it can't, it doesn't run. Before the first download, an interactive terminal asks once: `uptide fix needs the Claude Agent SDK (about 300 MB, downloaded once to ). Download now? [Y/n]` (default yes). With `--yes`, or without a terminal, it downloads and says so in one line. Once cached, it never asks again. Answering `n`, an SDK that can't be fetched or loaded (offline, a proxy, no binary for the platform), a missing `ANTHROPIC_API_KEY`, another provider, or `llm.enabled: false` / `executor: patch` in `uptide.yml` all stop `fix` with exit 2 before any clone or spending. The run prints one message with the reason and the fix, and `--json` returns it as `error.code: "SDK_UNAVAILABLE"`. There is no fallback to the patch executor anywhere: the Uptide Action stops the run with the same message. `--no-llm`, `--agent` and `--provider` are gone from help and docs. `llm.sdkMissing` is gone from `report.json`, and `uptide init` no longer writes `executor`. + +### Patch Changes + +- [#236](https://github.com/uptide-dev/uptide/pull/236) [`9b35b9d`](https://github.com/uptide-dev/uptide/commit/9b35b9d113e8d0601ec2694367e21c1b31c89f4c) Thanks [@lucasbraum](https://github.com/lucasbraum)! - A repository build that fails on the final head is no longer published as a ready PR. When it fails, `fix` builds the parent commit in the same clone to compare. If the parent fails too, the build line says "already failing before this upgrade" and nothing is blocked. If the parent passes, the upgrade broke the build: verification fails, and the PR opens only as a draft with "Build broken by this upgrade" at the top. If the parent can't be checked out, installed or built, verification still fails and the PR says "Build fails on this upgrade; the parent build could not be checked" with the reason, never that the parent passed. The GitHub Action opens these runs as draft PRs, the same way it opens agent-led runs. The head build also skips workspaces already built on that head, so a workspace whose output a consumer reads is no longer built twice. + +- [#233](https://github.com/uptide-dev/uptide/pull/233) [`1ad8071`](https://github.com/uptide-dev/uptide/commit/1ad807131595da96a3b1932b1881e1222043b28e) Thanks [@lucasbraum](https://github.com/lucasbraum)! - The PR description's build check now gives the build's actual result: passed, failed with its first error, or not run and why. When a migration pack doesn't require a build, `fix` still runs the repository's build once on the final head, and `uptide verify` runs it again, and reports what happened. "Not required by the pack" now appears next to that result instead of replacing it. Before, the line read "build not required" even when the repository's build failed. A build the pack doesn't require still doesn't block verification or publishing. + +- [#238](https://github.com/uptide-dev/uptide/pull/238) [`6f07d3f`](https://github.com/uptide-dev/uptide/commit/6f07d3f4cae9f69f7b288ab1f15c4b2829a57445) Thanks [@lucasbraum](https://github.com/lucasbraum)! - An SDK session's edits are no longer thrown away because of one flaky test. Before the gate rejects a session on test failures, it runs the failing test files once more, alone, with their runner and the same isolation as the full run. A file that passes then is recorded as flaky (`llm.tasks[].flaky` in `report.json`, and a line in the PR body's review list) and the edits stay. A file that fails twice still rejects them, and a failure that names no test file (a build, a timeout) is never rerun. Final verification keeps its full gate: it runs the flaky files again, and if one fails there, verification fails and the PR body says so. `fix` also stops starting verification feedback sessions when what is left of `--max-cost` is below the mean cost of the run's sessions so far, so it no longer starts a session it can't afford; the PR's feedback line says when this happened. + +- [#234](https://github.com/uptide-dev/uptide/pull/234) [`066deab`](https://github.com/uptide-dev/uptide/commit/066deab004fe4afa484c6b5fbf32e8e87f141184) Thanks [@lucasbraum](https://github.com/lucasbraum)! - `fix` on npm no longer loses a package the repo imports without declaring it when the ERESOLVE retry re-resolves the lockfile. If the retry drops such a package from the top of `node_modules`, it runs again keeping that package and the locked packages that require it at their old versions; if that conflicts, the first retry stands. Either way the summary and the PR body name the package under "Imported but not declared" and suggest adding it to package.json. `fix` never adds it for you. + ## 0.15.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 542f11b..97719e2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "uptide", - "version": "0.15.1", + "version": "0.16.0", "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",