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
5.0 KiB
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 환경에서 확인 권장.