id: R4
version: 6
bundle: search
name: 온전하지 않은 컴포넌트를 제공
gold: false
status: fix
unit: component
sample:
  conditions:
  - O
  - O_v10
  - a1
  - a
  - c
  scope: top10
question: |
  이 컴포넌트가 맡은 질의 몫을 넣었을 때 남는 자리나 모자라는 자리가 있는가.
  - 질의 몫 = binding 에 든 글이 나온 entity 들과 그 entity 의 필드. page_yaml 이 이 장을 만드는 데 들어간 YAML 몫(컴포넌트 하나, 나눠 담기면 이 장이 가져간 항목만)이고 그것이 질의다. page_yaml 에 없는 entity 는 형제 컴포넌트나 나눠 담기의 다른 쪽 몫이라 세지 않는다. 질의 항목 수가 유닛 수보다 많다는 이유로 short 를 내지 않는다.
  - 자리 = frame_iis 의 유닛 필드 노드(label, items, value, period 등). binding 은 어느 노드에 무엇이 들어갔는지다. 자리 수와 binding 을 맞대어 판정하고 그림은 확인용이다.
  - exact: marker 가 아닌 유닛 필드 노드가 모두 binding 에 있고, items 자리가 둘 이상인 유닛에서 항목이 자리마다 하나씩 들어갔다.
  - leftover: marker 가 아닌 유닛 필드 노드 가운데 binding 에 없는 것이 있다(그 자리는 임시 문구가 된다). 질의가 안 쓴 period 자리는 원문이 남는 자리라 세지 않는다.
  - short: 한 유닛의 items 자리가 둘 이상인데 항목이 자리 수보다 많아 마지막 자리에 「* 」 불릿으로 이어 붙었다. items 자리가 하나뿐인 유닛에 항목 여럿이 불릿으로 들어간 것은 short 가 아니다.
  - 세지 않는 것: 위성 자리(satellites 의 title, subtitle, desc), 표 자리(dataset 의 칸과 grid. 남는 칸이 빈 글인 것은 허용이고 칸 값은 D7 몫), 경계 밖 요소(차트, 그림, 다른 카드, 페이지 제목), 자리 없는 필드가 label 이나 items 에 「이름: 값」이나 불릿으로 붙은 것, 값과 단위가 한 글로 합쳐진 것.
  - result_thumb 는 페이지 전체라 경계 밖이 함께 보인다. 그것은 이 컴포넌트의 자리가 아니다.
inputs:
- page_yaml
- frame_iis:
  - units
  - dataset
- binding
- result_thumb
- spec_excerpt:
  - cap-454
  - l1l2-66
answers:
  kind: categorical
  options:
  - key: exact
    label: 딱 맞음
  - key: leftover
    label: 자리 남음(유닛 필드 노드가 질의 글을 못 받음)
  - key: short
    label: 자리 모자람(items 자리 여럿인 유닛에서 항목이 불릿으로 합쳐짐)
defect:
  bad:
  - leftover
  - short
  rule_extra: clean_in_pool_but_unclean
  rule_exempt_extra:
  - supply
aggregate: ratio
truth:
  kind: rule
  rule: predicted_defects_clean
allowed:
- 위성 자리(satellites 의 title, subtitle, desc)에 임시 문구가 뜨는 것은 자리 남음이 아니다.
- result_thumb 에 경계 밖 요소(차트, 그림, 다른 컴포넌트, 페이지 제목)가 함께 보이는 것은 자리 남음이 아니다.
- '값과 단위가 한 글로 합쳐지는 것, 자리 없는 필드가 items 나 label 에 「이름: 값」이나 불릿으로 붙는 것은 자리 모자람이 아니다.'
- 질의의 entity 가 형제 컴포넌트나 나눠 담기의 다른 쪽에 간 것은 이 컴포넌트의 자리 모자람이 아니다. 이 컴포넌트의 몫은 binding 에 든 글이다.
- 표 자리의 남는 칸이 빈 글인 것은 자리 남음이 아니다. 표 칸 값은 D7 몫이다.
- items 자리가 하나뿐인 유닛에 항목 여럿이 불릿으로 들어간 것은 자리 모자람이 아니다.
- 질의가 안 쓴 period 자리에 원문이 남는 것은 자리 남음이 아니다.
sources:
- spec/capability-table.md:454(N1 질의 트리 전체를 담은 후보)
- plan/l1-l2-result-display-blueprint.md:66(온전 우선, above_tier)
- iui rust/comp-pass/crates/comp-frame-core/src/align.rs place_same_fields(itemOverflow 는 many 필드의 초과 항목 수)
- iui rust/comp-pass/crates/comp-frame-core/src/rank.rs unauthored_count_of(빈 자리 + 경계 안 잔여 + 경계 밖 글). 규칙은 이 수를 읽지 않는다(경계 안 잔여는 P2, 경계 밖은 R8 몫)
threshold:
  basis: a1
  value: null
model:
  default: gpt-6-luna
  current: gpt-6-luna
