Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 0 additions & 86 deletions .agents/skills/uloop-verify-project/SKILL.md

This file was deleted.

86 changes: 0 additions & 86 deletions .claude/skills/uloop-verify-project/SKILL.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: uloop-verify-project
description: "Check a Unity project's files without starting Unity: missing or orphaned .meta files, invalid or duplicate GUIDs, leftover merge conflict markers, and a broken Packages/manifest.json. Use after adding, moving, renaming, deleting, or merging assets, and before committing."
internal: true
---

# uloop verify-project
Expand Down
6 changes: 1 addition & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -243,13 +243,12 @@ That's it! After installing Skills, LLM tools can automatically handle instructi


<details>
<summary>All 23 Bundled Skills</summary>
<summary>All 22 Bundled Skills</summary>

- `/uloop-launch` - Launch Unity with correct version
- `/uloop-status` - Check whether Unity can take a command now
- `/uloop-cancel` - Cancel the command Unity is running now, when BUSY keeps rejecting commands
- `/uloop-compile` - Execute compilation
- `/uloop-verify-project` - Check .meta files, GUIDs, conflict markers, and the package manifest without Unity
- `/uloop-get-logs` - Get console logs
- `/uloop-run-tests` - Run tests
- `/uloop-hot-reload` - Apply method-body changes to running code instantly, without recompiling
Expand Down Expand Up @@ -289,9 +288,6 @@ uloop launch -p Android
# Kill running Unity and restart
uloop launch -r

# Check .meta files, GUIDs, and conflict markers without Unity
uloop verify-project

# Execute compilation
uloop compile

Expand Down
6 changes: 1 addition & 5 deletions README_ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -243,13 +243,12 @@ V2 のプロジェクトの Settings ウィンドウで **Update CLI** や **Dow


<details>
<summary>バンドルされている全23個のSkills一覧</summary>
<summary>バンドルされている全22個のSkills一覧</summary>

- `/uloop-launch` - 正しいバージョンでUnityを起動
- `/uloop-status` - Unityが今コマンドを受け付けられるかを確認
- `/uloop-cancel` - BUSYでコマンドが拒否され続けるときに、Unityが実行中のコマンドをキャンセル
- `/uloop-compile` - コンパイルの実行
- `/uloop-verify-project` - Unityを起動せずに.metaファイル・GUID・コンフリクトマーカー・パッケージmanifestを検査
- `/uloop-get-logs` - Consoleログの取得
- `/uloop-run-tests` - テストの実行
- `/uloop-hot-reload` - メソッド本体の変更を再コンパイルなしで実行中のコードへ即時適用
Expand Down Expand Up @@ -289,9 +288,6 @@ uloop launch -p Android
# 実行中のUnityを終了して再起動
uloop launch -r

# Unityを起動せずに.metaファイル・GUID・コンフリクトマーカーを検査
uloop verify-project

# コンパイルを実行
uloop compile

