Skip to content

fix: 검증 완료된 복원·시간대·일정·알림 개선 반영 - #631

Merged
jjoonleo merged 3 commits into
mainfrom
feature/verified-audit-20260925
Sep 25, 2026
Merged

jjoonleo merged 3 commits into
mainfrom
feature/verified-audit-20260925

Conversation

@jjoonleo

@jjoonleo jjoonleo commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

문제와 결과

기존 PR #585 이후 로컬에서 검증한 복원·시간대·일정 조회·삭제·알림 개선을 코드 리뷰 가능한 상태로 전달합니다. 복원 도중 실패하거나 오래된 비동기 응답이 돌아왔을 때 현재 데이터와 실행 권한을 보존하고, 사용자에게 저장 성공과 후속 알림 처리 실패를 구별해 보여 줍니다.

선행 PR: #585. 이 PR의 base는 fix/audit-20260923-stabilization이며 선행 PR의 현재 head ee6c1f8b41fedbafee493791514026eaf669dcb5 뒤의 변경만 보여 줍니다. #585를 먼저 병합한 뒤 이 PR의 base를 main으로 변경하고 새 기준에서 CI를 확인해야 합니다.

포함 범위

관련 이슈 변경과 사용자 동작
C01 #600, A09 #602 기본 준비 설정을 원자적으로 저장하고, 복원 후보를 암호화된 임시 저장소에서 검증합니다. 복원된 데이터와 실행 중인 준비 상태를 구분하며, 이미 저장된 작업의 재시도가 DB 변경을 반복하지 않도록 합니다.
D01 #603, D02 #604 DB/키 오류에서도 기존 파일을 보존하는 시작 복구 화면과 명시적 복구 경로를 제공합니다. 손상된 저장소는 검증한 새 DB/키 쌍으로 교체하며, 중단된 작업의 재시작·정리 상태를 구분합니다.
D04 #605 역사 스키마 1–4, 마이그레이션 원자성, 미래 버전 거부, SQLCipher 로더와 실패 시 원본 보존을 보강합니다.
D05 #606 백업 입력 크기·레코드·중첩·스트림 경계를 제한합니다. 인증된 최종 프레임 뒤의 추가 입력을 거부하고 모바일 파일 입출력 경계를 연결합니다.
A10 #608, U02 #609 일정의 날짜·시각·시간대를 보존하고, 시간대 규칙이 불명확한 미래 일정은 명시적으로 검토합니다. 반복 일정의 개별/이후 변경, 기존 회차 ID 보존, 충돌 확인, 백업 시간 보정, 저장할 정확한 초안에 연결된 확인을 제공합니다.
C08 #610 가까운 일정 조회를 날짜 변경·일시중지·재개에 맞게 갱신합니다. 늦은 조회 응답이나 이전 시작 요청이 현재 준비 상태를 덮어쓰지 않게 합니다.
U01 #611 선택/이후 범위와 보존 결과를 확인한 뒤 일정 이력을 삭제합니다. DB 삭제 성공과 OS 알림 정리 미완료를 별도로 표시하며 현재 참조가 있는 준비 데이터를 보존합니다.
U03 #612 상세 알림 설정의 읽기·저장·정리 실패를 구분합니다. 저장되지 않은 상세 OFF 의도가 있는 동안 오래된 상세 알림 전송을 막고, 확대 글자에서도 상태와 재시도 동작을 표시합니다.
T03 #613 실제 DB COMMIT 이후 응답 유실을 독립 read-back으로 판정하고, 복원 결과가 불명확한 동안 늦은 identity 응답이 이전 실행 권한을 되살리는 경합을 차단합니다.

DB 스키마는 검증된 버전 4 경로를 사용합니다. 기존 백업·반복 일정·보호된 준비 기록의 호환성과 소유권을 회귀검사에 포함했습니다. Android/iOS 로컬 전용 제품 범위를 유지합니다.

소스와 검증 근거

제품 체크포인트는 c8f09ce662271f9d127f38f89d8535ba4eac176b이며, 전달 커밋은 fe3f54a69d9e71e5ac6a26a6d631007cd919794b입니다. 전달용 checkout에서 검증 manifest의 tracked 입력 776개 SHA256이 모두 일치함을 다시 확인했습니다. 생성된 Dart 10개는 해시만 기록하고 커밋하지 않았습니다.

  • 동일 제품 소스의 호스트 SQLCipher 전체 검사: 2,090 통과 / 조건부 제외 6 / 실패 0, 정상 종료 및 성공 terminal 확인.
  • 정적 분석 문제 0, 로컬 CI 검사 6개 통과.
  • 앱 소유 코드 coverage: 24,994 / 27,871 = 89.68%. 생성 코드를 포함한 raw 수치는 80.45%로 별도 기록합니다.
  • 조건부 제외 6개는 명시적 프로세스 시간대 4개와 역방향 평문 guard 2개입니다. 이 실행에서 제외된 검사를 통과로 합산하지 않습니다.
  • 앞선 729730d0의 호스트 SIGKILL/새 프로세스 복구 11개는 별도 근거입니다. 실제 모바일 프로세스 중단·전원 손실·OS 전달을 증명하지 않습니다.
  • 새 PR head fe3f54a6의 원격 Flutter CI 및 Android CI를 실행했습니다. 게시 시점에는 진행 중이며 위 2,090개 숫자는 기존 로컬 체크포인트 결과입니다.

검증 결과 · 소스 manifest · 전달 범위

화면 증거

실제 widget을 합성 데이터로 렌더링한 KO/EN 확대 글자 캡처입니다. 물리 기기의 접근성·OS 화면 검증과 구분합니다.

상태 한국어 영어
삭제 범위 확인 KO EN
상세 알림 정리 미완료 KO EN

남은 조건과 제외 범위

  • 실제 Android/iOS 알림 전달·권한·재시작·파일 provider·secure storage·스크린리더 수용조건은 열려 있습니다. 개별 에뮬레이터/시뮬레이터 검사를 모든 실기기 검증 완료로 해석하지 않습니다.
  • U08의 전체 화면/언어/글자 크기 조합과 다른 미구현 감사 항목은 남아 있습니다.
  • 진행 중인 T04 [P1][T04] 실제 사용자·타이머·프로필 이벤트 경로를 검증하고 제품 계약과 어긋난 테스트 기대값·복제 알고리즘 교체 #614 및 이후 수정은 제외했습니다. 기존 작업 폴더·브랜치·미커밋 변경은 수정하지 않았습니다.
  • 별도 감사 질답 게시 초안과 대용량 중간 검증 기록은 이번 소스 전달에 포함하지 않았습니다.
  • 이 PR을 여는 것으로 이슈를 자동 종료하거나 main 병합·스토어 출시를 완료 처리하지 않습니다.

@jjoonleo
jjoonleo changed the base branch from fix/audit-20260923-stabilization to main September 25, 2026 10:13
@jjoonleo
jjoonleo marked this pull request as ready for review September 25, 2026 10:13
@jjoonleo
jjoonleo merged commit 37b23a1 into main Sep 25, 2026
2 of 3 checks passed
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.

2 participants