---
generated_at: 2026-02-24 23:05:00
metrics:
  claims_total: 95
  claims_with_evidence: 92
  claims_without_evidence: 3
confidence_derived: 0.97
---

# 根拠レポート: workflows-sdk 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）: **0.97**
  - 根拠あり: 92 / 95、根拠なし: 3
- 優先レビュー（高）
  1. **C-93 (StepExecutionContext.container)**: サービス解決の具体的な振る舞いは型定義のみから推測
  2. **C-94 (StepExecutionContext. getStepResult)**: 空白付きメソッド名の実際の動作確認が必要
  3. **C-95 (StepExecutionContext. getStepResult 境界値)**: 存在しないステップIDの挙動は実装から推測

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

- E-01: `packages/core/workflows-sdk/src/medusa-workflow.ts` - MedusaWorkflowクラス定義
- E-02: `packages/core/workflows-sdk/src/utils/composer/create-step.ts` - createStep関数・applyStep関数定義
- E-03: `packages/core/workflows-sdk/src/utils/composer/create-workflow.ts` - createWorkflow関数定義
- E-04: `packages/core/workflows-sdk/src/utils/composer/when.ts` - when関数・条件分岐定義
- E-05: `packages/core/workflows-sdk/src/utils/composer/parallelize.ts` - parallelize関数定義
- E-06: `packages/core/workflows-sdk/src/utils/composer/transform.ts` - transform関数定義
- E-07: `packages/core/workflows-sdk/src/utils/composer/helpers/step-response.ts` - StepResponseクラス定義
- E-08: `packages/core/workflows-sdk/src/utils/composer/helpers/workflow-response.ts` - WorkflowResponseクラス定義
- E-09: `packages/core/workflows-sdk/src/utils/composer/helpers/resolve-value.ts` - resolveValue関数定義
- E-10: `packages/core/workflows-sdk/src/utils/composer/helpers/proxy.ts` - proxify関数定義
- E-11: `packages/core/workflows-sdk/src/utils/composer/helpers/create-step-handler.ts` - createStepHandler関数定義
- E-12: `packages/core/workflows-sdk/src/utils/composer/create-hook.ts` - createHook関数定義
- E-13: `packages/core/workflows-sdk/src/helper/workflow-export.ts` - exportWorkflow関数・createContextualWorkflowRunner関数定義
- E-14: `packages/core/workflows-sdk/src/helper/type.ts` - 型定義（FlowRunOptions, WorkflowResult等）
- E-15: `packages/core/workflows-sdk/src/utils/composer/type.ts` - 型定義（StepExecutionContext, WorkflowData等）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | MedusaWorkflow.registerWorkflow - 新規ワークフロー登録 | E-01 (17-23行目) | ○ |
| C-02 | MedusaWorkflow.registerWorkflow - 既存ワークフローは再登録されない | E-01 (18-20行目: if文で重複チェック) | ○ |
| C-03 | MedusaWorkflow.unregisterWorkflow - ワークフロー削除 | E-01 (25-27行目: deleteによる削除) | ○ |
| C-04 | MedusaWorkflow.unregisterWorkflow - 存在しないIDの削除 | E-01 (26行目: deleteは存在しないキーでもエラーにならない) | ○ |
| C-05 | MedusaWorkflow.getWorkflow - ワークフロー取得 | E-01 (29-31行目) | ○ |
| C-06 | MedusaWorkflow.getWorkflow - 存在しないIDでundefined | E-01 (30行目: オブジェクトアクセスの性質) | ○ |
| C-07 | createStep - 基本的なステップ作成 | E-02 (434-513行目) | ○ |
| C-08 | createStep - 補償関数付きステップ作成 | E-02 (457-463行目: compensateFnパラメータ) | ○ |
| C-09 | createStep - 設定オブジェクトでステップ作成 | E-02 (441-447行目: nameOrConfigの型定義) | ○ |
| C-10 | createStep - createWorkflow外での使用エラー | E-02 (480-484行目: contextチェックとエラースロー) | ○ |
| C-11 | applyStep - ステップ適用とフロー追加 | E-02 (186行目: this.flow.addAction) | ○ |
| C-12 | applyStep - workflowId未設定エラー | E-02 (162-165行目: workflowIdチェック) | ○ |
| C-13 | applyStep.config - 設定変更 | E-02 (206-261行目: configメソッド) | ○ |
| C-14 | applyStep.if - 条件付きステップ設定 | E-02 (263-280行目: ifメソッド) | ○ |
| C-15 | applyStep.if - 条件が関数でないエラー | E-02 (267-269行目: typeofチェック) | ○ |
| C-16 | wrapConditionalStep - 条件trueの処理 | E-02 (377-382行目: canContinue判定後のinvoke実行) | ○ |
| C-17 | wrapConditionalStep - 条件falseの処理 | E-02 (377-379行目: StepResponse.skip()返却) | ○ |
| C-18 | createWorkflow - 基本的なワークフロー作成 | E-03 (102-115行目) | ○ |
| C-19 | createWorkflow - 設定オブジェクトでの作成 | E-03 (117-118行目: nameOrConfigの処理) | ○ |
| C-20 | createWorkflow - 既存ワークフローの更新 | E-03 (174-178行目: newWorkflowフラグ判定) | ○ |
| C-21 | createWorkflow - WorkflowResponse処理 | E-03 (170行目: composer.applyでreturnedStep取得) | ○ |
| C-22 | createWorkflow.run - ワークフロー実行 | E-03 (203行目: flow.runの定義) | ○ |
| C-23 | createWorkflow.runAsStep - ステップとしての実行 | E-03 (204-296行目: runAsStepメソッド) | ○ |
| C-24 | createWorkflow.getName - 名前取得 | E-03 (202行目: mainFlow.getName定義) | ○ |
| C-25 | createWorkflow.hooks - フックアクセス | E-03 (197-200行目: hooksプロパティ設定) | ○ |
| C-26 | when - 条件分岐の基本機能 | E-04 (64-69行目: when関数シグネチャ) | ○ |
| C-27 | when - 名前付き条件分岐 | E-04 (74-80行目: nameパラメータ付きオーバーロード) | ○ |
| C-28 | when - 条件が関数でないエラー | E-04 (93-95行目: typeofチェックとエラースロー) | ○ |
| C-29 | when.then - then処理の基本機能 | E-04 (111-159行目: thenメソッド) | ○ |
| C-30 | when - then未呼び出しエラー | E-04 (104-108行目: process.nextTickでチェック) | ○ |
| C-31 | when.then - 自動ステップ化 | E-04 (123-149行目: retStep作成と警告) | ○ |
| C-32 | parallelize - 並列実行の基本機能 | E-05 (44-72行目) | ○ |
| C-33 | parallelize - createWorkflow外使用エラー | E-05 (47-50行目: コンテキストチェック) | ○ |
| C-34 | parallelize - 単一ステップの並列化 | E-05 (59行目: map処理で要素数に依存しない) | ○ |
| C-35 | transform - 基本的なデータ変換 | E-06 (62-72行目: transform関数定義) | ○ |
| C-36 | transform - 複数変換のチェーン | E-06 (77-159行目: 複数オーバーロード定義) | ○ |
| C-37 | transform - 非同期変換 | E-06 (206-208行目: Promise処理) | ○ |
| C-38 | transform - キャッシュ機能 | E-06 (184-193行目: temporaryDataの使用) | ○ |
| C-39 | StepResponse.constructor - 出力のみでの作成 | E-07 (28-44行目) | ○ |
| C-40 | StepResponse.constructor - 補償入力付きでの作成 | E-07 (36-43行目: compensateInputパラメータ) | ○ |
| C-41 | StepResponse.constructor - undefined出力 | E-07 (38-40行目: isDefined判定) | ○ |
| C-42 | StepResponse.output - 出力取得 | E-07 (144-146行目: getterメソッド) | ○ |
| C-43 | StepResponse.compensateInput - 補償入力取得 | E-07 (151-153行目: getterメソッド) | ○ |
| C-44 | StepResponse.permanentFailure - 永続的失敗 | E-07 (120-128行目: PermanentStepFailureErrorスロー) | ○ |
| C-45 | StepResponse.permanentFailure - 補償入力付き永続的失敗 | E-07 (124-126行目: compensateInput処理) | ○ |
| C-46 | StepResponse.skip - スキップレスポンス | E-07 (130-132行目: SkipStepResponse返却) | ○ |
| C-47 | StepResponse.toJSON - JSON変換 | E-07 (158-164行目: toJSONメソッド) | ○ |
| C-48 | WorkflowResponse.constructor - 基本的な作成 | E-08 (14-24行目) | ○ |
| C-49 | WorkflowResponse.constructor - フック付き作成 | E-08 (23行目: optionsパラメータ) | ○ |
| C-50 | resolveValue - プリミティブ値の解決 | E-09 (188-189行目: null/object以外の早期リターン) | ○ |
| C-51 | resolveValue - null/undefinedの解決 | E-09 (188行目: nullチェック) | ○ |
| C-52 | resolveValue - SymbolInputReferenceの解決 | E-09 (17-18行目: resolveProperty内) | ○ |
| C-53 | resolveValue - SymbolWorkflowStepの解決 | E-09 (27-34行目: resolveProperty内) | ○ |
| C-54 | resolveValue - SymbolWorkflowStepTransformerの解決 | E-09 (24-26行目: resolveProperty内) | ○ |
| C-55 | resolveValue - WorkflowResponseの解決 | E-09 (19-22行目: resolveProperty内) | ○ |
| C-56 | resolveValue - ネストオブジェクトの解決 | E-09 (113-147行目: unwrapInput内の再帰処理) | ○ |
| C-57 | resolveValue - 配列の解決 | E-09 (59-89行目: unwrapInput内の配列処理) | ○ |
| C-58 | resolveValue - 非同期解決 | E-09 (202-204行目: Promise処理) | ○ |
| C-59 | proxify - プロキシ化の基本機能 | E-10 (4-18行目) | ○ |
| C-60 | proxify - 既存プロパティアクセス | E-10 (7-8行目: prop in targetチェック) | ○ |
| C-61 | proxify - 未定義プロパティアクセス | E-10 (11-14行目: transform呼び出し) | ○ |
| C-62 | createStepHandler.invoke - ハンドラー実行 | E-11 (77-112行目) | ○ |
| C-63 | createStepHandler.invoke - 入力解決 | E-11 (84-88行目: resolveValue呼び出し) | ○ |
| C-64 | createStepHandler.invoke - StepResponseのJSON変換 | E-11 (103-106行目: toJSON呼び出し) | ○ |
| C-65 | createStepHandler.compensate - ハンドラー実行 | E-11 (113-143行目) | ○ |
| C-66 | createStepHandler.compensate - 補償入力の受け渡し | E-11 (130-133行目: invokeResult取得) | ○ |
| C-67 | createStepHandler.compensate - 出力なしの補償 | E-11 (120-127行目: stepOutput未定義時の処理) | ○ |
| C-68 | buildStepContext - コンテキスト構築 | E-11 (28-53行目) | ○ |
| C-69 | buildStepContext - idempotencyKey設定 | E-11 (22行目: idempotencyKey設定) | ○ |
| C-70 | createHook - フック作成の基本機能 | E-12 (72-152行目) | ○ |
| C-71 | createHook - 結果取得ステップ作成 | E-12 (83-99行目: getHookResultStep定義) | ○ |
| C-72 | createHook.getResult - フック結果取得 | E-12 (143-149行目: getResultメソッド) | ○ |
| C-73 | createHook.getResult - ハンドラー未登録時 | E-12 (87-94行目: NOOP_RESULT判定) | ○ |
| C-74 | createHook.hook - フックハンドラー登録 | E-12 (112-135行目: hookメソッド) | ○ |
| C-75 | createHook.hook - 重複ハンドラー登録エラー | E-12 (122-125行目: registeredチェック) | ○ |
| C-76 | createHook.hook - 条件付きフックハンドラー | E-12 (128-131行目: wrapConditionalStep呼び出し) | ○ |
| C-77 | createHook - resultValidator検証 | E-12 (90-92行目: zodスキーマparse) | ○ |
| C-78 | exportWorkflow - ワークフローエクスポート | E-13 (413-588行目) | ○ |
| C-79 | exportWorkflow.run - エクスポートワークフロー実行 | E-13 (487-506行目) | ○ |
| C-80 | exportWorkflow.run - エラー時例外スロー | E-13 (170-172行目: throwOnErrorチェック) | ○ |
| C-81 | exportWorkflow.run - エラー時結果にエラー含む | E-13 (195-200行目: errors返却) | ○ |
| C-82 | exportWorkflow.registerStepSuccess - ステップ成功登録 | E-13 (508-531行目) | ○ |
| C-83 | exportWorkflow.registerStepFailure - ステップ失敗登録 | E-13 (533-556行目) | ○ |
| C-84 | exportWorkflow.registerStepFailure - 永続的失敗登録 | E-13 (296-297行目: forcePermanentFailure引数) | ○ |
| C-85 | exportWorkflow.retryStep - ステップリトライ | E-13 (558-572行目) | ○ |
| C-86 | exportWorkflow.cancel - ワークフローキャンセル | E-13 (574-584行目) | ○ |
| C-87 | exportWorkflow.cancel - トランザクションでキャンセル | E-13 (401行目: transaction ?? transactionId) | ○ |
| C-88 | createContextualWorkflowRunner - コンテキストランナー作成 | E-13 (49-71行目) | ○ |
| C-89 | createContextualWorkflowRunner - キャッシュモジュール使用 | E-13 (40-47行目: getCachedLoadedModules) | ○ |
| C-90 | attachOnFinishReleaseEvents - イベントリリース | E-13 (649-651行目: releaseGroupedEvents呼び出し) | ○ |
| C-91 | attachOnFinishReleaseEvents - 失敗時イベントクリア | E-13 (640-646行目: clearGroupedEvents呼び出し) | ○ |
| C-92 | attachOnFinishReleaseEvents - eventBus未登録時の処理 | E-13 (632-635行目: eventBusServiceチェック) | ○ |
| C-93 | StepExecutionContext.container - サービス解決 | E-15 (177行目: 型定義のみ) | △ |
| C-94 | StepExecutionContext. getStepResult - ステップ結果取得 | E-15 (206行目: 型定義), E-11 (44-49行目: 実装) | △ |
| C-95 | StepExecutionContext. getStepResult - 存在しないステップID | E-11 (48行目: オプショナルチェイン) | △ |

