fix: CLI JSON output now uses consistent field names#1360
Conversation
Format the live tool catalog before printing so users see the flags the native CLI actually accepts instead of C# schema property names. Keep sync/cache payloads raw and cover command-specific aliases plus the CLI-only code-file option.
Standardize Unity JSON-RPC response serialization and Go CLI output structs on camelCase so PowerShell and JSON consumers can aggregate command results consistently. Keep the IPC protocol generation unchanged because the CLI/package wire exchange remains interoperable while the user-facing response keys change.
Refresh generated skill docs with lower camel JSON fields, normalize uloop list option metadata, and keep protocol-2 internal control fields strippable while public response keys move to camelCase.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (29)
✅ Files skipped from review due to trivial changes (18)
🚧 Files skipped from review as they are similar to previous changes (5)
📝 WalkthroughWalkthroughThe PR standardizes many uloop JSON contracts to camelCase, updates Unity and CLI serializers plus tests and scripts, and adds Codex skill documentation with new reference guides and list-output formatting. ChangesCamelCase response contract rollout
Codex skill catalog and reference additions
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
6 issues found across 123 files
Note: This PR contains a large number of files. cubic only reviews up to 100 files per PR, so some files may not have been reviewed. cubic prioritizes the most important files to review.
On a pro plan you can use ultrareview for larger PRs.
Re-trigger cubic
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (1)
.codex/skills/uloop-replay-input/SKILL.md (1)
41-41: 💤 Low valueMinor wording improvement: replace "exact same" with a more concise alternative.
The phrase "exact same" on line 41 is slightly redundant. Consider using "identical" for brevity:
Replay injects identical input frame-by-frame, but the game must also be deterministic...
This is a style suggestion with no impact on clarity or accuracy.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.codex/skills/uloop-replay-input/SKILL.md at line 41, The phrase "exact same" in the sentence describing how Replay injects input is redundant. Replace "exact same" with the single word "identical" for improved conciseness. The corrected sentence should read: "Replay injects identical input frame-by-frame, but the game must also be deterministic to produce identical results."
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.codex/skills/uloop-execute-dynamic-code/references/scene-operations.md:
- Around line 91-104: The code examples in
.codex/skills/uloop-execute-dynamic-code/references/scene-operations.md are
missing the required namespace import for List<T>. At the anchor location in
lines 91-104 (the "Get All Children" example), add using
System.Collections.Generic; at the beginning of the code block before the
List<string> instantiation. Apply the same fix at the sibling location in lines
169-178 (the "Get All Root GameObjects in Scene" example), adding using
System.Collections.Generic; before the List<string> declaration there as well.
This ensures both code examples are complete and compilable as provided in the
documentation.
In @.codex/skills/uloop-hello-world/SKILL.md:
- Around line 42-45: The output field names in the Returns JSON documentation
section are documented in PascalCase (Message, Language, Timestamp) but should
be changed to camelCase (message, language, timestamp) to align with the PR's
standardization of response serialization for consistency across JSON consumers.
Update all three field name references in the documented output to use the
camelCase naming convention.
In @.codex/skills/uloop-wait-for-pause-point/SKILL.md:
- Around line 35-37: In the SKILL.md file documentation, update the field name
references on line 37 to use camelCase to match the actual JSON response format.
Change the documented field names from PascalCase (`Generation`, `EnabledAtUtc`,
`RemainingMilliseconds`, `Expired`) to their correct camelCase equivalents
(`generation`, `enabledAtUtc`, `remainingMilliseconds`, `expired`) to be
consistent with the camelCase convention shown in line 35 with
`editorState.capturedAt`.
In `@cli/internal/cli/pause_point_wait_test.go`:
- Around line 527-529: The string contains check for "\"matchingLogs\": []" is
brittle because it depends on exact JSON formatting with specific whitespace.
Replace this assertion by unmarshaling the JSON output from stdout.String() into
a struct or map, then verify that the matchingLogs field is present and contains
an empty array by checking its length or value, rather than relying on string
pattern matching. This makes the test robust to different JSON formatting while
still validating the required behavior.
---
Nitpick comments:
In @.codex/skills/uloop-replay-input/SKILL.md:
- Line 41: The phrase "exact same" in the sentence describing how Replay injects
input is redundant. Replace "exact same" with the single word "identical" for
improved conciseness. The corrected sentence should read: "Replay injects
identical input frame-by-frame, but the game must also be deterministic to
produce identical results."
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 795f7867-5d51-47c0-bcd9-a04d215e746c
⛔ Files ignored due to path filters (5)
Assets/Tests/Demo/scripts/verify-replay-via-cli.ps1is excluded by none and included by nonePackages/src/Editor/Infrastructure/Api/JsonRpcResponseSerializer.cs.metais excluded by none and included by nonescripts/refresh-neighbor-game-skills-windows.ps1is excluded by none and included by nonescripts/run-windows-e2e.ps1is excluded by none and included by nonescripts/test-simulate-mouse-demo.ps1is excluded by none and included by none
📒 Files selected for processing (118)
.agents/skills/uloop-clear-console/SKILL.md.agents/skills/uloop-compile/SKILL.md.agents/skills/uloop-control-play-mode/SKILL.md.agents/skills/uloop-execute-dynamic-code/SKILL.md.agents/skills/uloop-focus-window/SKILL.md.agents/skills/uloop-get-logs/SKILL.md.agents/skills/uloop-launch/SKILL.md.agents/skills/uloop-record-input/SKILL.md.agents/skills/uloop-replay-input/SKILL.md.agents/skills/uloop-run-tests/SKILL.md.agents/skills/uloop-screenshot/SKILL.md.agents/skills/uloop-screenshot/references/annotated-elements.md.agents/skills/uloop-simulate-keyboard/SKILL.md.agents/skills/uloop-simulate-mouse-input/SKILL.md.agents/skills/uloop-simulate-mouse-ui/SKILL.md.agents/skills/uloop-wait-for-pause-point/SKILL.md.claude/skills/simulate-mouse-demo/SKILL.md.claude/skills/uloop-clear-console/SKILL.md.claude/skills/uloop-compile/SKILL.md.claude/skills/uloop-control-play-mode/SKILL.md.claude/skills/uloop-execute-dynamic-code/SKILL.md.claude/skills/uloop-focus-window/SKILL.md.claude/skills/uloop-get-logs/SKILL.md.claude/skills/uloop-launch/SKILL.md.claude/skills/uloop-record-input/SKILL.md.claude/skills/uloop-replay-input/SKILL.md.claude/skills/uloop-run-tests/SKILL.md.claude/skills/uloop-screenshot/SKILL.md.claude/skills/uloop-screenshot/references/annotated-elements.md.claude/skills/uloop-simulate-keyboard/SKILL.md.claude/skills/uloop-simulate-mouse-input/SKILL.md.claude/skills/uloop-simulate-mouse-ui/SKILL.md.claude/skills/uloop-wait-for-pause-point/SKILL.md.codex/skills/uloop-clear-console/SKILL.md.codex/skills/uloop-compile/SKILL.md.codex/skills/uloop-control-play-mode/SKILL.md.codex/skills/uloop-execute-dynamic-code/SKILL.md.codex/skills/uloop-execute-dynamic-code/references/asset-operations.md.codex/skills/uloop-execute-dynamic-code/references/batch-operations.md.codex/skills/uloop-execute-dynamic-code/references/cleanup-operations.md.codex/skills/uloop-execute-dynamic-code/references/material-operations.md.codex/skills/uloop-execute-dynamic-code/references/playmode-automation-powershell.md.codex/skills/uloop-execute-dynamic-code/references/playmode-automation-zsh.md.codex/skills/uloop-execute-dynamic-code/references/playmode-inspection.md.codex/skills/uloop-execute-dynamic-code/references/playmode-ui-controls.md.codex/skills/uloop-execute-dynamic-code/references/prefab-operations.md.codex/skills/uloop-execute-dynamic-code/references/scene-operations.md.codex/skills/uloop-execute-dynamic-code/references/scriptableobject.md.codex/skills/uloop-execute-dynamic-code/references/selection-operations.md.codex/skills/uloop-execute-dynamic-code/references/undo-operations.md.codex/skills/uloop-find-game-objects/SKILL.md.codex/skills/uloop-focus-window/SKILL.md.codex/skills/uloop-get-hierarchy/SKILL.md.codex/skills/uloop-get-logs/SKILL.md.codex/skills/uloop-hello-world/SKILL.md.codex/skills/uloop-launch/SKILL.md.codex/skills/uloop-record-input/SKILL.md.codex/skills/uloop-record-input/references/deterministic-replay.md.codex/skills/uloop-replay-input/SKILL.md.codex/skills/uloop-replay-input/references/deterministic-replay.md.codex/skills/uloop-run-tests/SKILL.md.codex/skills/uloop-screenshot/SKILL.md.codex/skills/uloop-screenshot/references/annotated-elements.md.codex/skills/uloop-simulate-keyboard/SKILL.md.codex/skills/uloop-simulate-mouse-input/SKILL.md.codex/skills/uloop-simulate-mouse-ui/SKILL.md.codex/skills/uloop-wait-for-pause-point/SKILL.mdAssets/Tests/Demo/scripts/verify-replay-via-cli.shAssets/Tests/Editor/CompileSessionResultServiceTests.csAssets/Tests/Editor/CompileStatusBridgeCommandTests.csAssets/Tests/Editor/DynamicCodeToolTests/ExecuteDynamicCodeUseCaseTests.csAssets/Tests/Editor/JsonRpcProcessorCliVersionGateTests.csPackages/src/Editor/CliOnlyTools~/FocusWindow/Skill/SKILL.mdPackages/src/Editor/CliOnlyTools~/Launch/Skill/SKILL.mdPackages/src/Editor/CliOnlyTools~/PausePoint/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/ClearConsole/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/Compile/CompileSessionResultService.csPackages/src/Editor/FirstPartyTools/Compile/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/ControlPlayMode/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/ExecuteDynamicCode/ExecuteDynamicCodeResponse.csPackages/src/Editor/FirstPartyTools/ExecuteDynamicCode/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/GetLogs/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/RecordInput/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/ReplayInput/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/RunTests/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/Screenshot/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/Screenshot/Skill/references/annotated-elements.mdPackages/src/Editor/FirstPartyTools/SimulateKeyboard/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/SimulateMouseInput/Skill/SKILL.mdPackages/src/Editor/FirstPartyTools/SimulateMouseUi/Skill/SKILL.mdPackages/src/Editor/Infrastructure/Api/CompileStatusBridgeCommand.csPackages/src/Editor/Infrastructure/Api/JsonRpcProcessor.csPackages/src/Editor/Infrastructure/Api/JsonRpcResponseSerializer.cscli/internal/cli/busy_status.gocli/internal/cli/compile_wait.gocli/internal/cli/compile_wait_test.gocli/internal/cli/control_play_mode_wait.gocli/internal/cli/control_play_mode_wait_test.gocli/internal/cli/debug_timing.gocli/internal/cli/debug_timing_test.gocli/internal/cli/dynamic_code_wait.gocli/internal/cli/focus.gocli/internal/cli/launch_ready.gocli/internal/cli/launch_test.gocli/internal/cli/list_output.gocli/internal/cli/list_output_test.gocli/internal/cli/pause_point_logs.gocli/internal/cli/pause_point_wait.gocli/internal/cli/pause_point_wait_test.gocli/internal/cli/run.gocli/internal/cli/tool_readiness.gocli/internal/cli/tools_test.gocli/internal/tools/types.goscripts/refresh-neighbor-game-skills-macos.shscripts/refresh-neighbor-game-skills-windows.shscripts/smoke-cli-recovery-readiness.goscripts/test-simulate-mouse-demo.shscripts/test-smoke-cli-recovery-readiness.sh
Align source and generated skill docs with camelCase JSON fields, add safer dynamic-code examples, and make the pause-point test parse JSON instead of relying on response formatting.
Summary
uloop list --jsonnow shows the actual CLI option names users pass on the command line, including aliases such as--capture-modeand--stop-on-external-scene-changes.User Impact
Screenshots,Result, ortotalFound.Changes
uloop list --jsonoption names/defaults, including numeric enum defaults from Unity-generated tool schemas.Verification
bash -lc "./scripts/check-go-cli.sh"./cli/dist/windows-amd64/uloop.exe compile --project-path <PROJECT_ROOT>./cli/dist/windows-amd64/uloop.exe run-tests --project-path <PROJECT_ROOT> --test-mode EditMode --filter-type regex --filter-value 'ExecuteDynamicCodeResponse_WhenSerialized.*'./cli/dist/windows-amd64/uloop.exe execute-dynamic-code --project-path <PROJECT_ROOT> --code 'return "ok";'./cli/dist/windows-amd64/uloop.exe screenshot --project-path <PROJECT_ROOT> --capture-mode window --output-directory .uloop/outputs/review-screenshotcd cli && go run ./cmd/check-protocol-minimum-version --base origin/v3-beta --head HEADC:\Users\booql\.codex\skills\codex-review\scripts\codex-review.ps1 --output <TEMP_OUTPUT> v3-beta