Changelog
All notable changes to DartLab will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.7.10] - 2026-03-27
Added
- review 패키지: 구조화된 기업 분석 보고서 시스템
c.review("수익구조")/c.review("자금조달")— 템플릿 기반 분석blocks(company)— 16개 블록 사전,Review([...])자유 조립c.reviewer()— LLM 종합의견 + guide 파라미터- rich/html/markdown/json 4가지 렌더링
- analysis/strategy calc-only 패턴: 15개 calc 함수, import 방향 분리
- README Review 섹션 (EN/KR)
- sampleReview 노트북, 블로그 124호
Changed
- sections pipeline, DART/EDGAR Company review 메서드
0.7.9 - 2026-03-26
Added
- Gemini OAuth 2.0 브라우저 로그인: API key 없이 Google 계정 로그인으로 Gemini 사용 가능
- Gather 엔진 시계열 전면 개선:
price(),flow(),macro()Polars DataFrame 시계열 반환 - 네이버 차트 API 전환: 모바일 API(1000일) → 차트 API(6000일, 수정주가, 1회 요청)
- Gather 인프라 강화: circuit breaker, stale-while-revalidate, Yahoo Direct consensus, FMP 확장
- AI 도구 아키텍처 재설계: 101개 → 8개 Super Tool 통합
- Insight 10영역 확장: predictability, uncertainty, coreEarnings 3영역 추가
scanAccount()/scanRatio(): 전종목 재무 배치 스크리닝 (2,700+ DART / 500+ EDGAR)- sections Categorical 스키마: RSS 427MB 절감 (83%)
- ECOS gather 엔진: 한국은행 경제통계 22개 지표 수집
- Google Gemini provider:
google-genaiSDK 기반 - Ollama 속도 최적화: GPU 자동 감지, flash_attn, 스마트 preload
- HF Spaces Docker 웹 데모: Gradio 기반 AI 분석 데모
- 글로벌 피어 매핑: WICS→GICS 섹터 기반 자동 매핑
Fixed
- Gather 코드 감사: 전체 에러 경로
log.warning전환 - 차트/테이블 기간 컬럼
2024Q1형식 지원 - EDGAR docs 수집 안정화: filing 파싱 실패 시 개별 스킵
Changed
macro()시그니처:macro(market="KR", indicator=None)직관적 호출- DEV.md 전수 현행화 (analysis 10모듈, insight 10영역, gather 도메인 확장)
- README EN/KR 동기화: Market Data, scanAccount/scanRatio 섹션
0.7.8 - 2026-03-25
Added
- 3-Layer Freshness 감지: HF ETag(L1) → TTL 폴백(L2) → DART API
rcept_nodiff(L3) 3계층 모델로 로컬 데이터 최신 여부를 자동 판단 freshness.py모듈 신규:checkFreshness(stockCode)종목 단위 감지,scanMarketFreshness(days=7)시장 전체 스캔,collectMissing(stockCode)누락 공시 증분 수집dartlab.checkFreshness()루트 함수:import dartlab하나로 freshness 체크 가능Company.update()메서드: 누락된 최신 공시를 명시적 증분 수집 (c.update(),c.update(categories=["finance"]))- ETag 기반 HuggingFace freshness: HTTP HEAD 요청(~0.5초)으로 원격 데이터 갱신 여부 판단.
.parquet.etag사이드카 파일로 ETag 비교 - CLI
--check/--incremental옵션:dartlab collect --check 005930(freshness 체크만),dartlab collect --incremental(누락 공시만 증분 수집) - guidance 메시지 5종:
freshness:checking/fresh/stale/noKey/scanDone+hint:newFilingsAvailable구조화 메시지 - README Data 섹션 전면 개편: 3-Step Pipeline, Freshness 3-Layer 테이블, 감지/수집 예시 (Python + CLI), 배치 수집 (영문/한국어 동시)
Fixed
- 배치 수집 v1 스키마 크래시: 구형 HuggingFace parquet에
reprt_code/apiType컬럼이 없을 때SchemaError대신 빈 set 반환 (미수집 취급 → 재수집) dataLoader.py중복 분기:"error:download_failed" if category == "docs" else "error:download_failed"양쪽 동일한 삼항연산 정리- docs 데이터 출처 표기: installation.md “GitHub Releases” → “HuggingFace Datasets”로 현행화, quickstart.md 자동 다운로드 메시지 동기화
0.7.7 - 2026-03-24
Fixed
- stale TTM 차단:
getTTM()에 trailingNone최신성 가드를 추가하여 오래된 분기 값만 남은 시계열을 최신 TTM으로 잘못 해석하지 않도록 수정 finance.ratios최신성 검증 강화:calcRatios()가 분기 TTM 계산 시 stale CF/IS 항목을 최신값처럼 섞지 않도록 변경- IS-CF 순이익 교차검증 오탐 수정: SK하이닉스처럼 CF
net_profit이 2018년 값에서 끊긴 경우 최신 IS TTM과 비교해 경고를 띄우던 버그 해결 - 회귀 테스트 2건 추가: stale TTM utility 케이스와 stale CF 순이익 cross-check 오탐 케이스를 unit test로 고정
0.7.6 - 2026-03-23
Added
dartlab.simulation()루트 함수: 경제 시나리오 시뮬레이션. Company 메서드c.simulation()동시 추가__all__보완:governance,workforce,capital,debt,simulation5개 함수 추가- EDGAR Company Tier 1 승격: EDGAR core (sections, show, trace, diff, BS/IS/CF, ratios, profile) Stable로 격상
- EDGAR Company.valuation() / forecast(): 2-Tier 원칙에 따라 EDGAR Company 메서드 추가
- analyst 모듈 USD 자동 감지:
dartlab.valuation(),dartlab.forecast(),dartlab.simulation()루트 함수가company.currency기반 KRW/USD 자동 포맷 - US 매크로 시나리오:
PRESET_SCENARIOS_US(baseline, adverse, rate_hike, rate_cut, tech_downturn) + US 섹터 탄력성 12개 fmt.py통화 포맷 헬퍼:fmtBig()(억/M),fmtPrice()(원/$),fmtUnit()— analyst 모듈 공통 사용- AI 비서 도구 2개:
checkDataReady(종목별 데이터 준비 상태 확인),estimateTime(작업 예상 시간 안내) - AI 시스템 프롬프트 데이터 관리 원칙: 분석 전 데이터 확인, 시간 안내, 단계별 가이드 규칙 추가
- AI 분석 데이터 신선도 헤더: meta 이벤트에
dataDate필드 자동 삽입 (Company filings 최신일 기반) - AI 도구 자동 탐색 모듈:
tools/discovery.py— 도구 카탈로그 동적 생성 - AI 도구 선택기:
tools/selector.py— 질문 유형별 도구 우선순위 선택 - AI 7개 도메인 도구 확장: company/finance/analysis/scan/system/openapi/ui 도구 세트 강화
- AI skeleton 가이드 기반 분석: 구조화된 분석 흐름 + 동적 턴 확장
- capabilities 런타임 선언:
core/capabilities.py도구 기능 메타데이터 모듈 - USD 테스트 7개: DCF/valuation/forecast/simulation USD repr + fmt helper 테스트
- README AI 비서 권장 Tip: AI Analysis 섹션에
dartlab.ask()적극 권장 문구 (영문/한국어) - README Market Scan 확장:
screen(),benchmark(),signal()함수 문서화
Fixed
- IS 계정 정렬:
selling_and_administrative_expensessortOrder 1050→1300 수정. 판관비가 매출원가 위에 표시되던 문제 해결.loss_before_taxsortOrder 1350→1905로 위치 교정 - CFS/OFS 시트 단위 분리:
_applyCfsPriority()행 단위 혼합 → 시트(연도×분기×재무제표) 단위 선택으로 변경. 동일 시트에 연결/별도 숫자가 섞이던 문제 해결. CFS 존재 시 CFS만, 없으면 OFS 전체 폴백 forecast()/valuation()timeseries None 가드:c.finance.timeseries가 None일 때 크래시 대신 None 반환hasattr이중 체크 제거:getattr(c, "sectorKey", None) if hasattr(...)→getattr(c, "sectorKey", None)단순화revenueForecast.py도달불가 조건:len(recent) > 8→len(valid) > 8(recent = valid[-4:]이므로 항상 False였음)revenueForecast.pydict key 통일:reinvestment_rate→reinvestmentRate,delta_nwc→deltaNwc,invested_capital→investedCapital,fundamental_growth→fundamentalGrowth,sign_changes→signChanges,data_points→dataPoints— 프로젝트 네이밍 규칙과 불일치하던 6개 키 수정- timeseries 튜플 언래핑:
finance.timeseries가(dict, list)튜플 반환 시dict만 추출 — DART/EDGAR 양쪽 analyst 함수 에러 수정 revenueForecast.py속성명 버그:tsResult.r_squared→tsResult.rSquared— 실제 속성명과 불일치하여 AttributeError 발생하던 3곳 수정
Changed
- stability.md Tier 재편: EDGAR core Tier 2 → Tier 1, valuation/forecast/simulation Tier 3 → Tier 1
- README 양쪽 Stability 테이블 갱신: EDGAR core Stable, analyst 함수 Stable 반영
- AI runtime agent 경량화: 292줄 → 구조화된 모듈로 분리
0.7.5 - 2026-03-22
Added
_reference/공개: DART/EDGAR finance 계정학습 메커니즘 및 매핑 도구를 git 추적 대상으로 전환. wheel 배포에서는 제외- stability.md 확장:
index,filings(),profile,CIS,SCE,timeseries,ratios, 도구 모듈 등 누락 API의 안정성 등급 명시 - EDGAR topic naming convention 문서화:
{formType}::{itemId}형식 및 짧은 alias 설명 - DART/EDGAR namespace 차이 문서화: docs/report namespace 비대칭 설명 추가
Changed
scedeprecation:finance.sce/c.sce에 DeprecationWarning 추가 → v0.8.0에서 제거 예정.SCE(대문자)가 공식 경로filings()type hint 통일: DARTfilings()반환 타입을DataFrame→DataFrame | None으로 Protocol과 일치 (실제 동작 변경 없음)- CLAUDE.md
_reference/정책 갱신: 계정학습 메커니즘 공개, git 추적 대상으로 재정의
0.7.4 - 2026-03-22
Added
dartlab collectCLI 명령: DART 공시문서 HTML → parquet 수집dartlab reportCLI 명령: 기업 분석 보고서 Markdown 자동 생성- AI 분석 validation 모듈:
runtime/validation.py— LLM 응답 품질 검증 로직 분리 - 테스트 8개 신규:
test_api_common(17),test_company_validation(12),test_resolve_messages(6),test_screen_presets(5),test_models_validation(15),test_context_coverage(8),test_mapping_integrity,test_ratios_golden— 서버 보안/입력 검증/비즈니스 로직 커버리지 확대 .env.example: 15개 환경변수 문서화 (DARTLAB_DATA_DIR, DART_API_KEY, OPENAI_API_KEY 등)- 보안 pre-commit 훅:
detect-private-key,bandit추가 - CI security job:
pip-audit --strict의존성 취약점 검사 - 서버 입력 검증 강화: Pydantic Field 제약 (question max_length=5000, company max_length=100 등), 종목코드 path traversal 방어 regex (
^[A-Za-z0-9가-힣]{1,20}$) - 에러 메시지 credential 마스킹: api_key, token, secret, password, bearer 패턴 자동
***치환
Changed
- AI context builder 리팩토링: 컨텍스트 조립 로직 구조화 (builder.py 113줄 변경)
- AI 런타임 파이프라인 리팩토링: core.py, pipeline.py — 분석 흐름을 validation/events/core로 모듈 분리
- CI test 마커 필터 보강:
-m "not requires_data"→-m "not requires_data and not heavy"(CI에서 heavy 테스트 제외) - pre-commit ruff 버전 동기화: v0.9.0 → v0.11.4 (CI ruff 버전과 일치시켜 format 불일치 해소)
- ruff exclude에
_reference/추가: 참조 파일 lint 제외 - 의존성 상한 추가:
polars<2,requests<3,rich<14,beautifulsoup4<5등 주요 의존성에 major version 상한 설정 - rank 엔진 print → logger:
rank.py,screen.py의 print문을logging.getLogger(__name__)전환 - 서버 bare except 구체화:
streaming.py의except Exception→ OSError, RuntimeError 등 7개 구체 예외 타입 - publish.yml 버전 검증 추가: git tag와 pyproject.toml 버전 불일치 시 빌드 자동 실패
- test_cli_e2e 안정화: CLI subcommand 목록 하드코딩 → 핵심 명령 개별 존재 체크 (새 명령 추가 시 테스트 안 깨짐)
- test_server LRU 안정화: 메모리 압박 환경에서
_max_size동적 축소로 인한 테스트 실패 → 메모리 체크 모킹
Fixed
- CI lint 10연패 해결:
_reference/폴더의 참조 코드(F601 중복키, E722 bare except, F403 star import) 44개 에러 → ruff exclude 설정으로 근본 해소 - CI format 실패: pre-commit ruff v0.9.0과 CI ruff v0.11.4 버전 차이로 42개 파일 포맷 불일치 → 버전 동기화
- CI test_cli 실패:
dartlab.core.ai.detect모듈이 git에 미커밋 상태에서 테스트가 import 시도 → 누락 파일 추가 - CompanyCache LRU 테스트: 메모리 1.5GB 초과 시 캐시 크기가 5→1로 축소되어
assert len(cache) == 5실패 →_check_memory_pressure모킹
0.7.3 - 2026-03-21
Added
- 도구 모듈 루트 접근:
dartlab.chart,dartlab.table,dartlab.text로 직접 사용 가능 —_Module.__getattr__lazy import, 기존from dartlab.tools import chart경로도 유지 - CLI OAuth 브라우저 로그인:
dartlab setup oauth-codex실행 시 브라우저 자동 열림 + PKCE 콜백 서버 대기 (120초 타임아웃) - CLI 스트리밍 기본값:
dartlab ask가 기본 스트리밍 출력 (--no-stream으로 비활성화) - CLI provider 전체 안내:
dartlab setup에 5개 provider (oauth-codex, codex, ollama, openai, custom) 설치/설정 가이드 추가 - CLI 상태 테이블:
dartlab status가 전체 provider를 테이블 형식으로 요약 - AI Marimo 노트북:
startMarimo/aiAnalysis.py—dartlab.ask()사용 예시 (기본, provider 지정, 스트리밍, include/exclude) - README AI 분석 섹션:
dartlab.ask()+ CLI 사용법 + OpenDART API 키 안내
Changed
- 차트 메서드명 단순화:
revenue_trend→revenue,cashflow_pattern→cashflow,dividend_analysis→dividend,balance_sheet_composition→balance_sheet,profitability_ratios→profitability(기존 이름은 alias로 유지) - README/README_KR 차트 예시:
from dartlab.tools import chart→dartlab.chart.*단축 경로로 변경 - 메모리 최적화 — OOM 크래시 해결: 32GB 시스템에서 Python 37GB+31GB 소비 → 크래시 발생. 8개 기법 적용:
- LRU 캐시 maxsize 85% 축소 (textStructure.py 6개, 실측 working set 기준)
- CompanyCache 20→5, TTL 30분→10분
- MCP 캐시에 LRU 퇴출 정책 적용 (기존 무제한 dict)
- Polars Categorical 자동 전환 (sj_div, topic, account_id 등 반복 문자열)
- Int64→Int32 다운캐스트 (year, section_order 등)
loadData()columns 파라미터 추가 — Company 초기화 시 corpName만 경량 읽기- sections() 파이프라인 중간 dict 조기 해제 +
gc.collect()
- 채팅 UI rAF 스크롤: 스트리밍 흔들림 해소
- contentSplitter monotonic 보장: committed 영역이 줄어들지 않는 증분 마크다운 렌더러
- 채팅 입력 provider/model chip: 현재 설정 표시
- 사이드바 대화 미리보기: 마지막 메시지 50자 미리보기
Fixed
- docs/api/finance-summary.md: 존재하지 않는
c.fsSummary()참조를 공개 API (c.BS,c.IS,c.CF)로 수정 - docs/tutorials/04_ratios.md: 내부 모듈 경로 (
engines.dart.finance.pivot)를 공개 API (c.finance.ratioSeries)로 수정 - CLI 스트리밍 출력 누락:
dartlab ask스트리밍 제너레이터 미소비 버그 수정 - startMarimo/aiAnalysis.py: 깊은 import 경로를
dartlab.ask()루트 진입점으로 수정
0.7.2 - 2026-03-20
Added
- 복합 재무비율 11개: ROIC, DuPont 3분해(마진·회전율·레버리지), CCC(현금전환주기), Altman Z-Score, Piotroski F-Score, EV/EBITDA, 이자보상배율, 배당성향, 배당수익률
- AI 대화 품질 Phase 1: CoT 구조화 프레임워크(4단계 분석), Tool Routing(질문 유형별 도구 서브셋), Self-Critique/Reflection(답변 자체 검증), 정보 배치 최적화(Lost-in-the-Middle 대응)
- MCP 39개 도구 노출: OpenAI function calling 스키마 → MCP Tool 자동 변환, stock_code 자동 주입
- 증분 마크다운 렌더러:
createIncrementalRenderer()— 스트리밍 중 완결 블록 캐시 + 꼬리만 재파싱
Changed
- UI 성능 최적화:
content-visibility: auto(뷰포트 밖 스킵), SSE chunk rAF 배칭(스트리밍 끊김 방지), IntersectionObserver 점진 렌더(초기 10개),contain: layout style paint(테이블 격리) - Tool Description 정밀화: 15개 핵심 도구에 “사용 시점 / 사용하지 말 것” 가이드 추가
- Parallel Tool Calling: OpenAI provider
parallel_tool_calls=True활성화 - 히스토리 압축 개선: 구조화된 메타 추출(관심 기업, 분석 주제, Q&A 쌍)
dartlab uialias 제거: deprecated CLI alias 완전 제거, 테스트 정리
Fixed
- 보안 감사 수정: XSS 이스케이프, path traversal 차단, bare except 구체화, CORS 강화, MD5 usedforsecurity, subprocess 보안, SSL fallback
- CAPEX 부호 버그: 음수 처리 수정 + ZeroDivision 방어
- 글로벌 캐시 스레드 안전: 5곳에 threading.Lock double-check 패턴 적용
0.7.1 - 2026-03-20
Added
- 시장 전수 스캔 4축:
governance,workforce,capital,debt엔진 추가 - 공개 API 확장:
Company.governance/workforce/capital/debt()와 모듈 레벨dartlab.governance/workforce/capital/debt()추가 - scan 개발 문서:
src/dartlab/engines/dart/scan/DEV.md,src/dartlab/engines/dart/scan/network/DEV.md,src/dartlab/tools/DEV.md - 공시뷰어 근본 재설계: entries 기반 인터리브 렌더링 — 텍스트/테이블 원본 순서 복원
- heading level 전달: sections
textLevel→ viewer → 프론트엔드까지 레벨 메타데이터 전파 - AI 순수 대화 감지:
_is_pure_conversation()— “잘되나”, “대화 계속 안되나” 등 일상 대화 패턴 자동 감지 - 서버 응답 최적화: GZip 압축 + Cache-Control + asyncio.gather 병렬화
Changed
- 관계 네트워크 경로 정리: 내부 import 경로를
affiliate에서scan.network로 통일 - TopicRenderer 단일 루프: nonTextBlocks 이중 루프 → docEntries 단일 루프로 교체
- 뷰어 UI 개선: nav 접기 토글, 테이블 sticky 첫 컬럼, 숫자 정렬
- AI 프롬프트 강화: 내부 구현 노출 금지 규칙 + 순수 대화 시 viewContext 무시
- oauthCodex timeout: 300초 → 90초로 단축
- README / README_KR에 관계 네트워크와 시장 스캔 사용 예시 반영
Fixed
- 관계 네트워크 회귀 테스트 import 경로를 새 패키지 구조에 맞게 수정
test_scan_axes.py로 새 scan 축 import/분류 기본 검증 추가view=\"market\"요약에서 빈 시장 라벨을미분류로 정리
0.7.0 - 2026-03-19
Added
- AI 공시 탐색 도구:
show_topic,list_topics,trace_topic,diff_topic— LLM이 Company의 핵심 API를 직접 호출 - AI 동적 컨텍스트: Company의 실제 topics/insights를 자동으로 LLM 컨텍스트에 포함
- ChartSpec JSON 프로토콜:
chart.spec_*()→ JSON dict →chart.chart_from_spec()경로 추가 (combo, radar, waterfall, sparkline, heatmap, pie) - UI 뷰어 대폭 개선: DisclosureViewer, TopicRenderer, ViewerNav, TableRenderer 리뉴얼
- docs quickstart: “바로 실행해보기” 섹션 추가 (startMarimo + Colab 링크)
Changed
- README/README_KR 개선: 자동 다운로드 설명, Try It Now 섹션, 데이터 섹션 보강, Docs/Blog 뱃지
- 서버 TOC 챕터 정렬: 로마 숫자 순서(I~XII) 정렬 적용
- sections pipeline: cadence 메타 계산 성능 개선 (불필요한 리스트 컴프리헨션 제거)
- AI agent 분석 절차: sections 중심으로 재정렬 (
list_topics→show_topic→get_data순서)
Fixed
- CLI e2e 테스트: Windows cp949 인코딩 오류 수정 (UTF-8 명시)
0.6.0 - 2026-03-19
Added
- 세로 뷰:
show(topic, period=["2024Q4", "2023Q4"])— 특정 기간을 세로(기간 × 항목)로 비교 - topics DataFrame:
c.topics가 리스트 대신 DataFrame 반환 (topic, source, blocks, periods 컬럼) - ratios 시계열:
c.ratios가 단일 시점 대신 시계열 DataFrame 반환 (항목 × period, 최신 먼저) - RatioResult
__repr__: 6개 카테고리별 한국어 라벨 + 억 단위 포맷 가독성 개선 - report 분기 데이터: DART report가 Q4(연간)만 아닌 Q1~Q4 전 분기 표시
- EDGAR
_transposeToVertical: EDGAR에도 세로 뷰 지원 추가 - 서버 viewer 기능 확장: TOC, topic summary SSE, diff 엔드포인트 추가
Changed
- finance/report 기간 정렬: 모든 재무/report DataFrame 컬럼이 최신 먼저 역순 정렬
- 2015년 데이터 제외: finance pivot에서 2015년 필터링 (Q4만 있어 standalone 변환 불가)
- openai_compat provider:
OpenAIError를 catch 목록에 추가 (서버 status 500 수정) - README/README_KR에 topics, ratios 시계열, 세로 뷰 반영
- docs quickstart/overview/ratios 튜토리얼 현행화
- 노트북
c.name→c.corpName수정, topics DataFrame 반영 - startMarimo 두 파일에 세로 뷰 데모 셀 추가
- 랜딩 CodeDemo에서
ratios설명 업데이트
Fixed
- EDGAR
index프로퍼티가 topics DataFrame을 순회할 때 컬럼명이 아닌 topic 리스트로 순회하도록 수정 - 테스트 코드에서 topics를 리스트로 가정하던 부분을 DataFrame 호환으로 수정
0.5.1 - 2026-03-19
Added
- EDGAR sections 텍스트 구조 메타데이터 추가 (
textNodeType,textLevel,textPath— heading/body 분리) - EDGAR sections 연간 보고서 Q4 라벨 통일 (
2024→2024Q4) - quickstart 문서에 insights 섹션 추가
- pyproject.toml keywords에
edgar,sec,sections추가
Changed
공개 문서 전면 현행화
- README / README_KR를
sections중심 회사 맵 서사로 재작성 (ratios, insights, diff, text structure, EDGAR 반영) - docs 전체 흐름을
sections → show → trace기준으로 통일 finance-others.md의c.get()패턴을c.report.extract()/c.docs.notes경로로 전환stability.md에서 profile CLI 제거, profile 설명 현행화sections.md에 텍스트 구조 컬럼(textNodeType/textLevel/textPath) 반영, Q4 기간 표기 통일overview.md에 텍스트 구조 컬럼 추가- pyproject.toml description에 EDGAR 반영
- llms.txt description을 DART+EDGAR 통합으로 갱신
- EDGAR
DEV.md현행화 (sections 형태, show 계약, profile 제거)
Removed
- 중복 DEV 문서 2건 삭제 (
dart/dev/company.md,dart/docs/dev/learning.md)
0.5.0 - 2026-03-15
Added
EDGAR Company DART급 완성
- EDGAR Company가 DART Company와 동일한
sections / show / trace메인 흐름에 합류 - EDGAR sections 매퍼 100% (182개 매핑, 442,025행), 974종목 에러 0 전수조사 통과
- EDGAR profile namespace 구현 — docs + finance merged view
- EDGAR sections blockType 분리 (text/table)
- 10-K/10-Q 의미적 대응 6쌍 매핑 (riskFactors, mdna, financialStatements, controls, legalProceedings, exhibits)
OpenDART API 직접 클라이언트
engines/dart/openapi모듈 추가 — OpenDART REST API 직접 호출 지원
sections / show() 품질 강화
sectionsblockType 분리: text/table 별도 행, blockOrder로 원본 순서 보존c.table()— subtopic wide 셀의 markdown table 구조화 파싱- table-heavy docs topic 자동 subtopic wide 수평화 + topic 한글화
문서 대규모 개선
- README/README_KR: 공개 흐름을
sections/show/trace기준으로 재구성, EDGAR 통합 강조 - docs/tutorials/edgar: EDGAR 통합 가이드 신규 추가 (7개 섹션 + DART 비교표)
- docs/stability: EDGAR → Tier 2 (Beta) 승격
- docs/quickstart, api/overview: EDGAR 예시 추가
- notebooks/tutorials/09_edgar.ipynb: EDGAR Colab 노트북 신규
- navigation.ts: EDGAR 튜토리얼 항목 추가
랜딩 사이트 리디자인
- shadcn 스타일 전면 리디자인 — UI 컴포넌트 + 레이아웃 + 랜딩 전체
- 블로그 카드 프리뷰 — 아바타 대신 콘텐츠 SVG 자동 매칭
- WebP 변환 — avatar 12개 PNG→WebP (85% 용량 절감) + picture 패턴 전면 적용
- SEO Phase 1/2 — 중복 meta 제거, 한국어화, lazy loading, fetchpriority
Changed
show()재무제표 후처리: all-null 행 제거, 중복 계정명 병합, CF 잘못된 당기순이익 제거show()subtopic 내부 topic명 한글화 + 기간 없는 DF None 반환- sections table subtopic→항목 통일
- Roadmap 업데이트: EDGAR Company UX alignment / EDGAR financial data integration 완료 체크
Fixed
_reportFrameRuntimeError 방어 — report 미보유 종목 다운로드 실패 시 None 반환- 272개 전수조사 — report 방어 로직 + 재무제표 중복행 병합
- sections 파싱 실패 fallback 경로 누락 수정
- 테스트 수정 — sections blockType 컬럼 추가에 맞춰 period 필터 갱신
[0.4.7] - 2026-03-14
Added
Profile Pipeline 구축 (Phase 1~4)
c.diff()3-mode API: 전체 요약 / topic 이력(delta, deltaRate) / 줄 단위 인터리빙 diffsections/diff.py모듈: hash 기반 기간간 텍스트 변화 감지common/finance/inflection.py모듈: 재무 시계열 변곡점 탐지- report
toWide(): 5개 pivot Result에 metric × year wide DataFrame 반환 sections/_common.py:sortPeriods()기간 정렬 유틸리티
Changed
데이터 품질 전수조사 및 안정화
show()3-layer 디스패치: finance stmt → report toWide → docs 세로 unpivot_applyPeriodFilter()수정: period 필터 시분류/항목/metric등 label 컬럼 보존_reportFrame()메타 컬럼 6개(stlm_dt,apiType,stockCode,year,quarter,quarterNum) 자동 제거indexlazy 구축: 30초 → 1.77초, I~XII장 문서 순서 정렬- sections pipeline 장 제목 중복 제거 (71 → 54 topic)
- 기간 정렬 오름차순 통일 (과거 → 최신)
sectionMappings.json30건 추가 (커버리지 94.6% → 98.9%)- SCE 계정명 한글화 (CAUSE_LABELS / DETAIL_LABELS)
- 6종목 485 show() 전수검증 에러 0, BS 항등식 6종목 OK
EDGAR 엔진 확장
- EDGAR CIS/SCE 실험 (059), standardAccounts 확장
- EDGAR Company lazy profile 최적화 (060)
Fixed
_applyPeriodFilterperiod 필터 시 non-period label 컬럼 누락 버그indexperiod range 표시 역순(2025..1999Q2) → 오름차순(1999Q2..2025)test_regression_fixturethreshold 조정 (fixture parquet 3년 데이터 대응)test_sections_pipeline,test_sections_runtime오름차순 정렬 반영
[0.4.6] - 2026-03-13
Fixed
EDGAR docs foundation release test 정합성 복구
tests/test_edgarDocs_foundation.py가 기대하는 EDGAR 배치 다운로드 helper를experiments/057_edgarSectionMap/002_downloadFirst2000.py에 다시 반영v0.4.5publish workflow 를 막던 release test mismatch를 해소
0.4.5 - 2026-03-13
Changed
Company public surface 정리
- 공개 진입 예제를
import dartlab; c = dartlab.Company("005930")로 통일 Company.index,Company.show(topic),Company.trace(topic)를 현재 메인 흐름으로 문서/예제/CLI에 반영Company.profile은 향후 terminal/notebook 문서형 보고서 뷰 로드맵으로만 명시
문서 / notebook / marimo 동기화
- README, GitHub Pages 문서, startMarimo, 연계 notebook 예제를 현재 API 기준으로 정리
- docs 없는 회사에서
현재 사업보고서 부재안내가 나온다는 점을 예제와 설명에 추가 - compare 개선 예정, EDGAR Company UX 정렬 예정 메시지를 문서에 명시
CLI / server / UI surface 정리
dartlab profile기본 출력을company.index로 변경dartlab profile --show TOPIC,--trace TOPIC지원 추가- AI UI용
/api/company/{code}/index,/show/{topic},/trace/{topic}endpoint와 client helper 추가
Fixed
생성 문서와 버전 메타데이터 갱신
scripts/generateSpec.py를 현재 Company surface 기준으로 갱신API_SPEC.md,llms.txt, skill reference 생성물 재생성- 패키지/landing 버전을
0.4.5로 갱신
0.4.4 - 2026-03-12
Changed
docs/sections production 마감
Company.sections가 raw markdown를 보존한 canonical wide view로 동작하면서 appendix/detail row는 기본 core view에서 숨김Company.retrievalBlocks,Company.contextSlices가sourceTopic,cellKey,semanticTopic,detailTopic을 함께 반환해 원문 block을 역추적 가능하게 정리- appendix/detail 명세서(
재고자산명세서,감가상각비등명세서,제조원가명세서,법인세등명세서, 감사 보수 등)를 detail semantic layer로 분리 - broad raw residual 일부를 exact mapping으로 흡수해 package 기본 수평화 품질을 마감
- 금융업/지적재산권/수주/계약 상세표를 detail taxonomy로 흡수해 추가 docs 종목군에서도 core raw residual이 사라지도록 보강
Company 레이어 정상화
engines.dart.company,engines.edgar.company에 시장별 Company 본체를 배치하고 루트dartlab.company는 facade만 담당하도록 재구성engines.dart.compare,engines.edgar.compare도 루트 compare 의존 없이 독립 import 가능하도록 정리engines하위에서 루트dartlab.company,dartlab.compare,dartlab.usCompany를 직접 import 하지 않도록 레이어 방향을 바로잡음
Fixed
패키지 메타데이터와 문서 정리
- README에
sections/retrievalBlocks/contextSlices사용 흐름과 런타임 무저장 원칙을 명시 pyproject.tomlclassifier 를Production/Stable로 상향
CLI 상용화 준비
- 단일
cli.py를dartlab/cli/패키지로 분리하고 명령/서비스/파서 계층을 고정 dartlab엔트리포인트를dartlab.cli.main:main으로 전환- CLI 종료 코드, 공통 예외 처리, deprecated alias 정책,
--version지원을 표준화 - subprocess 기반 CLI E2E smoke test와 packaging contract test를 추가
0.4.3 - 2026-03-12
Fixed
EDGAR sections 패키지 아티팩트 포함
canonicalRows.parquet,formTopicDrafts.json,mappingCoverage.latest.json를 패키지 리소스로 포함- EDGAR sections artifact loader가 실험 폴더가 아닌 설치 패키지에서도 정상 동작하도록 수정
0.4.2 - 2026-03-12
Fixed
서버 테스트 런타임 의존성 보강
dartlab[ai]에httpx추가starlette.testclient가httpx미설치로 실패하던 문제 해결
0.4.1 - 2026-03-12
Fixed
릴리즈/CI 테스트 의존성 정리
Publish to PyPI와CIworkflow가 서버 테스트에 필요한aioptional dependency를 설치하도록 수정tests/test_server.py수집 단계에서starlette미설치로 실패하던 문제 해결- 실험용
experiments/**/*.parquet및experiments/**/output/산출물이 Git에 섞이지 않도록 제외 규칙 보강
0.4.0 - 2026-03-11
Added
docs/sections 학습형 수평화 runtime
Company.sections가 learned section rules 기반으로 coarse report를 fine topic 축에 즉시 backfillprojectionRules.chapterII.json패키지 포함sectionProfileTable.parquet패키지 포함 + runtime artifact loader 추가
Changed
Company 데이터 소스 계층 개선 (Breaking Change)
c.BS,c.IS,c.CF— docs HTML 파싱 → finance XBRL 정규화 기반으로 변경- snakeId 통일로 회사간 비교 가능, 단위: 원 (기존 docs는 백만원)
- finance 데이터 없으면 docs fallback 유지
c.IS— docs가 반환하던 CIS(포괄손익계산서)에서 finance IS(손익계산서)로 변경- 매출액, 영업이익 등 핵심 계정이 누락되던 문제 해결
c.dividend,c.employee,c.majorHolder,c.executive,c.audit— docs → report API 우선으로 변경- DART API 정형 데이터 사용 (HTML 파싱보다 정확), report 없으면 docs fallback
sectionspipeline — 단순 leaf title 병합에서 learned-rule 기반 horizontalization으로 변경- 번호/기호 prefix 제거 강화
- legacy section title exact mapping 흡수
- chapter II coarse topic(
매출에관한사항,연구개발활동,경영상의주요계약등,파생상품등에관한사항)을 canonical fine topic으로 projection
registry BS/IS/CF 메타데이터 업데이트
requires: “docs” → “finance”unit: “원” 추가description: finance XBRL 정규화 기반 명시
Added
report 엔진 5개→22개 apiType 확장
_ReportAccessor에__getattr__추가 — 17개 비피벗 apiType 자동 접근c.report.treasuryStock,c.report.capitalChange,c.report.minorityHolder등
c.report.apiTypes— 사용 가능한 22개 apiType 목록c.report.labels— apiType → 한글명 매핑
Company property 추가
c.tangibleAsset— 유형자산 변동표 DataFrame (docs)c.costByNature— 비용 성격별 분류 시계열 DataFrame (docs)
엔진별 SPEC.md 문서
engines/dart/finance/SPEC.md— 매핑 파이프라인, 5개 피벗 함수, snakeId 테이블, AccountMapper 상세engines/dart/report/SPEC.md— 22개 apiType 컬럼 명세, 4단계 추출 파이프라인, 6개 Result 타입engines/dart/docs/SPEC.md— 40개 모듈(finance 36 + disclosure 4) 전체 함수 시그니처, Result 패턴
Company 소스 역할 배정 문서
engines/dart/ROLE_ASSIGNMENT.md— property별 데이터 소스 우선순위, 구현 계획
테스트 추가
test_bsIdentity.py— BS 항등식 검증 (자산=부채+자본)test_mappingBenchmark.py— 매핑률 벤치마크 (97%+ 기준)test_regressionFinance.py— finance 출력 회귀 테스트test_server.py— 서버 smoke test
CI/인프라
- pytest-cov 설정 추가 (coverage run/report)
- API 안정성 Tier 문서 (
docs/stability.md)
블로그
- 007: EDGAR 통합 플레이북
- 008: 사업의 내용으로 기업 판단하기
- 블로그별 SVG 다이어그램 추가
0.3.2 - 2026-03-11
Added
Data Explorer 전면 리디자인
- 모달 → 전체화면 레이아웃으로 변경 (fixed inset-0)
- 한글/영문 계정명 토글 — L1 labelMap()의 5,790개 한글 라벨 활용
- 계정 계층 구조 인덴트 (대/중/소 분류, levelMap() 기반)
- 재무 시계열 테이블: 첫 번째 열 고정(sticky), 가로 스크롤
- 원 단위 자동 포맷 (조/억/만), 음수 빨간색 표시
- 회사 아바타 (첫 글자) + 단위 배지 표시
서버 재무 메타데이터 API
_build_finance_meta()— finance 시계열 모듈의 한글 라벨, 정렬 순서, 레벨 정보를 preview API에 포함- preview 응답에
unit필드 추가 (DataEntry.unit 기반)
6개 LLM Provider 지원
- ChatGPT (OAuth), Ollama (로컬), OpenAI API, Anthropic API, Codex CLI, Claude Code CLI
README Architecture 섹션
- 3계층 엔진 아키텍처(L1/L2/L3) 시각화
- 기여자를 위한 프로젝트 구조 설명
Changed
README 전면 보강
- AI Analysis 섹션: Ollama 전용 → 6개 provider 테이블로 확장
- Roadmap: Cloud LLM, Data Explorer, Excel export 완료 표시, EDGAR 추가
0.3.1 - 2026-03-10
Added
재무비율 시계열 피벗 (engines/common/finance)
toSeriesDict()— 연도별 재무비율 시계열을 IS/BS/CF와 동일한 dict 구조로 변환RATIO_CATEGORIES— 6카테고리(수익성, 안정성, 성장성, 효율성, 현금흐름, 절대값) 그룹핑 상수calcRatioSeries,toSeriesDictre-export 추가 (dart/finance, common/finance)
Company.ratioSeries property
c.ratioSeries— 연도별 재무비율 시계열 ({"RATIO": {snakeId: [v1, v2, ...]}}, years) 반환- IS/BS/CF/SCE와 동일한 패턴으로 재무비율 접근 가능
Excel 재무비율 시트 개선
- 단일시점 세로나열 → 연도별 피벗 테이블로 전면 재작성
- 카테고리별 섹션 헤더 (수익성, 안정성, 성장성, 효율성, 현금흐름, 절대값) + 색상 구분
- 35개 비율 한글 라벨 매핑 (
_RATIO_LABELS) - freeze panes (좌측 지표명 고정)
SCE(자본변동표) spec.py 반영
dart/finance/spec.pystatements 목록에 SCE 추가- normalization 설명에 SCE 매트릭스 피벗 방식 명시
Fixed
서버 Company.search 버그 수정
Company는 팩토리 함수이므로.search()staticmethod가 존재하지 않던 문제server/resolve.py,server/__init__.py에서 DART engine company search 경로로 수정Company()팩토리 함수 반환 타입 힌트를 facade 구조 기준으로 정리
[0.3.0] - 2026-03-09
Changed
엔진 레이어 아키텍처 리팩토링 (Breaking Change)
engines/디렉토리를 L1(데이터소스)/L2(분석)/L3(AI) 3계층으로 재편engines/docsParser/→engines/dart/docs/engines/financeEngine/→engines/dart/finance/engines/reportEngine/→engines/dart/report/engines/sectorEngine/→engines/sector/engines/insightEngine/→engines/insight/(rank 분리)engines/llmAnalyzer/→engines/ai/- 모든 import 경로가 변경됨 (하위 호환 alias 미제공)
Added
섹터 분류 엔진 (engines/sector)
- WICS 11섹터 분류 (수동 오버라이드 → 키워드 → KSIC 3단계)
- 섹터별 밸류에이션 파라미터 (할인율, PER/PBR/EV-EBITDA 멀티플)
인사이트 등급 확장 (engines/insight)
- 섹터 감지 (금융/비금융 자동 판별) + 섹터 벤치마크 기반 상대평가
- 7영역 등급에 섹터 상대 등급 반영
시장 규모 순위 (engines/rank)
- 매출/자산/성장률 3축 전체 순위 + 섹터 내 순위
- JSON 캐시 기반 조회 (빌드 ~2분, 이후 즉시)
문서 전면 업데이트
- API_SPEC.md에 report/sector/insight/rank 스펙 추가
- README Roadmap에 새 엔진 반영
- GitHub Pages docs 핵심 기능 목록 갱신
0.2.5 - 2026-03-09
Changed
dartlab[ui] → dartlab[ai] 리네이밍
- AI 기업분석 optional dependency를
[ai]로 변경 (dartlab aiCLI 명령과 일치) dartlab[ui]는 하위호환 alias로 유지 (내부적으로[ai]참조)dartlab uiCLI 실행 시dartlab ai로 변경 안내
uv 통일
- 전체 문서(README, README_KR, docs, landing)에서 pip 참조 제거, uv 설치 방법으로 통일
- 모든 provider ImportError 메시지를
uv add dartlab[...]형태로 변경
Added
insightEngine — 종합 인사이트 분석 엔진
- 7영역(실적, 수익성, 재무건전성, 현금흐름, 성장성, 지배구조, 밸류에이션) 등급 분석
- 이상치 탐지 (z-score 기반) + 요약 텍스트 자동 생성
- Company 클래스에
insightsproperty 통합
AI 웹 인터페이스 UX 개선
- 로딩 단계 표시 (생각 중 → 데이터 로딩 → 분석 → 응답 생성)
- 응답 완료 후 경과시간 배지 표시
- 대화 삭제 확인 팝업
- context 모달 헤더 2행 구조로 개선 (탭 버튼 세로 텍스트 버그 수정)
Ollama 최적화
- 서버 시작 시 모델 preload (cold start 제거)
- 모델 추천 가이드 API (
/api/models/ollama응답에 recommendations 포함) - 질문 유형 기반 컨텍스트 필터링 (건전성/수익성/성장성/배당/현금 별 관련 계정만 전송)
- Guided Generation JSON 스키마 (Ollama 구조화 출력용)
0.2.4 - 2026-03-09
Added
LLM 분석 품질 개선
- Compact 프롬프트에 Few-Shot 예시 5종, 교차검증 규칙, 토픽 가이드 추가
- compact 모드 컨텍스트 압축 (연도 4년 제한, 비율 핵심 7개, 리포트 축약) — 전체 52.9% 압축
- 복합 질문 다중 분류 (
_classify_question_multi) — “수익성과 배당” 같은 질문 지원 - Self-Critique 인프라 (2-pass 검증 구조, UI 옵션 연동 예정)
- 응답 메타데이터 추출 (등급, 시그널, 테이블 수) → SSE done 이벤트 포함
reportEngine — 정기보고서 정규화 엔진
- 배당, 임원, 직원, 감사, 자기주식 데이터 추출·피벗
- Company 클래스에
reportproperty 통합 - agent tools_registry에 report 관련 도구 함수 추가
dartlab.dataDirproperty 추가 (데이터 디렉토리 설정)
0.2.0 - 2026-03-08
엔진 분류 리팩토링 — finance/와 disclosure/를 engines/docsParser/ 아래로 이동. 향후 정량 데이터 엔진, 전체 종목 비교 엔진 등 다른 엔진을 추가할 수 있는 구조로 전환.
Changed
엔진 구조 리팩토링
finance/(36개 모듈)과disclosure/(4개 모듈)를engines/docsParser/아래로 이동notes.py도engines/docsParser/notes.py로 이동 (docsParser 엔진의 래퍼)- 모든 import 경로를
dartlab.engines.docsParser.{finance,disclosure}.XXX로 변경 company.py_MODULE_REGISTRY경로 문자열 일괄 변경- 사용자 API(
Company.BS,Company.dividend등)는 변경 없음
GitHub Pages 레이아웃
- 블로그 컨텐츠 중앙 배치 (max-width 720px), ToC 우측 유지 (모바일 숨김)
- 독스/블로그 섹션 간 간격 확대 (h2 margin-top 3.5rem, h3 2.5rem)
- 독스/블로그 하단에 랜딩 Footer 추가 (Buy Me a Coffee 포함)
- 데이터 릴리즈 태그
data-v1→data-docs변경 반영
노트북 전면 재작성
print(df)제거, Jupyter/Colab rich 렌더링 활용 (셀 마지막 줄에 변수만 배치)- 한 셀에 하나의 DataFrame만 표시
- pip install 셀에 Colab 의존성 경고 안내 추가
Added
- OG 이미지 적용 (
og-image.png,summary_large_image) getting-started/quickstart.ipynb노트북 생성- 블로그 섹션 + 첫 번째 포스트 “DART의 모든 것”
CHANGELOG.md추가
0.1.12 - 2026-03-08
파싱 품질 점검 릴리즈.
Fixed
- 파싱 모듈 5건 수정 — 출력 품질 점검 결과 반영
0.1.11 - 2026-03-08
Company 클래스 전면 재설계 — yfinance 스타일 property 접근, Notes 통합, rich 터미널 출력.
Changed
Company 재설계
- 40개 모듈을 property로 직접 접근 (
c.BS,c.dividend,c.audit) _MODULE_REGISTRY기반 lazy loading + cachingget(name)메서드로 전체 Result 객체 반환 (복수 DataFrame 접근)all()메서드로 전체 데이터 dict + alive_bar progress barguide()메서드로 사용 가능한 property 목록 rich 출력- verbose 모드 기본 활성화
Notes 통합
c.notes.inventory/c.notes["재고자산"]이중 접근- K-IFRS 주석 12개 항목 통합 래퍼
브랜딩
- red/coral 색상 전환 (#ea4647)
- 아바타 마스코트 적용 (6종 변형)
analyze→fsSummary리네이밍
Added
- 전체 문서를 property API 기준으로 전면 갱신 (quickstart, API overview, tutorials)
0.1.10 - 2026-03-08
finance 모듈 대량 추가 + 랜딩 페이지 확장.
Added
finance 모듈 8개 추가
articlesOfIncorporation,auditSystem,companyHistory,companyOverviewDetailinvestmentInOther,otherFinance,shareholderMeeting
랜딩 페이지
- 랜딩 전체 영어화
- Workflow, ModuleCatalog, UseCases 섹션 신규 추가
- 튜토리얼 4종 + Colab 노트북 추가
0.1.9 - 2026-03-08
finance 모듈 대량 추가 릴리즈 (15개 모듈 추가).
Added
finance 모듈 15개 추가
- v0.1.8:
audit,boardOfDirectors,bond,capitalChange,contingentLiability,costByNature,internalControl,relatedPartyTx,sanction,shareCapital - v0.1.9:
affiliateGroup,fundraising,salesOrder,productService,riskDerivative
Fixed
- mdsvex 빌드 오류 수정 (중괄호 표현식을 백틱으로 감싸기)
0.1.6 - 2026-03-07
notesDetail 확장 릴리즈.
Changed
notesDetail키워드 23개로 확장parseNotesTablePattern D 추가 (4-패턴 파서)tableDf시계열 정규화
0.1.5 - 2026-03-07
K-IFRS 주석 파싱 모듈 추가.
Added
notesDetail모듈 — K-IFRS 주석 상세 파싱parseNotesTable범용 파서- 테스트 48개
0.1.4 - 2026-03-07
재무제표 fallback + 자동화.
Changed
statements연결/별도 재무제표 자동 fallback
Added
tangibleAsset모듈 추가- KindList auto-update GitHub Actions workflow (daily cron)
0.1.3 - 2026-03-07
패키지 구조 정립 + 랜딩 페이지 구축.
Changed
finance//disclosure/패키지 분리 (기존 단일 모듈에서 분리)
Added
- KRX KIND 상장기업 목록 매퍼 (
getKindList,codeToName,nameToCode,searchName) - Company 이름 검색 기능
companyOverview공시 서술형 모듈business공시 서술형 모듈- SvelteKit 랜딩 페이지 구축 (shadcn-svelte)
- SEO 최적화
0.1.2 - 2026-03-07
문서 시스템 구축.
Added
- SvelteKit docs 통합 (mdsvex + Shiki)
- 브랜딩 에셋 (아바타, favicon)
0.1.1 - 2026-03-07
초기 모듈 확장.
Added
affiliate모듈 추가- stockCode API 전환
- 랜딩 페이지, docs 기본 구축, quarterly 지원
0.1.0 - 2026-03-06
DartLab 최초 공개 릴리즈 — DART 전자공시 문서를 파싱하는 Python 라이브러리.
Added
핵심 기능
Company클래스 — 종목코드 기반 데이터 접근loadData()— GitHub Releases에서 Parquet 자동 다운로드selectReport()— 보고서 선택 (사업보고서 우선)extractTables()— HTML 테이블 파싱 + Polars DataFrame 변환
finance 모듈 (초기 5개)
summary— 요약재무정보statements— 재무제표 본문 (연결/별도)segment— 사업부문별 실적dividend— 배당 데이터employee— 직원 현황
disclosure 모듈 (초기 2개)
mdna— 경영진의 분석 및 논의rawMaterial— 원재료 현황
인프라
- Polars 기반 DataFrame 처리
- GitHub Actions CI + PyPI trusted publishing
- 260+ 상장사 Parquet 데이터 (GitHub Releases)
- uv 패키지 매니저 지원
