PJR-PPYF targets を宣言しない register 項目でも 1 回目の変更集合を下限として網羅を検証する
1. 概要
prj-0001:pjr-6wfa-register-plan-targets で、個票が targets を宣言すれば register 由来の plan でも網羅の検証が働くようにした。宣言しない個票は、引き続き検証されない。 1 回目の実行で変更されたファイルを下限として記録し、resume のときに「少なくともこれらは確認せよ」と使えるようにする。
2. 事実
2.1. 宣言しない個票が多い
targets は任意であり、pjr-rulebook は「確実に変更する対象が分かっている場合」に宣言するとしている。起票の時点で対象が決まらない項目(調査を伴う todo、実装の範囲が実行中に決まる項目)は宣言されない。
2.2. 発端の事象は宣言なしでも起きうる
prj-0001:pjr-xzeq-cdfd-overview-cdfd-check-cdfd-action-grade-review は、3 文書のうち 1 文書だけを変更した状態で rate limit により中断し、resume 後に残りへ着手しないまま成功扱いになった。個票に targets がなければ、同じ事象は今も検出できない。
2.3. 手がかりはすでにある
prj-0001:pjr-1y9p-resume-executor-plan は、resume したときに「開始時点ですでに存在した変更」の一覧を executor への指示に含めている。これは情報として渡すだけで、検証には使っていない。
prj-0001:pjr-6wfa-register-plan-targets の executor は、案 3 を「evidence 構造の変更と再設計を要する」として見送った。
3. 完了条件
targetsを宣言しない register 項目で、1 回目の実行の変更集合が evidence または pipeline 状態に記録される。- resume のとき、記録した変更集合を下限として扱う。下限に含まれる対象について、再開後の executor が
changedまたはunchanged(理由付き)を申告する。 - 下限は不完全でありうることが、executor への指示とガイドに記載されている。上限としては扱わない。
targetsを宣言した項目では、宣言を優先する。- 中断しなかった実行では何も変わらない。
- PJR-XZEQ と同じ状況(1 文書だけ変更して中断し、resume)を再現するテストで、残りの未着手が検出される。
npm run test:unitとnpm run test:integrationが通過している。
4. 作業内容
| No | 作業 | 担当 | 状態 | メモ |
|---|---|---|---|---|
| 1 | 変更集合の記録先を決める | ARC | done | executor evidence の attempt_changes に記録する |
| 2 | 記録を実装する | DEV | done | executor 開始前後の fingerprint を比較する |
| 3 | resume 時の下限の扱いを実装する | DEV | done | 1Y9P の target_coverage 検証へ統合した |
| 4 | 再現テストを追加する | DEV | done | 宣言なし・rate limit・申告欠落を register E2E で再現した |
5. 対応結果
- executor の開始前後にある worktree 差分の fingerprint を比較し、その試行で実質的に変更されたファイルだけを evidence の
attempt_changesへ記録するようにした。register の状態遷移など、executor 開始前から存在する差分は含めない。 targetsを宣言しない register 項目の executor を再開するとき、最初に記録されたattempt_changesを target coverage の下限として prompt と runner 検証へ渡すようにした。複数回中断しても最初の集合を維持する。- 下限は不完全であり作業範囲の上限ではないこと、plan 全体と下限外の必要成果物も確認することを executor 指示と specdojo:exec-operation-guide に明記した。
- plan に
targetsがある場合は宣言を優先し、初回変更集合へ切り替えない。 - 宣言なしの register executor が 1 ファイルを変更して rate limit で中断し、再開後に
target_coverageを申告せず成功を返すケースを E2E テストへ追加した。runner が executor をfailedにして reporter へ進めないことを検証する。 - evidence 読み込み、初回集合の保持、宣言済み
targetsの優先、schema-valid なattempt_changesを単体テストへ追加した。
5.1. 評価(2026-09-27 夜間)
完了条件をすべて満たす。手直しは不要だった。
| 完了条件 | 判定 |
|---|---|
| 1 回目の変更集合が記録される | 満たす。executor の前後の差分の fingerprint から attempt_changes を記録する |
| resume で下限として扱い、申告させる | 満たす。prompt と runner の検証の両方へ渡す |
| 下限が不完全であることの記載 | 満たす。executor への指示と運用ガイド |
targets の宣言を優先 | 満たす |
| 中断しなかった実行は変わらない | 満たす |
| PJR-XZEQ と同じ状況の再現テスト | 満たす。宣言なしで 1 ファイルだけ変えて中断し、再開後に申告せず成功を返すと、runner が検出する |
test:unit / test:integration | 満たす(1580 件 / 112 件) |
発端の PJR-XZEQ と同じ事象を、個票に targets を宣言していなくても検出できるようになった。 PJR-1Y9P、PJR-6WFA、本項目の 3 件で、resume 後に残作業を置き去りにする問題の対処がそろった。
変更の検出に「差分の有無」ではなく fingerprint の比較を使っている。1 回目の開始時点ですでに差分があったファイルを、その試行で変更したものと誤って数えないためである。