$ uv run tools/flow.py push answers/77-lab01-challenge-day-release.json ! unpublished '77 Log report (reference)' (w1971efa15af33a8): it used the same webhook path ✔ pushed '77 Log report + days and releases (answer)' (id w5ee2fc1d2930303) POST http://localhost:5678/webhook/my-log-report $ uv run tools/flow.py test cases/lab01-challenge.json -v POST http://localhost:5678/webhook/my-log-report · 6 case(s) × 1 ✔ 날짜별 · 월요일 · 1.0s → 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 }, "by_day": { "2026-10-19": { "total": 73, "errors": 0, "error_rate": 0 }, "2026-10-20": { "total": 57, "errors": 0, "error_rate": 0 }, "2026-10-21": { "total": 60, "errors": 0, "error_rate": 0 }, "2026-10-22": { "total": 55, "errors": 0, "error_rate": 0 }, "2026-10-23": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-26": { "total": 70, "errors": 16, "error_rate": 0.2286 }, "2026-10-27": { "total": 62, "errors": 0, "error_rate": 0 }, "2026-10-28": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-29": { "total": 97, "errors": 5, "error_rate": 0.0515 }, "2026-10-30": { "total": 64, "errors": 0, "error_rate": 0 } }, "by_release": { "1.0.0": { "answers": 402, "repeats": 19, "repeat_rate": 0.0473 }, "1.1.0": { "answers": 181, "repeats": 14, "repeat_rate": 0.0773 }, "1.2.0": { "answers": 8, "repeats": 5, "repeat_rate": 0.625 } } } ✔ 날짜별 · 목요일 · 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 }, "by_day": { "2026-10-19": { "total": 73, "errors": 0, "error_rate": 0 }, "2026-10-20": { "total": 57, "errors": 0, "error_rate": 0 }, "2026-10-21": { "total": 60, "errors": 0, "error_rate": 0 }, "2026-10-22": { "total": 55, "errors": 0, "error_rate": 0 }, "2026-10-23": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-26": { "total": 70, "errors": 16, "error_rate": 0.2286 }, "2026-10-27": { "total": 62, "errors": 0, "error_rate": 0 }, "2026-10-28": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-29": { "total": 97, "errors": 5, "error_rate": 0.0515 }, "2026-10-30": { "total": 64, "errors": 0, "error_rate": 0 } }, "by_release": { "1.0.0": { "answers": 402, "repeats": 19, "repeat_rate": 0.0473 }, "1.1.0": { "answers": 181, "repeats": 14, "repeat_rate": 0.0773 }, "1.2.0": { "answers": 8, "repeats": 5, "repeat_rate": 0.625 } } } ✔ 날짜는 10일 · 0.2s → 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 }, "by_day": { "2026-10-19": { "total": 73, "errors": 0, "error_rate": 0 }, "2026-10-20": { "total": 57, "errors": 0, "error_rate": 0 }, "2026-10-21": { "total": 60, "errors": 0, "error_rate": 0 }, "2026-10-22": { "total": 55, "errors": 0, "error_rate": 0 }, "2026-10-23": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-26": { "total": 70, "errors": 16, "error_rate": 0.2286 }, "2026-10-27": { "total": 62, "errors": 0, "error_rate": 0 }, "2026-10-28": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-29": { "total": 97, "errors": 5, "error_rate": 0.0515 }, "2026-10-30": { "total": 64, "errors": 0, "error_rate": 0 } }, "by_release": { "1.0.0": { "answers": 402, "repeats": 19, "repeat_rate": 0.0473 }, "1.1.0": { "answers": 181, "repeats": 14, "repeat_rate": 0.0773 }, "1.2.0": { "answers": 8, "repeats": 5, "repeat_rate": 0.625 } } } ✔ 릴리스별 다시 묻기 · 1.2.0 · 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 }, "by_day": { "2026-10-19": { "total": 73, "errors": 0, "error_rate": 0 }, "2026-10-20": { "total": 57, "errors": 0, "error_rate": 0 }, "2026-10-21": { "total": 60, "errors": 0, "error_rate": 0 }, "2026-10-22": { "total": 55, "errors": 0, "error_rate": 0 }, "2026-10-23": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-26": { "total": 70, "errors": 16, "error_rate": 0.2286 }, "2026-10-27": { "total": 62, "errors": 0, "error_rate": 0 }, "2026-10-28": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-29": { "total": 97, "errors": 5, "error_rate": 0.0515 }, "2026-10-30": { "total": 64, "errors": 0, "error_rate": 0 } }, "by_release": { "1.0.0": { "answers": 402, "repeats": 19, "repeat_rate": 0.0473 }, "1.1.0": { "answers": 181, "repeats": 14, "repeat_rate": 0.0773 }, "1.2.0": { "answers": 8, "repeats": 5, "repeat_rate": 0.625 } } } ✔ 릴리스별 다시 묻기 · 1.0.0 · 1.1.0 · 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 }, "by_day": { "2026-10-19": { "total": 73, "errors": 0, "error_rate": 0 }, "2026-10-20": { "total": 57, "errors": 0, "error_rate": 0 }, "2026-10-21": { "total": 60, "errors": 0, "error_rate": 0 }, "2026-10-22": { "total": 55, "errors": 0, "error_rate": 0 }, "2026-10-23": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-26": { "total": 70, "errors": 16, "error_rate": 0.2286 }, "2026-10-27": { "total": 62, "errors": 0, "error_rate": 0 }, "2026-10-28": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-29": { "total": 97, "errors": 5, "error_rate": 0.0515 }, "2026-10-30": { "total": 64, "errors": 0, "error_rate": 0 } }, "by_release": { "1.0.0": { "answers": 402, "repeats": 19, "repeat_rate": 0.0473 }, "1.1.0": { "answers": 181, "repeats": 14, "repeat_rate": 0.0773 }, "1.2.0": { "answers": 8, "repeats": 5, "repeat_rate": 0.625 } } } ✔ 1.1.0 · 0.0s → 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 }, "by_day": { "2026-10-19": { "total": 73, "errors": 0, "error_rate": 0 }, "2026-10-20": { "total": 57, "errors": 0, "error_rate": 0 }, "2026-10-21": { "total": 60, "errors": 0, "error_rate": 0 }, "2026-10-22": { "total": 55, "errors": 0, "error_rate": 0 }, "2026-10-23": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-26": { "total": 70, "errors": 16, "error_rate": 0.2286 }, "2026-10-27": { "total": 62, "errors": 0, "error_rate": 0 }, "2026-10-28": { "total": 64, "errors": 0, "error_rate": 0 }, "2026-10-29": { "total": 97, "errors": 5, "error_rate": 0.0515 }, "2026-10-30": { "total": 64, "errors": 0, "error_rate": 0 } }, "by_release": { "1.0.0": { "answers": 402, "repeats": 19, "repeat_rate": 0.0473 }, "1.1.0": { "answers": 181, "repeats": 14, "repeat_rate": 0.0773 }, "1.2.0": { "answers": 8, "repeats": 5, "repeat_rate": 0.625 } } } Passed 6/6 report: runs/lab01-challenge-20261031-074930.json $ uv run tools/flow.py test cases/lab01.json POST http://localhost:5678/webhook/my-log-report · 5 case(s) × 1 ✔ 두 주 전체 · 0.1s ✔ 두 주 · 갈래별 · 0.1s ✔ 첫 주 · 0.1s ✔ 둘째 주 · 0.1s ✔ 10월 26일 하루 · 0.1s Passed 5/5 report: runs/lab01-20261031-074930.json