Repository navigation
[Feat] 시간표 미지원 12개 노선의 공식 시간표를 전국 후보에 적재 - #912
Conversation
- 수도권 등록기가 같은 관측에서 코레일 projection snapshot을 만들고 korailScheduleAdmissionEvidence에 결속한다 (재확인 이력 append-only, 수도권과 같은 관측 시각). - 코레일 provider: 휴일→WEEKEND_HOLIDAY, alias 근거 동반, 급행은 trip 단위 고정 집합(경춘 5·수인분당 22·경의중앙 28). - station-lines provider: 등록 파생 스냅샷의 내용 해시·inventory 결속을 다시 확인하고 trip을 그대로 넘긴다. Refs #903 #862
…nes 포함)으로 상향 Refs #903
…수 원천 지정 - 2026-10-03T00:12Z 실수집(응답 210, 3,956 trip, 기대값 일치), OCI 원본 게시(sha 3a8c462a…), 명시 검토 admission (data-release-authority, QA 승인 2026-10-03 채팅: 출시 범위 전 노선 공식 시간표 적재)으로 등록한다. - governance(kric-subway-timetable과 같은 약관)·freshness(planned_timetable)·원장·inventory·파생 스냅샷을 한 트랜잭션으로 쓴다. - production scope requiredSourceIds에 추가한다. Refs #903 #862
- 코레일 projection(korailScheduleAdmissionEvidence)은 수도권과 같은 inventory evidence·정책 신선도로 고르고, 대경선 계획 시각표·station-lines 파생 스냅샷은 원장 head·fan-in으로 고른 뒤 내용 해시를 원장·inventory와 대조한다. - 두 원천은 공용 적재기로 싣고 station-lines는 외부 시간표 파일(sidecar) 원천에 추가한다. 코레일은 수도권과 같은 원천의 두 번째 섹션이 된다. 노선별 요약·격리 행은 nationwide-official-line-timetable-report.json에 남긴다. - 대경선은 materializeKorailTimetable로 싣는다. e2e에 '팩의 전 노선 trip 1건 이상' 단언을 추가한다(RED). Refs #903 #862
- trip 19,973→26,240, 정차 561,983→671,914, route 26→39, 달력 24→30, 달력 예외 132→200. 증가분은 코레일 6개 노선·KRIC 역별 5개 노선·대경선뿐이고 기존 노선 건수는 같다. Refs #903
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- 수도권 외부 시간표 단언은 같은 원천의 코레일 섹션과 구분하도록 snapshot으로 고른다. - 대경선 재확인 head의 신선도 값과 이전 head lineage를 반영한다. - car-door 등록 테스트의 'inventory·governance 끝' 위치 가정을 '하나만, 기존이면 제자리'로 바꾼다. - station-lines 등록·게시 테스트는 저장소 사본을 등록 전 상태로 되돌려 첫 등록부터 시험한다. Refs #903
topology 재등록이 만든 접근성 중간 snapshot 2개는 같은 브랜치의 재수집 등록으로 대체돼 inventory·원장 어디에서도 참조되지 않는다. Refs #903
- 공용 materialize fixture는 대전 topology 창을 커밋된 evidence 창이 아니라 수집 시각 기준 컷오버 규칙으로 유도한다. - 인천 station-info 수집기·후보 입력 만료 테스트의 24시간 고정값을 컷오버 규칙으로 바꾼다. - 인천 시간표 만료 테스트는 후보 시계를 옮기지 않고 수집 시각을 옮겨 다른 입력의 만료와 섞이지 않게 한다. - 후보 입력 pin을 10-03 원장 head로 갱신한다. - 코레일 projection 결정성 단언을 독립 해시 계산으로 바꾼다(anti-cheat ANTI-CIRCULAR-ORACLE). Refs #903
AquilaXk
left a comment
There was a problem hiding this comment.
Actionable comments posted: 3
🎯 Linked issue & acceptance criteria audit
- Linked issue: #903 Load official timetables for lines without timetable support
- Goal summary: Every launch-scope line gets an official timetable with no estimated times.
- Acceptance criteria verified: 4/4
| ID | Acceptance criterion | Status | Evidence |
|---|---|---|---|
| AC-1 | Reconstruction tests check monotonic times, line membership and continuity | PASS | tools/datapack/prepare-nationwide-candidate-run.test.mjs |
| AC-2 | Korail lines are reconstructed and loaded with pinned express quarantine | PASS | tools/datapack/lib/kric-korail-timetable.mjs |
| AC-3 | Sources for the four separate lines are catalog-checked and measured | PASS | tools/datapack/source-inventory.json |
| AC-4 | The Gimpo Gold line row structure is judged and handled | PASS | tools/datapack/lib/kric-station-lines-timetable.mjs |
⚡ Tiered triage & token efficiency
- Non-code files skipped: 0
- AST symbols extracted: 190
- Estimated token savings: 0%
| Category | Count | Status |
|---|---|---|
| Skipped non-code files | 0 | TIER-1 SKIPPED |
| AST semantic symbols | 190 | TIER-2 EXTRACTED |
🛡️ Adversarial audit evidence
- Falsifiability verified: Yes (Gwangju freshness probe killed 2 of 3 mutants; hardcoded 7-day window went red.)
- Hollow assertions detected: 0
- Production backdoors detected: 0
- Ground-truth sources verified:
Issue 903 QA decision 2026-10-03: all lines in launch scopeLoader pins express row count and row set sha: 5, 22 and 28 tripsSeoul transfer rebind used the sanctioned tool that fails on value changeStation-lines snapshot: 0 quarantine rows, day codes 8 and 9, policy recorded
🤖 Prompt for all review comments with AI agents
Could we verify each finding against the current code and keep only those that
still apply? Could we make the smallest validated fix and briefly note why any
finding no longer applies?
Inline comments:
- `@tools/datapack/lib/kric-korail-timetable.mjs:135-136`
Could a test call kricKorailOfficialTimetable with the default allowance and assert
that lineBindings for I41K2, I28K1 and I4108 carry the pinned rowCount and
rowSetSha256, while the other three lines carry none, mirroring kric-capital-
timetable-records.test.mjs? Could the e2e also assert pinnedQuarantine in the
committed line report, and could the unused expressQuarantine fixture field be
dropped?
- `@tools/datapack/lib/kric-station-lines-timetable.mjs:42-42`
Could quarantine rows reuse the same strict day-kind lookup as admitted trips, so an
unknown day code or weekday label fails explicitly instead of defaulting to holiday?
- `@tools/datapack/source-inventory.json:1577-1577`
Could the PR body note that re-collection changed the snapshot rows (lift 0 to null,
facilityCount 66 to 44 and 56 to 36) while the raw sha and pack facility rows stayed
the same, so reviewers do not read the new counts as lost facilities?
---
Outside diff comments:
None.
ℹ️ Review info
⚙️ Run configuration
Configuration used: aquila-review skill run by Claude Code with hub CLAUDE.md invariants
Review profile: ASSERTIVE
Plan: Aquila fallback
Run ID: N/A (Aquila fallback)
Review source: Aquila CLI
Repository visibility: public GitHub repository
Trigger:
Discovery review of the current change set for the automerge review gate
Base:
main@7f1594b163e8f3a387bf3a777d03e96c1379911d
Head:
feat/integrate-remaining-timetables-903@dc30bf4ce1e299b53b8a95aebfb75f9a307b8bae
Command:
node scripts/compile-review-payload.mjs input.json --output payload-1.json
📥 Commits
Reviewing files changed in this pull request between:
- Base:
7f1594b163e8f3a387bf3a777d03e96c1379911d - Head:
dc30bf4ce1e299b53b8a95aebfb75f9a307b8bae
📒 Files selected for processing (11)
tools/datapack/lib/kric-korail-timetable.mjstools/datapack/lib/kric-korail-timetable.test.mjstools/datapack/lib/kric-station-lines-timetable.mjstools/datapack/lib/kric-station-lines-timetable.test.mjstools/datapack/materialize-gwangju-timetable.mjstools/datapack/prepare-nationwide-candidate-run.mjstools/datapack/prepare-nationwide-candidate-run.test.mjstools/datapack/register-kric-capital-timetable.mjstools/datapack/register-kric-station-timetables.test.mjstools/datapack/release/source-snapshots.jsontools/datapack/source-inventory.json
📜 Review details
리뷰 F1: 기본 allowance 경로를 타는 테스트가 없어 고정 집합 부착 분기를 지우는 변이가 살아남았다. 기본 경로에서 경춘 5·수인분당 22·경의중앙 28 trip 고정 집합이 붙고 나머지 3개 노선에는 붙지 않음을 단언하고, e2e에서 노선 보고서 pinnedQuarantine을 노선별로 단언한다. 부착 분기를 false로 바꾸면 두 테스트가 모두 실패한다. Refs #903
리뷰 F2: 격리 행은 평일이 아닌 값을 모두 주말·휴일로 기록했다. station-lines는 dayCd 8=평일·9=주말·휴일, 코레일은 요일구분 평일·휴일만 받고 그 밖의 값은 SERVICE_DAY로 실패한다. 현재 데이터의 격리 행·보고서·팩 바이트는 바뀌지 않는다. Refs #903
|
|
No description provided. |