reps: 5
observe_only: false
purpose: "검색이 질의 몫을 넣었을 때 자리가 남거나(유닛 필드가 질의 글을 못 받아 임시 문구가 됨) 모자라는(items 자리보다 항목이 많아 마지막 자리에 불릿으로 이어 붙음) 후보를 내놓는 일을 잡는다. 질의 트리 전체를 담은 온전한 후보를 앞에 두는 것이 검색 규약이다(cap-454, l1l2-66). 검색 링크의 책임이고 비교 대상은 유저 원문이 아니라 이 장의 YAML 몫이며(유저 결정 10/23), 풀에 온전한 후보가 없었던 공급 부족은 결함이 아니라 아래 순위의 온전한 후보를 놓친 것만 센다(평가틀 40 Q7, 기본품질 14 Q7). 표 칸 값은 D7, 경계 안 잔여는 P2, 경계 밖은 R8 몫이다."
changelog:
- 'v2 (2026-10-20): 거짓 양성 85 건 진단. (b) result_thumb 가 페이지 전체라 경계 밖 차트와 다른 카드(39 건은 경계가 root 의 자식 하나), 위성 desc 의 임시 문구(37 건)를 남는 자리로 셌다. 자리를 frame_iis 의 유닛, 필드, 칸으로 정의하고 frame_iis(units, dataset)를 그림보다 앞에 넣었다. 위성과 경계 밖 요소를 세지 않는다고 허용에 적었다. allowed 가 비어 있던 것을 채움.'
- 'v3 (2026-10-20): 거짓 양성 82, 거짓 음성 17 진단. 거짓 양성 54 건은 나눠 담기 쪽이나 L2 칸인데 L1 의 entity 전부를 이 컴포넌트에 넣으려 해 short 를 냈고(a, 꾸러미에 몫 표시가 없음), 15 건은 표의 남는 칸을 자리 남음으로(a, 21 §4 허용), 8 건은 binding 과 다른 수준(L1 과 L2)의 entity 수를 맞댔다(a). 거짓 음성 14 건은 itemOverflow(many 필드에서 자리 수를 넘는 항목이 마지막 자리에 불릿으로 붙음)를 평가기가 exact 로 본 것. 질의 몫 = binding 의 entity, 수준은 binding 이 나온 쪽 하나, 표 자리 제외, short 의 정의를 align.rs 와 같게(items 자리 둘 이상 + 자리 수 초과), period 미사용은 자리 남음 아님으로 적었다. 남는 한계: items 자리가 하나인 유닛은 frame_iis 보기에서 one 과 many 가 구분되지 않아 itemOverflow 33 건 가운데 29 건을 평가기가 볼 수 없다(러너 제안).'
- 'rule (2026-10-20): 정답 규칙 predicted_defects_clean 이 unauthored_count 를 읽지 않고 비용 항목(itemOverflow, itemBlank, unitBlank, fieldBlank, relationGap)만 보게 고쳤다(37 문서 6절 제안 2). 질문은 이미 경계 안 잔여와 경계 밖을 세지 않으므로 같은 뜻이라 version 은 그대로다.'
- 'rule (2026-10-20): 유저 결정(40 문서 Q7). 공급 부족은 결함이 아니다. 풀에 온전한 후보가 있었는데 놓친 경우(rule_extra = violation)만 보드 규칙값의 결함으로 센다(defect.rule_exempt_extra: [supply]). short 판정에 align.rs 와 같은 「items 자리 둘 이상」 조건을 넣었다(질문 v3 의 정의와 같아짐). 질문은 그대로라 version 도 그대로다.'
- 'v4 (2026-10-22): 규칙 감사(12 문서 R4 절). rule_extra(clean_in_pool_but_unclean)가 풀의 온전 후보 수(intact)를 순위와 상관없이 세어, 위 순위에 이미 내놓은 온전 후보와 자기 자신까지 「놓친 온전 후보」로 셌다. 운영 표본 250 의 violation 239 건 가운데 152 건이 모든 온전 후보가 이 순위까지 이미 나간 경우였다. 남은 온전 후보 = intact 에서 이 순위까지(모든 슬롯) 내놓은 장 가운데 unauthored_count 0 인 수를 뺀 것으로 고쳤다. 질문은 그대로다.'
- 'v5 (2026-10-22): 유저 결정(14 문서 규칙 정책 Q7). 「놓친 온전 후보」의 온전은 R4 판정과 같은 exact 다. rule_extra 는 풀의 intact(unauthored_count 0)를 쓰지 않고, 같은 질의, 같은 슬롯에서 이 순위 아래 장 가운데 R4 판정이 exact 인 것이 있으면 violation, 없으면 supply 로 고쳤다. export 에 순위 10 까지의 장만 있어 순위 11 이하의 exact 후보는 보이지 않는다. 질문은 이 컴포넌트의 판정(exact, leftover, short)만 묻고 rule_extra 를 다루지 않으므로 그대로다.'
- 'v6 (2026-10-23): 질의를 query_yaml 대신 이 장의 YAML 몫(page_yaml)으로 준다(유저 결정 10/23). 규칙 predicted_defects_clean 은 질의를 읽지 않아 그대로다.'
- 'purpose 추가(10/24)'
