Skip to content

U06 통합 UX 검증 — #1540

2026-09-11 착수. 담당 Codex 01a08aec-12fe-7d41-b6c6-2906e5355bbb. 코드·검사는 PR1578로 release/v0.18.0에 반영됐다. 현재 문서는 후보별 로컬 증거를 기록하며 실제 v0.18 staging Phase4는 미완료다. 통합 작업 기록.

후보와 실행 경계

  • 앱 기준: 849191b54b15682fba001dbde9757f88b76cf580 (R01 PR1569). 직접 선행 A16/U04/U05/S09/R01/N01/I01/B01의 merge SHA 포함을 GitHub compare behind_by=0으로 확인했다.
  • 문서 기준: 2746e83e2eb578e550b1546000025502f8bbba76 (R01 문서 PR70).
  • 최종 활성 경로는 R01 manifest, 기능 목록은 G05 장부를 사용한다. 이전 장부 행의 퇴역 이름보다 R01의 현재 소비자 연결을 우선한다.
  • 로컬: Windows, Node24.16.0, Docker29.7.2. 실제 앱 + 격리 Supabase/Auth/RLS/RPC/Edge + 독립 DB 재조회로 검증한다. 개발용 UI fixture 결과는 표현/상태 연결 증거이며 실제 서버 저장 증거가 아니다.
  • 착수 시 staging: 미준비. 당시 HQ 확인 시 staging d9609c95aca52cb3a822b28b9e9a37d8c46ee210, 최근 확인된 배포 2b8410f4f306c4c00bf5d355a05aed28216e41b7/run34553776192는 v0.17.10이고 v0.18.0 후보가 아니다. 정확한 release 후보→기존 staging Full/배포/smoke는 릴리스 담당과 조율한다. R05 완료를 새 선행으로 요구하지 않는다.
  • iOS/Android 실제 native 및 외부 제공자 인증 완료는 증거가 없으면 미검증이다. 브라우저 viewport/이벤트 주입을 native IME·키보드 증거로 대체하지 않는다.

기능·상태별 기존 검사 연결

표의 CASE는 앱 error-cases/CASE-*/regression.spec.mjs이며 현재 후보 실행 결과는 아직 미검증이다. 목적별 기존 요구 단언과 정리 증거를 재사용한다. 실제 수집·검사 결과에 따라 실행 가능 목록을 확정한다.

G05 기능상태·행동기존 CASE / 검사독립 판정과 제한
인증·온보딩빈 계정, 동의/신체 입력, 인증 실패/복귀009,012–014,043,049인증 세션·본인 프로필 DB·재진입; 실제 제공자 동의 미검증
계정 연결·삭제연결 실패 후 원 계정 보존, 본인 삭제017,051본인/다른 owner 경계; 관리자 삭제007 제외
운동·카탈로그입력, 0/빈값/복합/보조/덤벨, 저장/수정/삭제001,002,004,005,021–024,028,030–033,037,038,054원 요청·응답·DB 원본·ID·재조회; IME 검색054
계획작성·부분완료·운동 시작·보존011,016,025,034계획/완료 세션 연결, 저장응답과 재조회
달력·PR·볼륨loading/empty/pending/confirmed, 늦은 응답·오류004–006,008,047; viewport report-design-detail선택한 날짜/기간, 독립 fixture 기대값과 확정 데이터
프로필·신체·InBody편집 실패/재시도·pending 중 입력 보존009,050; viewport profile-design-settings; I01 fixture/기존 InBody 단위신체 값/프로필 DB 재조회; InBody 실제 UI 인입 누락 여부 별도 대조
소셜좋아요 롤백, 댓글 초안·재시도, 알림052; viewport group-design-notifications실제 관계/댓글/읽음 저장과 재진입
그룹생성/초대/권한·그룹 운동 기원019,020,026,027,035,053; viewport group-design-notificationsowner/멤버 관계·기원 ID·응답·DB
내보내기·복구실패 다운로드 없음, 원본 재시도·명시 복구046,057,058; U02/U03 복구 fixture, U05 8개원문/ID/hash·IDB/outbox와 사용자 명시 동작
오프라인·경합·구형 탭stale/error/pending→confirmed, owner 전환015,029,036,039–045,048주입 실제 발생·중복 저장0·늦은 ACK/다른 owner 침범0; R02 소유 구형 artifact 판정과 구분
관리자·Wodup/Motra 관리자 인입#1478 자동검사 제외007,018,055,056 및 관련 단위/DB 수동 영역목록에서 삭제하지 않고 제외·과거 근거·미검증으로 표시; 통과 수에 넣지 않음

표현·접근성·플랫폼

