Skip to content
frontmatter
キー値
specdojo.idprj-0001:pjr-b2ec-resume-identical-untracked-restore
specdojo.typeproject
specdojo.statusready
specdojo.rulebookspecdojo:pjr-rulebook
specdojo.part_ofprj-0001:pjr-index
specdojo.item_typeissue
specdojo.item_statusdone
specdojo.prioritymedium
specdojo.ownerDEV
specdojo.registered_at2026-10-11T13:42:46Z
specdojo.completed_at2026-10-12T07:19:23Z
specdojo.conclusion再開時の同期で、統合先から入った同じ内容の未追跡ファイルを解消済みとして扱うようにした

PJR-B2EC 再開時の同期で内容が同じ未追跡ファイルを戻せず再開が拒否される ​

1. 課題内容 ​

--resume の同期で、統合先に入れた保護対象と同じ内容の未追跡ファイルが worktree に残ると stash から戻せず再開を拒否する。exec-operation-guide は内容が同じなら解消すると記載している

2. 影響範囲 ​

観点影響
スコープexec run --resume で統合先を worktree へ取り込む同期(未コミットの成果の一時退避と復元)
スケジュールv0.3.0 の公開前に直す
コスト保護対象を統合先へ適用して再開する手順が、worktree の該当ファイルを手で消さないと通らない
品質exec-operation-guide の記載(内容が同じなら同期で解消される)と実装が一致しない
関係者exec を再開する利用者と orchestrator

3. 対応方針 ​

項目内容
原因同期は未追跡ファイルを含めて stash し、統合先を merge してから復元する。統合先から同じパスのファイルが追跡済みとして入ると、内容が同じでも未追跡ファイルを復元できず(already exists, no checkout)、再開を拒否する
対応策復元の前に、退避した未追跡ファイルのうち、merge 後の追跡済みファイルと内容が同じものを復元の対象から外す(解消済みとして扱う)。内容が異なる場合は従来どおり拒否し、理由に該当パスを示す
依存事項なし
完了条件統合先へ同じ内容のファイルを入れてから再開すると、手作業なしで同期が通ることを統合テストで確認する。内容が異なる場合は従来どおり拒否されることも確認する。exec-operation-guide の記載と一致させる。統合テストで子プロセスとして CLI を起動する場合は、実リポジトリの node_modules/.bin/tsx を絶対パスで起動する。fixture の agent-members.yaml は schema の必須項目(capabilities・proficiency・priority など)を満たす

4. 対応結果 ​

  • stash に退避した未追跡ファイルを復元する前に、merge 後の追跡済みファイルと blob を比較するようにした。同一内容のパスは一時的に重複を解消して stash を適用し、統合先の追跡状態へ戻すため、手作業なしで再開できる。
  • 内容が異なるパスは stash を適用する前に検出し、該当パスをエラーへ含めたうえで同期 merge を巻き戻す。元の未追跡ファイルは既存の復旧手順で worktree へ戻し、復旧に失敗した場合は stash を保持する。
  • 同一内容なら同期が成功して clean になるケースと、異なる内容ならパスを示して拒否し元の worktree を復元するケースを tests/src/exec-task-repos.integration.test.ts に追加した。

5. 関連ドキュメント ​