docs(docs): 문서를 화면과 용도별 폴더로 재구성

This commit is contained in:
2026-03-16 11:31:03 +09:00
parent acfa8f4f48
commit 38a9d1e762
25 changed files with 112 additions and 112 deletions

View File

@@ -0,0 +1,433 @@
# 12. Core Loop Execution Roadmap
Last Updated: 2026-03-15
이 문서는 VibeRoom의 핵심 제품 기획을 **어떤 순서로 구현까지 연결할지**를 정의하는 실행 로드맵이다.
중요한 목적은 두 가지다.
- 중간에 끼어드는 기획이 전체 방향을 흔들지 않게 한다
- 어떤 세션, 어떤 에이전트가 들어와도 **다음으로 무엇을 해야 하는지** 즉시 이해하게 한다
관련 문서:
- `../../product_principles.md`
- `../../current_context.md`
- `../screens/app/19_app_atmosphere_entry_spec.md`
- `../screens/space/10_refocus_system_spec.md`
- `../screens/space/11_away_return_recovery_spec.md`
- `../screens/app/15_app_stats_entry_flow_spec.md`
- `../screens/app/18_paused_session_reentry_spec.md`
- `./16_product_alignment_audit_plan.md`
---
## 1. 기본 원칙
VibeRoom은 아래 방식으로 진행한다.
1. 바뀌면 안 되는 제품 원칙을 먼저 고정한다
2. 코어 루프를 정의한다
3. 코어 루프를 **slice 단위**로 상세 기획한다
4. 각 slice는 `기획 -> 구현 -> 브라우저 QA -> 문서 업데이트`까지 닫고 간다
5. 다음 slice는 이전 slice가 제품적으로 안정된 뒤에 들어간다
즉:
- `모든 기획을 끝낸 뒤 한 번에 개발`하지 않는다
- `생각나는 기능을 바로 구현`하지도 않는다
- **큰 방향은 먼저 고정하고, 세부는 vertical slice로 기획 후 바로 구현**한다
---
## 2. 현재까지 완료된 것
### 완료 1. Product Principles
- 루트 문서 `../../product_principles.md`
- single-goal, premium focus, anti-to-do 방향 고정
### 완료 2. `/app` Entry Reframe (Legacy)
- 문서: historical, superseded by `../screens/app/19_app_atmosphere_entry_spec.md`
- 구현 상태:
- `/app`은 한때 single-goal commitment gate로 정리됐음
- planner/list-first 구조 제거
- current session이 있으면 resume 우선
### 다음 Phase A. `/app` Atmosphere Entry Redesign
- 문서: `../screens/app/19_app_atmosphere_entry_spec.md`
- 목적:
- `/app` no-session 상태를 `goal + duration + atmosphere` 중심의 premium entry stage로 재설계
- scene/sound를 다시 entry 가치로 끌어올리되 planner/dashboard처럼 보이지 않게 유지
- 핵심 변화:
- microStep 제거
- duration을 분 단위 직접 입력으로 전환
- `Atmosphere` 12개 그리드 도입
- weekly review는 quiet secondary dock로 유지
- 상태:
- 상세 기획 완료
- 구현 전
### 완료 3. Refocus System 기본 구조
- 문서: `../screens/space/10_refocus_system_spec.md`
- 구현 상태:
- pause -> refocus 흐름의 기본 skeleton 존재
- next beat / goal complete의 상태 분리 시작
### 완료 4. Away / Return Recovery 기본 구현
- 문서: `../screens/space/11_away_return_recovery_spec.md`
- 구현 상태:
- `visibilitychange`, `pagehide`, sleep/wake gap 기반 detection 연결
- focus running 복귀 시 `Return` tray 노출
- focus ended while away 시 standard break 대신 `Return` tray 선행
### 완료 5. Pause / Break / Return 1차 톤 분리
- 구현 상태:
- pause tray 가독성 재정리
- `Return(break)``Return(focus)` material 분리 시작
- break 관련 선택과 timer HUD를 더 release tone으로 보정
---
## 3. 지금 끼어든 기획의 위치
### 끼어든 기획
- `../screens/space/11_away_return_recovery_spec.md`
이 기획은 원래 흐름을 덮어쓴 것이 아니다.
이 문서는 **Refocus System을 실제 사용자 행동에 맞게 완성하기 위해 중간에 추가된 필수 slice**다.
왜 끼어들었는가:
- 사용자는 `pause`를 누르지 않고 자리를 뜨는 경우가 많다
- 이 케이스를 다루지 않으면 Refocus System이 반쪽짜리가 된다
- `pause``break`가 겹쳐 보이는 문제도 여기서 정리해야 한다
즉, 이 기획은 “옆길”이 아니라 **Refocus System의 확장 파트**다.
---
## 4. 현재 기준의 구현 순서
아래 순서를 공식 순서로 고정한다.
### Phase 1. `/app` Entry Polish
목적:
- 시작 마찰을 최소화
- `/app`이 planner가 아니라 commitment gate로 읽히게 고정
상태:
- 기획 완료
- 구현 완료
- 남은 것은 브라우저 QA와 minor polish
### Phase 2. Refocus System
문서:
- `../screens/space/10_refocus_system_spec.md`
목적:
- pause 이후 복귀
- microStep 완료 후 다음 한 조각 연결
- goal complete의 자연스러운 closure
상태:
- 기획 완료
- 핵심 구현 완료
- 남은 것은 visual polish와 browser QA
### Phase 3. Away / Return Recovery
문서:
- `../screens/space/11_away_return_recovery_spec.md`
목적:
- 사용자가 `pause` 없이 떠난 경우를 감지
- 돌아왔을 때 Break가 아니라 Return UX로 맞이
- `pause`, `break`, `return`의 감정적 의미를 분리
상태:
- 기획 완료
- 핵심 구현 완료
- 남은 것은 오탐/복귀 타이밍 브라우저 QA
중요:
- 이것은 `Refocus System` 다음으로 이어지는 것이 아니라
- **Refocus System 구현의 후반부**로 바로 이어진다
### Phase 4. Complete / Break Separation Polish
목적:
- `goal complete`, `break`, `return`의 의미와 재질감 분리
- “쉬는 중”과 “복귀 결정”이 섞이지 않게 정리
상태:
- 현재 진행 중
- 1차 material/tone 분리 반영 완료
- 남은 것은 copy, motion, 선택 위계 미세 조정
### Phase 5. Weekly Review Reframe
목적:
- total time보다 시작 성공률, 복귀율, 유지 패턴 중심으로 재설계
상태:
- 상세 기획 문서 작성 완료
- 1차 snapshot 구현 완료
- `/app -> /stats -> /app` entry flow 구현 완료
- `/space` complete 이후 secondary teaser 구현 완료
- pause recovery 집계 연결 완료
- 남은 것은 away recovery event schema, ritual fit, Free / Pro gating
문서:
- `../screens/stats/14_weekly_review_reframe_spec.md`
- `../screens/app/15_app_stats_entry_flow_spec.md`
### Phase 5.5. Session Routing / Paused Re-entry Alignment
문서:
- `../screens/app/18_paused_session_reentry_spec.md`
목적:
- `running focus -> /space`
- `running break -> /space`
- `paused focus -> /app`
- explicit continue 이후 `/space` auto-resume
- paused session 위의 new start를 takeover flow로만 허용
상태:
- 상세 기획 문서 작성 완료
- Session Routing Contract 구현 완료
- `/app` Paused Resume Gate 구현 완료
- `/space` Auto-Resume Handoff 구현 완료
- `Paused Session Takeover Flow` 구현 완료
- 남은 것은 browser QA와 takeover 문구 polish
### Phase 6. Premium Ambience System
목적:
- Portal급 감각 품질 확보
- 배경, 사운드, 전환, material의 art direction 통일
상태:
- 방향만 존재
- review 전후 어느 시점에 들어갈지 조정 가능
---
## 5. “그 다음에 하려던 기획”은 무엇인가
Away / Return이 끼어들기 전, 다음으로 예정된 축은 아래 두 가지였다.
1. `Refocus / Next Beat / Goal Complete`의 premium polish
2. `Pause``Break`의 감정/구조 분리
즉, 원래 예정된 기획은 사라진 것이 아니다.
단지 순서가 아래처럼 정리된 것이다.
이전 예상 순서:
1. Refocus polish
2. Break refinement
3. Review
현재 확정 순서:
1. Refocus polish
2. Away / Return Recovery
3. Break refinement
4. Review
정리하면:
- **Away / Return은 중간에 끼어든 임시 아이디어가 아니라**
- `Break refinement`보다 먼저 처리해야 하는 선행 조건이다
---
## 6. 다음 세션에서의 실제 작업 순서
다음 작업은 아래 순서로 진행한다.
### Step 1. `/space` Refocus visual/behavior polish 마무리
포함:
- pause tray
- refocus tray
- next beat tray
- goal complete tray
완료 기준:
- recovery flow가 checklist나 planner처럼 보이지 않는다
- overlay는 한 번에 하나만 보인다
현재 상태:
- 대부분 구현 완료
- 남은 것은 브라우저 기준 visual QA
### Step 2. Away / Return 구현
포함:
- `visibilitychange`
- `pagehide`
- sleep/wake delta 감지
- `Return` tray 추가
완료 기준:
- focus ended while away 시 standard break로 바로 가지 않는다
- return 상태에서 `지금부터 쉬기 / 이어가기 / 한 조각 다시 잡기`가 가능하다
현재 상태:
- 구현 완료
- 남은 것은 브라우저 기준 state transition QA
### Step 3. Break 분리
포함:
- `Pause`, `Break`, `Return` 카피와 material 분리
- break를 recovery tone이 아니라 release tone으로 재설계
현재 상태:
- 진행 중
- 다음 핵심 작업
### Step 4. Review 상세 기획
포함:
- started
- resumed
- completed
- recovery rate
- ritual success correlation
현재 상태:
- 아직 시작 전
---
## 7. 현재 진행률 한눈에 보기
### 완료
- Product Principles
- `/app` Entry Reframe
- Refocus core implementation
- Away / Return core implementation
### 진행 중
- `Pause / Break / Return` separation polish
- material 1차 분리 반영 완료
- copy / CTA hierarchy 2차 분리 반영 완료
- motion polish 1차 반영 완료
- 남은 것은 browser QA와 motion 미세 조정
### 다음 대기
- `Paused Session Re-entry` 구현
- `/space` recovery browser QA
- Weekly Review ritual fit highlight
- Premium Ambience System
### 방금 완료
- `Weekly Review Entry Flow` Slice 1
- `/app`에 low-emphasis weekly review entry를 추가
- 충분한 최근 7일 데이터가 있을 때만 `/stats` primary entry를 노출
- `Weekly Review Entry Flow` Slice 2
- `/stats` 마지막 CTA가 `/app?review=weekly&carryHint=...` handoff로 연결
- `/app`은 review-aware return hint를 먼저 보여주고, goal 입력은 그대로 사용자가 결정한다
- `Weekly Review Entry Flow` Slice 3
- Pro에서는 `/stats` carry-forward에 추천 ritual을 함께 보여준다
- `/stats` 마지막 CTA와 `/app` return hint가 더 구체적인 next-session handoff로 바뀐다
- `Weekly Review Entry Flow` Slice 4
- `/space`에서 goal complete로 setup 상태로 돌아온 직후에만 secondary review entry가 보인다
- full review 강제 이동 없이 작은 후행 경로로 `/stats`를 연다
- 다음 구현은 weekly review의 ritual fit highlight 또는 deeper recovery schema다
- `Paused Session Re-entry` spec
- running / paused / break의 route policy를 한 문서에서 고정했다
- `/app`은 paused session의 resume gate가 되고, explicit continue 이후 `/space`에서는 자동 resume해야 한다
- paused session 위의 새 시작은 takeover flow로만 허용한다
- `Paused Session Re-entry` Slice 1
- `/app`은 running session을 감지하면 hero 대신 즉시 `/space`로 보낸다
- `/space`는 paused session 상태에서 explicit handoff intent 없이 직접 열리면 `/app`으로 되돌린다
- 다음 구현은 paused resume gate와 auto-resume handoff다
- `Paused Session Re-entry` Slice 2-3
- `/app` paused 상태에 `이어서 몰입하기`, `한 조각 다시 잡기`, quiet `주간 review 보기`를 올렸다
- explicit continue 이후 `/space`는 자동 resume된다
- refocus handoff는 `/space?resume=refocus`로 들어가며, 진입 직후 refocus tray를 연다
- 다음 구현은 takeover flow다
---
## 8. 의사결정 규칙
새 기능이나 새 기획이 들어올 때는 아래 규칙으로 판단한다.
### 바로 진행해도 되는 경우
- 기존 코어 루프의 빈칸을 메우는 경우
- `start / immerse / refocus / return / complete` 중 하나를 선명하게 하는 경우
### 뒤로 미뤄야 하는 경우
- list/planner/task manager 느낌을 강하게 만드는 경우
- social, buddy, coworking 쪽으로 제품 무게를 옮기는 경우
- 화면에 오브젝트와 설정을 더 많이 추가하는 경우
---
## 9. 한 줄 결론
현재 끼어든 `Away / Return` 기획은 옆길이 아니다.
> 이것은 `Refocus System`을 실제 사용자 행동에 맞게 완성하기 위해 반드시 먼저 처리해야 하는 다음 단계다.
즉, 다음에 원래 하려던 기획은 사라지지 않았고,
순서는 아래처럼 재정렬되었다.
1. Refocus polish
2. Away / Return Recovery
3. Break refinement
4. Weekly Review
현재 위치:
> 코어 루프 기준으로는 `4. Weekly Review`의 entry flow 구현까지 마친 상태이고,
> 운영 기준으로는 이제 `Product Alignment Audit`을 통해 core loop 전반의 기획-구현 정합성을 전수 점검하는 단계다.

