아카이브 · 당시 기준

2026-10-17 보관. 2026-10-17 네 저장소 origin/main 대조 전 판. 미병합 PR 작업 보고서였던 본문을 현재 main의 Rust projection/align과 aippt 변환을 설명하는 규칙별 레퍼런스로 재구성했다. · projection 적용 순서 P5→P4→차트 열 제거→P6→P3→P7→P2, P3 name:value/빈 문자열 처리, align의 value 전용 처리와 이미 제거된 items: 접두를 구분했다. 본문과 자동 동기화 표는 보관 당시 내용입니다.

현재 기준과 원본 보기 → · 보관 목록
miricanvas-iui · PR #1458 유지 · 네 정책을 4개 독립 PR로 분리 완료 · MOR-2516 · 2026-10-17 갱신

MOR-2516 투영 규칙

저자 홍지혜(jhhong)

표 머리글·관계 설명·빈 문자열을 다루는 PR #1458은 유지했다. 문자열 P3(#1487), value의 「값:」(#1484), 평탄화 접두(#1485), 신호 필드 제외(#1486)를 각각 별도 PR로 만들어 원격에 반영했다. 네 PR은 모두 #1458의 같은 head에서 독립 분기하며 서로 의존하지 않는다. 로컬 검사는 모두 통과했고 GitHub CI·자동 리뷰 상태는 따로 표시한다.

어긋남 (의도) 정본과 다르게 동작한다. 정본을 고칠 대상이다 정본 없음 해당 동작을 정한 규칙이 없다 · 필요한 규칙은 정본에 보충한다 일치 정본대로다 열린 문제 정본 안에서 해석이 갈린다

작업 업데이트 · 2026-10-17 · 4개 독립 PR 생성 완료

네 정책을 각각 리뷰·머지할 수 있도록 분리하고 네 PR을 모두 생성했다. #1458의 문서 정정 head a5bb50d452가 공통 base이며, 실행 코드는 검증한 48cf4ed722와 같다. 네 PR의 GitHub base는 모두 fix/mor-2516-yaml-keys-in-replacement이고, 네 정책 PR끼리의 의존은 없다.

구분이 PR에 포함할 범위비교 기준과 상태
PR #1458 · 유지규칙 3 실제 표 머리글만 보존 · 규칙 7 관계의 desc만 이동 · 규칙 1b 빈 문자열 이동 제외main 기준 · 문서 정정 head a5bb50d452 · 실행 코드는 48cf4ed722와 동일
PR #1487 · 문자열 P3규칙 1만 — period·speaker·author·source·organization의 문자열 P3 접두 제거dfd5dbc37b · 로컬 Rust 893개 / TS 2,532개 통과·51개 skip · 원격 PR 생성 완료
PR #1484 · value 접두규칙 2만 — value 이동의 「값:」 접두 제거5716caeed6 · 로컬 Rust 890개 / TS 코드 변경 없음 · 추가 TS 실행 없음 · 원격 PR 생성 완료
PR #1485 · 평탄화 접두규칙 4만 — 평탄화한 줄의 필드 이름 접두 제거c9b8bbe331 · 로컬 Rust 891개 / TS 2,533개 통과·51개 skip · 원격 PR 생성 완료
PR #1486 · 신호 제외규칙 6만 — emphasis·weight·avatar 제외, 폴백 자리·별칭 호스트 보강 포함0e3e4fbb49 · 로컬 Rust 896개 / TS 2,533개 통과·51개 skip · 원격 PR 생성 완료
모든 PR 범위 밖규칙 5 측정값MOR-2769 future plan

기존 통합 PR 처리: PR #1483은 네 정책을 함께 담은 중간 결과다. 네 개별 PR로 대체했으며 CLOSED 상태를 확인했다.

대체된 통합 PR #1483의 기록 · a25e4eb267

PR #1483은 a25e4eb267로 원격에 생성했다가 네 개별 PR로 대체해 닫은 통합 PR이다. 실행 코드·골든은 그 이전 통합 head ca5d4c555와 바이트가 같고 빈 값 용량 사전 필터 테스트 1개를 추가했다. 아래 검사는 이 통합판의 기록이며, 네 개별 PR의 검사 결과가 아니다.

  • #1483 로컬 검증 통과. a25e4eb267에서 Rust 전체 897개(핵심 comp-frame-core 444개), TS 132파일 2,533개 통과·51개 skip을 확인했다. core Clippy(--all-targets -- -D warnings)·Rust fmt·format:check·앱 tsc도 통과했다. lint 오류 0건, 기존 경고 238건이다.
