$ uv run tools/flow.py test cases/lab01.json --webhook base-report -v POST http://localhost:5678/webhook/base-report · 5 case(s) × 1 ✘ 두 주 전체 · 0.2s · total = 602 (expected 666); error_rate = 3.488372093023256 (expected 0.0315); p50_ms = null (expected 1205); p95_ms = null (expected 2537) → request POST /webhook/base-report { "from": "2026-10-19", "to": "2026-10-30" } ← response HTTP 200 { "total": 602, "errors": 21, "error_rate": 3.488372093023256, "avg_ms": 1249.2392026578073, "by_route": { "자동 답변": 529, "담당자 연결": 32, "잠시 후": 20 } } ✘ 두 주 · 갈래별 · 0.1s · by_route.자동 답변 = 529 (expected 591); by_route.담당자 연결 = 32 (expected 34); by_route.오류 = null (expected 21) → request POST /webhook/base-report { "from": "2026-10-19", "to": "2026-10-30" } ← response HTTP 200 { "total": 602, "errors": 21, "error_rate": 3.488372093023256, "avg_ms": 1249.2392026578073, "by_route": { "자동 답변": 529, "담당자 연결": 32, "잠시 후": 20 } } ✘ 첫 주 · 0.1s · total = 245 (expected 309) → request POST /webhook/base-report { "from": "2026-10-19", "to": "2026-10-23" } ← response HTTP 200 { "total": 245, "errors": 0, "error_rate": 0, "avg_ms": 1317.1551020408162, "by_route": { "자동 답변": 230, "담당자 연결": 15 } } ✘ 둘째 주 · 0.1s · total = 293 (expected 357); error_rate = 7.167235494880546 (expected 0.0588); p95_ms = null (expected 2598) → request POST /webhook/base-report { "from": "2026-10-26", "to": "2026-10-30" } ← response HTTP 200 { "total": 293, "errors": 21, "error_rate": 7.167235494880546, "avg_ms": 1173.1399317406144, "by_route": { "자동 답변": 237, "담당자 연결": 15, "잠시 후": 20 } } ✘ 10월 26일 하루 · 0.1s · total = 0 (expected 70); errors = 0 (expected 16) → request POST /webhook/base-report { "from": "2026-10-26", "to": "2026-10-26" } ← response HTTP 200 { "total": 0, "errors": 0, "error_rate": null, "avg_ms": null, "by_route": {} } Passed 0/5 report: runs/lab01-20261031-074859.json