Crowny Office B-셸(통합 셸) 재구축
개요
docs.crowny.org/office 의 크롬(상단 탭·검색·빠른수집·상태바)을 사장님 제공 설계파일(unpacked.html) 기준
CrownyShell API v1로 재구축. 4탭+mind/plan 임시 탭을 8모듈(홈/문서/시트/슬라이드/마인드맵/포커스/아웃라인/플랜)
셸로 대체하고, 다른 6개 병렬 빌더(홈/포커스/아웃라인/시트강화/슬라이드강화/모듈브릿지/커맨드)가 등록할 수 있는
공통 계약(window.CrownyShell)을 배선했다.
무엇을 했는지
한선씨/정적/index.html 백업 후 수정:
-
<head>에
office-design-tokens.css 링크 추가(SSOT, 수정 금지·사용만).
- 기존
.title-bar/
.app-tabs(4탭+mind/plan) 위에 새
.od-topbar(8탭, ⌘1–8, 검색⌘K, 빠른수집⌃Space,
아바타) 삽입. 기존 title-bar(#doc-title/#btn-save/#btn-share/#btn-sidebar-toggle/#user-avatar)는
그대로 보존(2번째 행으로 유지).
-
#mode-home은 내용 비움(id만, B-홈 빌더가 채움),
#mode-focus/
#mode-outline 신규 빈 컨테이너 추가.
-
.status-bar에
od-statusbar 클래스 +
#shell-status-left(모듈별 좌측 정보 슬롯) 추가.
- 기존 72개
<script src> 태그 전부 원래 순서 그대로 보존(검증: orig_count 72, matched_in_order 72).
-
office-shell.js를 최초 스크립트로 배선(common.js보다 먼저).
- 병렬 빌더 산출물 스크립트 8개(home/focus/outline/enhance-sheet/enhance-slide/module-bridge/
office-commands.js) 하단에 배선(제작 중이라 일부 404 — 통합 단계에서 재확인 필요).
- 인라인 wiring 스크립트:
CrownyOffice.switchMode를
CrownyShell.gotoModule 위임 별칭으로 덮어씀
(file-compat.js/file-manager.js/import.js 등 기존 switchMode 호출부도 자동으로 셸로 흐름).
8모듈 onEnter 훅(툴바 render/init 등)을
CrownyShell.registerModule로 등록 후,
?mode= 딥링크
(기본 doc)로
gotoModule을 정확히 1회 호출.
한선씨/정적/office-shell.js 신규: CrownyShell API v1 구현.
-
registerModule({id,num,label,icon,containerId,onEnter,onLeave}) — 동일 id 재호출 시 메타는 병합,
onEnter/onLeave는 배열에 누적(덮어쓰지 않음) — 다른 병렬 빌더가 같은 모듈 id에 추가 훅을 걸어도 안전.
-
registerCommand({id,title,keys,module,run}) — 커맨드 팔레트 검색 대상.
-
gotoModule(id) — 패널 show/hide, 탭 active, 아바타 모듈색(
var(--od-mod-*)),
CrownyOffice.mode,
URL
?mode= 동기화, onLeave/onEnter 훅(각각 try/catch로 개별 격리 — 한 훅이 던져도 나머지는 실행됨).
-
setStatus(text) —
#shell-status-left.
-
openQuickCapture() — 모달(⌃Space).
window.CrownyFocus.quickCapture 있으면 위임, 없으면
localStorage['crowny-focus-inbox']에 직접 append(
{id,text,created,source}).
-
palette.open()/close() — ⌘K 커맨드 팔레트. 등록된 커맨드 +
localStorage['crowny-docindex']
최근문서를 제목 부분일치로 검색, ↑↓/Enter/Esc 키보드 내비게이션.
- 전역 키보드: ⌘/Ctrl+1–8 모듈전환, ⌘/Ctrl+K 팔레트, Ctrl+Space(메타 미동반) 빠른수집.
한선씨/정적/office-shell.한선 신규(한선씨 동반, 크라우니 헌법): 모듈 레지스트리 병합·gotoModule
상태전이·팔레트 검색필터·빠른수집 append를 순수 한선씨로 재현 + 자체시험 12건. 컴파일+실행 검증:
CROWNY_STRICT=1 ./hanseonc_high office-shell.한선 경고 0,
./crownyc run →
통과=12 실패=0 ALL_PASS.
검증 증거
node --check office-shell.js → 통과.
index.html 인라인 스크립트 추출 후 node --check → 통과.
- 원본 72개
<script src> 전부 순서 보존 확인(파이썬 서브시퀀스 검사) → all_preserved_in_order: True.
- 라이브
curl https://docs.crowny.org/office → 200, data-mod 8개(home/doc/sheet/slide/mind/focus/
outline/plan) 전부 마크업에 존재,
<script 태그 80개(72+8) 확인. 정적 서빙이라 재기동 불필요.
/static/office-shell.js, /static/office-design-tokens.css → 200.
- 병렬 빌더 산출물: home.js/outline.js/enhance-sheet.js/enhance-slide.js/module-bridge.js는 이미 200
(node --check 통과), focus.js/office-commands.js는 아직 404(제작 중 — 통합 단계에서 재확인 필요).
관련 파일
/Users/ef/CrownyDoc/한선씨/정적/index.html (수정, 백업: index.html.bak-2026-07-13-설계전)
/Users/ef/CrownyDoc/한선씨/정적/office-shell.js (신규)
/Users/ef/CrownyDoc/한선씨/정적/office-shell.한선 (신규, 한선씨 동반)
- 참조(수정 안 함):
/Users/ef/CrownyDoc/한선씨/정적/office-design-tokens.css
- 설계 SSOT:
/private/tmp/.../scratchpad/office-design/설계명세.json, 설계추출.txt, unpacked.html
크라우니코드 준수
- 생성 전 조회: `crownycode-learn.sh search "커맨드팔레트"/"CrownyShell"/"모듈탭전환"/"모듈레지스트리"/
"커맨드팔레트필터"` — 전부 MISS(무관 패턴만 매칭) → 신규 생성.
- 생성 후 학습:
crownycode-learn.sh add "오피스셸모듈레지스트리커맨드팔레트" "<office-shell.한선>" 완료.
- 크라우니코드: lookup HIT 0건 / MISS 5건(생성) / learn 추가 1건.
잔여 이슈
focus.js, office-commands.js는 병렬 빌더 미완(404) — 다른 세션 완료 후 페이지 로드 시 404 재확인 필요
(스크립트 태그는 이미 배선돼 있어 파일만 생기면 자동 연결됨).
- 실제 브라우저 인터랙션(⌘K 팔레트 클릭/키보드 내비, ⌃Space 모달, 탭 클릭 8종)은 헤드리스 curl로는
검증 불가 — DOM 존재/스크립트 문법/라이브 200만 확인. 통합 단계에서 실브라우저 E2E 권장.
#mode-home을 비웠으므로 B-홈 빌더가 완료되기 전까지는 홈 탭이 빈 화면으로 보임(의도된 설계).
- 다른 5개 병렬 빌더(home/outline/enhance-sheet/enhance-slide/module-bridge)가 CrownyShell.registerModule/
registerCommand를 실제로 호출하는지는 미확인(office-shell.js 계약만 제공, 소비 여부는 각 빌더 책임).