Skip to content

fix: コードレビューで見つかった 3 件の不具合を修正#264

Merged
kkyosuke merged 3 commits into
mainfrom
fix/review-findings
Jun 21, 2026
Merged

fix: コードレビューで見つかった 3 件の不具合を修正#264
kkyosuke merged 3 commits into
mainfrom
fix/review-findings

Conversation

@kkyosuke

Copy link
Copy Markdown
Owner

目的

コードベース全体レビューで確認した実害のある 3 件の不具合を修正する。いずれも独立した修正のためコミットを分けている。

変更内容

#1 非強制削除で未コミット作業を消さない (fix(session))

discard_sessiongit::remove_worktree の結果を let _ = で握り潰したまま fs::remove_dir_all を無条件に実行していた。remove の事前 dirty チェックをすり抜けた worktree(チェック後に dirty 化/locked)に対し非強制で削除が失敗しても、セッションディレクトリが削除され、未コミット作業の消失宙ぶらりんの worktree 登録が残り得た。

  • force 時は従来どおり best-effort。非強制時は remove_worktree の失敗を伝播し、ディレクトリ削除の前に中断するようにした。
  • 未登録/未構築のパスは Ok を返すため、部分的に解体済みのセッションは引き続き許容する。

#2 bracketed-paste の終端マーカー除去 (fix(tui))

没入の埋め込みターミナルへの貼り付けを bracketed paste で囲む際、貼り付けテキスト自身に終端マーカー ESC[201~ が含まれていると、受信プログラムがペーストを途中で打ち切り、残りを生のキー入力として実行してしまう(paste injection)。実端末と同様に、ラップ前に本文中の終端マーカーを除去するようにした。

#3 frontmatter スカラの前後空白を round-trip で保持 (fix(domain))

issue の title/milestone、memory の name/title はパース時に値全体を trim() していたため、前後に空白を持つ値が再読み込みで失われていた(リスト項目は \s エスケープで境界空白を厳密に保持しているのに対し非対称だった)。書き出しの区切りスペース 1 個だけを strip し、ユーザー自身の前後空白は保持するようにした。数値・enum・リスト・タイムスタンプは従来どおり trim する。

テスト・確認方法

  • cargo fmt / cargo clippy --all-targets -- -D warnings / cargo test1453 passed)。
  • カバレッジ 100%(lines / functions、scripts/coverage.shcoverage_enforce、exit 0)。
  • 追加テスト:
    • discard_session_without_force_aborts_on_a_dirty_worktree_and_keeps_it — dirty worktree での非強制削除が中断しディレクトリを残すこと。
    • encode_paste_strips_an_embedded_end_marker ほか — 終端マーカー除去・非ブラケット時の素通し・通常ラップ。
    • title_and_milestone_preserve_boundary_spaces_on_round_trip / name_and_title_preserve_boundary_spaces_on_round_trip — 境界空白の round-trip。

🤖 Generated with Claude Code

test and others added 3 commits June 21, 2026 16:56
issue の title/milestone、memory の name/title はパース時に value 全体を
trim していたため、前後に空白を持つ値が再読み込みで失われていた(リスト項目は
\s エスケープで境界空白を厳密に保持しているのに対し非対称だった)。

書き出しは `key: <value>` と区切りスペース 1 個だけを前置するので、パース側も
その 1 個だけを strip し、ユーザー自身の前後空白は保持するようにした。数値・
enum・リスト・タイムスタンプは従来どおり trim する。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
没入の埋め込みターミナルへの貼り付けを bracketed paste で囲む際、貼り付け
テキスト自身に終端マーカー `ESC[201~` が含まれていると、受信プログラムが
ペーストを途中で打ち切り、残りを生のキー入力として解釈してしまう
(paste injection)。実端末と同様に、ラップ前に本文中の終端マーカーを除去する
ようにした。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
discard_session は remove_worktree の結果を `let _ =` で握り潰してから
`fs::remove_dir_all` を無条件に実行していた。remove の事前 dirty チェックを
すり抜けた worktree(チェック後に dirty 化/locked)に対し非強制で
remove_worktree が失敗しても、セッションディレクトリは削除され、未コミット
作業の消失と宙ぶらりんの worktree 登録が残り得た。

force 時は従来どおり best-effort のまま、非強制時は remove_worktree の失敗を
伝播してディレクトリ削除の前に中断するようにした。未登録/未構築のパスは
Ok を返すため、部分的に解体済みのセッションは引き続き許容する。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

📊 Test Coverage

🚀 いまのカバレッジ (Lines): 100.00% — この調子でいこう!

🎉✨ パーフェクト!全ファイル Lines カバレッジ 100% を達成しました 🏆🐰

@kkyosuke kkyosuke merged commit fa0dcd0 into main Jun 21, 2026
3 checks passed
@kkyosuke kkyosuke deleted the fix/review-findings branch June 21, 2026 08:29
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.

1 participant