2026-06-13 크라우니앱+브라우저 — 라이브 복구 + 헤드리스 검증
개요
크라우니앱+브라우저 작업 계속(아키텍트 오푸스, 한선씨코딩 소넷, 글밥 하이쿠, 울트라 병행).
세션 시작 시 app.crowny.org가 503(백엔드 다운)이라 먼저 라이브 복구, 브라우저는 빌드 현행화 + 헤드리스 검증 배터리.
무엇을 했는지
1. app.crowny.org 3백엔드 라이브 복구 (503 → 200)
- app.crowny.org:9820 (server.js JS 포털, 132앱 디렉토리) — 다운 → 기동, 게이트웨이 8443 경유 200 확인
- 원크라우니API:9420 — keepalive once로 기동, /api/health 200
- 원크라우니웹:9421 — 기동, 200
- 게이트웨이 라우팅(gateway.yaml app.crowny.org 5엔트리)은 기존 설정됨 — 503 근인은 백엔드 다운이었음(라우팅 정상)
2. 크라우니브라우저 빌드 현행화 + 헤드리스 검증
native/Makefile make 전체 — 바이너리 현행(소스 무변경, 194816B arm64), 검증타깃 통과:
크롬렌더 cmd 파이프라인: 5/5 티 (cmd줄수>20·주소창 TEXT·버튼 글리프·탭 제목·순수/피드백+END)
한선씨웹엔진.한선 컴파일+실행: OK (7831 cubes, WebKit 없음 자가검증)
크롬 히트테스트(크롬히트테스트.한선): 13/13 티 — 좌표→액션이 .m hitTestActionAtX:y: 와 1:1관련 파일
/Users/ef/crowny-app/server.js (9820 포털), 원크라우니-keepalive.sh (9420/9421 supervisor)
/Users/ef/CrownyBrowser/native/ — crowny-browser.m, 브라우저크롬.한선, 크롬히트테스트.한선, Makefile
- 로그:
/tmp/crowny-app-9820.log, /tmp/onecrowny-once.log
잔여 이슈
- 브라우저 "윈도우/디스플레이 검증" — 헤드리스 부분 전부 GREEN, 실제 시각 창 표시는 디스플레이 필요(헤드리스 불가)
- 9820 포털은 JS(server.js) — 한선씨 이행 백로그 대상 (울트라 워크플로우 app-browser-backlog 진행중)
- keepalive는 9420/9421만 감시 — 9820은 별도 supervisor 없음(LaunchAgent 후속 검토)
울트라 백로그 (app-browser-backlog 워크플로우, 적대검증)
하이쿠 3스캔 → 소넷 종합.
직접 재검증으로 오탐 2건 적발:
- rank1 웹어셈블리 "128 = 버그" → 전면 오탐:
만약(a=b) 단일 =는 hanseonc_high에서 비교(==)로 정상. 컴파일 rc=0. (메모리 feedback_hanseon_eq_in_if_is_comparison 기록)
- rank2 JS엔진 "중괄호+5" → 부분 과장: 진짜 근인은 line1624 미정의함수 JS_window_crowny_resolve (괄호는 문자열 내 {} 오탐)
이번 세션 완료 (검증됨)
- ✅ rank2 JS엔진.한선 컴파일 복구 (소넷): JS_window_crowny_resolve 정의 추가 → rc=0 1.14MB
- ✅ rank3 canGoBack/Forward env 실시간 반영 (소넷): .m 692줄 (void)폐기 제거→env전달, 브라우저크롬.한선 env읽기. BACK=0/1 색전환 확인
- ✅ rank4 탭 개별 히트테스트→전환 (소넷): chromeSelectTabAtIndex→activateTabAtIndex 배선, 히트테스트 13→23/23
- ✅ 9820 포털 supervisor 추가 (keepalive check_js) — 오늘 503 근본해결
잔여 백로그 (다음 세션 핸드오프)
- rank5 주소창 한선씨 입력위젯 .m 배선 완성 (M, 소넷)
- rank7 크라우니시작페이지.한선 76줄 스켈톤→풀 레이아웃 (M, 소넷)
- rank9 API 헬스체크 한선씨화 checkPort/checkAllHealth (M, 소넷)
- rank10 dashboard HTML생성기 한선씨 분리 246줄 (L, 소넷)
- rank11 API JSON 생성 셀 모듈화 (S, 하이쿠)
- rank12 서비스카탈로그.한선 SSOT 완성 execSync 제거 (M, 하이쿠)
- rank6 미디어재생 DRM/EME 실구현 (L), rank8 IME 한글입력 (L) — 후순위
v2 통합 빌드 마일스톤 (재검증)
- JS엔진 복구 후 크라우니브라우저v2.한선 전체 34모듈 통합 컴파일 성공: rc=0, 27.3MB toau, 975,978 큐브.
- 이전엔 메인이 JS엔진을 import → JS엔진 rc=1이라 전체 빌드 차단 상태였음. 이번 수정이 v2 빌드 언블록.
- ⚠️ 경고(블로커 아님):
다운로드일시정지/재개/취소 3함수가 'main'과 '데이터관리.한선' 양쪽 정의 → 이름충돌(마지막정의 승리=조용한 오작동 위험, feedback_hanseon_import_name_conflict). 다음: 한쪽(데이터관리.한선이 정본일 가능성) 남기고 main 측 제거 검토.
- rank7 크라우니시작페이지.한선은 스켈톤 아님 — 76줄 작동 홈(크롬/URL바/히어로/3x3 CRNS그리드/상태바). 개선거리이지 블로커 아님(백로그 과장 정정).
2차 사이클 (continue)
✅ rank5 주소창 한선씨 입력위젯 배선 (소넷)
- 주소창입력위젯.한선 200~235줄 key 모드 진입점(CROWNY_ADDR_MODE=key, ADDR_VALUE/KEY env→키누적()→버퍼 stdout)
- crowny-browser.m: ensureAddrWidgetToau()/runAddrWidgetKey() 추가, accumulateKey 배선(CROWNY_ADDR_DELEGATE=1 시 한선씨 정본 경유, 기본 ObjC 미러+폴백), refreshChrome 편집중 한선씨 주소창렌더() cmd 오버레이(항상 한선씨 경유)
- 성능 절충: 매 키 NSTask 20~50ms → 기본 ObjC 미러, 렌더 의미론은 항상 한선씨. 빌드 EXIT 0, 자가검증 6/6 티 + key모드(crowny.org 누적/백스페이스) PASS
- 한글 IME(rank8)는 범위 밖 유지
✅ 다운로드 매니저 이름충돌 정본화 (오푸스)
- 근인: HTTP스택.한선(네트워크층, _다운로드목록, 한글상태)과 데이터관리.한선(공개 API, 다운로드맵, 영문상태, bool반환)이 다운로드시작/일시정지/재개/취소 4함수 동명 → 마지막 import(데이터관리) 승리, HTTP스택 내부는 조용히 엉뚱한 맵 작동(잠재버그)
- 호출처 분석: HTTP스택 참조는 전부 주석, 유일 실호출은 데이터관리:1877(자체) → 데이터관리가 공개 정본
- 수정: HTTP스택 4정의를 HTTP접두(HTTP다운로드시작/일시정지/재개/취소)로 개명 → 양쪽 공존, 충돌 0
- 검증: v2 통합 rc=0 27.3MB, 다운로드 충돌 25→0건(전체 이름충돌 25→24)
- 백업: HTTP스택.한선.bak-nameconflict-20260613
잔여(누적 핸드오프)
- 이름충돌 24건 잔존: stdlib 재정의(문자열.공백제거/줄분리/분리, 날짜.밀리초, 프로세스.프로세스종료 등) — 각 'main' 재정의가 의도적 shadow인지 stray 중복인지 개별 판정 필요(L, feedback_hanseon_import_name_conflict)
- rank7 시작페이지 개선, rank9~12 app 한선씨 이행
3차 사이클 (둘 다 자동진행)
✅ Track2 rank9 — app 헬스체크 한선씨화 (소넷)
- 신규
/Users/ef/crowny-app/헬스체크.한선(8.7KB): 포트살아있음(포트), 전체헬스(포트목록), 헬스JSON출력, 단위검증
- 타임아웃 보장: 소켓 직접(recv 무타임아웃 행위험) 대신 체계()+
curl --connect-timeout 1 --max-time 2 redirect→읽기(). "000"=offline. 게이트웨이헬스코어.한선 http코드() 패턴 재사용
- server.js 미수정(헌법: JS 동반본 작성). 독립검증: rc=0, 9820=Ti/1=Ta, JSON {online:1,offline:1,total:2}, 행 없음. 학습DB 2패턴 등록
Track1 이름충돌 — JS_window_crowny_resolve 회귀 잡음 (오푸스)
- 소넷A(JS엔진 복구)가 단독컴파일 시 미import라 JS_window_crowny_resolve를 로컬 스텁으로 추가 → 전체빌드에서 libs/크라우니브릿지.한선 정본(wallet.balance/cell.read·write/notify/shortcut)을 조용히 덮어쓰는 회귀(JS엔진이 브릿지보다 나중 import=승리)
- 수정: JS엔진.한선 상단에
가져오기 "크라우니브릿지.한선" + 로컬 스텁 제거 → 단독 rc=0(브릿지로 resolve) + 전체빌드 정본 복원. 더블import는 컴파일러 dedup
- 결과: JS_window 충돌 0, 전체 이름충돌 24→23, 새 충돌 0
- 교훈: 단독 컴파일 미정의 함수를 로컬정의로 메우면 전체빌드 정본 shadow 위험 → import 일원화가 정답. [[feedback_hanseon_import_name_conflict]]
- 남은 23건(기존 잠재, 비출하 Path B): 울트라 감사 워크플로우 v2-nameconflict-audit로 클러스터 분석→픽스플랜 진행중
4차 사이클 — 이름충돌 24→1 정리 완료 (울트라 감사 + 적용)
울트라 워크플로우 v2-nameconflict-audit(소넷 6클러스터 분석→종합 픽스플랜, 라인별 검증).
활성 버그 적발: 문자열찾기(단일문자 버전이 93건 다중문자 HTTP/캐시 검색 파괴), 연결풀생성(풀 키 불일치 재사용 0%), 쿠키조회/프레임시작 오dispatch.
적용 (단계별 컴파일 검증)
- 1단계 safe_dedup 4건(오푸스): HAL.한선 공백제거/줄분리/분리 로컬대체 삭제(가져오기 "문자열.한선" 정본 승계) + GPU렌더러 행렬곱 중복 삭제(컴포지터.한선:252 정본). 23→19
- 2~7단계 needs_rename 18건(소넷 순차): 비정본을 모듈접두 rename(.한선+짝 .rpn.한선+호출부). OS프로세스목록/종료, 탭검색_문자찾기, 고급연결풀생성, HTTP_TOAU전송/수신, DOM노드속성설정/조회, 문서쿠키설정/조회, 메모리로컬저장소삭제, 간이교차관찰자생성, GPU/HAL레이어생성, GPU프레임시작, 레이아웃캐시저장, 탭세션스냅샷저장/복원, 렌더러탭열기, 탭검색_탭닫기. 19→1
- 잔존 1건 밀리초(LOW): HAL.한선:1861 유닉스시각()*1000 정본 승리·작동. 날짜.한선:38 python3 fork는 체계() stdout 함정으로 실작동불가지만 공유 stdlib라 별도작업 권장(범위 밖)
검증 (독립 재확인)
- v2 통합 rc=0, 27.28MB, 이름충돌 24→1
- 런타임 스모크: GPU Metal 초기화 정상, 크래시 없음
- Path A(출하 네이티브)는 src/v2 미의존 — 영향 없음
- 픽스플랜 원본: CrownyDoc/projects/2026-06-13-v2-이름충돌-픽스플랜.txt
5차 사이클 — app 한선씨 이행 rank11 (소넷)
✅ rank11 API JSON 생성 한선씨 모듈
- 신규
/Users/ef/crowny-app/앱API.한선(14.4KB): API상태/API앱목록/API카테고리/API전체헬스
- JSON.한선 [키,값,..] 배열 API로 조립(내장 맵 미사용=직렬화가능),
가져오기 헬스체크.한선으로 전체헬스() 재사용
- server.js 미수정(동반 모듈). 독립검증 rc=0: API상태 379자/앱목록 39앱 3193자/카테고리 21 811자/전체헬스 online1 rate50
- JSON.한선 함정 발견:
_맵인가() 휴리스틱이 짝수길이+문자열첫요소 배열을 객체로 오인 → phases 5요소(홀수)로 우회
app 한선씨 이행 진행도
- ✅ rank9 헬스체크.한선(포트살아있음/전체헬스) + ✅ rank11 앱API.한선(JSON 4종) — 라이브 9820 JS의 헬스/API 로직 한선씨 동반본 확보
- ⚠️ 정리거리: 헬스체크.한선
단위검증()이 top-level → import 시 부작용(9820/1 curl) 실행. server.js 결선 전 메인가드(단독실행시만 검증)로 분리 필요
- 잔여: rank10 dashboard HTML생성기 한선씨 분리(L), rank12 서비스카탈로그.한선 SSOT로 execSync 제거(M), 그 후 server.js가 한선씨 모듈 호출하도록 결선