# 사용자 여정: 자리 비움과 끊김 없는 재개

## 0. 문서 정보

| 항목 | 내용 |
|---|---|
| 여정 식별자 | `JRN-idle-resume` |
| 여정명 | 자리 비움과 끊김 없는 재개 |
| 상태 | 초안 (v0.2) |
| 담당자 | 미지정 |
| 최종 수정일 | 2026-08-30 |
| 달성 가치 | V2 유휴 자원 회수 · V3 끊김 없는 세션 연속성 |
| 연결 문서 | PRD [`lifecycle`](../prd/lifecycle.md)(AC-B1·B2·B3) · [`architecture`](../prd/architecture.md)(AC-A3) · 타입별 [`shell-workload`](../prd/shell-workload.md)(AC-D4) / [`claude-code-workload`](../prd/claude-code-workload.md)(AC-E5) · mockup `restore.html`·`agent-workspace.html` ([매핑](../mockups/README.md)) |

## 1. 서비스 개요 (참고)

[`JRN-session-creation`](./JRN-session-creation.md#1-서비스-개요-참고)과 동일. 가치 정의는 [`../values.md`](../values.md).

## 2. 여정 정의

**대상 사용자 (페르소나)**
P1 멀티세션 작업자 ([README](./README.md#p1-멀티세션-작업자)).

**진입 맥락**
`active` 세션을 켜둔 채 다른 일로 옮겨간다. 회의, 퇴근, 다른 프로젝트 — 세션을 닫을 생각은 없다.

**트리거**
작업자가 세션에서 손을 뗀다. 명시적인 행동이 아니라 **아무것도 하지 않는 것**이 트리거다.

**사용자 목표**
자리를 비운 대가를 치르지 않는 것. 돌아왔을 때 떠날 때 그대로이기를 바란다.

**완료 기준**
동결됐던 세션에 다시 접근해 `active`로 돌아오고, **복원 후 첫 입력에 대한 응답이 동결 전 맥락 위에서** 나온다.
(쉘이면 이전 cwd·환경 변수 위에서, 에이전트면 이전 대화·작업 디렉터리 위에서)

## 3. 단계별 상세

> 단계 식별자는 순번이 아닌 슬러그다. 순서가 바뀌어도 식별자는 유지한다.

### `STP-step-away` 자리를 비운다

- **사용자 행동**: 세션을 열어둔 채 손을 뗀다. 탭을 닫기도 하고 그냥 두기도 한다.
- **터치포인트**: 없음(부재가 곧 신호) · 세션 목록의 상태 배지 (mockup `index.html`)
- **생각·감정**: "그냥 두고 가도 되겠지?" — 사라질까 봐 불안하면 오히려 세션을 더 만들거나 쓸데없이 붙잡아 둔다.
- **페인포인트 / 이탈 위험**: 동결 정책을 모르면 "몇 분 있으면 날아가나?"라는 불안이 남는다
  → 목록·워크스페이스에서 유휴 상태와 동결까지의 여유를 읽을 수 있게 하고, 동결이 **소멸이 아님**을 문구로 못 박는다.
- **관련 AC**: AC-B1 (유휴는 마지막 클라이언트 read/write 기준)

### `STP-auto-freeze` 시스템이 알아서 접어둔다

- **사용자 행동**: 없다. 작업자는 이 과정을 보지 않는다.
  시스템이 유휴 한계에 도달한 세션의 상태를 저장하고 `snapshot`으로 전이한 뒤 pod와 자원을 회수한다.
- **터치포인트**: 사후에만 보인다 — 세션 목록의 `snapshot` 배지 (mockup `index.html`) · 워크스페이스의 lifecycle 표시
- **생각·감정**: (부재 중) 나중에 목록에서 상태가 바뀐 걸 보고 "이게 무슨 뜻이지?"
- **페인포인트 / 이탈 위험**: `snapshot`이라는 단어가 "잠겼다·잃었다"로 읽히면 불필요한 재생성으로 이어진다
  → 상태 배지 옆에 "다시 열면 이어집니다" 수준의 결과 중심 문구를 붙인다.
- **관련 AC**: AC-B1, AC-A3 (동결 메커니즘은 타입별: AC-D4 / AC-E5)

### `STP-reaccess` 돌아와서 다시 연다

- **사용자 행동**: 시간이 지난 뒤 그 세션을 다시 연다. 목록에서 클릭하거나, 링크로 바로 들어오거나, 자동화가 요청을 보낸다.
- **터치포인트**: 세션 목록 → 워크스페이스 진입 · 복원 안내 화면 (mockup `restore.html`)
- **생각·감정**: "아까 그거 아직 있나?" — 이 순간의 기대가 이 여정 전체의 성패를 가른다.
- **페인포인트 / 이탈 위험**: 복원에 걸리는 시간 동안 아무 표시가 없으면 고장으로 읽힌다
  → 복원 중임을 즉시 알리고 예상 대기를 보여준다. **전용 화면이 아직 없는 단계**다([mockups README](../mockups/README.md)).
- **관련 AC**: AC-B2, AC-C2

### `STP-restore-resume` 이어서 작업한다

- **사용자 행동**: 복원이 끝난 세션에서 이전 맥락 위에 다음 입력을 넣는다.
  쉘이면 이전 cwd·환경 변수가 그대로고, 에이전트면 이전 대화와 작업 디렉터리를 그대로 이어받는다.
  동결 전에 받아둔 출력 커서도 그대로 유효하다.
- **터치포인트**: 복원 화면 → 워크스페이스 콘솔 (mockup `restore.html`(`shell`) · `agent-workspace.html`(`claude-code`))
- **생각·감정**: "끊긴 줄도 몰랐네." — 최고의 결과는 **아무 감정도 남지 않는 것**이다.
- **페인포인트 / 이탈 위험**: 일부만 복원되면(출력은 남았는데 변수는 날아간 식) 신뢰가 완전히 무너진다.
  부분 성공은 실패보다 나쁘다 → 복원은 전부 아니면 전무로 다루고, 실패 시 이전 상태를 그대로 둔 채 사유를 알린다.
- **관련 AC**: AC-B2, AC-B3 (보존 대상은 타입별: AC-D4 / AC-E5)

## 4. 분기·예외 흐름

| 상황 | 처리 | 이어지는 단계 |
|---|---|---|
| 복원 중 다시 접근(중복 요청) | 여러 요청이 와도 복원은 한 번만 일어나고 모두 같은 세션으로 수렴 (AC-C1) | `STP-restore-resume` |
| 복원 실패 | 세션을 `snapshot`으로 되돌리고 사유를 알린다. 빈 세션으로 대체하지 않는다 | `STP-reaccess` |
| 체크포인트 기능이 꺼진 환경 | 동결을 시도하지 않고 사용 불가로 응답(503). 세션은 `active`로 유지 | `STP-step-away` |
| 사용자가 기다리기 싫어 직접 접음 | 유휴 한계를 기다리지 않고 즉시 동결 | `JRN-manual-freeze`의 `STP-freeze-now` |
| 돌아올 생각이 없음 | 되살리지 않고 정리 | `JRN-session-deletion`의 `STP-delete-intent` |
| 컨테이너 재시작(복원 아님) | 빈 버퍼의 새 워크로드로 시작하므로 이어지지 않는다. 복원과 구분해 표시 | 해당 없음 |

## 5. 측정 지표

| 지표 | 정의 | 목표 |
|---|---|---|
| 재개 성공률 | 복원 후 첫 입력이 정상 처리된 세션 수 / 복원 시도 수 | TBD |
| 복원 체감 지연 | `STP-reaccess` 요청 → 입력 가능 상태까지 시간 (p50/p95) | TBD |
| 동결 후 회수율 | 동결로 회수된 pod·시간 / 전체 세션 pod·시간 | TBD (V2 효과) |
| 재생성 이탈 | 동결된 세션을 열지 않고 같은 용도의 새 세션을 만든 비율 | TBD (불신 신호) |
| 맥락 손실 신고 | 복원 후 "상태가 사라졌다"는 신고 건수 | TBD (0 유지) |

## 6. 변경 이력

| 버전 | 날짜 | 변경 내용 | 작성자 |
|---|---|---|---|
| v0.1 | 2026-06-18 | 최초 작성 (구 식별자 J2) | 미지정 |
| v0.2 | 2026-08-30 | 전면 재작성 — 슬러그 식별자 전환, 여정 정의·분기·지표·변경 이력 추가, 동결·복원 메커니즘 서술을 AC 참조로 위임 | Claude |
