# Phase 1 Readiness Validation Checklist

**Date:** 2026-08-07  
**Purpose:** Pre-execution validation of all prerequisites before Phase 1 shadow run activation  
**Audience:** SRE, Platform Lead, Business Owner  
**Status:** TEMPLATE (ready to execute)

---

## 🎯 Overview

**Phase 1 Shadow Run:** 252+ trading days autonomous market simulation with auditable evidence  
**Setup Time:** ~2 hours (pre-checks + tool validation)  
**Execution Time:** 50-90 calendar days (automatic, no manual intervention)  
**Success Criteria:** All checks PASS before proceeding to activation

---

## 📋 SECTION A: Governance & Approvals

### A.1 — DEC-037: Source/License/SLA Approved

**Owner:** Law + Data Governance  
**Deadline:** 2026-08-10  
**Blocking:** YES (blocks P2-P6 automation)

- [ ] **Source Approved:** KRX/OpenDart/Consensus data sources confirmed
  - Evidence: `docs/CURRENT/AEG-X-009_DECISION_PACKAGE.md` signed-off
  - Confirm: Which sources are approved for ingestion?

- [ ] **License Verified:** All sources have compliant license terms
  - Evidence: License agreement file path: ___________
  - Confirm: No GPL/AGPL (incompatible with commercial products)?

- [ ] **Retention SLA Confirmed:** Data retention period defined (1yr/3yr/perpetual)
  - Evidence: SLA document: ___________
  - Confirm: Complies with GDPR/PCI-DSS?

- [ ] **Update Freshness SLA Confirmed:** Daily/weekly/monthly refresh rate
  - Evidence: SLA document: ___________
  - Confirm: Shadow run can consume data at this frequency?

**Sign-off:** ___________  (Law Lead)  /  ___________ (DataGov Lead)

---

### A.2 — DEC-038: Market Calendar Source & Operator Assigned

**Owner:** Data Governance + Ops Lead  
**Deadline:** 2026-08-12  
**Blocking:** YES (blocks market simulation accuracy)

- [ ] **Calendar Source Approved:** KRX official holidays/trading calendar
  - Evidence: Data source URI: ___________
  - Confirm: 3rd-party aggregator or direct KRX API?

- [ ] **Owner Assigned:** Named operator responsible for calendar data
  - Owner Name: ___________
  - Email: ___________
  - Confirm: On-call rotation configured?

- [ ] **Secondary Assigned:** Backup operator for calendar updates
  - Secondary Name: ___________
  - Email: ___________
  - Confirm: Escalation path defined?

- [ ] **Timezone Standardized:** Asia/Seoul or UTC chosen globally
  - Timezone: ___________
  - Evidence: Config location: ___________
  - Confirm: All shadow run calculations use same timezone?

**Sign-off:** ___________ (DataGov Lead)  /  ___________ (Ops Lead)

---

### A.3 — DEC-079: Holiday Correction SLA & Policy

**Owner:** Data Architecture + Ops + Legal  
**Deadline:** 2026-08-12  
**Blocking:** YES (blocks ad-hoc holiday handling)

- [ ] **Timezone Standard Confirmed:** Asia/Seoul official timezone
  - Standard: ___________
  - Evidence: appsettings.json: ___________

- [ ] **Holiday Corrections Procedure Defined:** Request → Approve → Reflect
  - Request mechanism: ___________
  - Approver(s): ___________
  - SLA (e.g., T+0, T+1, EOM): ___________
  - Evidence: Runbook path: ___________

- [ ] **Correction Authority Assigned:** Who can request/approve corrections?
  - Request Authority: ___________
  - Approval Authority: ___________
  - Emergency escalation: ___________

**Sign-off:** ___________ (Ops Lead)  /  ___________ (Compliance)

---

### A.4 — VersionSet Approved by Business

**Owner:** Business Owner / Portfolio Manager  
**Deadline:** TBD (Phase 1 start signal)  
**Blocking:** YES (gates entire Phase 1)

- [ ] **Model ID Confirmed:** UUID of model to shadow-run
  - Model ID: ___________
  - Model Name: ___________
  - Model Version: ___________
  - Evidence: governance.model_version_registry query result