분리 전 통합판의 구현·검증 기록 · ca5d4c555

ca5d4c555는 분리 전 #1458에 커밋·푸시했던 통합 head다. 아래 결과는 그 판의 기록이며, 현재 #1458과 네 개별 PR의 상태는 위 표를 따른다.

  • High — 별칭 호스트의 신호 필드 제외. pass 1.5가 호스트에서 Marker만 빼던 누락을 고쳤다. emphasis·weight·avatar를 제외하고 일반 별칭 호스트를 계속 찾으며, 없으면 기존 items·폴백 경로로 본문을 옮긴다. 원인과 영향 · 수정 코드.
  • Low — 어댑터 머리말 정정. summary_projection.rs가 벤더 스냅샷을 바이트 그대로 둔다는 설명을 고쳤다. Rust는 루트 AGENTS.md의 MOR-2516 규칙을 따르고, TS 벤더의 값:·emphasis: true는 Eregion 수정 뒤 MOR-2776에서 sync 한다.
  • 회귀 검증. 신호 호스트를 건너뛴 본문이 items로 옮겨지는 경우와 뒤쪽 일반 별칭 호스트를 사용하는 경우를 추가했다. 두 테스트 모두 수정 전 실패·수정 후 통과를 확인했고, 사용자 본문의 콜론과 신호 슬롯의 blank도 검증한다. items 이동 테스트 · 일반 별칭 호스트 테스트.
  • 검사 결과. Rust 전체 cargo test 896개 통과, comp-frame-core Clippy(--all-targets -- -D warnings)·Rust fmt·저장소 format:check 통과. lint 오류 0건(기존 경고 238건), 앱 타입 검사 통과(WASM 생성물 연결 후). 별도 코드 리뷰에서도 추가 수정 사항이 없었다.

분석·구현·검증·PR 상태가 바뀔 때마다 관련 규칙과 작업 업데이트를 함께 갱신한다. 최초 통합판 문서 보관본.

#1458과 네 개별 PR을 읽는 기준

#1458은 규약에 맞추거나 빈 입력을 보강하는 변경이다. 실제 표 머리글과 사용자 본문의 콜론을 보존하고, 임의로 만든 열 N·관계 종류 접두와 빈 문자열만 제외한다. 비어 있지 않은 문자열의 period: 같은 접두는 이 PR에 남는다.

정책 PR 네 개는 서로 독립이다. 문자열 P3, value 접두, 평탄화 접두, 신호 제외를 각각 하나의 PR에서 다룬다. 모두 #1458의 a5bb50d452를 같은 출발점으로 삼으며, 다른 정책 PR을 base로 연쇄 연결하지 않는다. #1458 머지 후에는 각 PR의 base를 main으로 옮겨 해당 정책의 변경을 따로 리뷰한다.

규칙 카드의 전후 문구·사례·코드 위치·행 수는 분리 전 통합판 분석을 보존했다. 「분리 전 구현 기록」은 역사적 근거이며 현행 PR 소속을 뜻하지 않는다. 현재 번호·SHA·검증 상태는 위 작업 업데이트를 따른다.

한눈에 보기

#규칙전 → 후정본 대조사례분리 후 담당 PR정본 수정 티켓
1문자열 내용 필드는 값만 옮긴다
period · speaker · author · source · organization
period: 2018년 → 2018년어긋남 (의도)4PR #1487 · 문자열 P3
분리 전 구현 기록
MOR-2770 (§3.4 P3 수정)
1b빈 문자열 값은 옮기지 않는다 (보강)
period · speaker · author · source · organization 의 빈 값
빈 항목 '' · 빈 bullet * → 옮기지 않는다정본 없음1PR #1458
분리 전 구현 기록
빈 값 4c20fa1
MOR-2778 (버그 기록 · 정본 §3.4 P3 은 MOR-2770)
2value 이동에 「값:」을 붙이지 않는다
value (+ unit)
값: 70억원 → 70억원어긋남 (의도)—PR #1484 · value 접두
분리 전 구현 기록
MOR-2770
3표를 펼칠 때 실제 머리글만 남기고 「열 N」을 만들지 않는다
matrix 열 · entities+columns
열 4: 연락 → 연락 (실제 머리글 원인: 생활관리 는 그대로)일치
실제 머리글 보존
정본 없음
머리글 없음·빈 머리글 처리 — P4 보충 필요
1PR #1458
분리 전 구현 기록
열 N a18526f
P4 예외 규칙 보충 필요
머리글 없음·빈 머리글 → 값만 보존 · MOR-2779
4평탄화한 줄에 필드 이름을 붙이지 않는다
value · unit · period · … · values
value: 42% · values: 77 → 42% · 77열린 문제1PR #1485 · 평탄화 접두
분리 전 구현 기록
MOR-2777 (정본에 규칙을 적고 코드를 맞춘다)
5측정값 — 모든 PR 범위 밖
measure 의 min · max · target · delta · thresholds
target: 80 · threshold: 50 주의 (warn) → 그대로 (main 과 같다)어긋남 (의도) 정본 없음5— 모든 PR 범위 밖 (통합 첫 판에서 제외)MOR-2769 (future plan · 정본 §3.4 P5 포함)
6신호 필드는 글로 옮기지 않는다
emphasis · weight · avatar
true · weight: 0.2 · avatar: a.png → 실리지 않는다 (강조 슬롯이 있으면 빈 필드)어긋남 (의도) 열린 문제4PR #1486 · 신호 제외
분리 전 구현 기록
MOR-2770 (§2 머리 표) · MOR-2771 (§3.5 엣지 표)
7관계는 종류 없이 desc 만 옮긴다
relations (intersects · compares)
교집합: 겹치는 부분은… → 겹치는 부분은…일치2PR #1458
분리 전 구현 기록
관계 desc 2c8f63b
— (정본 수정 없음)

정본: mordor-wiki projects/mordor/visual-summary/spec/capability-table.md(5b5e3d7, 원격과 같은 내용)와 schema-v0.5.md. iUi 에서는 서브모듈 docs/mordor-wiki 다.

1

문자열 내용 필드는 값만 옮긴다

period · speaker · author · source · organization
전period: 2018년→ 후2018년

어디서 생기나

  • 정렬 — 후보에 그 슬롯이 없으면 items 로 옮긴다
    align.rs:718 move_field_into_items · text.rs:57 p3_text
  • 투영 P3 — fallback 도착이 그 필드를 안 읽는다
    visual_summary/projection.rs:440 move_unread_content

정본과 대조

어긋남 (의도)
mordor-wiki capability-table.md:286 · §3.4 P3
도착이 안 읽는 내용 필드는 그 entity 의 items 맨 뒤에 이름: 값 으로 붙인다.

정본대로면 period: 2018년 이 화면에 그대로 찍힌다. 필드 이름은 매핑 메타데이터(moves)에만 남긴다.

개별 PR 확정: PR #1487 · 문자열 P3 · dfd5dbc37b. 로컬 Rust 893개·TS 2,532개(51개 skip)와 관련 정적 검사를 통과했다. 신호 필드의 기존 접두를 보존하기 위해 p3_text를 유지했다. 아래 통합 이력의 삭제 커밋 48142fa는 이 개별 PR에 적용하지 않았다. GitHub CI·자동 리뷰 상태는 상단 작업 업데이트를 따른다.

2.6판에서 그려질 수 있는 행 — 2.6판에서 그 필드 슬롯이 없고 글 자리(label·items)가 있는 행 — 선언 카테고리 안에서: period(Timeline·ResumeCV) 1,837행, speaker 123행, author 922행, source 1,836행, organization 5,268행. 카테고리와 상관없이 세면 20만 행 안팎이다(검증기가 필드를 카테고리로 막지 않는다).

분리 후 담당: PR #1487 · 문자열 P3
분리 전 구현 기록

정본 수정 티켓: 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년"
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
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 고객 만족도 조사
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
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 고객 만족도 조사
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
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:
            - 편집기 성능 개선
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
items
* 브랜드 경험 설계
* organization: 미리디 디자인팀
* 브랜드 경험 설계
* 미리디 디자인팀
items
* 편집기 성능 개선
* organization: 미리디 개발팀
* 편집기 성능 개선
* 미리디 개발팀
1b

빈 문자열 값은 옮기지 않는다 (보강)

period · speaker · author · source · organization 의 빈 값
전빈 항목 '' · 빈 bullet * → 후옮기지 않는다

어디서 생기나

  • 정렬 — 슬롯 없는 필드를 items 로 옮길 때
    align.rs:718 move_field_into_items
  • 투영 P3
    visual_summary/projection.rs:440 move_unread_content
  • 용량 사전 필터
    capacity_prefilter.rs query_unit

정본과 대조

정본 없음

통합판에서 키를 떼고 값만 옮기자 빈 항목이 드러났다. 분리 후에는 접두 제거(규칙 1)와 독립적으로 빈 문자열 자체를 이동 대상에서 제외한다. 접두를 붙이기 전에 빈 값인지 검사하므로 접두 제거에 의존하지 않는다. 비어 있지 않은 값의 표기는 이 규칙이 바꾸지 않는다. 정본은 빈 값을 다루지 않는다.

MOR-2778. 이 사례만 전 = 분리 전 통합판의 보강 전 head cb3645e60, 후 = 접두 제거와 빈 값 보강이 함께 든 4634def6e다. #1458 단독 렌더는 아니다. 빈 bullet 이 붙으면 글상자가 목록 모양이 되어 왼쪽 위로 밀린다.

#1458 고정 근거: 정본 P3는 빈 값 처리를 명시하지 않는다. 접두를 붙이기 전 빈 값을 거르는 정렬, 투영, 용량 사전 필터를 같은 조건으로 맞췄다.

2.6판에서 그려질 수 있는 행 — 다섯 필드 중 하나라도 슬롯이 없고 items 가 있는 2.6판 행 174,648. 기간 슬롯 없는 Timeline 중 items 있는 행 1,461.

분리 후 담당: PR #1458
분리 전 구현 기록
빈 값 4c20fa1

정본 수정 티켓: 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:
            - 일본·대만
전
전 · cb3645e60
후
후 · 분리 전 통합판 4634def6e
슬롯전후
items
* 전체 공개
전체 공개
2

value 이동에 「값:」을 붙이지 않는다

value (+ unit)
전값: 70억원→ 후70억원

어디서 생기나

  • 투영 P3 — 도착이 value 를 안 읽는다
    visual_summary/projection.rs:440 move_unread_content

정본과 대조

어긋남 (의도)
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)로만 확인했다.

개별 PR 확정: PR #1484 · value 접두 · 5716caeed6. 로컬 Rust 890개(이 PR에서 TS 테스트 추가 실행 없음)와 관련 정적 검사를 통과했다. GitHub CI·자동 리뷰 상태는 상단 작업 업데이트를 따른다.

2.6판에서 그려질 수 있는 행 — 0 — 검색 경로에서 닿지 않는다.

분리 후 담당: PR #1484 · value 접두
분리 전 구현 기록

정본 수정 티켓: MOR-2770

이 규칙은 썸네일 사례가 없다.

3

표를 펼칠 때 실제 머리글만 남기고 「열 N」을 만들지 않는다

matrix 열 · entities+columns
전열 4: 연락→ 후연락 (실제 머리글 원인: 생활관리 는 그대로)

어디서 생기나

  • 평탄화 — 표 행을 글 줄로 편다
    visual_summary/summary_content.rs:389 cell_line
  • 투영 P4 — 도착이 matrix 를 못 읽는다
    visual_summary/projection.rs:398 unfold_matrix_rows

정본과 대조

일치
mordor-wiki capability-table.md:287 · §3.4 P4
… 첫 열이 label, 나머지 열이 열이름: 값 으로 items 에 들어간다.

머리글이 있는 열은 정본대로 열이름: 값 을 남긴다.

정본 없음

빈 머리글이나 대응하는 열 정의가 없는 여분 값의 표기는 정본이 다루지 않는다. 현재 구현은 지어낸 열 N 대신 값만 남긴다. 기존 P4와 충돌하지 않지만, 이 예외 처리를 정본이 이미 정한 것은 아니다.

#1458 고정 근거: 정본 P4의 실제 열이름: 값은 보존한다. 정본이 정하지 않은 빈 머리글·여분 열에서만 임의의 열 N을 만들지 않는 구현으로 보강했다.

2.6판에서 그려질 수 있는 행 — matrix 를 못 읽는 fallback·tier 3 도착(Versus·List·Steps·HighlightedMessage·LongForm·Timeline)의 items 행 118,431.

분리 후 담당: PR #1458
분리 전 구현 기록
열 N a18526f

