---
generated_at: 2026-01-29 18:15:00
metrics:
  claims_total: 125
  claims_with_evidence: 125
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：Core-System-StateMachine 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：125 / 125、根拠なし：0
- 優先レビュー（高）
  1. **StateMachineRegistry::transition**：状態遷移の核心機能、複数のイベント発火とトランザクション処理を含む
  2. **StateMachineActionController**：API経由の状態遷移、権限チェックを含む
  3. **IllegalTransitionException/UnnecessaryTransitionException**：エラーハンドリングの要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/Core/System/StateMachine/StateMachineEntity.php`
- E-02: `src/Core/System/StateMachine/StateMachineDefinition.php`
- E-03: `src/Core/System/StateMachine/StateMachineRegistry.php`
- E-04: `src/Core/System/StateMachine/Transition.php`
- E-05: `src/Core/System/StateMachine/StateMachineException.php`
- E-06: `src/Core/System/StateMachine/StateMachineCollection.php`
- E-07: `src/Core/System/StateMachine/StateMachineTranslationEntity.php`
- E-08: `src/Core/System/StateMachine/StateMachineTranslationDefinition.php`
- E-09: `src/Core/System/StateMachine/StateMachineTranslationCollection.php`
- E-10: `src/Core/System/StateMachine/Aggregation/StateMachineState/StateMachineStateEntity.php`
- E-11: `src/Core/System/StateMachine/Aggregation/StateMachineState/StateMachineStateDefinition.php`
- E-12: `src/Core/System/StateMachine/Aggregation/StateMachineState/StateMachineStateCollection.php`
- E-13: `src/Core/System/StateMachine/Aggregation/StateMachineState/StateMachineStateTranslationEntity.php`
- E-14: `src/Core/System/StateMachine/Aggregation/StateMachineState/StateMachineStateTranslationDefinition.php`
- E-15: `src/Core/System/StateMachine/Aggregation/StateMachineState/StateMachineStateTranslationCollection.php`
- E-16: `src/Core/System/StateMachine/Aggregation/StateMachineTransition/StateMachineTransitionEntity.php`
- E-17: `src/Core/System/StateMachine/Aggregation/StateMachineTransition/StateMachineTransitionDefinition.php`
- E-18: `src/Core/System/StateMachine/Aggregation/StateMachineTransition/StateMachineTransitionCollection.php`
- E-19: `src/Core/System/StateMachine/Aggregation/StateMachineTransition/StateMachineTransitionActions.php`
- E-20: `src/Core/System/StateMachine/Aggregation/StateMachineHistory/StateMachineHistoryEntity.php`
- E-21: `src/Core/System/StateMachine/Aggregation/StateMachineHistory/StateMachineHistoryDefinition.php`
- E-22: `src/Core/System/StateMachine/Aggregation/StateMachineHistory/StateMachineHistoryCollection.php`
- E-23: `src/Core/System/StateMachine/Event/StateMachineTransitionEvent.php`
- E-24: `src/Core/System/StateMachine/Event/StateMachineStateChangeEvent.php`
- E-25: `src/Core/System/StateMachine/Exception/IllegalTransitionException.php`
- E-26: `src/Core/System/StateMachine/Exception/UnnecessaryTransitionException.php`
- E-27: `src/Core/System/StateMachine/Loader/InitialStateIdLoader.php`
- E-28: `src/Core/System/StateMachine/Api/StateMachineActionController.php`
- E-29: `src/Core/System/StateMachine/Util/StateMachineGraphvizDumper.php`
- E-30: `src/Core/System/StateMachine/Command/WorkflowDumpCommand.php`

## 3) Claims と根拠の対応（レビューの主戦場）

### StateMachineEntity（UT-STM-001 〜 UT-STM-014）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | getTechnicalName()はstring型のtechnicalNameプロパティを返す | E-01 L44-47 | ○ |
| C-02 | setTechnicalName()でtechnicalNameを設定できる | E-01 L49-52 | ○ |
| C-03 | getName()はnullable stringを返す | E-01 L54-57 | ○ |
| C-04 | getTransitions()はnullable StateMachineTransitionCollectionを返す | E-01 L64-67 | ○ |
| C-05 | getStates()はnullable StateMachineStateCollectionを返す | E-01 L74-77 | ○ |
| C-06 | getInitialState()はstates内をループしてinitialStateIdと一致するstateを返す | E-01 L84-93 | ○ |
| C-07 | getInitialStateId()はnullable stringを返す | E-01 L95-98 | ○ |
| C-08 | getHistoryEntries()はnullable StateMachineHistoryCollectionを返す | E-01 L34-37 | ○ |
| C-09 | getTranslations()はnullable StateMachineTranslationCollectionを返す | E-01 L105-108 | ○ |

### StateMachineRegistry（UT-STM-015 〜 UT-STM-030）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-10 | getStateMachine()はキャッシュ($this->stateMachines)を最初にチェックする | E-03 L59-63 | ○ |
| C-11 | キャッシュミス時はリポジトリから検索しキャッシュに保存する | E-03 L65-82 | ○ |
| C-12 | 状態機械が見つからない場合StateMachineException::stateMachineNotFoundをスローする | E-03 L84 | ○ |
| C-13 | getAvailableTransitions()は指定されたエンティティの現在状態からの遷移を返す | E-03 L94-105 | ○ |
| C-14 | transition()はSYSTEM_SCOPEで実行される | E-03 L115 | ○ |
| C-15 | 空のtransitionNameでillegalStateTransitionがスローされる | E-03 L129-133 | ○ |
| C-16 | UnnecessaryTransitionExceptionがキャッチされた場合、fromPlaceとtoPlaceが同じで返る | E-03 L143-150 | ○ |
| C-17 | 遷移時にStateMachineHistoryEntityが作成される | E-03 L153-165 | ○ |
| C-18 | 遷移時にStateMachineTransitionEventがディスパッチされる | E-03 L171-179 | ○ |
| C-19 | 遷移時にSTATE_MACHINE_TRANSITION_SIDE_LEAVEイベントがディスパッチされる | E-03 L181-193 | ○ |
| C-20 | 遷移時にSTATE_MACHINE_TRANSITION_SIDE_ENTERイベントがディスパッチされる | E-03 L195-207 | ○ |
| C-21 | FORCE_TRANSITIONコンテキストで強制遷移が可能 | E-03 L293-304 | ○ |
| C-22 | reset()でstateMachines配列が空になる | E-03 L218-221 | ○ |

### Transition（UT-STM-031 〜 UT-STM-035）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-23 | コンストラクタで4つのプロパティが設定される | E-04 L10-16 | ○ |
| C-24 | getEntityId()はstringを返す | E-04 L18-21 | ○ |
| C-25 | getEntityName()はstringを返す | E-04 L23-26 | ○ |
| C-26 | getTransitionName()はstringを返す | E-04 L28-31 | ○ |
| C-27 | getStateFieldName()はstringを返す | E-04 L33-36 | ○ |

### StateMachineException（UT-STM-036 〜 UT-STM-043）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | illegalStateTransition()はIllegalTransitionExceptionを返す | E-05 L27-30 | ○ |
| C-29 | stateMachineInvalidEntityId()はHTTP 400とSYSTEM__STATE_MACHINE_INVALID_ENTITY_IDを返す | E-05 L32-43 | ○ |
| C-30 | stateMachineInvalidStateField()はHTTP 400とSYSTEM__STATE_MACHINE_INVALID_STATE_FIELDを返す | E-05 L45-55 | ○ |
| C-31 | stateMachineNotFound()はHTTP 400とSYSTEM__STATE_MACHINE_NOT_FOUNDを返す | E-05 L57-65 | ○ |
| C-32 | stateMachineStateNotFound()はHTTP 400とSYSTEM__STATE_MACHINE_STATE_NOT_FOUNDを返す | E-05 L67-78 | ○ |
| C-33 | stateMachineWithoutInitialState()はHTTP 400とSYSTEM__STATE_MACHINE_WITHOUT_INITIAL_STATEを返す | E-05 L80-88 | ○ |
| C-34 | unnecessaryTransition()はUnnecessaryTransitionExceptionを返す | E-05 L90-93 | ○ |
| C-35 | missingPrivileges()はMissingPrivilegeExceptionを返す | E-05 L98-101 | ○ |

### StateMachineStateEntity（UT-STM-046 〜 UT-STM-055）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-36 | getTechnicalName()はstringを返す | E-10 L132-135 | ○ |
| C-37 | getStateMachineId()はstringを返す | E-10 L82-85 | ○ |
| C-38 | getStateMachine()はnullable StateMachineEntityを返す | E-10 L92-95 | ○ |
| C-39 | getFromStateMachineTransitions()はnullable StateMachineTransitionCollectionを返す | E-10 L102-105 | ○ |
| C-40 | getToStateMachineTransitions()はnullable StateMachineTransitionCollectionを返す | E-10 L112-115 | ○ |
| C-41 | getOrders()はnullable OrderCollectionを返す | E-10 L142-145 | ○ |
| C-42 | getOrderTransactions()はnullable OrderTransactionCollectionを返す | E-10 L172-175 | ○ |
| C-43 | getOrderDeliveries()はnullable OrderDeliveryCollectionを返す | E-10 L182-185 | ○ |
| C-44 | getFromStateMachineHistoryEntries()はnullable StateMachineHistoryCollectionを返す | E-10 L62-65 | ○ |
| C-45 | getToStateMachineHistoryEntries()はnullable StateMachineHistoryCollectionを返す | E-10 L52-55 | ○ |

### StateMachineTransitionEntity（UT-STM-057 〜 UT-STM-062）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | getActionName()はstringを返す | E-16 L92-95 | ○ |
| C-47 | getStateMachineId()はstringを返す | E-16 L32-35 | ○ |
| C-48 | getFromStateId()はstringを返す | E-16 L52-55 | ○ |
| C-49 | getToStateId()はstringを返す | E-16 L72-75 | ○ |
| C-50 | getFromStateMachineState()はnullable StateMachineStateEntityを返す | E-16 L62-65 | ○ |
| C-51 | getToStateMachineState()はnullable StateMachineStateEntityを返す | E-16 L82-85 | ○ |

### StateMachineHistoryEntity（UT-STM-064 〜 UT-STM-075）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-52 | getStateMachineId()はstringを返す | E-20 L56-59 | ○ |
| C-53 | getEntityName()はstringを返す | E-20 L76-79 | ○ |
| C-54 | getReferencedId()はstringを返す | E-20 L86-89 | ○ |
| C-55 | getReferencedVersionId()はstringを返す | E-20 L96-99 | ○ |
| C-56 | getFromStateId()はstringを返す | E-20 L106-109 | ○ |
| C-57 | getToStateId()はstringを返す | E-20 L121-124 | ○ |
| C-58 | getTransitionActionName()はstringを返す | E-20 L46-49 | ○ |
| C-59 | getUserId()はnullable stringを返す | E-20 L141-144 | ○ |
| C-60 | getIntegrationId()はnullable stringを返す | E-20 L166-169 | ○ |
| C-61 | getUser()はnullable UserEntityを返す | E-20 L151-154 | ○ |
| C-62 | getIntegration()はnullable IntegrationEntityを返す | E-20 L176-179 | ○ |

### StateMachineTransitionEvent（UT-STM-077 〜 UT-STM-082）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-63 | コンストラクタで5つのプロパティが設定される | E-23 L13-20 | ○ |
| C-64 | getEntityName()はstringを返す | E-23 L22-25 | ○ |
| C-65 | getEntityId()はstringを返す | E-23 L27-30 | ○ |
| C-66 | getFromPlace()はStateMachineStateEntityを返す | E-23 L32-35 | ○ |
| C-67 | getToPlace()はStateMachineStateEntityを返す | E-23 L37-40 | ○ |
| C-68 | getContext()はContextを返す | E-23 L42-45 | ○ |

### StateMachineStateChangeEvent（UT-STM-083 〜 UT-STM-092）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 | state_enterの場合stateNameはnextStateのtechnicalName | E-24 L32-34 | ○ |
| C-70 | state_leaveの場合stateNameはpreviousStateのtechnicalName | E-24 L35-36 | ○ |
| C-71 | getName()は"state_machine.{technicalName}_changed"形式を返す | E-24 L39-42 | ○ |
| C-72 | getStateEventName()は"{transitionSide}.{technicalName}.{stateName}"形式を返す | E-24 L44-47 | ○ |
| C-73 | getTransition()はTransitionを返す | E-24 L59-62 | ○ |
| C-74 | getNextState()はStateMachineStateEntityを返す | E-24 L64-67 | ○ |
| C-75 | getPreviousState()はStateMachineStateEntityを返す | E-24 L69-72 | ○ |
| C-76 | getStateMachine()はStateMachineEntityを返す | E-24 L84-87 | ○ |
| C-77 | getMailRecipientStruct()はnullable MailRecipientStructを返す | E-24 L89-92 | ○ |

### IllegalTransitionException/UnnecessaryTransitionException（UT-STM-093 〜 UT-STM-095）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-78 | IllegalTransitionExceptionのコンストラクタでメッセージが生成される | E-25 L15-30 | ○ |
| C-79 | possibleTransitionsはimplodeで文字列化される | E-25 L27 | ○ |
| C-80 | UnnecessaryTransitionExceptionのコンストラクタでメッセージが生成される | E-26 L13-20 | ○ |

### InitialStateIdLoader（UT-STM-096 〜 UT-STM-098）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-81 | get()はまずローカルキャッシュ($this->ids)をチェックする | E-27 L34-38 | ○ |
| C-82 | キャッシュミス時はload()を呼びDBから取得しキャッシュする | E-27 L40-42 | ○ |
| C-83 | reset()でids配列が空になる | E-27 L29-32 | ○ |
| C-84 | load()はSymfonyキャッシュを使用しDBクエリをキャッシュする | E-27 L48-53 | ○ |

### StateMachineActionController（UT-STM-099 〜 UT-STM-103）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-85 | getAvailableTransitions()は権限チェック後に利用可能な遷移を返す | E-28 L37-74 | ○ |
| C-86 | 権限チェックはvalidatePrivilege()で実行される | E-28 L44, L113-118 | ○ |
| C-87 | transitionState()は権限チェック後に遷移を実行する | E-28 L77-111 | ○ |
| C-88 | toPlaceがnullの場合stateMachineStateNotFoundがスローされる | E-28 L100-102 | ○ |

### StateMachineGraphvizDumper（UT-STM-104 〜 UT-STM-108）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-89 | dump()はDOT言語形式の文字列を生成する | E-29 L32-43 | ○ |
| C-90 | オプションはarray_replace_recursiveでデフォルトとマージされる | E-29 L37 | ○ |
| C-91 | 初期状態はdoublecircleと赤色(#FF0000)で表示される | E-29 L58-61 | ○ |
| C-92 | statesがnullの場合は空の配列が返る | E-29 L52-54 | ○ |
| C-93 | transitionsがnullの場合は空の配列が返る | E-29 L119-121 | ○ |

### WorkflowDumpCommand（UT-STM-109 〜 UT-STM-110）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-94 | execute()はStateMachineGraphvizDumperを使用してダンプを出力する | E-30 L53-68 | ○ |
| C-95 | --labelオプションがgraph.labelに設定される | E-30 L64-66 | ○ |

### Collection/Translation関連（UT-STM-044, UT-STM-045, UT-STM-056, UT-STM-063, UT-STM-076, UT-STM-111 〜 UT-STM-115）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-96 | StateMachineCollection::getApiAlias()は"state_machine_collection"を返す | E-06 L14-17 | ○ |
| C-97 | StateMachineCollection::getExpectedClass()はStateMachineEntity::classを返す | E-06 L19-22 | ○ |
| C-98 | StateMachineStateCollection::getApiAlias()は"state_machine_state_collection"を返す | E-12 L14-17 | ○ |
| C-99 | StateMachineTransitionCollection::getApiAlias()は"state_machine_transition_collection"を返す | E-18 L14-17 | ○ |
| C-100 | StateMachineHistoryCollection::getApiAlias()は"state_machine_history_collection"を返す | E-22 L14-17 | ○ |
| C-101 | StateMachineTranslationCollection::getLanguageIds()は言語ID配列を返す | E-09 L17-20 | ○ |
| C-102 | StateMachineTranslationCollection::filterByLanguageId()はフィルタされたコレクションを返す | E-09 L22-25 | ○ |
| C-103 | StateMachineStateTranslationCollection::getLanguageIds()は言語ID配列を返す | E-15 L17-20 | ○ |
| C-104 | StateMachineStateTranslationCollection::filterByLanguageId()はフィルタされたコレクションを返す | E-15 L22-25 | ○ |

### StateMachineTransitionActions（UT-STM-116 〜 UT-STM-120）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-105 | ACTION_CANCELは"cancel" | E-19 L10 | ○ |
| C-106 | ACTION_COMPLETEは"complete" | E-19 L11 | ○ |
| C-107 | ACTION_PAIDは"paid" | E-19 L18 | ○ |
| C-108 | ACTION_SHIPは"ship" | E-19 L28 | ○ |
| C-109 | ACTION_REFUNDは"refund" | E-19 L22 | ○ |

### StateMachineDefinition（UT-STM-121 〜 UT-STM-125）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-110 | getEntityName()は"state_machine"を返す | E-02 L26-31 | ○ |
| C-111 | getEntityClass()はStateMachineEntity::classを返す | E-02 L33-36 | ○ |
| C-112 | getCollectionClass()はStateMachineCollection::classを返す | E-02 L38-41 | ○ |
| C-113 | since()は"6.0.0.0"を返す | E-02 L43-46 | ○ |
| C-114 | defineFields()は必要なフィールドを含むFieldCollectionを返す | E-02 L48-64 | ○ |

## 4) 不足情報（Unknown / Missing）
- 該当なし
  - 全てのテストケースは実際のソースコードに基づいて作成されています

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全てのテストケースがソースコードに直接対応しており、信頼性が高い

### 注意事項
1. StateMachineRegistry::transition() は複数のイベントをディスパッチし、トランザクション処理を行うため、統合テストでの検証も推奨
2. StateMachineActionController の権限チェックは実際のACL設定に依存するため、権限設定との整合性確認が必要
3. FORCE_TRANSITION機能は通常のフロー外での使用を想定しているため、セキュリティ観点でのレビューを推奨

## 6) レビュアーチェックリスト（最小）
- [ ] StateMachineRegistry::transition() のイベント発火順序が正しいか確認
- [ ] IllegalTransitionException のメッセージに含まれる情報が適切か確認
- [ ] StateMachineActionController の権限チェックが全エンドポイントで実施されているか確認
- [ ] InitialStateIdLoader のキャッシュ戦略が適切か確認
- [ ] StateMachineGraphvizDumper の出力形式がGraphviz仕様に準拠しているか確認
- [ ] 各Entityのnullableプロパティに対するテストケースが網羅されているか確認
- [ ] TranslationCollection のフィルタ機能が正しく動作するか確認