## 4) 不足情報（Unknown / Missing）
- **C-93**: StepExecutionContext.containerの実際の振る舞いは型定義のみから推測。MedusaContainerの具体的な実装を確認することで確信度が向上する
  - 候補: `@medusajs/types`のMedusaContainer型定義 / `@medusajs/utils`のcontainer実装
- **C-94, C-95**: 空白付きメソッド名「 getStepResult」の挙動はcreate-step-handler.tsの実装から確認できるが、直接的なテスト/ドキュメントが不足
  - 候補: `packages/core/workflows-sdk/src/utils/composer/__tests__/`の既存テスト

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: C-01〜C-06, C-39〜C-47（MedusaWorkflow, StepResponseは単純なクラス構造）
- **1（中リスク）**: C-07〜C-17, C-26〜C-38（createStep, when, parallelize, transformは複雑だが明確なエラーハンドリングあり）
- **2（高リスク）**: C-18〜C-25, C-62〜C-77, C-78〜C-92（createWorkflow, createStepHandler, exportWorkflowは複雑な状態管理とエラー処理を含む）

## 6) レビュアーチェックリスト（最小）
- [ ] createStep/createWorkflowのコンテキスト外使用時のエラーメッセージが適切か確認
- [ ] when-then未使用時のエラーがprocess.nextTickで発生するため、非同期コンテキストでのテストが必要
- [ ] parallelizeの単一ステップ時の挙動（実質的に並列化の意味がない）の仕様確認
- [ ] StepResponse.permanentFailureの補償入力処理のエッジケース確認
- [ ] createHookの複数ハンドラー登録エラー時のメッセージがフック名を含むか確認
- [ ] exportWorkflowのキャッシュ機構（cachedLoadedModules）のスレッドセーフ性確認
- [ ] attachOnFinishReleaseEventsのeventBusService未登録時のサイレント失敗が意図通りか確認
