miricanvas-iui PR #1458 ·
MOR-2516 · head 4634def6e
대치 본문에 YAML 내부 키와 내부 토큰이 찍히지 않게 하려고 바꾼 규칙과 보강 하나(1b), 범위 밖으로 남긴 측정값(5)을 정리했다. 규칙마다 어느 단계에서 생기는지, 정본 규약 원문과 어디서 맞고 어디서 어긋나는지, 그리고 2.6판 컴포넌트에 실제로 대치해 그린 전후 썸네일을 같이 놓았다.
어긋남 (의도) 정본과 다르게 동작한다. 정본을 고칠 대상이다
정본 침묵 정본이 정하지 않은 자리라 구현이 정한다
일치 정본대로다
열린 문제 정본 안에서 해석이 갈린다
전period: 2018년→ 후2018년
정본과 대조
어긋남 (의도)mordor-wiki capability-table.md:286 · §3.4 P3
도착이 안 읽는 내용 필드는 그 entity 의 items 맨 뒤에 이름: 값 으로 붙인다.
정본대로면 period: 2018년 이 화면에 그대로 찍힌다. 필드 이름은 매핑 메타데이터(moves)에만 남긴다.
2.6판에서 그려질 수 있는 행 — 2.6판에서 그 필드 슬롯이 없고 글 자리(label·items)가 있는 행 — 선언 카테고리 안에서: period(Timeline·ResumeCV) 1,837행, speaker 123행, author 922행, source 1,836행, organization 5,268행. 카테고리와 상관없이 세면 20만 행 안팎이다(검증기가 필드를 카테고리로 막지 않는다).
고친 PR: PR #1458
정본 수정 티켓: MOR-2770 (§3.4 P3 수정)
사례
기간 슬롯이 없는 Timeline
V3 생성 기록
2.6판 13482509 · Group_2 · tier 1 · Timeline (투영 없음)
쿼리 YAML
version: "0.5"
title: 소프트웨어개발기록
components:
- type: TimelineSchedule.Timeline
structure:
entities:
- label: v1
period: "2018년"
- label: v2
period: "2019년"
- label: v3
period: "2024년"
| 슬롯 | 전 | 후 |
|---|
| items | period: 2018년 | 2018년 |
| items | period: 2019년 | 2019년 |
| items | period: 2024년 | 2024년 |
출처 슬롯이 없는 QuoteTestimonial
합성 문서
2.6판 13050011 · VStack_0 · tier 1 · QuoteTestimonial (투영 없음)
author 는 슬롯이 있어 제자리에 가고, source 만 옮겨진다.
쿼리 YAML
version: "0.5"
title: 고객 후기
components:
- type: Utterance.QuoteTestimonial
structure:
entities:
- label: 배송이 빠르고 포장이 꼼꼼해서 다음에도 이용하고 싶어요
author: 김민지
source: 2025 고객 만족도 조사
| 슬롯 | 전 | 후 |
|---|
| label | * 배송이 빠르고 포장이 꼼꼼해서 다음에도 이용하고 싶어요
* source: 2025 고객 만족도 조사 | * 배송이 빠르고 포장이 꼼꼼해서 다음에도 이용하고 싶어요
* 2025 고객 만족도 조사 |
QuoteTestimonial → HighlightedMessage (tier 2)
합성 문서
2.6판 13556260 · Group_8 · tier 2 · QuoteTestimonial → HighlightedMessage
author·source 슬롯이 둘 다 없는 Quote 304행만으로는 tier 1 결과가 0건이라 tier 2 로 그렸다.
쿼리 YAML
version: "0.5"
title: 고객 후기
components:
- type: Utterance.QuoteTestimonial
structure:
entities:
- label: 배송이 빠르고 포장이 꼼꼼해서 다음에도 이용하고 싶어요
author: 김민지
source: 2025 고객 만족도 조사
| 슬롯 | 전 | 후 |
|---|
| items | author: 김민지 | 김민지 |
| items | source: 2025 고객 만족도 조사 | 2025 고객 만족도 조사 |
organization 슬롯이 없는 ProfileCard
합성 문서
2.6판 13514020 · HStack_1 · tier 1 · ProfileCard (투영 없음)
쿼리 YAML
version: "0.5"
title: 프로젝트 팀 소개
components:
- type: PortraitProfile.ProfileCard
structure:
entities:
- label: 김하늘
organization: 미리디 디자인팀
items:
- 브랜드 경험 설계
- label: 이도윤
organization: 미리디 개발팀
items:
- 편집기 성능 개선
| 슬롯 | 전 | 후 |
|---|
| items | * 브랜드 경험 설계
* organization: 미리디 디자인팀 | * 브랜드 경험 설계
* 미리디 디자인팀 |
| items | * 편집기 성능 개선
* organization: 미리디 개발팀 | * 편집기 성능 개선
* 미리디 개발팀 |
전빈 항목 '' · 빈 bullet * → 후옮기지 않는다
어디서 생기나
- 정렬 — 슬롯 없는 필드를 items 로 옮길 때
align.rs:718 move_field_into_items
- 투영 P3
visual_summary/projection.rs:440 move_unread_content
- 용량 사전 필터
capacity_prefilter.rs query_unit
정본과 대조
정본 침묵키를 떼고 값만 옮기면서 새로 생긴 자리다. 예전에는 period: 라는 글이라 빈칸이 생기지 않았다. 정본은 빈 값을 다루지 않는다.
MOR-2778. 이 사례만 전 = 보강 전 PR head cb3645e60, 후 = 보강 뒤다. 빈 bullet 이 붙으면 글상자가 목록 모양이 되어 왼쪽 위로 밀린다.
2.6판에서 그려질 수 있는 행 — 다섯 필드 중 하나라도 슬롯이 없고 items 가 있는 2.6판 행 174,648. 기간 슬롯 없는 Timeline 중 items 있는 행 1,461.
고친 PR: PR #1458
정본 수정 티켓: MOR-2778 (버그 기록 · 정본 §3.4 P3 은 MOR-2770)
사례
기간 슬롯이 없는 Timeline 에 period ""
합성 문서
2.6판 13579287 · Graph_1 · tier 1 · Timeline (투영 없음)
바뀐 칸 근처만 잘라 그렸다.
쿼리 YAML
version: "0.5"
title: 서비스 출시 일정
components:
- type: TimelineSchedule.Timeline
structure:
entities:
- label: 베타 오픈
period: "2025년 3월"
items:
- 초대 사용자 대상
- label: 정식 출시
period: ""
items:
- 전체 공개
- label: 해외 진출
period: "2026년"
items:
- 일본·대만
2value 이동에 「값:」을 붙이지 않는다
value (+ unit)
전값: 70억원→ 후70억원
정본과 대조
어긋남 (의도)mordor-wiki capability-table.md:286 · §3.4 P3
… items 맨 뒤에 이름: 값 으로 붙인다.
검색 경로에서는 닿지 않는다. ① value 를 reads.content 로 선언한 카테고리는 BigNumber(measure?)·Gauge(measure) 둘뿐이다(vocab.json 45종·kernel 41종). ② 선택 dataset 도 dataset 을 가진 것으로 보니(capability_data.rs:136 has_dataset) value 를 안 읽는 도착은 measure 도 못 읽어 P5 가 늘 같이 걸린다(projection.rs:80-83). ③ P5 가 걸리면 unread 에서 Value·Unit 을 지운다(projection.rs:224-228). BigNumber↔Gauge 는 서로 value 를 읽어 unread 가 아니다. 그래서 썸네일 사례가 없고, 단위 테스트(p3_merges_unread_value_and_unit_into_one_line·p3_keeps_unit_when_only_value_is_unread)로만 확인했다.
2.6판에서 그려질 수 있는 행 — 0 — 검색 경로에서 닿지 않는다.
고친 PR: PR #1458
정본 수정 티켓: MOR-2770
이 규칙은 썸네일 사례가 없다.
전열 4: 연락→ 후연락 (실제 머리글 원인: 생활관리 는 그대로)
정본과 대조
일치mordor-wiki capability-table.md:287 · §3.4 P4
… 첫 열이 label, 나머지 열이 열이름: 값 으로 items 에 들어간다.
머리글이 있는 열은 정본대로 열이름: 값 을 남긴다.
정본 침묵머리글이 없는 열(칸 수가 열 머리보다 많은 행)은 정본이 다루지 않는다. 지어낸 열 N 대신 값만 남긴다.
2.6판에서 그려질 수 있는 행 — matrix 를 못 읽는 fallback·tier 3 도착(Versus·List·Steps·HighlightedMessage·LongForm·Timeline)의 items 행 118,431.
고친 PR: PR #1458
정본 수정 티켓: — (정본 수정 없음)
사례
열 3개짜리 표에 칸 4개인 행 (ListingTable → List)
V3 생성 기록
2.6판 13625758 · VStack_19 · tier 2 · ListingTable → List
바뀐 칸 근처만 잘라 그렸다.
쿼리 YAML
version: "0.5"
title: 출결 원인 분석
components:
- type: Enumeration.ListingTable
structure:
entities:
- label: 출결 원인 분석
items:
- 🔴 신앙 포기
- 🟠 생활관리 및 기질
- 🟡 보고체계 미흡
- 🟢 개인사정
dataset:
shape: matrix
columns:
- label: 대상
role: category
- label: 주요 내용
role: category
- label: 원인
role: category
rows:
- [김종수, 연속 결석, 신앙 포기]
- [김재희, 사유출석·인증, 생활관리, 연락]
- [양기영, 인증·보고 문제, 보고체계 미흡]
- [조부경, 대체예배, 개인 사정]
| 슬롯 | 전 | 후 |
|---|
| items | * 원인: 생활관리
* 열 4: 연락 | * 원인: 생활관리
* 연락 |
전value: 42% · values: 77→ 후42% · 77
정본과 대조
열린 문제schema-v0.5.md:956 · 8.7절 예시
위 예시가 평탄화되면 1분기 항목의 items 가 [신규 계약 12건, 매출 12억원] 이 된다
정본은 「중첩은 평탄화된다」(:115)까지만 규칙으로 적고 줄 표기는 정하지 않았다. 다만 예시는 { label: 매출, value: 12, unit: 억원 } 을 매출 12억원 한 줄로 적는다. MOR-2516 수정은 키만 뗐고, label 과 값은 여전히 두 줄(매출 · 12억원)로 나눈다 — 예시와 다르다.
화면에는 중첩 컴포넌트를 벗길 때(peel)와 종단(List 등)으로 내려갈 때 보인다. 골든 nested.json·summary_content.json 이 이 변화를 잠근다.
2.6판에서 그려질 수 있는 행 — 종단 세 카테고리의 items 행 107,398. peel 자식은 어느 카테고리든 되므로 상한은 items 행 전체 174,648.
고친 PR: PR #1458
정본 수정 티켓: MOR-2777 (정본에 규칙을 적고 코드를 맞춘다)
사례
중첩 컴포넌트를 벗기는 peel (stage N3)
합성 문서
2.6판 13631655 · VStack_3 · tier 1 · List (투영 없음)
안쪽 컴포넌트의 value·period 가 부모 items 줄로 펼쳐진다.
쿼리 YAML
version: "0.5"
title: 하반기 영업 성과
components:
- type: TimelineSchedule.Timeline
structure:
entities:
- label: 하반기 신규 계약
period: "2025 하반기"
value: 42
unit: 건
components:
- type: Enumeration.List
structure:
entities:
- label: 대기업
items:
- 제조·유통 3곳
- label: 중견기업
items:
- IT 서비스 12곳
| 슬롯 | 전 | 후 |
|---|
| items | * 제조·유통 3곳
* 하반기 신규 계약
* value: 42건
* period: 2025 하반기 | * 제조·유통 3곳
* 하반기 신규 계약
* 42건
* 2025 하반기 |
전target: 80 · threshold: 50 주의 (warn)→ 후그대로 (main 과 같다)
어디서 생기나
- 쿼리 Frame 구성 — tier 1 에서도 부속값을 items 로 편다 (Frame 에 min·target 칸이 없다)
query_frame.rs:429 build_frame_for_structure → summary_content.rs:241 materialize_measure
- 투영 P5 — measure 를 못 읽는 도착 (→ HighlightedMessage·List)
visual_summary/projection.rs:133 · :518 threshold_line
- 투영 — measure 가 남는 엣지 (Gauge → BigNumber)
visual_summary/projection.rs:244 move_unread_measure_fields · summary_projection.rs:96 drop_thresholds
정본과 대조
어긋남 (의도)mordor-wiki capability-table.md:288 · §3.4 P5
measure 를 못 읽는 곳으로 가면 value 와 unit 을 entity 로 옮긴다. 나머지 필드는 P3 을 따른다
P3 을 따르니 정본대로면 target: 80 이다. fallback 엣지(P5·Gauge→BigNumber)는 이 조항과 어긋난다.
정본 침묵tier 1(Gauge → Gauge)에서 부속값이 items 글이 되는 것은 정본이 다루지 않는다. §3.4 는 「fallback 은 카테고리를 바꾸는 일이므로」 엣지만 말한다. Frame 에 measure 칸이 없어 생긴 구현 사정이다.
Gauge 타입 처리라 MOR-2516 범위 밖으로 남겼다. PR #1458 첫 판에서 키를 떼 봤지만 숫자만 남아 무엇이 목표인지 알 수 없어 뺐다. 최종 head 로 다시 돌려 결과 목록·순위·cost 까지 main 과 같은 것을 확인했다. 아래는 지금 상태다. 표기를 정하는 일은 MOR-2769 future plan 이다. 운영 생성 프롬프트 V3 에는 KPI 타입이 없어 지금 운영 영향은 없다.
2.6판에서 그려질 수 있는 행 — items 행: Gauge 239, BigNumber 5,314, HighlightedMessage 10,266, List 69,014 (합집합 84,613).
고친 PR: — 범위 밖 (PR #1458 첫 판에서 뺐다)
정본 수정 티켓: MOR-2769 (future plan · 정본 §3.4 P5 포함)
사례
Gauge → Gauge, fallback 없음
합성 문서
2.6판 12821819 · VStack_2 · tier 1 · Gauge (투영 없음)
쿼리 YAML
version: "0.5"
title: 상반기 목표 달성률
components:
- type: KPIKeyMetric.Gauge
structure:
entities:
- label: 상반기 목표 달성률
dataset:
shape: measure
value: 87
unit: "%"
min: 0
max: 100
target: 80
Gauge → BigNumber (tier 2)
합성 문서
2.6판 13602576 · Group_7 · tier 2 · Gauge → BigNumber
쿼리 YAML
version: "0.5"
title: 상반기 목표 달성률
components:
- type: KPIKeyMetric.Gauge
structure:
entities:
- label: 상반기 목표 달성률
dataset:
shape: measure
value: 87
unit: "%"
min: 0
max: 100
target: 80
Gauge → BigNumber 의 임계값
합성 문서
2.6판 13606965 · VStack_2 · tier 2 · Gauge → BigNumber
쿼리 YAML
version: "0.5"
title: 서버 사용률
components:
- type: KPIKeyMetric.Gauge
structure:
entities:
- label: CPU 사용률
dataset:
shape: measure
value: 72
unit: "%"
min: 0
max: 100
thresholds:
- at: 50
label: 주의
state: warn
- at: 90
label: 위험
state: danger
Gauge → HighlightedMessage (P5)
합성 문서
2.6판 13579650 · Group_3 · tier 2 · Gauge → HighlightedMessage
쿼리 YAML
version: "0.5"
title: 상반기 목표 달성률
components:
- type: KPIKeyMetric.Gauge
structure:
entities:
- label: 상반기 목표 달성률
dataset:
shape: measure
value: 87
unit: "%"
min: 0
max: 100
target: 80
Gauge → List (P5)
합성 문서
2.6판 13636373 · VStack_2 · tier 2 · Gauge → HighlightedMessage
쿼리 YAML
version: "0.5"
title: 상반기 목표 달성률
components:
- type: KPIKeyMetric.Gauge
structure:
entities:
- label: 상반기 목표 달성률
dataset:
shape: measure
value: 87
unit: "%"
min: 0
max: 100
target: 80
전true · weight: 0.2 · avatar: a.png→ 후실리지 않는다 (강조 슬롯이 있으면 빈 필드)
어디서 생기나
- 투영 P3 — 도착이 안 읽으면 버린다
visual_summary/projection.rs:440 move_unread_content
- 평탄화 — 줄로 내지 않는다
visual_summary/summary_content.rs:18 entity_lines
- 정렬 — 같은 슬롯·별칭·items 이동 어디에도 싣지 않는다 (tier 1 포함)
align.rs:220 is_signal_field · capacity_prefilter.rs:256
정본과 대조
어긋남 (의도)mordor-wiki capability-table.md:65 · §2 머리 표
선택 내용 — period, weight, speaker, author, source, avatar, organization, children … → 옮긴다 (P3, P7)
mordor-wiki capability-table.md:315–317 · §3.5
BigNumber → List | value, unit, delta, emphasis 가 items 로 간다
mordor-wiki capability-table.md:389–391 · §3.5
ProfileCard → List | avatar, organization
mordor-wiki capability-table.md:392·394 · §3.5
Pyramid → List·Staircase | weight 가 items 로 간다
열린 문제mordor-wiki capability-table.md:393 · §3.5
Pyramid → NestedScope | weight 는 표현 선택이라 버린다
정본 안에서 weight 가 엣지마다 다르게 적혀 있다. MOR-2516 수정은 늘 버린다.
schema-v0.5.md:51
강조(Element.Highlight)는 대치가 내용으로 채우는 노드 … entity.emphasis 가 담는다
강조 노드를 비울지, 강조된 entity 의 내용을 실을지는 정본 해석이 갈린다. MOR-2516 수정은 비운다(임시 문구).
2.6판에는 avatar 슬롯이 0행, weight 3행, emphasis 165행뿐이라 거의 늘 items 로 흘러 true·0.8·파일 이름이 찍혔다.
2.6판에서 그려질 수 있는 행 — BigNumber 중 emphasis 슬롯 있음 158 / 없음 8,063, Pyramid 중 weight 슬롯 있음 2 / 없음 360, ProfileCard 중 avatar 슬롯 0 (글 자리 있는 행 7,284).
고친 PR: PR #1458
정본 수정 티켓: MOR-2770 (§2 머리 표) · MOR-2771 (§3.5 엣지 표)
사례
ProfileCard 의 avatar
합성 문서
2.6판 13470888 · VStack_4 · tier 1 · ProfileCard (투영 없음)
organization 은 슬롯이 있어 제자리에 간다.
쿼리 YAML
version: "0.5"
title: 프로젝트 팀 소개
components:
- type: PortraitProfile.ProfileCard
structure:
entities:
- label: 김하늘
organization: 미리디 디자인팀
avatar: avatar-kim.png
items:
- 브랜드 경험 설계
- label: 이도윤
organization: 미리디 개발팀
avatar: avatar-lee.png
items:
- 편집기 성능 개선
| 슬롯 | 전 | 후 |
|---|
| items | * 브랜드 경험 설계
* avatar: avatar-kim.png | 브랜드 경험 설계 |
| items | * 편집기 성능 개선
* avatar: avatar-lee.png | 편집기 성능 개선 |
강조 슬롯이 있는 BigNumber
합성 문서
2.6판 12793308 · VStack_2 · tier 1 · BigNumber (투영 없음)
강조 칸에 true 가 찍히던 것이 빈 필드(임시 문구 「강조」)가 된다.
쿼리 YAML
version: "0.5"
title: 3분기 핵심 지표
components:
- type: KPIKeyMetric.BigNumber
structure:
entities:
- label: 신규 가입자
value: 1200
unit: 명
- label: 재방문율
value: 64
unit: "%"
emphasis: true
- label: 평균 체류 시간
value: 12
unit: 분
| 슬롯 | 전 | 후 |
|---|
| emphasis | true | (빈 필드 · 임시 문구) |
weight 슬롯이 없는 Pyramid
합성 문서
2.6판 13616844 · Group_5 · tier 1 · Pyramid (투영 없음)
쿼리 YAML
version: "0.5"
title: 학습 단계
components:
- type: Hierarchy.Pyramid
structure:
entities:
- label: 응용
weight: 0.2
- label: 이해
weight: 0.5
- label: 기억
weight: 0.8
| 슬롯 | 전 | 후 |
|---|
| label | * 응용
* weight: 0.2 | 응용 |
| label | * 이해
* weight: 0.5 | 이해 |
| label | * 기억
* weight: 0.8 | 기억 |
강조 슬롯이 없는 BigNumber
합성 문서
2.6판 13549097 · VStack_4 · tier 1 · BigNumber (투영 없음)
emphasis: true 가 items 에 붙던 것이 사라진다.
쿼리 YAML
version: "0.5"
title: 3분기 핵심 지표
components:
- type: KPIKeyMetric.BigNumber
structure:
entities:
- label: 신규 가입자
value: 1200
unit: 명
emphasis: true
- label: 재방문율
value: 64
unit: "%"
| 슬롯 | 전 | 후 |
|---|
| label | * 신규 가입자
* emphasis: true | 신규 가입자 |
전교집합: 겹치는 부분은…→ 후겹치는 부분은…
정본과 대조
일치mordor-wiki capability-table.md:290 · §3.4 P7
도착이 관계를 못 그리면 relation.desc 를 of 첫 항목의 items 맨 뒤로 보낸다
이번엔 코드가 정본에 맞춘 쪽이다. TS relationLines 는 2026-09-13 부터 이미 desc 만 옮겼고, Rust 정렬만 종류를 붙이고 있었다.
V3 가 실제로 만드는 relations 에서 나는 누출이라 운영 결과가 바뀐다.
2.6판에서 그려질 수 있는 행 — Versus·Venn 의 글 자리 행 3,128. 관계 desc 는 어느 후보의 items 에도 붙으니 상한은 글 자리 행 전체 205,288.
고친 PR: PR #1458
정본 수정 티켓: — (정본 수정 없음)
사례
Versus 의 compares
V3 생성 기록
2.6판 13209109 · HStack_0 · tier 1 · Versus (투영 없음)
쿼리 YAML
version: "0.5"
title: 시작 방식의 비교
components:
- type: AttributeComparison.Versus
structure:
entities:
- label: 피해야 할 시작
items:
- "회사소개를 길게 하는 것"
- "통화 가능 여부부터 묻는 것"
- "정책자금·상품 설명부터 하는 것"
- label: 좋은 시작
items:
- "정책자금 신청 건 먼저 언급"
- "연락 목적을 짧게 설명"
- "바로 확인 질문으로 연결"
relations:
- type: compares
of: [피해야 할 시작, 좋은 시작]
desc: 피해야 할 시작과 좋은 시작의 접근 방식을 비교한다.
| 슬롯 | 전 | 후 |
|---|
| items | * 정책자금·상품 설명부터 하는 것
* 비교: 피해야 할 시작과 좋은 시작의 접근 방식을 비교한다. | * 정책자금·상품 설명부터 하는 것
* 피해야 할 시작과 좋은 시작의 접근 방식을 비교한다. |
List 의 intersects
V3 생성 기록
2.6판 13634877 · VStack_2 · tier 1 · List (투영 없음)
쿼리 YAML
version: "0.5"
title: 끈기와 적응력
components:
- type: Enumeration.List
structure:
entities:
- label: 끈기
- label: 적응력
relations:
- type: intersects
of: [끈기, 적응력]
desc: 겹치는 부분은 문제해결력이다.
| 슬롯 | 전 | 후 |
|---|
| label | * 끈기
* 교집합: 겹치는 부분은 문제해결력이다. | * 끈기
* 겹치는 부분은 문제해결력이다. |
- 코드가 지어내는 채움 글 — 표 머리 행
항목·속성 N·본문 N, 채움말 값 없음·내용, 깊이 들여쓰기. 키 누출이 아니라 「빈 자리를 무엇으로 채우나」의 문제라 따로 정한다(MOR-2768).
- TS 벤더
eregion/visual-summary/projection.ts — Eregion(aippt-prisonbreak src/lib/visual-summary/projection.ts)에서 복사해 오는 파일이라 손대지 않았다(sync-eregion --check 38개 일치). 아직 옛 표기(값:·emphasis: true)다. iUi capabilityCheck 에서만 돌아 화면에는 영향이 없다. Eregion 에서 고친 뒤 sync 하는 일은 MOR-2776 이다.
이번에 같이 반영한 것
- 벤더
projection.ts·projection.test.ts 를 main 그대로 두고, TS·Rust 골든 대조 테스트는 Eregion 반영 뒤로 미뤘다.
- 규칙 6 보강 — 옮길 글을 둘 자리(
append_to_fallback_slot·fallback_slot)의 후보에서 신호 필드 슬롯을 뺐다.
- 규칙 1b — 빈 문자열 값은 옮기지 않는다.
- 정리 —
Field::is_signal, Rust p3_text 제거(동작 같음).
- 측정값(규칙 5) 수정은 범위 밖이라 뺐다 — MOR-2769 future plan.