View File

@@ -0,0 +1,602 @@
# 16. Product Alignment Audit Plan
Last Updated: 2026-03-15
이 문서는 VibeRoom 전체에서 **기획과 구현이 어긋난 부분을 체계적으로 찾아내고, 실제 수정 작업까지 연결하는 실행 계획**이다.
목표는 단순하다.
> 우연히 발견한 불일치를 그때그때 고치는 방식에서 벗어나,
> 어떤 세션과 어떤 에이전트가 들어와도 같은 기준으로 앱 전체를 점검하고 닫을 수 있는 운영 체계를 만든다.
---
## 1. 왜 이 문서가 필요한가
최근 점검에서 이미 아래 문제가 반복적으로 드러났다.
- 카피는 `break`를 약속하는데 실제 동작은 `pause`인 경우
- spec은 `/app`이 review의 primary entry라고 적혀 있는데 구현에서는 resume 상태에서 review entry가 사라지는 경우
- `goal click`, `수정`, `expand/collapse`의 역할 분리가 코드와 문서에서 다르게 남는 경우
- `/stats -> /app` handoff가 실제 행동을 바꾸지 않는데 문구는 개인화된 추천을 약속하는 경우
즉 현재 문제는 “버그가 많다”가 아니라,
**기획 / 카피 / 상태 모델 / 실제 코드 / 문서가 동시에 drift할 수 있는 구조**라는 점이다.
이 audit plan의 목적은 아래 4개다.
1. source of truth를 고정한다
2. route / state / copy / BM claim을 같은 표로 점검한다
3. 발견된 불일치를 severity와 수정 단위로 즉시 분류한다
4. 수정 후 문서와 QA까지 같은 라운드에서 닫는다
---
## 2. Audit의 정의
이 문서에서 말하는 `alignment audit`는 아래 5개를 동시에 보는 점검이다.
### 1. Product Alignment
- 제품 원칙과 실제 기능이 맞는가
- single-goal, single-microStep, commitment-first 원칙이 지켜지는가
### 2. Flow Alignment
- 사용자가 실제로 밟는 경로가 기획된 유저 플로우와 맞는가
- entry / recovery / complete / review의 연결이 끊기지 않는가
### 3. Copy Alignment
- 화면 문구가 실제 동작을 과장하거나 왜곡하지 않는가
- 초심자도 용어 없이 이해 가능한가
### 4. State Alignment
- pause / break / return / complete / resume 같은 상태 의미가 코드와 카피에서 일치하는가
### 5. Business Alignment
- Free / Pro 가치 제안이 실제 제품 행동으로 느껴지는가
- “된다고 쓰여 있지만 실제로는 안 되는” BM성 약속이 없는가
---
## 3. Source of Truth 우선순위
Audit 중 충돌이 생기면 아래 순서로 판단한다.
1. `product_principles.md`
2. `/Users/ijeongmin/Desktop/corpi/viberoom/current_context.md`
3. route/flow 관련 상세 spec
- `../screens/app/19_app_atmosphere_entry_spec.md`
- `../screens/space/10_refocus_system_spec.md`
- `../screens/space/11_away_return_recovery_spec.md`
- `../screens/space/13_space_intent_card_collapsed_expanded_spec.md`
- `../screens/stats/14_weekly_review_reframe_spec.md`
- `../screens/app/15_app_stats_entry_flow_spec.md`
4. `90_current_state.md`
5. 실제 코드
중요:
- 코드가 source of truth가 아니다
- 하지만 문서가 낡았고 코드가 더 최근 의도를 반영한다면, 그 차이를 `finding`으로 기록한 뒤 문서를 업데이트한다
---
## 4. Audit 범위
### 4.1 Route 범위
반드시 본다.
- `/`
- `/login`
- `/app`
- `/space`
- `/stats`
- `/settings`
- `/admin`
### 4.2 Core Product Flow 범위
반드시 본다.
- Landing -> Auth -> `/app`
- `/app` new start
- `/app` resume
- `/space` focus
- `/space` pause
- `/space` return
- `/space` next beat
- `/space` goal complete
- `/space` complete -> setup
- `/app -> /stats -> /app`
- paywall / Pro handoff
### 4.3 Cross-cutting 범위
반드시 본다.
- i18n copy
- query param handoff
- API contract / optimistic UI
- plan tier gating
- toast / reminder / empty state
- docs drift
---
## 5. Audit 원칙
### 1. 화면이 아니라 “행동 단위”로 점검한다
예:
- `Goal Complete` 화면 자체를 보는 게 아니라
- `사용자가 목표를 끝냈다고 느끼는 순간 -> 선택 -> 결과 상태` 전체를 본다
### 2. copy와 behavior를 반드시 함께 본다
카피만 맞고 동작이 다르면 실패다.
동작은 맞는데 카피가 과장되면 그것도 실패다.
### 3. Free / Pro 약속은 더 엄격하게 본다
BM에 연결된 카피는 일반 카피보다 더 엄격하게 검증한다.
예:
- “추천 ritual로 돌아가기”
- “방금 끝낸 흐름까지 담아 review”
- “주간 review가 다음 세션을 돕는다”
### 4. 한 라운드에서 `finding -> fix -> docs -> commit`까지 닫는다
발견만 하고 쌓아두지 않는다.
### 5. 브라우저 QA 없이 닫지 않는다
`tsc`, `eslint` 통과는 필수지만 충분조건이 아니다.
---
## 6. Finding 분류 기준
### P1
제품 의미가 뒤틀리는 불일치
예:
- break로 쓰였는데 실제로 break가 아님
- primary entry가 없어짐
- Pro value를 약속하지만 실제로 작동하지 않음
### P2
사용자 플로우가 헷갈리거나 약속이 약해지는 불일치
예:
- 문구는 맞지만 진입점이 숨겨짐
- 2단계 flow인데 1단계처럼 보임
- recovery 상태가 시각적으로 구분되지 않음
### P3
문서 / 카피 / 접근성 / 잔여 코드 드리프트
예:
- 오래된 spec 표현
- dead i18n key
- aria-label과 가시 UI가 어긋남
---
## 7. 실제 Audit 방법
Audit은 아래 6단계로 진행한다.
### Phase 0. Baseline Freeze
산출물:
- 현재 기준 문서 목록
- 현재 route / widget ownership map
- 현재 work order
실행:
- `current_context.md`
- `90_current_state.md`
- `./12_core_loop_execution_roadmap.md`
- route map / session brief 확인
목적:
- 무엇이 기준인지 먼저 잠근다
---
### Phase 1. Route & Flow Inventory
각 route마다 아래를 표로 만든다.
- route
- intended role
- main CTA
- secondary CTA
- entry source
- exit target
- hidden states
- Pro-specific behavior
산출물:
- `route-flow matrix`
점검 질문:
- 사용자는 이 route에 왜 오는가
- 여기서 무엇을 해야 하는가
- 다음 화면은 어디인가
- 실제 코드가 이 흐름을 유지하는가
---
### Phase 2. State Contract Audit
`/space``/app`의 상태 전이를 표로 만든다.
필수 상태:
- setup
- focus
- paused
- return
- refocus
- next-beat
- complete-choice
- complete-next
- break
- review-entry
각 상태마다 본다.
- state 이름
- 사용자가 이해하는 의미
- 실제 trigger
- visible UI
- exit actions
- side effects
산출물:
- `state contract matrix`
핵심 목적:
- 이름만 있고 실제 의미가 다른 상태를 찾는다
---
### Phase 3. Copy / Behavior Audit
각 핵심 CTA에 대해 아래를 점검한다.
- label
- user promise
- actual effect
- mismatch 여부
예:
- `잠시 비우기`
- `쉬기 이어가기`
- `다음 목표로 바로 시작`
- `주간 review 보기`
- `추천 ritual과 함께 /app 돌아가기`
산출물:
- `copy-behavior mismatch list`
---
### Phase 4. Business Model Audit
Free / Pro를 아래 기준으로 본다.
- user sees
- user clicks
- actual unlocked behavior
- value perception
- overclaim risk
반드시 보는 곳:
- paywall copy
- `/stats` Pro carry-forward
- `/app` teaser / return hint
- review insight / ritual recommendation
산출물:
- `BM promise audit`
---
### Phase 5. Browser Journey Audit
이 단계는 실제 브라우저에서 한다.
필수 시나리오:
1. 로그인 후 `/app` 첫 진입
2. `/app`에서 새 goal 시작
3. `/app` resume 상태
4. `/space` pause -> refocus -> resume
5. `/space` away -> return(focus)
6. `/space` focus ended while away -> return(break)
7. `/space` microStep done -> next beat
8. `/space` goal complete choice
9. `/space` goal complete next
10. `/space` complete -> setup -> review teaser
11. `/app` weekly review entry -> `/stats` -> `/app`
12. Pro 상태 handoff
각 시나리오마다 본다.
- first meaningful paint
- primary CTA visibility
- copy comprehension
- next action clarity
- state transition correctness
- dismiss behavior
- mobile / desktop 차이
산출물:
- `browser QA findings`
---
### Phase 6. Fix Closure
각 finding은 아래 단위로 닫는다.
- finding 요약
- severity
- affected files
- fix approach
- docs to update
- validation commands
- manual QA notes
- commit hash
이 단계까지 끝나야 “수정 완료”다.
---
## 8. 실제 실행 순서
앱 전체 audit은 아래 순서로 진행한다.
### Slice A. Core Loop Alignment
범위:
- `/app`
- `/space`
- `/stats`
우선 점검:
- entry
- recovery
- completion
- review handoff
이유:
- VibeRoom의 돈 되는 핵심 가치가 여기 있다
### Slice B. Monetization Alignment
범위:
- paywall
- plan tier
- Pro copy
- Pro actual behavior
이유:
- BM 과장은 제품 신뢰를 가장 빠르게 해친다
### Slice C. Shell & Supporting Routes
범위:
- `/`
- `/login`
- `/settings`
- `/admin`
이유:
- 핵심 루프보다 우선순위는 낮지만, 전체 완성도와 신뢰에 영향이 크다
### Slice D. Docs & Regression Guard
범위:
- `current_context.md`
- `90_current_state.md`
- detailed specs
- lint / dead copy / route map
이유:
- 다음 세션에서 다시 어긋나지 않게 만드는 단계다
---
## 9. 추천 산출물
이 audit을 실제로 굴릴 때는 아래 3개 파일이 필요하다.
### 1. 기준 문서
- 이 문서 `./16_product_alignment_audit_plan.md`
### 2. 실제 finding ledger
추천 파일:
- `./17_product_alignment_findings.md`
형식:
- ID
- severity
- route / flow
- product promise
- actual behavior
- affected files
- fix status
### 3. execution checklist
추천 위치:
- `work.md`
형식:
- 이번 slice에서 확인할 시나리오
- 수정 범위
- 제외 범위
- 완료 조건
---
## 10. 이 audit을 어떻게 실행할 것인가
### 라운드 단위 규칙
한 라운드는 아래 순서로만 진행한다.
1. 이번 slice 범위 결정
2. static audit
3. browser audit
4. findings 정리
5. fix
6. docs update
7. validation
8. commit
### 각 라운드 출력 형식
항상 아래 형식으로 닫는다.
- 추가
- 수정
- 삭제
- 검증
- 커밋
### 커밋 규칙
- 한 주제 = 한 커밋
- 기획 불일치 정리는 `fix(flow): ...`
- 문서 중심 라운드는 `docs(product): ...`
---
## 11. 바로 다음 실행 계획
### 실행 1. `./17_product_alignment_findings.md` 생성
범위:
- 현재까지 이미 드러난 core loop mismatch를 먼저 기록
포함:
- break semantics
- review entry visibility
- review teaser overclaim
- Pro handoff realism
- docs drift
### 실행 2. Slice A static audit
대상:
- `/app`
- `/space`
- `/stats`
목표:
- route-flow matrix
- state contract matrix
- copy-behavior mismatch list
### 실행 3. Slice A browser audit
대상 시나리오:
1. `/app` first entry
2. `/app` resume
3. `/app -> /stats -> /app`
4. `/space` pause / return / complete
5. `/space complete -> setup -> review teaser`
### 실행 4. findings fix round
원칙:
- P1 먼저
- 그 다음 P2
- P3는 같은 파일을 만질 때 함께 정리
---
## 12. 완료 기준
Alignment audit이 제대로 굴러간 상태는 아래와 같다.
- 중요한 CTA가 실제 동작을 과장하지 않는다
- primary / secondary entry가 문서와 코드에서 동일하다
- pause / break / return / complete의 의미가 사용자 기준으로도 분리된다
- Free / Pro 가치 제안이 실제 행동으로 느껴진다
- 다음 세션/에이전트가 문서를 읽고도 현재 제품 상태를 오해하지 않는다
---
## 13. 절대 하지 말아야 할 것
- 브라우저 QA 없이 문서만 보고 “정상”이라고 판단
- 카피만 바꾸고 실제 상태 모델은 그대로 두기
- BM 문구를 구현보다 앞서 나가게 두기
- `current_context.md`를 나중에 한꺼번에 갱신하기
- 한 라운드에 너무 많은 route를 동시에 수정하기
---
## 14. 최종 판단
VibeRoom이 premium product가 되려면,
UI refinement만으로는 부족하다.
정말 중요한 것은:
> 사용자가 읽는 문구, 누르는 행동, 실제로 일어나는 상태 변화,
> 그리고 그걸 설명하는 문서가 모두 같은 제품을 말하고 있어야 한다.
이 audit plan은 그 정합성을 제품 운영의 기본 프로세스로 만들기 위한 문서다.

