소스 경계를 읽기 경로에서도 다시 검사해 누수 노드를 회상에서 빼냄
문제 (Context)
쓰기 게이트(produce_node)가 유일한 경계 검사 지점이었다. 그래서 게이트보다 먼저 만들어졌거나 다른 경로로 기록된 노드는 저장된 상태에서 로컬 경로, id, 토큰을 그대로 품을 수 있었다. render()는 저장된 .md 본문을 다시 검사하지 않고 그대로 다이제스트 스니펫에 읽어 넣었다.
시도한 해결 (Decision)
문제의 노드 하나는 저장소 루트 절대경로를 본문에 품고 있었고, 스니펫이 잘려 보이지 않았을 뿐 어떤 게이트도 막지 못했다. render()가 이제 머리말과 본문 전체를 대상으로 노드마다 경계를 다시 검사하고, 위반 노드는 회상에서 보류한다(횟수를 기록하며, 조용히 넘기지 않는다). find()도 색인 메타데이터가 위반인 노드를 랭킹 전에 떨어뜨린다. 영향 범위는 해당 노드 한 건으로 한정되고(이미 대체된 노드), 연속성은 그대로다. 테스트 3건을 보탰다. 경계는 쓰기와 읽기 양쪽에서 대칭으로 강제된다.
근거·결과 (Consequences)
이 노드 자체가 첫 기록에서 로컬 경로를 인용했다는 이유로 거부되었다가 다듬어 다시 올라왔다. 게이트가 자기 작성자를 잡아낸 셈이다.
노드 계약 (contract)
| 필드 | 값 |
|---|---|
| type | 결정(decision) |
| Status | superseded |
| source_count | 1 |
| confidence | 미설정 — 구 엔진 격차 |
| confidence_reason_codes | 미설정 — 구 엔진 격차 |
| stale | fresh |
| 이슈(feature) | RAG·지식엔진 |
시행착오 타임라인 (supersede)
- 이후 수정: wiki_chain 코드 리뷰 수정·검색·그래프 경계 (응축 묶음) (대체됨)
상호참조
- 이어받음: 쓰기 입구에서 RAG 소스 경계 강제
이슈 RAG 검색·소스 경계 · Status superseded · 2026-06-25