# 구현 완료 — 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를 뜻하지 않습니다.