Related issue
Refs #903
Refs #862
Summary
도구와 데이터를 한 PR에 담은 이유
prepare-nationwide-candidate-run.test.mjs의 e2e 테스트는 실제 저장소 데이터(원장·inventory·후보 산출물)로 전체 prepare를 실행하고 정확한 건수를 단언한다.Changes
도구
lib/kric-korail-timetable.mjslib/kric-station-lines-timetable.mjs: station-lines 등록 파생 스냅샷의 내용 해시와 inventory 결속을 다시 확인한 뒤 공용 적재기 입력으로 바꾼다.register-kric-capital-timetable.mjskorailScheduleAdmissionEvidence에 결속한다.prepare-nationwide-candidate-run.mjsmaterializeKorailTimetable로 싣는다.nationwide-official-line-timetable-report.json에 남긴다.refresh-nationwide-candidate.mjs: 새 보고서를 refresh 출력에 추가했다.pinnedQuarantine을 노선별로 단언했다. 부착 분기를 지우는 변이는 두 테스트에서 모두 실패한다.SERVICE_DAY로 실패한다. 보고서·팩 바이트는 같다.materialize-gwangju-timetable.mjs(버그 수정)topologySnapshotFreshnessMillis로 검사한다. 컷오버 전 수집은 P1D, 후 수집은 P7D를 정확값으로 요구한다.테스트
데이터(시간표)
kric-subway-timetable-station-linesdata-release-authority, 근거는 QA 승인(2026-10-03 채팅 "출시 범위 전 노선 공식 시간표 적재", [Feat] 코레일 단독 노선 등 시간표 미지원 노선의 공식 시간표 적재 #903)requiredSourceIds에 추가데이터(topology 재등록, 2026-10-03 수집, 모두 P7D)
activate-current-source-set --topology-source-admission→run-current-capital-route-topology-registrationregister-gwangju-route-topology publish-registerregister-daejeon-route-topology publish-registerregister-busan-route-topology publish-registerregister-daegu-datapack-sources publish-registerdecide-current-capital-topology-refresh: itxRefreshRequired=false).register-regional-accessibility publish-register: topology 등록기가 접근성 결속을 새 topology 계보로 바꿨기 때문이다. 원본 sha는 같다.build-busan-transfer-metrics: 지표 12개와 제외 6개는 같고, 원천 식별만 바뀌었다.build-seoul-measured-transfer-metrics: 지표 263개는 같고, 정본 팩 sha만 8102f1f6…에서 83e11161…로 바뀌었다.rebind-current-seoul-transfer-source-admission([Fix] 전국 경로용 서울 환승 증거 재결속 명령 복원 #893): OCI는 GET만 했다(PUT 없음).신선도(가장 이른 만료)
run-retained-gwangju-timetable-refresh로 만료 전에 갱신할 수 없다. 판정이now >= freshnessExpiresAt일 때만 DUE이기 때문이다.register-retained-kric-timetable로 넓히고, 조기 재확인 창을 둔다.Retained Gwangju Timetable Refresh와Current Capital Topology Refresh는 둘 다disabled_manually상태다(gh workflow list --all).Scope
Included
Excluded
activate-current-source-set의 CURRENT_SOURCE_HANDOFF·applySchedule, 두 sourceId 통합). 메인이 후속 이슈로 만든다.materialize-daegu-timetable.mjs의 topology evidence 24시간 고정 검사Ownership / dependencies
Contract & Compatibility
korailScheduleAdmissionEvidencekric-subway-timetable-station-linesnationwide-official-line-timetable-report.jsonVersion impact
Product gate impact
production-datapack-scope.jsonrequiredSourceIds에 등록 완료 원천 1건을 추가했고,datapack-freshness-sla.jsonplanned_timetable에 같은 원천을 등록기가 append했다(Hub #3025와 같은 값).Provenance impact
Version decision
catalog/current.json, 읽기 전용 GET): releaseSequence 124, expiresAt 2026-10-03T06:03:36.888Zdecide-datapack-release)PUBLISH_REQUIRED, productionWriteAllowed true, materialChange true, approvalValid true, strictValidationPassed truePACK_PUBLISH_FRESHNESS_EXPIRING,PUBLISH_REQUIRED_NOT_COMPLETEDe2e 건수 변화(전후)
크기 실측
canary probe 재현
RouteBundleSqliteRuntimeCompiler·JourneyRaptorAdapter를 썼다. 압축해제 상한은 #459로 이미 192MiB이고, 로컬에서 바꾸지 않았다.Verification
register-retained-kric-timetable.test.mjs가 실데이터로 "gwangju-transportation-route-topology evidence freshness relationship is invalid"를 내며 실패했다(CI shard 2/4도 같다). 수정 후 23건이 통과한다.ALL RC STEPS PASSED다.guard-datapack-anti-cheatPASS영향 테스트
node tools/ci/run-affected-tests.mjs --base origin/main: 2077건 중 1974건 통과, 103건 실패emit-station-catalog-pack2건은 로컬에서만 실패한다. #892에서 로컬 시간대·SQLite 고정 런타임 문제로 확인했고, origin/main에서도 같았다. 이번 CI shard 실패 목록에는 없다.refresh-documentation-fragment --worktree후--check결과 IN SYNCNot run
Risk
source-raw/{daejeon,gwangju}-transportation-accessibility/20261002/…이다.Rollout / Recovery
Review focus
Checklist