시뮬레이션 tail window와 manifest anchor 노출 보정#128
Conversation
|
Warning Review limit reached
More reviews will be available in 54 minutes and 10 seconds. Learn how PR review limits work. Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (9)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
ca5tlechan
left a comment
There was a problem hiding this comment.
✅ Approve
기능 로직과 실제 데이터(매니페스트/라이프사이클/무브먼트) 정합성을 직접 교차검증했고, 블로킹 이슈 없습니다.
검증한 내용
maxProjectedTick재계산:declaredMax(256)vs DB max lifecycle tick(254) / movement arrive_tick(256) →max=256, manifest의max_projected_tick=256과 일치projectionTailTicks재계산:256 - 176 + 1 = 81, manifest의projection_tail_ticks=81과 일치place.map_anchor↔lifecycle(SPOT_CREATED).map_anchor1:1 정합성: 38건 전수 비교, 불일치/누락 0건docs/migrations/2026-06-11_simulation_place_map_anchor.sql포함,ADD COLUMN IF NOT EXISTS로 멱등성 확보- import 순서(java. → org.springframework. → backend.* catch-all) checkstyle 컨벤션 준수 확인
SimulationPlace에mapAnchorJson필드 추가 — 생성 지점이SimulationDataInitializer의 builder 호출 1곳뿐이라@AllArgsConstructor변경에 따른 부작용 없음- PR 설명에 기존 DB 재시드 필요성과 로컬
./gradlew test미실행 사실을 솔직하게 명시
🟡 Non-blocking 후속 제안
projectionTailTicks(run)(선언/fallback 값) vsprojectionTailTicks(run, maxProjectedTick)(재계산된 effective 값) — 동명 오버로드라 의미가 다름.declaredProjectionTailTicks/effectiveProjectionTailTicks등으로 이름 분리 권장findMaxArriveTickByRunId가 기존idx_movement_runid_depart (runId, departTick)인덱스 커버 범위 밖 (arriveTick 미포함). 데모 규모(492 rows)에선 문제 없으나, 데이터 증가 시(runId, arriveTick)인덱스 추가 고려- 신규 재계산 로직에 대한 서비스 레벨 테스트 없음 — 다만 simulation 모듈 전체에 기존 테스트가 0건이라 이번 PR만의 회귀는 아님
작업 내용
max_projected_tick을 DB의 lifecycle/movement 실제 최대 tick까지 포함하도록 보정했습니다.projection_tail_ticks도 실제 projected max 기준으로 재계산해 tail 데이터가 잘리지 않게 했습니다.simulation_place.map_anchor_json을 추가하고 manifestplaces[].map_anchor로 노출합니다.max_projected_tick을 256,projection_tail_ticks를 81로 갱신하고 lifecycle anchor를 place manifest에도 반영했습니다.확인
demo_run_001.manifest/lifecycle/movements.jsongit diff --check미확인
./gradlew test는 실행하지 못했습니다./usr/libexec/java_home -V가 Java Runtime 없음으로 실패했습니다.배포 주의
demo_run_001재시드 또는 migration/import 절차가 필요합니다.