The friction log and HUD artifacts were created in worktree nice-hamilton (branch dlight/nice-hamilton). The friction log is at:
.claude/worktrees/nice-hamilton/docs/friction-log-cyberpunk-hud.md
The fixes themselves should be done on a new branch from main (not in nice-hamilton) since they modify server/plugin code. The HUD files in nice-hamilton are test artifacts — don't modify them.
We built a cyberpunk HUD in test_project/ using only MCP tools as a stress test. The friction log documents 12 issues found during the exercise. Your job is to fix them, following the project's conventions in CLAUDE.md and the skill file at ~/.claude/skills/godot-ai/skill.md.
Fix these issues in priority order. Each fix needs: GDScript handler change, Python handler/tool change, Python tests, and GDScript tests. Follow the "Adding a new tool" checklist in CLAUDE.md. Run pytest -v and test_run before considering any batch done.
-
theme_createauto-create parent directories (friction #1): AddDirAccess.make_dir_recursive_p()before saving in the theme handler'screate_thememethod. Same fix should apply toscript_createand any other file-creating handler. -
ui_build_layoutsupporttheme_override_*properties (friction #7): Inui_handler.gd's_apply_property(), the property path lookup viaClassDBwon't findtheme_override_*paths. These need special handling — detect thetheme_override_prefix and useadd_theme_*_override()methods instead ofset(). The three sub-paths aretheme_override_colors/,theme_override_constants/,theme_override_font_sizes/. -
theme_set_stylebox_flatper-side parameters (friction #5 + #11): Add optionalborder_width_top,border_width_bottom,border_width_left,border_width_right,corner_radius_top_left,corner_radius_top_right,corner_radius_bottom_left,corner_radius_bottom_right, andcontent_margin_top/bottom/left/rightparameters. When provided, these override the uniform value. StyleBoxFlat already has these properties natively. -
editor_screenshot source="game"fix (friction #4): Thetake_screenshothandler ineditor_handler.gdlikely has a KeyError when accessing thesourceparam. Debug the handler, find the bug, and fix it. Add a test that captures a game-view screenshot whileproject_runis active.
-
Scene instancing tool (friction #3): Add a
scene_instancetool (or extendnode_createwith an optionalscene_pathparam). GDScript side:load(scene_path).instantiate(), add as child with undo support. This is essential for composition workflows. -
animation_deletetool (friction #9): Addanimation_delete(player_path, animation_name)that removes a clip from the AnimationPlayer's library. Also consider adding anoverwrite: bool = falseparam toanimation_createandanimation_create_simple. -
Allow renaming scene root (friction #2): Remove the restriction in
node_rename. Godot's editor allows this viaEditorUndoRedoManager.
-
scene_openreadiness race (friction #10): The play-state transition fromproject_stopdoesn't fully settle before readiness flips toready. Either add a small delay in the readiness handler, or havescene_open(and other write tools) internally wait for play-state to fully resolve. -
signal_connectautoload support (friction #8): When source/target path resolution fails against the edited scene tree, checkProjectSettings.get_setting("autoload/*")to resolve autoload node paths. This lets agents wire signals to singletons. -
Animation track path update/validation (friction #12): Add
animation_validate(player_path, animation_name)that checks all track paths resolve to actual nodes. Optionally addanimation_update_track_path(player_path, animation_name, track_index, new_path).
- Follow the pre-commit smoke test checklist in CLAUDE.md
- Every fix gets Python unit tests, integration tests, AND GDScript tests
- Open a PR for each tier (or one PR per tier)
- Don't change the cyberpunk HUD files — they're the test artifact