← 목록
기타 2026-07-17 10KB 읽기 10분

요청: tree-크라우니트리-연동서비스구현

  • 날짜: 2026-07-17 12:54:56
  • 작업 경로: /Users/ef

요청 본문

tree.crowny.org 작업하기. 다운로드 폴더에 design_handoff_crowny_tree 폴더 정독, 크라우니AI, 오피스, 투데이, ERP, 스페이스, 빌딩, 홀, 작업 현황 확인하고 연동 서비스로 구현하기. 웹과 앱에 적용.

관련 산출

(클로드가 작업 결과를 이어 기록)


산출 결과 (2026-07-17 완료)

개요

tree.crowny.org:9608 크라우니 생태계 트리 출시 — 생태계 전체(11도메인 73서비스)를 한눈에 보는 공개 페이지+협업 도구. 웹(HTTPS)과 크라우니AI 앱(crowny://tree) 동시 적용.

무엇을 했나

  1. 핸드오프 정독: ~/Downloads/design_handoff_crowny_tree (README+dc.html 755줄+support.js). 4뷰(도메인 트리/레이어 클러스터/6561 포지션/맞춤 코스)+선점·맘 보드+상세 오버레이 스펙, 디자인 토큰(brand #3D2B1F·accent #C05B2E·canvas #F6F2EB).
  2. 연동 7서비스 실측: 오피스=docs.crowny.org/office(:4100)·투데이(:9604)·ERP=erp.crowny.org(:9938)·스페이스(:9607)·빌딩(:9605)·홀(:9606)·AI허브=crowny.org(:9852) 전부 200. 죽은 정본 아닌 포트(office:9090, enterprise:9700) 배제.
  3. 서버.한선 (sonnet 위임, crowny-space 골격 차용): 정적 서빙+/healthz+/api/seed+/api/live(7서비스 프로브, 15s 캐시)+/api/claim·claims(선점 PSV)+/api/position·positions(6561 좌표 통계)+감사 PSV. 컴파일 0에러, 재기동 PSV 재생 복원 검증.
  4. 앱.html (sonnet 위임): 2400줄 바닐라JS SPA — 4뷰+우측 상세패널+세부 오버레이(마일스톤·작업보드·병합게이트 6항목·의존성 양방향)+내 작업보드·맘 오버레이+검색/필터+토스트. 라이브 배지(30s 폴링)+선점 API/localStorage 오프라인퍼스트+해시 라우팅+모바일 바텀시트. 시드 보정: 연동 7서비스 url 필드.
  5. 앱.한선 동반: 포지션번호/포지션코드/코스선택/라이브별칭/선점판정(4상)/상태보상 — 파리티 시험 23/23 PASS, JS 교차 대조 일치. 학습 완료.
  6. 배포: LaunchAgent org.crowny.tree + gateway.yaml(FQDN 교정) + cert-manager add(SAN 발급) → 공개 HTTPS 4경로 200(ssl_verify 0) + 선점/포지션 종단 E2E PASS.
  7. 크라우니AI 앱 장착: crowny-ai-content.m 8지점(caOpenTreeInActiveTab·crowny://tree 별칭·AI홈 타일·v9 북마크·file:// 리매핑·caIsVectorService)+bundle/tree/app/index.html(MD5 일치). make ai 에러0.
  8. 게이트: 디자인대조.sh PASS(.toast 규격 360px·.tab→.vtab 개명·대조스펙 마커), 골격(doctype/charset), 크라우니디자인 apply(중앙CSS+data-crowny).

관련 파일

  • /Users/ef/crowny-tree/{서버.한선, 서버.toau, 앱.html, 앱.한선, data/시드.json}
  • /Users/ef/CrownyBrowser/native/crowny-ai-content.m (8지점) · bundle/tree/app/index.html
  • ~/Library/LaunchAgents/org.crowny.tree.plist · gateway.yaml crowny-tree 엔트리

발견 함정 (신규 기록)

  • crowny-ports.sh set 단축명 → gateway.yaml domain 단축 기록 → 한선GW FQDN 리터럴 매칭 실패. 교정: FQDN으로 set 또는 gw add. yaml 반영은 워커 부팅 시에만 — 고아 워커(부모=launchd)가 8080 독점하면 rolling 신워커 바인드 실패, 해당 PID 정리로 자동 충원.

잔여 이슈

  • GUI E2E(실클릭)는 포커스레이스 예방으로 보류(CLI 종단은 전부 실측).
  • 선점 사용자 인증(크라우니 ID 연동) — 현재 게스트ID+PSV.
  • 맘 적립 원장(양자블록체인서버)·월렛 지급 연동.
  • 6561.crowny.org 딥링크 도메인(프론트는 hostname 분기 준비됨, 도메인 미배선).

잔여 4건 완료 (2026-07-17 2차)

  1. 6561.crowny.org 딥링크: 한선GW는 aliases 미지원 → gateway.yaml 별도 엔트리(crowny-tree-6561)+cert 발급(crownybus.com 버킷 SAN)+sni-sync.sh(stunnel SNI 슬레이브)+Q감독 rolling. 공개 200(ssl 0), 프론트 hostname 분기로 6561 뷰 기본.
  2. 선점 인증(크라우니 ID): ★라이브 auth 정본=/Users/ef/crowny-data/auth/auth-server.js:9401 (/Users/ef/crowny-auth/server.js는 휴면 사본 — 위임 에이전트가 lsof로 적발). 계약: POST /api/login {username,password}→{ok,token,user:{username,displayName}} · GET /api/verify Bearer. tree 서버: /api/login 프록시 신설, /api/claim에 Bearer→verify(60s 캐시)→user 서버강제(사칭차단), 무토큰=게스트- 접두만 허용. 프론트: 로그인 오버레이+토큰 localStorage+Bearer 자동첨부+401 재로그인. 공개 실측: 오자격 401 passthrough·게스트 200·사칭 401·가짜토큰 401.
  3. 맘 원장 체인 앵커: chain.crowny.org:9729(크라우니체인) POST /api/tx {"type":"maum-claim",user,svc,item,kind,pts,on,ts} fire-and-forget(-m 2). 로컬 PSV=1차 원장, 체인=불변 앵커. 응답 anchor:1/0, 감사.psv에 anchor 행. 실측: mempool/txCount 증가 확인.
  4. GUI E2E(무탈취): 사용자 활동 중(유휴 0s)이라 포커스 개입 금지 → adopt(분산노티) → 라이브 CrownyAI 인스턴스에 crowny://tree 탭 생성 → 히스토리.celdb에 bundle/tree/app/index.html + 타이틀 "Crowny 생태계 트리" 기록(WKWebView DOM 로드·렌더 실증) + 북마크.celdb v9 시드 실재. evdrive(CGEventPostToPid) 마우스주입은 백그라운드 앱에서 OS 차단(도구 README 실측) — 픽셀 캡처는 창 닫힘 상태라 보류.

추가 발견

  • 운영 중 443 일시 000: 타 세션의 게이트웨이Q 재기동 여파(워커 크래시루프 21:20~21:23, stunnel 워치독 재기동) — 자연 복구 확인, 개입 안 함(멀티세션 규칙).
  • 서버측 토큰 화이트리스트(≤128자 영숫자._-)로 curl 인젝션 차단.

최종 상태

tree.crowny.org + 6561.crowny.org 공개 라이브(cert 유효), 인증·앵커 포함 전 API 종단 그린, crowny://tree 번들 최신(MD5 일치), 학습 2건 추가(서버 인증게이트·초판 서버).


3차: 폰트 보강 + 7단계 접근등급 차등 (2026-07-18)

폰트 (사장님 지적 "얇음")

원인=중앙 크라우니디자인.css의 Crowny Gothic 가변폰트 기본 400. 고특이성 규칙으로 본문 500·칩/버튼 700·카드제목/패널제목 800 상향(900 도배 없이 위계 유지). 스크린샷 재캡처 육안 확인.

7단계 등급 (0 오픈 / 1~4 티어 / 5 어드민 / 6 수퍼어드민)

  • 등급 SSOT=data/등급.psv(username|tier, 로그인 기본=티어1, 10s 캐시). 수퍼어드민 부트스트랩=파일 직접 편집(echo "아이디|6" >> data/등급.psv) — 소켓상대() 슬롯API 불일치로 localhost 판정 API는 의도적 생략.
  • 차등(서버 강제+프론트 잠금 UI): 오픈=조회 전용(게스트 선점 403 전환) / 티어1=선점2건·포지션 / 티어2=+제출·5건 / 티어3=+제안·prop선점·10건 / 티어4=+리뷰투표·무제한 / 어드민=승인(maum-award 앵커)·타인해제·전체조회 / 수퍼=등급부여·상태오버라이드(/api/seed 반영)·감사tail.
  • 리뷰 자동승인: approve 2표 누적→승인.psv+앵커(중복 방지).
  • 신규 API 13종, 자체시험 30/30, 프론트 하네스 21/21, 디자인대조 PASS, 공개 E2E(게스트403·me tier0·admin403·seed 오버라이드 반영) 실측.
  • 신규 VM 함정 2건 발견·가드레일 템플릿 반영: ①추가(배열,부수효과함수()) 무동작 ②_응답() 상태텍스트 표에 없는 코드는 상태줄 200으로 나감.
  • 실전 검증 덤: 캡처 중 투데이(9604) 실다운을 라이브 배지가 정확히 꺼짐으로 반영(연동 실증). 투데이 복구는 해당 트랙 소관.

남은 것

  • 수퍼어드민 실계정 지정(사장님: 등급.psv에 본인 크라우니ID 추가) 후 어드민 패널 실계정 육안 1회.

4차: 버튼 실배선 + 라이브러리 축적 + 타 서비스 디자인 통일 (2026-07-21)

A. 버튼 전수 실배선

  • 37개 data-act 전부 핸들러 존재 확인(무스텁). 유일 스텁이던 shareCourse(가짜 토스트)를 실배선: 현재 코스→실제 URL(?course=<aud>-<exp|build>) 생성+클립보드 복사. 신규 sharePos(?pos=<8자리>). 부팅 시 ?course=/?pos= 파싱→해당 뷰·좌표 복원(우선순위 #hash > 쿼리 > 6561 서브도메인 > 기본).
  • 검증: Node 하네스 부팅 성공+18/18 클릭 무예외, 디자인대조 PASS, 라이브 서빙 반영(마커6·공유링크 200).

B. 재사용 한선씨 라이브러리 3종 축적 (libs/)

tree 서버 검증 패턴을 공용화(다른 서비스도 가져오기):
  • 인증프록시.한선 — auth:9401 로그인/검증 프록시(토큰형식안전·Bearer추출·유저추출). 14/14 PASS(라이브 9401 오자격·무효토큰 실측).
  • 체인앵커.한선 — chain:9729 원장 앵커(앵커_전송/맘적립/선점, JSON이스케이프). 16/16 PASS(라이브 mempool 7→8).
  • 티어게이트.한선 — 7단계 PSV 등급(파싱/조회/이름/한도/충분/업서트). 22/22 PASS.
  • 전부 SELFTEST 환경변수 게이트로 가져오기 오염0. crownycode 학습 3종.

C. 타 서비스 디자인 통일 (16종)

crowny-{abti,bible,church,cowork,crew,edu,guide,hama,int,interior,christian,focus,hanseono,avis,defence,golden} 정적 index.html에 중앙 크라우니디자인 적용+레지스트리 등록(50→66행). 16/16 주입 검증(link1·data-crowny1·무손상), church/guide 렌더 육안 PASS. 이후 중앙CSS 1파일 수정=16서비스 일괄 반영.

VM 함정 심화 (가드레일 반영)

"추가(배열,부수효과함수()) 무동작"이 산술 누적에도 적용 확인: 통과 = 통과 + _단정(...)에서 _단정이 출력값()을 품으면 누적 유실(22개 중 1만 카운트). 해결=반환값 변수경유(변수 r = f()통과 = 통과 + r)+단정 순수화. 메모리 feedback_추가_부수효과함수_무동작 갱신.