docs(docs): 문서를 화면과 용도별 폴더로 재구성
This commit is contained in:
433
docs/product/12_core_loop_execution_roadmap.md
Normal file
433
docs/product/12_core_loop_execution_roadmap.md
Normal 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 전반의 기획-구현 정합성을 전수 점검하는 단계다.
|
||||
602
docs/product/16_product_alignment_audit_plan.md
Normal file
602
docs/product/16_product_alignment_audit_plan.md
Normal 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은 그 정합성을 제품 운영의 기본 프로세스로 만들기 위한 문서다.
|
||||
132
docs/product/17_product_alignment_findings.md
Normal file
132
docs/product/17_product_alignment_findings.md
Normal 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를 이 문서에 추가한다
|
||||
Reference in New Issue
Block a user