QUERY-ONLY OPERATIONS REFERENCE
탐지부터 24시간 라벨까지, 증거가 연결되는 방식
이 문서는 현재 코드가 보장하는 경계와 복구 규칙을 설명합니다. 숫자 현황은 문서에 고정하지 않고 /labels에서 실시간으로 확인합니다.
/Users/Shared/memenexus/current-release-commit
Source evidence: release-manifest.json
Runtime evidence: runtime-manifest.json
Label policy: observed-2x-gmgn-5m-v2
episode_id와 flow_prediction_id로만 연결합니다.1. 한 episode의 전체 흐름
- PredictionFlow score/tier, scorer version, chain과 canonical asset key를 저장합니다.
prediction_created - Investigation탐지를 큐에 전달하고 조사 cycle을 시작·예약합니다.
investigation_started - Report원인·근거를 저장하고 publish 결과를 episode에 연결합니다.
report_saved - Deliverystream별 원장에 sending/sent/failure 상태를 기록합니다.
delivery_sent등 - 24h labelGMGN 5분 kline으로 미래 24시간 성과를 엄격 평가합니다.
label_evaluated
코인 상세의 “예측 → 라벨 에피소드”는 flow_episode_events를 발생 시각 순으로 읽고, report와 delivery 원장을 같은 episode로 조회합니다. 과거 행에 lineage가 없으면 lineage unavailable로 표시하며 CA/report 일치만으로 배송 성공을 만들지 않습니다.
2. 지원 체인과 외부 링크
체인 이름과 외부 URL은 shared/chains.ts 한 곳에서 정규화합니다. 알 수 없는 체인은 “Unknown”으로 보이고 링크를 만들지 않습니다.
| Canonical ID | 표시 | 허용 alias | GMGN slug | DexScreener |
|---|---|---|---|---|
solana | SOL | solana, sol | sol | solana |
ethereum | ETH | ethereum, eth | eth | ethereum |
base | BASE | base | base | base |
bsc | BSC | bsc, bnb, binance-smart-chain | bsc | bsc |
polygon | POL | polygon | 지원 안 함 | polygon |
arbitrum | ARB | arbitrum | arbitrum | arbitrum |
robinhood | RH | robinhood | robinhood | robinhood |
stable | STABLE | stable | stable | stable |
monad | MON | monad | monad | monad |
tron | TRX | tron | tron | tron |
blast | BLAST | blast | blast | blast |
avalanche | AVAX | avalanche, avax | avax | avalanche |
robinhood입니다. hood나 CA 뒤에 임의 suffix를 붙이지 않습니다.3. Strict future label 정책
관측 범위
탐지 시점부터 정확히 24시간, 5분 봉 288개를 대상으로 합니다. 원본은 gmgn-token-kline이며 요청 체인과 응답 context가 일치해야 합니다.
2× 성공 조건
단일 spike가 아니라 2개 연속 peak candle이 2× 이상이어야 하며, exit quote volume은 최소 $1,000입니다. 8× 이상 비정상 jump는 glitch 방어 규칙을 적용합니다.
미래 데이터만
이 정책은 version이 붙은 prospective prediction을 평가합니다. 요청 범위에서 과거 전체 라벨 backfill은 실행하지 않습니다. legacy/unversioned 행은 별도 집계합니다.
identity
chain:canonical-address가 자산 키입니다. EVM 주소는 소문자로 canonicalize하고, 체인이 모호하거나 응답 context가 다르면 성공/실패 라벨을 만들지 않습니다.
evaluated_win + evaluated_loss입니다. 실패 원인을 보려면 terminal, retry, invalid metadata를 분리해서 봐야 하며, 완료 건수 자체가 “실패 건수”를 뜻하지 않습니다.라벨 상태 정의
- under_24h
- 24시간 window가 아직 닫히지 않았습니다.
- eligible
- window가 닫혔고 지금 평가할 수 있습니다.
- retry_waiting
- 일시적 kline/chain 오류 후 다음 재시도 시각을 기다립니다.
- terminal
- 재시도해도 의미가 없는 영구 오류로 종료됐습니다. win/loss가 아닙니다.
- evaluated_win
- 엄격한 24h 2× 조건을 충족했습니다.
- evaluated_loss
- 평가는 정상 완료됐지만 2× 조건을 충족하지 못했습니다.
- aged_out
- 72시간 평가 가능 기간을 넘겨 자동 평가 대상에서 제외됐습니다.
- invalid_metadata
- 시각·version·terminal/label 조합 등 저장된 불변식이 맞지 않아 판정을 신뢰할 수 없습니다.
4. Lease, retry, recovery
라벨 evaluator
- 각 prediction은 owner가 10분 lease로 claim합니다. 다른 worker는 살아 있는 claim을 가져갈 수 없습니다.
- 모든 완료·재시도·terminal update는 같은 owner 조건으로 compare-and-set합니다. lease가 만료된 이전 worker의 늦은 결과는 반영되지 않습니다.
- 일시 오류는 시도 횟수에 따라 약 2h → 4h → 최대 6h 간격으로 재시도합니다. 영구 주소/context 오류는 terminal로 분류합니다.
- 죽은 worker의 claim은 expiry 후 다른 worker가 회수합니다. 수동으로 label 값을 덮어쓰지 않습니다.
Telegram delivery ledger
| 상태 | 의미와 복구 |
|---|---|
sending | 전송 전에 durable row를 확보한 상태. 신선한 lease면 기다립니다. |
sent | Telegram message ID까지 저장된 확정 성공. 재처리 시 ACK만 합니다. |
failed | 명시적 실패. max attempts 전에는 다시 sending으로 전환할 수 있습니다. |
needs_review | stale sending, identity 충돌, retry 소진처럼 중복 전송 위험이 있어 자동 재전송하지 않습니다. |
skipped | 정책상 보내지 않은 확정 disposition입니다. |
dead_letter | 자동 처리에서 제외된 확정 disposition입니다. |
sending은 “실패했으니 다시 보내기”가 아니라 needs_review입니다. Telegram이 실제로 받았지만 응답 저장 전에 프로세스가 죽었을 수 있기 때문입니다.5. Episode timeline과 provenance
한 episode에는 다음 이벤트가 append-only로 쌓입니다.
prediction_created → detection_published → investigation_started / cycle_scheduled → report_saved / report_published → delivery_* → label_retry_scheduled / label_terminal / label_evaluated
- 이벤트 조회는
episode_idexact match입니다. - 배송 원장도
episode_idexact match입니다. CA 또는 report ID만으로 배송을 주장하지 않습니다. - prediction에 배송 기록이 없으면 “연결된 배송 결과 없음”이라고 말합니다. 이는 “전송 실패”와 다릅니다.
- legacy 행은 목록에는 보일 수 있지만, lineage가 없으면 현대 episode의 delivery와 연결하지 않습니다.
6. Dashboard 신뢰 경계
Production market DB · read only
- reports, predictions, labels, events, delivery ledger 조회
- Dashboard 코드에서 CREATE/ALTER/UPDATE 금지
- 스키마가 오래되면 fail-soft 메시지
Dashboard user DB · writable
- 숨김/scam flag, notes, system feedback
- Prompt Lab 실행 메타데이터
- 프롬프트 원문은 저장하지 않음
Prompt contract
Prompt Lab은 공용 compiled contract로 ID/version/SHA-256, UTC/KST 규칙과 missing-evidence 규칙을 서버에서 검사합니다. 오류가 있으면 DexScreener 조회와 Grok 호출 전에 422로 차단합니다.
시간 표현
모델과 저장 계층의 provenance는 원본 UTC/epoch millisecond를 유지합니다. 사람이 보는 KST 변환은 application UI에서만 수행합니다.
외부 링크
공유 chain registry가 허용한 GMGN/DexScreener URL만 생성합니다. unknown chain에는 추측 링크를 노출하지 않습니다.
운영 숫자
고정 문서 숫자보다 /labels의 generated-at, backlog, lag, retry/terminal 이유와 chain/anomaly breakdown을 사용합니다.
7. 운영 점검 순서
/labels에서 generated time과 warning을 확인합니다.eligible+retry_waitingbacklog, oldest due, p95 lag를 확인합니다.- retry/terminal/invalid reason과 chain breakdown으로 원인을 좁힙니다.
- 코인 상세 episode timeline에서 prediction → report → delivery → label의 ID를 대조합니다.
needs_reviewdelivery는 Telegram/ledger 증거를 확인한 뒤 사람이 disposition을 결정합니다.- Prompt 변경은 Prompt Lab에서 version/hash/diff와 contract 통과를 확인한 뒤 실행합니다.