# Week 1 실행 체크리스트 (2026-08-18 ~ 08-25) **상태:** 🟢 ACTIVE **목표:** 의존성 제거 + 현장감 검증 + FE 병렬 시작 **소유자:** 전체 팀 **기한:** 2026-08-25 (8일) --- ## 🎯 Week 1 목표 (3개) 1. **PostgreSQL 연결 복구** (차단 제거) 2. **현장감 검증** (Host/DB/API 실제 동작) 3. **FE 병렬 작업 시작** (8개 컴포넌트 typecheck green) --- ## 📋 Daily Action Items ### Day 1 (2026-08-18, Monday) #### ✅ Task 1: PostgreSQL 재설정 (1시간) ```bash # 터미널 1: SSH 터널 (계속 열어두기) ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7 # 로그인 성공 신호: # Last login: ... # (아무 프롬프트도 표시되지 않음 = 정상) # 터미널 2: 연결 확인 psql -h localhost -U kartsell -d kartsell -c "SELECT version();" # 예상 결과: # version # PostgreSQL 15.x on x86_64-pc-linux-gnu, ... ``` **증거 기록:** - [ ] SSH 터널 확인 (ps aux | grep ssh) - [ ] psql 버전 출력 캡처 - [ ] 파일: `evidence/WEEK1/postgresql-connection.log` --- #### ✅ Task 2: 의존성 분석 (2시간) ```bash # 현재 BLOCKED 항목 확인 grep "^AEG-" docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv | grep "BLOCKED" | cut -d, -f1,4 # 예상 결과: # AEG-VS-05-01,IngestFundamentalsPIT # AEG-VS-06-01,MaintainFeeTaxFxSchedule # AEG-X-038,Reconfirm Fee/Tax/FX valid-time schedule decisions # AEG-X-011,Golden vector 고도화 # AEG-VS-09-01,BuildEvidenceSnapshot # AEG-VS-19-01,RunFrozenBacktest # AEG-V16-015,Adapter rollback runbook # AEG-V16-016,Vendor boundary fitness # AEG-V16-017,FieldShell 표준 ``` **의사결정 필요한 것 (PM에 전달):** ```markdown # PM 의사결정 요청 (48시간 내 답변 필요) ## 1️⃣ AEG-VS-05/06 정책 결정 현재: - AEG-VS-05: IngestFundamentalsPIT (공시/재무/컨센서스) - AEG-VS-06: MaintainFeeTaxFxSchedule (수수료/세금/FX) 질문: Phase 2에 포함할까, Phase 3에서? - Phase 2 포함 → 9월 15일 완료 필요 - Phase 3 포함 → 11월 1일 이후 시작 영향: - Phase 2 포함: FE 15개 + BE 2개 추가 (2주) - Phase 3 포함: 현재 일정 유지 (Phase 2 45일만 필요) 추천: Phase 3 포함 (현재 병렬화 유지) ``` **증거 기록:** - [ ] 파일: `docs/CURRENT/WEEK1_BLOCKER_DECISIONS.md` 생성 - [ ] PM 메신저/이메일 전송 - [ ] 답변 대기 중 표시 --- #### ✅ Task 3: Host 로컬 실행 테스트 (1시간) ```bash # Terminal 3: Host 시작 (DEVELOPMENT 모드) cd src/KArtSell.Host # 환경 변수 설정 (test keys, 실제 KIS/KRX 안 호출) export KRX_OPENAPI="test-key-xxx" export OPENDART_API="test-key-yyy" export KIS_APP_KEY="test-key-zzz" # Host 시작 dotnet run -c Debug --no-build # 예상 출력: # info: Microsoft.Hosting.Lifetime[14] # Now listening on: http://127.0.0.1:5002 # info: Microsoft.Hosting.Lifetime[0] # Application started. Press Ctrl+C to shut down. ``` **증거 기록:** - [ ] Host 시작 로그 캡처: `evidence/WEEK1/host-startup.log` - [ ] 시간 기록: 시작 시간 --- #### ✅ Task 4: Shadow Run API 호출 테스트 (30분) ```bash # Terminal 4: API 호출 (Host 실행 중일 때) # 테스트 요청 만들기 cat > /tmp/shadow-run-request.json << 'EOF' { "modelId": "00000000-0000-0000-0000-000000000001", "windowStart": "2024-01-02", "windowEnd": "2024-09-10", "phaseFilter": "All" } EOF # API 호출 curl -X POST http://127.0.0.1:5002/api/shadow-runs \ -H "X-KArtSell-User: test-user" \ -H "X-KArtSell-Role: Admin" \ -H "Content-Type: application/json" \ -d @/tmp/shadow-run-request.json \ -v # 예상 결과: # HTTP/1.1 202 Accepted # Location: /api/shadow-runs/87d0fdf3-30ca-4097-822d-1119a3ebdb87 ``` **증거 기록:** - [ ] 응답 코드: 202 확인 - [ ] Location 헤더에 RunId 있음 - [ ] 파일: `evidence/WEEK1/api-202-accepted.txt` --- #### ✅ Task 5: DB 상태 확인 (30분) ```bash # PostgreSQL 연결 (Terminal 1의 터널 사용) psql -h localhost -U kartsell -d kartsell -- 1. Shadow Run 기록 확인 SELECT run_id, model_id, status, created_at FROM model_operations.shadow_runs ORDER BY created_at DESC LIMIT 5; -- 2. 메트릭 저장 확인 SELECT model_id, metric_name, value, published_at FROM model_operations.shadow_run_metrics WHERE run_id = '<위의 run_id>' LIMIT 5; -- 3. 감사 추적 확인 SELECT actor_id, action, resource_id, published_at FROM compliance.audit_events WHERE published_at > NOW() - INTERVAL '1 hour' LIMIT 5; ``` **증상태 기록:** - [ ] shadow_runs 테이블에 새 행 1개 이상 - [ ] shadow_run_metrics 데이터 있음 - [ ] audit_events 기록 있음 - [ ] 파일: `evidence/WEEK1/db-status.sql` (쿼리 결과) --- ### Day 2-3 (2026-08-19 ~ 08-20, Tue-Wed) #### ✅ Task 6: FE 컴포넌트 병렬 시작 (4시간) ```bash # Frontend 작업 시작 (8개 컴포넌트) cd frontend # 1. 현재 상태 확인 pnpm typecheck pnpm test # 예상: 모두 PASS 또는 알려진 실패만 # 2. 작업 분할 (팀 3명) # Person A (Task 6a): V13-FE-007 + V13-FE-024 (State Panel + Permission Guard) # Person B (Task 6b): V13-FE-033 + V13-FE-028 (ProblemDetails + Reconciliation API) # Person C (Task 6c): V13-FE-034 + V13-FE-036 + V13-FE-037 (Idempotency, T12 Work Queue, T11 Fast Entry) # 3. 각 Task별 실행 (독립적으로 진행) # Task 6a 예시 cd frontend/src/features/ui-standard/pages # V13-FE-007 파일 수정 # V13-FE-024 파일 수정 pnpm test -- V13-FE-007 # 타겟 테스트만 pnpm typecheck # 4. 병합 대기 (모두 PASS까지) ``` **증거 기록:** - [ ] 각 Task별 typecheck PASS - [ ] 각 Task별 test PASS (또는 알려진 실패만) - [ ] 파일: `evidence/WEEK1/fe-parallel-day2-day3.md` --- #### ✅ Task 7: Backend 스케줄 통합 테스트 (4시간) ```bash # AEG-V15-033~036 DB 통합 cd src/KArtSell.Modules.ModelOperations # 1. 현재 상태 확인 dotnet test tests/KArtSell.ModelOperations.UnitTests/ -c Release \ --filter "ScheduleOccurrence|DueModelOperation|DispatcherCas" # 예상: 모두 PASS (도메인 구현 완료) # 2. DB 통합 테스트 추가 # File: tests/KArtSell.Integration.Tests/Scheduling/ScheduleIntegrationTests.cs # Tests: # - InsertSchedule_WithCatchUpPolicy → DB 저장 ✅ # - QueryNextOccurrence → PIT query ✅ # - UpdateNextDueAt_CAS → 낙관적 동시성 ✅ dotnet test tests/KArtSell.Integration.Tests/Scheduling/ -c Release # 3. 마이그레이션 검증 # Existing: MIG-0020 (scheduled_for 컬럼) # 검증: fresh/upgrade/re-run 테스트 dotnet test tests/KArtSell.Integration.Tests/DbUpMigrationTests.cs -c Release \ --filter "0020" ``` **증거 기록:** - [ ] 4개 도메인 테스트 모두 PASS - [ ] 2개 통합 테스트 추가 및 PASS - [ ] 마이그레이션 테스트 PASS - [ ] 파일: `evidence/WEEK1/schedule-integration.log` --- ### Day 4-5 (2026-08-21 ~ 08-22, Thu-Fri) #### ✅ Task 8: AEG-X-011 Golden Vector 작성 (4시간) ```bash # Phase 1 결과를 사용해서 Golden vector 작성 # 기존: AEG-X-011 BLOCKED (Phase 1 완료 대기) # 현재: Phase 1 완료됨 (2026-08-14, RunId 87d0fdf3) # 1. Phase 1 메트릭 수집 psql -h localhost -U kartsell -d kartsell << 'EOF' SELECT run_id, model_id, sharpe_ratio, total_return, max_drawdown, pbo_percent, dsr_value, created_at FROM model_operations.shadow_runs WHERE run_id = '87d0fdf3-30ca-4097-822d-1119a3ebdb87'; EOF # 2. Golden vector 정의 (docs/CURRENT/AEG-X-011_GOLDEN_VECTOR.md) cat > docs/CURRENT/AEG-X-011_GOLDEN_VECTOR.md << 'EOF' # Golden Vector (Phase 1 Baseline) **Source:** Phase 1 Shadow Run (2026-08-14) **RunId:** 87d0fdf3-30ca-4097-822d-1119a3ebdb87 **Period:** 2024-01-02 ~ 2024-09-10 (252 trading days) ## Metrics | Metric | Value | Status | |--------|-------|--------| | Sharpe Ratio | 7.59 | ✅ Target ≥ 1.5 | | Total Return | 557.68% | ✅ Strong | | Max Drawdown | -12.3% | ✅ Acceptable | | Num Signals | 432 | ✅ Active | ## Algorithm Version - EMA(20, 50) - Position sizing: dynamic (0.5-5.0%) - Fee model: 2x (conservative) ## Regression Test Cases 1. Replay with same input → same output ✅ 2. Replay with +1 day → metrics stable ✅ 3. OOS (Aug-Sep 2024) → validate performance EOF # 3. Golden data 파일 생성 cat > evidence/AEG-X-011/golden-baseline-87d0fdf3.json << 'EOF' { "runId": "87d0fdf3-30ca-4097-822d-1119a3ebdb87", "modelId": "00000000-0000-0000-0000-000000000001", "period": { "start": "2024-01-02", "end": "2024-09-10" }, "metrics": { "sharpe": 7.59, "return": 557.68, "drawdown": -12.3, "signals": 432 }, "signals": [ { "date": "2024-01-02", "ticker": "SAMSAUNG", "action": "BUY", "confidence": 0.95 }, ... ] } EOF # 4. 테스트 작성 cat > tests/KArtSell.ModelOperations.UnitTests/GoldenVectorTests.cs << 'EOF' public class GoldenVectorTests { [Fact] public async Task ReplayGoldenVector_ReturnsConsistentMetrics() { // Arrange var goldenVector = LoadGoldenVector("87d0fdf3"); var replay = new ShadowRunReplay(goldenVector); // Act var result = await replay.ExecuteAsync(); // Assert Assert.Equal(7.59, result.SharpeRatio, precision: 0.01); Assert.Equal(557.68, result.TotalReturn, precision: 1.0); Assert.Equal(432, result.SignalCount); } } EOF # 5. 테스트 실행 dotnet test tests/KArtSell.ModelOperations.UnitTests/GoldenVectorTests.cs -c Release ``` **증거 기록:** - [ ] docs/CURRENT/AEG-X-011_GOLDEN_VECTOR.md 생성 - [ ] evidence/AEG-X-011/golden-baseline-*.json 생성 - [ ] GoldenVectorTests 작성 및 PASS - [ ] WBS_PROGRESS_TRACKER 업데이트 (AEG-X-011 COMPLETED) --- #### ✅ Task 9: AEG-VS-29 & AEG-X-016 재검증 (2시간) ```bash # AEG-VS-29: Reconciliation (DB-unverified) # 현재: PostgreSQL 연결 불가였음 → 이제 연결됨 dotnet test tests/KArtSell.Integration.Tests/ -c Release \ --filter "ReconciliationEngineTests|ReconciliationRequestValidator" # 예상: 이전 실패 → 이제 PASS # AEG-X-016: KIS hard-off (endpoint disabled) # 현재: Test proves 0 HTTP calls dotnet test tests/KArtSell.Integration.Tests/ -c Release \ --filter "KisTradingHardOffTests" # 예상: 1/1 PASS ``` **증거 기록:** - [ ] Reconciliation 통합 테스트 PASS - [ ] KIS hard-off 테스트 PASS - [ ] 파일: `evidence/WEEK1/vs29-x016-revalidation.log` --- ### Day 6-7 (2026-08-23 ~ 08-24, Sat-Sun) #### ✅ Task 10: Week 1 최종 검증 (2시간) ```bash # 1. 전체 테스트 실행 dotnet test KArtSell.sln -c Release # 예상: # - 원래: 176/176 tests # - 이제: 180+/180+ tests (AEG-V15, AEG-X-011 추가) # - 모두 PASS # 2. Frontend 테스트 cd frontend pnpm test && pnpm typecheck && pnpm build # 예상: # - V13-FE-007~037 (15개) 중 8개 완료 # - 모두 typecheck PASS # - 모두 build PASS # 3. WBS 진행도 업데이트 grep "^AEG-VS-29\|^AEG-X-016\|^AEG-X-011\|^V13-FE-007\|^V13-FE-024\|^V13-FE-033\|^V13-FE-028\|^V13-FE-034\|^V13-FE-036\|^V13-FE-037" \ docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv # 예상: 3개 해제 (AEG-X-011, AEG-VS-29, AEG-X-016) # 8개 진행 중 (V13-FE series) ``` **증거 기록:** - [ ] 전체 테스트 결과: `evidence/WEEK1/all-tests-final.log` - [ ] WBS_PROGRESS_TRACKER 최종 업데이트 - [ ] 파일: `docs/WEEK1_COMPLETION_REPORT.md` --- ### Day 8 (2026-08-25, Monday) #### ✅ Task 11: Week 1 보고 (1시간) ```markdown # Week 1 완료 보고서 ## 목표 달성도 ### 1️⃣ PostgreSQL 재설정 ✅ COMPLETED - SSH 터널 설정 - 로컬 DB 연결 확인 - 모든 연결 기반 테스트 PASS ### 2️⃣ 현장감 검증 ✅ COMPLETED - Host 로컬 실행 성공 - API 호출 (202 Accepted) ✅ - DB 상태 확인 ✅ - 감사 추적 기록 ✅ ### 3️⃣ FE 병렬 시작 ✅ IN PROGRESS - 8개 컴포넌트 typecheck PASS ✅ - 8개 컴포넌트 test PASS ✅ - 7개 컴포넌트 build PASS ✅ - Week 2에 15개 모두 완료 예정 ### 4️⃣ 의존성 제거 ✅ COMPLETED - AEG-X-011 (Golden Vector) ✅ COMPLETED - AEG-VS-29 (Reconciliation) ✅ PASS (DB 연결 후) - AEG-X-016 (KIS hard-off) ✅ PASS - AEG-VS-05/06 의사결정 대기 중 ## 메트릭 | 항목 | Week 0 | Week 1 | 변화 | |------|--------|--------|------| | COMPLETED | 40 | 43 | +3 ✅ | | IN_PROGRESS | 25 | 33 | +8 ✅ | | BLOCKED | 9 | 6 | -3 ✅ | | Test Count | 176 | 183 | +7 ✅ | | Build Status | ✅ | ✅ | 유지 | ## 위험 & 이슈 ### 해결됨 ✅ - PostgreSQL 연결 불가 → SSH 터널로 해결 - DB 마이그레이션 테스트 실패 → 권한 문제, 문서화됨 ### 진행 중 ⏳ - AEG-VS-05/06 정책 결정 (PM 대기) - AEG-V16-015/016 선행 조건 확인 ### 다음주 예정 ⏰ - 15개 FE 컴포넌트 완료 - 4개 Schedule 도메인 DB 통합 - Phase 2 Go/No-Go 준비 ## 다음 단계 (Week 2) - [ ] AEG-VS-05/06 정책 승인 받기 (또는 Phase 3로 연기) - [ ] 15개 FE 컴포넌트 최종화 - [ ] 4개 Schedule DB 통합 완료 - [ ] AEG-X-008 OpenAPI CI/CD 연동 ``` **증거 기록:** - [ ] 파일: `docs/WEEK1_COMPLETION_REPORT.md` - [ ] 메모리 업데이트: `session_20260825_week1_complete.md` --- ## ✅ 체크리스트 요약 ### Daily Verification - [ ] **Day 1 (08-18):** PostgreSQL + API + DB 상태 확인 - [ ] **Day 2-3 (08-19~20):** FE 8개 + Schedule 도메인 병렬 - [ ] **Day 4-5 (08-21~22):** Golden Vector + 재검증 - [ ] **Day 6-7 (08-23~24):** 최종 검증 - [ ] **Day 8 (08-25):** Week 1 보고서 ### 19가지 원칙 검증 (Week 1 버전) - [ ] **SOLID:** cyclomatic ≤ 10 (Architecture tests) - [ ] **코드리팩토링:** DRY (중복 감지) - [ ] **데이터정합:** PIT query 검증 - [ ] **과유불급:** 불필요 코드 제거 - [ ] **정규화:** Schema 3NF - [ ] **역정규화:** Projection 최신성 - [ ] **프로세스:** 병렬 작업 시작 - [ ] **패턴화:** Vertical Slice 준수 - [ ] **표준화:** 명명/형식 일관 - [ ] **구조화:** CorrelationId 추적 - [ ] **바이브:** 테스트 80%+ - [ ] **홀루시네이션:** 근거 기반 - [ ] **현장감:** Host 로컬 실행 ✅ - [ ] **재현성:** 스크립트 재실행 - [ ] **이력성:** Audit 기록 ✅ - [ ] **안정성:** 4가지 실패 모드 - [ ] **고도화:** Phase 2 준비 - [ ] **컴포넌트:** 모듈 격리 - [ ] **정공법:** no shortcuts - [ ] **기술부채:** 월별 20% --- **준비:** ✅ READY **시작:** 2026-08-18 (오늘) **마감:** 2026-08-25 (일주일) **보고:** Week 1 완료 보고서