요구재사용할 현재 검사통합 보완 / 제한
IME 조합·229·Enter 중복 입력U01 input, U02 실제 편집 binding, CASE054이벤트 주입과 OS IME를 구분
키보드·focus·dialog·backU01 Tab/IME Escape/opener 복귀, U02 overlay/back, U03 축소창 탐색최종 앱 경로의 목록→상세→복귀 대조
폭·긴 텍스트·확대기존 viewport22, U03 실제 Chrome 200% zoom·긴 내용CSS zoom과 브라우저 zoom을 구분
긴 목록 identity·scroll/focusU04 viewport/restoration/identityfixture의 dialog 왕복을 앱 상세 경로 통과로 대체하지 않음
stylesheet 순서·fontU07 실제 root와 기존 U02/U03 fixture, U05 고정 font 선언실제 앱 font HTTP200/loaded·후속 화면 진입 대조
native keyboard/safe area·복귀N01 계약·기존 자동 환경 재고native 환경 없으면 미검증, 웹 safe0/34는 웹 증거
시각 검토스크린샷/기하/가림·잘림·타이포 관측담당·후보·화면·근거·판정을 별도 기록
기능 검토원 요청·응답·DB/재조회·금지 부작용·정리시각 일치로 기능 합격을 대체하지 않음

실행 전 확인된 문제

  1. 기준 후보의 공통 error-cases/support/fixture.mjs:77이 선언/import 없는 R을 export했다. R02가 담당한 00c05dcb/de49b8cb의 실제 artifact helper·공통 fixture·활성 CASE domain 전환을 U06 checkout에 소비했다(280f8794/4ba951c6). release 반영과 구분한다.
  2. 기준 후보의 playwright.config.mjs/e2e/support/errorCaseDiscovery.mjs에는 #1478 automaticExclusion 처리가 없었다. Node는 대부분 이미 개별 분리돼 있었고, browser·SQL 누락분을 원본 PR1500과 대조해 9f7fa381에서 반영했다. 제외 정책 보존 후 npm run check를 실행했다.

문제1·2는 현재 실행 준비의 관측 사실이다. 제품 UI 결함 또는 전체 품질 실패로 확대하지 않는다. 기존 단언·시간60초/대기10초·재시도0·#1478 범위를 보존한다. 품질 기준15개의 실행 결과와 품질 적합성은 별도 판정한다.

결과 기록

Phase1에서 기존 표현 검사 실행 가능성을 확인했다. 앱 수정 없이 기준 849191b5에서 아래 명령을 실행했다. 각 runner는 종료0이며 자체 webServer를 정리했다.

검사최초 결과시간원본
node --import tsx node_modules/@playwright/test/cli.js test --config tests/browser/u01/playwright.config.mjs --reporter=json16통과/0실패/0제외/0flaky20.252초U01 JSON
node --import tsx node_modules/@playwright/test/cli.js test --config tests/browser/u04/playwright.config.mjs --reporter=json21통과/0실패/0제외/0flaky40.383초U04 JSON

두 검사는 UI fixture 범위다. 실서버 사용자 여정·실제 staging·별도 시각 검토·native는 아직 미실행이다. 문서 npm run check는 법률4버전/348routes 통과했다. 앱 코드 변경이 없는 Phase1에 빈 앱 커밋/PR을 만들거나 #1478 비반영 후보의 무필터 전체 단위를 실행하지 않았다.

이후 각 실행의 후보 SHA·명령·환경·최초 실패·수리/재검증·정리·증거 위치를 기록한다. U05의 mobile DOM317>294, N01의 과거 browser/viewport 실패, R02 실제 배포 번들 미확보를 합격으로 바꾸지 않는다.

Phase2 실행 준비 수리

#1478 원본 PR1500(ee2a187b, v0.17.9 merge e3aa245b)을 현재 후보와 대조했다. Node 전용21개·혼합10개 제외는 리팩터링 과정에 대부분 개별 반영돼 있었다. 동일 조치를 재적용하거나 폐기된 테스트/API를 부활시키지 않았다.

  • 빠진 browser discovery/config·CASE007/018/055 exclusion·required inventory를 반영했다. 자동53 + viewport22 = 75, 제외4와 별도 provider/native 증거는 분리한다. 일반 사용자 본인 삭제017·온보딩009 및 Auth Admin fixture는 유지한다.
  • SQL 전용20개는 현재 내용 그대로 optional-tests로 이동했다. 혼합4개는 일반 사용자 단언을 유지하고 제외 영역을 분리했다. 선택 검사에는 현재 release의 원본을 보존해 이전 patch의 퇴역 함수 검사를 되살리지 않았다.
  • 이후 추가된 Wodup 전용 DB 임대 경합 검사는 .optional.mjs로 이동해 같은 제외 정책을 유지했다. 일반 데이터의 source/provider 값은 제외 사유로 취급하지 않는다.
  • discovery 단위7/7, CASE 등록59패키지, manifest 게이트 통과. 제품 코드·기존 시간 제한·재시도는 바꾸지 않았다.

