Skip to content

fix(express-bus-booking): KOBUS 시간표 파서가 주석 속 템플릿을 운행편으로 중복 집계하지 않도록 수정 (#698) - #701

Closed
tahodev wants to merge 2 commits into
NomaDamas:devfrom
tahodev:feature/698
Closed

tahodev wants to merge 2 commits into
NomaDamas:devfrom
tahodev:feature/698

Conversation

@tahodev

@tahodev tahodev commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

요약

#698 대응입니다. express-bus-booking의 KOBUS 시간표 파서가 응답 HTML 주석 안의 예비 행 템플릿(fnSatsChc(deprTime, ...) 같이 인용부호 없는 자리표시자 호출)까지 실제 운행편으로 집계하면서, 실제 운행편 수의 2배를 반환하고 departure_time=null, raw_args=[]인 가짜 항목을 만들던 문제를 수정합니다. 가짜 항목을 선택해 선점 단계로 진행하면 seat_stage_fields에서 IndexError: list index out of range가 발생했습니다.

변경 내용

  • search()에서 fnSatsChc(...)를 찾기 전에 HTML 주석(<!-- ... -->)을 먼저 제거합니다.
  • 인수가 14개 미만인 호출(인용부호 없는 자리표시자 등)은 운행편에서 제외합니다. 실제 운행편 호출은 16개의 인용된 인수를 가지며, 이후 단계(a[12], a[13] 참조)에 필요한 최소 개수를 함께 방어합니다.

테스트

  • express-bus-booking/tests/test_kobus_parser.py 추가: 실제 행 2개 + 주석 속 자리표시자 템플릿 + 주석 속 완전한 인수 호출을 포함한 fixture로 검증합니다. 수정 전 코드에서는 2건 모두 실패, 수정 후 통과함을 확인했습니다.
  • 제 환경에서는 www.kobus.co.kr 접속이 차단되어(TLS handshake timeout) 실사이트 재현은 하지 못했고, 이슈에 기록된 응답 구조를 fixture로 재현해 검증했습니다.
  • sync:cli-skills --check, generate:skill-stubs --check, npm run lint 통과. npm run test의 실패 1건(store longevity mirror workflow uses an import-safe module entrypoint)은 clean dev 브랜치에서도 동일하게 실패하는 기존 문제로, 이 PR과 무관합니다.

@vkehfdl1

vkehfdl1 commented Oct 8, 2026

Copy link
Copy Markdown
Member

리뷰 결과 이 PR은 머지하지 않고 클로즈합니다 — #702에서 동일 이슈(#698)의 수정이 이미 dev에 머지되어 있습니다 (5633c90).

dev의 구현은 이 PR과 같은 문제를 더 완전하게 해결합니다:

  • 주석 제거(HTML_COMMENT_RE) + 최소 인수 가드(MIN_SATS_ARGS = 14) — 이 PR과 동일
  • 추가로 정규식 자체가 따옴표로 시작하는 실제 호출만 매칭(fnSatsChc\(\s*('...))
  • enumerate 인덱스 대신 len(schedules)+1을 써서 스킵 후에도 스케줄 인덱스가 연속 (이 PR 접근은 템플릿을 건너뛸 때 인덱스에 빈칸이 생김)
  • 회귀 테스트가 주석 템플릿·주석 속 완전한 인수 호출·불완전 인수·인덱스 연속성·선점 단계 검증까지 커버

보고해 주신 근본 원인 진단(주석 속 템플릿 중복 집계 → seat_stage_fields IndexError)이 정확했고 이슈 재현 fixture 작성도 좋았습니다. 다만 dev와 충돌하는 중복 수정이라 그대로 두면 안 됩니다.

이슈 #698은 dev 기준으로 해결 상태입니다 (main 반영은 release 흐름 대기).

@vkehfdl1 vkehfdl1 closed this Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants