estel.crowny.org 에스텔 QI 재구축 — dc핸드오프 픽셀포팅 + 순수 한선씨 서버
개요
사용자 지시로 estel.crowny.org를
~/Downloads/design_handoff_estel_qi/(README.md + DEVELOPER_GUIDE.md + 9모듈 dc.html, hifi) 기준으로 전면 재구축. 하우스 패턴(CAD 방식 dc핸드오프 픽셀포팅 + 순수 한선씨 HTTP 서버) 적용. 울트라 워크플로 2회(11+6 에이전트, sonnet)로 병렬 포팅.
무엇을 했는지
- 공개 HTTPS 복구: gateway.yaml estel 항목의
httpOnly: true 제거 → https 000→200.
- 포트 독립: 구 estel:9785는 byeol 서버 Host분기(pageEstel)와 공유(레지스트리 이중등록) →
ports.sh set estel.crowny.org 9617로 독립 배정. 업스트림 변경은 gw restart 후에만 라이브 반영(자동결선은 add 전용).
- 프론트: 앱.html + 셸.js(610줄, EstelApp 전역 — 9탭·상태바·⌘K·4레벨 도움말·토스트·append-only 감사로그·localStorage 트윈) + 모듈 9종(sky 폰 라이프스타일·qi 5단계 파이프라인·lab 프리셋6·puzzle 4트랙×9조각·vault 청사진·learn 9계단·partner·hw 정직경계·ops 운영콘솔). 전 모듈 .한선 동반 + node --check 통과. 딥링크
#모듈id 지원(셸 3줄 추가).
- 서버.한선(941줄, RPN 정본 동반, STRICT 0경고): 정적 서빙(한글경로 URL디코드·모듈 화이트리스트·경로조작 400) + /api/estel/ai(5단계) + /api/quantum/run(프리셋 6종 결정론, 동일요청=바이트단위 동일) + 레거시 /api/qkd·qec·surface·tcount·pqc 이식(pqc=SHA256 서로게이트 STUB 명시, surface=반복부호 근사 서로게이트 명시 — 정직 경계). bind 실패 시 즉시 종료 가드레일.
- 배포: LaunchAgent org.crowny.estel: node estEL서버.js →
crownyc run 서버.toau(WorkingDirectory 추가, 구 plist .bak-node전환전 백업). 공개 종단 실측: /·셸.js·모듈9종·API·/legacy 전부 200, 그로버 target 605/729≈83%(명세 일치), 벨 00/11/22 각 243.
- 검증: 임시포트 스모크 + 헤드리스 크롬 9뷰 스크린샷 육안 대조(핸드오프 스크린샷 11장 대비) + 공개 https 재검증.
- 크라우니디자인: 디자인적용대상.psv
estel|앱.html 갱신. apply 실측 → 모듈 도트색·활성탭 필 오염 확인 → revert(hifi 핸드오프=픽셀 SSOT 우선, 리버트 후 검증본과 픽셀 동일 확인).
- 학습: 서버·셸·모듈 패턴 crownycode 학습(래칫), knowledge 셀 3건(#25960~25962).
관련 파일
- 코드:
/Users/ef/crowny-estel/ (앱.html·셸.js·모듈/.js+.한선·서버.한선·서버.rpn.한선·서버.toau)
- 핸드오프 SSOT:
/Users/ef/Downloads/design_handoff_estel_qi/
- LaunchAgent:
~/Library/LaunchAgents/org.crowny.estel.plist (+.bak-node전환전)
- 상세 문서: 2026-07-19-estel-qi-앱셸-구축.md · 2026-07-19-estel-순수한선씨-서버.md · 2026-07-19-estel-puzzle-모듈-픽셀포팅.md
잔여 이슈
- 구 estEL 브랜드랜딩(estEL AI·16Q/48Q/6561Q 소개)은 byeol.crowny.org/estel 로 잔존 — QI 앱과의 관계(링크 연결/통합) 사장님 결정 대기.
- clike_to_rpn.한선 컨버터의 else-if 체인·이스케이프따옴표 버그(소스 측 회피만 함, 컨버터 수정 미완).
- /api/quantum/run 은 프리셋 결정론 — 실 스태빌라이저 엔진(큐트리트러너.toau 등) 직결은 후속(qkd는 opcode 914-917 직호출 완료).
- crownyc run 런타임이 일부 .toau에서 행업하는 환경 이슈 관측(qi.한선/partner.한선 자체시험, 기존 정본에서도 재현) — 별도 조사 필요.
- cowork.crowny.org 000(본체 미LISTEN) — gw restart 시 관측된 무관 기존 장애.
추가 (같은 날 2차) — 모바일 전용 모드
사용자 지적: 실폰에서 데스크톱 레이아웃 속 402×874 폰 목업이 그대로 보임 → tiomta.com(클로드 모바일앱식) 기준으로 모바일 분기 구현.
@media 768px+
is-mobile(matchMedia): sky 풀스크린(목업 프레임·가짜 9:41 제거·하단 5탭 고정+safe-area), 셸 컴팩트(탭 가로스크롤·⌘K 아이콘·상태바 핵심만), 9모듈 전부 390px 수평 오버플로 0(CDP 실측), 데스크톱 회귀 0(qi 1440 캡처 바이트 동일). 부수 수리: .sky-phone flex:none 상속으로 인한 뷰포트 초과 클리핑, 도움말 FAB가 하단 탭 가림. 동반 셸.한선 판정 미러 9/9. 상세=2026-07-19-estel-모바일전용모드.md
추가 (같은 날 3차) — 모바일 삼선(☰) 드로어
사용자 지시: 브라운 상단바 색 통일 + 평소 숨김 + 삼선으로 노출. 모바일(≤768px)에서 상단바·상태바 기본 숨김 → 좌상단 플로팅 ☰(딥 인디고+골드) → 슬라이드 드로어(#0F1130 통일: 9모듈 리스트+모듈색 도트+⌘n, 상태 요약·정직 경계 이관, 스크림/✕/모듈선택/esc 닫힘, 스크롤 잠금). 후속 수리: 밝은 모듈에서 삼선이 카드 헤더 가림 → .estel-modsec(absolute라 컨테이너 패딩 무시) 직접 padding-top. 검증: CDP 390×844 전 상태 캡처+오버플로 0, 데스크톱 1440 픽셀 회귀 0(바이트 동일). 셸.한선 드로어전이 미러 17/17. 상세=드로어/ 스크린샷 8+3장
추가 (같은 날 4차) — 삼선 가림 전수 수리
사용자 지적: 삼선이 상단 글자 가림. CDP 클릭 주입(cdp_shot_eval.js+.한선 동반 6/6)으로 sky 내부 5탭 전수 캡처 → 퍼즐(헤더)·물어보기(말풍선)·내 별(프로필) 3곳 가림 재현. 수리=sky 모바일 블록에 비-피드 4패널(.sky-puzzle/.sky-ask/.sky-vault/.sky-me) padding-top 58px+safe-area 1줄(피드는 세그먼트 중앙정렬이라 제외). 재캡처 3탭 전부 해소·오버플로 0·데스크톱 sky 바이트 동일(회귀 0).
추가 (같은 날 5차) — PWA 홈화면추가 + 가림 결정형 감사 + 해시 라우팅
- PWA: manifest.json(standalone·portrait·#0F1130 통일·ko) + 아이콘 4종(셸 로고 문법 자체생성, maskable 여백 330‰) + apple-touch/메타. 서버.한선에
/manifest.json·/아이콘/<파일>.png(화이트리스트) 라우트 추가(STRICT 0경고·RPN 동기화). 공개 https 실측: manifest 200 application/manifest+json, 아이콘 md5 4/4 일치, 192×192 로드 OK. sw.js는 생략(설치엔 불필요).
- 가림 결정형 감사 도구(도구/가림감사.js + .한선 10/10): 삼선 사각형 ↔ 텍스트 노드 교차 + elementFromPoint로 실제 가림만 적발. 역대조(여백 제거 시 FAIL 재현)로 도구 유효성 증명 후 전 뷰 감사 → 9모듈·sky 5뷰·스크롤 상태·드로어 열림까지 전부 PASS.
- ⚠️ 감사 함정 적발:
해시만 바꿔 navigate하면 문서가 리로드되지 않아 모듈이 전환되지 않는다(전 모듈 헛통과 PASS). about:blank 경유 재로드로 보정 후 재감사(활성 모듈 id 확증).
- 해시 라우팅 결함 수리(위 함정에서 파생 발견): 셸이 해시를 init()에서만 읽어 hashchange/뒤로가기 무시. go()에 pushState 동기화 + hashchange/popstate 리스너 추가. 빈 해시=기본 모듈 복귀(누락 시 루트 뒤로가기 먹통) 실측 수리. 종단: sky→puzzle→ops, 뒤로×2 = puzzle→sky(루트), 앞으로=puzzle. 데스크톱 픽셀 회귀 0. 셸.한선 미러 23/23.