← 목록
기타 2026-07-21 4KB 읽기 4분

울트라키보드 v2 — 범용 어댑터 레지스트리 라이브러리 (2026-07-20~21)

개요

크라우니울트라키보드를 ERP 전용에서 crowny:// 벡터앱 전반의 키보드 조작 라이브러리로 일반화. "코어 1개 + 어댑터 N개" 구조로, 신규 벡터앱이 생길 때마다 어댑터만 추가하면 키보드 조작이 자동 확산된다. "기능 계속 구현 + 라이브러리 축적" 지시 이행.

핵심 설계 전환

  • 기존: ErpAdapter 하드코딩 + 첫줄 가드 onErpApp(erp 경로만).
  • v2: AdapterRegistry — BaseAdapter(앱 무관 휴리스틱) + 앱별 어댑터. 앱 자동감지(경로 <앱>/app/index.html 매칭 → 어댑터 선택). 판정 SSOT=울트라키보드.한선(앱경로매칭/어댑터선택/벡터앱여부 4상).
  • 결정적 실측: WKUserScript는 이미 전 문서에 주입 중 → ObjC(crowny-ai-content.m) 무변경, JS 가드만 "벡터앱인가"로 넓혀 확산. 순수 JS+한선씨 라이브러리 작업.

지원 범위

어댑터오버라이드클릭요소(CDP 실측)
erpErpAdapterMODULE_ORDER 8종·currentModule(브릿지 snapshot)·findApproveButton(회귀 12/12 원본 보존)
buildingBaseAdapter없음46
todayBaseAdapter없음35
spaceBaseAdapter없음61
treeBaseAdapter없음179
office제외자체 키맵 시스템(bridge 17js/73한선) 충돌 회피
scanClickable·findGridRows는 애초에 ERP 특화가 아닌 휴리스틱이라 BaseAdapter로 승격. ErpAdapter만 실제 오버라이드 보유.

검증 (독립 재실행 확인)

회귀실행.sh 5검사 전체 통과:
  • 미러 동기 OK · 키맵 31/31 · ERP CDP 26 PASS(12 시나리오) · 울트라키보드 22/22(어댑터선택 케이스 추가) · 멀티앱 CDP 22 PASS
  • building/today 풀 힌트+라벨타이핑+실클릭 3/3, space/tree 힌트+라벨 스모크, office 조기종료 실측

함정 (CLAUDE.md 기록)

  • bundle/<앱>/app/index.html은 대부분 번들러-로더 템플릿(205줄) — 실 DOM은 async gzip 언팩 후에야 나타남. CDP 스캔 전 document.body.querySelectorAll('*').length 안정화 폴링(waitUnpack) 필수. tree만 예외(2984줄 정적 DOM).

라이브러리 확장 규약 (CLAUDE.md)

새 벡터앱 지원 = ①REGISTERED_APPS에 앱명 추가(JS+한선씨 등록앱목록 동시) ②Base로 부족하면 앱별 어댑터 오버라이드(currentModule/findApproveButton 등) ③회귀실행.sh 멀티앱 스모크에 추가 ④회귀 게이트 통과. 대부분 ①만으로 동작.

축적 결과

  • crowny-hub 백업: crowny-building(5파일 624KB), crowny-ultrakey(11파일 325KB) 신규 서비스 등록
  • 학습 래칫: 울트라키보드_어댑터레지스트리_앱자동감지
  • 관련: L2 설정/키맵 커스터마이즈 레이어 진행 중(앱별 활성 토글·힌트키 커스텀·localStorage 지속)

L2 설정/키맵 커스터마이즈 레이어 (2026-07-21 완료)

  • 울트라키설정.한선 SSOT — 설정 스키마·검증·4상 병합 판정(유효=티 적용/부분=옴 유효분병합+무효폴백/예약키충돌=타 거부/미인식=음 무시). STRICT 경고 0, 자체시험 33/33.
  • 설정 항목: 앱별 활성토글(erp/building/today/space/tree), 힌트 진입키 커스텀, 라벨 알파벳 순서, 모드 표시기 on/off, 결재 승인 유예, 힌트 배지 크기.
  • 울트라키보드.js 통합: SettingsPure 미러 + localStorage['crowny-ultrakey-설정'] 로드→검증→적용. 파싱실패/없음/미기재=기본값 안전 폴백(기존 동작 100% 보존 — 회귀 게이트가 증명). 첫줄 가드 2단계(비활성 앱=미설치).
  • 검증: 회귀실행.sh 6검사 전체 통과(기존 5 불변 + 설정 33/33). 라이브 CDP: 설정없음=키보드 설치됨 / building 비활성 localStorage=미설치 — 둘 다 PASS.
  • 레이트리밋으로 에이전트 중도종료됐으나 파일 작업은 완료 상태였고(종료=스크린샷 단계), 메인 세션이 컴파일·회귀·라이브 CDP로 독립 재검증 후 마감.
  • 학습: 울트라키설정_스키마검증_4상병합. 백업: crowny-hub(14파일 570KB).

최종 상태

울트라키보드 = 코어 + 어댑터 레지스트리(5앱) + 설정 레이어. 회귀 6검사 상시 게이트. 신규 벡터앱=어댑터 1개, 사용자 커스터마이즈=localStorage. crowny-hub 백업 완료.