Skip to content

feat: AtchaV2 Phase 13 — 알람 이후 세션 수명 완결 (departed + stopIntent + 클라 자체 만료) - #351

Merged
YuGeonHui merged 2 commits into
env/devfrom
feat/v2-phase13-post-alarm
Aug 24, 2026
Merged

feat: AtchaV2 Phase 13 — 알람 이후 세션 수명 완결 (departed + stopIntent + 클라 자체 만료)#351
YuGeonHui merged 2 commits into
env/devfrom
feat/v2-phase13-post-alarm

Conversation

@YuGeonHui

Copy link
Copy Markdown
Collaborator

스택 PR (1/6): base = env/dev. 13→14→15→16→17→18 순으로 머지해 주세요 (각 PR은 직전 Phase 브랜치를 base로 함).

요약

  • Domain: LastTrainSessionPhase.departed 신설, AlarmTiming 만료 유예(출발+60초)·isSessionExpired 순수 함수
  • CoreAlarm: stop 버튼("확인")에 LiveActivityIntent 주입 — AlarmAcknowledgeIntent(발화 확인 훅) → LA departed 전환 + 출발+10분 자동 소멸 예약(앱이 깨지 않아도 잠금화면에서 소멸)
  • AlarmSyncService: sync 진입 시 expireLocallyIfNeeded — 유예 경과 세션은 refresh 결과와 무관하게 로컬 sessionEnded 처리(미래 출발 시각 반환 시 서버 우선)
  • 홈 배너 3단계 전이: 카운트다운 → "지금 출발하세요"(0분 문구 제거) → 유예 경과 시 배너 제거 + "지난 막차" 카드(muted tone) + 알람 버튼 숨김
  • 위젯: departed 렌더 + isStale 최신성 경고
  • docs: Post-12 갭 분석·로드맵 + Phase 13·14 구현 프롬프트 + 자동 검수 규약(사람 검수의 computer use 대체) 신설

검증

  • 공통 acceptance(Debug+Stage) + 관련 스킴 테스트 전부 통과
  • 자동 검수 규약에 따라 시뮬레이터에서 발화 → departed → 자동 소멸 → 홈 정리 플로우 증적 확인 (상세: docs/prompts/atcha-v2-session-lifecycle-prompt.md 검수 절)

🤖 Generated with Claude Code

YuGeonHui and others added 2 commits August 23, 2026 11:51
- docs/planning/atcha-v2-post12-roadmap.md: 전수 갭 분석 정본, Phase 13~18 로드맵,
  서버 트랙 S1~S4(질문 리스트 포함), 미확정 입력 원장 현재 상태 + #11·#12 신설,
  제품 결정 트랙(보류·반대 판정), 신뢰 UX 원칙, 수용 리스크
- docs/prompts/atcha-v2-session-lifecycle-prompt.md: Phase 13(알람 이후 세션 수명
  완결 — stopIntent·departed·자동 소멸·클라 만료·배너 3단계·isStale) +
  Phase 14(재실행 정합성 — 스냅샷 영속화·고아 LA 재부착·카드 복원·도보 시간
  클라 반영·정합성 일괄) 구현 프롬프트
- docs/prompts/atcha-v2-auto-verification.md: 자동 검수 규약 — 사람 검수를
  computer use로 대체(에이전트 직접 수행·스크린샷 증적), 실기기 잔여만 이관.
  실측 제약(AXPress·ScreenIsLocked·simctl push 거부) 내장
- CLAUDE.md: 미완 상태 절 정정(base URL 실주소·plist 번들 ID 불일치·LA 구축
  완료), 아키텍처 다이어그램에 CoreAlarm·CoreLiveActivity·AtchaWidget 반영,
  새 문서 포인터 추가

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…체 만료)

- Domain: LastTrainSessionPhase.departed 신설, AlarmTiming 만료 유예(출발+60초)·isSessionExpired 순수 함수
- CoreLiveActivity: LastTrainSessionStatus.departed (wire 안전 — 동일 바이너리 배포·방어값 정책)
- CoreAlarm: stop 버튼("확인")에 LiveActivityIntent 주입 지점 확장 — 주입 실패 시 인텐트 없이 재시도 폴백
- App: AlarmAcknowledgeIntent(발화 확인 훅) + AlarmSessionLifecycleService.alarmAcknowledged()
  → LA departed 전환 + 출발+10분 자동 소멸 예약(.after) — 앱이 깨지 않아도 잠금화면에서 소멸
- AlarmSyncService: sync 진입 시 expireLocallyIfNeeded — 유예 경과 세션은 refresh 결과와 무관하게
  로컬 sessionEnded 처리, 단 미래 출발 시각 반환 시 서버 우선(만료 취소), 만료 기록으로 2차 방어
- 홈 배너 3단계 전이: 카운트다운 → "지금 출발하세요"(0분 문구 제거) → 유예 경과 시 배너 제거 +
  "지난 막차" 카드(비활성 톤, DSRouteCard muted tone 신설) + 알람 버튼 숨김
- 위젯: departed 렌더("지금 출발하세요", imminent 척도) + isStale 최신성 경고("시간이 지났어요")

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant