mirror of
https://github.com/sotam0316/brain_dogfood.git
synced 2026-04-24 19:48:35 +09:00
Fix: Final critical data loss bug in metadata parsing
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
# 버그 조치 보고서: 마크다운 문서 저장 시 데이터 소실 (2026-04-18)
|
||||
|
||||
## 1. 버그 내용
|
||||
- **현상**: 마크다운 형식의 메모(가장 흔하게는 `roadmap.md`)를 저장할 때, 본문 중간에 위치한 수평선(`---`) 이후의 내용이 모두 삭제되는 현상 발생.
|
||||
- **원인**:
|
||||
- 메모 하단에 `$그룹`, `#태그`를 추출하여 푸터로 모아주는 로직이 본문 내의 마크다운 수평선(`---`)과 그 뒤에 나오는 헤더(`# 제목`)를 '자동 생성된 푸터'로 오인함.
|
||||
- 정규식이 너무 탐욕적(Greedy)이었으며, 줄 단위 구분이 명확하지 않아 파일 끝까지의 모든 내용을 푸터로 간주하고 삭제함.
|
||||
|
||||
## 2. 조치 사항
|
||||
### 푸터 식별 로직 정교화 (`app/utils/__init__.py`)
|
||||
- **수단**: 정규식을 파일의 가장 끝에 위치한 **'수평선 + 순수 메타데이터 줄'**의 조합으로만 한정하도록 수정.
|
||||
- **적용**: `re.MULTILINE` 플래그를 활용하여 줄 시작(`^`)과 끝(`$`)을 명확히 구분하고, `#` 뒤에 공백이 있는 헤더는 절대로 푸터 구성 요소로 보지 않도록 개선.
|
||||
- **결과**: 본문 중간의 수평선 및 마크다운 헤더 구조가 완벽히 보존됨.
|
||||
|
||||
### 태그 추출 정규식 개선
|
||||
- **수단**: `#` 뒤에 공백이나 숫자가 먼저 오는 경우(마크다운 헤더 등)를 제외하고, 문자로 시작하는 경우만 태그로 인식하도록 강화.
|
||||
- **적용**: `(?<!\w)#([^\s\#\d\W][^\s\#]*)` 패턴 적용.
|
||||
|
||||
### 자동 제목 생성 로직 개선
|
||||
- **수단**: 첫 번째 `---` 이전만 본문으로 보던 방식에서, 전체 내용 중 가장 상단의 유의미한 텍스트를 찾아 제목으로 사용하도록 변경.
|
||||
|
||||
## 3. 결과 및 확인
|
||||
- 재현 스크립트(`scratch/repro_bug.py`)를 통해 `roadmap.md`와 같은 복합 마크다운 구조에서도 데이터가 삭제되지 않고 정확히 보존됨을 확인.
|
||||
- 의도적으로 추가한 푸터 메타데이터는 정상적으로 제거 후 재배치됨을 확인.
|
||||
|
||||
## 4. 향후 주의사항
|
||||
- 텍스트 후처리 로직 수정 시 마크다운의 특수 기호와 충돌할 가능성을 항상 염두에 두어야 함.
|
||||
- 특히 `[\s\S]*`와 같은 광범위한 매칭은 앵커(`$`)가 있더라도 지양하고, 줄 단위 매칭을 우선할 것.
|
||||
Reference in New Issue
Block a user