HQ/R02에서 인계받은 controller fixture 준비 실패는 첫 React render의 feedResource.store 접근에서 재현됐다. useRemoteDataController의 필수 owner-scoped feed 주입이 세 fixture에 빠져 있었다. authResume·receiptResourceConvergence·prExerciseStaleData를 실제 앱과 같은 resource 조립/정리에 연결하고 빈 피드 응답도 현재 계약으로 맞췄다.

첫 재검증17개 중16개가 통과했고, authResume 한 개는 은퇴한 gymData.VOLUME_OVERVIEW를 기다렸다. 현재 화면의 controller.volumeOverview와 freshness/기준일 응답으로 연결한 뒤 authResume4/4가 통과했다. 나머지13개 성공은 관련 파일/실행 입력이 유지됐다. 최종 합계17/17이며 최초 실패와 후속 성공은 구분한다. 이는 API 응답을 제어하는 실제 React/resource 검사로, 실서버 증거가 아니다.

로컬 --only viewport는 실제 앱+격리 Supabase로22개를 실행 중이다. 전체 CI가 아니며 작업 트리의 제품 소스는 기준 849191b5와 동일하다. staging·native·외부 제공자 완료는 아직 미검증이다.

최초 화면 검사와 준비 precheck

  • 최초 viewport 실행 local-1789103081225-106288: 22중20통과/1실패/1미실행(90.91%). D1은 옛 CSS zoom0.7527을 기대했으나 U03이 변수를 폐기해 빈 값을0으로 변환했다. D3은 serial 후속 미실행이다. 실제 화면0배율이라는 뜻이 아니다.
  • 5970a1a56a04a4566a0549981e3f9cdf47e10262에서 현재 U03 배율1·창 폭·가로 넘침0으로 연결한 D1/D3는 2/2 통과, retry0·skip0·자기 stack 정리0종료다. 앞20개의 성공과 후속2개의 성공은 서로 다른 실행이며 한 번의22/22로 합치지 않는다.
  • 기능 검토: 기존 Playwright/API/DB oracle, 실행 담당 Codex. 시각 검토: 같은 담당 Codex가 별도 역할로 1280×720 실제 앱 캡처를 확인했다. 메뉴 글자·연간 활동·볼륨 카드·피드 카드에 보이는 범위의 겹침/가로 잘림은 없었다. 화면 아래 내용은 문서 스크롤 영역이며 전체 접근성·독립 검토자 합격·native로 확대하지 않는다.
  • 준비 precheck, 후보5970a1a5/base849191b5: static 통과, Node3618통과/0실패/90조건부skip, migration reset·schema snapshot·pgTAP123파일2498단언·동시 저장/영수증·범위/세대·순차/기간·worker 임대 검사 통과. 마지막 기존 큰 이력/동시CRUD probe 실패로 precheck 전체 실패다.
  • probe 실패 원본: delete_session_v5_engineuser_exercise_set_observations cascade delete와 계산 작업 사이 transaction ShareLock 교착. 최초 compute25,610ms/publish4,311ms는 관측값일 뿐 원인 설명이 아니다. 후속SIGTERM은 정리 시 미완료 worker의 종료다. isolated DB cleanedUp=true; 정책 제외 변경은 제품SQL을 바꾸지 않았다. HQ에 기존 stats 담당 확인과 최소 수리 조율을 요청했고 원인을 추가 추정하지 않았다.
  • 실제 v0.17.1 배포 artifact93파일 identity/hash 확인. 원본 R02 소유 바이트를 읽기만 하며 원격 배포·API 실행 없이 CASE039/040에 재사용한다.
  • 로컬 native 재고: PATH와 기본 Android SDK 경로에 adb가 없다. 실제 native 실행은 미검증으로 유지한다.

최초 사용자 여정53과 후속 선택 재검증

local-1789103770641-121848/후보5970a1a5의 최초53 결과는 **32성공·21실패·skip0·미실행0·flaky0, 성공률60.38%**다. 부분 browser 실행이며 14:32:19 KST에 종료·정리했다. 실패 전수 관측·담당·후속 실행은 이슈 리포트로 연결한다.

  • R02의 실제 저장값 비교 수리413cdea3을 로컬012d38d1로 소비했다. 같은 시각 선택기 초기화를 사용자 수정으로 오인해 추가 operation을 만들던 경로다. 해당 담당의7/7과 U06 자체 후보 재검증은 구분한다.
  • U06 입력/표시 검사 보완b0d94c0c: IDB 유효 reps의숫자 계약, U02 기기보관 표시, 완료종목 재편집확정, 가상목록 종목검색, 전환 후 그룹화면 안 알림버튼을 검증한다. 원본·개정번호·오류·정리 단언은 유지한다.
  • CASE010/공용 fault관측6fe4838e: 실제 첫 FeedScreen 해시주소 하나의GET404·attempt1만 연결하고, exact feature-loading React오류1건의 본인owner/접수/DB 저장을 필수 관측한다. 일반 빈operation_name이나 다른 render오류를 허용하지 않는다. 현재 U05 사용자 재열기 정책을 검사하며 공용 fault 회귀20/20이 통과했다. 실제 여정 결과는 아직 대기다.
  • CASE002 duration_label은 user-fact-columns.json상 projection 등급이며 start_time/end_time 원본과 구분한다. 최초 값빈문자→45분은 관측됐고 향후 정확한 독립계산값·나머지원본동일 비교로 검사할 예정이다. 제품 결함으로 확정하지 않았다.
  • R04 비교시간창14:35–14:40 동안 heavy실행을 비웠다. 14:44 이후 후보6fe4838e에서 최초실패21선택과 추가InBody 검증만 실행 중이다. 알려진 실패 해소 전 새Full/원격CI를 실행하지 않는다.

#1478 범위 정정: 준비precheck에는 D09에서 나중에 추가한 와드업 전용 wodup_import_durable_worker45단언·wodup_import_stale_classification18단언이 포함된 사실을 뒤늦게 확인했다. 따라서 전체2498 pgTAP성공 중63은 요청범위의 유효검증수에서 분리한다. 제외가 완전히 보존됐다는 앞선 표현은 이2파일에 대해 정정한다. R02가 두파일을 optional로 이동하며 인계 후에만 다음DB precheck를 실행한다.

추가InBody 검사는 기존I01 CSV/manifest 기대값을 사용해 실제UI→RPC→측정값·batch DB→원본storage byte/hash→reload→중복쓰기0→정리를 확인한다. 첫 기동은 scratch명령의tsx loader 누락으로 검사0개에서 실패했고 표준 --import tsx로 고친 뒤 재기동했다. 제품수리 또는 실제검사실패로 섞지 않는다.

InBody와 신규 경로 확인

  • 후보6fe4838e의 InBody 실제여정1/1 통과·skip0·flaky0, 28.874초다. 별도 u06-inbody-1789105508854 실행이며 원본storage 삭제·본인 삭제·측정값/batch 잔여0·fixture clock복원·sandbox정리0종료를 확인했다. 기존53/22 필수집계에 추가건을 섞지 않는다.
  • G05 신규분류 차이: 기존2861분류의 area/layer 변경0, 새로 소비된29경로 연결 후2890분류. optionalSQL는 원래 영역을 유지하며 자동제외를 검증완료로 바꾸지 않는다. 인계된 추가2SQL의 이동 뒤에도 strict 미분류/미등록/유령진입점/누락행/미배정/미확인0이다. 분류커밋124b1e10efb5caa675378da7519e42510cbd7636.
  • R02의 추가 와드업 제외02f8c7a7을 e48add92로 소비했다. 실제 파일내용 변경0. 후속DB precheck는 두파일을 자동선택하지 않는다.
  • 실행도구 기록:21선택 scratch runner가 previewPortFor의 두번째인자를 browser여부로 잘못 사용해4173을 선택했다. 큐환경설정·Full실행·기존타인서버조작은 없었다. 해당실행은 종료·정리 후 다음선택부터false/워크트리별포트로 수정하며 이 실행을 올바른포트선택의 증거로 보고하지 않는다. InBody는 별도워크트리포트였다.

21개 선택 재검증 결과

후보6fe4838e/run u06-browser-recheck-1789105498303선택21 결과는18성공·3실패·skip0·미실행0·flaky0(85.71%)이며6.2분, sandbox정리0종료다. 최초53을 다시 돌린 결과로 바꾸지 않는다.

  • R02 수리 후011/029/032/033/034/036/041/043/044/045/047/048/058은 원래값·원문·revision·오류 게이트로 통과했다. 특히032 삭제후 잘못 뜨던 복원안내와034 추가세트도 현재 실행에서 사라졌다.
  • 001/015/030/053 검사 보완은 원래 요구 단언까지 통과했다.
  • 035는 본문과actor정리가 이번에 통과했다. 최초Auth Admin DB오류 상세가 남지 않아 최초원인은 미확인·현재 미재현으로 기록하며 근본수리 완료로 세지 않는다.
  • 남은002는 파생45분의 독립비교,010은문단 innerText 비교,028은이미확정된종목의중복완료클릭을74179199에서 보완했다. 동일한저장내용·횟수·정리 단언을 유지하고 해당3개를 재검증중이다.
  • 추적단위는 browser21실패,viewport1실패,precheck probe1실패의3묶음/23실패다. 현재 원인·수리·관련재검증을 갖춘 완료는 **묶음1/3(viewport), 케이스18/23(browser17+viewport1)**이다. 최초035의 원인미확인을 단순재실행성공으로 상쇄하지 않는다. 선택21의 실행성공18과 수리완료17은 서로 다른 수치다.

후속검사와 최종후보 대조 경계

74179199의 3선택은002성공,010/028실패였다. 010은실제재열기·피드재진입성공후아래표면/경고가필수오류관측에빠졌고,028은저장했던운동의두번째종료에는확인창이없는데기다렸다. 후속3db3bd9e에서028은revision2·세트3·재진입·오류0·정리까지통과했다.010의보류navigation중locator가새문서완료를기다리던검사는old document의DOM관측을Node에전달해busy문구/disabled를확인한후navigation을해제하도록바꾸었다.최종 dbb17980의 CASE010 선택 검사는 1/1 통과, 실패·skip·flaky0, 33.553초였으며 sandbox 정리도 종료0이다. 앞선 2선택의 실패와 CASE028 성공은 별도 기록한다.

010필수관측은실제404청크주소하나,동일요청의HTTP404뒤ChromiumERR_ABORTED종료,브라우저resource_load_failure경고1건→feature-loading React오류1건의순서,원owner의접수/DB행,초기복구안내→busy안내2회다.모든다른주소·오류·횟수·owner는실패한다.앱reporter가원청크주소를event본문에싣지는않으므로DOMresource error주소와network404/import error의독립관측으로연결한다.

3db3bd9e에서 필수check는static성공,Node3713전체·3623성공·실패0·90skip,136.313초·종료0이다.앞서2개실패는CASE015retired표시정적단언과CASE010프로필발견목록이었으며관련27검사와전체check로수리검증했다.새로추가된단위실패2개까지포함한현재추적은4묶음25실패,수리·관련검증완료2/4묶음·22/25케이스다.이는초기browser선택의21개집계와구분한다.

HQ조율에따라최종53전수/Full은R04수리와R02최종변경을포함한실제release/staging후보에서판정한다.후보가바뀔예정인현재는새전수를추가하지않고초기32성공과후속선택성공을동일후보53통과로합치지않는다.UI/접근성검증은별도계층으로진행하며staging/native·035최초원인미확인·precheck교착해소를그결과로대체하지않는다.

Phase 2 로컬 판정과 Phase 3 착수

최초 브라우저 실패21개는 후속 선택 검사에서 모두 통과했다. CASE035 최초 정리 오류의 원인은 미확인이고, precheck 통계 교착은 R04 담당 수리 대기다. 따라서 원인·수리·관련 검증 완료 집계는 4묶음25케이스 중 2/4묶음·23/25케이스다. 후속 실행 통과와 근본 수리 완료를 구분한다. CASE010은 실제 저장 전 입력 초안을 새로 만들지 않으므로 그 검사만으로 초안 flush 내용을 검증했다고 주장하지 않는다. 해당 보존 동작은 U05의 별도 UI fixture로 대조한다.

Phase 3은 후보 dbb179801ff02240aebd86f56b3a3ea77f52d102의 U02/U03/U07/U05 fixture를 사용한다. 키보드·초점·실제 Chrome200% 확대·CSS 순서·기기 입력 보존을 검증하며 실제 서버 및 native와 구분한다. Phase 1의 U01/U04 결과는 관련 소스가 유지되는 범위에서 재사용한다. 최종 후보53과 staging은 HQ와 조율한 별도 통합 판정으로 남아 있다. 착수 보고.

Phase 3 표현·접근성 검증 결과

실행 담당은 Codex U06이다. 아래 검사는 실제 React 화면·binding에 결정적 fixture를 연결하며, 실제 API 저장이나 native OS 입력을 검증한 결과로 바꾸지 않는다. 재시도는 모두0이다.

실행후보 / 결과확인한 범위
U02dbb17980, 22/22 통과, 33.843초320/390/430폭, IME 이벤트·raw/0·복합입력, 계획·복구·늦은 ACK, overlay 취소·focus·back
U05dbb17980, 8/8 통과, 6.205초네트워크/404→명시 재열기, 원문·operation ID·outbox 보존, IDB 실패·보존 중 입력/이동 시 문서 유지
U07 최초dbb17980, 10/10 통과, 18.396초960/1440 직접/후속 진입, CSS 순서 반전·회전, 반대 플랫폼 CSS, 원문·scroll 소유·font loaded/swap
U03 최초dbb17980, 29중25 통과·4 시작 실패, 23.985초desktop 편집·취소·지연 응답·키보드 등25개 통과. 확대4개는 Chromium spawn UNKNOWN으로 화면 실행 전 실패
U03 확대 재검증dbb17980, 4/4 통과, 28.859초기존 U03 작업 경로의 동일 Chromium151.0.7922.34 사용. 공유 설치는 수정하지 않음
전체 영역 캡처 보완0a8d6ead, 4/4 통과, 15.053초확대 후 Playwright CSS clip으로 잘리던 캡처를 실제 물리 viewport CDP 캡처로 교체
범례 수리 후 확대ec4e13c5, 4/4 통과, 22.327초기존 확대·입력·키보드에 범례 텍스트의 셀/카드 가로·세로 경계 검사 추가
범례 수리 후 U07ec4e13c5, 10/10 통과, 26.973초변경한 volume CSS를 포함한 전체 순서·플랫폼 격리 검사

실제 관측한 범례 겹침과 최소 수리

실제 Chrome200%에서 CSS viewport1269×671, DPR2, 문서 너비1269, CSS zoom1이었다. 기존 문서 전체 가로 넘침 검사는 통과했지만, E1의 고정4열 안에서 줄바꿈하지 않는 범례가 인접 셀을 침범했다. 재현 검사는 “85% 이상” 텍스트 오른쪽710.195px가 허용682.75px를 넘는 것을 검출했다(약27.45px).

ec4e13c5는 volume.css의 범례만 내용 폭에 따라 다음 줄로 배치하고, 82px 고정 높이 대신 최소 높이를 사용한다. 개별 범례 라벨·수치도 필요한 곳에서 줄을 바꾼다. 데이터 계산·문구·색·다른 화면 정책은 변경하지 않았다. 글자를 숨기거나 축소해 통과시키는 대안은 읽을 수 있어야 한다는 요구를 충족하지 않아 채택하지 않았다. 새 검사에서는 모든 범례의 실제 텍스트 사각형이 셀 안에 있고, 셀과 분포 블록이 카드 안에 있음을 확인한다.

실행 이력도 보존한다. 첫 재현 시도는 30초 timeout으로 단언까지 도달하지 못했다. 같은 시각 check가 실행 중이었지만 경합을 원인으로 확정하지 않는다. check 종료 후 같은 설정으로 실제 경계 실패를 얻었고, 첫 수리 선택1/1, 최종 확대4/4와 U07 10/10이 통과했다. 최초 Chromium 경로의 spawn 원인과 이 timeout의 상세 원인은 미확인이며, 이후 유효 실행 환경과 수리 검증 증거를 구분한다.

역할별 검토

  • 기능 검토 — Codex U06: 위 자동 검사와 Phase2 실제 요청·응답·DB 재조회·정리 결과를 판정했다. U01 16/16·U04 21/21은 관련 소스와 fixture 변경이 없는 범위에서 재사용한다. 화면 데이터 fixture가 보여주는0/empty와 실제 DB 저장 성공은 서로 다른 증거다.
  • 시각 검토 — 같은 Codex U06의 별도 검토 역할: 확대 편집기의 마지막 입력125·초점 테두리·수정 완료 버튼, PR의 긴 제목·키보드 접근 가능한 표 스크롤, 볼륨 범례의 줄바꿈·셀 간 분리·카드 내 배치를 확인했다. 실측 사각형확대 수치를 함께 남긴다. 같은 담당자의 두 역할이며 독립된 사람 두 명의 합격으로 표현하지 않는다. 비활성0 범례의 기존 옅은 색, 화면 아래 정상 스크롤, PR 표 내부 가로 스크롤을 숨기지 않는다.
  • 제한: 웹에서 주입한 IME·safe-area 값은 native 키보드 검증이 아니다. 사용 가능한 adb 환경이 없어 실제 native는 미검증이다. U07의 font loaded/swap은 해당 fixture의 후속 CSS 로딩 증거이며 staging font HTTP응답 증거는 아직 없다. Firefox/WebKit·스크린리더 음성 합격으로 확대하지 않는다.

다음 통합 기준

R04 646f71d65d3208bf52e3349b39816150522789e7과 R03 9b3696ccc7e480abc61da37132df5c8dc5a593dd를 로컬 bd8eb1c2/226cf1d7로 소비했다. 공통 statsOrchestration 파일에서 양쪽 변경이 모두 자동 병합됐으며 실제 DB precheck 결과는 아직 대기다. 생산자 R04의660세션·교착 회귀 성공을 U06 자체 성공이나 장기 성능 전체 합격으로 바꾸지 않는다.

2026-09-11 #1573의 사용자 결정에 따라 먼저 v0.17.11 staging 배포 완료 SHA를 확보하고, v0.18.0과 동기화한 최종 통합 후보에서 승인된 staging Full1회를 실행하도록 HQ와 조율한다. 후속 사용자 결정으로 #1572 표시·제목 정렬 수정도 staging에 합류하므로 첫 e6d5ef84 배포는 중간 후보이며 최종 기준으로 확정하지 않는다. 최신 인계. 다른 담당자의 staging 후보·PR·큐는 조작하지 않는다. R05를 선행으로 추가하지 않는다. Phase4 staging 핵심 흐름·정확한 후보 판정과 release 반영은 아직 미완료다.

R04 소비 직후 check는 deployment manifest의 최신 마이그레이션 값20260914213000과 실제 추가 파일 꼬리20260914233000의 불일치로 정적 단계에서 중단됐다. Node/DB 실행 성공으로 세지 않는다. 03dcf548979a195751b4a9c2be908be2443ae361에서 기존 manifest 값 한 줄을 실제 꼬리에 맞춰 정적 검사 통과 후 check를 다시 실행한다. 마이그레이션 번호·내용·환경 DB를 변경한 조치가 아니다.

최종 Phase3 npm run check는 후보03dcf548에서 static 통과, 전체3719/성공3623/실패0/조건부skip96, 142.560초·종료0이다. 추가된 DB 회귀의 조건부skip은 실제 DB 통과로 세지 않는다. 문서 check는 법률4버전/348routes 통과, G05 strict도 미분류·미등록·미배정·미확인0이다. Phase3 완료와 precheck 착수. 로컬 표현 검증 완료와 Phase4 staging/최종 후보 판정은 구분한다.

R04 통합 precheck — 기존 교착 해소, D04 후속 검사 실패

고정 후보03dcf548 결과, run local-1789108724744-126208/base849191b5, 2026-09-11 15:49:03 KST 종료·10분19초다. static/reset/schema, Node3623성공·0실패·96조건부skip, pgTAP121파일2435단언 성공, DB Node75개 중74성공·1실패다. precheck 전체는 실패다. 새 후보의 Full 또는53전수 결과가 아니다.

원래660세션/7920세트 교착 probe는 이번에는 생성72ms/수정48ms/삭제21ms, 모든 발행completed, checkpoint1976행·발행 전 비공개·세대일치·취소 후attempt/backoff/lease보존, ok/cleanedUp=true였다. 자기 DB container 종료도 확인했다. 이전 교착은 수리 후 U06 자체 검증이 됐으나 장기 성능 전체 합격을 뜻하지 않는다.

새 실패는 statsRefreshScopeConcurrency 두번째 CASE의 completed_count 기대0/실제1이다. 계산 쓰기를 멈추려던 public observation SHARE 잠금이 R04 private 계산에서도 의도한 시점을 잡는지부터 R04 담당이 확인한다. 제품/fixture 원인은 아직 미확정이고 40001·applied·dirty·후속 범위 흡수 단언을 완화하지 않는다. HQ가 단일 담당에게 배정했으며 중복 수리는 하지 않는다. 원래 Phase2 실패의 해결 집계는 g/G3/4·f/F24/25, 이 새 실패 묶음을 포함한 API/DB 집계는 g/G3/5·f/F24/26이다. 최초035 원인 미확인은 유지한다. 실행별 수치와 인계 보고.

고정 후보 실행 종료 후 R03 merge607647ef가 포함된 최신 release를 자기 브랜치에 병합해342ca96e가 됐다. 위 성공을 새후보 전체 성공으로 재사용하지 않는다. R04 후속 인계 뒤 관련4CASE부터 확인한다.

최종 v0.17.11 staging은044a55f861bc82eeb65fc9205e4e02630508d513/tree d32782bd4a4951fbabab1743433b17669649c98c이며 #1572가 포함됐다. Deploy34571031332 attempt1·기본CRUD12/12 성공 인계를 받았다. release/v0.17.11 ref만 합치면 #1572가 빠지므로 실제 staging을 통합 기준으로 사용한다. 아직 v0.18 staging은 아니다. 기존 외부 배포용15CASE(001/002/004/005/006/008/010/011/012/013/014/015/016/029/039)를 실제 최종배포 URL/API와 검증 계정으로 실행하는 Phase4 계획을 HQ/R05에 전달했다. E2E_EVIDENCE=off로 계정 토큰이 포함되는 trace/video/screenshot 저장을 끄며, 실제 화면 검사를 기본CRUD smoke로 대체하지 않는다.

D04/D11 후속 원인과 자체 재검증

R04는 기존 D04 대기가 public observation의 ShareUpdateExclusiveLock이며 원본판 캡처 전 private표 준비에서 발생함을 측정했다. ba1914d47946cb0ebdf5142af661be296012f14c는 원본 캡처 후 관측 함수 입구의 owner별 advisory 잠금으로 정확한 단계 도달을 확인하고, 주입한 함수 정의가 남지 않도록 원래 정의 복원을 검사한다. D11의 별도 실패도 경쟁publisher가 run행을 먼저 잡아idle을 반환하는 기전으로 재현했다. fixture가 단언까지 해당행을 유지하고 경쟁publisher의idle 확인 후 원래failed/40001→재계산→completed 단언을 수행한다. 최초 실패의 실제 경쟁PID는 미확인으로 구분한다.

정확히2개 테스트 파일만 로컬0d207d4367676481353164295ac8c505a56a060c로 소비했다. fresh migration reset 후 U06 자체 두 파일 전체는21/21 통과·실패0·skip0·20.404초, sandbox 정리 종료0이다. 제품 prototype·추가 예산·retry/skip 변경은 없다. 원래 및 후속 API/DB 실패 추적은 g/G4/5·f/F25/26이며 최초035 원인 미확인은 유지한다. 수리 검증과 최종 precheck 재개.

문서 후보bef95c8의 build는26.19초, docs artifact31파일 검사까지 종료0이었다. 큰 chunk 경고는 남아 있으며 기능 실패로 확대하지 않는다. 이후 추가 결과 문서는 최종 게시 후보에서 다시 검증한다.

최종 DB 사전검증 통과와 R02 release 통합

최종 DB 포함 precheck는 후보0d207d4367676481353164295ac8c505a56a060c/base607647efb894404e583df910153b2c0dae0e656e, run local-1789110146801-117784, 2026-09-11 16:12:30 KST 종료·604.704초다. static, Node3624성공·0실패·98조건부skip, pgTAP121파일2435단언, DB회귀75개 전부와 660세션/7920세트 수렴이 통과했다. 생성81ms/수정46ms/삭제35ms, 각 영수증1개·checkpoint1976행·발행 전 비공개·세대 일치·취소57014/attempt1/backoff 유지/lease회전·정리 성공이다. 공유 환경 단회 시간이며 성능 개선율이나 장기 성능 전체 합격으로 확대하지 않는다. 앞선 실패 이력은 삭제하지 않는다.

실행 종료 뒤 R02 PR1577이 release/v0.18.0의4fe99af0aa1df7882cb6007129933bba65ef4875에 반영됐다. R02가 같은 공유 R04 제품/fixture/manifest 수리를 포함했으므로 U06은 최신 release를 병합해4042c50efa0fd027934ba4fda6207ebc749ef0a7을 만들었다. 충돌은 CASE010의 현재 명시적 재열기 검사를 보존하고 G05의 oldServerUndo 분류를 포함해 해결했다. 최종 자기 diff는20파일이며 DB/공유 제품 변경은 base에 포함되어 빠졌다. 이 최종 후보는 최신 base 기준 필수 precheck를 별도로 실행한다. 위 고정 후보 성공을 새 후보 전체 성공으로 바꾸지 않는다.

코드 release 반영 완료 · 실제 staging Phase4 대기

최신 release 기준 precheck는4042c50e/base4fe99af0, run local-1789111029167-91928,140.633초 PASS다. static/unused/build/artifact와 단위3624성공·0실패·100조건부skip이며 자기diff에 서버변경이 없어 DB단계는 대상이 아니다. 직전 전체DB 성공 증거와 구분한다.

PR1578Merge Check34573932896 성공 후2026-09-11 16:21:30KST에 release/v0.18.0의d63926b10ddead8db71a5be0458afdb72b7789dd로 병합됐다. 실제HEAD 조상 포함과 tree8d5e38255ee0ffc5eb444b1ceaedc2fa9adeea1d를 확인했다. 일반 Merge Check이며 기존 ci:wait 출력의 “전체 검증” 문구를 Full 성공 근거로 사용하지 않는다. BUG125 범례 수리를 같은 턴에 작성했다.

R05와 코드release→실제v0.18 staging 배포→U0615CASE→R05최종마감 순서를 확인했다. 실제 배포가 아직 없어 Phase4는 대기 중이며 R05 마감을 새 선행으로 요구하지 않는다. 최종배포 SHA/URL/API와 승인된 계정의 로컬 주입경로만 인계받고 비밀값은 문서·로그에 남기지 않는다. 최종 precheck와 Merge Check 시작 보고.