[BE-38] 리멤버·잡코리아 slice 페이지네이션

작업 내용 (설계 의도)

변경 사항

리멤버의 incremental-since와 잡코리아의 페이지 흐름을 재개 가능한 slice cursor로 전환한다. lastSuccessfulCollectionAt완전 SUCCESS cycle에서만 전진한다; FAILED/BUDGET_EXHAUSTED cycle은 성공 기준을 오염시키지 않는다. 규약 회색지대 소스의 차단/robots 관련 실패는 existing source health 경로를 유지한다.

의존

  • BE-33

다이어그램

처리 흐름

sequenceDiagram
    participant D as Dispatcher
    participant A as Adapter
    participant R as RunRepository
    D->>R: last complete SUCCESS
    D->>A: collectSlice(since, cursor)
    A-->>D: next cursor or complete

클래스 의존

flowchart LR
    RememberAdapter --> CollectionSliceDescriptor
    JobkoreaAdapter --> CollectionSliceDescriptor
    RememberAdapter --> SourceRequestExecutor
    JobkoreaAdapter --> SourceRequestExecutor

테스트 케이스

  • 리멤버 partial/budget-exhausted cycle은 last successful timestamp를 갱신하지 않는다.
  • 잡코리아는 slice page cap에 도달하면 다음 cursor를 반환한다.
  • complete slice만 source health normal과 last successful timestamp 갱신 자격을 가진다.
  • 403 또는 정책 위반은 같은 KST 일자 재호출 없이 terminal FAILED로 기록되고 false-close를 만들지 않는다.