크라우니 투데이 앱 장착 (2026-07-17)
개요
crowny://today = 투데이 협업 대시보드(React dc-runtime standalone, 4탭: 투데이 피드/내 하루/팀 보드/리포트, 전 데이터 인메모리 하드코딩)를 CrownyAI 신셸 모듈로 장착. office/building/erp와 동일 공정(무수정 원칙+WKUserScript 브릿지+scheme 배선).
무엇을 했는지
- 번들:
~/Downloads/Crowny Today 앱 (standalone).html → bundle/today/app/index.html (무수정 복사).
- 브릿지:
bundle/today/bridge/todayBridge.js — office의 crownyBridge.js 구조(가드→WKUserScript atDocumentEnd→setInterval 폴링→DOM 이벤트 위임) 그대로 미러.
- 서버:
http://127.0.0.1:9604 우선, 실패 시
https://today.crowny.org 폴백.
/health 체크 후
/api/posts·
/api/sync 호출.
- 오프라인 스토어: localStorage
crownyToday.posts/todos/report/queue.
- 캡처: 클릭 텍스트("게시"/"응원"/"댓글"/"등록"/"전송") + change(투두 체크박스) + blur(리포트 textarea) 이벤트 위임, 큐잉+즉시 로컬 저장.
- 동기화 루프: 30초 폴링 + on-load, 동기화판정.한선 로직을 JS로 미러링(온라인/오류수/큐길이/경과초 → 티/옴/타/음). 상태 dot(우상단 fixed)에 온라인·오프라인 + 미동기 N 표시.
- 하이드레이션:
/api/posts 조회 후 로컬에 없는 서버 포스트를 localStorage에 병합, DOM 반영은 카드 클론 best-effort(실패해도 데이터 레이어는 항상 정확 — 셀렉터 미스는 로그만 남기고 조용히 스킵).
- 서버 미가동 시에도 전 기능(로컬 저장+큐잉)은 정상 동작(오프라인퍼스트).
- 한선씨 동반:
bundle/today/bridge/동기화판정.한선 — 4상 판정 정본(티=즉시동기화/옴=재시도대기/타=오프라인유지/음=서버오류백오프). hanseonc_high 컴파일 + crownyc run 실행 확인, 자체시험 12/12 ALL_PASS.
- 네이티브 배선 (
native/crowny-ai-content.m, ERP 배선 구조를 그대로 복제):
-
caTodayBridgeScriptSource() — 브릿지 JS 로더(번들 리소스→개발기 bundle/ 2단 폴백).
-
caIsVectorService에 "투데이" 추가.
- AI홈 타일 "투데이" 추가(ERP 타일 다음).
- v7 북마크 자동시드("크라우니투데이", index 4).
-
_ucc addUserScript 등록(office/erp 브릿지 등록 바로 다음).
- addr 리매핑 2곳(
bundle/today/ 포함 시
crowny://today로 정규화) — activateTab 경로 + KVO(observeValueForKeyPath:URL) 경로.
-
normalizeURLString에
crowny://today/"투데이"/"today"/"크라우니투데이" 별칭.
-
caOpenTodayInActiveTab —
bundle/today/app/index.html 후보 2개(번들→개발기) 시도, 실패 시 조용히 return.
-
navigateTo:에 today 디스패치 분기 추가.
관련 파일
/Users/ef/CrownyBrowser/bundle/today/app/index.html (4.2MB, 무수정 원본)
/Users/ef/CrownyBrowser/bundle/today/bridge/todayBridge.js
/Users/ef/CrownyBrowser/bundle/today/bridge/동기화판정.한선
/Users/ef/CrownyBrowser/native/crowny-ai-content.m (8개 지점 수정, ERP 패턴 그대로 복제)
검증
hanseonc_high 동기화판정.한선 → crownyc run : 자체시험 통과=12 실패=0, ALL_PASS.
node --check todayBridge.js : 문법 오류 0.
cd native && make ai : 에러 0·경고 0, CrownyAI(442K) 빌드 성공, 3초 생존 확인.
잔여 이슈
/Users/ef/crowny-today-server(포트 9604) 서버 자체는 미확인/미기동 상태 — 브릿지는 서버 부재를 정상 감내(오프라인퍼스트)하지만 실제 온라인 동기화·today.crowny.org 배포는 후속 트랙.
- 하이드레이션 DOM 카드 클론은 best-effort(셀렉터가 실제 React 렌더 구조와 다를 경우 로그만 남기고 데이터 레이어만 갱신) — 실제 앱 실행 중 DOM 구조 실측 후 셀렉터 정밀화 권장(office 사례처럼 contenteditable 여부 등 런타임 확인 필요).
- office처럼 native/crowny-ai-main.m 메뉴(⌘S/⌘O) 급의 파일 I/O 브릿지는 today엔 아직 없음(스펙에 없었음, 서버 동기화가 저장 역할).
- 크라우니코드: lookup HIT 0건 / MISS 2건(todayBridge.js, 동기화판정.한선) / learn 추가 대기(다음 세션에서 crownycode-learn.sh add 예정).