View File

@@ -0,0 +1,132 @@
# 17. Product Alignment Findings
Last Updated: 2026-03-15
이 문서는 `./16_product_alignment_audit_plan.md`를 실제로 운영하기 위한 **findings ledger**다.
목표는 단순하다.
> VibeRoom의 core loop에서 발견된 기획-구현 불일치를
> severity, 실제 영향, 수정 상태 기준으로 누적 관리한다.
이 파일은 단순 회고 메모가 아니다.
- 어떤 문제가 있었는지
- 무엇을 약속하고 있었는지
- 실제로는 어떻게 동작했는지
- 어느 파일을 건드렸는지
- 지금은 열린 문제인지, 수정됐지만 브라우저 확인이 남았는지
를 한 번에 보게 만드는 운영 문서다.
---
## 1. 상태 정의
### `open`
- 아직 수정 전
- 다음 작업 라운드에서 다뤄야 함
### `fixed-awaiting-browser`
- 코드와 문서는 정리됨
- 브라우저 기준 최종 QA가 남아 있음
### `closed`
- 코드 / 문서 / 브라우저 확인까지 끝남
---
## 2. 현재 범위
이번 ledger v1은 아래 core loop 범위만 다룬다.
- `/app`
- `/space`
- `/stats`
- review handoff
- break / pause / return semantics
- Pro personalized handoff
`/settings`, `/admin`, landing shell의 정합성 감사는 다음 slice로 미룬다.
---
## 3. Findings
| ID | Severity | Area | Product Promise | Actual Behavior | Affected Files | Status | Next Action |
| --- | --- | --- | --- | --- | --- | --- | --- |
| ALN-001 | P1 | `/space` Goal Complete / Break semantics | `잠깐 쉬기`는 블록을 닫고 break로 넘어가는 것처럼 읽힘 | 실제로는 overlay만 닫고 reminder만 예약되어 break 의미가 깨졌음 | `src/widgets/space-focus-hud/ui/SpaceFocusHudWidget.tsx`, `src/shared/i18n/messages/space.ts` | fixed-awaiting-browser | `잠시 비우기 -> pause + reminder`가 실제 체감상도 맞는지 브라우저 확인 |
| ALN-002 | P1 | `/app` Weekly Review primary entry | `/app`이 Weekly Review의 primary entry라고 정의됨 | current session이 있으면 review entry가 완전히 사라져 primary entry가 끊겼음 | `src/widgets/focus-dashboard/ui/FocusDashboardWidget.tsx`, `docs/screens/app/15_app_stats_entry_flow_spec.md` | fixed-awaiting-browser | resume 상태에서 review entry 발견성과 우선순위 확인 |
| ALN-003 | P2 | `/space` secondary review teaser | `방금 끝낸 흐름까지 review에 담아둘까요?`처럼 read-after-write를 약속했음 | 실제로는 generic `/stats`만 열고, 방금 끝낸 흐름을 별도 handoff하지 않았음 | `src/shared/i18n/messages/space.ts`, `src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx` | fixed-awaiting-browser | setup drawer teaser가 과장 없이 자연스럽게 읽히는지 확인 |
| ALN-004 | P1 | Pro personalized handoff | `/stats`에서 추천 ritual로 돌아간다고 말했음 | 실제로는 `/app` 문구만 바뀌고 start behavior는 기본 ritual 그대로였음 | `src/widgets/focus-dashboard/ui/FocusDashboardWidget.tsx`, `src/shared/i18n/messages/app.ts` | fixed-awaiting-browser | `entryPreset`이 실제 scene/sound/timer 시작값으로 적용되는지 검증 |
| ALN-005 | P2 | `/space` intent card interaction | rail, edit, expand/collapse의 역할이 분리돼야 함 | goal 클릭과 edit 진입이 섞여 예측 가능성이 낮았음 | `src/widgets/space-focus-hud/ui/IntentCapsule.tsx`, `docs/screens/space/13_space_intent_card_collapsed_expanded_spec.md` | fixed-awaiting-browser | desktop/mobile에서 expand와 edit 구분이 분명한지 확인 |
| ALN-006 | P2 | `/space` Goal Complete 2단계 인지 | 1단계 choice와 2단계 next 입력이 명확히 구분돼야 함 | 사용자 입장에서는 `돌아가기 / 다음 목표로 바로 시작` 화면이 top-level 분기처럼 읽히기 쉬움 | `src/widgets/space-focus-hud/ui/GoalCompleteSheet.tsx`, `src/shared/i18n/messages/space.ts` | open | choice view와 next view의 제목, 구조, motion, context label을 더 분리하는 기획 필요 |
| ALN-007 | P2 | Weekly Review discoverability | review는 `/app`의 primary ritual이어야 함 | 데이터 gate와 currentSession 조건에 따라 사용자에게 “아예 없는 기능”처럼 느껴질 수 있음 | `src/widgets/focus-dashboard/ui/FocusDashboardWidget.tsx`, `docs/screens/app/15_app_stats_entry_flow_spec.md` | open | low-data 상태와 resume 상태를 포함한 discoverability 정책 재정의 |
| ALN-008 | P1 | `잠시 비우기``Break`의 제품 의미 | break는 reward/reset, pause는 recovery로 분리돼야 함 | 현재는 카피와 트레이는 개선됐지만, 제품 차원의 최종 정의와 시각 분리까지 완전히 닫히진 않았음 | `docs/screens/space/10_refocus_system_spec.md`, `docs/screens/space/11_away_return_recovery_spec.md`, `src/widgets/space-focus-hud/ui/GoalCompleteSheet.tsx`, `src/widgets/space-focus-hud/ui/ReturnPrompt.tsx` | open | `잠시 비우기`, active break, return(break)를 하나의 최종 state model로 재정의 |
| ALN-009 | P3 | Spec / current-state drift | 다음 세션 문서가 실제 구현과 맞아야 함 | intent card, goal complete, review entry 관련 오래된 표현이 여러 spec에 남아 있었음 | `docs/screens/space/10_refocus_system_spec.md`, `docs/screens/space/13_space_intent_card_collapsed_expanded_spec.md`, `docs/90_current_state.md`, `docs/session_brief.md`, `../../current_context.md` | fixed-awaiting-browser | 이후 라운드부터는 fix와 문서 갱신을 같은 커밋에서 닫는지 점검 |
| ALN-010 | P1 | paused session 재진입 정책 | running은 바로 `/space`, paused는 `/app` resume gate, explicit continue 이후에는 자동 resume이어야 함 | Session Routing Contract, paused resume gate, auto-resume handoff, takeover flow까지 구현됐다. 남은 것은 browser QA와 takeover wording polish이다 | `docs/screens/app/18_paused_session_reentry_spec.md`, `src/widgets/focus-dashboard/ui/FocusDashboardWidget.tsx`, `src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx`, `src/features/focus-session/model/useFocusSessionEngine.ts` | fixed-awaiting-browser | paused resume / refocus / takeover 3경로를 브라우저에서 확인 |
---
## 4. 요약 판단
### 현재 이미 수습된 축
- break/pause 카피와 실제 동작의 큰 충돌
- `/app` resume 상태의 review entry 공백
- `/space` review teaser 과장 카피
- Pro ritual handoff의 실동작 부재
- intent card interaction ambiguity 일부
### 아직 열린 축
- `Goal Complete` 2단계 구조의 인지 부담
- low-data / resume 상태에서 review discoverability
- `잠시 비우기`와 진짜 break의 최종 state model
- paused session의 route / resume / takeover contract
---
## 5. 다음 실행 우선순위
### 1. Static audit continuation
다음 문서가 필요하다.
- route-flow matrix
- state contract matrix
즉, 다음 라운드는 `설명 가능한 표`를 만드는 단계다.
### 2. Browser audit
반드시 아래 순서로 확인한다.
1. `/app` no-session entry
2. `/app` resume + review entry
3. `/app -> /stats -> /app`
4. `/space` goal complete choice
5. `/space` goal complete next
6. `/space` 잠시 비우기
7. `/space` return(focus)
8. `/space` return(break)
9. `/space` complete -> setup -> review teaser
### 3. 다음 수정 라운드의 우선순위
1. ALN-010
2. ALN-008
3. ALN-006
4. ALN-007
---
## 6. 운영 규칙
- 새로운 mismatch를 찾으면 이 문서에 먼저 기록한다
- severity 없이 추가하지 않는다
- `fixed-awaiting-browser`는 브라우저 확인 전까지 닫지 않는다
- 실제 fix가 끝나면 관련 commit hash를 이 문서에 추가한다