- [ ] **Dataset ID Confirmed:** UUID of dataset for backtest period
  - Dataset ID: ___________
  - Dataset Name: ___________
  - Coverage: ___________ to ___________
  - Evidence: evaluation.dataset_manifest query result

- [ ] **Approval Signed:** Model approved for production shadow run
  - Approved By (email): ___________
  - Approval Date: ___________
  - Confidence Level (High/Medium/Low): ___________
  - Evidence: Approval document path: ___________

- [ ] **Risk Sign-off:** Risk team has signed off on model usage
  - Risk Lead: ___________
  - Approval Date: ___________
  - Known Risks Documented: YES / NO
  - Risk Mitigation Plan: ___________

**Sign-off:** ___________ (Business Owner)  /  ___________ (Risk Lead)

---

## 🏗️ SECTION B: Infrastructure & Environment

### B.1 — PostgreSQL Database (Remote)

**Owner:** DBA / Database Team  
**Blocking:** YES (core persistence)

- [ ] **Remote Host Accessible:** 178.104.200.7 responding to SSH
  ```bash
  ssh -v kjh2064@178.104.200.7 "exit"
  ```
  - Result: ✅ / ❌
  - Latency (ms): ___________

- [ ] **SSH Port Forwarding Works:** localhost:5432 → remote PostgreSQL
  ```bash
  ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7 &
  psql -h localhost -U kartsell -d kartsell -c "SELECT NOW()"
  ```
  - Result: ✅ / ❌
  - Connection Time (ms): ___________

- [ ] **Database Connectivity:** kartsell DB accessible with test query
  - Query: `SELECT COUNT(*) FROM governance.model_version_registry`
  - Result: ✅ (row count: _______) / ❌
  - Last Backup: ___________

- [ ] **Migration 0032 Deployed:** Queued status contract present
  - Query: `SELECT schema_version FROM schema_version_history WHERE script_name LIKE '0032_%'`
  - Result: ✅ (version: _______) / ❌
  - Evidence: DbMigrator log timestamp: ___________

- [ ] **Tables Pre-checked:**
  ```sql
  SELECT COUNT(*) FROM governance.model_version_registry;
  SELECT COUNT(*) FROM evaluation.dataset_manifest;
  SELECT COUNT(*) FROM model_operations.shadow_runs;
  ```
  - model_version_registry rows: _______
  - dataset_manifest rows: _______
  - shadow_runs rows: _______

**Sign-off:** ___________ (DBA)

---

### B.2 — Host Application (.NET)

**Owner:** Backend Lead / Platform SRE  
**Blocking:** YES (API endpoint required)

- [ ] **Build Successful:** dotnet build -c Release produces artifact
  ```bash
  dotnet build KArtSell.sln -c Release
  ```
  - Result: ✅ (warnings: _______) / ❌
  - Build Time: _______s
  - Build Date: ___________

- [ ] **Host Startup (DEVELOPMENT mode):** App listens on http://127.0.0.1:5002
  ```bash
  dotnet run --project src/KArtSell.Host -c Debug --no-build
  ```
  - Result: ✅ / ❌
  - Startup Time: _______s
  - Expected Log: "Now listening on: http://127.0.0.1:5002"

- [ ] **DevelopmentHeaderAuthenticationHandler Active:**
  - Log output contains: "DevelopmentHeaderAuthenticationHandler" ✅ / ❌
  - Confirm: Debug mode enables X-KArtSell-User header acceptance
  - NOT Release mode (which uses FailClosedAuthenticationHandler) ✅ / ❌

- [ ] **Hangfire Scheduler Initialized:**
  - Log output contains: "Hangfire: JobStorage initialized" ✅ / ❌
  - Dashboard available: http://127.0.0.1:5002/admin/dashboard ✅ / ❌
  - Job queues visible: q-evaluation (Phase 1), q-control, q-research ✅ / ❌
  - *Note: Phase 1 shadow run uses q-evaluation queue for model evaluation tasks*

- [ ] **API Health Check:**
  ```bash
  curl -H "X-KArtSell-User: admin" -H "X-KArtSell-Role: Admin" \
       http://127.0.0.1:5002/health
  ```
  - Result: HTTP 200 ✅ / ❌

