Add ProofLine criteria documentation and Strategy Catalog v1 implementation

- Add acceptance criteria documentation (AC-0013 through AC-0023)
- Add Line-0003 discovery documentation
- Implement Strategy Catalog v1 with new database migration
- Update portfolio API endpoints and schemas
- Refactor strategy and portfolio services
- Add strategy management CLI commands
- Update domain models with strategy catalog support
- Add comprehensive tests for v1 strategies
- Update design documentation (data model, interfaces, runtime flows)
This commit is contained in:
2026-08-15 11:18:31 +09:00
parent 5fc389dea8
commit 6e02d92282
48 changed files with 2114 additions and 393 deletions
@@ -0,0 +1,61 @@
# 구현 완료 — GitHub Issue #26 비정식 증적
> 이 문서는 ProofLine canonical lifecycle artifact가 아니다. #26 구현 당시 GitHub 댓글을 출처와 함께 원문 보존한 비정식 증적이다.
> 이 증거는 로컬 구현·검증 상태를 기록하지만 ProofLine 정식 implementation chronology, delivery closure, push, PR, 원격 main 반영, release 또는 deployment 완료를 소급 증명하지 않는다.
> Source: https://github.com/fourblocks2020/portfolio-hub/issues/26#issuecomment-5291927258
> Comment ID: `IC_kwDOR4l8PM8AAAABO2xm2g`
> Author: `genichin`
> Created: `2026-08-14T09:48:42Z`
> Original body SHA-256: `c3bc9a3ad6c9cc6678ed700a11add03b1f5abe71645a21e157dc091faec28f10`
> Original body boundary: 아래 `---` 다음 byte부터 파일 끝까지가 GitHub 원문 body다.
---
## 구현 완료
이슈 #26 **전략 API v1 이전 및 관리자 전역 카탈로그 권한 분리**의 승인 범위를 로컬 `main` 작업 트리에 구현하고 실제 PostgreSQL 검증 및 독립 QC까지 완료했습니다.
### 구현 내용
- 비버전 `/strategy-sets` 제거 및 전략 API `/v1` 이전
- 일반 사용자: active 전략 조회 전용 `/v1/strategies`
- 관리자: 전체 전략 카탈로그 CRUD `/v1/admin/strategies`
- 전략 카탈로그에 `active/inactive` 상태와 revision 도입
- 신규 전략 revision 1, 실질적 PATCH만 revision 증가, no-op 유지
- 동시 PATCH를 `FOR UPDATE`로 직렬화하고 최신 name/config 기준으로 derived `nick` 계산
- 포트폴리오 create/update에서 기존 active `strategy_id`만 선택
- `strategy_name`·`strategy_params`를 통한 간접 전략 생성 차단
- 전략 선택의 `FOR SHARE`와 포트폴리오 저장을 같은 트랜잭션으로 묶어 inactivate/delete race 차단
- 전략 DELETE의 `FOR UPDATE`·두 참조 형태 검사·삭제를 한 트랜잭션으로 통합
- stale BUY/SELL snapshot이 전략 선택 컬럼을 덮어쓰지 못하도록 거래 저장 책임 분리
- 거래 portfolio UPDATE와 ledger INSERT 원자화
- 포트폴리오 응답에 최신 `strategy_revision` 노출
- 기본 `target_value`/`{}` 전략 migration과 runtime nick 파생 규칙 통일
- CLI, 문서, migration 및 동시성 회귀 테스트 갱신
### 실제 검증 결과
- 이슈 집중 회귀: `99 passed`
- 실제 PostgreSQL 동시성·migration 통합 테스트: 최종 `4 passed`
- 동시 partial PATCH의 nick/revision 일관성
- 전략 선택 대 DELETE race의 orphan 방지
- stale A snapshot → B 선택 → A 삭제 → stale BUY 저장 후 B 유지
- 신규 DB 전체 Alembic upgrade 및 head 재실행
- 관련 최종 회귀: `75 passed`
- 알려진 기존 문제 파일 제외 광범위 회귀: `608 passed, 3 skipped`
- 독립 최종 QC 재실행: PostgreSQL `4 passed`, focused `37 passed, 4 skipped`
- Python compile, `git diff --check`, 변경 핵심 파일 Ruff 검사: 통과
- 독립 QC 최종 판정: **PASS**
전체 broad 실행에 남은 3건은 저장소 밖 `temp/deleted_20260813/.worktrees`를 스캔하는 기존 환경 오염 실패로, 이번 변경에 의한 회귀가 아닙니다.
### 비차단 후속 권고
- PostgreSQL 통합 테스트 cleanup을 fixture/`finally` 기반으로 강화하면 테스트가 중간 실패·중단될 때의 잔여 fixture 방지를 개선할 수 있습니다. 현재 성공 경로 cleanup은 QC 전후 잔여 레코드 수가 동일해 정상입니다.
### 완료 경계
- 완료: 로컬 구현, 실제 테스트, migration 검증, 문서 갱신, 독립 QC
- 미수행: 커밋, push, PR, 원격 `main` 반영, 이미지 게시, 운영 설정 변경, 배포, 릴리스
현재 변경은 기준 HEAD `5fc389dea8f05c6f711ecfe874f055979af5e58d`의 로컬 `main` 작업 트리에 **미커밋 상태**로 보존되어 있습니다. 이 댓글은 제품 구현·검증 완료를 뜻하며 배포·릴리스 또는 이슈 lifecycle closure를 뜻하지 않습니다.