feat: AtchaV2 Phase 14 — 재실행 정합성 (스냅샷 + 고아 LA 재부착 + 도보 시간) - #352
Merged
YuGeonHui merged 1 commit intoAug 24, 2026
Merged
Conversation
- Domain: AlarmSessionSnapshot(info·도보 초·표시명·수단·확인·만료) + AlarmSessionSnapshotStore 포트 신설, AlarmInfo·TransportMode Codable, LastRoute 세션 파생값(첫 도보 초·탑승 구간· 표시명 — LA 어댑터의 표시명 로직을 Domain 순수 계산으로 이동) - 도보 시간 반영(미확정 #7 클라 임시안 확정): AlarmTiming.alarmFireDate(departureTime: firstWalkSeconds:) — 기본값 없이 등록/refresh 재스케줄/LA alarmTime/홈 배너 4곳이 같은 기준을 강제로 탄다(이중 시각 금지). refresh의 도보 출처는 스냅샷(routeId 일치 시) - RegisterAlarmUseCase: 과거 fireDate 사전 가드(AlarmError.tooLate — 권한 팝업·서버 등록 전 차단) + 등록 성공 시 스냅샷 저장. Cancel: clear. 홈 토스트 "이미 출발 시간이 지난 경로예요" - AlarmSyncService: 첫 sync 진입 시 스냅샷 시딩(diff 휘발 해소 — lastInfo 복원 + 구독자 전파로 오프라인 재실행 복원, expired 톰스톤은 2차 방어 복원) / sync 성공 시 병합 저장 + 죽은 세션 LA 로컬 재시작 위임 / 만료 확정 시 톰스톤(expired=true), 서버 sessionEnded 시 clear / "당겨짐" 배지 만료 보존(조용한 갱신이 10분을 못 채우고 지우던 문제) - LA 어댑터: 부트스트랩 직후 Activity.activities 스캔 — 스냅샷 일치+미만료+미dismiss는 adopt(관찰 재개), 그 외 즉시 정리. sync 성공 후 죽은 세션(활성 LA 없음·미확인·미dismiss) 로컬 재시작(8시간 한도·시작 실패 커버, push-to-start 무관). 최초 start 긴급도를 알람 시각 기준으로 통일 - 홈: alarmSynced 수신 시 카드 없으면 GetLastRouteDetailUseCase(신설 — 기존 미사용 detail 엔드포인트 재활용)로 카드 복원 + 도보 반영 배너 재시작. 변경 분 표기 .up 통일 - 위젯: Attributes에 수단·도보 필드(optional — 구버전 LA 재부착 디코딩 안전) → DI 컴팩트 지하철/버스 아이콘 분기 + 잠금화면 3행 "HH:mm 출발 · 정류장 도보 N분" - stopIntent 확인 기록 영속화(Phase 13 연동) — 확인된 세션은 LA 재시작 금지 - DEV: 데모 경로에 도보 leg(120초) 추가(검수 ③ 재료), 변경 시뮬레이터 기준 세션 영속화 (재실행 후 주입 diff·카드 복원 시각 정합) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
요약
AlarmSessionSnapshot(info·도보 초·표시명·수단·확인·만료) +AlarmSessionSnapshotStore포트 신설, LA 표시명 로직을 Domain 순수 계산으로 이동AlarmTiming.alarmFireDate(departureTime:firstWalkSeconds:)— 등록/refresh 재스케줄/LA alarmTime/홈 배너 4곳이 같은 기준 강제(이중 시각 금지)RegisterAlarmUseCase: 과거 fireDate 사전 가드(AlarmError.tooLate) + 등록 성공 시 스냅샷 저장AlarmSyncService: 첫 sync 진입 시 스냅샷 시딩(diff 휘발 해소·오프라인 재실행 복원), 만료 톰스톤, "당겨짐" 배지 만료 보존검증
simctl terminate)·재실행 시나리오에서 카드·배너·LA 시각 정합 증적 확인🤖 Generated with Claude Code