이 스킬
Thesis Tracker — falsifier × 신규 evidence diff
보유 thesis 의 falsifier 게이트 자동화 — 각 thesis 의 falsifier 조건 vs 새 evidence (공시 · 가격 · macro update) diff 단일 표. "반증 불가능 = thesis 아님" 원칙 강행. FSI 벤치마크 cadence recipe 3 의 3 호 + memory benchmark_fsi_repo P0
이어 가기
절차
실행 순서
- 1
thesis JSON 외부 저장 (사용자 선택 — repo 안 또는 외부 storage)
- 2
`Company.filings()` — 신규 공시 (lookback 기간)
- 3
`dartlab.gather("price", code)` 가격 시계열
- 4
macro update (regime 변화) — `dartlab.macro("cycle"|"rates")`
- 5
thesis 정성 ("성장 둔화") 시 자동 판정 불가 — 정량 falsifier 강행.
- 6
pythonCheck eval 보안 — 안전 sandbox (RunPython 측 가드) 강행.
- 7
신규 evidence lag — 공시 indexing 1~3 일.
- 8
thesis 자체 편향 (confirmation bias) — falsifier 외부 검증자 review 권장.
- 9
status="violated" → 운영자 review → thesis 폐기 또는 재정의 (재정의는 별 thesisId, 회피 가드).
- 10
status="intact" 지속 → `recipes.meta.thesisKillChain.tripwireMonitor` 결합.
- 11
thesisHealth score < 0.5 → thesis 자체 점검.
- 12
`thesisId : str`
예시
이런 질문이 들어오면 이 skill 을 쓴다
- 보유 thesis 5 종 falsifier 게이트 일일 점검
- thesis "삼성전자 HBM leadership" × Q3 매출 가이던스 + 경쟁사 발표 diff
공개 호출 방식
import dartlab
import polars as pl
import json
from datetime import date, timedelta
# thesis JSON 외부 저장 — 예시 schema
theses = [
{
"thesisId": "th-005930-hbm-2026",
"stockCode": "005930",
"title": "삼성전자 HBM4 양산 leadership",
"claim": "2026 하반기 HBM4 양산 안정화 + 매출 비중 30% 도달",
"falsifier": {
"description": "Q3/Q4 HBM 매출 가이던스 +20% YoY 미달 OR 경쟁사 (SK하이닉스) HBM4 양산 6 개월 선행",
"pythonCheck": "hbm_yoy >= 0.20 and not competitor_lead_6m",
},
"createdAt": "2026-01-15",
},
{
"thesisId": "th-035720-ai-2026",
"stockCode": "035720",
"title": "카카오 AI 수익화 turning point",
"claim": "2026 하반기 AI 광고 매출 본격화 + 영업이익률 회복",
"falsifier": {
"description": "Q3 영업이익률 5% 미달 또는 AI 광고 매출 100억 미만",
"pythonCheck": "op_margin >= 0.05 and ai_ad_revenue >= 10_000_000_000",
},
"createdAt": "2026-02-01",
},
]
asof = date.today()
lookback = asof - timedelta(days=30)
rows = []
for th in theses:
c = dartlab.Company(th["stockCode"])
# 신규 evidence 수집 (공시 + 가격 + macro)
new_filings = [
f for f in c.filings()
if lookback.strftime("%Y%m%d") <= f["rcept_dt"] <= asof.strftime("%Y%m%d")
]
price_change = dartlab.gather("price", target) # 기간 필터는 아래에서
# falsifier 조건 평가 (간이 — 실 평가는 pythonCheck eval)
status = "intact" # intact / violated / pending
evidence_delta = {
"newFilings": len(new_filings),
"priceChange30d": price_change,
}
rows.append({
"thesisId": th["thesisId"],
"stockCode": th["stockCode"],
"title": th["title"],
"falsifierStatus": status,
"evidenceDelta": json.dumps(evidence_delta, ensure_ascii=False),
"lastCheck": asof.isoformat(),
})
df = pl.DataFrame(rows)
emit_result(
table=df,
values={"n_theses": len(theses), "n_intact": (df["falsifierStatus"] == "intact").sum()},
date=asof.isoformat(),
sources=["thesis-json://local", "dartlab://company/liveFilings", "dartlab://company/price"],
) 호출 동작
1. 결론 도출
보유 thesis × falsifier × 신규 evidence diff 단일 표. falsifier 위반 신호 → 운영자 review → thesis 폐기 또는 강화 결정.
2. 핵심 근거 수집
- thesis JSON 외부 저장 (사용자 선택 — repo 안 또는 외부 storage)
Company.filings()— 신규 공시 (lookback 기간)dartlab.gather("price", code)가격 시계열- macro update (regime 변화) —
dartlab.macro("cycle"|"rates")
3. 메커니즘 분석
thesis JSON 입력 (claim + falsifier)
↓
신규 evidence 수집 (공시 + 가격 + macro)
↓
falsifier 조건 평가 (pythonCheck eval — 안전 sandbox)
↓
status 분류:
intact — falsifier 조건 유지 (thesis 살아있음)
violated — falsifier 위반 (운영자 review 트리거)
pending — evidence 부족 (다음 check 까지 대기)
↓
단일 표 + thesisHealth score (intact 일수 / 총 일수) 4. 반례·한계
- thesis 정성 (“성장 둔화”) 시 자동 판정 불가 — 정량 falsifier 강행.
- pythonCheck eval 보안 — 안전 sandbox (RunPython 측 가드) 강행.
- 신규 evidence lag — 공시 indexing 1~3 일.
- thesis 자체 편향 (confirmation bias) — falsifier 외부 검증자 review 권장.
5. 후속 모니터링
- status=“violated” → 운영자 review → thesis 폐기 또는 재정의 (재정의는 별 thesisId, 회피 가드).
- status=“intact” 지속 →
recipes.meta.thesisKillChain.tripwireMonitor결합. - thesisHealth score < 0.5 → thesis 자체 점검.
대표 반환 형태
pl.DataFrame — 컬럼:
thesisId : strstockCode : strtitle : strfalsifierStatus : str— intact / violated / pendingevidenceDelta : str (JSON)lastCheck : str— YYYY-MM-DDthesisHealth : float(선택)
연계 절차
- 본 recipe → 보유 thesis 일일 falsifier 게이트.
- status=“violated” →
recipes.meta.thesisKillChain.falsifierLedger운영자 review. - status=“intact” + 신규 catalyst →
recipes.meta.thesisKillChain.tripwireMonitor. - thesis 정성 → 정량 falsifier 재정의 시 →
recipes.meta.thesisKillChain.thesisIntake. - 일일 cadence 결합 →
recipes.meta.report.dailyMorningNoteBlock C (신규 공시 catalyst).
런타임
실행 환경별 호환성
| 환경 | 상태 | 비고 / 제한 |
|---|---|---|
| Local Python | supported | · |
| Server | supported | · |
| MCP | supported | · |
| Web AI | limited | · |
| Pyodide | limited | · |
실패 회피
흔한 실패 · 절대 금지
- thesis JSON 외부 저장 — repo 안 위치 미정 (사용자 선택).
- falsifier 조건이 정량 아닌 정성 ("성장 둔화") 시 자동 판정 불가.
- 새 evidence 수집 주기 (일/주/월) 따라 lag.
- falsifier 없는 thesis 등록 금지 — "반증 불가능 = thesis 아님" 원칙 강행 (FSI 벤치마크 + memory benchmark_fsi_repo P1 falsifiable).
- thesis 폐기 자동 결정 금지 — falsifier 위반 신호 발생 시 운영자 review 후 폐기.
- 같은 thesis 의 falsifier 재정의로 evidence 회피 금지 (post-hoc 합리화).