# Phase 2 구현 계획

이 문서는 AI 코딩 에이전트가 Phase 2를 실제로 구현할 수 있도록 작업 순서, 산출물, 완료 기준을 정의합니다.

## 1. 구현 원칙

1. 작은 단위로 쪼개서 머지 가능한 PR 수준으로 작업합니다.
2. 각 단계는 **테스트 가능**한 산출물을 남겨야 합니다.
3. raw-first / idempotent / replayable 원칙을 절대 깨지 않습니다.
4. `TODO`로 남기는 것보다 최소 동작 경로를 먼저 완성합니다.
5. Phase 2 범위 밖 기능을 섞지 않습니다.

## 2. 선행조건

아래가 준비되어 있어야 합니다.

- Phase 0 문서 승인
- Phase 1 문서 승인
- 저장소 구조 초기화
- PostgreSQL/DuckDB 연결 확인
- 공통 설정 로더 및 로깅 유틸 준비
- Phase 1 DB migration baseline 적용

## 3. 작업 분할

### Workstream A — 공통 실행 프레임

#### A1. Job Runner 공통 모듈
구현:
- run_id 생성기
- job context
- structured log helper
- 상태 전이 helper
- retry helper

완료 기준:
- 샘플 job이 created → running → completed까지 상태를 남길 수 있어야 함

#### A2. Checkpoint Store
구현:
- checkpoint load/save 인터페이스
- source/job별 namespace
- optimistic update 또는 atomic update

완료 기준:
- 샘플 key에 대해 저장/조회/갱신 가능
- race condition 기본 테스트 통과

#### A3. Raw File Store
구현:
- temp write → checksum → atomic rename
- sidecar 메타 저장
- path builder

완료 기준:
- 샘플 payload에 대해 raw + sidecar 저장 가능
- checksum mismatch 시 예외 발생

### Workstream B — SEC 수집기

#### B1. submissions poll
구현:
- CIK 목록 입력
- submissions JSON fetch
- raw 저장
- filing header staging 생성
- documents upsert

완료 기준:
- 최소 1개 CIK에 대해 최신 submissions 처리 성공
- 신규 accession 탐지 가능

#### B2. filing fetch
구현:
- accession 대상 fetch
- filing text/index/exhibit 저장
- artifact inventory 생성

완료 기준:
- accession 1건에 대해 filing 본문과 99.1 저장 가능

#### B3. xbrl extract
구현:
- XBRL 대상 식별
- 주요 fact rows 추출
- canonical fact 저장

완료 기준:
- accession 1건에서 fact rows 생성 가능

### Workstream C — Alpaca 수집기

#### C1. daily bars backfill
구현:
- symbol/date range 입력
- raw 저장
- canonical daily bars 생성
- PostgreSQL/Parquet 저장

완료 기준:
- 3개 이상 심볼, 20일 이상 backfill 성공

#### C2. intraday bars poll
구현:
- symbol list 입력
- 지정 trading day intraday 수집
- canonical intraday bars 생성

완료 기준:
- 1개 trading day에 대해 분봉 데이터 저장 가능

### Workstream D — FRED / FINRA 수집기

#### D1. FRED series sync
구현:
- series_id 목록 설정
- series metadata + observations 저장

완료 기준:
- 3개 이상 series 동기화 성공

#### D2. FINRA short volume
구현:
- 거래일 파일 fetch
- 파싱 및 구조화
- 비정상 행 검출

완료 기준:
- 1일 파일 처리 및 symbol row 저장 성공

### Workstream E — 검증 및 운영

#### E1. Data Quality Validator
구현:
- uniqueness 검사
- null/empty 검사
- timestamp/date 범위 검사
- freshness 검사

완료 기준:
- source별 검증 리포트 생성 가능

#### E2. CLI + Cron friendly entrypoints
구현:
- 각 잡 CLI
- dry_run / backfill / replay 지원

완료 기준:
- 문서에 있는 CLI 예시가 실제로 동작

#### E3. Runbook support
구현:
- failed run 재시도 명령
- quarantine 조회 명령
- lineage 조회 유틸

완료 기준:
- 운영자가 CLI만으로 기본 진단 가능

## 4. 권장 구현 순서

1. Workstream A
2. Workstream B1
3. Workstream C1
4. Workstream D1 / D2
5. Workstream B2
6. Workstream C2
7. Workstream B3
8. Workstream E

이 순서의 이유:
- 먼저 공통 런타임을 안정화해야 함
- 그 다음 전략에 가장 중요한 SEC + 일봉 가격부터 확보
- 나머지 소스는 이후 붙여도 연구가 가능

## 5. AI 코딩 에이전트용 세부 지시

### 5.1 구현 스타일

- 각 collector는 `main.py`, `runner.py`, `client.py`, `normalize.py`, `write.py`로 분리
- source별 하드코딩 최소화
- 공통 로직은 `libs/common`, `libs/adapters`, `libs/db`로 이동
- 타입힌트 필수
- 테스트 fixture를 먼저 만들고 구현

### 5.2 금지사항

- source adapter 내부에서 전략 점수 계산 금지
- raw 저장 없이 structured write 금지
- print 기반 로그 금지
- 전역 mutable state 금지
- silent failure 금지

### 5.3 필수 구현 항목

- dry_run
- replay
- force
- run_id propagation
- checksum capture
- structured log
- checkpoint persistence

## 6. 각 PR 또는 작업 단위의 Definition of Done

모든 작업은 아래를 만족해야 완료로 봅니다.

- 코드 구현 완료
- 단위 테스트 추가
- 최소 1개 통합 테스트 추가
- README 또는 해당 문서 갱신
- 예외/오류 메시지 사람이 이해 가능
- 로그에 run_id 포함
- idempotent 재실행 확인

## 7. 최종 완료 기준

Phase 2 전체 완료 조건:

- SEC / Alpaca / FRED / FINRA 수집기가 모두 동작한다.
- poll/backfill/replay 3모드가 적어도 핵심 source에 구현돼 있다.
- raw/staging/structured lineage가 연결된다.
- job_runs / checkpoint / quality result가 기록된다.
- 운영자가 runbook만 보고 수집 상태를 확인하고 재실행할 수 있다.
