Spec
背景
unity-cli を C# 編集の主経路にして、apply_patch をフォールバックに落としたいです。実際に Unity プロジェクトを編集してみると、読み取りはかなり良い一方で、書き込みはまだ apply_patch を完全には置き換えられていません。
関連:
課題
LSP 書き込みがデフォルトで使えない
insert_before_symbol などが UNITY_CLI_LSP_MODE=auto or required を要求する
書き込み系だけ追加の前提が必要で UX が不連続
書き込み結果が null になることがある
replace_symbol_body / insert_before_symbol 実行後に null が返るケースがある
成功・no-op・失敗の判別がしづらい
symbol ベース挿入が不安定
insert_before_symbol / insert_after_symbol が、対象シンボルが見えていても実ファイルに反映されないケースがある
成功判定と実際の変更がずれると厳しい
get_symbols が編集判断に十分でないことがある
ファイルによっては、メソッドが十分に列挙されず field/class 中心になるケースがある
namePath をそのまま write tool に渡せる一貫性が必要
任意の C# ファイル新規作成が足りない
create_class は便利だが、interface / enum / test file / 複数型を含むファイル / editor utility の作成には不足
全文置換の validated write が欲しい
validate_text_edits と別手段の apply を組み合わせる必要があり、ワークフローが分かれる
複数ファイルを一括で atomic に編集したい
interface + implementation + tests を同時に変えることが多い
1 ファイルずつだと途中失敗時に整合が崩れる
編集後の再インデックス / 再コンパイル待機を一体化したい
write -> refresh -> compile state poll -> symbols re-check を毎回やる必要がある
Project Settings / SettingsManagement を触る API が欲しい
Code Coverage 設定のようなユースケースで editor utility を別途書く必要がある
SettingsManagement ベースの project/user settings を直接触れれば、C# utility を増やさずに済む
欲しいコマンド案
write_csharp_file(relative, newText, validate=true, apply=true)
create_csharp_file(relative, text, validate=true, apply=true)
apply_csharp_edits(files, validate=true, apply=true)
write 系既存 tool の stronger contract
get_project_setting / set_project_setting
get_package_setting / set_package_setting
受け入れ基準
UNITY_CLI_LSP_MODE を明示しなくても書き込み系が動作する
書き込み系コマンドが null を返さない
symbol 挿入/置換で、実際に変更が入ったかを確実に判定できる
interface / enum / test / utility を含む任意 C# ファイルを apply_patch なしで新規作成できる
3 ファイル以上の関連修正を atomic に適用できる
書き込み後に compile diagnostics まで受け取れる
package/project settings の変更のために追加の editor utility を書かずに済む
Plan
issue 機能仕様書: apply_patch不要を目指すC#編集ワークフロー強化 #107 を gwt-spec 化し、Spec/Plan/Tasks/TDD を単一情報源として維持する
write 系の default LSP 化、共通レスポンス contract、namePath 正規化を先に実装する
write_csharp_file / create_csharp_file / apply_csharp_edits と post-write pipeline を実装する
get_project_setting / set_project_setting / get_package_setting / set_package_setting を追加する
Rust / LSP / Unity bridge のテストを追加し、品質ゲートを通す
Tasks
TDD
RED: まず write contract、namePath、新 API、settings API の失敗テストを追加する
GREEN: 既存 LSP / Unity bridge の基盤を再利用して最小実装で通す
REFACTOR: multi-file apply helper、post-write pipeline、settings handler を整理する
受け入れ基準に対応する統合テストを最後に揃える
Spec
背景
unity-cliを C# 編集の主経路にして、apply_patchをフォールバックに落としたいです。実際に Unity プロジェクトを編集してみると、読み取りはかなり良い一方で、書き込みはまだapply_patchを完全には置き換えられていません。関連:
課題
insert_before_symbolなどがUNITY_CLI_LSP_MODE=auto or requiredを要求するnullになることがあるreplace_symbol_body/insert_before_symbol実行後にnullが返るケースがあるinsert_before_symbol/insert_after_symbolが、対象シンボルが見えていても実ファイルに反映されないケースがあるget_symbolsが編集判断に十分でないことがあるnamePathをそのまま write tool に渡せる一貫性が必要create_classは便利だが、interface / enum / test file / 複数型を含むファイル / editor utility の作成には不足validate_text_editsと別手段の apply を組み合わせる必要があり、ワークフローが分かれるwrite -> refresh -> compile state poll -> symbols re-checkを毎回やる必要があるSettingsManagementベースの project/user settings を直接触れれば、C# utility を増やさずに済む欲しいコマンド案
write_csharp_file(relative, newText, validate=true, apply=true)create_csharp_file(relative, text, validate=true, apply=true)apply_csharp_edits(files, validate=true, apply=true)get_project_setting/set_project_settingget_package_setting/set_package_setting受け入れ基準
UNITY_CLI_LSP_MODEを明示しなくても書き込み系が動作するnullを返さないapply_patchなしで新規作成できるPlan
gwt-spec化し、Spec/Plan/Tasks/TDD を単一情報源として維持するnamePath正規化を先に実装するwrite_csharp_file/create_csharp_file/apply_csharp_editsと post-write pipeline を実装するget_project_setting/set_project_setting/get_package_setting/set_package_settingを追加するTasks
gwt-specラベルを付け、進捗コメント運用を開始するsuccess/applied/changedFiles/changedSymbols/diagnostics/diffPreview/reason/backendに統一するget_symbolsと write tool のnamePath整合を修正するwrite_csharp_fileを追加するcreate_csharp_fileを追加するapply_csharp_editsを追加するget_project_setting/set_project_settingを追加するget_package_setting/set_package_settingを追加するcargo fmt --all -- --checkcargo clippy --all-targets -- -D warningscargo test --all-targetsdotnet test lsp/Server.Tests.csprojTDD
namePath、新 API、settings API の失敗テストを追加する