PJR-VGNG 一部の文書が失敗した Job Run が完了分も含めて統合されない
1. 課題内容
grade の Job Run で一部の文書の評価が失敗すると Job Run 全体が failed になり、review が incomplete と判定して、評価できた文書の結果も統合されない。完了した文書の結果を統合し、失敗した文書は次の Run へ回すことを review の判定で選べるようにする
2. 影響範囲
| 観点 | 影響 |
|---|---|
| スコープ | grade の Job(docs/ja/projects/prj-0001/jobs/job-grade-deliverable.yaml・job-grade-kata.yaml)の command と review の観点、tools/grade/run-per-document.sh の終了コード、Job Run の状態(src/job/)、routine の統合の判定 |
| スケジュール | 急がないが、定期評価の成果を無駄にしないため早めに直す |
| コスト | 1 件でも評価が失敗すると、評価できた文書の結果も統合されず、次の Run で評価し直すか人が手で統合する(2026-10-12 の kata の Run は 15 件中 3 件の失敗で人が統合した) |
| 品質 | 定期評価の結果が、一部の失敗で丸ごと捨てられる |
| 関係者 | 定期実行の grade の運用 |
3. 対応方針
| 項目 | 内容 |
|---|---|
| 原因 | run-per-document.sh は 1 件でも段が失敗すると 0 以外で終わり、Job の command がその終了コードで失敗する。Job Run の状態が failed になり、review は完了条件に従って incomplete と判定し、routine は統合しない |
| 対応策 | 評価できた文書と失敗した文書を分けて扱う。少なくとも 1 件の評価ができ、失敗した文書が評価の状態(再試行の回数)に記録されている場合は、評価できた分を統合できる結果として扱い、失敗した文書は次の Run で評価し直す |
| 依存事項 | なし |
| 完了条件 | 下記の完了条件を満たす |
3.1. 完了条件
- grade の Job Run で、一部の文書の評価が失敗し、残りの文書の評価ができた場合に、評価できた文書の結果が review を経て統合される。失敗した文書は評価の状態に記録され、次の Run で評価し直される(既存の連続失敗の上限
max_failuresに従う)。 - 終了コード 75(上限)や中断で未完了の段がある場合と、すべての文書の評価が失敗した場合は、従来どおり統合しない(
waiting)。 - 一部の失敗を表す状態を、Job Run の状態に加えるか(例:
partial)、succeededの中で失敗の件数を記録するかを決めて実装し、理由を result に書く。routine の記録(last_result)とroutine listの表示でも、一部の失敗が分かるようにする。 - grade の Job の review の観点(command の
analysisと review の完了条件)を、一部の失敗のときにcomplete-with-findingsと判定し、失敗した文書と理由を指摘として残す形に改める。成果物と kata の 2 つの Job を揃える。 - routine の運用ガイド(specdojo:routine-operation-guide)に、一部の失敗の扱いを書く。
- 統合テストか単体テストで、一部の失敗・全部の失敗・未完了の 3 通りを確かめる。
- 作業を終える前に、
npm run typecheck・npm run lint:ts・npm run test:unitを実行して通す。 - 親の検証(lint-ts・lint-fm・lint-md・typecheck・test-unit・test-integration・validate-schema)が通る。
- CHANGELOG に記載する場合は、未公開の版の節(
## [0.4.0] - 未定)に書く。公開済みの版の節は変えない。
4. 対応結果
- Job Run に
partialを追加し、command Job がpartial_exit_codeに明示した終了コードだけを部分成功として扱うようにした。grade の2つの Job は終了コード2を指定する。汎用の非0終了をsucceededに読み替えず、完了分と失敗分が混在する事実を Run JSON、attempt、routine のlast_result、routine listに残すため、succeededの付帯情報ではなく独立状態を選んだ。 tools/grade/run-per-document.shは、全件完了を0、完了文書と失敗文書の混在を2、全件失敗を1、rate limitを75で返す。失敗した文書の pipeline state と連続失敗回数は従来どおり保持し、次の Run の--incompleteで再試行する。- review は、
partialで完了文書が1件以上あり、失敗文書と失敗段が再試行可能な状態で記録され、未開始文書がない場合に限りcomplete-with-findingsを選べる。partialにcompleteは使わず、failed、rate limit、中断、全件失敗はincompleteのまま統合しない。 partialとcomplete-with-findingsの組み合わせだけを runner が統合し、routine はlast_result: partialと履歴へ記録する。複数 action の集約はfailure、partial、skipped、successの優先順とした。- 部分失敗、全件失敗、rate limitによる未完了、
partialのreview受入条件、checkpointを進めない終端状態、routine表示のテストを追加した。Job Run、Job Definition、routine履歴のschemaと関連する設計・標準・運用ガイドも同じ語彙へ更新した。
5. 関連ドキュメント
- specdojo:routine-operation-guide: routine と grade の運用。
- prj-0001:pjr-vqza-routine-commit-after-run: routine の worktree での実行と review。