ci: release packages - #301
Merged
Merged
Conversation
Contributor
Author
|
@coderabbitai review |
commit: |
Contributor
Author
|
@coderabbitai review |
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 8, 2026 18:33
64500fc to
fa09ee7
Compare
elkaix
enabled auto-merge (squash)
September 8, 2026 19:21
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 8, 2026 19:21
8feeafc to
c30f473
Compare
Contributor
Author
|
@coderabbitai review |
5 tasks done
elkaix
added a commit
that referenced
this pull request
Sep 10, 2026
…ider (#302) ## Related Issue Follow-up to #301 (release PR for @pymodel/pythinker-code@1.13.0). No linked issue — maintainer-authored hygiene fixes surfaced during the release loop. ## Problem Two defects left behind by the release commit ce945e1: 1. The remote-control output test asserted the absence of a third setup step with `/^\s*3\.\s/m` against **raw** CLI output. `formatRemoteControlOutput` wraps step numbers in `chalk.bold.hex` (`label()`), so any real third step renders as ` <ESC>[1m<ESC>[38;5;Nm3.<ESC>...` and the line-start anchor never matches — the assertion cannot catch the regression it exists for (and its previous form, a plain `not.toContain('3.')`, false-failed on the `1.13.0` version banner). 2. The vitest 4.1.9 -> 4.1.11 security bump left `@vitest/coverage-v8` pinned at 4.1.9. The installed coverage provider requires the same exact vitest version and vitest warns that mixed provider/test-runner versions are unsupported. Plain test runs do not exercise this path. ## What changed - `apps/pythinker-code/test/cli/web/remote-control.test.ts`: moved the third-step assertion below the existing ANSI/OSC stripping and retargeted it to `plain`, so a styled `3.` step is caught after escapes are removed. Verified by temporarily injecting a styled third step through the same `label()` path — the test fails as required; reverted afterwards. - `package.json` + `pnpm-lock.yaml`: aligned `@vitest/coverage-v8` to 4.1.11; focused `--coverage` run loads the v8 provider with no mixed-version warning. - `flake.nix`: refreshed the `pnpmDeps` fixed-output hash for the lockfile change. - Restaged `dist-web/.web-bundle-manifest.json` (root `package.json` is a web build input). No changeset: nothing here changes published manifests or user-visible behavior. No doc update needed. ## Checklist - [x] I have read the [CONTRIBUTING](https://github.com/PyModel/pythinker-code/blob/main/CONTRIBUTING.md) document. - [x] I have linked a related issue (external PRs: the issue must have a maintainer's `/approve`). N/A — internal follow-up PR. - [x] I have added tests that prove my feature works. Existing suite covers the assertion; rejection of a styled third step proven by temporary injection. - [x] Ran `gen-changesets` skill, or this PR needs no changeset. Needs none. - [x] Ran `gen-docs` skill, or this PR needs no doc update. Needs none. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Tests** - Improved validation of remote-control output, including complete URLs, formatting cleanup, and expected setup-step visibility. - **Chores** - Updated web build metadata and project maintenance configuration to keep generated assets and development workflows current. - Refreshed development tooling configuration to support consistent coverage reporting and reproducible builds. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
6 tasks done
elkaix
added a commit
that referenced
this pull request
Oct 1, 2026
…ns (#353) ## Requirement or Bug The release PR (#348) fails `build`, `test`, `nix build`, `Artifact security` and the preview publish. ## Bug Reproduction Steps 1. Merge any PR with a changeset that names `@pymodel/pythinker-web`. 2. The Release workflow opens `ci: release packages`, which bumps `apps/pythinker-web/package.json` `version`. 3. Every job that runs `check-web-assets.mjs` fails: "The committed web bundle is stale". ## Root Cause `vite.config.ts` compiles the web package version into the bundle (`__PYTHINKER_WEB_VERSION__`), and `package.json` is a fingerprinted build input. `changeset version` bumps it but nothing rebuilt `dist-web`, so the committed bundle was genuinely stale. Earlier releases (#301) were fixed by rebuilding by hand on the release branch. Fundamental fix: `version:release` now runs `pnpm run build:web` after `changeset version`, so the changesets action commits the rebuilt bundle with the bump. The release job already installs dependencies and runs `pnpm build` before this step. Second, unrelated failure in the same run: `towerService.test.ts` "leaves the roster untouched when another session owns the tower store" asserted the order of two log lines written by two independent async event handlers. It failed on CI when the order flipped. The test now checks both lines without order and finds the payload by message. ## Code Changes - `package.json`: `version:release` appends `&& pnpm run build:web`. - `towerService.test.ts`: order-independent assertion. ## Behavior Changes and Affected Users None for users. Release PRs now include the rebuilt `dist-web` whenever a version that reaches the bundle changes; the release job takes about one web build longer. Verification: - Simulated the bump locally: set the web version to `9.9.9`. The stale check failed; after `pnpm run build:web` it passed, and the new version appears in the bundle. Then I reverted. - `towerService.test.ts` passes: 108 of 108. ## Checklist - [x] I have read the [CONTRIBUTING](https://github.com/PyModel/pythinker-code/blob/main/CONTRIBUTING.md) document. - [x] I have linked a related issue (external PRs: issue must have a maintainer's `/approve`). - [x] I have added tests that prove my feature works. - [x] The behavior-change table above is complete, and every removed behavior or flipped default is named in the changeset and either has an escape hatch or was explicitly approved by a maintainer in this PR. - [x] Ran `gen-changesets` skill, or this PR needs no changeset. - [x] Ran `gen-docs` skill, or this PR needs no doc update.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@pymodel/pythinker-code@1.13.0
Minor Changes
#299
62ae31bThanks @elkaix! - Config changes now refresh the model picker and setup screen live, a dead default model is repaired in your config.toml to the best available model with a notice, and provider configuration errors fail fast instead of retrying for minutes.#300
ae36917Thanks @elkaix! - The model you pick in the model picker is now remembered and restored when your default model becomes unavailable, and equally capable models now prefer the newer version.#298
0f522b8Thanks @elkaix! - Refresh the skill catalog automatically when user-level skills are created, changed, or deleted while Pythinker Code is running.Patch Changes
#298
0f522b8Thanks @elkaix! - Fix a crash when a model config entry lacks its model name.#298
0f522b8Thanks @elkaix! - Add environment variable overrides for the background Bash task timeout and the print-mode background policy.#298
0f522b8Thanks @elkaix! - Fix slow resume replay for sessions with many cron turns.#298
0f522b8Thanks @elkaix! - Fix recent sessions missing from the session list when the sessions folder contains stray files.#298
0f522b8Thanks @elkaix! - Warn in print mode when an untrusted folder skips project-level MCP servers. Workspace trust info now reports project servers that override same-named user entries as trust-gated.@pymodel/pythinker-desktop@0.11.0
Minor Changes
#299
62ae31bThanks @elkaix! - Config changes now refresh the model picker and setup screen live, a dead default model is repaired in your config.toml to the best available model with a notice, and provider configuration errors fail fast instead of retrying for minutes.#300
ae36917Thanks @elkaix! - The model you pick in the model picker is now remembered and restored when your default model becomes unavailable, and equally capable models now prefer the newer version.#298
0f522b8Thanks @elkaix! - Refresh the skill catalog automatically when user-level skills are created, changed, or deleted while Pythinker Code is running.Patch Changes
#298
0f522b8Thanks @elkaix! - Fix a crash when a model config entry lacks its model name.#298
0f522b8Thanks @elkaix! - Add environment variable overrides for the background Bash task timeout and the print-mode background policy.#298
0f522b8Thanks @elkaix! - Fix slow resume replay for sessions with many cron turns.#298
0f522b8Thanks @elkaix! - Fix recent sessions missing from the session list when the sessions folder contains stray files.#298
0f522b8Thanks @elkaix! - Warn in print mode when an untrusted folder skips project-level MCP servers. Workspace trust info now reports project servers that override same-named user entries as trust-gated.@pymodel/pythinker-code-sdk@0.19.2
Patch Changes
0f522b8Thanks @elkaix! - Warn in print mode when an untrusted folder skips project-level MCP servers. Workspace trust info now reports project servers that override same-named user entries as trust-gated.