Expand Down
2 changes: 1 addition & 1 deletion cli/common/clicore/command_errors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
func TestAvailableCommandNamesIncludesBuiltIns(t *testing.T) {
// Verifies unknown-command suggestions include visible built-in CLI commands before cached tools.
names := availableCommandNames(ToolsCache{})
expectedBuiltIns := []string{"launch", "verify-project", "list", "sync", "focus-window", "await-pause-point", "pause-point-status", "set-code-optimization", "status", "cancel", "skills", "package", "install", "update", "uninstall"}
expectedBuiltIns := []string{"launch", "list", "sync", "focus-window", "await-pause-point", "pause-point-status", "set-code-optimization", "status", "cancel", "skills", "package", "install", "update", "uninstall"}
for index, expected := range expectedBuiltIns {
if names[index] != expected {
t.Fatalf("built-in command mismatch: %#v", names)
Expand Down
4 changes: 3 additions & 1 deletion cli/common/clicore/command_registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ var NativeCommands = []NativeCommandEntry{
// Why compile-check is hidden: its place beside `uloop compile` is not settled, so it stays
// runnable for development while nothing user-facing advertises it (ADR 0018, amendment).
{Name: CompileCheckCommandName, Description: "Compile changed assemblies with the Editor's bundled C# compiler without launching Unity", Owner: DispatcherOwned, Hidden: true},
{Name: VerifyProjectCommandName, Description: "Check .meta files, GUIDs, merge conflict markers, and Packages/manifest.json without Unity", Owner: DispatcherOwned},
// Why verify-project is hidden: Unity's official CLI already covers these project-file checks,
// so this project does not need to offer its own.
{Name: VerifyProjectCommandName, Description: "Check .meta files, GUIDs, merge conflict markers, and Packages/manifest.json without Unity", Owner: DispatcherOwned, Hidden: true},
{Name: "list", Description: "Show Unity tools currently exposed by the Editor", Owner: RunnerOwned},
{Name: "sync", Description: "Refresh .uloop/tools.json from the running Editor", Owner: RunnerOwned},
{Name: "focus-window", Description: "Bring the Unity Editor window to the foreground", Owner: RunnerOwned},
Expand Down
35 changes: 23 additions & 12 deletions cli/common/clicore/command_registry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,23 +141,34 @@ func TestVisibleNativeCommandsLeaveOutAHiddenEntry(t *testing.T) {
}
}

// Verifies compile-check is registered as a hidden dispatcher-owned command: routable by name but
// left out of the listed commands and of completion while its place beside `uloop compile` is open.
func TestCompileCheckIsRoutableButNotListed(t *testing.T) {
if !IsDispatcherOwnedCommandName(CompileCheckCommandName) {
t.Fatalf("%s must stay registered as a dispatcher-owned command", CompileCheckCommandName)
// Verifies compile-check and verify-project are registered as hidden dispatcher-owned commands:
// routable by name but left out of the listed commands and of completion, and that no other
// command is hidden.
func TestHiddenDispatcherCommandsAreRoutableButNotListed(t *testing.T) {
hiddenCommands := []string{CompileCheckCommandName, VerifyProjectCommandName}
for _, command := range hiddenCommands {
assertRoutableButNotListed(t, command)
}
if len(VisibleNativeCommands()) != len(NativeCommands)-len(hiddenCommands) {
t.Fatalf("only %v should be hidden: %#v", hiddenCommands, VisibleNativeCommands())
}
}

// assertRoutableButNotListed fails the test unless command stays dispatcher-owned while help and
// completion leave it out.
func assertRoutableButNotListed(t *testing.T, command string) {
t.Helper()
if !IsDispatcherOwnedCommandName(command) {
t.Fatalf("%s must stay registered as a dispatcher-owned command", command)
}
for _, entry := range VisibleNativeCommands() {
if entry.Name == CompileCheckCommandName {
t.Fatalf("%s must not be listed: %#v", CompileCheckCommandName, VisibleNativeCommands())
if entry.Name == command {
t.Fatalf("%s must not be listed: %#v", command, VisibleNativeCommands())
}
}
for _, name := range NativeCommandNamesForCompletion() {
if name == CompileCheckCommandName {
t.Fatalf("%s must not be offered as a completion: %#v", CompileCheckCommandName, NativeCommandNamesForCompletion())
if name == command {
t.Fatalf("%s must not be offered as a completion: %#v", command, NativeCommandNamesForCompletion())
}
}
if len(VisibleNativeCommands()) != len(NativeCommands)-1 {
t.Fatalf("only %s should be hidden: %#v", CompileCheckCommandName, VisibleNativeCommands())
}
}
2 changes: 0 additions & 2 deletions cli/common/tooldocs/skill_guidance.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ var commandSkillNames = map[string]string{
"enable-watch": "uloop-pause-point",
"clear-watch": "uloop-pause-point",
"get-watch-values": "uloop-pause-point",

"verify-project": "uloop-verify-project",
}

// SkillGuidanceLine returns the closing line of a command's --help output: an instruction to load
Expand Down
14 changes: 8 additions & 6 deletions cli/common/tooldocs/skill_guidance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@ func TestSkillGuidanceLineNamesTheMatchingSkill(t *testing.T) {
}
}

// Verifies the hidden compile-check command gets no skill guidance line: its skill is internal and
// not installed, so pointing at it would send the reader to a skill that does not exist.
func TestSkillGuidanceLineLeavesOutTheHiddenCompileCheckCommand(t *testing.T) {
line, ok := SkillGuidanceLine("compile-check")
if ok {
t.Errorf("guidance line = %q, want none while compile-check is hidden", line)
// Verifies the hidden compile-check and verify-project commands get no skill guidance line: their
// skills are internal and not installed, so pointing at one would send the reader to a skill that
// does not exist.
func TestSkillGuidanceLineLeavesOutHiddenCommands(t *testing.T) {
for _, command := range []string{"compile-check", "verify-project"} {
if line, ok := SkillGuidanceLine(command); ok {
t.Errorf("%s guidance line = %q, want none while the command is hidden", command, line)
}
}
}

Expand Down
Loading
Loading