$ uv run tools/flow.py push reference/lab01-example2-report.json ✔ pushed '77 Log report (reference)' (id w1971efa15af33a8) POST http://localhost:5678/webhook/my-log-report $ uv run tools/flow.py test cases/lab01.json -v POST http://localhost:5678/webhook/my-log-report · 5 case(s) × 1 ✔ 두 주 전체 · 0.9s → request POST /webhook/my-log-report { "from": "2026-10-19", "to": "2026-10-30" } ← response HTTP 200 { "total": 666, "errors": 21, "error_rate": 0.0315, "p50_ms": 1205, "p95_ms": 2537, "by_route": { "자동 답변": 591, "담당자 연결": 34, "오류": 21, "잠시 후": 20 } } ✔ 두 주 · 갈래별 · 0.1s → request POST /webhook/my-log-report { "from": "2026-10-19", "to": "2026-10-30" } ← response HTTP 200 { "total": 666, "errors": 21, "error_rate": 0.0315, "p50_ms": 1205, "p95_ms": 2537, "by_route": { "자동 답변": 591, "담당자 연결": 34, "오류": 21, "잠시 후": 20 } } ✔ 첫 주 · 0.2s → request POST /webhook/my-log-report { "from": "2026-10-19", "to": "2026-10-23" } ← response HTTP 200 { "total": 309, "errors": 0, "error_rate": 0, "p50_ms": 1252, "p95_ms": 2525, "by_route": { "자동 답변": 292, "담당자 연결": 17 } } ✔ 둘째 주 · 0.1s → request POST /webhook/my-log-report { "from": "2026-10-26", "to": "2026-10-30" } ← response HTTP 200 { "total": 357, "errors": 21, "error_rate": 0.0588, "p50_ms": 1171, "p95_ms": 2598, "by_route": { "오류": 21, "자동 답변": 299, "담당자 연결": 17, "잠시 후": 20 } } ✔ 10월 26일 하루 · 0.0s → request POST /webhook/my-log-report { "from": "2026-10-26", "to": "2026-10-26" } ← response HTTP 200 { "total": 70, "errors": 16, "error_rate": 0.2286, "p50_ms": 1082, "p95_ms": 2468, "by_route": { "오류": 16, "자동 답변": 50, "담당자 연결": 4 } } Passed 5/5 report: runs/lab01-20261031-074912.json $ uv run tools/flow.py call my-log-report requests/week2.json HTTP 200 · 0.1s { "total": 357, "errors": 21, "error_rate": 0.0588, "p50_ms": 1171, "p95_ms": 2598, "by_route": { "오류": 21, "자동 답변": 299, "담당자 연결": 17, "잠시 후": 20 } }