Files
portfolio-hub/docs/batches/bat-007_20260511_local-db-validation-and-operations-runbook/verification.md
T
genichin 829629fa8f feat: implement portfolio UUID migration and v1 API finalization (BAT-006, BAT-001 re-verified)
Core Changes:
- Migrate portfolio_id from string to UUID in schema and repository layer
- Update portfolio CLI commands to use name+user combination for identification
- Update HTTP API to accept portfolio_id as UUID path parameter
- Implement portfolio ownership validation in repository queries

Requirements Completed (REQ-016 to REQ-019):
- REQ-016: portfolios table UUID schema migration with data migration script
- REQ-017: CLI portfolio commands with name+user identification
- REQ-018: HTTP API portfolio path parameters and v1 asset_id UUID returns
- REQ-019: Portfolio UUID baseline documentation updates

BAT-001 Re-verification:
- REQ-004~010 marked as Implemented after verification evidence validation
- All v1 API endpoints verified with comprehensive test coverage

Documentation Updates:
- Update data-model.md with portfolio UUID structure
- Update interface-contract.md with UUID path parameters
- Update runtime-flows.md with ownership-based resolution flows
- Update project-structure.md with database layer changes
- Add migration script for portfolio UUID transition

Testing:
- Add test_portfolio_uuid.py for migration validation
- Update test_cli.py and test_portfolio_ownership.py for ownership checks
2026-05-11 09:27:57 +00:00

5.0 KiB

BAT-007 Verification

  • Status: passed
  • Batch: BAT-007
  • Profile: batch-lite

Acceptance Mapping

REQ-001: 로컬 DB 초기화 및 마이그레이션 검증 시나리오 정의

AC 기준 Evidence 결과
AC-1 init-db, health-check, smoke flow의 명령 순서, 기대 출력, pass/fail 기준, 로그 수집 위치가 문서로 정의됨 README.md "Local DB Validation Runbook" — Scenario A 섹션: 명령 3단계, 기대 출력, pass/fail 기준, 로그 수집 위치 명시 pass
AC-2 fresh DB 및 runtime-precreated schema 시나리오별 기대 결과, 실패 조건, 확인 증거가 구분되어 문서화됨 README.md Scenario A (fresh DB) 및 Scenario B (App 선행 기동), docs/runtime-flows.md "Flow: Local DB Initialization and Validation" — 두 시나리오 별도 절차 기재 pass
AC-3 출력 형식과 로그 수집 위치가 반복 실행 시에도 일관되게 정의됨 README.md "반복 실행 (재현성 확인)" 섹션 — down -v 후 재실행 절차, JSON 출력 수집 방법, docker compose logs 위치 명시 pass

REQ-002: Alembic와 runtime schema ownership 경계 정리

AC 기준 Evidence 결과
AC-1 Alembic과 ensure_schema()가 다루는 주요 객체와 충돌 가능 지점이 식별됨 docs/project-structure.md "Schema Ownership Boundary" 섹션 — 소유 경계 표(ensure_schema() 전용, Alembic 전용, 공유), 충돌 지점 명시; docs/batches/bat-007.../design.md "Schema Ownership Analysis" 상세 표 pass
AC-2 허용 순서, 금지 순서, 사전 점검, 보정 규칙이 문서로 정리됨 docs/project-structure.md "허용 실행 순서" 및 "운영 제약" 항목; docs/runtime-flows.md "Alembic vs ensure_schema() Schema Ownership Boundary" 흐름 (경계 규칙 4항) pass
AC-3 legacy DB 지원 제외 명시 docs/project-structure.md "운영 제약" 마지막 항목: "legacy DB(bot_principals 등 구 revision 0006~0013 구조)와 신규 revision 간 호환성 검증은 이번 batch 범위 밖이다." pass

REQ-003: 로컬 DB 운영 runbook 및 baseline 문서 갱신

AC 기준 Evidence 결과
AC-1 README에 docker compose 기반 준비 절차, init-db/migrate-db 실행 순서, health-check 및 smoke flow 검증 기준이 포함됨 README.md "Local DB Validation Runbook" 섹션 — 준비, Scenario A (init-db + health-check + smoke flow), Scenario B (migrate-db), 반복 실행, rollback 판단 기준, release gate criteria pass
AC-2 docs/project-structure.md와 docs/runtime-flows.md에 구조 제약과 실행 흐름 제약이 반영됨 docs/project-structure.md "Schema Ownership Boundary" 섹션; docs/runtime-flows.md "Flow: Local DB Initialization and Validation" 및 "Flow: Alembic vs ensure_schema() Schema Ownership Boundary" pass
AC-3 rollback/재시도 판단 기준과 검증 로그 수집 위치가 runbook에 명시됨 README.md "Rollback / 재시도 판단 기준" 표 (4개 증상별 조치), "Release Gate Criteria" (3개 필수 조건), 로그 수집: docker compose logs portfolio-hub-timescaledb pass

Architecture Impact Confirmation

  • batch-lite profile, Design Gate: no
  • Architecture Impact: both — docs/project-structure.md, docs/runtime-flows.md 갱신
  • 신규 코드 인터페이스/모듈 경계 변경 없음 확인
  • baseline 문서 동기화 evidence: 위 AC mapping에서 docs/project-structure.md, docs/runtime-flows.md, README.md 변경 내용 직접 확인

Evidence Summary

문서/항목 변경 여부 확인 방법
README.md — "Local DB Validation Runbook" 섹션 신규 추가 직접 확인 완료
docs/runtime-flows.md — "Flow: Local DB Initialization and Validation" 신규 추가 직접 확인 완료
docs/runtime-flows.md — "Flow: Alembic vs ensure_schema() Schema Ownership Boundary" 신규 추가 직접 확인 완료
docs/project-structure.md — "Schema Ownership Boundary" 신규 추가 직접 확인 완료
app/repositories/postgres.py 변경 없음 코드 분석으로 확인 — ensure_schema() IF NOT EXISTS 보호 완비
app/db/migrations.py 변경 없음 코드 분석으로 확인 — bootstrap_or_upgrade_to_head() 정상 동작
docker-compose.local-test.yml 변경 없음 검증 시나리오 요건 충족 확인

Blocking Issues

없음.

Remaining Risks (Post-verification)

  • idx_auth_tokens_service_name_unique (partial index)가 ensure_schema()에만 존재하고 Alembic revision에는 없다. Fresh Alembic 설치 환경에서 이 인덱스가 생성되지 않을 수 있다. 기능 영향: service token name uniqueness 보장 불완전. 후속 batch에서 Alembic revision 추가 검토 권장.
  • Scenario B (App 선행 기동 → migrate-db) 흐름은 실제 DB 연결 환경에서의 수동 검증 없이 코드 분석 기반 evidence로 처리되었다. Release 전 실제 docker compose 환경에서 확인 권장.