2026-09-13 원본에서 평가 계약·구현·코퍼스가 달라진 것을 확인해 당시 기록으로 보관했습니다. 본문과 자동 동기화 표는 보관 당시 내용입니다.
현재 기준과 원본 보기 → · 보관 목록Signature → retrieval → score → reranking → 최종 match를 앞에서부터 추적했다. 원문이 해시에 없는 것과 텍스트 파생 정보가 검색에 쓰이지 않는 것을 구분한다.
H와 [table]/[chart]를 더한다. 저장 행에는 용량·스타일·기하·원문 지문도 담는다.이 문서는 원문 문자열뿐 아니라 구문, 글자 수, 문자 종류, 스타일 선택 가중치, 렌더된 글자 영역, 원문 해시도 텍스트 사용으로 센다. 다만 이 중 어느 것도 그 자체로 문장 의미 유사도 비교를 뜻하지는 않는다.
요청한 흐름을 따라 읽되, Visual Tree 자체를 그대로 해시하는 구조는 아니다. 컴포넌트의 doc + RLSC와 사용자의 markdown이 각자 준비되어 조회에서 만난다.
doc → Visual Tree·기하·스타일·용량
RLSC → signature forest → structure_hash
parseSummaryTree → 구문·계층 트리
변형 해시 + 경로별 text + demand
기하 포함 관계 + 반복 그룹 판정. 글자 수 비율을 사용하며 VT2 tight box는 렌더된 텍스트의 기하다.
RLSC → signature forest → 구조 해시. Visual Tree는 별도로 저장·채점에 기여한다. 용량·스타일·fingerprint도 생성한다.
질의 트리의 변형 해시와 일치하는 행을 조회하면서 cap_chars·cap_lines를 필터링한다. sig3는 노드별 벡터도 비교한다.
줄 수 초과, 대치 후 예측 박스의 축소, 미매핑 노드를 채점한다. 별도의 후보 원문 의미 비교는 없다.
채점 → fingerprint별 하나 유지 → tier·스마트블록 우선순위·총점 정렬. 중복 제거는 결과에 남는 후보를 바꾼다.
상위 N개를 고르고 variant와 text_map의 경로로 글을 넣는다. 미매핑 노드에 한해 원문 보존 패턴을 검사한다.
④·⑤는 별도 모델 두 개가 아니다. rankCompCandidates 안에 채점·중복 제거·정렬이 이어져 있어 설명을 위해 나눴다. 태그 필터는 활성화됐을 때 ③의 조회 조건에 함께 들어간다.
코드 근거 · build-comp-signatures.ts:131 · build-search-hashes.ts:125 · rank-candidates.ts:126
검색 키(structureHash)와 시그니처 저장 행(CompSignature)을 구분한다. 아래 “직접 입력”은 최종 해시 문자열의 토큰을 뜻한다. 토큰으로 없더라도 그 앞의 트리 생성·적재 자격에는 관여할 수 있다.
| 정보 축 | 해시에 직접 들어감? | 저장 행 / 생성 과정 | 출처 |
|---|---|---|---|
| element / type | v2: NO sig3: 일부 | Text role로 슬롯·계층을 만든다. sig3는 Title·Subtitle·Hl을 H로, Table/Chart를 별도 토큰으로 표시. 행에는 role, textNodeRoles. | signatureTree.ts:1460 |
| geometry / size | NO | textMap.box, scoreFeatures.areaRatioR/pageWidth/pageHeight, 선택적 외곽선. 용량·렌더 크기의 근거다. | helpers.ts:1694 |
| position / layout | NO | 절대 위치·정렬, Visual Tree의 포함·반복 구조, visualSplitPairs. 좌표를 해시 토큰으로 직렬화하지는 않는다. | helpers.ts:275 |
| style | NO · 직접값 없음 | v2는 스타일 비교가 트리 변환에 관여. sig3는 role-only 트리를 만든 뒤 스타일 자격 게이트로 행 생성 여부를 결정. 행에는 styleKey·fontSize·lineSpacing·hAlign·vAlign. | signatureTree.ts:992 signatureTree.ts:1374 |
| text / content — 원문 | NO | 원문 전문을 검색 키나 textMap에 저장하지 않는다. 대신 슬롯의 원문(격자는 셀 원문)을 합친 fingerprint를 저장해 중복 제거에 사용한다. | scoring.ts:565 |
| text 파생 — 길이·줄·문자 구성 | NO · 직접값 없음 | 원본 글자 수는 반복 판정·대표 스타일 선택에 사용. chars/lines/charsPerLine은 수용 용량이며 cap*로 합산·벡터화. 질의의 실제 글자·줄 수는 별도 demand다. | textPredict.ts:15 matching.ts:850 |
| hierarchy / Visual Tree 구조 | YES · RLSC 변환 구조 | RLSC → signature forest의 자식 수·순서를 해시한다. Visual Tree는 별도 트리로 id·component·outline·children을 저장하고 채점·대치에 사용. | signatureTree.ts:1477 helpers.ts:362 |
| semantic 정보 | role: 간접 태그·embedding: NO | 상류에서 전달받은 role은 트리 변환에 사용. semantic_tags는 빌더 반환값 밖의 별도 DB 컬럼. 이 검색 경로에 문장 embedding·cosine similarity·의미 reranker는 없다. | build-comp-signatures.ts:38 build-comp-signs.sql:541 |
CompSignature는 공통 필드 9개와 sig3 선택 필드 capLinesArr/capCharsArr를 선언한다. “원문 문자열을 저장하지 않는다”는 이 반환값에 대한 설명이며 원본 sheetJson에는 텍스트가 있다.
최종 직렬화만 보면 단순하다. v2는 자식 수와 괄호, sig3는 여기에 헤딩·격자 토큰을 더한다.
v2 : 2(2(0)(0))(0)
sig3 : 1(H2(0)([table]))
↓ xxhash64 → signed int64의 10진 문자열
structure_hash
v2는 RLSC의 role·계층과 doc의 스타일 비교로 forest를 변환한다. sig3는 role-only 변환 후 textStyleOf를 사용하는 스타일 게이트를 거친다. 이 대표 스타일은 fontSize × 글자 수 가중치로 고른다. 글자 수를 해시에 붙이지 않아도 어떤 시그니처 행이 만들어지는지에 영향이 생길 수 있다.
| 질의 준비에서 읽는 텍스트 | 검색에 미치는 영향 | 현재 경로의 조건 |
|---|---|---|
| 헤딩·목록·들여쓰기·파이프 표 | parseSummaryTree가 계층과 head/grid를 만든다. 같은 의미의 글이라도 작성 구조가 다르면 해시가 달라질 수 있다. | 기본 파싱. sig3는 단일 루트를 헤딩으로 간주하는 규칙도 있다. |
키: 값 문자열 패턴 | leaf 형제 전부가 이 구문이면 key 부모 + value 자식으로 쪼갠 추가 검색 변형을 생성한다. | expandKeyValue가 켜졌을 때. 원본 검색도 유지한다. |
| 표 셀의 숫자·문장·빈 값 | chartlike를 계산하고, 코어의 자동 모드에서는 차트 토큰 변형을 추가할지 결정한다. | 현재 /comp-match UI는 표/차트 종류로 gridStream을 강제한다. 이 UI에서 숫자 판정이 항상 후보를 가른다고 쓰면 안 된다. |
코드 근거 · signatureTree.ts:543 · summaryTree.ts:59 · matching.ts:329 · summaryTree.ts:198 · useMatchSearch.ts:473
text_map.chars/lines는 원본 문자열 길이·실제 렌더 줄 수가 아니라 슬롯의 수용 용량이다. 그러나 “박스만 같으면 텍스트와 완전히 무관하다”도 정확하지 않다.
| feature | 어떻게 산출하나 | 쓰이는 곳 |
|---|---|---|
| 질의 demand.chars | Σ text.length. JS의 UTF-16 코드 단위 수이며 화면상 글자 수나 토큰 수와는 다르다. | 첫 DB 조회의 cap_chars 하한 |
| 질의 demand.lines | 일반 텍스트 경로마다 1 + 개행(\n) 수. 아직 박스 폭에 의한 자동 줄바꿈은 세지 않는다. | 첫 DB 조회의 cap_lines 하한 |
| 노드별 demand 벡터 | 변형 경로의 DFS 순서로 위 수요를 나열하고 각각 허용 배수로 나눈 뒤 floor. | sig3의 cap_lines_arr·cap_chars_arr와 경로별 비교 |
| 색인 charsPerLine | max(1, floor(width / (0.8597 × 대표 fontSize))). 평균 글자폭 계수는 고정. | 줄 수 초과 예측 + 용량 합산 |
| 색인 lines / chars | 부모·형제 경계와 정렬을 보고 확장한 높이 ÷ 줄 높이. chars = charsPerLine × lines. 추출 여백 24px. | textMap → cap 합계·벡터 |
| 대표 fontSize / style | 비어 있지 않은 leaf의 fontSize × text.length 가중치. fontSize 대표값은 최대 leaf, sig3 게이트용 스타일은 같은 스타일 그룹의 합산 가중치. | 용량·스타일 게이트·fontSize 기반 점수에 간접 반영 |
| 원문 fingerprint | 시그니처 슬롯 경로 순서의 원문 조각(표/차트 셀 포함)을 연결해 해시. | 후보끼리 중복 제거. 질의와 유사도 비교하는 값은 아님 |
| tight box / 반복 판정 | 렌더된 글자 영역 또는 원본 글자 수 비율. 원문 길이 값 자체를 저장하지 않아도 파생 구조에 영향. | Visual Tree 및 그 파생 feature |
v28 이후 원본 글의 한글/라틴 구성에 따른 평균 폭 계수는 사용하지 않는다. 하지만 대표 fontSize는 여전히 글자 수 가중치로 선택하므로, 여러 크기가 섞인 텍스트에서는 부분별 길이가 바뀌면 용량도 바뀔 수 있다. 같은 박스뿐 아니라 대표 폰트 크기·줄간격·정렬·주변 경계까지 고정해야 같은 용량을 기대할 수 있다.
코드 근거 · matching.ts:850 · matching.ts:873 · helpers.ts:1581 · textPredict.ts:15 · nodeStyle.ts:54 · signatureTree.ts:518
최초 candidate retrieval은 TEXT USED? YES. UI의 fetchHashRows는 변형 해시를 조회할 때 그 변형에 배정된 텍스트의 수요도 함께 필터링한다. “해시로 전부 가져온 뒤 reranking에서 처음 텍스트를 본다”는 흐름이 아니다.
minChars = floor(demand.chars / multiplier) minLines = floor(demand.lines / multiplier) WHERE structure_hash = variant.hash AND cap_chars >= minChars AND cap_lines >= minLines sig3 추가: 모든 경로 i에서 cap_chars_arr[i] >= floor(text[i].length / multiplier) cap_lines_arr[i] >= floor((1 + 개행 수[i]) / multiplier)
| 조회 방식 | 실제 동작 | 해석 |
|---|---|---|
| v3.4 / v3.2 (v2) | 해시별 select + 합산 용량 하한. source·merged·header/footer 등 조건과 조회 한도도 적용. | 텍스트 총분량이 후보 풀에 직접 관여한다. |
| v3.4-sig3 | comp_match_rows_sig3 RPC에 합산 + 노드별 하한을 전달. SQL에서 배열 원소별 부족 여부를 검사. | 총합은 충분해도 특정 슬롯이 부족하면 후보에서 제외될 수 있다. |
| 표·차트 grid leaf | demand 합계에서 제외, 노드별 벡터에는 자리를 유지하며 0을 넣는다. | 표 markdown을 일반 텍스트 박스에 넣는 것으로 계산하지 않는다. |
| 컴포넌트 key 직접 지정 | design_object_id로 행을 읽고 변형 해시를 로컬 대조. 태그·pool·overflow 조건은 건너뜀. | 일반 검색의 분량 prefilter 결론에 대한 명시적 예외. 이후 채점·대치는 계속된다. |
조회 순서와 후보 수 한도로 어떤 후보를 실제 받아 오는지도 달라진다. v2는 template_idx·id 내림차순, sig3 SQL은 스마트블록 우선을 더한다. 이것을 텍스트 의미 검색 순위로 해석하면 안 된다.
코드 근거 · useMatchSearch.ts:789 · useMatchSearch.ts:888 · build-comp-signs.sql:920 · useMatchSearch.ts:1338
SEMANTIC_TAG_UI_ENABLED = false이고, CompMatch는 태그를 사용할 수 없으면 tier0Tags/tier1Tags에 빈 배열을 전달한다. 따라서 현재 화면이 사용자 글을 LLM으로 자동 분류해 의미 태그로 검색한다고 설명할 수 없다.
구현된 지원 경로는 별도로 있다. semantic_tags는 시그니처 해시 밖의 DB 컬럼이며 public.design_object_semantic_tags에서 옮겨 담는다. 태그가 활성화되어 호출자에게서 들어오면 다음처럼 후보 조회·정렬에 관여한다.
| 군 | 조건 | TEXT USED? |
|---|---|---|
| 0군 | 호출자가 사용자 지정 태그로 전달한 값과 일치하는 후보. | 태그 사용 YES. 사용자가 직접 골랐다면 텍스트에서 자동 추론한 값은 아니다. |
| 1군 | 호출자가 추정 태그로 전달한 값. 0군과 중복 태그는 제외. | 외부에서 글을 읽어 만든 값이면 텍스트의 의미 파생 정보. 이 함수가 LLM을 호출하지는 않는다. |
| 2군 | 0·1군 태그가 없는 후보. 해시·용량 등 나머지 조회 조건은 유지. | 태그 불일치를 최종 탈락시키기보다 후순위 풀로 둔다. |
태그를 쓰는 경로에서는 tier가 점수보다 먼저이고, 목표 후보 수를 채우면 뒤 군을 생략한다. 이는 표현 형식 태그의 일치 정책이다. 질의와 템플릿 문장의 embedding을 비교하는 의미 유사도 점수와는 구분해야 한다.
코드 근거 · semanticTagUi.ts:7 · CompMatch.tsx:1165 · useMatchSearch.ts:426 · useMatchSearch.ts:1450 · build-comp-signs.sql:541
computeScoreBreakdown의 16개 항목 중 질의 경로의 text 값 또는 매핑 여부를 직접 사용하는 항목은 3개다. 하지만 파생 feature까지 포함하면 “텍스트와 관련된 것은 셋뿐”이라고 제한할 수 없다.
| 항목 | 일반 기본 가중치 | 텍스트 사용 방식 | 판정 기준 |
|---|---|---|---|
| textDiff | 4 | 직접 · 길이·개행 | 슬롯 폭(charsPerLine) 기준 Σ max(1, ceil(각 개행 구간 길이 / cpl))를 계산. 용량 lines 초과분의 제곱근 감점. 스마트블록은 면제. |
| textShrinkPenalty | 50 | 직접 · 문자 종류·공백·개행 | classifyChar → simulateWrap → predictTextBbox. 한글/영문 대·소문자/숫자/공백/부호별 폭과 줄바꿈으로 예측한 박스가 원래 박스보다 작아지는 폭·높이를 감점. |
| placeholderPenalty | 5 | 직접 · 매핑 존재 | Marker/Deco를 빼고 입력이 매핑되지 않은 텍스트 노드 수. 원문 보존 대상도 포함될 수 있다. 입력 의미를 읽지는 않는다. |
| styleMismatch | 2 | 저장 feature | 같은 depth 노드 사이 styleKey 불일치 감점. |
| parentChildSameStyle | 1 | 저장 feature | 부모·자식의 동일 스타일 감점. |
| fontSizeBonus | 0.5 | 저장 feature · 길이 간접 | 부모·자식 대표 글꼴 크기 차이. 대표값 생성에 원본 글자 수가 관여한다. |
| areaRatio | 40 | 저장 용량·기하 | 컴포넌트 면적 비율과 시그니처 용량 기반 임계. 스마트블록은 별도 완화. |
| visualSiblingSplit | 3 | 저장 기하·계층 | 시그니처 비형제지만 화면상 형제인 쌍 수. |
| illustrationBonus | 2 | 저장 VT feature | 그림이 항목마다 있는 패턴. VT 반복 그룹 판정에는 원본 길이도 관여. |
| titleFontSizePenalty | 5 | 저장 feature · 길이 간접 | 최상위 제목의 대표 fontSize가 임계보다 작은 정도. |
| expansionPenalty | 5 | 질의 변형 | 추가 빈 자식 노드 수만큼 감점. |
| unwrapPenalty | 5 | 질의 변형 | 단일 루트 제목 제외 변형 감점. |
| keyValueSplitBonus | +5 | 구문 파생 flag | 키:값 분리 변형 가점. flag만 읽지만 그 flag는 입력 문자열 패턴에서 왔다. |
| mergeChildrenPenalty | 1 | 질의 변형 | 자식 병합 step에 대해 step(step+1)/2 감점. |
| gridPromotedPenalty | 10 | 질의 변형 | 격자 부모·형제를 버리는 승급 변형 감점. |
| gridIndexPenalty | 5 | 질의 변형 | 격자 위치 이동 변형 감점. |
여기서 shrink는 대치 후 예측 텍스트 영역이 원래 박스보다 작아져 생기는 여백을 뜻한다. 실제 렌더러의 auto-fit 폰트 축소 결과를 측정하지 않는다. 같은 글자 수여도 문자 종류와 공백 배치가 다르면 예측 박스가 달라질 수 있다.
variant로 paths 복원 → 16개 항목 채점·총점 합산 → fingerprint별 후보 하나 유지 (dedupe 기본 true) → tier 오름차순 → 스마트블록 우선(기본 true) → score 내림차순 → topN
fingerprint는 원문을 질의와 비교하지 않지만 최종 후보 선택에는 사용된다. 같은 지문을 가진 후보 중 우선순위·점수가 높은 하나를 남기므로, “중복 제거 전용이니 선택과 무관하다”는 설명은 틀리다. 점수는 높을수록 좋고 가점도 있어 0이 절대 최고점은 아니다.
코드 근거 · scoring.ts:446 · helpers.ts:1766 · predictTextBbox.ts:81 · predictTextBbox.ts:113 · rank-candidates.ts:191 · scoringWeights.ts:58
최종 match는 고른 컴포넌트와 그 컴포넌트에 맞았던 variant·textMap이다. buildContentReplacement는 variant로 paths를 복원하고 path → 노드 id 대응으로 실제 입력 문자열을 넣는다. 의미가 가까운 문장을 찾아 슬롯에 배정하는 단계는 없다.
| 대상 | 실제 처리 | 주의점 |
|---|---|---|
| 입력이 매핑된 일반 슬롯 | 사용자 문자열을 바로 attach. | 원래 값이 VS·숫자여도 먼저 매핑됐으면 이 분기에서 대치된다. |
| 미매핑 Text 슬롯 | 원본이 한 글자 이하·VS·TAM/SAM/SOM·숫자/단위 패턴이면 보존. 그 외는 role·용량에 맞는 placeholder. | shouldPreserveText는 미매핑 분기에서만 호출한다. |
| Marker / Deco | 일반 텍스트 대치 루프에서 제외. | role 기반 처리다. |
| 격자 슬롯 | 입력 표 markdown을 격자 노드에 전달. 미매핑 셀을 개별 placeholder로 덮지 않는다. | 렌더러가 표/차트를 다시 그리는 계약. |
대치에서는 실제 문자열을 사용하지만, 원문을 읽는 최초 단계는 아니다. 파싱·키:값 변형, 문자 폭 예측, fingerprint 생성에서도 이미 문자열을 읽었다.
코드 근거 · build-replacement.ts:116 · helpers.ts:708 · signatureTree.ts:361
빌더의 두 갈래를 정확히 그리면 다음과 같다. 이 함수는 이미 만들어진 RLSC를 받는다. 상류에서 RLSC role을 어떤 방식으로 추론했는지는 이번 확인 범위 밖이다.
rlsc + doc → buildSignatureTree / buildSignatureTreeRoleOnly
→ signature forest → structureHash + textMap의 경로
doc → computeVisualBundle → raw VT1 / 선택적 VT2 → 반복 그룹
→ visualTree 저장 + hasIllustration
→ raw VT1 부모맵 + textMap → visualSplitPairs
doc → buildNodeCapacityMap → 별도 VT1 경계 + 대표 fontSize
→ textMap의 용량 → cap 합계 / sig3 벡터| 구간 | TEXT USED? | 어떻게 / 어디까지 |
|---|---|---|
| 기하 포함 관계만 보기 | NO · 의미/문자 직접 비교 YES · 텍스트 렌더 기하 조건부 | 박스·외곽선을 사용. VT2의 tight box가 들어오면 텍스트가 실제 그려진 영역을 포함 관계에 사용한다. |
| 반복 그룹 만들기 | YES | similarPairedLayout → similarTextLength가 글자 수 비율(최대 3배)을 검사. 대칭 판정에도 길이를 사용. “VT 전체는 텍스트를 안 본다”는 결론은 불가. |
| 구조 해시와 연결 | 직접 직렬화 NO | 이 빌더에서 grouped Visual Tree를 구조 문자열 함수에 전달하지 않는다. RLSC 변환 forest와 Visual Tree는 서로 다른 트리다. |
| 용량과 VT2 | 원본 길이 간접 YES | 용량은 buildNodeCapacityMap(doc)의 별도 VT1 + 글자 수 가중 fontSize로 계산한다. 옵션 VT2 grouped 트리가 용량 경계를 곧바로 대체하는 구조는 아니다. |
| 저장 형식 | 원문 전문 NO | StoredVisualNode는 id·component·outline·children만 저장. 텍스트가 직접 저장되지 않아도 생성된 구조가 텍스트에 의존할 수 있다. |
코드 근거 · build-comp-signatures.ts:140 · helpers.ts:275 · utils.ts:733 · utils.ts:817 · helpers.ts:346
H와 [table]/[chart]를 더한다. 저장 행에는 용량·스타일·기하·원문 지문도 담는다.“텍스트 정보로 매칭을 판단하는 것은 reranking뿐인가?” → 아니다. 입력 구문이 조회할 구조를 만들고, 분량이 최초 DB 후보를 자르며, 텍스트 파생 스타일·기하가 채점에 기여하고, 원문 지문이 최종 중복 후보를 줄인다. 다만 질의와 템플릿의 문장 의미를 비교하는 matching은 확인한 경로에 없다.
다음에 Visual Summary → Visual Tree → RLSC/Search를 연결할 때는 입력의 내용·구문 구조, RLSC의 역할 구조, Visual Tree의 시각적 포함·반복 구조를 각각 놓고, 어디서 변환하거나 서로 참조하는지 확인하면 된다. 별도 comp-frame 경로의 동작으로 이 comp-sign 경로를 대신 설명하지 않는다.
기준은 miricanvas-iui 커밋 988a4c89ab5bcf56e8e555548ca78d819a82d925이다. 인용한 파일은 git diff HEAD -- 해당 파일에 변경이 없는지 확인하고, 링크는 해당 커밋과 실제 줄 번호로 고정했다.
이번 결론은 TypeScript comp-sign 빌더 + /comp-match의 일반 후보 검색·채점·대치를 직접 읽은 결과다. UI 기본 세트는 v3.4(v2)이고 v3.4-sig3는 선택 경로다. Rust comp-pass 서버 내부, 새 comp-frame, 상류 Visual Summary/RLSC 생성기, 실제 운영 DB 적재 상태의 동일성까지 검증한 것은 아니다.
코드에 존재하는 기능과 현재 활성 상태를 분리했다: 태그 UI false, v2의 군 전체 RPC USE_RPC=false, sig3의 해시별 RPC는 별도로 사용. 컴포넌트 key 지정은 일반 검색 필터의 예외다.
코드 근거 · signatureSet.ts:24 · useMatchSearch.ts:200 · CompMatch.tsx:1250
| 저장소 상대 경로 | 고정 커밋 링크 | 확인한 함수 / 분기 |
|---|---|---|
| packages/comp-sign/src/build-comp-signatures.ts | build-comp-signatures.ts:131 | function buildSignatures( |
| packages/comp-sign/src/build-search-hashes.ts | build-search-hashes.ts:125 | export async function buildCompSearchData( |
| packages/comp-sign/src/rank-candidates.ts | rank-candidates.ts:126 | export function rankCompCandidates |
| packages/comp-sign/src/comp-sign/signatureTree.ts | signatureTree.ts:1460 | export function buildMarkedStructureStringOfRlsc |
| packages/comp-sign/src/comp-match/helpers.ts | helpers.ts:1694 | export function buildEnrichedNodeData( |
| packages/comp-sign/src/comp-match/helpers.ts | helpers.ts:275 | export function computeVisualBundle( |
| packages/comp-sign/src/comp-sign/signatureTree.ts | signatureTree.ts:992 | export function buildSignatureStages( |
| packages/comp-sign/src/comp-sign/signatureTree.ts | signatureTree.ts:1374 | export function checkSignatureStyleGate( |
| packages/comp-sign/src/comp-match/scoring.ts | scoring.ts:565 | export function buildTextFingerprint( |
| packages/comp-sign/src/comp-match/textPredict.ts | textPredict.ts:15 | export function representativeFontSize( |
| packages/comp-sign/src/comp-match/matching.ts | matching.ts:850 | export function demandOfPaths( |
| packages/comp-sign/src/comp-sign/signatureTree.ts | signatureTree.ts:1477 | export function buildStructureString |
| packages/comp-sign/src/comp-match/helpers.ts | helpers.ts:362 | export function serializeVisualTree( |
| packages/comp-sign/src/build-comp-signatures.ts | build-comp-signatures.ts:38 | export type CompSignature = |
| scripts/build-comp-signs.sql | build-comp-signs.sql:541 | -- semantic_tags 컬럼 |
| packages/comp-sign/src/comp-sign/signatureTree.ts | signatureTree.ts:543 | export function textStyleOf( |
| packages/comp-sign/src/comp-match/summaryTree.ts | summaryTree.ts:59 | export function parseSummaryTree( |
| packages/comp-sign/src/comp-match/matching.ts | matching.ts:329 | export function parseKeyValueText( |
| packages/comp-sign/src/comp-match/summaryTree.ts | summaryTree.ts:198 | export function isChartlikeTableCells( |
| src/comp-match/useMatchSearch.ts | useMatchSearch.ts:473 | gridStream: searchKind |
| packages/comp-sign/src/comp-match/matching.ts | matching.ts:873 | export function demandVectorsOfPaths( |
| packages/comp-sign/src/comp-match/helpers.ts | helpers.ts:1581 | export function buildNodeCapacityMap( |
| packages/comp-sign/src/comp-match/nodeStyle.ts | nodeStyle.ts:54 | export function nodeStyleOf( |
| packages/comp-sign/src/comp-sign/signatureTree.ts | signatureTree.ts:518 | function collectLeafEntries( |
| src/comp-match/useMatchSearch.ts | useMatchSearch.ts:789 | const fetchHashRows = async ( |
| src/comp-match/useMatchSearch.ts | useMatchSearch.ts:888 | .gte('cap_lines', minCapLines) |
| scripts/build-comp-signs.sql | build-comp-signs.sql:920 | create or replace function iui.comp_match_rows_sig3( |
| src/comp-match/useMatchSearch.ts | useMatchSearch.ts:1338 | if (componentKeyDoIds != null |
| src/comp-match/semanticTagUi.ts | semanticTagUi.ts:7 | export const SEMANTIC_TAG_UI_ENABLED |
| src/comp-match/CompMatch.tsx | CompMatch.tsx:1165 | tier1Tags: semanticTagAvailable |
| src/comp-match/useMatchSearch.ts | useMatchSearch.ts:426 | const tier1 = useMemo( |
| src/comp-match/useMatchSearch.ts | useMatchSearch.ts:1450 | await fillTier(tier0, 0); |
| packages/comp-sign/src/comp-match/scoring.ts | scoring.ts:446 | export function computeScoreBreakdown( |
| packages/comp-sign/src/comp-match/helpers.ts | helpers.ts:1766 | export function wrappedLineCount( |
| packages/comp-sign/src/text-metrics/predictTextBbox.ts | predictTextBbox.ts:81 | export function classifyChar( |
| packages/comp-sign/src/text-metrics/predictTextBbox.ts | predictTextBbox.ts:113 | export function simulateWrap( |
| packages/comp-sign/src/rank-candidates.ts | rank-candidates.ts:191 | const pool = |
| packages/comp-sign/src/comp-match/scoringWeights.ts | scoringWeights.ts:58 | export const DEFAULT_SCORING_WEIGHTS |
| packages/comp-sign/src/build-replacement.ts | build-replacement.ts:116 | export function buildContentReplacement( |
| packages/comp-sign/src/comp-match/helpers.ts | helpers.ts:708 | export function buildNodeTextMapFromRoles( |
| packages/comp-sign/src/comp-sign/signatureTree.ts | signatureTree.ts:361 | export function shouldPreserveText( |
| packages/comp-sign/src/build-comp-signatures.ts | build-comp-signatures.ts:140 | const bundle = computeVisualBundle( |
| packages/comp-sign/src/node-labeler/utils.ts | utils.ts:733 | function similarTextLength( |
| packages/comp-sign/src/node-labeler/utils.ts | utils.ts:817 | function sameIndividualStructure( |
| packages/comp-sign/src/comp-match/helpers.ts | helpers.ts:346 | export type StoredVisualNode = |