Repository navigation
v0.12.0
Outcome
로그인된 사용자 CLI 세션에서 DartLab 자료를 직접 조회하고, 공시 문단의 의미를 따라 탐색하며, 조회한 표를 SQL로 계산한다. 인증과 모델 계정은 사용자의 CLI가 소유한다.
pip install -U "dartlab[semantic]==0.12.0"
dartlab ask "삼성전자만큼 큰 회사는?" --runtime codexChanges
Changed
- 질의 첫 안내 축소. 분석 질문에는 실행 가능한 분석 Skill과 호출 예시를 우선 보여 준다. 운영 안내와 본문 중복을 줄였으며, 개발용 전체 검색은
audience="all"로 제공한다. - 시뮬레이터 금리·마진 채널 실연결.
dartlab.simulate드라이버 시트가 GDP·금리·환율 노드와 매출·마진·WACC 채널 노드로 나뉘었다. 금리 충격은 연도별 WACC 경로로 주당 DCF를 움직이고, 마진 경로는 proforma 영업이익에 충격으로 반영된다. 결과에waccPath가 추가됐다.
Added
-
구독 세션에서 직접 질의.
dartlab ask "질문" --runtime codex와 Claude 런타임이 별도 MCP 서버 설정 없이 DartLab 읽기 도구를 실행한다. 인증·모델·대화는 사용자의 CLI가 소유하고, DartLab은 도구 권한과 근거를 관리한다. -
공시·뉴스 의미 검색과 관련 문단 연결.
search(..., scope="semantic")으로 다국어 문단을 찾고,relatedTo=passageId와excludeCorp로 다른 공시·회사로 탐색한다. 원문 위치와 발췌 범위를 보존하며 변경 없는 문단 벡터를 재사용한다.pip install "dartlab[semantic]"과dartlab search --build-semantic으로 준비한다. -
조회 표 계산. native 세션의
QueryTable이 조회한 원본 표에 읽기 전용 SQL 필터·조인·집계를 수행한다. 계산식, 입력 표의 해시와 출처를 결과 근거에 남기며 세션 간 표 접근과 파일·수정 SQL을 차단한다. -
DART 재무 접수 원장. 수집 run별 불변 접수 이력을 생성하고 일일 동기화·신규 상장·전체 재빌드 경로에서 함께 발행한다.
-
사용자 가정으로 전략 비교.
dartlab.simulate("strategies", code, scenario={...}, overrides={...})가 사용자 거시 경로, 기준 영업이익률과 업종 탄성을 받아 유지·증설·부채 축소를 비교한다. 시나리오를 생략하면 기존처럼 모든 KR 프리셋을 비교한다. 순현금 평가에 쓰지 않는 할인율·영구성장률 변경은 거부하고 실제 적용한 가정은 결과에 남긴다. -
EDGAR 재무 이력 검증. 최초 공시 기준 재무 상태, 당시 알려진 비율, 다음 분기 공시 행동과 결과를 기존 모델 비교기에 연결했다. 누계 현금흐름의 분기 복원과 결손 사유·근거 표를 포함하며, 결과는 사후 조건부 검증으로만 취급한다.
-
dartlab.simulate("strategies", code)조건부 전략 비교. 한 회사의 현재 재무 상태에서 유지, 증설, 부채 축소 전략을 모든 KR 프리셋의 같은 경로 위에 굴려 프리셋별 리더, 리더가 뒤집히는 프리셋, 결정이 가장 쉽게 뒤집히는 프리셋을 낸다. 전이 계수와 전략이 명시 가정이라 결과는 항상 조건부이고 추천은 없다. 기존dartlab.simulate(code, scenario=...)호출은 그대로scenario축이다. -
시뮬레이터 사용자 가정 입력.
dartlab.simulate(code, scenario={...})가 프리셋 하나를 바탕으로 GDP, 기준금리, 원달러 경로 중 일부를 바꾼 사용자 시나리오를 받는다. 세 경로를 모두 주면 10년까지 펼친다.overrides={...}는 기준 WACC, 영구성장률, 기준 영업이익률, 업종 탄성을 바꾼다. 범위 밖이나 모르는 키는 실행 전에 실패하고, 적용한 값은 결과의assumptionLedger와 노드 근거에 사용자 가정으로 남는다. 결과에scenarioKind,scenarioBase,macroPaths가 추가됐다.
Fixed
- 의미 검색 후 연속 계산 복구. 검색 모델을 공통 메모리 압력 정책으로 관리하고, 검색이 끝난 뒤 높은 메모리 사용량이 남으면 모델을 해제한다. 연결·별도 표를 비교할 때 앞서 조회한 표가 검색 모델의 메모리 때문에 축출되는 경로를 수정했다.
- 재무 질의의 범위·통화·회계연도. 별도 재무 요청이 계정 수가 더 많은 연결 원본으로 바뀌지 않게 하고 연결·별도 근거 ID를 분리했다. 미국 기업의 연간 질의는 회계연도 원본을 사용하며 금액과 근거에 기업 통화를 표시한다.
- 공시 수집 누락과 검색 반영 복구. 회사 고유번호 전달, 미수집 접수번호 보존, 늦게 공개된 본문 재조회와 기존 성공 본문 보존을 수정했다. HF 원문 해시와 catalog 반영 해시를 대조해 중단된 변경분을 복구하며 검색 기간을 후보 제한 전에 적용한다.
- 수집·발행 안정성. DART report 폐기, 옛 panel 병합, 정정 접수와 본문 부재 처리, 공유 업로드 큐 축출을 수정했다. EDGAR 본문 수집의 시간 예산·스레드 실행·HF 재시도와 finance 업로드 재시도 원장을 보강했다. 신선도 감사는 표본 부족과 조회 실패를 최신 상태로 판정하지 않는다.
- 외부 데이터 갱신. 네이버 테마·업종 수집을 변경된 JSON API에 맞추고, 거시 데이터의 빈 결과 덮어쓰기와 공공 API·뉴스의 전송 및 인코딩 오류 처리를 수정했다.
- EDGAR 과거 시점 재무 상태 컴파일. 2021년 이전 10-K 의 분기 주석이 분기 매출만 같은 값으로 다시 싣는 filer 에서 과거 cutoff 상태가 접수 불일치로 실패하던 문제를 고쳤다. 값이 같을 때만 매출 증거를 영업이익과 같은 접수 lineage 에서 다시 읽고, 값이 다르면 지금처럼 실패한다. AAPL 정기 공시일 69개 cutoff 중 exact 상태가 22개에서 66개로 늘었다. 선택 규칙이 바뀌어 EDGAR feature normalization hash 가 바뀌므로 이전 규칙으로 만든 로컬 generation 은 다시 만들어진다.
Security
- 서버 market 입력을 제한하고 URL host·정규식·스크립트 종료 태그 검사를 보강했다. 수집 로그의 키 조각과 외부 오류값 노출을 줄이고 관련 Python·프런트엔드 의존성 보안 업데이트를 반영했다.
Upgrade and compatibility
Python 3.12 이상. 기존 Python 공개 API와 기본 검색 경로는 유지한다. 의미 검색은 선택 의존성과 로컬 인덱스가 필요하며 dartlab search --build-semantic으로 준비한다. 운영 Skill 전체 검색은 audience="all"을 사용한다. 기본 분석 안내는 분석 Skill을 우선한다.
Verification
- 이번 릴리즈의 변경 경로 262개, 재무 원본·기간·근거 회귀 98개, 최신 모델 회수·표 계산·세션·재무 도구 회귀 107개 통과.
- 실제 삼성전자 연결·별도 값과 AAPL 회계연도·USD 값을 provider 연간 원본과 대조했다.
- 실제 구독 질의 5종(규모 비교, 매출 증가율, 의미 검색, 연결·별도 비교, 미국 기업)이 답변과 근거를 반환했다. 검색 뒤 연결·별도 표의 차액과 비율 계산도 성공했다.
- 동일 의미 검색의 종료 RSS가 약 1,743MB에서 702MB로 감소했다. 이 측정은 해당 로컬 corpus와 환경의 결과다.
- UI 검사 0 errors, UI 포함 wheel 격리 설치, 공개 동작 17개 시나리오, Pyodide 설치를 검증했다. 런타임 CLI 및 ACP 초기 연결도 확인했다.
- 배포 workflow는 태그의 Python 3.12/3.13 전체 회귀, 세 운영체제 기본 동작, 실데이터 검증, wheel 및 Pyodide 검증을 모두 통과한 뒤 PyPI와 GitHub Release를 발행한다. 실행 내역은 배포 workflow에서 확인할 수 있다.
Known limits
의미 검색 범위는 발행된 catalog 발췌와 로컬 원문이다. 모든 회사의 모든 최신 원문 수집 완료를 뜻하지 않으며 유사도는 인과관계의 증명이 아니다. 의미 검색의 최초 모델 로딩·인덱스 준비에는 추가 시간과 메모리가 필요하다.
구독 세션은 해당 CLI의 설치·로그인·계정 상태에 따라 동작한다. Cline은 ACP 초기 연결은 가능하지만 현재 구현의 DartLab 도구 연결이 지원되지 않아 분석 런타임으로 선택할 수 없다. 실제 질의 검사에서는 작업 영역 밖 전역 지침 읽기 시도가 차단된 도구 오류가 각 1회 남았으며, DartLab 자료 조회와 계산은 완료됐다. 광범위한 부가 분석은 단순 재무 조회보다 많은 자원을 사용할 수 있다.
Provenance
- Range:
v0.11.0..4f0aba08389bc75f20b5b807fdb2e66ea3147ca4 - Commits: 84
- 전체 변경 비교
- 이번 검증 중 수정한 커밋:
f42beedc5,05372c73e,4f0aba083.
이전 커밋에는 구조화된 Release-Note 분류가 없다. 원래 Git 이력은 유지하고 해당 목록을 아래에 남긴다. 위 변경 설명은 실제 코드와 공개 변경 내역을 검토해 작성했다.
기존 분류 없는 커밋 원장
- 수정: 데이터 파이프라인 재발 방지 경계 강화 (6d1e062)
- 수정: CI 전체 테스트 제한 정본과 동기화 (7b45dd1)
- 수정: DART report 수집이 통째로 폐기되던 경로를 복구한다 (c2b6964)
- 수정: hf-dart-push 큐에서 run 이 축출되던 경로를 막는다 (1c7d1a8)
- 개선: 파이프라인 모니터가 데이터 정지와 큐 축출을 구분해 본다 (b5dca95)
- 수정: pyproc 버전 하드코딩이 모든 dependabot bump 를 막던 것을 푼다 (25e734f)
- 수정: dependabot allow 목록이 보안 업데이트를 막던 것을 푼다 (ff9acae)
- 수정: dart 원본 tar 업로드를 배치 커밋으로 바꾼다 (49b0899)
- 수정: npm 정기 범프를 개별 PR 로 되돌려 피해를 격리한다 (f1a35ef)
- 보안: nanoid override 를 패치 버전으로 올린다 (e5a710c)
- 개선(deps-dev): Bump @types/node from 25.9.3 to 25.9.5 (#117) (b69daef)
- 수정: npm 정기 버전 범프를 중단하고 보안 경로만 남긴다 (2c72bb1)
- 수정: checkpoint HF 업로드가 매번 누적 전량을 다시 올리던 것을 배치로 바꾼다 (81c033d)
- 정리: 실재하지 않던 엔드포인트의 죽은 매핑을 제거한다 (7aa36eb)
- 수정: 공유 concurrency 그룹을 전부 job 레벨로 통일한다 (d9e05ff)
- 수정: 옛 레이아웃 panel 이 merge 에서 튕겨 정기보고서가 공시뷰어에 안 들어오던 경로를 복구한다 (aea655d)
- 수정: 재무 수집이 정정 rcept 를 영구 누락으로 오판하고 failures.json 이 영구 잔존하던 것을 고친다 (ad01316)
- 수정: rcept reconcile 의 zip fetch 를 chunk 안으로 옮겨 느린 날에도 체크포인트가 남게 한다 (3ceed22)
- 성능: HF seed(원본 tar·panel merge base) 다운로드를 병렬로 받는다 (389eb58)
- 수정: 신선도 감사에 조회 예산을 두고 표본 부족이면 판정을 유보한다 (1412764)
- 수정: 신선도 감사 기대 집합에서 첨부만 정정한 공시를 뺀다 (3126613)
- 수정: 신선도 감사가 조회 성공 표본이 적으면 판정을 유보하고, 감사를 못 잰 run 은 신선도 Issue 를 닫지 않는다 (861aa65)
- 수정: 모니터·신선도 감사 스크립트가 인터프리터 정리를 건너뛰고 끝나 daemon 조회 스레드와 부딪히지 않게 한다 (9e3f276)
- 수정: nightly guard 게이트 deps 에 networkx 를 넣어 cycleScan 의 ModuleNotFoundError 를 없앤다 (5774413)
- 성능: panel rcept 조회를 footer 통계로 바꿔 신선도 감사가 전수 판정을 하게 한다 (003176d)
- 수정: 파이프라인 감시의 재실행 되먹임을 끊고 미등록 scheduled 워크플로 8 개를 감시에 넣는다 (8de741c)
- 수정: EDGAR 본문 수집에 시간 예산을 둬 매 run 이 timeout cancelled 로 끝나던 것을 없앤다 (f8ab36f)
- 개선(deps): Bump adm-zip and @huggingface/transformers (#154) (a1175de)
- Bump @vitest/mocker and vitest in /infra/workers/pushHub (#149) (9405dbf)
- Bump anyio from 4.13.0 to 4.14.2 (#153) (7a7d96c)
- Bump soupsieve from 2.8.4 to 2.9 (#152) (dd2501f)
- 개선(deps): Bump devalue from 5.8.1 to 5.9.4 (#151) (96279d0)
- 보안(deps): Update mcp requirement (#132) (7997b4e)
- 개선(deps): Bump sharp from 0.35.3 to 0.35.4 (#155) (07d4c10)
- 테스트: DataHub 원격 테스트가 httpx2 설치 환경에서 깨지지 않게 ASGI transport 를 직접 만든다 (6dedd6f)
- 수정: allFilings 백필이 floor 에 닿으면 할 일 없음을 선언해 버킷 빌드가 빈 입력으로 매일 실패하던 것을 없앤다 (63ba019)
- 수정: panel rcept reconcile 이 DART 본문부재(014) rcept 를 재시도 실패로 세어 매일 job 을 실패시키던 것을 고친다 (18b60d9)
- 개선(deps): Bump @vitest/mocker and vitest (#148) (c717a4c)
- 수정: npm overrides 에 묶여 닫히지 않던 sharp·adm-zip 취약 버전을 패치 버전으로 올린다 (a58dd55)
- 보안(deps): Update openai requirement from <3,>=1.0.0 to >=1.0.0,<4 (#133) (eb91088)
- 정리: uv.lock 에 기록된 mcp·openai 요구 범위를 pyproject 와 맞춘다 (3355770)
- 수정: EDGAR 본문 동기화가 HF 429 한 번에 죽고 목록 조회 실패를 "발행 0일" 로 오판하던 것을 고친다 (fbc36c8)
- 수정: 네이버 테마·업종 수집을 사이트 이전에 맞춰 JSON API 로 옮긴다 (eeb319d)
- 수정: EDGAR docs 배치가 worker thread 의 signal 등록에 막혀 전 ticker 가 실패하던 것을 고친다 (e4f890e)
- 수정: edgar/finance HF 발행 실패분이 재시도에서 사라지던 것을 원장으로 막고 디렉터리 한도를 드러낸다 (c320650)
- 수정: 공공 API 연결 불통이 재시도 창보다 길어 동기화가 실패하던 것을 막는다 (855b43b)
- 수정: GDELT 불량 UTF-8 슬롯 하나가 run 전체를 실패시키던 것을 막는다 (7ea0849)
- 수정: macro 동기화가 전송 장애에 시간을 다 쓰고 빈 결과로 공개본을 덮을 수 있던 것을 막는다 (fb095b7)
- 수정: 증권사 리서치 헬스 게이트가 네트워크 장애를 셀렉터 깨짐으로 보고하던 것을 고친다 (dbb0fe2)
- 보안: 서버 API 의 market 입력을 상수로 제한하고 로그와 오류 응답에 외부 값이 새지 않게 한다 (f80197b)
- 보안: ReDoS 정규식과 URL host, script 끝 태그 검사를 고친다 (d2466f9)
- 보안: 동기화 로그에서 DART 키 조각을 빼고 CodeQL 분석 범위에서 tests 를 뺀다 (3a3a9c0)
- 수정: CI lint 게이트의 silent-fail 감사 신규 위반 3 건을 닫는다 (a87762c)
- 정리: 루트에 흩어지던 도구 캐시를 .cache 한 곳으로 모으고 cinch 스위치를 선언한다 (c9dff07)
- 문서: Skill OS web.json 의 operation.notifyPipeline 드리프트를 동기화한다 (1ebee79)
- 수정: 시뮬레이터 공개 계산기의 금리와 마진 채널을 실제 값에 연결한다 (3da3174)
- 문서: 시뮬레이터 SKILL.md 변경을 Skill OS 산출물에 동기화한다 (7b20002)
- 추가: 시뮬레이터에 한 회사 조건부 전략 비교 strategies 축을 연다 (5cdf7c9)
- 문서: 시뮬레이터 strategies 축 SKILL.md 변경을 Skill OS 산출물에 동기화한다 (c515d1a)
- 정리: 시뮬레이터 registry 의 거시 root 와 전달 채널 node 를 channels 모듈로 나눈다 (1def389)
- 수정: EDGAR 과거 시점 분기 흐름이 10-K 분기 주석 때문에 접수 불일치로 실패하던 문제를 고친다 (cbf3150)
- 문서: dataHub SKILL.md 의 EDGAR lineage 재정렬 설명을 Skill OS 산출물에 동기화한다 (b749ca6)
- 추가: DART finance 접수 원장을 수집 run 마다 불변 파일로 만든다 (9d62390)
- 설정: 일일 finance 동기화에 접수 원장 생성과 HF 업로드 스텝을 붙인다 (74717d5)
- 문서: 시뮬레이터 진행 원장에 2026-09-29 세 항목 결과를 기록한다 (2e4374a)
- 수정: 시뮬레이터 상태 컴파일러가 옛 기간으로 되감긴 상태를 exact 로 받아들이던 문제를 막는다 (60361be)
- 추가: 접수 원장 CLI 에 full 재빌드용 변경 매니페스트 지정 옵션을 더한다 (42d7594)
- 설정: 신규 상장 부트스트랩과 full 재빌드에도 접수 원장 스텝을 붙인다 (783a471)
- 문서: 시뮬레이터 진행 원장에 staleness 수정과 접수 원장 경로 보강을 기록한다 (fe3bad6)
- 추가: 시뮬레이터 scenario 축이 사용자 거시 경로와 드라이버 override 를 받는다 (fd6562c)
- 문서: 시뮬레이터 사용자 가정 SKILL.md 변경을 Skill OS 산출물에 동기화한다 (45aa1d8)
- 개선: 실제 재무 이력 검증과 사용자 가정 전략 비교 (563e05f)
- 문서: 시뮬레이터 공개 계약 산출물 동기화 (e15aedb)
- 문서: 전체 데이터 자연어 질의 구조와 실측 결과 정리 (9e1817f)
- 추가: 구독 세션의 근거 질의와 공시 문단 의미 연결 지원 (c78eab3)
- 테스트: 구독 세션과 의미 검색의 공개 계약 검증 보강 (bb558ad)
- 수정: DART 수집 누락과 검색 catalog 반영 단절 복구 (f7e346a)
- 수정: 의미 검색 모델 다운로드에 HF 재시도 적용 (f57830b)
- 수정: 검색 기간을 후보 제한 전에 적용해 공시 누락 방지 (9f495b8)
- 추가: 분석 안내를 줄이고 조회 표의 근거 있는 계산 지원 (ecb1708)
- 문서: 검증한 DartLab 변경의 커밋과 일반 푸시를 기본 완료로 지정 (d6b2324)