#613 리뷰에서 찾았습니다. 넓힌 사실은 휘발하고 넓힌 결과는 남습니다.
무엇인가
#613 이 _widen_to_cover 를 넣으면서 인용을 우리가 고쳐 쓰게 됐습니다. 모델이 조건절만 인용해도 루브릭 필수요소를 덮도록 결정론으로 넓히고, 그 사실을 EVIDENCE_WIDENED 경고로 남깁니다 — 그쪽 독스트링이 이유를 이렇게 적었습니다.
조용히 넓히면 «모델이 전문을 인용했다»로 읽히므로 경고로 남긴다.
그 경고가 서버에서 로그까지만 갑니다.
// ProductRiskItems:157
for (AiServiceClient.Warning warning : result.warnings()) {
log.warn("추출 경고 [{}] product={} item={} — {}", …); ← 여기서 끝난다
}
// 응답 RiskItemsResponse 는 경고를 안 싣는다 (그 자리 주석이 그렇게 정해 뒀다)
// 스냅샷 ExtractedRiskItem 에 경고 칸이 없다 — conditionValueText 만 저장된다
그래서 나중에 스냅샷·화면·교부 문서로 그 항목을 여는 사람은 긴 축자 인용 하나를 봅니다. 그게 «모델이 이만큼 인용했다» 로 읽히는데, 정확히 그 경고가 막으려던 오독입니다.
왜 지금 걸리나
모든 추출 경고가 같은 처지라 #613 이 만든 결함은 아닙니다. 다만 그 PR 이 지속되는 산출물을 처음 만듭니다.
ITEM_NOT_FOUND · SPAN_UNRESOLVED … 실패를 말한다 → status=extraction_failed 로 응답에 이미 실린다
LOOSE_MATCH · PAGE_CORRECTED 찾은 방법을 말한다 → 결과는 모델이 낸 그대로다
EVIDENCE_WIDENED ❗**결과 자체가 우리가 고쳐 쓴 것**이다
앞의 것들은 결과를 보면 사실이 드러나거나(실패) 결과가 모델의 것이지만, 이것은 결과만 보고는 우리가 손댔다는 것을 알 수 없습니다.
MANUAL_SOURCE 가 있는 이유와 같은 자리입니다(schemas.py 주석) — "표식을 만들어 두고 아무도 안 읽으면 다음 사람이 그 표식을 안 믿는다". 거기는 읽는 쪽이 app/ 에 없던 것이고, 여기는 읽는 쪽이 서버인데 서버가 안 남깁니다.
어디에 남길까
ⓐ 스냅샷에 칸 하나 ExtractedRiskItem 에 경고 코드(또는 「넓혔다」 불리언)
→ 항목을 여는 모든 자리가 같이 본다. 마이그레이션이 붙는다
ⓑ 응답 계약에 싣는다 RiskItemsResponse 에 warnings[]
→ 화면이 배지를 달 수 있다. 계약 변경 + 여섯 벌은 아니지만 수요자가 늘어난다
ⓒ 불변 기록에 남긴다 추출 시점 evidence 항목
→ 감사에는 맞는데 화면은 여전히 못 본다. evidence/ 소유자 판단이 필요하다
ⓐ 가 먼저라고 봅니다. 이 사실이 필요한 자리가 「그 항목을 읽는 모든 곳」이고, 스냅샷이 그 단일 출처입니다. 칸 하나면 #478 이 세운 «저장된 추출뿐» 규약 안에서 끝납니다.
다만 #613 이 머지된 뒤에 정합니다 — 지금 EVIDENCE_WIDENED 는 그 브랜치에만 있습니다.
급하지 않은 이유
옵트인이라 지금 선언된 항목이 하나(ELS-MATURITY-LOSS-CONDITION)뿐이고, 추출 시점 로그에는 남습니다. 데모 경로에서 이 값을 읽고 판단하는 사람이 아직 없습니다.
관련: #613 · #456 · #478(저장된 추출뿐) · #436·#441(MANUAL_SOURCE 가 같은 모양)
#613리뷰에서 찾았습니다. 넓힌 사실은 휘발하고 넓힌 결과는 남습니다.무엇인가
#613이_widen_to_cover를 넣으면서 인용을 우리가 고쳐 쓰게 됐습니다. 모델이 조건절만 인용해도 루브릭 필수요소를 덮도록 결정론으로 넓히고, 그 사실을EVIDENCE_WIDENED경고로 남깁니다 — 그쪽 독스트링이 이유를 이렇게 적었습니다.그 경고가 서버에서 로그까지만 갑니다.
그래서 나중에 스냅샷·화면·교부 문서로 그 항목을 여는 사람은 긴 축자 인용 하나를 봅니다. 그게 «모델이 이만큼 인용했다» 로 읽히는데, 정확히 그 경고가 막으려던 오독입니다.
왜 지금 걸리나
모든 추출 경고가 같은 처지라
#613이 만든 결함은 아닙니다. 다만 그 PR 이 지속되는 산출물을 처음 만듭니다.앞의 것들은 결과를 보면 사실이 드러나거나(실패) 결과가 모델의 것이지만, 이것은 결과만 보고는 우리가 손댔다는 것을 알 수 없습니다.
MANUAL_SOURCE가 있는 이유와 같은 자리입니다(schemas.py주석) — "표식을 만들어 두고 아무도 안 읽으면 다음 사람이 그 표식을 안 믿는다". 거기는 읽는 쪽이app/에 없던 것이고, 여기는 읽는 쪽이 서버인데 서버가 안 남깁니다.어디에 남길까
ⓐ 가 먼저라고 봅니다. 이 사실이 필요한 자리가 「그 항목을 읽는 모든 곳」이고, 스냅샷이 그 단일 출처입니다. 칸 하나면
#478이 세운 «저장된 추출뿐» 규약 안에서 끝납니다.다만
#613이 머지된 뒤에 정합니다 — 지금EVIDENCE_WIDENED는 그 브랜치에만 있습니다.급하지 않은 이유
옵트인이라 지금 선언된 항목이 하나(
ELS-MATURITY-LOSS-CONDITION)뿐이고, 추출 시점 로그에는 남습니다. 데모 경로에서 이 값을 읽고 판단하는 사람이 아직 없습니다.관련:
#613·#456·#478(저장된 추출뿐) ·#436·#441(MANUAL_SOURCE가 같은 모양)