Fix: PHASE-1_READINESS_VALIDATION_CHECKLIST.md line 210 - Corrected Hangfire queue names: q-customer-sla → q-evaluation (Phase 1) - Added context: Phase 1 shadow run uses q-evaluation for model evaluation tasks - Verified: 9 queues configured, all functional Add: PHASE-1_PARALLEL_VALIDATION_REPORT.md - Agent A (Pre-flight): 5/5 checks ✅ + 1 issue found & fixed - Agent B (Scripts): 3/3 validations ✅ - Agent C (Documentation): 5/5 QA categories ✅ - Execution model: 3 parallel agents, 15 min total, AGENTS.md 13/13 - Status: ALL VALIDATION PASS — Ready for stakeholder distribution Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
17 KiB
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.mdsigned-off - Confirm: Which sources are approved for ingestion?
- Evidence:
-
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
ssh -v kjh2064@178.104.200.7 "exit"- Result: ✅ / ❌
- Latency (ms): ___________
-
SSH Port Forwarding Works: localhost:5432 → remote PostgreSQL
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: ___________
- Query:
-
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: ___________
- Query:
-
Tables Pre-checked:
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
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
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:
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:
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/
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: ___________
- Confirm:
-
UI Contract Markers Present:
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
pwsh -NoProfile -Command ". scripts/freeze-versionset.ps1 -Help" -ErrorAction Stop- Result: ✅ / ❌
-
Parameters Documented: Help shows all 5 required params
Get-Help scripts/freeze-versionset.ps1 -Full- Params found: ModelId ✅, DatasetId ✅, ApprovedBy ✅, ConfigVersion ✅, CodeSha ✅
-
Dry-run Test: Script validates input without DB modification
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
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:
pwsh -NoProfile -Command ". scripts/generate-shadow-run-identifiers.ps1 -Help" -ErrorAction Stop- Result: ✅ / ❌
-
UUID Generation Works:
scripts/generate-shadow-run-identifiers.ps1 -OutputPath ./test-versionset.json- Result: ✅ / ❌
- JSON Valid: ✅ / ❌
- IDs Generated: RunId ✅, JobId ✅, CorrelationId ✅
- File Size: _______bytes
-
Output Format Correct:
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:
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:
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
- Log file:
-
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