<!-- 公開用の匿名化コピー。原証拠は evidence/ 配下（非公開）。変換規則は evidence_public/CONVERSION_RECORD.md を参照。内容の実行結果は変えていない。 -->

# 13-03 更新・再検証 実行記録（Phase 5B-2D）

- 実行日時: 2026-09-21 10:00 JST
- 実行環境（実測）: macOS 26.6.2 / Node.js v24.18.0（標準機能 node:assert のみ、追加パッケージなし）
- 実行場所: <PROJECT_ROOT>/examples/13-03-update-retest
- 記録方法: コマンドを実行し、stdout・stderr・終了コードを整形・省略せずにそのまま記録した。stderr が空の場合は「stderr: （出力なし）」と記す。
- 対象: run.js・withdraw.js・approval.js（いずれも変更なし。Phase 5B-2D では記事の抜粋と正本の一致確認、および実行記録の取得のみ）。approval.js の関数本体は examples/09-01-unit-tests/approval.js と同一（行末のコメントだけが異なる。下記 2.）。
- 注意: 出力 2 行目の時刻は実行のたびに変わる（run.js が実行時刻を出す）。それ以外の行は決定的。

### 1. `node run.js`

```text
$ node run.js
版: v0.2.0-sandbox
実行環境: darwin, Node.js v24.18.0, 2026-09-21T01:00:06.161Z

=== 新規テスト（canWithdraw、13-01の要望に対応する小さな変更） ===
TC-W01 [正常] 入力={"state":"提出済み","isRequester":true} 期待値=true 実行結果=true 判定=PASS（依頼者本人が提出済みの依頼を取り下げられる）
TC-W02 [異常] 入力={"state":"下書き","isRequester":true} 期待値=false 実行結果=false 判定=PASS（下書きは取り下げの対象にしない）
TC-W03 [異常] 入力={"state":"提出済み","isRequester":false} 期待値=false 実行結果=false 判定=PASS（依頼者本人以外は取り下げられない）

=== 既存テストの再実行（09-01のcanApproveテストケース。変更していない） ===
TC-01 入力={"state":"提出済み","isAssignedApprover":true,"isSelf":false} 期待値=true 実行結果=true 判定=PASS
TC-02 入力={"state":"下書き","isAssignedApprover":true,"isSelf":false} 期待値=false 実行結果=false 判定=PASS
TC-03 入力={"state":"承認済み","isAssignedApprover":true,"isSelf":false} 期待値=false 実行結果=false 判定=PASS
TC-04 入力={"state":"提出済み","isAssignedApprover":false,"isSelf":false} 期待値=false 実行結果=false 判定=PASS
TC-05 入力={"state":"提出済み","isAssignedApprover":true,"isSelf":true} 期待値=false 実行結果=false 判定=PASS
TC-06 入力={"state":"","isAssignedApprover":true,"isSelf":false} 期待値=false 実行結果=false 判定=PASS

新規テスト: 3件中3件PASS
既存テストの再実行: 6件中6件PASS（変更の影響がなかったことを確認）
```

stderr: （出力なし）

終了コード: 0

### 2. `diff approval.js ../09-01-unit-tests/approval.js`（関数本体が 09-01 と同じことの確認）

```text
$ diff approval.js ../09-01-unit-tests/approval.js
1c1
< // 依頼の状態と操作者の役割を入力に、承認可否を返す最小の関数（08-01・09-01と同じもの。変更していない）
---
> // 依頼の状態と操作者の役割を入力に、承認可否を返す最小の関数（08-01と同じもの。単体テスト演習を自己完結させるためのコピー）
3,5c3,5
<   if (state !== "提出済み") return false;
<   if (!isAssignedApprover) return false;
<   if (isSelf) return false;
---
>   if (state !== "提出済み") return false;      // 条件分岐1：状態を判定
>   if (!isAssignedApprover) return false;        // 条件分岐2：割当承認者かを判定
>   if (isSelf) return false;                     // 条件分岐3：自己承認でないかを判定
```

stderr: （出力なし）

終了コード: 1（diff は差分があると 1 を返す。差分はコメントのみで、判定の3行は同じ）
