crowny-vision — 크라우니 LED디스플레이 제안도구 (vision.crowny.org:9622) 1차 출시
2026-07-26 · 큐외 사용자지시 · 디자인 핸드오프 이관구현
개요
다운로드 폴더의 크라우니LED계산기 패키지(클로드 디자인 핸드오프: 정본 HTML 3211줄 + 크라우니캔버스 토큰 CSS + 문서 17~20)를 정독하고 vision.crowny.org 서비스로 이관구현했다. 제품: 희망 화면 크기(mm)+픽셀 피치 입력 → 캐비넷 조합(NovaStar 4:3/16:9)·배선(채널/포트) 도면·RX/프로세서 산정·RFP(영문)/견적서(D.O.T) 생성까지 한 화면.
무엇을 했는지
- 디자인이식 경유 (재해석 금지 계약):
디자인이식.sh register vision— 정본 물리잠금+산출 diff 게이트. 정본 무수정 이식 + 제품빌드 지시 3건만 적용(모드바/data-pin 제거 · Pretendard CDN→로컬 woff2 번들). diff: 신규색 0·신규치수 0, 의도 편차는 이식노트.md 기록. - 계산엔진.한선 (sonnet 위임·가드레일 주입): packStrip(축별 정수조합·기본규격 우선·언더/오버/근접), 격자→수량/실측/해상도, 채널패킹(직선H/V+균등분배), RX 봉투규칙(회전허용), 프로세서 선정. 내부 mm ×4 정수 스케일(337.5 소수 회피), 배열 0 사용 설계(스토리지 재사용 함정 원천 회피). STRICT 0경고.
- 앱.한선 — 앱.html 동반 파리티(엔진 가져오기 + 4수치 출력 + 골든테스트).
- 서버.한선 (sonnet 위임): :9622 고정 라우트 테이블, 파일소켓전송(opcode 856)으로 190KB HTML·2MB woff2 바이너리 정확 서빙(cmp 바이트 일치), CRLF 글자변환 조립, SIGPIPE 무시, bind 실패 즉시 종료. _한글NFC조합 신규 헬퍼(NFD→NFC 유니코드 조합 공식) — 학습DB 등록.
- 인프라: 포트레지스트리 vision:9622 · LaunchAgent org.crowny.vision(KeepAlive+CROWNY_STD+스톨블록 처방 CROWNY_TCP_LOOPBACK=1/RCVTIMEO 1500ms) · 게이트웨이 vision.crowny.org 배선 · 와일드카드 cert(*.crowny.org, ~10/16) 폴백 커버.
검증 실측
- 골든 케이스 (4:3·P1.86·7680×3840·언더·650k): 한선씨 = JS = 문서 전 수치 일치 PASS — 96캐비넷(12×8 전부 C1)·실측 7,680×3,840mm·해상도 4,129×2,065px·16채널·1포트당 7개·A5s Plus 96장·VX2000 Pro 1대. ※해상도는 캐비넷 합(4128×2064)이 아니라
round(실측mm/피치)= 4129×2065가 JS 진실임을 node 실측으로 확정. - 공개 HTTPS 4경로 200: / (190,397B) · /api/health · /폰트/PretendardVariable.woff2(2,057,688B 정확) · 토큰 CSS.
- 육안(크라우니AI검증.sh shot): 크라우니캔버스 디자인·아이콘 레일 약칭 9종·모드바 제거·기본입력 렌더 확인. 라이브 페이지 JS 계산 결과 골든 일치(text 추출 실측).
함정 재확인 (이번에 실제로 밟음)
crowny-ports.sh set vision 9622(단축명) → gateway.yamldomain: vision기록 → FQDN 매칭 404. FQDN으로 yaml 수정 후 워커 1대씩 kill(감독 자동충원)로 무중단 반영. 신규 배선은 FQDN 전달 필수 (기존 feedback 메모리 그대로 재현).
관련 파일
- 코드:
/Users/ef/crowny-vision/— 서버.한선(260줄)·계산엔진.한선·앱.한선·웹/앱.html(이식본)·웹/폰트/·디자인정본/(잠금) - 이식노트:
~/.claude/design-port/vision/이식노트.md - 학습: LED디스플레이_캐비넷_배선_계산엔진 · vision_LED계산기_정적서버_바이너리폰트 · 한글_NFD_NFC_조합_유니코드정규화
2차 마감 (같은 날 — 잔여 3건 완료)
- 크라우니AI 앱카드: 앱목록.psv에
비전|url:https://vision.crowny.org|-|-|-|…등록(런처 I2 계약 6열). 엔진이 PSV를 런타임 라이브 리드(번들 src/ 없음 → dev 경로 폴백 확인) — 시작페이지 다음 렌더부터 카드 노출. - /api/calc 파리티 엔드포인트: 서버.한선에 계산엔진 가져오기+쿼리 파서+검증. 공개 실측
https://vision.crowny.org/api/calc?w=7680&h=3840&pitch=1.86→ 골든 JSON 바이트 일치(96·12x8·4129×2065·16채널·A5s Plus 96·VX2000 Pro 1). 비숫자/비지원 피치/랏 불일치 → 400. 회귀(루트·헬스·폰트) 200. - 배선 후보 6종 티어랭킹: 계산엔진.한선 +19함수(직선H/V·블록·N자H/V·L자혼합, budget=max(min+4,⌈min×1.25⌉), 티어0~3, 동티어 방향일관→채널수→꺾임→형태). 6케이스 JS 파리티 전부 일치(골든·16:9 5400×2700·3×3·6×24·24×6·10×10).
배선후보_PSV()서버 소비용. 배열0·전역변이0 설계 유지, STRICT 0경고, 재호출 오염 없음.
파리티 중 발견한 JS 뉘앙스 (기록)
JS autoPackBest는 정렬 전 시그니처 dedup을 한다 — 블록 최적형이 1행/1열로 퇴화하면 직선과 셀단위 동일 파티션이 되어 블록이 제거됨(먼저 나온 직선 승). 한선씨는bh==1||bw==1 감지로 블록 kind랭크를 직선과 동률로 강등해 재현. 3×3처럼 블록이 티어 우위로 정당하게 이기는 케이스는 비회귀 확인.남은 제한 (문서화)
- 혼합 캐비넷 격자(코너 시나리오)는 6종 랭킹 대신 기존 2후보(H/V) 폴백 — 실제 LED월 구성은 거의 균일 격자라 실사용 영향 없음.
- 코너 캐비넷 부족 경고 경로는 한선씨 엔진에 없음(현 캐비넷 세트에선 발생 불가).
- 테스트 포트 임시 선점은
crowny-ports.sh free로 고를 것(이번에 9623=cloudpick과 순간 충돌, 무피해).