diff --git a/app/src/androidTest/kotlin/io/github/hangillab/hangil/SessionDeletionFlowTest.kt b/app/src/androidTest/kotlin/io/github/hangillab/hangil/SessionDeletionFlowTest.kt
index 44bf5be..9a82036 100644
--- a/app/src/androidTest/kotlin/io/github/hangillab/hangil/SessionDeletionFlowTest.kt
+++ b/app/src/androidTest/kotlin/io/github/hangillab/hangil/SessionDeletionFlowTest.kt
@@ -144,6 +144,16 @@ class SessionDeletionFlowTest {
emptyLocations.events.isEmpty() && emptyLocations.runs.isEmpty() &&
before.recordingRuns.getValue(fixture.seed.latest.sessionId).isEmpty(),
)
+ bringIntoView("history_retention")
+ val retention = nodes("history_retention").single()
+ val notice =
+ retention.config
+ .getOrNull(SemanticsProperties.Text)
+ .orEmpty()
+ .joinToString("") { it.text }
+ assertTrue("RETENTION_POLICY_VISIBLE", fullyVisible(retention))
+ assertTrue("RETENTION_NO_AUTOMATIC_DELETION_OR_TRANSFER", notice.contains("자동으로 지우거나 새 기기로 옮기지 않아요"))
+ assertLayout(retention, notice)
openAndReadConfirmation(fixture, fixture.seed.latest)
touch("history_delete_cancel")
waitAbsent("history_delete_dialog")
diff --git a/docs/development/ended-session-deletion.md b/docs/development/ended-session-deletion.md
index 4bc0857..f86c5e0 100644
--- a/docs/development/ended-session-deletion.md
+++ b/docs/development/ended-session-deletion.md
@@ -1,6 +1,12 @@
# 확인한 종료 기록과 연결 자료의 원자적 삭제
-종료 이력에서 사용자가 고른 기록을 명시 확인 후 이 기기에서 삭제한다. 해당 세션의 차량 관찰과 사용자 메모는 기존 schema4의 FK CASCADE로 함께 정리한다. 다른 종료/활성 세션과 준비는 보존하며 과정 완료 판정이나 전체 보관 정책은 이번 범위가 아니다.
+종료 이력에서 사용자가 고른 기록을 명시 확인 후 이 기기에서 삭제한다. 해당 세션의 차량 관찰과 사용자 메모는 기존 schema4의 FK CASCADE로 함께 정리한다. 다른 종료/활성 세션과 준비는 보존한다.
+
+## 보관과 기기 이전
+
+연습 기록은 앱의 내부 Room 저장소에 보관한다. 별도 보관 기한을 두거나 자동으로 삭제하지 않는다. 사용자가 이력에서 해당 기록을 삭제하거나 앱 데이터를 지울 때 사라진다. 이미 다른 준비나 연습에 복사한 목표는 별도 자료이므로 원본 기록을 삭제해도 남는다.
+
+저장소 접근은 Android 앱 격리와 기기의 저장소 보호에 의존한다. 파일 기반 암호화가 켜진 기기에서는 앱의 기본 자격 증명 보호 저장소를 사용한다. 앱 자체가 DB를 별도로 암호화하거나 SQLite 파일의 삭제 흔적까지 지우는 것은 아니다. 앱은 연습 기록 이전을 제공하지 않는다. Android 12 이상 백업/기기 이전 규칙에서 DB와 내부 파일을 제외하며, 기기 제조사별 실제 이전 동작은 별도 검증 대상이다.
## 확인과 삭제의 경계
diff --git a/feature/home/src/main/kotlin/io/github/hangillab/hangil/feature/home/SessionHistoryScreen.kt b/feature/home/src/main/kotlin/io/github/hangillab/hangil/feature/home/SessionHistoryScreen.kt
index 5d4c725..c0a85a2 100644
--- a/feature/home/src/main/kotlin/io/github/hangillab/hangil/feature/home/SessionHistoryScreen.kt
+++ b/feature/home/src/main/kotlin/io/github/hangillab/hangil/feature/home/SessionHistoryScreen.kt
@@ -541,7 +541,15 @@ private fun HistoryRecord(
recordingRuns()
courseCompletion()
locations()
- if (allowBrowsing) nextPractice()
+ if (allowBrowsing) {
+ nextPractice()
+ Text(
+ stringResource(R.string.history_retention),
+ Modifier.testTag("history_retention"),
+ style = MaterialTheme.typography.bodyLarge,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ )
+ }
ParkedButton(
onClick = onDelete,
prominent = false,
diff --git a/feature/home/src/main/res/values/strings.xml b/feature/home/src/main/res/values/strings.xml
index 080c7ad..1961652 100644
--- a/feature/home/src/main/res/values/strings.xml
+++ b/feature/home/src/main/res/values/strings.xml
@@ -157,6 +157,7 @@
과제별 기록
저장 당시 목표와 코스 정보가 같은 기록이에요.
+ 연습 기록은 이 기기에 남아요. 앱에서 자동으로 지우거나 새 기기로 옮기지 않아요.
이 기록 삭제
기록을 삭제할까요?
이 연습과 연결된 차량 관찰, 메모, 배경 실행, 위치 표본과 수집 상태, 마무리 선언을\n이 기기에서 영구 삭제해요. 복구할 수 없어요. 다른 준비나 연습으로 가져온 목표 도로는 남아요.