- [ ] **Shadow Run Endpoint Accessible:**
  ```bash
  curl -X POST \
       -H "X-KArtSell-User: admin" \
       -H "X-KArtSell-Role: Admin" \
       -H "Content-Type: application/json" \
       -d '{"modelId":"","datasetId":"","windowStart":"2024-01-02","windowEnd":"2024-09-10","phaseFilter":"All"}' \
       http://127.0.0.1:5002/api/shadow-runs
  ```
  - Result: HTTP 202 Accepted ✅ / HTTP 422 Validation Error ❌ / HTTP 5xx Server Error ❌
  - Response Job ID: ___________

**Sign-off:** ___________ (Backend Lead)

---

### B.3 — Frontend Build & Distribution

**Owner:** Frontend Lead  
**Blocking:** NO (Phase 1 is backend-only, but validates deployment)

- [ ] **Frontend Build Successful:** pnpm build produces dist/
  ```bash
  cd frontend && pnpm build
  ```
  - Result: ✅ / ❌
  - Build Time: _______s
  - Bundle Size (gzip): _______kb

- [ ] **Static Assets Copied to Host:** dist → src/KArtSell.Host/wwwroot/
  - Confirm: `ls -lh src/KArtSell.Host/wwwroot/index.html`
  - Result: ✅ / ❌
  - File Size: _______kb
  - Modification Time: ___________

- [ ] **UI Contract Markers Present:**
  ```bash
  grep -r "app-version" dist/ && grep -r "UI contract 4.0" dist/
  ```
  - Result: ✅ (found) / ❌ (missing)

**Sign-off:** ___________ (Frontend Lead)

---

## 🔧 SECTION C: Tools & Scripts Validation

### C.1 — freeze-versionset.ps1 Validation

**Owner:** SRE  
**Blocking:** YES (mandatory for VersionSet freeze)

- [ ] **Script Syntax Valid:** PowerShell parse-check succeeds
  ```powershell
  pwsh -NoProfile -Command ". scripts/freeze-versionset.ps1 -Help" -ErrorAction Stop
  ```
  - Result: ✅ / ❌

- [ ] **Parameters Documented:** Help shows all 5 required params
  ```powershell
  Get-Help scripts/freeze-versionset.ps1 -Full
  ```
  - Params found: ModelId ✅, DatasetId ✅, ApprovedBy ✅, ConfigVersion ✅, CodeSha ✅

