# Complete - 02+yaml_validation ## 완료 일시 2026-05-20 ## 요약 YAML 기본 구조, command list, workflow node shape 검증을 DataBuild 파싱 전후의 명시 validation message로 정리했다. 총 3회 리뷰 루프 후 최종 PASS. ## 루프 이력 | Plan | Review | Verdict | 메모 | |------|--------|---------|------| | `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | root/property/command id 타입 오류가 generated parser/type error로 노출되어 follow-up 필요 | | `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | non-string workflow task key가 jsonEncode raw error로 노출되어 follow-up 필요 | | `plan_cloud_G07_2.log` | `code_review_cloud_G07_2.log` | PASS | nested YAML 변환 안전화와 workflow key validation test 확인 완료 | ## 구현/정리 내용 - `Application.build()`에서 `DataBuild.fromJson()` 전에 build map과 command list 기본 구조를 검증하도록 했다. - `getMapFromYamlA()`를 nested `YamlMap`/`YamlList` 재귀 변환 방식으로 바꿔 JSON encoder raw error를 피했다. - `Pipeline.pipelineInitialize()`에서 workflow item shape와 unsupported task 메시지에 index와 지원 task 목록을 포함하도록 했다. - root non-map, property non-map, command id/type non-string, workflow numeric key invalid YAML 테스트를 추가했다. - 코드 포맷을 적용했다. ## 최종 검증 - `dart analyze` - PASS; `Analyzing oto... No issues found!` - `dart test test/oto_application_test.dart test/oto_core_test.dart` - PASS; `+12: All tests passed!` - `dart test test/oto_command_catalog_test.dart` - PASS; `+5: All tests passed!` - `dart run bin/main.dart exe -f assets/yaml/sample/01_basic.yaml` - PASS; `Build Successfully Complete` - `dart run bin/main.dart exe -f assets/yaml/sample/02_pipeline_if.yaml` - PASS; `Build Successfully Complete` - numeric workflow key smoke - PASS; expected failure path now reports `Validate Pipeline` with `workflow[0]` instead of raw encoder error. ## 잔여 Nit - 없음 ## 후속 작업 - 없음