#1592 Phase 3 — 입력 32행·공개 28행 적용·검증 상태표
2026-09-14. 입력 경로 조사표의 32행과 공개 영역 조사표의 28행(원표 26 + D1·D2)에 대해 Phase 3 후보의 구현 경계와 로컬 검증 증거를 대조한다. 최종 목표(입력 즉시 반응·완성본 공개·실제 대기 시간·향후 일관 적용)는 계약이 정한다. 이 표는 "각 행에 무엇이 적용됐고 어떤 검사가 있는가"의 기록이며, 성능 합격·release 반영·Production 검증을 뜻하지 않는다.
기준 후보: 앱 feat/1592-responsive-loading 908e7b29(release/v1.0.0 9a37e73c 병합 후), 테스트는 QA1 0bb392c0(suite tree f798c634)의 suite/tests/…. 2026-09-14 #1591로 앱 테스트 소유권이 QA1로 옮겨졌으므로 아래 검사 파일 경로는 QA1 suite 기준이며, 앱 작업 트리에는 npm run qa1:prepare로 준비된다.
읽는 법
- 동작 증거: 실제 store·controller·binding·UI(모바일 390×844 / PC 1440×1000 Chromium 또는 SSR)를 붙이고 외부 응답의 도착 순서·실패만 제어한 검사가 그 행의 계약(대기 중 입력·완성 후 공개·무효화·실패/재시도·늦은 응답)을 검사한다. 테스트가 준비 상태를 대신
ready로 주지 않는다. - 부분 증거: 공용 store 단위 검사·공용 UI 경계 검사·기존 계약 검사는 있으나, 그 행의 실제 binding→DOM 경로를 이번 후보에서 검사하지 않았다. 마지막 열의 공백을 지우기 전에는 그 행을 "검증 완료"로 세지 않는다.
- 모든 행에 공통으로 남는 것: Phase 4의 실제 규모(1/4/10년) 성능 계측, 신규 개발 규칙 연결, release 반영·Production 확인.
입력 32행
| ID | 적용된 구현 경계 | 판정 | 동작 증거(QA1 suite/tests/react/) | 남은 증거 공백 |
|---|---|---|---|---|
| N01 모바일 탭/재선택 | 준비 intent 취소→동기 탭/stack 전환, pressed/deferred pane 분리 유지 | 부분 | navigation 단위, 준비 셸 닫기(E) | 루트 탭별 cold chunk/data 보류 중 강조·목표 제목 first paint 브라우저 |
| N02 PC 탭·홈 날짜/주간 이동 | 사이드바 강조는 누른 탭 즉시, 본문 판은 지연 값(useDeferredValue)·판마다 Suspense fallback, 판 상태 정리는 같은 transition(Phase 4), 준비 취소 | 부분 | E 단위, 저장 중 다른 탭 이동(desktopComposeClose.browser), 구조 핀 responsivenessPhase4Gate.test, Phase 4 계측(PC 리포트·달력 진입 cold/warm — 검증 기록 Phase 4 표) | 재방문 재마운트(비활성 판 unmount 구조)와 provider 값 재생성으로 남는 동기 비용 — 검증 기록 Phase 4 |
| N03 모바일 메뉴 | 동기 drawer state/history | 부분 | 기존 navigation 계약 | 조회·청크 준비 중 열기/닫기 DOM |
| N04 드로워 도구 | 도구 청크 fallback에도 실제 뒤로 handler(MobileStackBindings) | 동작 증거 | recordsToolChunkPublication.browser 1/1 (보류된 청크 중 닫기, 늦은 청크 재열림 없음) | 도구별 cold chunk 전수 |
| N05 depth/OS/swipe back | 기존 requestPop/finishPop 수명에 준비 취소 연결 | 부분 | E 준비 close/late reply, native-back 단위 | 새 준비 화면별 4경로 back 실제 DOM |
| N06 신규 운동/복귀 | 동기 intent+layer, eager 준비/lazy fallback | 부분 | entry policy 61묶음(E) | 실제 버튼→cold catalog/chunk→편집기·닫기 전체 여정 |
| N07 기존 세션으로 시작 | workoutEntryIntent preparing→ready/error/cancelled, canonical detail 전 셸 공개 | 동작 증거 | workoutEntryPreparation.test 18, workoutEntryPublication.browser 6 | PC 노출 시작 버튼은 없음(공유 binding desktop mode만) |
| N08 그룹 보드 시작 | catalog 전 entry token, custom 등록 전후 intent fence | 동작 증거 | 위와 같음(catalog/custom hold·취소·late) | 이미 보낸 custom write의 서버 취소는 범위 밖 |
| C01 모바일 월/오늘 | calendarPublication month snapshot+projection, grid chrome 밖 boundary, 월 이동은 화면 로컬 상태 즉시 + 루트 상태 transition(Phase 4) | 동작 증거 | calendarResourcePublication.browser, calendarPublication.test, 구조 핀 responsivenessPhase4Gate.test, Phase 4 계측(1년·4배 CPU): 월 이동 cold 첫 반응 p95 38ms·동기 28ms·완성 586ms, warm 39ms 합격 | 월 이동 cold 마지막 데이터→공개 244ms(합격선 100) — 검증 기록 Phase 4 원인 1 |
| C02 모바일 일/주/월 | day/week/month status·retry, range=exact+필수 월+완료일 상세(최대 4 병렬) | 동작 증거 | 위와 같음, 단위 93일/4병렬/owner | 주간 drawer 자체 조합(WEEK_BAR_UI=false) |
| C03 모바일 홈 날짜 | 선택+loading 먼저, canonical detail ready/error 후 적용, 유효 재방문은 projection 재사용 | 부분 | home day coordinator 단위, homeCompleteReveal.browser(홈 본문) | 실제 MobileHomeBinding→day overlay hold/error/close 브라우저 |
| C04 PC 홈 날짜 | coordinator→homeDayModal, DkH3Recap portal 독립 닫기 | 동작 증거 | desktopHomePublication.browser 1/1 (연간 resource→binding→projection→날짜 modal) | — |
| C05 PC 일/주/월·세션 | calendarPublication+DesktopCalendarBinding, session retry/error 배선, 주간 합계 행은 걸친 달 전부의 상태 결합 뒤 공개(Phase 4) | 동작 증거 | calendarResourcePublication.browser 3/3 (PC 세션 오류→상세 유지·retry 포함), 구조 핀 responsivenessPhase4Gate.test, Phase 4 계측 PC 달력 진입 cold 20/20 관측(첫 계측의 늦은 정정 10/20 → 0) | 모든 주간/세션 토글 조합 |
| S01 완료 상세 | sessionDetailStore 원자 pending/selection/error+retry, PC error에서 selected summary 유지 | 동작 증거 | workoutEntryPublication.browser(M error/retry), sessionDetailStore.test 10, PC 세션 오류 브라우저(C05) | — |
| S02 계획 상세 | lite 가림, full source+동일 revision만 공개, M dataStatus/error/retry | 동작 증거(M) / 부분(PC) | workoutEntryPublication.browser(M 계획 summary 비공개) | PC 계획 lite/held full/error 브라우저 |
| E01 신규 기록/계획 편집 | create intent 동기, 준비 body와 shell 분리 | 부분 | entry 단위(E), 실제 compose(W) | cold editor code/catalog 중 셸/close 전 과정 |
| E02 완료 기록 편집 | forced canonical detail 전 eager 준비, PC editor onReady handoff | 동작 증거 | E 18/6, compose 연결(W) | PC editor 실제 mount handoff 전체 단언 |
| E03 계획 편집 | preparing→forced canonical/readOnly→draft | 동작 증거 | E 실제 binding hold/readonly/cancel | E02와 같음 |
| W01 완료 저장/자동 저장 | durable/receipt/write command 유지, stats recovery 완료=마지막 exact calendar | 부분 | W PC 저장 hold, C recovery, write/draft 단위 | 모바일 자동 저장 IDB+RPC 지연 첫 반응·receipt→홈/리포트/달력 재공개 |
| W02 시간 수정/삭제 | 기존 pipeline+UI busy, 영향 resource invalidation 공통 연결 | 부분 | write/OCC 단위 | 실제 picker/삭제 화면 receipt 전후 DOM |
| W03 계획 저장·입력·닫기 | compose open/request 분리, retainChildren, collapsed progress/reopen, requestId+tab fence | 동작 증거 | desktopComposeClose.browser 3, 관련 96 | 모바일 plan exit 수명은 단위 |
| G01 그룹 탐색/날짜 | 즉시 target/view, board/days/marks 각각 publication | 동작 증거 | groupPublication.browser 8, groupPublication.test | 규모 실측(Phase 4) |
| G02 그룹 상세·작성·초대·설정 | doneSession error/retry, writePending, ACK 뒤 full projection 갱신 | 부분 | G detail open/close/error, partial ACK | create/composer/settings/invite 하위 폼 전수 DOM |
| F01 친구 페이지/탭/일지/상세 | friendScopeStore actual validity, week/month range 선택·payload, 탭 전환·닫기는 데이터와 독립 | 동작 증거 | friendScopePublication.browser 3(홈 세 원천·피드 탭 즉시 전환·세션 오버레이 닫기/늦은 응답), friendRangePublication.browser 2(월간), friendScopeRange.test 3, store 17 | 친구 세션 오버레이의 소유자 표기가 뒤로가기 버튼을 덮던 실제 결함을 이 검사가 잡아 수리(primitives.css) |
| F02 피드 좋아요·댓글 | optimistic like 유지, 댓글 read validity+partial ACK 재조회 | 동작 증거 | feedCommentPublication.test, G 댓글 sheet(browser) | 모든 submit/delete 조합 |
| F03 신고/차단 | blocked-list publication, 기존 submit/unblock pending | 부분 | P 차단 목록 source→sheet | 신고 메뉴/제출 held RPC DOM |
| F04 알림 | readPending/readAllPending→BrandRow, 최초/read/append 독립 | 동작 증거 | notificationPublication.browser 3, notificationPublication.test | target overlay 둘 중 하나 보류 |
| P01 모바일 프로필 변경 | workspace boundary, 완성 뒤 draft, 기존 save busy | 부분 | profilePublication.browser(M 준비 modal close) | 각 form 응답 보류·실패 후처리 |
| P02 PC 프로필 변경 | useProfileAction field busy, dirty input 분리 | 동작 증거 | profilePublication.browser 6 | — |
| T01 기록/커스텀/회복 도구 | manualResource 전량, ACK 뒤 invalidation, recovery skeleton boundary | 동작 증거 | manualRecordsPublication.browser 3, recoveryPublication.browser 2(+14), custom(P) | trainingStyle·즐겨찾기 모바일 폼 전수 |
| Q01 검색 | echo/IME/debounce 유지, full index ready/error/owner+10초, catalog version | 동작 증거 | homeFeedSearchPublication.browser 8(M/PC 검색) | IME race, 40페이지 상한·10년 인덱스(Phase 4) |
| X01 법률·서비스·내보내기/가져오기 | Legal overlay 기존 skeleton/error/retry, export pending, import 기존 epoch | 부분 | P PC export held, legal 계약 | 법률 fetch hold, 모바일 export, import 파일 지연 DOM |
공개 28행
| ID | 적용된 구현 경계 | 판정 | 동작 증거(QA1 suite/tests/react/) | 남은 증거 공백 |
|---|---|---|---|---|
| H1 모바일 홈 | homePublicationStatus(home/PR/favorites/recovery·today·요구 세대)→HomeScreen boundary | 부분 | homeFeedSearchPublication.browser(양 순서/refresh/error), homePublication.test, homeCompleteReveal.browser 8 | 실제 MobileHomeBinding→provider 경로(브라우저는 UI 공급) |
| H2 PC 홈 통계 | H1 + yearActivity publication 결합, 재확인 중 이전 projection 비공개 | 동작 증거 | desktopHomePublication.browser 1/1 | — |
| H3 PC 홈 피드 | feedResource publication→SocialFeature→독립 feed column | 동작 증거 | homeFeedSearchPublication.browser(firstpage invalidation·append) | 실제 DesktopHomeBinding provider 배선 브라우저 |
| H4 홈 날짜 M/PC | current key·cancel, skeleton/ready/error/retry | 동작 증거(PC) / 부분(M) | desktopHomePublication.browser | 모바일 실제 binding→modal(C03) |
| C1 월 격자·합계 | months snapshot/발행모델 유효성 boundary | 동작 증거 | calendarResourcePublication.browser | — |
| C2 선택일 | month+day full projection/세대, chrome/숫자 분리 | 동작 증거 | 위와 같음 | — |
| C3 주/월 | range exact+필수 months+완료 day details, status UI | 동작 증거 | 위와 같음, desktopVolumePublication.browser(PC 리포트 날짜/기간) | 친구 range는 F3 |
| F1 내 피드 | full first-page publication, append 분리, retained rows 가림 | 동작 증거 | homeFeedSearchPublication.browser | — |
| F2 친구 홈 | 3원천/freshness, onRetryHome | 동작 증거 | friendScopePublication.browser(대시보드·PR·즐겨찾기 세 원천 대기, 강제 재조회 시 이전 홈 숨김, 오류→재시도), friendScopeStore 17 | — |
| F3 친구 달력/날짜 | monthStatus/selectedDayStatus/retry, range 선택·payload | 부분 | friendRangePublication.browser 2(월간 즉시 열기·숫자 숨김·재시도·늦은 답장) | month/day 실제 binding 브라우저 |
| F4 친구 피드 | target-key feedResource publication | 동작 증거 | friendScopePublication.browser(탭 즉시 강조, 첫 페이지 대기, 재조회 중 보관 행 숨김, 실패→재시도) | 친구 target 변경/close 조합 |
| F5 친구 리포트 | friend report validity→core revision/generation | 부분 | 리포트 코어 R | friend resource→binding→core 통합 |
| F6 친구 세션 | pending/error/ready identity+retry | 동작 증거 | friendScopePublication.browser(상세 대기 중 스켈레톤, 닫은 뒤 늦은 응답 폐기, 실패→오버레이 안 재시도·중복 없음) | — |
| G1 목록/초대/미니보드 | actual read validity, GroupList boundary | 동작 증거 | groupPublication.browser | — |
| G2 라운지/출석 | lounge·attendance 별도 status/key | 동작 증거 | 위와 같음 | — |
| G3 화이트보드 | board·days all-ready 조합 | 동작 증거 | 위와 같음(board 먼저/days 먼저) | — |
| G4 종목기록/월마크 | days 기반 기록 status, month marks status | 동작 증거 | 위와 같음 | — |
| G5 그룹 상세 | target 먼저, error/retry, close abort | 동작 증거 | 위와 같음 | — |
| Q1 모바일 검색 | catalog+전체 index publication | 동작 증거 | homeFeedSearchPublication.browser | 40페이지 상한 표시 |
| Q2 PC 검색 | catalog+index 조합, counts/results boundary | 동작 증거 | 위와 같음 | — |
| P1 기본/신체/인입 | profileResource read status→profilePublication | 동작 증거 | profilePublication.browser | — |
| P2 연결/커스텀 | latest revision + read/write 분리 | 동작 증거 | 위와 같음 | — |
| P3 차단 목록 | moderationStore read validity | 동작 증거 | 위와 같음 | — |
| S1 완료 상세 M/PC | dataStatus/error/retry→양 boundary | 동작 증거 | E(M), C05(PC) | — |
| S2 계획 상세 M/PC | lite 가림, current full 전 body 가림 | 동작 증거(M) / 부분(PC) | E | PC 계획 상세 브라우저 |
| R1 종목 상세/PR M/PC | initial/year/records/history fragment 일치 후 공개, 연도·보관 status/retry | 동작 증거 | prDetailPublication.browser 11/11 | — |
| D1 PC 기록표·셀/날짜/종목 서랍 | 월 error·셀 loading/error·날짜/종목 서랍 status, 유효 캐시 재사용 | 동작 증거 | desktopLogTablePublication.browser 3/3 | — |
| D2 PC 커스텀 운동 그룹 | catalogPublication→그룹 binding, 미완성 catalog로 로컬 id 정규화 금지 | 동작 증거 | desktopFavoriteGroupsPublication.browser 2/2 (+12) | — |
집계
- 동작 증거 행: 입력 19 / 공개 23 (Phase 4에서
friendScopePublication.browser로 F01·F2·F4·F6을 보강). S02·H4처럼 M/PC 중 한쪽만 동작 증거인 행은 위에 "동작 증거(한쪽) / 부분"으로 적었고 이 집계에서는 동작 증거 쪽에 세지 않는다. 부분 증거 행: 입력 13 / 공개 5. 구현 경계가 없는 행은 없다. - 부분 증거 18행의 공백은 결함이 확인됐다는 뜻이 아니라, 이번 후보에서 그 행의 실제 binding→DOM 경로를 검사한 증거가 없다는 뜻이다. 공용 store·boundary 검사가 같은 코드 경로를 통과하더라도 행별 완료로 세지 않는다.
- 겹치는 입력/공개 행을 화면 수나 검사 수로 더하지 않는다.