박보검, 코드까지 확인했다. 진단 확정.
1) 노드 단위 = "동기화된 위키 페이지 1개"
src/shared/brain.ts의 buildBrainGraph():
const nodes = pages.map((p) => ({ id: p.slug, ... })) // 페이지 1개 = 노드 1개
- 노드는
brain_pages테이블에 적재된 페이지마다 1개. slug = 파일명(.md 제외). - 적재 대상은
company/wiki/*.md뿐.index.md·log.md·SCHEMA.md는 동기화 대상이 아니다(목차·로그·규칙 파일). .sync-manifest.lax.json실측 = 정확히 8개 파일.
→ 8노드 = 위키 8페이지가 맞다. 단, 네가 적은 "index"는 틀렸다. 8개 중 그 자리는 LAX-브레인.md다. company/index.md(목차)는 노드가 아니다.
실제 8노드: LAX-브레인 · 구상금청구 · 데이터-자산-카탈로그 · 법률문서-분류축 · 외부-수집-채널 · 판례-지식층 · 판례-조문클러스터 · 판례-리딩케이스
2) 사건번호 [[링크]]가 노드로 안 뜨는 이유 = phantom (대상 .md 없음) — 접힘 아님
판례-리딩케이스.md 안에 사건번호 위키링크가 60건 이상 있다(리딩 14건 + 인용 ego-net). 전부 노드로 안 뜨는 건 대상 .md 파일이 실재하지 않아서다. 위 검증에서 93다1770·2005다31637 등 전부 PHANTOM 판정.
게다가 그래프 빌더는 phantom을 노드는 물론 엣지도 안 만든다. 같은 함수:
if (!to || !slugs.has(to)) continue // 대상 페이지가 없으면 그 링크는 통째로 버림
주석에도 명시: "dangling [[links]] are dropped from the graph."
→ "한 페이지 안의 링크라 접힌 것"이 아니다. 설계상 대상 페이지가 없는 링크는 노드·엣지 양쪽 다 그래프에서 누락된다. 사건번호들은 텍스트 [[ ]]일 뿐, 그래프에 존재하지 않는다.
3) 현재 실재 노드 = 8개 (전부)
| # | slug (노드) | 비고 |
|---|---|---|
| 1 | LAX-브레인 | 허브 |
| 2 | 구상금청구 | 사건유형 |
| 3 | 데이터-자산-카탈로그 | |
| 4 | 법률문서-분류축 | |
| 5 | 외부-수집-채널 | |
| 6 | 판례-지식층 | L1 |
| 7 | 판례-조문클러스터 | L1 |
| 8 | 판례-리딩케이스 | L1, 내부에 사건번호 60+ 링크(phantom) |
엣지는 페이지↔페이지 링크만 산다(예: 판례-리딩케이스→판례-지식층/조문클러스터/구상금청구/데이터-자산-카탈로그). 사건번호 링크는 0개 기여.
핵심 진단
Jason의 기대(판례마다 노드 → 인용관계 시각 그래프)는 현 구조로는 불가능하다. 확정된 2층 설계상 판례 코퍼스는 L2 lax-db에만 있고, L1 위키는 요약 페이지다. 판례는 DB 행이지 위키 .md가 아니므로 노드가 될 수 없다.
선택지는 둘 중 하나다(다음 설계 결정 필요):
- 판례를 노드로 띄우려면 → 리딩케이스 N건을 각각
판례-<사건번호>.md스텁 페이지로 발행(frontmatter + 인용 [[링크]]). 그 순간 노드·인용엣지가 그래프에 뜬다. 단 위키가 수십~수백 노드로 비대해지고, "원문은 참조로 적재" 원칙과 충돌(스텁은 요약만 두면 됨). - 현 구조 유지 → 판례 인용그래프는 위키 그래프가 아니라 lax-db 위에서 별도 뷰로 렌더(graph.json을 DB 코퍼스에서 생성). 위키는 큐레이션층으로 둔다.
이건 내 판단 영역 밖(제품 결정)이라 Jason/변우석이 정해야 한다. 정해지면 내가 스텁 발행이든 매니페스트 확장이든 집행하겠다.