- [ ] **Dry-run Test:** Script validates input without DB modification
  ```powershell
  scripts/freeze-versionset.ps1 `
    -ModelId "00000000-0000-0000-0000-000000000001" `
    -DatasetId "00000000-0000-0000-0000-000000000002" `
    -ApprovedBy "test@example.com" `
    -ConfigVersion "v1.0.0" `
    -CodeSha "aaaaaaaaaa"
  ```
  - Pre-flight Check: ✅ Passed / ❌ Failed
  - Migration 0032: ✅ Found / ❌ Not deployed
  - Database Insert: ✅ Success / ❌ Failed
  - Correlation ID: ___________

- [ ] **Error Handling:** Script fails safely if parameter missing
  ```powershell
  scripts/freeze-versionset.ps1 -ModelId "..." -DatasetId "..."
  # Missing: -ApprovedBy, -ConfigVersion, -CodeSha
  ```
  - Result: ✅ (fails immediately) / ❌ (proceeds incorrectly)

**Sign-off:** ___________ (SRE)

---

### C.2 — generate-shadow-run-identifiers.ps1 Validation

**Owner:** SRE  
**Blocking:** NO (utility; can be run anytime)

- [ ] **Script Syntax Valid:**
  ```powershell
  pwsh -NoProfile -Command ". scripts/generate-shadow-run-identifiers.ps1 -Help" -ErrorAction Stop
  ```
  - Result: ✅ / ❌

- [ ] **UUID Generation Works:**
  ```powershell
  scripts/generate-shadow-run-identifiers.ps1 -OutputPath ./test-versionset.json
  ```
  - Result: ✅ / ❌
  - JSON Valid: ✅ / ❌
  - IDs Generated: RunId ✅, JobId ✅, CorrelationId ✅
  - File Size: _______bytes

- [ ] **Output Format Correct:**
  ```bash
  jq '.phase1_run | keys' test-versionset.json
  ```
  - Keys present: runId ✅, jobId ✅, jobRunId ✅, correlationId ✅, idempotencyKey ✅

**Sign-off:** ___________ (SRE)

---

### C.3 — PHASE-1_ACTIVATION_RUNBOOK.md Validation

**Owner:** SRE / Platform Lead  
**Blocking:** YES (execution procedure)

- [ ] **Pre-flight Checklist Complete:**
  - [ ] Migration 0032 deployed ✅
  - [ ] Host running in DEVELOPMENT mode ✅
  - [ ] PostgreSQL accessible via SSH tunnel ✅
  - [ ] Hangfire scheduler running ✅
  - [ ] Scripts available in ./scripts/ ✅

- [ ] **3-Step Procedure Verified:**
  - [ ] STEP 1: FREEZE VersionSet (2 min) — ready to execute
  - [ ] STEP 2: GENERATE identifiers (1 min) — ready to execute
  - [ ] STEP 3: ENQUEUE Job 893 (1 min) — ready to execute

- [ ] **Troubleshooting Matrix Present:**
  - Common errors documented ✅
  - Recovery procedures clear ✅

- [ ] **Monitoring Instructions Clear:**
  - Log tailing command: ✅
  - Grafana dashboard: ✅
  - Alert setup: ✅
  - Emergency rollback: ✅

**Sign-off:** ___________ (SRE Lead)

---

## 📊 SECTION D: Data Quality & State Validation

### D.1 — Model & Dataset State

**Owner:** Data Governance / Quant Lead  
**Blocking:** YES (ensures reproducibility)

- [ ] **Model Card Complete:**
  - [ ] Model ID: ___________
  - [ ] Model Name: ___________
  - [ ] Algorithm: ___________
  - [ ] Training Data Window: ___________ to ___________
  - [ ] Last Validated: ___________
  - [ ] Known Limitations: ___________

- [ ] **Dataset Manifest Complete:**
  - [ ] Dataset ID: ___________
  - [ ] Dataset Name: ___________
  - [ ] Features: ___________
  - [ ] Data Quality Score: ___________
  - [ ] Last Refreshed: ___________
  - [ ] Completeness: _______% (target: ≥95%)

- [ ] **Market Data Available:**
  - [ ] KRX price data: 2024-01-02 to 2024-09-10 ✅ / ❌ (gaps: _________)
  - [ ] Index data: KOSPI/KOSDAQ ✅ / ❌
  - [ ] Volume data: Available ✅ / ❌
  - [ ] Corporate actions: Splits/dividends integrated ✅ / ❌

- [ ] **No Data Quality Anomalies:**
  ```sql
  SELECT COUNT(*) FROM market_data WHERE price_close <= 0 OR volume = 0;
  ```
  - Bad rows: _______ (target: 0)

**Sign-off:** ___________ (Quant Lead)

---

### D.2 — PIT (Point-in-Time) Query Validation

**Owner:** Data Architect  
**Blocking:** YES (ensures audit trail)

- [ ] **Correlation IDs Trackable:**
  - Sample query passes ✅ / ❌
  - `SELECT COUNT(*) FROM outbox WHERE correlation_id = ?`
  - Result: _______rows

- [ ] **Revision History Preserved:**
  - Append-only tables confirmed ✅
  - No UPDATE/DELETE allowed ✅
  - Soft deletes only ✅

- [ ] **Published_at Timestamp Correct:**
  ```sql
  SELECT COUNT(*) FROM governance.model_version_registry
  WHERE published_at > NOW();
  ```
  - Result: 0 rows (no future dates) ✅ / ❌

**Sign-off:** ___________ (Data Architect)

---

## 📈 SECTION E: Monitoring & Observability Setup

### E.1 — Logging Configured

**Owner:** SRE / Observability Lead  
**Blocking:** NO (but strongly recommended)

- [ ] **Structured Logging Active:**
  - Log file: `/app/kartsell/logs/phase-1-execution.log` ✅
  - Format: JSON with CorrelationId ✅
  - Retention: _______ days

- [ ] **Serilog PII Redaction Active:**
  - SSN redaction: ✅
  - Credit card redaction: ✅
  - API key redaction: ✅

- [ ] **Log Aggregation Ready:**
  - ELK / Splunk / Datadog connected: ✅ / ❌
  - Search by CorrelationId functional: ✅ / ❌

**Sign-off:** ___________ (Observability Lead)

---

### E.2 — Metrics & Alerting

**Owner:** SRE / Observability  
**Blocking:** NO (but recommended for incident response)

- [ ] **Grafana Dashboard:**
  - Phase 1 dashboard available: https://grafana.internal/d/phase1-shadow-run ✅ / ❌
  - Key metrics: Job status, trading days elapsed, data quality, cost simulation ✅
  - Real-time refresh: 5-minute interval ✅

- [ ] **Alert Thresholds Configured:**
  - Job failure alert: ✅
  - Data quality anomaly (>5% bad rows): ✅
  - Processing latency >30min: ✅

- [ ] **On-Call Escalation Path:**
  - Primary: ___________
  - Secondary: ___________
  - Escalation delay: _______ minutes

**Sign-off:** ___________ (SRE Lead)

---

## 🚀 SECTION F: Final Readiness Sign-offs

### F.1 — Technical Readiness

**All sections B, C, D must be PASS before proceeding**

| Section | Status | Signed Off By | Date |
|---------|--------|---------------|------|
| B.1 Database | ✅ / ❌ | ___________ | _______ |
| B.2 Host App | ✅ / ❌ | ___________ | _______ |
| B.3 Frontend | ✅ / ❌ | ___________ | _______ |
| C.1 freeze-versionset | ✅ / ❌ | ___________ | _______ |
| C.2 generate-identifiers | ✅ / ❌ | ___________ | _______ |
| C.3 Runbook | ✅ / ❌ | ___________ | _______ |
| D.1 Data State | ✅ / ❌ | ___________ | _______ |
| D.2 PIT Queries | ✅ / ❌ | ___________ | _______ |

---

### F.2 — Business Readiness

**All sections A must be PASS before proceeding**

| Gate | Status | Signed Off By | Date |
|------|--------|---------------|------|
| A.1 DEC-037 (Source/License) | ✅ / ❌ | ___________ | _______ |
| A.2 DEC-038 (Calendar/Owner) | ✅ / ❌ | ___________ | _______ |
| A.3 DEC-079 (Timezone/Correction) | ✅ / ❌ | ___________ | _______ |
| A.4 VersionSet Approved | ✅ / ❌ | ___________ | _______ |

---

### F.3 — Final Go/No-Go Decision

**OVERALL READINESS:**

**GO CRITERIA:**
- ✅ All Section A gates APPROVED (governance)
- ✅ All Section B-D checks PASS (technical)
- ✅ Emergency rollback procedure validated
- ✅ On-call team briefed & ready

**NO-GO CRITERIA:**
- ❌ Any governance approval pending (A.1-A.4)
- ❌ Technical blocker unresolved (B.1-D.2)
- ❌ Critical data quality issue (>10% bad rows)
- ❌ Insufficient monitoring coverage

**FINAL DECISION:**

```
Phase 1 Execution: ☐ GO (proceed to activation) / ☐ NO-GO (defer)

Date: ___________
Approved By: ___________ (Platform Lead)
Emergency Contact: ___________
Backup Lead: ___________
```

**Launch Window:** ___________ to ___________ (UTC)  
**Expected Completion:** 2026-10-27 to 2026-11-26 (50-90 days)  
**Evidence Preservation:** Phase 1 logs → evidence/PHASE-1/logs/

---

## 📚 Supporting Documents

- **Pre-flight Reference:** `docs/CURRENT/PHASE-1_PRODUCTION_PREFLIGHT_20260806.md`
- **Activation Procedure:** `docs/CURRENT/PHASE-1_ACTIVATION_RUNBOOK.md`
- **Evidence Plan:** `docs/CURRENT/PHASE-1_EXECUTION_EVIDENCE_PLAN.md`
- **Tech Decision Log:** `docs/DECISIONS/ADR-*.md` (authentication, data contract, etc.)

---

**Co-Authored-By:** Claude Haiku 4.5 <noreply@anthropic.com>
