크라우니캔버스 — 모먼트 배선·CRD 배지·터치타깃 4건 확증 + blockRef 계약수리
개요
소유 파일(앱/화면/moments.js, 앱/index.html, 앱/bar.html) 대상 P2 확증 4건 점검. 실측 결과 3건은
이미 동일 날짜(2026-07-24) 병렬 세션이 완료해둔 상태였고, 신규로 발견한 blockRef 계약 위반 1건을
이번 세션에서 수리했다.
확증 결과 (재검증만, 코드변경 없음)
- 모먼트 배선(moments.js): CC.모먼트.보상팝업()/퇴근확인()이 상단바 자가 마운트(🌙 버튼)
+ CC.커맨드 래핑(wiki.publish 성공 settle 감지)으로 이미 실배선됨. 라이브 :9620 정적서빙과
로컬 파일 diff 동일 확인.
- CRD 배지(index.html): 부팅() 함수가 /api/부팅 후 /api/원장?사용자=<uid>를 별도 조회해
CC.스토어.사용자.잔액에 병합 → 사이드바 "N CRD" 배지 결선 이미 완료.
- 터치 타깃: bar.html .바-미니버튼 이미 48×48(라인56 주석: 시안 규정 04/06 문서 대조 확인).
index.html 모바일(≤767) .cc-icon-btn/.cc-profile 이미 var(--터치최소)=44px 적용(tokens.css:70).
신규 수리 — blockRef 계약 위반 (이번 세션)
- 문제: 【중요 계약 변경】(보안수리로 POST /api/커맨드 blockRef 필수, 서버.한선 _처리커맨드 400 게이트)에도
moments.js 퇴근열기()의
CC.커맨드('space','day.close',{}, {...}) 호출에 blockRef 누락 →
라이브에서 이 커맨드 클릭 시 즉시 400(대상 페이지가 없는 물리제어 커맨드라 blockRef 후보가 애매했던 것으로 추정).
- 수리: editor.js
_페이지id추정()과 동일 관례(CC.스토어.페이지트리[0].id 폴백, 없으면 'demo-1b')로
앵커블록레퍼런스() 헬퍼 추가 후 day.close 호출에
blockRef: 앵커블록레퍼런스() 주입.
- 동반: 한선씨/모먼트.한선에
앵커블록레퍼런스결정(페이지트리길이) 파리티 함수 + 자체시험 2건 추가.
MOMENTS_SELFTEST=1 실행 8/8 PASS(실측, 시스템 부하로 1차 40s timeout 오탐 → 90s 재검증 성공).
잔여/참고
- 공용.js
CC.커맨드는 POST 본문에 {커넥터,커맨드,파라미터}만 담고 opts.blockRef를 전혀
포워딩하지 않음(editor.js/approval.js는 opts.blockRef를 넘기지만 실제로는 무시당함) —
공용.js는 이 세션 소유 범위 밖이라 미수정. 다른 세션의 blockRef 계약수리 후속작업 필요
(그 전까진 wiki.publish/erp.* 등 모든 CC.커맨드 경유 커맨드가 400 위험).
- bar.html에 기존 하드코딩 hex(#D8CBAF, #FFFDF6, #FFF7EA)가 남아있으나, tokens.css(SSOT,
수정금지) 자신도 동일 컴포넌트(.토글)에 동일 리터럴을 그대로 쓰고 있어(라인143/145) 신규
불일치가 아님 — 대응 var가 SSOT에 없어 임의 토큰 신설은 보류. moments.js #FFF(체크마크 아이콘)도 동일 사유.
관련 파일
- /Users/ef/crowny-canvas/앱/화면/moments.js
- /Users/ef/crowny-canvas/한선씨/모먼트.한선
- /Users/ef/crowny-canvas/앱/index.html (재검증만)
- /Users/ef/crowny-canvas/앱/bar.html (재검증만)
- /Users/ef/crowny-canvas/앱/공용.js (원인 파악용 읽기만, 미수정)