CR-NEXUS-018: Resume 失敗時の説明責務モデル定義
(Explainability Contract)
SRS Traceability
Related SRS: docs/srs/NEXUSCORE_SRS.md
This CR satisfies: FR-1; FR-3; NFR-1; NFR-4
1. 概要(Overview)
本 CR は、Pause / Resume において Resume が失敗した場合に、NexusCore が「何を・どこまで説明する責務を負うか」を 設計契約(Explainability Contract)として定義する。
本 CR は 説明責務の範囲と正本を定めるのみであり、 例外処理・ログ形式・UI 表示などの実装は要求しない。
2. 背景(Background)
CR-NEXUS-017 により、以下が設計として固定された。
- Resume は Orchestrator を再構築する
- RunState が再開の唯一の正本(SOT)である
この結果、Resume は以下の理由で失敗し得る。
- RunState が破損・欠損している
- next_phase が現在の実行構成と整合しない
- context_snapshot が不十分
- 実行環境差異(依存関係・設定差)
これらは 設計上許容された失敗であり、 重要なのは「失敗しないこと」ではなく 「失敗理由を説明できること」である。
3. 基本原則(Explainability Principles)
3.1 説明責務の基本原則
- Resume の失敗は 異常ではない
- NexusCore は 再開成功を保証しない
- ただし NexusCore は 失敗理由を説明可能な状態で失敗する責務を負う
3.2 説明の対象
説明は以下を満たせば十分とする。
- 人間(運用者・開発者)が原因を分類できる
- 次に取るべき行動(再試行/破棄/再実行)が判断できる
4. 説明責務の正本(Source of Explanation)
4.1 正本の所在
Resume 失敗時の説明責務の正本は Runner にある。
- Orchestrator は説明責務の正本にならない
- RunState は「事実データ」であり、説明主体ではない
4.2 説明に用いられる情報源
Runner は、以下を根拠として説明を構成する。
- RunState(読み取り結果)
- Resume 入力(run_id 等)
- 再構築時に発生したエラー情報
- Runner 自身の判断結果
5. 説明レベルの定義(Explanation Levels)
説明は以下の 3段階レベルで整理される。
Level 1: 事実説明(What)
- Resume が失敗したという事実
- どの run_id が対象か
- どのフェーズで失敗したか(可能な場合)
例:
Resume failed for run_id=XXXX at phase=implementation
Level 2: 原因分類(Why)
失敗原因は、以下のいずれかに分類される。
STATE_INVALID
RunState が欠損・破損している
STATE_INCOMPATIBLE
RunState と現在の実行構成が整合しない
ENVIRONMENT_MISMATCH
実行環境差異による失敗
INTERNAL_ERROR
想定外の内部エラー
※ 分類は契約であり、実装は自由。
Level 3: 行動指針(Next Action)
Runner は、最低限以下の指針を提示できることが望ましい。
- 再試行可能か
- run_id を破棄すべきか
- 新規 Run としてやり直すべきか
6. 非目標(Explicit Non-Goals)
本 CR は以下を目的としない。
- 失敗原因の完全自動修復
- 例外スタックトレースの完全公開
- UI 表示形式の定義
- ログフォーマットの標準化
7. Runner / Orchestrator の責務分離(再確認)
| 項目 | 責務 |
|---|---|
| Resume 可否判断 | Runner |
| 失敗理由の分類 | Runner |
| 説明文生成 | Runner |
| 例外発生 | Orchestrator |
| 内部エラー詳細 | Orchestrator(非正本) |
8. 非機能要件(NFR)
- Resume 失敗時も run_id による追跡が可能であること
- 説明は 再現性・監査性を損なわない
- core/orchestrator.py の修正を前提としない
9. リスク・制約
説明は最小限に留まるため、 高度なデバッグには追加ログが必要になる。
ただしそれは 本 CR の責務外とする。
10. 完了条件(Done Definition)
- Resume 失敗時の説明責務が文書化されている
- 説明の正本が Runner であることが明示されている
- 説明レベル(What / Why / Next Action)が定義されている
- CR-NEXUS-017 と矛盾しない
11. 備考
本 CR は Explainability Contractであり、 CR-NEXUS-016 / 017 で定義された Contract Layer を補完する。
本契約により NexusCore は 「失敗しても黙らない実行基盤」として成立する。
Cursor に対する指示書(CR-NEXUS-018 用)
以下を そのまま Cursor に貼り付けて使用してください。
#project: NexusCore
Task: CR-NEXUS-018_Resume_Failure_Explainability_Contract.md を新規追加する。
Scope:
- 設計CR(Explainability Contract)の追加のみ
- 実装コードには一切触れない
Rules:
- docs/spec/ 配下に配置すること
- CR タイトル・章立て・番号は変更しない
- 冒頭に以下の SRS Traceability を必ず含める
SRS Traceability:
- Related SRS: docs/srs/NEXUSCORE_SRS.md
- This CR satisfies: FR-1; FR-3; NFR-1; NFR-4
Constraints:
- 本 CR は設計定義のみとする
- 新規ロジック・実装・TODO を追加しない
- core/orchestrator.py 無変更を前提とする
Acceptance:
- Resume 失敗時の説明責務が Runner にあることが明示されている
- 説明レベル(What / Why / Next Action)が定義されている
- CR-NEXUS-017(再構築モデル)と整合している
位置づけ整理(重要)
| CR | 役割 |
|---|---|
| CR-015 | Pause / Resume 実装 |
| CR-016 | UX / 運用契約 |
| CR-017 | 再構築モデル契約 |
| CR-018 | 説明責務契約(今回) |