0. 현재 상태 (요약)
사용자 요청으로 IG6 완료 시점에 작업 중지. 모든 변경사항 커밋·푸시 완료, 워킹트리 깨끗함, 백그라운드 작업 없음. 아래 “다음 재개 지점”에서 바로 이어갈 수 있다.
- 최근 커밋:
366c7d4(ingest(IG6), origin/main과 동기화됨) - 로컬 아카이브(
source_documents/AnnualReport_MD/, 2,736개사) 기준: 완료 376 / 대기 2,360 - 위키 전체 페이지 수(대략): companies 881 · products 590 · financial_products 92 · ratings 241 · executives 675 · sources 398 · segments 1,015 · groups 118 · shareholders 81 · industries 78
작업 핸드오프 — 2026-07-01
다른 PC에서 작업을 이어가기 위한 인수인계 문서. (참고: Claude 로컬 메모리
~/.claude/projects/.../memory/는 GitHub에 동기화되지 않으므로 이 문서가 리포 내 정본이다.)
1. 전체 진행 상황
프로젝트는 옵션 B(사업보고서 md 기반 전체 백필 + 전체 인제스트) 두 트랙으로 진행 중.
✅ 트랙 1 — 백필(Backfill): 완료 (353/353)
이미 Full 인제스트된 353개사 전부에 products/financial_products/ratings를 원본
dart_pipeline/dart_md/ 보고서 기반으로 소급 생성·검증 완료. BF1~BF118 전 배치 종료.
- 진행 상태 파일:
wiki/outputs/backfill-done.json(353개 전량 done) - 트래커 스크립트:
python dart_pipeline/backfill_status.py(대기 0 확인용)
🔄 트랙 2 — 인제스트(Ingest): 진행 중 (392/833, 잔여 441)
KOSPI/KOSDAQ 신규기업 Full 인제스트. IG배치13(종목코드 오름차순) + IG4IG6(로컬 아카이브 기반, 종목코드 순서 이탈) 완료.
- IG1: 화천기계·화신·평화홀딩스 (010660·010690·010770)
- IG2: 아이에스동서·퍼스텍·S-Oil (010780·010820·010950)
- IG3: 삼호개발·진원생명과학·에넥스 (010960·011000·011090)
- IG4: 롯데케미칼(011170)·CJ씨푸드(011150)·HMM(011200)·3S·AJ네트웍스·APS·디이엔티·AP시스템·AP위성·BGF·BGF리테일·BGF에코머티리얼즈 (12개사,
source_documents/AnnualReport_MD/로컬 아카이브 기반) - IG5: BNK금융지주·CG인바이츠·CJ CGV·CJ ENM·CJ 바이오사이언스·CJ제일제당·CJ프레시웨이·CMG제약·CNT85·씨에스·CSA 코스믹·DB Inc. (12개사,
source_documents/AnnualReport_MD/로컬 아카이브 기반, 인터럽트로 병합 매니페스트 유실 → 회사 페이지 직접 재추출로 공유노드 병합 수행) - IG6: DB증권·디지아이티엑스·DH오토리드·DKME·DL이앤씨·DMS·DSC인베스트먼트·DSR·DSR제강·DS단석·디엑스앤브이엑스·DYP (12개사,
source_documents/AnnualReport_MD/로컬 아카이브 기반, 각 회사 전용 서브에이전트 + 메인 병합 매니페스트 정상 수령) - 병합 작업(공유 노드, IG4): markets 5사 추가(롯데케미칼·AJ네트웍스·BGF·3S·AP위성), groups 신규 4건(AJ네트웍스·APS그룹·BGF·롯데 갱신), shareholders 신규 다수(롯데지주·CJ제일제당·한국해양진흥공사·한국웨이퍼홀딩스·문지회·문선우·문덕영·홍석조·홍정국·홍정혁·홍라영·BGF·APS·컨텍·류장수·홈스·더제이자산운용·LOTTE HOLDINGS 등), industries 신규 3건(렌탈업·반도체소재부품·위성) + 기존 6건 갱신(화학·식품·해운·유통·지주회사·반도체장비). 중복 정리:
GS_Caltex.md(신규 stub)를 기존GS칼텍스.md로 병합·삭제. - 병합 작업(공유 노드, IG5): markets 8사 추가(KOSPI 3·KOSDAQ 8: BNK금융지주·CJ CGV·CJ제일제당·DB Inc./CG인바이츠·CJ ENM·CJ 바이오사이언스·CJ프레시웨이·CMG제약·CNT85·씨에스·CSA 코스믹), groups 신규 3건(BNK금융그룹·씨지인바이츠·차바이오그룹) + 기존 2건 갱신(CJ에 CJ CGV·ENM·바이오사이언스·제일제당·프레시웨이 링크화, DB에 DB Inc. 링크화), shareholders 신규 12건(CJ·정흥식·권영·뉴레이크인바이츠투자·금호에이치티·신안캐피탈·박훈(CNT85)·박지호·지앤비조합·브이핑크홀딩스·조토리·네이버·롯데쇼핑·협성종합건업) + 기존 2건 갱신(CJ제일제당에 CJ 바이오사이언스 보유 추가, 국민연금공단에 CJ제일제당·BNK금융지주 추가), industries 신규 6건(통신장비·플랜트환경설비·미디어엔터테인먼트커머스·식자재유통단체급식·바이오마이크로바이옴·영화상영업) + 기존 5건 갱신(금융지주·제약·화장품·IT서비스·식품). companies 신규 stub 1건(협성종합건업). 중복 점검: CS JAPAN·CS GLOCAL INC.(씨에스 자회사)와 舊 CS홀딩스 간 혼동 없음 확인, 최재호(진양폴리우레탄) vs 최재호(CSA 코스믹) 기존 disambiguation 정상 확인.
- 병합 작업(공유 노드, IG6): markets KOSPI 8사(DB증권·DKME·DL이앤씨·DS단석·DSR·DSR제강·DYP) + KOSDAQ 5사(디엑스앤브이엑스·디지아이티엑스·DH오토리드·DMS·DSC인베스트먼트) 추가, groups 신규 3건(DH그룹·DL그룹·DSR) + 기존 1건 갱신(DB에 DB증권·DB자산운용·DB저축은행·DB생명보험·DB캐피탈 링크화), shareholders 신규 17건(DB손해보험·김준기·디에이치글로벌·디에이치오토웨어(주주)·DKME INC.·박용석·윤건수·홍석빈·홍하종·DSR제강·한승욱·임종윤·양준규·홍순겸·홍경숙·홍경희·DL) + 기존 1건 갱신(국민연금공단에 DL이앤씨 8.08% 추가), industries 신규 5건(영상보안(CCTV)·벤처캐피탈(VC)·바이오헬스케어(진단·신약)·바이오에너지·리사이클링(자원순환)·산업용 로프·와이어) + 기존 5건 갱신(증권·건설·자동차부품·철강·디스플레이·플랜트환경설비 플레이어 목록에 신규사 추가). 중복 점검: companies/products/financial_products/ratings Glob 전수 확인 결과 파일명 중복 없음(신규 stub 전부 고유 대상).
⏭️ 다음 재개 지점
로컬 아카이브 기준으로 다음 N개사를 산출한다(제외 목록은 ## 3-1 참조):
python dart_pipeline/local_archive_status.py --next 12
결과에서 아래 ## 3-1 제외 목록(파일명≠회사명 오탐)에 있는 이름이 나오면 건너뛰고,
같은 개수만큼 다음 항목을 더 가져와 채운다.
범위가 IG4부터 확장됐다: IG1~3은
dart_pipeline/ingest_status.py(DART API 기반, KOSPI 종목코드 순번, 분모 833)로 진행했으나, IG4부터는 사용자가 제공한 로컬 아카이브source_documents/AnnualReport_MD/(2,736개사, KOSPI+KOSDAQ 사실상 전체 시장 커버)를 기준으로 전환했다. “833/833”이라는 옛 분모는 더 이상 유효한 전체 목표가 아니다 — 실질적인 잔여 작업량은 로컬 아카이브 기준 대기 2,360개사다. 다음 배치를 잡을 때는 반드시local_archive_status.py --next N을 쓰고,ingest_status.py(KOSPI 전용, 구 트랙)는 더 이상 갱신하지 않아도 된다.
배치 실행 방식 (IG4~6에서 검증된 패턴)
local_archive_status.py --next 12→ 12개사 목록 확보(제외 목록 적용).- Workflow 도구로 12개 에이전트를 웨이브 6개씩 동시 실행(웨이브 8 이상은 서버 레이트리밋 유발 확인됨 — 첫 시도 때 14개 동시 실행에서 27/69개사 429 실패). 각 에이전트는 회사 전용 파일만 작성하고 시장/그룹/주주/산업 판단을 텍스트로 보고.
- 병합 에이전트 1개가 공유 노드(markets/groups/shareholders/industries) 반영 + index.md 전체 재생성(Python, PowerShell 스크립트 인코딩 버그 우회) + log.md/handoff 갱신.
- 검증 필수: 매 배치 후 아래를 직접 확인(에이전트 자기보고만 믿지 말 것):
- frontmatter
type:존재 여부 전수 검사 - 내부 링크 깨짐 검사(괄호 포함 파일명은 정규식이 오탐하기 쉬움 — 균형 괄호 인식 로직 필요,
콘솔이 cp949라 결과는 UTF-8 파일로 저장 후 Read 도구로 읽을 것,
print()/cat은 깨짐) - 신규 파일에 국한해 확인하고, 사전에 있던 깨진 링크는 범위 밖으로 구분해 기록
- frontmatter
- 검증 통과 후
git fetch && git log HEAD..origin/main으로 분기 확인 → 커밋 → push.
인터럽트 대응 (실제 발생 사례, IG5)
Workflow가 중간에 중단되면 인제스트(1단계)는 파일이 이미 디스크에 남아있을 수 있으나 병합(2단계) 매니페스트는 유실된다. 이 경우:
- 재실행하지 말고 대상 회사들의
wiki/companies/<회사>.md존재 여부를 먼저 확인. - 누락된 회사만 개별 Agent로 재실행.
- 병합은 별도 에이전트에게 “매니페스트 없이 회사 페이지를 직접 Read해서 frontmatter의
market/group/industry와 본문 ’## 주요 주주’ 섹션으로 정보를 재구성하라”고 지시하면
정상적으로 수행 가능(실제로 이렇게 복구함, 커밋
c28f915).
2. 재개 절차 (다른 PC)
사전 준비
- 리포 clone 후
origin/main최신화 (git pull). - 원본 보고서:
dart_pipeline/dart_md/KOSPI/·KOSDAQ/의 md 파일이 로컬에 있어야 함..gitignore로 리포에서 제외됐을 수 있으니, 없으면 DART에서 재다운로드 필요 (dart_pipeline/도구 사용, dart-pipeline-overview 참조).source_documents/도 동일. - DART API 키는 환경변수로 주입(
dart_pipeline/config.py가 env에서 읽음). 키를 코드/깃에 하드코딩하지 말 것.
인제스트 1배치 루프 (3개사씩)
- 다음 3개사 산출:
python dart_pipeline/ingest_status.py KOSPI # done/pending 갱신compute()의 pending을 stock_code순 정렬해 상위 3개를wiki/outputs/_ingest_next3.json에 기록 (각 항목: name·ticker·file(dart_md 경로)·fy). 위키노드명≠DART corp_name이면 수동 확인. - 3개사 각각 general-purpose 서브에이전트(백그라운드)로 Full 인제스트. 각 에이전트는 회사 전용 페이지만 작성(아래 7종 스코프), 공유 노드는 수정 금지하고 구조화 TODO(MARKET/GROUP/SHAREHOLDER/INDUSTRY/STUB)로 반환.
- 세 에이전트 완료 후 메인이 공유 노드 직접 적용:
wiki/markets/KOSPI.md상장기업 목록에 신규 3사 추가(가나다순 위치)wiki/groups/*신규/갱신 (그룹 소속 시)wiki/shareholders/*신규 (주요 주주, 특히 상장사·개인 대주주; company_page 양방향)wiki/industries/*주요 플레이어 목록 갱신(없으면 신규 생성)
- 배치 마감:
# wiki/log.md에 **Ingest(IG배치N)** 1블록 추가 pwsh -NoProfile -File "engine\scripts\build-index.ps1" # index 재생성 python dart_pipeline/ingest_status.py KOSPI --mark "회사A,회사B,회사C" git add wiki/ dart_pipeline/ git commit -m "ingest(IG): ... (N/833)" git fetch origin && git rebase origin/main && git push origin main
Full 인제스트 7종 스코프(회사당)
sources/<회사>_2025_사업보고서.md(type: Annual Report,resource:원본 dart_md 경로)companies/<회사>.md(type: Company, is_stub:false) — frontmatterticker/market/market_page/industry/group, 재무 하이라이트 3개년, 사업개요·사업부문·주요주주·밸류체인·경영진·신용등급·리스크·# Citationssegments/<회사>_<부문>.md(type: Business Segment) — 부문별 매출비중value_chain/<회사>_밸류체인.md(type: Value Chain)executives/<임원>.md(type: Executive, company 역링크) — 핵심 경영진products/<상품>.md(type: Product) — 점유율/순위/매출비중/대표성 명시 시에만. 일반명 충돌 시<회사>_상품명프리픽스. 지주회사는 자회사 상품을 지주에 귀속 금지.ratings/<회사> 신용등급.md(type: Credit Rating) — 회사채/CP/기업신용(ICR) 등급 명시 시에만. 금융사(증권·보험·은행·캐피탈)는 products 대신financial_products/.- 식별 가능한 공급사·고객사·경쟁사·자회사는
companies/에 stub(is_stub:true).
- 식별 가능한 공급사·고객사·경쟁사·자회사는
양방향 링크 규칙 (CLAUDE.md 참조)
주주↔기업, 시장↔기업, 그룹↔기업, 임원↔기업, 공급/고객↔기업을 양방향 링크.
링크 경로는 번들 기준 절대경로(/companies/...).
3. 미해결·누적 항목 (재개 시 참고)
- KB금융 financial_products 오귀속:
KB_원화예수금·KB_원화대출금·KB_신탁·KB_신용카드4종이 자회사(국민은행·국민카드) 상품을 지주KB금융지주에 잘못 귀속. issuer를 각 자회사로 재지정하고 KB국민은행/KB국민카드 stub 생성 필요. (하나금융지주는 본문에 자회사 주체를 명시하는 방식으로 처리한 선례 참고.) - HS화성(002460)·현대제철(004020): 백필 시 원본 md가 감사보고서 첨부정정본이라 「사업의 내용」·「신용평가」 섹션 부재 → products/ratings 0건. 향후 본문 사업보고서 재확보 후 백필 보강 필요.
local_archive_status.py파일명≠회사명 오탐 주의(## 3-1): 아카이브 파일명이 회사의 과거명·약칭이거나 wiki 회사명과 다른 경우, 스크립트는 파일명 기준으로 done을 판정해 이미 완료된 회사를 영구히 pending으로 오분류한다. 확인된 사례(재인제스트 금지 — 이미 완료됨):APS이노베이션→ 실제 디이엔티(wiki/companies/디이엔티.md)CS→ 실제 씨에스(CS Corporation,wiki/companies/씨에스.md) — 기존CS홀딩스와는 별개 회사DB→ 실제 DB Inc.(wiki/companies/DB Inc..md, DB그룹 지주회사)DGI→ 실제 디지아이티엑스(wiki/companies/디지아이티엑스.md)DH오토넥스→ 이미wiki/companies/DH오토웨어.md(title: DH오토넥스)로 인제스트 완료(본 세션 이전).--next결과에 위 5개 이름이 나오면 건너뛰고 다음 항목으로 채울 것. 새로운 사례 발견 시 이 목록에 추가.
- 딥 deferred(깨진 링크 허용 관례): 대기업집단 일부 그룹 페이지·다수 상장 자회사 stub 미생성. 해당사 ingest 시 또는 일괄 lint로 해소.
- 국민연금 등 기관 주주: 보고서에 5% 미만이면 미기재 → “미확인” 처리한 사례 다수.
- 경미한 사전 이슈(lint 대상, 이번 세션 확인만 하고 미수정):
wiki/products/원사(THREE STAR).mdvs원사_THREE_STAR.md— 일신방직 원사 제품이 서로 다른 세션에서 중복 생성됨(커밋2b0659f·aa7712e). 병합 필요.wiki/products/고밀도폴리에틸렌(HDPE).md·폴리프로필렌(PP).md— 파일명에 괄호가 남아있어 마크다운 링크 파싱 시 첫)에서 끊길 위험(다른 파일들은 이미_로 정규화함). 정규화 권장.wiki/companies/DB하이텍.md의/shareholders/국민연금링크(실제 파일은국민연금공단.md),wiki/industries/IT서비스.md의/companies/LG_CNS(stub 미생성),wiki/industries/증권.md의/companies/삼성증권·/companies/키움증권(stub 미생성) — 전부 이번 세션 이전부터의 사전 이슈.
4. 환경·협업 주의
- 원격 협업: 사용자가 Quartz 정적사이트(site/, gh-pages)도 origin에 푸시 중.
매 배치 push 전
git fetch && git rebase origin/main로 공존(절대 force-push 금지). - 읽기 전용:
source_documents/,dart_pipeline/dart_md/원본은 절대 수정 금지. - 줄바꿈 경고: LF→CRLF git 경고는 무해(무시). 콘솔 한글 깨짐은 표시상 문제이며 파일은 정상 UTF-8.
- 명칭 매핑: DART명≠위키명 사례 — 신한지주→신한금융지주, 삼성생명→삼성생명보험,
POSCO홀딩스→포스코, 엘에스일렉트릭→LS일렉트릭, 삼성화재해상보험→삼성화재 등.
불일치 시
ingest_status.py KOSPI --mark "DART명".
5. 핵심 파일 요약
| 파일 | 역할 |
|---|---|
dart_pipeline/local_archive_status.py | 로컬 아카이브 기준 인제스트 트래커 — --next N으로 다음 N개사 JSON 산출(파일명≠회사명 오탐 주의, 위 항목 참조) |
dart_pipeline/ingest_status.py | DART API 기준 인제스트 트래커 (done/pending, --mark) — KOSPI 종목코드 순번 트랙용 |
dart_pipeline/backfill_status.py | 백필 트래커 (완료, 참고용) |
wiki/outputs/ingest-tracker-KOSPI.md | 사람용 인제스트 현황(자동 생성) |
wiki/outputs/_ingest_next3.json | 다음 3개사 스크래치(IG1~3, DART API 순번 트랙용 — IG4부터는 local_archive_status.py 사용) |
wiki/outputs/backfill-done.json | 백필 완료 집합(353 전량) |
engine/scripts/build-index.ps1 | wiki/index.md 재생성 |
wiki/log.md | 작업 이력(배치별 1블록) |