← 목록
기타 2026-07-19 7KB 읽기 7분

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)로 병렬 포팅.

무엇을 했는지

  1. 공개 HTTPS 복구: gateway.yaml estel 항목의 httpOnly: true 제거 → https 000→200.
  2. 포트 독립: 구 estel:9785는 byeol 서버 Host분기(pageEstel)와 공유(레지스트리 이중등록) → ports.sh set estel.crowny.org 9617로 독립 배정. 업스트림 변경은 gw restart 후에만 라이브 반영(자동결선은 add 전용).
  3. 프론트: 앱.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줄 추가).
  4. 서버.한선(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 실패 시 즉시 종료 가드레일.
  5. 배포: 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.
  6. 검증: 임시포트 스모크 + 헤드리스 크롬 9뷰 스크린샷 육안 대조(핸드오프 스크린샷 11장 대비) + 공개 https 재검증.
  7. 크라우니디자인: 디자인적용대상.psv estel|앱.html 갱신. apply 실측 → 모듈 도트색·활성탭 필 오염 확인 → revert(hifi 핸드오프=픽셀 SSOT 우선, 리버트 후 검증본과 픽셀 동일 확인).
  8. 학습: 서버·셸·모듈 패턴 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 홈화면추가 + 가림 결정형 감사 + 해시 라우팅

  1. 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는 생략(설치엔 불필요).
  2. 가림 결정형 감사 도구(도구/가림감사.js + .한선 10/10): 삼선 사각형 ↔ 텍스트 노드 교차 + elementFromPoint로 실제 가림만 적발. 역대조(여백 제거 시 FAIL 재현)로 도구 유효성 증명 후 전 뷰 감사 → 9모듈·sky 5뷰·스크롤 상태·드로어 열림까지 전부 PASS.
- ⚠️ 감사 함정 적발: 해시만 바꿔 navigate하면 문서가 리로드되지 않아 모듈이 전환되지 않는다(전 모듈 헛통과 PASS). about:blank 경유 재로드로 보정 후 재감사(활성 모듈 id 확증).
  1. 해시 라우팅 결함 수리(위 함정에서 파생 발견): 셸이 해시를 init()에서만 읽어 hashchange/뒤로가기 무시. go()에 pushState 동기화 + hashchange/popstate 리스너 추가. 빈 해시=기본 모듈 복귀(누락 시 루트 뒤로가기 먹통) 실측 수리. 종단: sky→puzzle→ops, 뒤로×2 = puzzle→sky(루트), 앞으로=puzzle. 데스크톱 픽셀 회귀 0. 셸.한선 미러 23/23.