이 스킬
Event Radar Engine Candidate Memo
이벤트 레이더에서 반복 가능한 신호를 나중에 엔진으로 환류할 후보로 정리하되, recipe 검산 경로는 계속 유지하는 L1/L1.5 절차다.
이어 가기
절차
실행 순서
- 1
promotionGate가 없는 후보는 실패다.
- 2
단일 실행 결과는 구현 완료가 아니다.
예시
이런 질문이 들어오면 이 skill 을 쓴다
- 이벤트 레이더에서 엔진 후보 정리
출력
기대 결과
- signalId별 status
- recommendedEngineOwner
- promotionGate
공개 호출 방식
AI 도구 실행 순서는 EngineCall 우선이다. 아래 Python 블록은 확보한 L1/L1.5 근거를 buildEventRadarMemo로 묶는 RunPython fallback 절차다.
import dartlab
from dartlab.synth.eventRadar import buildEventRadarMemo
target = "005930"
c = dartlab.Company(target)
def rows(value, limit=30):
if hasattr(value, "head") and hasattr(value, "to_dicts"):
return value.head(limit).to_dicts()
if isinstance(value, list):
return value[:limit]
return []
try:
filings = rows(c.disclosure(), limit=50)
except Exception:
filings = []
try:
price_rows = rows(c.gather("price"), limit=40)
except Exception:
price_rows = []
try:
consensus_rows = rows(c.gather("consensus"), limit=12)
except Exception:
consensus_rows = []
memo = buildEventRadarMemo(
target=target,
market=str(getattr(c, "market", "KR")),
companyName=str(getattr(c, "corpName", target)),
filings=filings,
priceRows=price_rows,
consensusRows=consensus_rows,
)
emit_result(
table=memo["tables"]["engineCandidateMemo"],
values=memo["headline"],
date=memo["asOf"],
sources=memo["sources"],
) 호출 동작
1. 결론 도출
6 signal 후보 + promotionGate 단정. 예: “engineCandidateMemo 6 row — eventInbox status=watch promotionGate=‘ledger 통과 4 회 누적’ / priceFlowReaction status=ok promotionGate=‘falsifier resolved 60%+’ / insiderOwnershipSignal status=missing (data 없음) / capitalActionMonitor status=ok promotionGate=‘action 추세 12M+’ / consensusDriftWatch status=watch / scanContext status=ok. 4 of 6 signal 승격 후보 (status=ok 또는 watch + gate 명시).”
2. 핵심 근거 수집
- Company.disclosure() filings + gather(‘price’) + gather(‘consensus’) 3 source
- buildEventRadarMemo() → 6 signal × (status + recommendedEngineOwner + promotionGate + keepAsSkillAfterPromotion)
- 각 signal 별 recipe 검산 경로 유지 명시 (keepAsSkillAfterPromotion=True)
3. 메커니즘 분석
6 signal 후보 → status 분류 + promotion 조건
signalId status promotionGate engineOwner
eventInbox ok/watch ledger 통과 ≥ 4 회 Company.disclosure
priceFlowReaction ok falsifier resolved 비율 ≥ 60% Company.gather(price/flow)
insiderOwnershipSignal ok/missing insider rows ≥ 12 회 (12M+) Company.gather(insider)
capitalActionMonitor ok action 추세 12M+ Company.gather(dividend)
consensusDriftWatch ok/watch consensus rows ≥ 12 회 Company.gather(consensus)
scanContext ok scan universe 정합 12M+ scan.market
↓
승격 의사결정:
status=ok + promotionGate 충족 → 엔진 환류 (구현 시작)
status=watch + gate 부분 충족 → 검증 더 (1-2 분기 추적)
status=missing → 데이터 부재 (제외)
↓
keepAsSkillAfterPromotion=True 강제:
엔진화 이후에도 recipe 보존 — 검산 경로 유지 + dogfood 가능성 본 메모는 후보 정리 — 실제 엔진 구현 X. 단일 실행 결과를 엔진 완료처럼 표현 시 forbidden 위반.
4. 반례·한계
- 단일 실행 결과를 엔진 구현으로 표현 → forbidden 위반.
- promotionGate 가 없는 후보는 미완성 — 실패 처리.
- selfRun 없이 status=ok 단정 → 데이터 미검증 위험.
- engineOwner 정의가 너무 모호 (예: “Company”) → 실제 환류 어려움.
5. 후속 모니터링
- promotionGate 충족 → engine 환류 plan 시작 (운영자 결정).
- 모든 후보 status=watch →
recipes.fundamental.disclosure.eventRadar.falsifierLedger로 ledger 통과율 점검. - selfRun 결과 일관 →
recipes.fundamental.disclosure.eventRadar.visualDecisionPack으로 observed viz binding.
대표 반환 형태
| column | 의미 |
|---|---|
signalId | 후보 축 |
status | missing/ok/watch/risk |
recommendedEngineOwner | 나중에 담당할 엔진 영역 |
promotionGate | 승격 조건 |
keepAsSkillAfterPromotion | recipe 보존 여부 |
연계 절차
- recipes.fundamental.disclosure.eventRadar.falsifierLedger - 반증 통과 확인.
- recipes.fundamental.disclosure.eventRadar.visualDecisionPack - observed viz binding 확인.
기본 검증
- promotionGate가 없는 후보는 실패다.
- 단일 실행 결과는 구현 완료가 아니다.
런타임
실행 환경별 호환성
| 환경 | 상태 | 비고 / 제한 |
|---|---|---|
| Local Python | supported | — |
| Server | supported | — |
| MCP | supported | — |
| Web AI | supported | — |
| Pyodide | limited | — |
실패 회피
흔한 실패 · 절대 금지
- selfRun 없이 엔진 승격 후보로 확정
- engineCandidateMemo를 실제 엔진 구현으로 표현하지 않는다.