아카이브 · 당시 기준

2026-10-18 보관. PR 작업·전후 사례 중심의 기존 구성을 복원하면서, 별도로 작성했던 origin/main 코드 대조 내용을 보존했습니다. 본문과 자동 동기화 표는 보관 당시 내용입니다.

현재 기준과 원본 보기 → · 보관 목록

← 미리디 기술 사전

origin/main 코드 기준 · 2026-10-18 · 저자 홍지혜(jhhong) · 이전판

MOR-2516 투영 규칙 · main 기준

필드 이름이 화면에 새어 나오는 자리를 카테고리 투영·슬롯 정렬·평탄화로 나누어 읽는다. 2026-10-17의 origin/main에는 이전 판이 설명한 접두 제거·신호 제외 정책이 아직 들어 있지 않다.

진행 중인 PR 작업은 main 구현과 분리해 읽습니다. 갱신 직전 작업 기록에는 빈 문자열 정책의 추가 분리(MOR-2778), 머리글 예외의 정본 보충(MOR-2779)이 추가돼 있었습니다. 이 기록과 각 PR 상태·실험 썸네일은 상단의 이전판에 그대로 보관했습니다. 이번 main 대조는 해당 PR의 진행 상태를 덮어 쓰는 판정이 아닙니다.

현재 기준과 이전 작업 기록

이 문서는 iui bcd1d0218766cbba3a174d1819ab218d613e626f, 위키 a0f8b01961db9396206b1ddf097c66cb44bde137, aippt e6ffa4bdf65ec76f3d3031dc566f3fc7c19eade1의 고정 트리를 읽었다. PR 생성·CI 통과와 main 반영은 별개다. 이전 판의 18개 썸네일은 4634def6e 통합 실험 결과이며 현재 main 렌더로 재사용하지 않는다.

현재 코어는 Rust comp-frame-core다. 아래 예시는 해당 함수에서 만들어지는 텍스트를 설명한 것이며, 이번 갱신에서 DB 검색이나 렌더를 다시 실행한 결과가 아니다. 투영 규칙 계산 ↗ · 정렬 이동 ↗

어느 단계가 문구를 만드는가

1 · 투영fallback 목적지의 reads에 맞춰 구조를 바꾼다. P3·P4·P5·P7이 내용 이동을 만든다.
2 · 정렬같은 카테고리여도 후보에 슬롯이 없으면 다른 자리로 옮긴다. 투영이 없어도 접두가 생긴다.
3 · 평탄화중첩 peel·종단 fallback·표 행 변환이 글 줄을 만든다. 같은 value라도 이 경로는 value:를 쓴다.

P1~P7은 단순 번호순 실행이 아니다. 실제 코드는 P5 → P4 → 차트 열 속성 제거 → P6 → P3 → P7 → P2 마무리 순서다. 실행 순서 ↗ · 규약 §3.4 ↗

일곱 규칙의 현재 동작

규칙대상main 동작규약 대조
1문자열 내용 필드period: 2018년처럼 이름이 남는다.P3와 일치
1b빈 문자열period: 도 만들어질 수 있다. 빈 값 제외 보강은 main에 없다.규약이 빈 값 정책을 명시하지 않음
2value 이동투영은 값: 70억원, 정렬의 value 이동은 값만 앞에 둔다.단계별 차이
3표 머리글실제 열 이름을 보존하며, 보강 평탄화에서 없는 열은 열 N을 만든다.실제 이름은 P4, 합성 이름은 구현 보강
4평탄화value:·period:·values: 접두가 남는다.중첩 예시와 줄 표기 차이
5measuremin·max·target·delta·threshold를 설명 줄로 남긴다.별도 정책 항목
6신호 필드emphasis·weight·avatar를 일괄 제외하지 않는다.현행 reads.content 기반
7관계 설명P7은 desc만, Rust 정렬은 교집합:·비교:를 붙인다.정렬은 P7 문구와 다름

1 · 문자열 내용 필드 — 접두가 남는다

도착이 읽지 않는 period·speaker·author·source·organization은 items 뒤에 이름: 값으로 붙는다. 이는 최신 위키 P3와 같다. 슬롯 정렬도 p3_text를 써서 같은 접두를 만든다. 기존 items 자체를 label로 보내는 경로는 이미 접두를 제거해 items:를 붙이지 않는다.

period: "2018년" → items: ["period: 2018년"]
items: ["브랜드 경험 설계"] → label 뒤에 "브랜드 경험 설계"

P3 구현 ↗ · 정렬 P3 ↗ · items 이동 예외 ↗

1b · 빈 문자열 — 아직 이동 대상이다

P3의 take_text_field는 값이 Some("")여도 꺼내고, 정렬은 모은 문자열에 접두를 붙인다. 따라서 비어 있는 period가 실제 내용처럼 보이거나 목록 표기에 영향을 줄 수 있다. 규약은 빈 값의 처리를 명시하지 않는다. 이전 #1458의 빈 값 제외 결과를 현재 동작이라고 읽으면 안 된다. 문자열 추출 ↗ · 정렬 입력 수집 ↗

2 · value — 투영과 정렬의 표기가 다르다

P3 투영은 unread인 value와 unit을 합쳐 값: 70억원으로 옮긴다. unit을 목적지가 읽으면 unit은 원래 칸에 남고 value만 이동한다. 정렬은 value를 특례로 다뤄 items 첫 슬롯 앞에 값 자체를 둔다. 값: 제거 정책은 main에 반영되지 않았다. 투영 value ↗ · 정렬 value 특례 ↗

