diff --git a/CLAUDE.md b/CLAUDE.md index 2698151..f8a888a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ ## 開発進捗 -最新: PLAN_05 フェーズ 1 として層②テストの共通ハーネスを作り,保存失敗が成功扱いになる不具合を赤→緑で修正した +最新: PLAN_05 フェーズ 2 として層②テストを校正・撮影・切断・UI 連携に広げ,報告台帳の 4 件を赤→緑で修正した ※ 本欄は**最新ステップ 1 行のみ上書き更新**.詳細な進捗履歴(動機・設計判断・失敗パターン)は [docs/PROGRESS.md](docs/PROGRESS.md) に追記する.運用ルールは `.claude/rules/progress-log.md` を参照(該当ファイル編集時に自動ロードされる). ## 必須ルール(コード実装時) diff --git "a/docs/03_PLAN/PLAN_05_\343\203\206\343\202\271\343\203\210\347\266\262\347\276\205\346\200\247\345\220\221\344\270\212\350\250\210\347\224\273.md" "b/docs/03_PLAN/PLAN_05_\343\203\206\343\202\271\343\203\210\347\266\262\347\276\205\346\200\247\345\220\221\344\270\212\350\250\210\347\224\273.md" index e181f4b..ce7226a 100644 --- "a/docs/03_PLAN/PLAN_05_\343\203\206\343\202\271\343\203\210\347\266\262\347\276\205\346\200\247\345\220\221\344\270\212\350\250\210\347\224\273.md" +++ "b/docs/03_PLAN/PLAN_05_\343\203\206\343\202\271\343\203\210\347\266\262\347\276\205\346\200\247\345\220\221\344\270\212\350\250\210\347\224\273.md" @@ -88,6 +88,12 @@ - `Form1` の UI 連携メソッド(UI スレッド外からの呼び出しを含む) - `/auto-audit` 報告台帳のうち,層②で再現テストを書けるようになった項目をここで修正する - 完了条件: 上記の各観点に正常系と失敗注入のテストがそろい,層②全体の実行時間が 30 秒の目安に収まる +- **状態: 完了(2026-10-06)** + - 層②のテストは 3 ファイル 21 件を追加し計 24 件.3 回連続で緑,全体で約 19 秒 + - 報告台帳から 4 件を修正した: `Form1` の取得系メソッドが UI スレッド外で値を返さない,再検出時と切断時にチャートマスクを解放しない,`ResetShotQueue` が残った画像を解放しない,撮影失敗行の Note 欄のクォート漏れ.再現テスト 7 件は修正前のコードで赤になることを確認した + - 撮影系のテストは変換次元を 1 つ(`Calib/ConversionChannels=4`)に絞って時間を抑えた.全次元での保存はフェーズ 1 の単発撮影テストで確認している + - 方針未決のため観点から外したもの: `CalcTcc` の例外境界と校正画像の保存失敗,`Form1_FormClosing`,`SaveThread` の同期 Invoke,`DrainShots` の待ち時間,撮影枚数 0 の完了表示.束 B(フェーズ 3 と同時)で方針を決めてから扱う + - 実機でしか確かめられない残り: 実カメラの `Disconnect` でストリーム停止の直後にマスクを解放してよいか(SDK がコールバックの終了を待つか) ### フェーズ 3: 層③の切り出し diff --git "a/docs/06_TEST/TEST_01_\343\203\206\343\202\271\343\203\210\344\273\225\346\247\230.md" "b/docs/06_TEST/TEST_01_\343\203\206\343\202\271\343\203\210\344\273\225\346\247\230.md" index 402c489..9123db6 100644 --- "a/docs/06_TEST/TEST_01_\343\203\206\343\202\271\343\203\210\344\273\225\346\247\230.md" +++ "b/docs/06_TEST/TEST_01_\343\203\206\343\202\271\343\203\210\344\273\225\346\247\230.md" @@ -29,6 +29,11 @@ | `CameraBaseSaveIntegrationTests`(単発・保存成功) | 撮影画像・sRGB 変換画像・Info.csv が保存され,「全ての画像保存完了」が表示され,撮影ボタンが再び有効になる | | `CameraBaseSaveIntegrationTests`(単発・撮影画像の保存失敗) | 保存失敗が通知され,「全ての画像保存完了」が表示されず,撮影ボタンが再び有効になる | | `CameraBaseSaveIntegrationTests`(連続 3 枚・2 枚目の保存失敗) | 同上 | +| `CameraBaseCalibrationIntegrationTests`(校正) | 校正完了で撮影ボタンが無効から有効になり,校正保存ファイル(SPEC_01)が作られる.チャートが映らないと完了せずボタンは無効のまま.途中で例外が起きても再検出して完了し,旧チャートマスクは解放される | +| `CameraBaseCalibrationIntegrationTests`(切断) | 校正後・校正中の切断で例外にならず,チャートマスクが解放される | +| `CameraBaseShotIntegrationTests`(撮影ループ) | 連続撮影で枚数分のファイルと撮影ログ(間隔どおりの時刻).枚数 0 で例外にならずボタンが戻る.フレーム取得の失敗で中止・通知され,Info.csv の中止行は理由にカンマ・改行・引用符を含んでも 3 列に収まる | +| `CameraBaseShotIntegrationTests`(保存キュー・切断) | 保存失敗時に撮影した全フレームが解放される.前回のキューに残った画像が解放される.保存中の切断で例外にならず保存が完了する | +| `Form1UiIntegrationTests` | データ名・連続撮影の枚数・間隔をワーカースレッドから読んでも UI の入力どおりの値が返る(数値でない入力を含む).ShowMessage・EnableShots が UI に反映される | - **合格条件**: 全件緑.新しいケースを追加したときは,取り込む前に 3 回連続で緑になることを確認する diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 1934604..08a9baf 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -178,3 +178,7 @@ - 設計判断: 一時 config の作成と DoEvents による待機はセルフテストのランナーから切り出し,ハーネスと共用した(2 か所で同じ待機処理を持たない).失敗の注入は,偽カメラの派生で保存先と同名のフォルダを作って `ImWrite` に false を返させる方法にした.保存フォルダ自体を消す案は Info.csv の作成も失敗させて別の経路に乗り,SaveThread との競合で結果も不安定になるため採らなかった. - 失敗パターン: 修正を一時的に戻して赤を確認したあと,ファイルを書き戻すときに更新日時が古いまま残り,MSBuild が再コンパイルせず全体テストが誤って赤になった.ファイルを戻したら更新日時も更新するか,クリーンビルドしてから判定する. - 後段: `CalcTcc` の校正画像の保存失敗(仕様判断待ち).tester・refactorer がビルドとテストを自分で実行できない問題は,テストランナー(`run_tests.py`)の追加で解消した(PR #55). + +- [x] **PLAN_05 フェーズ 2: 層②テストの拡充と報告台帳 4 件の修正** (2026-10-06): 校正の状態遷移・撮影ループ・保存キューの後始末・切断・`Form1` の UI 連携に,正常系と失敗注入の結合テストを広げた.あわせて,ハーネスで再現テストを書けるようになった報告台帳の 4 件(UI スレッド外の取得系メソッド,チャートマスクの解放漏れ,保存キューの取り残し,撮影失敗行のクォート漏れ)を,修正前に赤になることを確かめたうえで直した. + - 設計判断: 保存中の切断は,`SaveThread` が完了表示を UI スレッドへ Invoke するまで終われない性質を使い,メッセージを処理する前に切断することでタイミングに依存せず再現した.撮影系は変換次元を 1 つに絞り,層②全体を 30 秒の目安に収めた(全次元だと約 28 秒). + - 後段: 方針未決の挙動(`CalcTcc` の例外境界,終了処理,`SaveThread` の同期 Invoke,`DrainShots` の待ち時間)はフェーズ 3(束 B)で方針を決めてから扱う.テスト側に変換次元の取得処理など小さな重複が 3 ファイルに残っている.