정본 보충: P4 예외 규칙 명문화 필요 · MOR-2779

보충할 규칙: 실제 머리글이 있으면 열이름: 값을 유지하고, 머리글이 없거나 공백뿐이면 열 N이나 콜론을 생성하지 않고 값(단위가 있으면 단위 포함)만 보존한다. entities+columns 평탄화에도 같은 규칙을 명시해야 한다. 종전의 “정본 수정 없음”은 기존 규칙과 충돌하지 않는다는 뜻을 과도하게 단정한 표기였다. 정본 원문은 아직 수정하지 않았다.

사례

열 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:
          - [김종수, 연속 결석, 신앙 포기]
          - [김재희, 사유출석·인증, 생활관리, 연락]
          - [양기영, 인증·보고 문제, 보고체계 미흡]
          - [조부경, 대체예배, 개인 사정]
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
items
* 원인: 생활관리
* 열 4: 연락
* 원인: 생활관리
* 연락
4

평탄화한 줄에 필드 이름을 붙이지 않는다

value · unit · period · … · values
전value: 42% · values: 77→ 후42% · 77

어디서 생기나

  • 평탄화 — 중첩 peel·종단 N5·표 행·용량 계산이 쓰는 글 줄
    visual_summary/summary_content.rs:18 entity_lines

정본과 대조

열린 문제
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 이 이 변화를 잠근다.

개별 PR 확정: PR #1485 · 평탄화 접두 · c9b8bbe331. 로컬 Rust 891개·TS 2,533개(51개 skip)와 관련 정적 검사를 통과했다. GitHub CI·자동 리뷰 상태는 상단 작업 업데이트를 따른다.

2.6판에서 그려질 수 있는 행 — 종단 세 카테고리의 items 행 107,398. peel 자식은 어느 카테고리든 되므로 상한은 items 행 전체 174,648.

분리 후 담당: PR #1485 · 평탄화 접두
분리 전 구현 기록

정본 수정 티켓: 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곳
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
items
* 제조·유통 3곳
* 하반기 신규 계약
* value: 42건
* period: 2025 하반기
* 제조·유통 3곳
* 하반기 신규 계약
* 42건
* 2025 하반기
5

측정값 — MOR-2516 범위 밖

measure 의 min · max · target · delta · thresholds
전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 첫 판에서 키를 떼 봤지만 숫자만 남아 무엇이 목표인지 알 수 없어 뺐다. 당시 렌더 기준 4634def6e로 다시 돌려 결과 목록·순위·cost까지 당시 main과 같은 것을 확인했다. 아래는 그 통합판 기록이며, 분리 후 개별 PR의 재렌더 결과는 아니다. 표기를 정하는 일은 MOR-2769 future plan 이다. 운영 생성 프롬프트 V3 에는 KPI 타입이 없어 지금 운영 영향은 없다.

2.6판에서 그려질 수 있는 행 — items 행: Gauge 239, BigNumber 5,314, HighlightedMessage 10,266, List 69,014 (합집합 84,613).

담당 PR: — 모든 PR 범위 밖 (통합 첫 판에서 제외)

정본 수정 티켓: 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
지금
기존 렌더 · 당시 main과 통합판 동일 (모든 PR 범위 밖)

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
지금
기존 렌더 · 당시 main과 통합판 동일 (모든 PR 범위 밖)

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
지금
기존 렌더 · 당시 main과 통합판 동일 (모든 PR 범위 밖)

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
지금
기존 렌더 · 당시 main과 통합판 동일 (모든 PR 범위 밖)

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
지금
기존 렌더 · 당시 main과 통합판 동일 (모든 PR 범위 밖)
6

신호 필드는 글로 옮기지 않는다

emphasis · weight · avatar
전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 포함)
    frame.rs:72 Field::is_signal · align.rs:647 별칭 호스트 · capacity_prefilter.rs query_unit

정본과 대조

어긋남 (의도)
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·파일 이름이 찍혔다.

신호 제외 PR #1486에 포함한 리뷰 보강 — 신호 필드는 별칭 호스트로도 쓰지 않는다

적재는 FIELD_ORDER 순으로 같은 Text 노드의 첫 필드를 호스트로 잡는다. emphasis·weight가 speaker·author·source·organization보다 먼저 잡으면 본문 필드는 그 신호 슬롯의 별칭이 된다. pass 1.5는 쿼리 신호 필드를 걸렀지만 호스트에서는 Marker만 제외해, 일반 본문이 강조·가중치 칸에 들어갈 수 있었다.

