Files

1095 lines
29 KiB
Plaintext
Raw Permalink Normal View History

$ uv run tools/flow.py test cases/lab01-edges.json -v
POST http://localhost:5678/webhook/my-faq-check · 6 case(s) × 1
✔ 제목 40자는 통과, 41자는 너무 김 · 0.1s
→ request POST /webhook/my-faq-check
{
"batch": "E-1",
"items": [
{
"id": "FAQ-401",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가",
"keywords": [
"메신저",
"알림"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-402",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가요",
"keywords": [
"메신저"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-403",
"title": " ",
"keywords": [
"사원증"
],
"answer": "사원증 사진은 인사 포털에서 바꿉니다."
},
{
"id": "FAQ-404",
"title": "장비 신청",
"keywords": [
"장비"
],
"answer": "IT 포털에서 신청"
},
{
"id": "FAQ-405",
"title": "장비 반납",
"keywords": [
"반납"
],
"answer": "IT포털에서 신청"
},
{
"id": "FAQ-406",
"title": "야간 장애 연락",
"keywords": [
"야간",
"장애"
],
"answer": "야간 장애는 당직자 01012345678 로 전화합니다."
},
{
"id": "FAQ-407",
"title": "IT 문의 창구",
"keywords": [
"문의",
"창구"
],
"answer": "IT 문의 창구 번호는 02-123-4567 (평일 9~18시) 입니다."
},
{
"id": "FAQ-408",
"title": "도움말 모음",
"keywords": [
"도움말"
],
"answer": "도움말은 https://intra.example.com/help 에 모여 있습니다."
},
{
"id": "FAQ-409",
"title": "보안 교육 자료",
"keywords": [
"보안 교육"
],
"answer": "보안 교육 자료는 http://intra.example.com.evil.io/edu 에서 받습니다."
},
{
"id": "faq-410",
"title": "출장 노트북",
"keywords": [
"출장"
],
"answer": "출장용 노트북은 IT팀에 사흘 전까지 신청합니다."
}
]
}
← response HTTP 200
{
"batch": "E-1",
"total": 10,
"valid": 4,
"invalid": 6,
"with_warnings": 0,
"rows": [
{
"id": "FAQ-401",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-402",
"ok": false,
"errors": [
"title_too_long"
],
"warnings": []
},
{
"id": "FAQ-403",
"ok": false,
"errors": [
"title_missing"
],
"warnings": []
},
{
"id": "FAQ-404",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-405",
"ok": false,
"errors": [
"answer_too_short"
],
"warnings": []
},
{
"id": "FAQ-406",
"ok": false,
"errors": [
"pii"
],
"warnings": []
},
{
"id": "FAQ-407",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-408",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-409",
"ok": false,
"errors": [
"external_link"
],
"warnings": []
},
{
"id": "faq-410",
"ok": false,
"errors": [
"id_format"
],
"warnings": []
}
],
"codes": {
"title_too_long": 1,
"title_missing": 1,
"answer_too_short": 1,
"pii": 1,
"external_link": 1,
"id_format": 1
}
}
✔ 공백만 있는 제목은 빈 값 · 0.1s
→ request POST /webhook/my-faq-check
{
"batch": "E-1",
"items": [
{
"id": "FAQ-401",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가",
"keywords": [
"메신저",
"알림"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-402",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가요",
"keywords": [
"메신저"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-403",
"title": " ",
"keywords": [
"사원증"
],
"answer": "사원증 사진은 인사 포털에서 바꿉니다."
},
{
"id": "FAQ-404",
"title": "장비 신청",
"keywords": [
"장비"
],
"answer": "IT 포털에서 신청"
},
{
"id": "FAQ-405",
"title": "장비 반납",
"keywords": [
"반납"
],
"answer": "IT포털에서 신청"
},
{
"id": "FAQ-406",
"title": "야간 장애 연락",
"keywords": [
"야간",
"장애"
],
"answer": "야간 장애는 당직자 01012345678 로 전화합니다."
},
{
"id": "FAQ-407",
"title": "IT 문의 창구",
"keywords": [
"문의",
"창구"
],
"answer": "IT 문의 창구 번호는 02-123-4567 (평일 9~18시) 입니다."
},
{
"id": "FAQ-408",
"title": "도움말 모음",
"keywords": [
"도움말"
],
"answer": "도움말은 https://intra.example.com/help 에 모여 있습니다."
},
{
"id": "FAQ-409",
"title": "보안 교육 자료",
"keywords": [
"보안 교육"
],
"answer": "보안 교육 자료는 http://intra.example.com.evil.io/edu 에서 받습니다."
},
{
"id": "faq-410",
"title": "출장 노트북",
"keywords": [
"출장"
],
"answer": "출장용 노트북은 IT팀에 사흘 전까지 신청합니다."
}
]
}
← response HTTP 200
{
"batch": "E-1",
"total": 10,
"valid": 4,
"invalid": 6,
"with_warnings": 0,
"rows": [
{
"id": "FAQ-401",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-402",
"ok": false,
"errors": [
"title_too_long"
],
"warnings": []
},
{
"id": "FAQ-403",
"ok": false,
"errors": [
"title_missing"
],
"warnings": []
},
{
"id": "FAQ-404",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-405",
"ok": false,
"errors": [
"answer_too_short"
],
"warnings": []
},
{
"id": "FAQ-406",
"ok": false,
"errors": [
"pii"
],
"warnings": []
},
{
"id": "FAQ-407",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-408",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-409",
"ok": false,
"errors": [
"external_link"
],
"warnings": []
},
{
"id": "faq-410",
"ok": false,
"errors": [
"id_format"
],
"warnings": []
}
],
"codes": {
"title_too_long": 1,
"title_missing": 1,
"answer_too_short": 1,
"pii": 1,
"external_link": 1,
"id_format": 1
}
}
✔ 답 10자는 통과, 9자는 너무 짧음 · 0.0s
→ request POST /webhook/my-faq-check
{
"batch": "E-1",
"items": [
{
"id": "FAQ-401",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가",
"keywords": [
"메신저",
"알림"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-402",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가요",
"keywords": [
"메신저"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-403",
"title": " ",
"keywords": [
"사원증"
],
"answer": "사원증 사진은 인사 포털에서 바꿉니다."
},
{
"id": "FAQ-404",
"title": "장비 신청",
"keywords": [
"장비"
],
"answer": "IT 포털에서 신청"
},
{
"id": "FAQ-405",
"title": "장비 반납",
"keywords": [
"반납"
],
"answer": "IT포털에서 신청"
},
{
"id": "FAQ-406",
"title": "야간 장애 연락",
"keywords": [
"야간",
"장애"
],
"answer": "야간 장애는 당직자 01012345678 로 전화합니다."
},
{
"id": "FAQ-407",
"title": "IT 문의 창구",
"keywords": [
"문의",
"창구"
],
"answer": "IT 문의 창구 번호는 02-123-4567 (평일 9~18시) 입니다."
},
{
"id": "FAQ-408",
"title": "도움말 모음",
"keywords": [
"도움말"
],
"answer": "도움말은 https://intra.example.com/help 에 모여 있습니다."
},
{
"id": "FAQ-409",
"title": "보안 교육 자료",
"keywords": [
"보안 교육"
],
"answer": "보안 교육 자료는 http://intra.example.com.evil.io/edu 에서 받습니다."
},
{
"id": "faq-410",
"title": "출장 노트북",
"keywords": [
"출장"
],
"answer": "출장용 노트북은 IT팀에 사흘 전까지 신청합니다."
}
]
}
← response HTTP 200
{
"batch": "E-1",
"total": 10,
"valid": 4,
"invalid": 6,
"with_warnings": 0,
"rows": [
{
"id": "FAQ-401",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-402",
"ok": false,
"errors": [
"title_too_long"
],
"warnings": []
},
{
"id": "FAQ-403",
"ok": false,
"errors": [
"title_missing"
],
"warnings": []
},
{
"id": "FAQ-404",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-405",
"ok": false,
"errors": [
"answer_too_short"
],
"warnings": []
},
{
"id": "FAQ-406",
"ok": false,
"errors": [
"pii"
],
"warnings": []
},
{
"id": "FAQ-407",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-408",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-409",
"ok": false,
"errors": [
"external_link"
],
"warnings": []
},
{
"id": "faq-410",
"ok": false,
"errors": [
"id_format"
],
"warnings": []
}
],
"codes": {
"title_too_long": 1,
"title_missing": 1,
"answer_too_short": 1,
"pii": 1,
"external_link": 1,
"id_format": 1
}
}
✔ 하이픈 없는 휴대전화도 개인정보, 사무실 번호는 통과 · 0.1s
→ request POST /webhook/my-faq-check
{
"batch": "E-1",
"items": [
{
"id": "FAQ-401",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가",
"keywords": [
"메신저",
"알림"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-402",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가요",
"keywords": [
"메신저"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-403",
"title": " ",
"keywords": [
"사원증"
],
"answer": "사원증 사진은 인사 포털에서 바꿉니다."
},
{
"id": "FAQ-404",
"title": "장비 신청",
"keywords": [
"장비"
],
"answer": "IT 포털에서 신청"
},
{
"id": "FAQ-405",
"title": "장비 반납",
"keywords": [
"반납"
],
"answer": "IT포털에서 신청"
},
{
"id": "FAQ-406",
"title": "야간 장애 연락",
"keywords": [
"야간",
"장애"
],
"answer": "야간 장애는 당직자 01012345678 로 전화합니다."
},
{
"id": "FAQ-407",
"title": "IT 문의 창구",
"keywords": [
"문의",
"창구"
],
"answer": "IT 문의 창구 번호는 02-123-4567 (평일 9~18시) 입니다."
},
{
"id": "FAQ-408",
"title": "도움말 모음",
"keywords": [
"도움말"
],
"answer": "도움말은 https://intra.example.com/help 에 모여 있습니다."
},
{
"id": "FAQ-409",
"title": "보안 교육 자료",
"keywords": [
"보안 교육"
],
"answer": "보안 교육 자료는 http://intra.example.com.evil.io/edu 에서 받습니다."
},
{
"id": "faq-410",
"title": "출장 노트북",
"keywords": [
"출장"
],
"answer": "출장용 노트북은 IT팀에 사흘 전까지 신청합니다."
}
]
}
← response HTTP 200
{
"batch": "E-1",
"total": 10,
"valid": 4,
"invalid": 6,
"with_warnings": 0,
"rows": [
{
"id": "FAQ-401",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-402",
"ok": false,
"errors": [
"title_too_long"
],
"warnings": []
},
{
"id": "FAQ-403",
"ok": false,
"errors": [
"title_missing"
],
"warnings": []
},
{
"id": "FAQ-404",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-405",
"ok": false,
"errors": [
"answer_too_short"
],
"warnings": []
},
{
"id": "FAQ-406",
"ok": false,
"errors": [
"pii"
],
"warnings": []
},
{
"id": "FAQ-407",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-408",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-409",
"ok": false,
"errors": [
"external_link"
],
"warnings": []
},
{
"id": "faq-410",
"ok": false,
"errors": [
"id_format"
],
"warnings": []
}
],
"codes": {
"title_too_long": 1,
"title_missing": 1,
"answer_too_short": 1,
"pii": 1,
"external_link": 1,
"id_format": 1
}
}
✔ 사내 주소는 통과, 사내 주소처럼 보이는 바깥 링크는 막음 · 0.0s
→ request POST /webhook/my-faq-check
{
"batch": "E-1",
"items": [
{
"id": "FAQ-401",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가",
"keywords": [
"메신저",
"알림"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-402",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가요",
"keywords": [
"메신저"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-403",
"title": " ",
"keywords": [
"사원증"
],
"answer": "사원증 사진은 인사 포털에서 바꿉니다."
},
{
"id": "FAQ-404",
"title": "장비 신청",
"keywords": [
"장비"
],
"answer": "IT 포털에서 신청"
},
{
"id": "FAQ-405",
"title": "장비 반납",
"keywords": [
"반납"
],
"answer": "IT포털에서 신청"
},
{
"id": "FAQ-406",
"title": "야간 장애 연락",
"keywords": [
"야간",
"장애"
],
"answer": "야간 장애는 당직자 01012345678 로 전화합니다."
},
{
"id": "FAQ-407",
"title": "IT 문의 창구",
"keywords": [
"문의",
"창구"
],
"answer": "IT 문의 창구 번호는 02-123-4567 (평일 9~18시) 입니다."
},
{
"id": "FAQ-408",
"title": "도움말 모음",
"keywords": [
"도움말"
],
"answer": "도움말은 https://intra.example.com/help 에 모여 있습니다."
},
{
"id": "FAQ-409",
"title": "보안 교육 자료",
"keywords": [
"보안 교육"
],
"answer": "보안 교육 자료는 http://intra.example.com.evil.io/edu 에서 받습니다."
},
{
"id": "faq-410",
"title": "출장 노트북",
"keywords": [
"출장"
],
"answer": "출장용 노트북은 IT팀에 사흘 전까지 신청합니다."
}
]
}
← response HTTP 200
{
"batch": "E-1",
"total": 10,
"valid": 4,
"invalid": 6,
"with_warnings": 0,
"rows": [
{
"id": "FAQ-401",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-402",
"ok": false,
"errors": [
"title_too_long"
],
"warnings": []
},
{
"id": "FAQ-403",
"ok": false,
"errors": [
"title_missing"
],
"warnings": []
},
{
"id": "FAQ-404",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-405",
"ok": false,
"errors": [
"answer_too_short"
],
"warnings": []
},
{
"id": "FAQ-406",
"ok": false,
"errors": [
"pii"
],
"warnings": []
},
{
"id": "FAQ-407",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-408",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-409",
"ok": false,
"errors": [
"external_link"
],
"warnings": []
},
{
"id": "faq-410",
"ok": false,
"errors": [
"id_format"
],
"warnings": []
}
],
"codes": {
"title_too_long": 1,
"title_missing": 1,
"answer_too_short": 1,
"pii": 1,
"external_link": 1,
"id_format": 1
}
}
✔ 소문자 id · 합계 10줄 중 4줄 통과 · 0.1s
→ request POST /webhook/my-faq-check
{
"batch": "E-1",
"items": [
{
"id": "FAQ-401",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가",
"keywords": [
"메신저",
"알림"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-402",
"title": "사내 메신저 알림이 오지 않을 때 확인할 것과 다시 설정하는 법가가가가가요",
"keywords": [
"메신저"
],
"answer": "메신저 설정의 '알림' 탭에서 알림을 다시 켭니다."
},
{
"id": "FAQ-403",
"title": " ",
"keywords": [
"사원증"
],
"answer": "사원증 사진은 인사 포털에서 바꿉니다."
},
{
"id": "FAQ-404",
"title": "장비 신청",
"keywords": [
"장비"
],
"answer": "IT 포털에서 신청"
},
{
"id": "FAQ-405",
"title": "장비 반납",
"keywords": [
"반납"
],
"answer": "IT포털에서 신청"
},
{
"id": "FAQ-406",
"title": "야간 장애 연락",
"keywords": [
"야간",
"장애"
],
"answer": "야간 장애는 당직자 01012345678 로 전화합니다."
},
{
"id": "FAQ-407",
"title": "IT 문의 창구",
"keywords": [
"문의",
"창구"
],
"answer": "IT 문의 창구 번호는 02-123-4567 (평일 9~18시) 입니다."
},
{
"id": "FAQ-408",
"title": "도움말 모음",
"keywords": [
"도움말"
],
"answer": "도움말은 https://intra.example.com/help 에 모여 있습니다."
},
{
"id": "FAQ-409",
"title": "보안 교육 자료",
"keywords": [
"보안 교육"
],
"answer": "보안 교육 자료는 http://intra.example.com.evil.io/edu 에서 받습니다."
},
{
"id": "faq-410",
"title": "출장 노트북",
"keywords": [
"출장"
],
"answer": "출장용 노트북은 IT팀에 사흘 전까지 신청합니다."
}
]
}
← response HTTP 200
{
"batch": "E-1",
"total": 10,
"valid": 4,
"invalid": 6,
"with_warnings": 0,
"rows": [
{
"id": "FAQ-401",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-402",
"ok": false,
"errors": [
"title_too_long"
],
"warnings": []
},
{
"id": "FAQ-403",
"ok": false,
"errors": [
"title_missing"
],
"warnings": []
},
{
"id": "FAQ-404",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-405",
"ok": false,
"errors": [
"answer_too_short"
],
"warnings": []
},
{
"id": "FAQ-406",
"ok": false,
"errors": [
"pii"
],
"warnings": []
},
{
"id": "FAQ-407",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-408",
"ok": true,
"errors": [],
"warnings": []
},
{
"id": "FAQ-409",
"ok": false,
"errors": [
"external_link"
],
"warnings": []
},
{
"id": "faq-410",
"ok": false,
"errors": [
"id_format"
],
"warnings": []
}
],
"codes": {
"title_too_long": 1,
"title_missing": 1,
"answer_too_short": 1,
"pii": 1,
"external_link": 1,
"id_format": 1
}
}
Passed 6/6
report: runs/lab01-edges-20261101-180518.json
$ uv run tools/flow.py test cases/lab01-edges.json --webhook base-faq-check
POST http://localhost:5678/webhook/base-faq-check · 6 case(s) × 1
✘ 제목 40자는 통과, 41자는 너무 김 · 0.0s · rows.1.ok = true (expected false); rows.1.errors has none of ['title_too_long']
✘ 공백만 있는 제목은 빈 값 · 0.1s · rows.2.errors has none of ['title_missing']
✘ 답 10자는 통과, 9자는 너무 짧음 · 0.0s · rows.4.errors has none of ['answer_too_short']
✘ 하이픈 없는 휴대전화도 개인정보, 사무실 번호는 통과 · 0.1s · rows.5.errors has none of ['pii']
✘ 사내 주소는 통과, 사내 주소처럼 보이는 바깥 링크는 막음 · 0.0s · rows.8.errors has none of ['external_link']
✘ 소문자 id · 합계 10줄 중 4줄 통과 · 0.1s · valid = 10 (expected 4); rows.9.errors has none of ['id_format']
Passed 0/6
report: runs/lab01-edges-20261101-180519.json