Blog ADR 그래프 기능 전체 삭제
요약Sprint 189에서 추가한 mermaid 기반 ADR 관계 그래프(전용 /adr/graph 페이지 + 상세 사이드바 미니 그래프)를 전체 삭제한다. 그래프 전용 컴포넌트 5개·lib 로직(buildGraph/getSubgraph/filterAdjacency)·데드 데이터(outgoingLinks)·i18n 키 44개·fixtures F7/F8을 제거하고, 그래프와 무관한 '관련 ADR' 텍스트 링크·블로그 본문 mermaid·--diagram-bg/grid 토큰은 보존. tsc 0·build(라우트 소멸)·게이트 7종 무회귀·Critic 0건·CI #339 37 pass / 0 fail.
날짜
영향도높음
목표
- 기술 블로그(
blog/) ADR 섹션의 mermaid 기반 ADR 관계 그래프를 전체 제거한다. - Sprint 189에서 추가한 ① 전용 그래프 페이지(
/adr/graph, KR/EN — 범례·필터·전체 그래프)와 ② ADR 상세 페이지 사이드바의 미니 관계 그래프(1-hop 서브그래프)를 모두 삭제한다. - 그래프와 무관한 기능(관계 데이터의 텍스트 표현·블로그 본문 다이어그램)은 보존하고, 의존 정리·게이트 무회귀·KR/EN 동시 정합을 보장한다.
배경
- 사용자
/start인자로 "Blog ADR에서 그래프 기능 삭제"를 지시. 착수 시 핵심 모호성 — "그래프 기능"의 범위가 두 갈래로 해석되었다. - 탐색 결과, ADR 상세 사이드바(
adr-meta-sidebar.tsx)에는 두 가지가 별개로 존재했다: ① "관련 ADR"(RelatedLinks,meta.relatedAdrs기반 텍스트 링크 — 그래프 아님), ② 미니 관계 그래프(RelatedAdrGraph, mermaid 시각화). 즉 관계 데이터는 이미 텍스트 링크로도 표시되고 있었고, 미니 그래프는 그 위에 얹힌 추가 시각화였다. - 또한 블로그 글 본문의 mermaid 다이어그램(
blog/src/components/blog/mermaid.tsx등)은 ADR 그래프와 완전히 무관한 별개 기능이었다.
결정
D1. 삭제 범위 — 그래프 시각화 전체 (사용자)
- AskUserQuestion으로 범위를 확인 → "그래프 기능 전체 삭제" 확정. 전용 페이지 + 사이드바 미니 그래프 + 모든 그래프 컴포넌트·lib 로직·i18n 키를 제거.
- 보존: 사이드바 "관련 ADR" 텍스트 링크 목록(그래프 아님), 블로그 본문 mermaid 다이어그램,
--diagram-bg/gridCSS 토큰(블로그 본문 mermaid와 공유 가능, 무해).
D2. lib 그래프 로직 — 전부 제거
getSubgraph가 상세 6라우트의 미니 그래프 생성에 쓰였으나, 미니 그래프 자체를 삭제하므로getSubgraph·buildGraph·mergeTargets·filterAdjacency와AdrIndex.graph필드·AdjacencyList타입을 함께 제거. 비그래프 lib(buildUrl/filterAdrsByTopic/groupByKind/mapBySprint)은 유지.
D3. 데드 데이터(outgoingLinks) 동반 제거
AdrDoc.outgoingLinks는buildGraph/mergeTargets에서만 소비되던 그래프 전용 데이터였다. 그래프 제거 후 데드 필드가 되므로parser.ts의 추출 로직(extractOutgoingLinks)과 그 전용 정규식ADR_LINK_RE까지 제거.normalizeAdrId는 related_adrs 추출에서도 쓰여 유지.
D4. fixtures F7/F8 — 제거 (회귀 커버리지 손실 없음)
- F7/F8은
index.graph.edges를 직접 검증하는 그래프 전용 회귀였다.AdrIndex.graph제거로 의미가 사라져 두 fixture를 삭제(12→10). ADR 관계 회귀는 F6(relatedAdrs비어있지 않음)이 계속 커버.
구현
구현 커밋 (1커밋, PR #339 squash → 81c62e8)
b1da63dchore(blog) — ADR 그래프 기능 전체 삭제 (20 files, +15 / −845)- 삭제(5):
adr/graph/page.tsx(KR/EN),adr-graph-view.tsx,adr-graph-cta.tsx,related-adr-graph.tsx - 컴포넌트(4):
adr-header(nav "그래프" 링크),adr-landing-view(그래프 CTA),adr-meta-sidebar(미니 그래프 블록 + 그 유일 소비처였던 미사용prefix변수),adr-detail-view(miniGraphprop) - 라우트(6): sprints/permanent/topics × KR/EN —
getSubgraph/buildAdrIndex().graph/miniGraph전달 제거 - lib:
index-builder(buildGraph/mergeTargets/getSubgraph/filterAdjacency + graph 필드),types(AdjacencyList·AdrIndex.graph·AdrDoc.outgoingLinks),parser(extractOutgoingLinks·ADR_LINK_RE) - i18n: graph 키 KR/EN 각 22개 제거
- fixtures: F7/F8 제거(12→10) + 헤더 주석 갱신
- 삭제(5):
검증
- 타입/빌드:
tsc --noEmit소스 에러 0(잔존 6건은 삭제된 페이지를 참조하는 stale.next/types캐시 —.next재생성으로 소멸).next build성공 → 산출물에서/adr/graph·/en/adr/graph라우트 소멸 확인, 나머지 ADR/posts/about 라우트 KR/EN 정상. - 게이트 7종 무회귀: doc-refs 347(0 broken) · adr-en-coverage 139/139 · i18n-residue 2.19%(<8%) · adr-index-count 일치 · blog-crosscheck KR10/EN10(위반 0) · adr-links 0 broken · adr-conversion 139 all passed.
- 잔여 참조 전수 grep: 그래프 전용 심볼·
/adr/graph라우트 참조 0건(주석 멘션만 정리). - lint: blog는 ESLint 미설정(N/A) — 품질 게이트는 tsc/build.
- Critic:
codex review --base main— 이슈 0건("removal is internally consistent: source references to removed components/types/helpers were cleaned up, and TypeScript passes. No actionable regressions"). - CI #339: Passed 37 / Failed 0 — Build Blog (SSG) pass(2m21s)·Coverage Gate·E2E Programmers pass.