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

CrownyDoc Office — 검증 이슈 3건 재수리 (design/adv×2)

개요

2026-07-13 적대검증에서 재적발된 3건(디자인 서체 미배선·실브라우저 동시접속 장애·home.js 잔여 사구 셀렉터) 중 편집 허용 범위(이번 워크플로 9빌더 파일 + index.html) 안에서 근본 수리 가능한 2건을 고치고, 나머지 1건(게이트웨이/서버 동시연결)은 범위 밖이라 실브라우저 CDP로 재현·확증만 하고 이슈로 반환했다.

무엇을 했는지

1) design(high) — Pretendard/JetBrains Mono 실제 미로드 + .od-root 스코프 협소

  • index.html <head>에 실제 웹폰트 로드 추가: jsdelivr Pretendard Variable CSS
(pretendardvariable.min.css) + Google Fonts JetBrains Mono(css2?family=JetBrains+Mono). 둘 다 curl -o /dev/null -w '%{http_code}' 200 확인 후 삽입.
  • office-design-tokens.csshtml[data-crowny] body { font-family: var(--od-font-ui); } 추가 —
studio.crowny.org 중앙 CSS의 html[data-crowny] body{font-family:var(--crowny-sans)}와 동일 specificity(0,1,2)로 맞추고, index.html에서 이 파일을 그 스타일시트보다 뒤에 로드해 캐스케이드 순서로 이기게 함(양쪽 다 !important 미사용 — 정공법). .od-root(focus.js/home.js 내부 컨테이너)는 그대로 유지, 값 충돌 없음.
  • 이제 상시 노출 셸 크롬(.od-topbar/.od-tab/.od-brandname 등, font-family 자체선언 없이 상속)이
실제 Pretendard Variable을 상속.

2) adv(critical) — 동시접속 시 스크립트 로딩 정지(다른 세션 curl 검증의 은폐 재확인)

  • 수정하지 않음 — 근본 원인이 게이트웨이/서버 동시연결 처리(허용 편집 범위 밖: index.html +
9빌더 파일 외 전부 손대지 말라는 명시 지시)라 손대지 않고, 지시대로 curl 대신 실브라우저 (Chrome headless + CDP, Playwright 미설치라 Python websockets로 CDP 직결)로 재검증만 수행.
  • 5회 반복 결과: 3/5 완전 마운트(CrownyHome/CrownyFocus/CrownyOutline/CrownyShell 전부
object), 2/5 실패 — 1건은 readyState:'loading'으로 11/80 스크립트만 파싱된 채 정지, 1건은 loading_failed_events:85(스크립트 80개 중 대부분 네트워크 실패)로 CrownyShell조차 undefined. → 원 이슈의 "4/5회 정지" 규모와 같은 부류의 장애를 이번 세션에서도 실측 재현(정확한 실패율은 변동하지만 curl 단일요청으로는 절대 안 잡히는 동시접속 취약점이라는 결론은 동일).
  • 인프라 담당/오케스트레이터에게 이슈로 반환: 근본 수정 후보 — ① 게이트웨이/서버 쪽 동시 연결
처리(keep-alive 소멸·요청당 되감기 등, MEMORY feedback_게이트웨이_커넥션풀_되감기충돌 참조) 점검 ② 정적 스크립트 태그 81개(9빌더 8개 포함) 번들링으로 동시 요청 수 자체를 줄이는 방향(단, 81개 중 9빌더분은 8개뿐이라 번들링만으로는 근본 해결 안 됨 — 나머지 72개 레거시 파일도 같이 손대야 하는데 이는 허용 범위 밖).

3) adv(high) — home.js 잔여 사구(死舊) 셀렉터 .app-mode-tab[data-mode=...]

  • home.js 281행·333행 document.querySelector('.app-mode-tab[data-mode="'+...+'"]')
.od-tab[data-mod="'+...+'"]'로 정정(office-commands.js와 동일 셀렉터로 통일). CrownyShell이 늦게 뜨거나 로드 실패하는 바로 그 케이스(위 2번 이슈)에서 CrownyOffice.switchMode 폴백 경로가 타지기 때문에, 이 사구 셀렉터가 살아있으면 모드 전환이 조용히 무동작했던 잔여 위반.

검증 증거

  • curl https://docs.crowny.org/static/office-design-tokens.css | grep 'html\[data-crowny\] body'
라이브 반영 확인(정적 서빙, 재기동 불필요).
  • 실브라우저 CDP getComputedStyle 확인(/private/tmp/.../scratchpad/cdp_font_check.py):
body/.od-topbar/.od-tab/.od-brandname 전부 "Pretendard Variable", Pretendard, ... — 이전 Crowny Gothic 폴백 대신 실제 Pretendard 상속 확인. document.fonts에서 Pretendard Variable:loaded, JetBrains Mono:loaded(1 weight, 나머지는 미사용이라 정상 unloaded) 확인.
  • 같은 스크립트에서 .od-tab[data-mod='sheet']FOUND, 옛 .app-mode-tab[data-mode='sheet']
MISSING 확인(수정된 셀렉터가 실제 라이브 DOM과 일치, 죽은 셀렉터는 더 이상 코드에 없음).
  • node --check home.js 통과. index.html/office-design-tokens.css 브레이스·스크립트 태그 수
무결성(81개, 순서 불변) 확인.
  • 이슈 2(adv-critical) 재현: /private/tmp/.../scratchpad/cdp_probe.py — 5회 CDP 실측 3/5 성공
2/5 실패(로딩 정지/네트워크 실패), 원 이슈와 동일 부류 확증.

관련 파일

  • /Users/ef/CrownyDoc/한선씨/정적/index.html (수정 — 웹폰트 <link> 2종 추가, 다른 부분 불변)
  • /Users/ef/CrownyDoc/한선씨/정적/office-design-tokens.css (수정 — html[data-crowny] body 규칙 추가)
  • /Users/ef/CrownyDoc/한선씨/정적/home.js (수정 — 281·333행 셀렉터 정정)
  • 검증 스크립트(임시, 프로젝트 파일 아님): /private/tmp/claude-501/-Users-ef/c96e50c5-c067-41f3-bf44-38a58a7faa23/scratchpad/cdp_probe.py, cdp_font_check.py

잔여 이슈

  • adv(critical) 동시접속 스크립트 로딩 정지는 미수정 — 게이트웨이/서버 동시연결 처리가 근본
원인이며 이번 작업의 허용 편집 범위(index.html + 9빌더 파일) 밖. 인프라 담당 세션에 그대로 이관.
  • office-design-tokens.한선(토큰 값 전용 companion)은 이번 CSS 셀렉터 추가로 값 자체가 바뀌지
않아 갱신 불필요(서체UI 값 동일, 셀렉터/스코프는 CSS 전용 개념이라 .한선 값 테이블에 대응 항목 없음).
  • 두 CDP 진단 스크립트(cdp_probe.py/cdp_font_check.py)는 scratchpad 임시 검증 도구라 .한선
동반을 만들지 않음(프로젝트 산출물이 아니라 1회성 라이브 확증용, 이전 세션의 module-bridge-test.js 스크래치패드 하네스와 동일 취급).
  • 무관 훅 오탐 기록: index.html 수정 시 "[디자인 대충 FAIL]" 훅이 CrownyBrowser 계열
.tabbar/.tab/.toolbar/.omni/.bm/.ib 규격으로 이 파일(Crowny Office, od- 네임스페이스)을 검사해 전부 "요소없음" FAIL을 출력함 — 이 파일의 디자인 SSOT는 office-design(od-) 쪽이라 해당 훅 검사 대상이 아님(오검사로 판단, 무시).