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

크라우니캔버스 모먼트(moments.js) 고아 컴포넌트 수리

개요

크라우니캔버스(canvas.crowny.org:9620) D5 모듈 앱/화면/moments.jsCC.모먼트.보상팝업() / CC.모먼트.퇴근확인()이 정의만 되고 앱 어디서도 호출되지 않는 고아 컴포넌트였던 확증 결함(P2)을 근본 수리. 겸해 퇴근확인 다이얼로그의 실행작업 목록이 항목당 골드 솔리드 점을 반복 렌더해 "화면당 골드 솔리드 ≤2"(04-디자인-스펙) 규칙을 초과하던 구조도 함께 수리.

파일 소유권 제약(이 결함의 담당 범위 = 앱/화면/moments.js + 동반 한선씨/모먼트.한선만)에 따라 index.html/today.js/editor.js 등 다른 소유 파일은 전혀 건드리지 않고, moments.js 자신이 실행 중인 DOM에 실제 트리거를 자가 배선(self-mount)하는 방식으로 해결.

무엇을 했는지

  1. 골드 솔리드 초과 수리 — 퇴근확인 다이얼로그의 실행작업 목록 점(background:var(--골드)
솔리드)을 테두리만 있는 비솔리드 링(border:1.5px solid var(--골드);background:transparent) 으로 교체. 다이얼로그당 솔리드는 완료 체크마크 1개(+확정 버튼 1개, 별도 토큰 --골드버튼)로 고정 — 실행작업 개수와 무관해짐. 실측: 실행작업 3개 기준 솔리드 4개 → 1개로 감소.

  1. 1e 퇴근확인 실제 트리거 — moments.js가 로드 즉시 #cc-topbar .cc-right(모든 폼팩터
공통 존재)에 🌙 아이콘 버튼(#cc-dayclose-btn)을 자가 마운트. 클릭 → 브리핑 API에서 완료 작업 참고 조회 → CC.모먼트.퇴근확인({...}) 오픈 → 확인 시 실제 `CC.커맨드('space', 'day.close', {}, {...})` 실행(계약 §3 화이트리스트 커맨드, 감사.psv 기록 경유).

  1. 1d 보상팝업 실제 트리거 — 06-화면-설계-구체화 "트리거 = wiki.published 이벤트 settled"를
그대로 구현: CC.커맨드를 감싸 커맨드명 === 'wiki.publish'가 성공 settle되면 원장 (GET /api/원장?사용자=)에서 실측 적립액을 읽어 CC.모먼트.보상팝업(...)을 연다(서버.한선의 실제 100 CRD "위키발행보상" 이벤트와 파리티, 하드코딩 스텁 아님).

  1. 한선씨 파리티한선씨/모먼트.한선퇴근확인_골드솔리드개수·퇴근확인_화면솔리드총합·
위키발행보상_액수결정·퇴근트리거_실행작업개수 4개 함수 + 자체시험(MOMENTS_SELFTEST=1) 추가. STRICT 재컴파일 0경고, 자체시험 6/6 PASS.

실측 검증 (라이브 :9620, Chrome MCP)

  • 정적 감사: grep -rn "모먼트\.\(퇴근확인\|보상팝업\)(" 앱/ → moments.js 자체 내 실제
호출부 3건(368/432/438행) 확인 — 더 이상 주석뿐이 아님.
  • 서빙본(curl) = 로컬 소스 diff identical.
  • 🌙 버튼 실클릭 → 퇴근확인 다이얼로그 오픈 → 골드 솔리드 실측 1개(수리 전 4개) → "퇴근하기"
클릭 → 실제 POST /api/커맨드(day.close) 발생 확인(네트워크 로그).
  • CC.커맨드('wiki','wiki.publish',{제목,blockRef},...) 실호출(실 서버 200 성공) → 100~150ms
CC.모먼트.보상팝업 자동 오픈, 실측 원장 적립액(+100 CRD) 그대로 렌더 확인(스크린샷).
  • 보상팝업 다이얼로그 골드 솔리드 실측 0개(다이아몬드=그라데, 확인버튼=--골드버튼 별개 토큰).

관련 파일

  • /Users/ef/crowny-canvas/앱/화면/moments.js (수리 본체)
  • /Users/ef/crowny-canvas/한선씨/모먼트.한선 (파리티 함수 + 자체시험)
  • (읽기 전용 참조, 무수정) /Users/ef/crowny-canvas/앱/index.html, 한선씨/서버.한선,
한선씨/원장.한선, 한선씨/커넥터.한선

잔여 이슈 (별도 파일 소유권 — 이번 수리 범위 밖, 보고만)

  • CC.커맨드(공용.js)가 blockRef를 최상위로 전송하지 않음 — 서버.한선 _처리커맨드
blockRef를 본문 최상위 키로 요구(default-deny), 그런데 CC.커맨드{커넥터,커맨드,파라미터} 만 보냄. 결과: 파라미터 안에 우연히 "blockRef" 키를 넣지 않는 한 기존 모든 CC.커맨드 호출(today.js의 iot.entity.set/iot.scene.run, approval.js의 erp.approve/reject, 이번에 추가한 day.close 포함)이 예외 없이 400(blockRef 필수)을 받는다(실측). moments.js 소유 범위 밖이라 이번 수리에선 그대로 두되, CC.커맨드 자체를 감싼 내 wiki.publish 리스너는 구조상 정상 작동(성공 settle시에만 발화) — 위 사실은 F6/F12 트랙 담당에게 별도 보고 필요.