estel.crowny.org 앱 공통 셸 구축 (EstelApp)
개요
에스텔 QI(estel.crowny.org) 재구축 작업 중 "앱 공통 셸" 담당분. 디자인 핸드오프
(
/Users/ef/Downloads/design_handoff_estel_qi/)의
에스텔 앱.dc.html 프로토타입을
hifi 그대로 재구현해
EstelApp 전역 API를 정의했다. 9개 모듈(sky/qi/lab/puzzle/
vault/learn/partner/hw/ops)은 각자
EstelApp.registerModule(id, def)로 셸에 등록만
하면 되는 구조.
무엇을 했는지
앱.html — 문서 골격(ko/charset/viewport/title), Pretendard+JetBrains Mono CDN,
README Design Tokens를
:root CSS 변수로 전량 선언, 상단 브라운 바(h46 #3D2B1F)·
상태바(h30 #2E2117)·9개 모듈
<section id="mod-*">·⌘K 팔레트·도움말 FAB·토스트
루트 마크업.
셸.js 다음
모듈/{sky,qi,lab,puzzle,vault,learn,partner,hw,ops}.js
순서로 스크립트 로드.
셸.js — EstelApp 전역 구현:
registerModule(id, def): css <style data-mod> 주입, 탭 재렌더(7px 모듈색 도트+
⌘n mono), lazy-mount(
#mod-<id>에
def.html 첫 활성화 시 주입 후
def.mount(el)
1회 호출), 미등록 모듈은 "모듈 준비 중…" 스텁으로 셸이 죽지 않게 처리.
go(id) / ⌘·Ctrl+1–9 단축키(+토스트) / ⌘K 팔레트(자연어 입력→모듈 이동·
"QI 콘솔로 보내기" 라우팅,
estel:ask CustomEvent로 qi 모듈에 전달) / esc 닫기.
상태바 refreshStatus(): 트윈 구축자 19,683(3⁹)·오늘 별하늘 n/5 장면(state.daily
기반 동적)·시드 재현 100%(#7FBF8E)·엔진 LIVE·우측 정직 경계 문구(#8F7E68).
도움말 FAB: 4레벨(어린이/빠른/일반/전문가) 토글, helpTexts()에 프로토타입
9모듈×4레벨 전문 그대로 이식.
토스트: 하단 중앙 #1E2150/골드 보더, 2.2–2.6s 자동 소멸.
audit(text, undoable): append-only + localStorage(estel.audit.v1), auditUndo는
원본 삭제 없이 취소 엔트리 추가.
window.EstelApp.auditLog로 노출.
state/twinAdd/save: 계약 스키마(twin.axes 5축·daily·blueprints),
localStorage 키
estel.state.v1,
log3/
gaugeFill/
stage/
POW3 헬퍼 제공.
node --check 셸.js 구문 검사 통과.
- 한선씨 동반(글로벌 규칙):
셸.한선(POW3 테이블·모듈 레지스트리·log₃ 산식·상태바/
도움말 텍스트 조립 등 순수 로직 미러,
crownyc run 검증 7/7 통과),
앱.한선
(HTML 실물 파일을
읽기()로 직접 읽어 필수 id 21개·스크립트 10개·토큰 색 12개를
포함하나()로 결정형 검증하는 골격 게이트, 실측 45/45 통과). `crownycode-learn.sh
add`로 두 패턴 학습 완료.
관련 파일 경로
/Users/ef/crowny-estel/앱.html
/Users/ef/crowny-estel/셸.js
/Users/ef/crowny-estel/셸.한선 (동반, crownyc 검증 7/7)
/Users/ef/crowny-estel/앱.한선 (동반, HTML 골격 게이트 45/45)
- 디자인 SSOT:
/Users/ef/Downloads/design_handoff_estel_qi/README.md,
DEVELOPER_GUIDE.md,
에스텔 앱.dc.html잔여 이슈
모듈/{sky,qi,lab,puzzle,vault,learn,partner,hw,ops}.js 9개는 별도 서브에이전트
담당 — 아직
EstelApp.registerModule 호출부가 없으면 각 탭은 "모듈 준비 중…"
스텁으로 표시됨(셸 자체는 정상 동작).
- 서버 API(
/api/estel/ai, /api/quantum/run) 연동 및 로컬 결정론 폴백은 각 모듈
구현 시 처리 — 셸은 라우팅(⌘K → qi 모듈 CustomEvent)까지만 제공.
- 실브라우저 E2E 스모크(⌘1–9, ⌘K, 도움말 4레벨, 토스트)는 9개 모듈이 모두 붙은
뒤 통합 검증 권장.