nyash-codex
5602aff8a9
refactor(smokes): add output_validator.sh for SSOT numeric assertion
Output検証をSSOT化して保守性を向上
**新規追加**:
- tools/smokes/v2/lib/output_validator.sh
- extract_numeric_lines N: 数値行をN行抽出(パターンマッチング)
- assert_equals_multiline EXPECTED ACTUAL: 複数行期待値と比較
- validate_numeric_output N EXPECTED OUTPUT: extract + assert の合成Box
**リファクタリング対象** (5ファイル):
- phase103_if_only_vm.sh
- phase103_if_only_early_return_vm.sh
- phase113_if_only_partial_assign_vm.sh
- phase114_if_only_return_then_post_vm.sh
- phase115_if_only_call_merge_vm.sh
**変更内容**:
- 重複パターン `grep -E '^-?[0-9]+$' | head -n N` → `extract_numeric_lines N`
- 比較ロジック → `validate_numeric_output` に統一
- 各smokeは `source output_validator.sh` で共通機能を利用
**検証結果**:
- phase103_if_only_vm: PASS ✅
- phase103_if_only_early_return_vm: PASS ✅
- phase113_if_only_partial_assign_vm: PASS ✅
- phase114_if_only_return_then_post_vm: PASS ✅
- phase115_if_only_call_merge_vm: PASS ✅
**箱化モジュール化の成果**:
- 単一責任: extract_numeric_lines(抽出のみ)、assert_equals_multiline(比較のみ)
- 分離: 各機能が独立したBox(テスト容易性向上)
- 合成: validate_numeric_output が extract + assert を組み合わせ
- Fail-Fast: 全関数でパラメータチェック(明示的エラー)
- 保守性: 検証パターン変更時は output_validator.sh の1箇所のみ修正
**設計原則**:
- Box-First: 機能を箱に切り出して境界を明確化
- SSOT: 数値行抽出と検証ロジックを1箇所に集約
- Fail-Fast: パラメータ不正時は即座にエラー(フォールバックなし)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 02:32:32 +09:00
..
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-11-06 15:41:52 +09:00
2025-12-13 22:51:13 +09:00
2025-12-16 21:37:07 +09:00
2025-12-17 00:59:33 +09:00
2025-12-17 01:01:07 +09:00
2025-12-17 04:25:57 +09:00
2025-12-17 21:24:59 +09:00
2025-12-17 21:24:59 +09:00
2025-12-17 21:24:59 +09:00
2025-12-17 04:26:05 +09:00
2025-12-17 21:24:59 +09:00
2025-12-17 06:10:59 +09:00
2025-12-17 05:43:44 +09:00
2025-12-17 21:24:59 +09:00
2025-12-17 16:33:26 +09:00
2025-12-17 21:24:59 +09:00
2025-12-17 16:57:11 +09:00
2025-12-17 21:24:59 +09:00
2025-12-18 02:32:32 +09:00
2025-12-17 21:24:59 +09:00
2025-12-18 02:32:32 +09:00
2025-12-17 21:25:12 +09:00
2025-12-17 21:25:12 +09:00
2025-12-17 21:24:59 +09:00
2025-12-17 18:29:27 +09:00
2025-12-17 22:47:42 +09:00
2025-12-17 22:47:42 +09:00
2025-12-17 23:16:53 +09:00
2025-12-17 23:16:53 +09:00
2025-12-18 01:58:38 +09:00
2025-12-18 02:32:32 +09:00
2025-12-18 02:18:57 +09:00
2025-12-18 02:32:32 +09:00
2025-12-18 02:32:08 +09:00
2025-12-18 02:32:08 +09:00
2025-12-15 12:12:54 +09:00
2025-12-15 16:57:28 +09:00
2025-12-15 17:49:08 +09:00
2025-12-15 17:00:51 +09:00
2025-12-15 19:25:33 +09:00