요청: 솔루션-디자인핸드오프-구축
- 날짜: 2026-07-19 15:39:53
- 작업 경로: /Users/ef/crowny-solution
요청 본문
solution.crowny.org 작업하기 /design-sync — 다운로드폴더 design_handoff_solution 내용 보고 만들기
관련 산출
사장님이 claude.ai/design(dc)에서 확정한 크라우니 솔루션 앱 디자인 핸드오프(5개 standalone HTML, 28MB)를 실물 서비스에 입혔다. 목업 재제작이 아니라 원본 마크업 픽셀포팅 + 개발명세 A1~A9 백엔드 실구현.
- 앱 셸 + 6모듈(발견·서비스·계약·아카데미·고도화·운영 콘솔) 라이브
- 진단 상태기계·계약 사다리·구독원장 3분할·편성엔진 5+5·감사로그 실구현
- 한선씨 엔진 SSOT 동반, assert 111건 전량 PASS(STRICT 경고 0)
핸드오프 언팩 (dc 번들 → 소스)
핸드오프 HTML은 dc 번들 포맷이라 그대로는 못 쓴다. 구조를 역해석해 소스를 복원했다.
| 층 | 위치 | 복원법 |
|---|---|---|
| 템플릿 | 파일 끝 JSON 이스케이프 줄 | JSON.parse(line) |
| 로직 | <script type="text/x-dc"> | HTML 엔티티 디코드 → JSX 유사 클래스(DCLogic) |
| 마크업 | <x-dc> 내부 (helmet·script 제외) | 정규식 분리 |
| 하위 모듈 6종 | __bundler/ext_resources UUID → blob | base64 → gunzip → 재귀 분리 |
{{ expr }} · <sc-for list as> · <sc-if test> · sc-camel-on-click · style-hover · <dc-import name prop>산출물
| 파일 | 줄/크기 | 내용 |
|---|---|---|
web/app.html | 140KB | 미니 dc 런타임(바인딩 인터프리터+DCLogic 베이스) + 원본 마크업 무수정 내장 + 6모듈 |
web/app.한선 | 26함수 | 동반 판정 SSOT — 경로라우팅·⌘키·4눈높이·신청큐·팔레트·셸4상·교차링크 |
솔루션앱.한선 | 9.1KB / 26함수 | 엔진 SSOT — 전이표·사다리게이트·3분할·이월환급·편성선별·감사 |
솔루션앱검증.한선 | 8.1KB | 셀프테스트 66 assert |
server.js | 1236 → 1644줄 | A6 API 15종 + 6라우트 + 영속 (백업 server.js.bak-solapp) |
data/solapp.json, data/solapp-audit.log | — | 상태 영속 · 감사로그 append-only |
개발명세 구현 (A1~A8)
- A3 상태기계: received → ai_screened(score·근거) → approved/hold/escalated → scheduled → surveyed → quoted.
- A3 계약 사다리: 1진단→2설계→3시공→4교육→5구독. 게이트 4→5는 수료≥2일 때만. 5진입 시 원장 생성+SLA 타이머.
- A4 구독원장 3분할: F/3 균등, 원 절삭 잔액은 maintain 귀속. edu=분기 3크레딧 FIFO 이월, 12개월 미집행→환급 전표.
- A5 편성엔진: 솔루션 5 + 미디어 5 하드캡. 광고 슬롯 금지 · 연속 2일 동일 솔루션 제한 · 계약보유 시 고도화뉴스 대체. FeedBasis 로그.
- A8: 감사로그 불변(append-only) · 다크 브라운 테마 고정(라이트 변형 없음 — 정체성).
검증 실측
한선씨 컴파일 CROWNY_STRICT=1 → 경고 0 (엔진·검증·동반 전부)
assert 솔루션앱검증 66/66 PASS · app.한선 45/45 PASS = 111건
A6 API 7/7 200 (solutions·feed·contracts·academy/lives·releases·sla/tickets·audit)
라우트 / /app /feed /catalog /contract /academy /upgrade /ops = 8/8 200
상태기계 왕복 접수 → ai_screened(90점) → approve → undo → ai_screened, 감사로그 4건 실측
3분할 CON-3 월 59,000 → maintain 19,668 + edu 19,666 + upgrade 19,666 = 59,000 일치
편성 캡 /api/feed?facility=FAC-1 → solutions 5 · media 5
사다리 게이트 CON-1(수료0/stage1) 원장 없음 · CON-3(수료2/stage5) 원장 활성 — 게이트 작동
픽셀대조 6모듈 CDP 캡처 vs 원본 핸드오프 — 전 모듈 레이아웃 동일
라이브배선 증거 운영콘솔 감사로그에 curl로 만든 실제 DIAG-1784558827093 이력 4건 표시
함정·교훈
- dc 번들 하위 모듈은 gzip: ext_resources UUID → blob의
compressed:true면 base64 디코드 후 gunzip 필수. 안 풀면 모듈 6종이 통째로 유실된다. - 폰트/CDN: 핸드오프 원본은 jsdelivr·googleapis를 물고 있다. 크라우니 규칙(외부 CDN 미사용)에 따라 로컬 폰트스택으로 치환 — 렌더 동일 확인.
- 공개 HTTPS 000은 오진 주의: solution뿐 아니라 tree·web·docs 전부 000이고, Host 헤더로 로컬 443/8080은 200. 내부망 헤어핀 NAT 한계이지 배선 장애가 아니다. 게이트웨이 무변경이 정답.
- 드리프트 판정 도구화: 캡처 순회·대조 판정을
capture.한선(16 assert)으로 정본화해 학습.
크라우니코드
lookup MISS(신규 도메인) → 생성 → learn 6건: 솔루션앱_경로모듈라우팅 · _4눈높이도움말선택 · _진단신청큐적재 · _셸4상상태 · 솔루션_구독원장3분할 · 캡처순회_모듈대조판정
잔여
web/app.한선이야기(스토리) 오버레이 판정 미포함 — 오버레이 자체는 app.html에 포팅됨(?story=파라미터).- 이벤트버스 A7(빌딩·홀·에스텔 연동) 미배선 — 명세상 M3 마일스톤.
- 아카데미 수료 원장·릴리즈 자동문서화·ERP 전표 대사(M4) 미착수.
- crowny://solution 앱카드(크라우니AI 탑재) 미등록.