Skip to content

[Chore] 계획 시간표 신선도 클래스에 KRIC 역별 시간표 원천 추가 - #3025

Merged
AquilaXk merged 1 commit into
mainfrom
chore/station-lines-freshness-903
Oct 2, 2026
Merged

AquilaXk merged 1 commit into
mainfrom
chore/station-lines-freshness-903

Conversation

@AquilaXk

@AquilaXk AquilaXk commented Oct 2, 2026

Copy link
Copy Markdown
Owner

관련 이슈 / Related issue

Refs AquilaXk/easysubway-data#903
Refs AquilaXk/easysubway-data#862

작업 배경 / Summary

  • Problem: GTX-A·에버라인·의정부·김포골드·부산김해는 첫 전국 발행본에 시간표 trip이 0건이다. QA 결정(2026-10-03)으로 전 노선이 출시 범위가 됐다. data#903에서는 이 노선들의 공식 시간표를 KRIC subwayTimetable 역별 응답으로 재구성하고, 새 sourceId kric-subway-timetable-station-lines로 등록한다. 기존 kric-subway-timetable은 4호선 pilot 활성화 체인과 충돌하므로 쓰지 않는다. data CI는 validate-source-inventory를 실행하는데, 이때 Hub data 계약 번들의 freshness 정책을 쓴다. governance의 모든 sourceId가 freshness 클래스에 있어야 하므로(SOURCE_FRESHNESS_POLICY_MISSING), 이 계약이 먼저 바뀌어야 data 등록이 가능하다.
  • Outcome: planned_timetable 클래스 sourceIds에 kric-subway-timetable-station-lines를 추가했다. 같은 KRIC 계획 시간표 원천이므로 기존 기준(재검증 P30D, serviceEffectiveAt basis)을 그대로 쓴다. 새 기준은 만들지 않았다. data 레포는 이 PR이 병합된 뒤 통합 PR에서 lock pin을 올린다([Chore] 노선 topology 신선도 정책을 P1D에서 P7D 만료 안전망으로 전환 #3024 → data#904와 같은 절차).

작업 내용 / Changes

  • release/product-gates/datapack-freshness-sla.json: planned_timetable.sourceIds에 kric-subway-timetable-station-lines를 추가했다. 다른 클래스와 필드는 바꾸지 않았다.
  • contracts/bundles/data-contracts-v1.0.0.json, data-contracts-v1.1.0.json: node tools/repo/build-data-contract-bundle.mjs --write all로 재생성했다. 손으로 고치지 않았다. 새 v1.0.0 sha256은 517a3dd3d9b9c572b5312387d497dc70394bc5ebdf0982a347d8a65700a5cf9f다.
  • tools/repo/data-contract-bundle.test.mjs
    • 정책과 두 번들의 planned_timetable sourceIds에 새 id가 있는지 고정했다.
    • "data 정책에는 있지만 Hub governance·inventory 사본에는 없는 원천" 닫힌 목록에 새 id를 추가하고 사유를 남겼다(data#903 등록 전).

Scope

Included

  • 계획 시간표 신선도 클래스 소속 추가, 공식 생성기로 만든 번들 재생성, 계약 테스트

Excluded

  • data 레포 pin 상향과 원천 등록(data#903 통합 PR·데이터 PR)
  • Hub governance·inventory 사본 동기화(data 등록 뒤 기존 동기화 절차로 처리)

Ownership / dependencies

Documentation impact

  • 영향 resource ID 또는 NONE: NONE. node tools/repo/refresh-documentation-fragment.mjs --check 결과 IN SYNC다(바뀐 파일 중 fragment 등록 resource 없음).
  • resourceClass: 해당 없음
  • documentationFamily: 해당 없음
  • lifecycle/evidence 영향: 없음

검증 / Verification

Check Result / Evidence
Focused RED → GREEN 테스트를 먼저 추가하고 node --test tools/repo/data-contract-bundle.test.mjs를 실행했다. 변경 전에는 planned_timetable sourceIds가 ['korail-metropolitan-planned-timetable','kric-subway-timetable']라 실패했다. 정책을 바꾸고 번들을 재생성한 뒤에는 닫힌 목록 단언이 실패했고, 사유와 함께 목록을 갱신해 pass 9 / fail 0이 됐다.
Affected integration node --test tools/repo/*.test.mjs: tests 347 / pass 346 / fail 0. node --test tools/ci/check-contracts.test.mjs tools/ci/datapack-release-workflow.test.mjs tools/repo/sync-component-mirrors.test.mjs: tests 197 / pass 197. node tools/ci/check-contracts.mjs --workspace contracts/workspaces/hub.json --current-only --local-contracts-only: exit 0. node tools/repo/build-data-contract-bundle.mjs --check all: exit 0.
Required CI 이 PR의 required check
Manual / production-like Not required — reason: 계약 JSON과 테스트만 바꿨고 런타임 배포는 없다.
Security / privacy / accessibility Not applicable — reason: 비밀값·개인정보·UI를 다루지 않는다.
  • 실행한 명령과 결과: 위 표와 같다.

검증 증거

  • 증거 불필요 사유: UI·배포 변경이 없다. 계약 변경은 위 명령 출력과 이 PR의 CI 결과로 확인한다.

Version impact

  • no version change
  • mobile patch
  • mobile minor
  • mobile major
  • backend deploy only
  • datapack release only
  • route/realtime contract change
  • DB migration change

Route commercialization gate impact

  • route-commercialization-gate.json 영향 없음
  • route ETA accuracy, realtime coverage, accessibility regression, route v2 contract report를 갱신했다.
  • 상용 경로/ETA claim을 추가하거나 변경하지 않는다.

Route release readiness tracker impact

Version decision

  • mobile versionName / versionCode: 변경 없음
  • datapack version: 변경 없음
  • route / realtime contract: 변경 없음
  • backend identity: 변경 없음

Not run

  • Check: None
  • Reason: 해당 없음
  • Rerun owner / condition: 해당 없음

리뷰어 메모 / Review focus

  • 리뷰어가 먼저 봐야 할 지점: 새 sourceId가 기존 planned_timetable 기준을 그대로 쓰는지(새 기준이 없는지), 닫힌 목록 추가 사유

리스크 / Risk

  • Level: High
  • Main risk: data 쪽 pin 상향 전에는 효과가 없다. 반대로 pin을 올렸는데 등록이 늦어지면, freshness 클래스에 inventory에 없는 id가 있게 된다. validator는 governance 기준으로만 대조하므로 이 상태로 실패하지는 않는다(현재 Hub 닫힌 목록과 같은 상태).
  • Failure behavior: 번들이 원본과 다르면 --check all과 계약 테스트가 실패한다.
  • State mutation on failure: 없음
  • Fallback or degraded-success path introduced: No

Rollout / Recovery

  • Rollout or activation: 병합 뒤 data 통합 PR에서 pin을 올린다.
  • Monitoring / success signal: data CI의 validate-source-inventory가 새 id 등록을 통과한다.
  • Rollback or recovery: 이 PR을 revert하고 번들을 재생성한다.
  • Data / config compatibility after rollback: data가 pin을 올리기 전이면 영향이 없다.

체크리스트 / Checklist

  • PR 본문은 이 템플릿 섹션을 삭제하지 않고 모두 채웠다.
  • 이슈 범위와 실제 diff가 일치하며 관련 없는 변경을 포함하지 않았다.
  • 위험에 필요한 검증과 미실행 사유를 기록했다.
  • CodeRabbit 리뷰를 확인했다.
  • GitHub PR Review 객체가 있는지 확인했다. CodeRabbit status check만으로는 리뷰 완료로 보지 않는다.
  • CodeRabbit 실행이 불가능하거나 PR Review 객체가 없으면 Codex CLI code review를 단일 PR review로 게시했다.
  • CodeRabbit 봇과의 추가 질의응답을 포함하여 모든 Review thread가 해결(Resolve conversation)되었는지 확인했다.
  • 배포 영향이 있는 경우 CD 상태를 확인했다.

- planned_timetable sourceIds에 kric-subway-timetable-station-lines를 추가하고 data 계약 번들 v1.0.0·v1.1.0을 재생성한다.
- 같은 KRIC subwayTimetable 계획 시간표 원천이므로 기존 기준(P30D 재검증)을 그대로 따른다.
- data 등록 전까지 Hub 사본에 없는 원천 닫힌 목록에 사유와 함께 추가한다.

Refs AquilaXk/easysubway-data#903
@coderabbitai

coderabbitai Bot commented Oct 2, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Repository: AquilaXk/easysubway/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 2bdf7161-c27d-4bb3-acbf-bf0b40b2fa9f

  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

sonarqubecloud Bot commented Oct 2, 2026

Copy link
Copy Markdown

@AquilaXk AquilaXk left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🎯 Linked issue & acceptance criteria audit
ID Acceptance criterion Status Evidence
C1 Only the new sourceId joins planned_timetable; cadence unchanged. PASS release/product-gates/datapack-freshness-sla.json
C2 Bundles v1.0.0 and v1.1.0 are regenerated by the official tool. PASS contracts/bundles/data-contracts-v1.0.0.json, contracts/bundles/data-contracts-v1.1.0.json
C3 The contract test asserts membership and the closed exception list. PASS tools/repo/data-contract-bundle.test.mjs
🛡️ Adversarial audit evidence
  • Falsifiability verified: No (Not applicable: The change is a data list entry, not executable logic. Reason: No mutable production operator exists; deepEqual pins membership.)
  • Hollow assertions detected: 0
  • Production backdoors detected: 0
  • Ground-truth sources verified:
    • build-data-contract-bundle --check all exit 0
    • bundled SLA resource equals policy for v1.0.0 and v1.1.0
    • SLA policy JSON compared with origin/main
🤖 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:
None.

---

Outside diff comments:
None.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Hub CLAUDE.md invariants and full.md PR template, read by the reviewer.

Review profile: ASSERTIVE

Plan: Aquila fallback

Run ID: N/A (Aquila fallback)

Review source: Aquila CLI

Repository visibility: public GitHub repository

Trigger:
Discovery review requested for the current head of the pull request.

Base:
main@506306c666ecc23d77c254a99d990fa23e3e8261

Head:
chore/station-lines-freshness-903@021ba57178b1bfc4e00fc0f6a1a7b75085011645

Command:
aquila-review discovery

📥 Commits

Reviewing files changed in this pull request between:

  • Base: 506306c666ecc23d77c254a99d990fa23e3e8261
  • Head: 021ba57178b1bfc4e00fc0f6a1a7b75085011645
📒 Files selected for processing (4)
  • contracts/bundles/data-contracts-v1.0.0.json
  • contracts/bundles/data-contracts-v1.1.0.json
  • release/product-gates/datapack-freshness-sla.json
  • tools/repo/data-contract-bundle.test.mjs
📜 Review details

@AquilaXk AquilaXk added the automerge FIFO 병합 큐 대상 — 코디네이터가 순서대로 update-branch 후 auto-merge label Oct 2, 2026
@AquilaXk
AquilaXk merged commit 905ae11 into main Oct 2, 2026
31 checks passed
@AquilaXk
AquilaXk deleted the chore/station-lines-freshness-903 branch October 2, 2026 16:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automerge FIFO 병합 큐 대상 — 코디네이터가 순서대로 update-branch 후 auto-merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant