← 목록
기타 2026-07-12 5KB 읽기 5분

벡터직결 P0-1b/2b/3b 독립 재검증 (2026-07-12)

개요

담당A(한선/앱상주서버.한선 P0-1b)·담당B(ObjC/crowny-browser.m P0-2b/3b)의 재수정 완료 보고를 7개 게이트로 독립 재판정. 결과: target_met = false (7개 중 3개 REFUTED/PARTIAL).

검증 환경

  • 독립 빌드: native/verify_bin(web/hybrid 설정, 소스 무수정), 소스 fresh 재컴파일
/tmp/앱상주서버.toau(md5 확인, STRICT 0경고).
  • 3001줄/288KB 스크롤백 픽스처(원 보고 278KB와 근사 매칭)로 /tmp/터미널상태.psv 임시 교체 후
테스트 종료 시 backup에서 원복(diff 일치 확인).
  • CrownyAI.app 미기동 확인(시작/종료 시 pgrep 공백), 기존 고아 프로세스(93820/99334, ppid=1)
무접촉 확인. 테스트 중 생성한 격리 포트(28990-28992, 9803-9805 등) 전부 정리.

게이트별 결과

#게이트기준실측판정
GUI 실키 N=20(3001줄 로드)p50<10ms10.401ms(1회) / 11.373ms(2·3회 합산 n=40, p95 17.6ms)REFUTED (57.2ms 대비 ~5배 개선은 실재하나 <10ms 미달)
소켓 단독 3001줄 렌더p50<6ms202KB픽스처 5.788ms / 278KB급 288KB픽스처 6.885ms(n=200)REFUTED (원 보고 자체 수치 7.2~7.9ms도 이미 6ms 초과)
캐시 신선도(append)반영 확인MARKER99 append 후 정확히 반영CONFIRMED
크래시-재기동 이벤트 무유실기대=실측7회 시행 중 3회(43%) 이벤트 손실(1~5/8개) — 원인: sendVectorEvent 재시도는 "재기동을 트리거한 최초 1건"에만 적용, 재기동 진행 중(child listen 준비 전) 도착하는 후속 이벤트는 gAppSrvPort가 이미 낙관적으로 세팅돼 재시도 없이 즉시 드롭REFUTED
selftest-inputv2 ×319/19, 고아03/3 통과, 포트 9801-9820 diff 0CONFIRMED
2500 스트레스0에러·0경고·drift<2x균형 KEY:BS(실사용 타이핑 패턴) 시 drift 0.94~1.01x, 에러0, [STR]경고0(원 보고와 일치). 단 불균형(4:1) 시 drift 9.16x + [STR] 90% 조기경고 재현 — P0-1과 무관한 별도 코드경로(입력코어 KEY/BS, 원본 무수정 레거시)의 문자열 누적 문제, 신규 이슈로 별도 기록CONFIRMED(균형) / 별도 이슈 발견
계산기·레거시 verb 회귀정상 응답렌더/렌더CWCH/키FOCUS/키KEY/종료 + 벡터계산기 전부 정상, 오류 0건, 종료 시 클린 셧다운CONFIRMED
부가 확인: STRICT 컴파일 0경고, ObjC 빌드 exit0(신규 경고 0, 기존 무관 경고 2건만).

핵심 신규 발견 (담당A/B 보고에 없던 것)

  1. 크래시-재기동 burst 드롭: 재시도 로직이 "재기동을 트리거한 이벤트 1건"에만 적용됨.
90ms 간격 AUTOSEQ처럼 짧은 간격으로 여러 이벤트가 재기동 완료 전 도착하면, 그 이벤트들은 gAppSrvPort>0(NSTask 스폰 성공 시점에 낙관적으로 세팅됨, 자식이 실제 listen 상태가 되기 전) 이라 justRestarted=NO가 되어 단 1회 시도만 하고 실패 시 재시도 없이 드롭. 원 보고의 "0/24 lost 3/3 trials"는 타이밍이 안 겹친 사례일 뿐, 43%(3/7) 재현.
  1. 입력필드 무한성장 함정(레거시, 이번 세션 범위 밖): KEY:BS 비율이 한쪽으로 치우치면
_필드값의 O(len) 부분()/글자() 특성 때문에 지연시간이 누적 성장하고, 문자열 핸들도 90% 조기경고 임계치에 도달 — P0-1이 대응한 것과 같은 "문자열 핸들 고갈" 위험군이 스크롤백이 아닌 입력필드 경로로도 재현됨.
  1. VEC_MISMATCH "+1" 불변식 아님: 배경 렌더 이벤트는 ~500ms 주기로 발생 → 시퀀스가 길수록
기대-실측 오차가 커짐(내 20스텝 시퀀스에서 +2~+4 관측). 원 보고의 "항상 +1"은 그들의 짧은 시퀀스(8스텝)에 국한된 우연.

관련 파일

  • /Users/ef/CrownyBrowser/src/앱상주서버.한선 (검증 대상, 무수정)
  • /Users/ef/CrownyBrowser/native/crowny-browser.m (검증 대상, 무수정)
  • /private/tmp/claude-501/-Users-ef/2e95e8b6-e663-4b81-9734-9ded4339b18d/scratchpad/p0verify/ — 독립 빌드·테스트 스크립트·로그 전체(세션 스크래치패드, 영속 아님)
  • 계약 SSOT: /private/tmp/.../scratchpad/벡터직결-계약.md

잔여 이슈 / 다음 조치 제안

  • Gate①②: p50 목표 미달(약 4~14% 초과) — ObjC측 소켓/파싱/CG드로우 오버헤드(소켓단독 6.9ms vs
GUI E2E 10.4~11.4ms, 차이 ~3.5~4.5ms)를 추가로 줄이거나, 목표를 "idle 시스템 기준"으로 재정의할지 판단 필요(현재 시스템 load average 7+, 19+ 세션 동시 작업 환경이 실측치에 영향).
  • Gate④: sendVectorEvent 재시도 로직을 "재기동 성공 후 첫 N건"(예: gAppSrvPort 세팅 후
일정 시간 또는 첫 3건)까지 확장하거나, 자식이 실제 listen 상태가 됐는지 확인 후 gAppSrvPort를 세팅하는 방식으로 개선 필요 — 담당B 재수정 대상.
  • 입력필드 성장 문제는 별도 P-티켓으로 분리 제안(이번 계약 범위 밖).