Repository navigation
Conversation
…kills install (#465) - published-install.yml installs the latest release on windows-latest with `irm .../install.ps1 | iex` and compares `unity-cli --version` with the release tag (after Release, weekly, manual, and PRs touching the check) - platform-checks.py checks grim when WAYLAND_DISPLAY is set; the Linux job runs it under sway's headless backend - skills install resolves the home directory from %USERPROFILE% on Windows, like the clients do, so the global install test now runs on Windows too Refs #465 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The installer is dot-evaluated by iex and its $expected (the SHA-256) overwrote the version string the test compares against. Refs #465 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Refs #465 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ci(windows,linux): check published install, Wayland grim and global skills install
--- updated-dependencies: - dependency-name: "@google/gemini-cli" dependency-version: 0.62.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm_and_yarn - dependency-name: "@openai/codex" dependency-version: 0.160.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm_and_yarn - dependency-name: globals dependency-version: 17.13.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com>
The required coverage checks failed because codecov-action could not download its uploader (TLS handshake failure), not because coverage dropped. Keep the 90% gates (--fail-under-lines 90, coverlet Threshold=90) required and make only the external upload best-effort. bincode 3.0.0 is a compile_error!-only release, so exclude >=3 from dependabot cargo updates. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ci: make Codecov upload non-fatal and ignore bincode >=3
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v6...v7) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…p/actions/upload-artifact-7 chore(deps): bump actions/upload-artifact from 6 to 7
…npm_and_yarn-2064c57c23 chore(deps): bump the npm_and_yarn group with 3 updates
fix(windows): harden Editor launches, reference fetch and bake validation
chore(deps): update cargo group and preserve embedding indexes
The key that names the target object differs by tool (path, gameObjectPath, name, gameObjectName, rootPath), and a wrong key fails schema validation before the call reaches Unity. Add a short table to unity-gameobject-edit and unity-scene-inspect, checked against the tool catalog, plus a pointer to `tool schema`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributors testing a change the way users run unity-cli need their build where unityd and agent skills pick it up. A cargo install puts it in ~/.cargo/bin, which shadows the managed binary (warn_cargo_conflict) while unityd keeps running the managed one. scripts/install-from-source.sh (macOS/Linux) and .ps1 (Windows) build the checkout and install it into ~/.unity/tools/unity-cli/<rid>/ like install.sh / install.ps1: stop unityd, replace the binary (moving a locked exe aside on Windows), write VERSION, link or add to PATH, then refresh installed skills or install them for --skills <client>. They warn when UNITY_CLI_NO_AUTO_UPDATE is unset, since the next release's self-update would replace the build. CONTRIBUTING documents them (EN/JA). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…is off UNITY_CLI_NO_AUTO_UPDATE=1 stopped maybe_self_update, but `unityd start` and lspd go through ensure_latest_cli_for_daemon, which fetched the latest release and replaced the managed binary whenever VERSION differed. A user who had opted out (a pinned release, a source build) got upgraded by starting the daemon. ensure_latest_for now returns the installed CLI on the daemon-start path when the opt-out is set. A missing binary is still installed, explicit installs (`force_download`, `allow_stale_existing = false`) are unchanged, and both callers read the flag through auto_update_disabled(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The Windows script set UNITY_CLI_NO_AUTO_UPDATE for its own unityd-stop call and then read it back, so the auto-update warning never showed on a reinstall. Read the opt-out before changing it. - A corrupt or partial install no longer aborts the Windows run at the unityd-stop step. - --no-skills / -NoSkills skip the skills step, for tests and binary-only changes (unity-cli resolves the skills home through the OS on Windows, so a temporary HOME can't isolate it). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tests/scripts/install-from-source-ps1-test.ps1 and -sh-test.sh install the job's debug build with --skip-build into a temporary UNITY_CLI_TOOLS_ROOT (and HOME on Unix) and check: fresh install and VERSION, the ~/.local/bin symlink, PATH left alone with UNITY_CLI_SKIP_PATH_UPDATE=1, reinstall over a stale binary, a held-open exe moved aside and cleaned up on the next run (Windows), a missing build failing without touching the install, and the UNITY_CLI_NO_AUTO_UPDATE warning. Run in windows-test and linux-platform-checks after their existing builds. Refs #480 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--- updated-dependencies: - dependency-name: "@google/gemini-cli" dependency-version: 0.63.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm_and_yarn - dependency-name: "@openai/codex" dependency-version: 0.162.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm_and_yarn - dependency-name: eslint dependency-version: 10.12.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps the cargo group with 4 updates: [tokio](https://github.com/tokio-rs/tokio), [toml_edit](https://github.com/toml-rs/toml), [fastembed](https://github.com/Anush008/fastembed-rs) and [libc](https://github.com/rust-lang/libc). Updates `tokio` from 1.53.1 to 1.53.2 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](tokio-rs/tokio@tokio-1.53.1...tokio-1.53.2) Updates `toml_edit` from 0.25.15+spec-1.1.0 to 0.25.16+spec-1.1.0 - [Commits](toml-rs/toml@v0.25.15...v0.25.16) Updates `fastembed` from 7.1.0 to 7.1.1 - [Release notes](https://github.com/Anush008/fastembed-rs/releases) - [Commits](anush008/fastembed-rs@v7.1.0...v7.1.1) Updates `libc` from 0.2.189 to 0.2.190 - [Release notes](https://github.com/rust-lang/libc/releases) - [Changelog](https://github.com/rust-lang/libc/blob/0.2.190/CHANGELOG.md) - [Commits](rust-lang/libc@0.2.189...0.2.190) --- updated-dependencies: - dependency-name: tokio dependency-version: 1.53.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: toml_edit dependency-version: 0.25.16+spec-1.1.0 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: fastembed dependency-version: 7.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo - dependency-name: libc dependency-version: 0.2.190 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: cargo ... Signed-off-by: dependabot[bot] <support@github.com>
…npm_and_yarn-0044c31d4f chore(deps): bump the npm_and_yarn group with 3 updates
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An unterminated comment or string in one branch no longer changes how another branch is lexed: each inactive branch is re-parsed alone in a same-length copy with the group's directives and sibling branches blanked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A directive-looking line inside a string of an inactive branch is string content once that branch is active. Re-parse each skipped branch from its directive, rewritten to an always-true #if, in a doubling window so the parser decides where the branch ends; follow the sibling it reveals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The activation window now always holds the whole directive, so an #elif/#else longer than the first window no longer throws. When an activated branch ends past the directive the outer parse stopped at, strings the outer parse started in between are dropped: that stretch is string content once the branch is active. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the fake-path drop rule with the PM ruling: a lone CR is kept when any configuration's parse reads it inside a string, except string tokens that are unterminated literals (CS1039, CS8997, or an interpolated string missing its end), whose extent is not valid C# in that configuration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(lsp): preserve string CRs in inactive preprocessor branches
fix(lsp): preserve string CRs across malformed nested branches
…iterals Replace the per-branch reparse with a walk over every preprocessor state some configuration reaches (each #if/#elif condition free). Active code is lexed from the line after a directive, so an unterminated literal in a taken branch no longer hides its sibling #else/#elif/#endif; skipped branches are scanned line by line as Roslyn does, including bad #elif/#else after a group's #else. Cost follows the directive count, not the configurations. Add the #520 regression cases and an all-configurations oracle generator test (1000 generated sources, 0 mismatches). Refs #520 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Carrying every open group's #else flag in the state made a string whose "#else" line splits a group double the work per nesting level (depth 30 never finished). Each #if group is now solved once and its exits reused by every caller, so the cost follows the directive count. Remove the quadratic paths in the directive count: skipped groups use a precomputed line index instead of rescanning, the lexer reads a doubling window so a run of directives or an unterminated comment is not lexed to the end of the file from every state, and plain #if conditions are rewritten in place to a defined symbol so a false #if does not make the lexer read its whole skipped group. Past 200,000 states the scan keeps every lone CR (fail-safe). Refs #520 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(lsp): keep closed-string CRs in branches hidden by unterminated literals (#520)
--- updated-dependencies: - dependency-name: "@google/gemini-cli" dependency-version: 0.64.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm_and_yarn - dependency-name: "@openai/codex" dependency-version: 0.163.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm_and_yarn - dependency-name: prettier dependency-version: 3.9.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com>
…npm_and_yarn-5610e8b37f chore(deps): bump the npm_and_yarn group with 3 updates
Supersedes Dependabot #523: zip 8 -> 9, serde_json 1.0.154, tokio 1.53.3, toml_edit 0.25.17, sha2 0.11.1. zip 9 returns Result from ZipFile::name(); propagate failures with anyhow context instead of panicking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(deps): zip 9 へ移行し cargo group 更新を取り込む (#525)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedToo many files! This PR contains 338 files, which is 238 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. Usage-priced reviews support at most 300 files. ⚙️ Run configuration
⛔ Files ignored due to path filters: 3
📒 Files selected for processing: 338
You can disable this status message by setting the
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
akiojin
marked this pull request as ready for review
October 19, 2026 03:41
akiojin
enabled auto-merge
October 19, 2026 03:42
4 tasks done
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.
Summary
v0.19.0 makes the C# LSP the default backend for symbol search and routes C# script creation and edits through the LSP write tools. It also fixes LSP write reliability (BOM, newline style, CRs inside string values, URI handling, lspd startup waits), installs source builds as the managed binary, keeps the CLI when auto-update is off, retries transient installer errors, and hardens Windows.
Breaking changes
create_classnow writes through the C# LSP write path (fix(skills): route C# script creation and fixes through the LSP write tools #493). WithUNITY_CLI_LSP_MODE=offit fails with a "requires LSP" error and writes nothing; v0.18.1 wrote the file directly. Arguments are unchanged; output keepssuccess/path/contentand addsapplied,changedFiles,diagnostics,backend.UNITY_CLI_LSP_MODE=off(or setauto/required) and rununity-cli lsp install. Automation that must run without the LSP writes the.csfile itself, then runsunity-cli raw refresh_assetsand checksget_compilation_state.Changes
get_symbols/find_symbol/find_refs/build_index; unsetUNITY_CLI_LSP_MODEmeansauto, with an index fallback that reportsbackend: "index"andfallbackReason(feat(lsp): make LSP the default backend for C# symbol search #495).replace_symbol_body(fix(lsp): keep trailing comments when replace_symbol_body replaces a method body #503);using UnityEngine;for ScriptableObject classes (fix(lsp): add using UnityEngine to ScriptableObject classes from create_class #502); canonical file URIs across Windows and Unix (fix(lsp): resolve canonical file URIs across Windows and Unix #512); lspd startup wait and stderr log (fix(lsp): wait for a live auto-started lspd instead of failing after 5 seconds #505, fix(lsp): bound Windows cold-start TCP connection waits #506).scripts/install-from-source.sh/.ps1install a source build as the managed binary (feat(scripts): install a source build as the managed binary #481); the installed CLI is kept whenUNITY_CLI_NO_AUTO_UPDATE=1(fix(update): keep the installed CLI on daemon start when auto-update is off #479); installers retry transient download errors (fix(install): retry transient download errors and wait for the test release server #515).Version
0.18.1 → 0.19.0 (
Cargo.toml,Cargo.lock,package.json,UnityCliBridge/Packages/unity-cli-bridge/package.json,CHANGELOG.md).Verification
Real Editor perf gate (release.md 2.1): PASS on attempt 4. 92/92 operation/condition combinations, 0 violations. Eval (100 samples, Editor frontmost) PASS on both Editors.
cargo build --release --locked --bin unity-cli UNITY_CLI_PERF_REGRESSION_PERCENT=20 caffeinate -dimsu python3 scripts/e2e-matrix.py \ --suites perf --perf-focus both --unity-cli "$PWD/target/release/unity-cli" \ --editor /Applications/Unity/Hub/Editor/6000.3.25f1/Unity.app/Contents/MacOS/Unity \ --editor /Applications/Unity/Hub/Editor/2022.3.62f3/Unity.app/Contents/MacOS/Unity \ --output /tmp/unity-cli-release-perf-v0.19.0-run4-202610191218291e369872plus the version bump (released as907d612d; the commit adds only a CHANGELOG link for fix(deps): zip 9 へ移行し Dependabot #523 の CI RED を解消する #525 on top of the measured tree) (unity-cli 0.19.0), exit 0,matrix.jsonPASS (compile / perf / perf-eval PASS for both Editors), no discarded focus cycles. Load1 was 5.63 at the start, median 7.39, and peaked at 9.46.readA/B gave p50 12.10 ms on v0.18.1 and 12.49 ms on v0.19.0, so there is no CLI startup regression. The PM ruled this host contention./tmp/unity-cli-release-perf-v0.19.0-run4-20261019121829/(matrix.json, each Editor'sperf.json,perf.log,perf-eval.json,perf-eval.log, plus.load.log).Other checks on the release commit:
cargo fmt --all -- --check: PASSunity-cli skills lint --severity error: PASS (23 skills, 0 violations)git diff --check: PASSClosing Issues
Closes #522
Already closed, included in this release: #2, #29, #153, #310, #386, #465, #472, #475, #480, #484, #486, #487, #488, #490, #491, #494, #497, #498, #501, #504, #509, #511, #514, #516, #520, #525
(Collector output referencing issue numbers outside this repository — 50 entries such as #8542 and #29xxx — was removed.)
Related Issues / Links
User Verification Result: n/a (autonomous)
Agent Visual Check: n/a (no UI surface)
🤖 Generated with Claude Code