다만 선언된 카테고리의 실제 fallback에서는 measure의 P5가 함께 걸리면 value·unit이 P3 대상에서 빠진다. “함수에 이 출력이 있다”와 “운영 검색에서 그 엣지로 노출된다”를 구분해야 한다. P5와 P3 대상 조정 ↗

3 · 표 — 실제 머리글과 합성 머리글

규약 P4는 첫 셀을 label, 나머지 셀을 열이름: 값으로 옮긴다. base projection은 선언된 columns를 순회한다. comp-frame의 무손실 보강 matrix_entities·table_entity_cells는 더 긴 행도 보존하며, 이름 없는 여분 열에 열 N을 만든다. 이전 판의 “열 N을 만들지 않는다”는 #1458 변경안이지 main 결과가 아니다.

columns: [대상, 주요 내용, 원인]
row: [김재희, 사유출석, 생활관리, 연락]
→ label: 김재희
→ items: ["주요 내용: 사유출석", "원인: 생활관리", "열 4: 연락"]

여분 셀 보존 ↗ · 합성 열 이름 ↗ · base P4 ↗ · P4 ↗

4 · 평탄화 — 필드 이름을 포함한다

entity_lines는 label·items 뒤에 value(+unit), period, emphasis, weight, speaker, author, source, avatar, organization, values를 글 줄로 넣는다. 예를 들어 {label: 매출, value:12, unit:억원}은 매출과 value: 12억원 두 줄이다. 규약의 중첩 예시는 매출 12억원 한 줄이므로 이 차이를 명시한다. 필드 이름을 제거하는 #1485는 현행 구현으로 표기하지 않는다. 평탄화 구현 ↗ · 규약 중첩 예시 ↗

5 · measure — 부속값의 설명을 남긴다

Frame에는 measure 전용 슬롯이 없으므로 materialize_measure가 value·unit을 entity로 옮기고 min·max·target·delta·threshold를 items 줄로 만든다. 예: target: 80, threshold: 50 주의 (warn). fallback P5와 tier 1의 Frame 구성은 다른 호출 경로다. MOR-2769의 정책 논의와 이 코드의 실제 출력을 구분한다. measure 구성 ↗ · projection threshold ↗ · P5 ↗

6 · emphasis·weight·avatar — 일괄 제외되지 않는다

현재 P3는 avatar·weight를 이름과 함께 옮기고, emphasis === true이면 emphasis: true를 추가한다. 평탄화도 이 필드를 글로 만든다. Rust Field에는 별도 is_signal() 정책이 없고, 별칭 정렬은 Marker만 제외한다. 그러므로 신호 필드에 일반 본문이 별칭으로 매핑될 여지도 현재 코드에 남는다. P3 고정 필드 목록 ↗ · 별칭 호스트 선택 ↗ · 필드 타입 ↗

위키는 weight·avatar를 선택 내용으로 분류한다. Pyramid의 weight 처리 등 엣지별 규정과 일괄 제외 정책은 별도 합의가 필요하다. 선택 내용과 속성 ↗

7 · 관계 — projection과 alignment가 다르다

P7 projection은 relation.desc만 첫 of 대상 items로 옮겨 위키와 맞는다. 그러나 Rust align_relations는 intersects → 교집합, compares → 비교를 붙인다. “관계는 종류 없이 desc만 옮긴다”는 설명은 P7에만 맞으며 현재 정렬에는 맞지 않는다.

desc: 겹치는 부분은 문제해결력이다.
P7 projection → 겹치는 부분은 문제해결력이다.
Rust alignment → 교집합: 겹치는 부분은 문제해결력이다.

P7 ↗ · Rust 정렬 ↗ · 정본 P7 ↗

2026-10-18 작업 중: 빈 문자열 필드 보강(MOR-2778)을 #1458에서 별도 PR로 분리하고 있다. #1458에는 표 머리글·관계 desc만 남기며, 추가 리뷰의 빈 관계 desc는 정렬에서 건너뛰도록 수정했다(빈 줄·대치 종류 변경·빈 내용 손실 방지 회귀 테스트). AGENTS.md와 계획 배너의 정책별 PR·티켓 대응도 통일했으며 최종 검증 중이다. 이 진행 기록은 아래 main 구현 설명과 별개다.

이전 PR 기록의 위치

이전 판은 #1458와 네 독립 정책 PR의 작업 보고서였다. 그 판의 CI 상태·테스트 수·2.6 후보 수·렌더 비교는 해당 브랜치 시점의 기록으로 보관한다. 아래 번호는 변경안의 추적용이며 현재 머지 상태를 새로 조회했다는 뜻이 아니다.

이전 변경안범위
#1487문자열 P3 접두 제거
#1484value의 값: 접두 제거
#1485평탄화 접두 제거
#1486신호 필드·별칭 호스트 제외
#1458빈 문자열·합성 열 이름·관계 설명 보강

aippt 구현과 iui의 TS 사본도 별도 버전이다. iui VENDOR.json은 3d5a05d2f를 가리킨다. 현재 aippt P3도 이름 접두를 남긴다. 상류 수정과 동기화, Rust 수정이 각각 필요한지 실제 파일을 대조해야 한다. aippt P3 ↗ · 벤더 기준 ↗