Files
KArtSell.Aegis/docs/WEEK1_EXECUTION_CHECKLIST.md
kjh2064 bc93b7df3c docs: Week 1 실행 계획 (전략적 로드맵, 19가지 원칙, 일일 체크리스트)
## 요약
- STRATEGIC_ROADMAP_2026_08_18.md: 4주 병렬화 계획
- EXECUTION_STRATEGY_19PRINCIPLES.md: 19가지 원칙 실행 전략
- WEEK1_EXECUTION_CHECKLIST.md: Day-by-day 실행 체크리스트

## 내용
- 현황 분석: COMPLETED 40+, IN_PROGRESS 25, BLOCKED 9
- 목표: 의존성 제거 3개, FE 병렬 8개 시작, 현장감 검증
- 일정: 2026-08-18 ~ 08-25 (8일)

## 19가지 원칙 매핑
 SOLID, 정규화, 패턴화, 표준화, 구조화, 재현성, 정공법
 코드리팩토링, 데이터정합, 과유불급, 역정규화, 프로세스
 바이브코딩, 홀루시네이션방지, 현장감, 이력성, 안정성, 고도화, 컴포넌트화, 기술부채

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-18 12:58:04 +09:00

546 lines
14 KiB
Markdown

# 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 완료 보고서