에스텔 QI — 읽기 편의 + 눈높이 모드 베이스 + 의미어 인덱싱 현황 정리
사장님 지시 3건(2026-07-21): ① 초등학생도 볼 만하게 글밥 간격 넓히기 ② 일반인이 단어를 쉽게 이해하도록 작업 준비 + 전체 메뉴 모드 변경 베이스 세팅 ③ 서비스 완료 후 다국어 작업 대비 의미어 인덱싱 상황 정리.
1. 읽기 편의 토큰 (글밥 간격)
앱.html :root에 읽기 토큰 신설 — 모듈 CSS의 하드코딩(font-size 268곳·line-height 70곳)을 이 토큰으로 치환해 한 곳만 바꾸면 전 화면 글밥이 함께 움직인다.
| 토큰 | 기본(일반) | 어린이 | 빠른 | 전문가 |
|---|---|---|---|---|
--fs-mul 글자 배수 | 1 | 1.09 | 0.98 | 1 |
--lh-body 본문 줄간격 | 1.75 | 2.0 | 1.6 | 1.65 |
--lh-tight / --lh-loose | 1.35 / 1.95 | 1.45 / 2.2 | 1.28 / 1.75 | 1.3 / 1.8 |
--ls-body 자간 | 0.005em | 0.015em | 0 | 0 |
--sp-para 문단 간격 | 0.85em | 1.15em | 0.6em | 0.7em |
--measure 한 줄 최대폭 | 34em | 26em | 40em | 44em |
도구/타이포토큰.한선.2. 눈높이 모드 (전체 메뉴에서 모드 변경)
<html data-level> 토글 → 위 토큰이 전 화면에 즉시 반영. localStorage 지속(estel.level.v1), 첫 페인트부터 적용.EstelApp.pick({kid:'…', normal:'…', expert:'…'}) → 현재 눈높이 텍스트(폴백 kid/quick/expert→normal)EstelApp.onLevel(fn) → 레벨 변경 시 재렌더EstelApp.level() / setLevel(key) / levels()3. 용어 사전 (일반인 이해 지원)
- 데이터:
데이터/용어사전.psv—단어|쉬움|보통|전문|의미어코드|영문, 29용어. 줄 추가만으로 반영(서버 재시작 불필요). - 표시:
EstelApp.termHtml('중첩')→ 점선 밑줄 → 탭하면 현재 눈높이에 맞는 뜻 시트(어린이·빠른=쉬움 / 일반=보통 / 전문가=전문) + 의미어 코드 표기. - 서버:
GET /데이터/<파일>.psv화이트리스트 라우트 추가(경로조작 400 실측). 사전이 없어도 앱은 정상 동작(fail-open). - ⚠️ PSV 사고 및 규칙화: 전문 설명의 브라켓 표기
|ψ⟩가 구분자와 충돌해 필드가 밀렸다. → 본문에 ASCII|금지, 전각|(U+FF5C) 사용. 무결성 실측: 29행 전부 정확히 6필드.
4. 의미어 인덱싱 현황 (다국어 전환 대비)
4-1. 자산 3층 — 주소 체계가 둘이다(섞으면 오역)
| 층 | 파일 | 규모 | 주소 형식 | 용도 | ||||
|---|---|---|---|---|---|---|---|---|
| v2 통합 코드북(정본) | crowny-butler/data/의미어_통합60437.psv | 60,437 실어휘 | 11트릿 셀주소(3¹¹=177,147, 여유 116,712) | 카테고리\ | 의미어\ | 영문\ | 셀주소 — 다국어 축 | |
| 누적 인덱스(레거시) | data/누적/단어코드.psv·코드단어.psv | 각 53,531 | 6자리 정수 ID | 빈도·연결 누적용 | ||||
| 연결 그래프 | data/누적/의미어연결.삼진 / 의미어연결저장소.psv | 119,003 / 147,372 | 코드A\ | 방향\ | 트릿\ | 코드B\ | 가중 | 4상균형3진 관계 |
4-2. 설계 스펙 상태 — 적대검증 라벨링 완료(의미어코드_스펙v1.md, 설계 동결 후보)
| 결정 | 내용 | 라벨 |
|---|---|---|
| D1 | 의미어 주소는 9트릿 경계 정렬(27트릿 큐브의 1/3) | ✅확정 |
| D2 | 응용어는 단일 주소 금지 → 9트릿 base + 합성연산자 시퀀스 | ✅확정 |
| D3 | "닫힌 전체 합성" 폐기 → 개방 코어 + 예외표 2층(비합성 MWE가 어휘부의 41~50%) | ✅확정 |
| D4 | 검증 코어 = Concepticon 3.4.0의 4,034개(나머지 ~16k는 영어 편향 후보, 신뢰등급 분리) | ✅확정 |
| D5 | 자연어↔코드 무손실 가역은 코어 내부에서만 보장, 비분해어는 예외표 경유 | ✅확정 |
| D6 | base 인벤토리 하드 상한 = 19,683(3⁹). "~20k"는 −317 오버플로 | ✅확정 |
| C1 | base 규모 8,000~16,000 | 🟡조건부(실측 필요) |
| C2 | PHYLUM(27)×CLASS(27)×SPECIES(27) 계층 주소 | 🟡조건부(언어학 검수 필요) |
의미어v3커버리지.한선): 타입 base 4,164 + 온톨로지 조합 → 레벨1 합성쌍 138,176(base의 33배). 평면 6만 어휘 소싱보다 base+조합이 우월(무충돌·구조보존·가역).4-3. 다국어 인프라
다국어의미어.한선(언어별 단어 → 같은 셀주소), 다국어등록.한선(한/영/일 30개념×3=90단어 시범 등록), 다국어온톨로지·확장. 원리는 번역이 아니라 매달기 — 한국어 문장을 번역하는 게 아니라, 같은 의미어 셀주소에 각 언어 표층어를 등록한다. 언어 추가 = 단어 등록만, 구조 불변. 의미어 계열 라이브러리 총 ~70본.
4-4. 에스텔 실측 커버리지 — 결손이 3종류
사전 29용어 중 v2 코드 부착 12 · 공란 17. 공란의 원인이 서로 달라 처방도 다르다.
| 유형 | 사례 | 처방 |
|---|---|---|
| ①미등록 신조어·브랜드어 | 큐트릿, 큐비트, 트윈, 에뮬레이터, 시뮬레이터, 스태빌라이저, 그로버, QKD | 코드북 신규 등록(도메인=물리학/전산학) |
| ②동음이의 충돌(등록돼 있으나 다른 뜻) | 게이트→외래어생활 · 시드→무예스포츠 · 재현→현대미술 · 스태빌라이저→교통 · 벨→단위세분 · 경계→시공 · 정직→세무노무 | 뜻노드 분할(티옴타음 방식: 배#티선박/옴신체/타과일) 후 양자 뜻에 부착 |
| ③복합어(D2에 따라 단일 주소 금지) | 벨 게임, 오류 정정, 편성 근거, 정직 경계, 3레이어 | base + 합성연산자로 표현 |
4-5. 다국어 착수 시 필요한 것 (준비/미비)
- ✅ 준비됨: 언어독립 축(v2 셀주소), 사전 파일에 코드 컬럼, 서버 데이터 라우트, 눈높이 모드(레벨×언어 2축 중 레벨 축 완성), 설계 스펙 동결 후보
- ⬜ 남음: (a) ①~③ 결손 17건 처리 → 에스텔 커버리지 100% (b) 언어팩 규약 확정 —
용어사전.<lang>.psv화이트리스트 추가 방식으로 설계됨 (c) UI 문자열 키화(현재 모듈 코드에 한국어 리터럴 직접 삽입 — DEVELOPER_GUIDE §8 "i18n 준비: UI 문자열도 키 기반으로" 미이행. 이게 가장 큰 미비) (d) 파이프라인 ①단계(다국어 자연어 입력) 실측
관련 파일
- 앱.html(토큰·모드 CSS·용어 시트) · 셸.js(레벨 API·용어 사전 로더) · 셸.한선(판정 미러) · 서버.한선(데이터 라우트)
- 데이터/용어사전.psv · 도구/타이포토큰.한선 · 도구/가림감사.js·한선
- 의미어 정본:
crowny-butler/data/의미어_통합60437.psv· 스펙libs/의미어코드_스펙v1.md
잔여
- 모듈 9종 타이포 토큰 치환 = 별도 작업으로 진행(완료 시 어린이 모드에서 실제 글자 확대 반영)
- 용어 칩(
termHtml)을 실제 모듈 본문에 적용하는 작업은 미착수 — 현재는 API·데이터·시트 UI까지 완비된 상태
5. 모듈 전환 완료 + 후속 수리 (같은 날 2차)
- 모듈 9종 치환 완료: font-size 263건 →
calc(px*var(--fs-mul)), line-height 70건 → 토큰, letter-spacing 62건 추가, 고정크기 예외 9건 보존(폰 가짜 상태바·원형 배지 글리프·고정높이 차트 라벨). 규칙 정본도구/타이포토큰.한선17/17. - 모드 실측(learn 92개 텍스트 평균): 일반 11.15px/1.77 → 어린이 12.14px/2.02(×1.089·×1.14) → 빠른 10.93px/1.615 → 전문가 11.15px/1.665. 전 모드 가로 오버플로 0. 고정 예외(.sky-status)는 어린이 모드에서도 13.5px 불변.
- 한글 줄바꿈 전역 수리: 브라우저 기본값이 글자 단위로 끊어 "가위바위 보가 삼진인 이 유"처럼 단어 중간이 잘리고 있었다(ops 실측).
word-break:keep-all(+긴 토큰만overflow-wrap:break-word, mono/코드는 예외 해제)로 띄어쓰기 단위 줄바꿈으로 교정 — 초등 가독성에 가장 큰 단일 개선. - ops 모바일 레이아웃 수리: 헤더·큐행이 좁은 폭에서 3~4줄로 접히던 것 → ≤768px에서 제목줄/버튼 세로 전개. 재캡처로 해소 확인(오버플로 0).