호스트에도 !host.is_signal()을 적용했다. 신호 칸은 빈 필드로 남고, 본문은 다음 일반 별칭 호스트 또는 기존 items·폴백 경로를 따른다. 저장 데이터의 손상이 아니라 화면의 대치 위치가 잘못되는 문제다. 검색 후 용량 게이트는 정렬 결과를 다시 보므로 이번 누락으로 용량 초과 후보가 검사를 우회하는 것은 아니다.

개별 PR 확정: PR #1486 · 신호 제외 · 0e3e4fbb49. 로컬 Rust 896개·TS 2,533개(51개 skip)와 관련 정적 검사를 통과했다. GitHub CI·자동 리뷰 상태는 상단 작업 업데이트를 따른다.

2.6판에서 그려질 수 있는 행 — BigNumber 중 emphasis 슬롯 있음 158 / 없음 8,063, Pyramid 중 weight 슬롯 있음 2 / 없음 360, ProfileCard 중 avatar 슬롯 0 (글 자리 있는 행 7,284).

분리 후 담당: PR #1486 · 신호 제외
분리 전 구현 기록

정본 수정 티켓: 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:
            - 편집기 성능 개선
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
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: 분
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
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
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
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: "%"
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
label
* 신규 가입자
* emphasis: true
신규 가입자
7

관계는 종류 없이 desc 만 옮긴다

relations (intersects · compares)
전교집합: 겹치는 부분은…→ 후겹치는 부분은…

어디서 생기나

  • 정렬 — 관계 desc 를 그 유닛 items 뒤에 붙인다
    align.rs:1187 align_relations

정본과 대조

일치
mordor-wiki capability-table.md:290 · §3.4 P7
도착이 관계를 못 그리면 relation.desc 를 of 첫 항목의 items 맨 뒤로 보낸다

이번엔 코드가 정본에 맞춘 쪽이다. TS relationLines 는 2026-09-13 부터 이미 desc 만 옮겼고, Rust 정렬만 종류를 붙이고 있었다.

V3 가 실제로 만드는 relations 에서 나는 누출이라 운영 결과가 바뀐다.

#1458 고정 근거: 정본 P7이 지정한 relation.desc와 Rust 정렬의 이동 문구를 맞췄다. 관계 종류 접두를 덧붙이지 않는다.

2.6판에서 그려질 수 있는 행 — Versus·Venn 의 글 자리 행 3,128. 관계 desc 는 어느 후보의 items 에도 붙으니 상한은 글 자리 행 전체 205,288.

분리 후 담당: PR #1458
분리 전 구현 기록
관계 desc 2c8f63b

정본 수정 티켓: — (정본 수정 없음)

사례

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: 피해야 할 시작과 좋은 시작의 접근 방식을 비교한다.
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
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: 겹치는 부분은 문제해결력이다.
전
전 · 962dde1f5
후
후 · 분리 전 통합판 4634def6e
슬롯전후
label
* 끈기
* 교집합: 겹치는 부분은 문제해결력이다.
* 끈기
* 겹치는 부분은 문제해결력이다.

MOR-2516 수정이 바꾸지 않는 것

개별 PR 분리 결과와 다음 순서

썸네일은 분리 전 통합판의 역사적 비교다. 전 = 당시 origin/main 962dde1f5(1b만 cb3645e60), 후 = 별칭 리뷰 보강 전 4634def6e(18개 사례). 이후 통합 head ca5d4c555의 별칭 호스트 수정은 당시 회귀 테스트로 확인했다. 재분리한 개별 PR은 아직 재렌더하지 않았다. 두 판의 comp-pass-logic::run_document_search 를 2.6판 후보 풀(excluded=false)에 돌리고, comp-frame-client buildFrameReplacement 로 대치해 preview 렌더러로 그렸다(글자 축소 끔). 문서 제목(pageTitle)은 넘기지 않아 경계 밖 제목 자리는 임시 문구다 — 전·후 조건은 같다. 「V3 생성 기록」은 iui.visual_summary_generations 의 YAML 그대로, 「합성 문서」는 V3 가 만들지 않는 필드를 보이려고 손으로 쓴 최소 v0.5 문서다. 재현 스크립트: ~/Documents/miricanvas-iui-pr-assets/mor-2516/scripts/.