Skip to content

feat: ローカルレビューとレビュー本文で書きかけのコメントを下書き保存できるようにする - #236

Merged
kyu08 merged 8 commits into
mainfrom
feat/local-review-drafts
Oct 9, 2026
Merged

kyu08 merged 8 commits into
mainfrom
feat/local-review-drafts

Conversation

@kyu08

@kyu08 kyu08 commented Oct 9, 2026

Copy link
Copy Markdown
Collaborator

概要

ローカルレビューモードのコメント入力と、:FudeReviewSubmitのレビュー本文入力で、書きかけの本文をローカルの下書きとして保存できるようにする。これまでこの2経路では閉じるときにYes/Noの破棄確認しか出ず、本文を残せなかった。

Closes #204

変更内容

  • drafts.luaに純粋関数build_draft_scope(st)を追加し、current_key/file_markers/list_draftsのキー名前空間をここに集約した
    • 3関数ともstate.pr_number前提だったため、ローカルモードではキーがnilになり、下書き保存・draftインジケータ・ブラウザのdraft行がすべて無効になっていた
    • ローカルモードは"local:" .. worktree_root+branch(detached HEADではsession id)をキーにする。session idではなくbranchにしたのは、PR番号と同じく:FudeReviewStop→再開後も下書きを残すため。local:はGitHubのowner/repoと名前空間を分けるために付けている
    • キー形式は変えていないので、既存のdrafts.jsonはそのまま読める
  • ローカルモードではissue(PRレベルコメント)とreview(Submit本文)のキーをnilにした。送信先が無く、保存しても消化できない下書き行がブラウザに残るため
  • ローカルの作成/suggest(create_local_comment)に、GitHub側と同じ下書きの配線(prefill、閉じるときのsave/discard、保存成功後の削除)を入れた。reply/editとコメントブラウザは、キーが取れるようになったことで既存の配線がそのまま動く
  • ローカルのreply/edit成功後にrefresh_extmarksを再実行するようにした。ローカルバックエンドは下書き削除より前に再描画するので、そのままだとdraftインジケータが残っていた
  • :FudeReviewSubmitの本文入力を下書き保存できるようにした(kind review)
    • 「Save draft & close」はレビューを送信しない。一時中断の意図と判断したため
    • 「Discard & close」は従来のqと同じく本文なしで送信する
    • 復元した下書きを編集せずに閉じた場合は送信せず下書きを残す。dirtyでないため確認が出ず、そのまま送信すると保存した本文なしでレビューが送られ、成功後に下書きも消えてしまうため
    • 送信成功後の削除はremove_if_unchangedで行う。入力は閉じた後なので、送信中に再度Submitを開いて保存した下書きを消さないようにするため

テスト計画

  • 既存テスト全パス(make all)
  • 新規テスト追加: tests/fude/drafts_spec.lua、tests/fude/local_sync_spec.lua、tests/fude/commands_spec.lua
  • 手動確認: ローカルレビューで行コメント/suggest/reply/editの下書き保存→インジケータ表示→復元→保存で消えること、:FudeReviewStop→再開後も残ること
  • 手動確認: :FudeReviewSubmitで本文を下書き保存→送信されないこと→再度Submitで復元→送信成功で消えること

備考

ローカルモードの行コメント下書きは行番号でキーを作るため、作業ツリーを編集して行がずれると下書きの位置もずれる。GitHubモードの下書きと同じ挙動で、今回は対象外にしている。


Generated with Claude Code

Copilot AI balanced review requested due to automatic review settings October 9, 2026 15:28
@kyu08
kyu08 marked this pull request as ready for review October 9, 2026 15:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

再保存された下書きの削除競合と、comment browser の表示更新順序に不具合があります。

2 open findings
What changed in this PR

ローカルレビューコメントとレビュー本文の下書き保存・復元を追加する変更です。

Changes:

  • ローカルレビュー向けの下書き名前空間を追加
  • :FudeReviewSubmit の本文下書きに対応
  • 関連テストとドキュメントを更新
File Description
lua/​fude/​drafts.lua ローカル用下書きキーを追加
lua/​fude/​comments.lua ローカルコメントの下書きを連携
lua/​fude/​commands.lua レビュー本文の下書きを連携
lua/​fude/​ui/​comment_browser.lua ローカル時の説明を更新
tests/​fude/​drafts_spec.lua 名前空間と一覧表示を検証
tests/​fude/​local_sync_spec.lua ローカル下書きフローを検証
tests/​fude/​commands_spec.lua レビュー本文下書きを検証
README.md 利用方法を追記
doc/​fude.txt ヘルプを更新
CLAUDE.md アーキテクチャ説明を更新

🧠 Review effort: Balanced


💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread lua/fude/commands.lua
Comment thread lua/fude/drafts.lua
return nil
end
return M.make_draft_key(M.repo_slug(st.pr_url) or "?", st.pr_number, kind, ...)
return M.make_draft_key(repo, id, kind, ...)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cb7b772 で修正 — restore_lower_after_submit で下書きを削除した後に refresh() と refresh_visible_extmarks() を呼ぶ形にし、呼び出し元の直後の refresh() を削除した。ローカルモードでブラウザからreplyを送信したあと ✎draft が消えることを確認するテストを追加した。

Copilot AI balanced review requested due to automatic review settings October 9, 2026 15:35

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

下書き保存・破棄後の表示同期とレビュー本文の操作案内に修正が必要です。

3 open findings
1 resolved since last review

🧠 Review effort: Balanced

Comment on lines +860 to 862
-- key is nil when there is no draft target (e.g. a PR-level comment in
-- local review mode); disable the no-op save-draft option.
allow_draft = key ~= nil and drafts.enabled(),
Comment thread lua/fude/commands.lua
end)
end, {
title = " Review Body (optional) ",
footer = " <CR> submit | q skip body ",
Copilot AI balanced review requested due to automatic review settings October 9, 2026 15:39

@kyu08 kyu08 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comment test

@kyu08
kyu08 merged commit 915108b into main Oct 9, 2026
9 checks passed
@kyu08
kyu08 deleted the feat/local-review-drafts branch October 9, 2026 15:42

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

ローカルの reply/edit 下書きが停止後に復元不能になる問題と、UI文言および日付の不整合があります。

3 open findings
Previously missed (1)

In code that hasn't changed since last review

Medium severity 停止後にreply/edit下書きを復元できず消失する

lua/​fude/​drafts.lua:116

ローカル scope を常に worktree + branch にすると、reply/edit の下書きは :FudeReviewStop 後に復元できません。stop() は current pointer を消すため、同じ branch で再開しても新しい session file が作られ、元コメントの UUID は comment_map に存在しません。その結果、これらの下書きは merge_draft_entries でスキップされ、表示も消化もできないまま残ります。PR 説明どおり reply/edit も stop をまたいで残すなら対象スレッドの復元手段が必要です。そうしないなら、少なくとも reply/edit は session 単位にして stop 時に破棄し、ドキュメントの「survive :FudeReviewStop」対象を line/suggest に限定してください。

🧠 Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings October 9, 2026 15:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

復元時の操作と一致しない footer 表示、および未来日付の修正が必要です。

3 open findings

🧠 Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

書きかけのレビューコメントをlocalに保存できるようにする

2 participants