크라우니캔버스 /demo 멘션카드 필드 스키마 불일치 수리
개요
확증된 P2 결함:
/demo(:9620) Today 화면의 "미확인 멘션" 카드가 아바타를 항상 보라색 원 '?'로 표시하고 발신자 이름·채널을 전혀 렌더링하지 않음. 원인은 목데이터-소비 코드 간 필드명 스키마 불일치.
무엇을 했는지
재현: /Users/ef/crowny-canvas/앱/demo.js:65-68(브리핑.멘션=[{id,발신자,내용,시각}]) vs /Users/ef/crowny-canvas/앱/화면/today.js:169-190(멘션카드()가 m.이름/m.채널/m.색/m.내용 소비) — 필드명 불일치로 렌더 실패, 라이브 스크린샷으로 확인(아바타 '?', 이름/채널 라인 없음).
파일 소유권(demo.js + 동반 demo.한선)에 따라 목데이터 스키마를 소비측(today.js) 계약에 맞춰 수정: 발신자→이름, 시각은 유지하되 채널·색 신규 추가.
{id:'m1', 이름:'박진수', 채널:'#기획-CR720', 내용:'…', 색:'var(--프레즌스1)', 시각:'…'}
{id:'m2', 이름:'이민지', 채널:'#회의실예약', 내용:'…', 색:'var(--프레즌스2)', 시각:'…'}
색 값은 /Users/ef/crowny-canvas/앱/tokens.css의 기존 --프레즌스1/--프레즌스2 토큰 재사용(신규 하드코딩 없음).
동반 demo.한선에 필드 계약 주석 갱신(해당 파일은 멘션 개수 요약만 모델링, 필드 구조는 없어 로직 변경 불필요 — 문서 주석만 동기화).
today.js(계약상 화면 코드, 수정 금지 대상)는 무변경.검증
- STRICT 재컴파일:
CROWNY_STRICT=1 ./hanseonc_high 앱/demo.한선 → 경고 0, exit 0 (490 토큰, 2765 큐브).
- demo.js는 서버가 정적으로 서빙(재컴파일/재기동 불필요 확인,
curl :9620/demo.js로 신규 필드 즉시 반영 확인).
- Chrome MCP 라이브 재현:
http://localhost:9620/demo#/today 하드리로드 후 스크린샷 — "박진수 #기획-CR720"/"이민지 #회의실예약" 헤더 라인 + 보라/청색 이니셜 아바타(박/이) 정상 렌더. 수리 전 스크린샷 대비 결함 소멸 확인.
관련 파일
/Users/ef/crowny-canvas/앱/demo.js (수리 본체)
/Users/ef/crowny-canvas/앱/demo.한선 (동반 주석 갱신)
/Users/ef/crowny-canvas/앱/화면/today.js (소비측 계약, 무변경)
/Users/ef/crowny-canvas/docs/07-앱-계약.md, 00-작업계획서-에이전트디렉팅.md (참조)
잔여 이슈
today.js가 사용하지 않는 시각(per-item) 필드는 데모 데이터에 남겨둠 — 향후 다른 소비 코드가 생기면 계약 문서(§4 블록 JSON 등)에 멘션 아이템 스키마를 명시적으로 추가하는 편이 재발 방지에 유리(현재 07-앱-계약.md는 /api/브리핑 응답을 {생성시각, 할일[], 멘션[], 일정[]}까지만 정의하고 아이템 필드는 비정형).
- 부수 관찰(별개 이슈, 메모리 feedback_단일스레드crownyc_스톨블록_loopback처방과 일치): :9620 최초 요청 시 간헐적 스톨 재현됨(작업 중에는 curl 200 정상 응답, kickstart 불필요했음) — 이번 결함과 무관, 별도 트래킹 필요.