diff --git a/CURRENT_ROADMAP.md b/CURRENT_ROADMAP.md index 00be5b2d..ebd19a54 100644 --- a/CURRENT_ROADMAP.md +++ b/CURRENT_ROADMAP.md @@ -1,285 +1,87 @@ # ๐Ÿš€ K-ArtSell Aegis v16.0 - ํ˜„์žฌ ์ง„ํ–‰ ๋กœ๋“œ๋งต -**์ƒํƒœ:** 95% ์™„๋ฃŒ (Phase 2-3 ๊ตฌํ˜„ ์™„๋ฃŒ, Gate 3๋งŒ ๊ฒ€์ฆ ํ•„์š”) -**๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:** 2026-08-03 02:00 KST -**๊ด€๋ฆฌ์ž:** Claude Code + ํ–ฅํ›„ Codex ์—ฐ๊ณ„ +**์ตœ์ข… ๊ฐฑ์‹ :** 2026-08-07 (์ด ๋ฌธ์„œ์˜ ์ด์ „ ๋ฒ„์ „์€ 2026-08-03 ์ƒํƒœ๋กœ ์ •์ฒด๋˜์–ด ์žˆ์—ˆ๊ณ , ๊ทธ ์‚ฌ์ด ๋ณ‘ํ•ฉ๋œ 115๊ฐœ ์ปค๋ฐ‹์„ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฐฑ์‹ ์€ ์‹ค์ œ ์ฝ”๋“œ/ํ…Œ์ŠคํŠธ๋ฅผ ์ง์ ‘ ํ™•์ธํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.) + +**์ƒํƒœ ์š”์•ฝ:** VS-03(์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ), VS-04(๊ฐ์‚ฌ ์ถ”์ ), VS-10(๋งค๋„ ๊ฒฐ์ •), VS-12(๊ฑฐ๋ž˜ ์‹คํ–‰), VS-14(ํฌํŠธํด๋ฆฌ์˜ค ๋Œ€์‚ฌ) ๋ฐฑ์—”๋“œ ๊ตฌํ˜„ + ํ…Œ์ŠคํŠธ ์™„๋ฃŒ. Phase 1 Shadow Run(Gate 5a, 252+ ๊ฑฐ๋ž˜์ผ ๊ฒ€์ฆ)์€ **์•„์ง ์‹œ์ž‘๋˜์ง€ ์•Š์Œ** (๊ณผ๊ฑฐ "RUNNING" ๊ธฐ๋ก์€ ํ—ˆ์œ„์˜€์Œ์ด ์ด๋ฏธ ๋ฌธ์„œ๋กœ ์ •์ •๋จ). ์ƒ์„ธ ํ•ญ๋ชฉ๋ณ„ ์ƒํƒœ๋Š” `docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv` ์ฐธ์กฐ. --- -## ๐Ÿ“ Current Sprint (์ด๋ฒˆ ์ฃผ) +## โš ๏ธ ์•Œ๋ ค์ง„ ๋ฌธ์„œ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ (DECISION_REQUIRED) -### โœ… ์™„๋ฃŒ (4๊ฐœ) - -#### 1. Idempotency ๋ฒ„๊ทธ ์ˆ˜์ • -- **Commit:** 9a2d939 -- **ํŒŒ์ผ:** RecommendationReportGenerator.cs, 3x Job classes -- **๋‚ด์šฉ:** - - ADO pattern์œผ๋กœ HasReportBeenSentAsync/MarkReportSentAsync ๋ณต๊ตฌ - - Daily/Weekly/Monthly ๋ชจ๋“  Job์— idempotency ์ฒดํฌ/๋งˆํฌ ๋ณต๊ตฌ - - CLAUDE.md blocking rule ์ค€์ˆ˜: "No partial success" -- **๊ฒ€์ฆ:** Build 0 errors, ๋ชจ๋“  Job ํ…Œ์ŠคํŠธ๋จ - -#### 2. Serilog Telegram ์•Œ๋ฆผ ํ†ตํ•ฉ -- **์ด์ „ ์ปค๋ฐ‹:** (4519fa8) -- **ํŒŒ์ผ:** TelegramSink.cs -- **๋‚ด์šฉ:** - - ERROR/FATAL ๋กœ๊ทธ โ†’ Telegram ์ž๋™ ๋ฐœ์†ก - - ๋™๊ธฐ ํ˜ธ์ถœ + ์˜ค๋ฅ˜ ์นจ๋ฌต ์ฒ˜๋ฆฌ - - Markdown ํฌ๋งท + ํƒ€์ž„์Šคํƒฌํ”„ - -#### 3. Daily/Weekly/Monthly Recommendation Reports -- **์ด์ „ ์ปค๋ฐ‹:** (4519fa8) -- **ํŒŒ์ผ:** 3x Job ํด๋ž˜์Šค + RecommendationReportGenerator -- **๋‚ด์šฉ:** - - Daily: 09:00 KST ๋งค์ผ - - Weekly: 09:00 KST ํ† ์š”์ผ (์‚ฌ์šฉ์ž ์š”์ฒญ) - - Monthly: 09:00 KST 1์ผ - - SignalEngine.sell_decisions ์ง‘๊ณ„ + Telegram ๋ฐœ์†ก - -#### 4. Phase 1 API ์ตœ์ ํ™” ์™„๋ฃŒ -- **Commit:** eb106d5 -- **ํŒŒ์ผ:** - - KrxDataService.cs (exponential backoff) - - TelegramSinkAsync.cs (new, async queue) - - DataBackfiller.cs (30-day batch) - - ApiCallMetricsService.cs (new, 24h metrics) - - Program.cs (TelegramSinkAsync ๋“ฑ๋ก) -- **๋‚ด์šฉ:** - - KRX: ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ (100ms โ†’ 30s) + X-RateLimit-Remaining ๋ชจ๋‹ˆํ„ฐ๋ง - - Telegram: ๋…ผ๋ธ”๋กœํ‚น ํ, 100ms ๊ฐ„๊ฒฉ, 3ํšŒ ์žฌ์‹œ๋„ - - DataBackfiller: 252์ผ โ†’ 9ํšŒ ํ˜ธ์ถœ (97% โ†“) - - Metrics: API๋ณ„ ์„ฑ๊ณต/์‹คํŒจ/๋ ˆ์ดํ„ด์‹œ/ํ• ๋‹น๋Ÿ‰ ์ถ”์  -- **ํšจ๊ณผ:** Shadow run 4๋ถ„ โ†’ 1์ดˆ (75% โ†“), ์‹ ๋ขฐ์„ฑ โ†‘ +1. **VS ๋ฒˆํ˜ธ ์ฒด๊ณ„ ์ถฉ๋Œ:** `docs/CURRENT/CATALOGS/WBS_MASTER.csv`(์› ๊ณ„ํš)์™€ ์‹ค์ œ ๊ตฌํ˜„/`WBS_PROGRESS_TRACKER.csv`(์‹คํ–‰ ํŠธ๋ž˜์ปค) ์‚ฌ์ด์— VS-03/VS-04/VS-12/VS-14 ๋ฒˆํ˜ธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ถฉ๋Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์„ธ์…˜์—์„œ ๋ฐœ๊ฒฌํ–ˆ๊ณ , ์‚ฌ์šฉ์ž ๊ฒฐ์ •์— ๋”ฐ๋ผ **๊ธฐ์กด ํŠธ๋ž˜์ปค ๋ฒˆํ˜ธ๋ฅผ ์œ ์ง€**ํ•˜๊ณ  ์ถฉ๋Œ ์‚ฌ์‹ค๋งŒ ๊ฐ ํ–‰์— ๋ช…์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ณธ ํ•ด๊ฒฐ(์žฌ๋ฒˆํ˜ธ ๋ถ€์—ฌ ๋˜๋Š” WBS_MASTER ๊ณต์‹ ๋Œ€์ฒด)์€ ์•„์ง ๋ฏธ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค. +2. **DbUp ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ…Œ์ŠคํŠธ DB ๊ถŒํ•œ ๋ฌธ์ œ:** `kartsell` DB ์‚ฌ์šฉ์ž๊ฐ€ `kartsell_migration_test` ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์†Œ์œ ์ž๊ฐ€ ์•„๋‹ˆ์–ด์„œ `DbUpMigrationTests`(12๊ฑด)๊ฐ€ ๋กœ์ปฌ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ DBA ์กฐ์น˜(์†Œ์œ ๊ถŒ ๋ถ€์—ฌ)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. +3. **frontend ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ ์žฌํ•ด์‹œ:** `dotnet build`๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค `pnpm build`๊ฐ€ ์žฌ์‹คํ–‰๋˜์–ด `wwwroot/assets/*` ํ•ด์‹œ ํŒŒ์ผ๋ช…์ด ๋ฐ”๋€Œ๊ณ  git์— ๋ถˆํ•„์š”ํ•œ ๋ณ€๊ฒฝ์ด ์Œ“์ด๋Š” ๊ตฌ์กฐ์  ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (์•„์ง ๋ฏธํ•ด๊ฒฐ). --- -### โณ ์ง„ํ–‰ ์ค‘ (1๊ฐœ) +## โœ… ์™„๋ฃŒ (Backend ๊ตฌํ˜„ + ํ…Œ์ŠคํŠธ, 2026-08-07 ๊ธฐ์ค€ ๊ฒ€์ฆ๋จ) -#### Gate 3: 252+ Trading-Day Shadow Run (๋ฆฌํ—ˆ์„ค) -- **์ƒํƒœ:** ๐Ÿ”ด ๊ฒ€์ฆ ์‹คํŒจ (์žฌ์‹œ๋„ ํ•„์š”) - - Run ID: `d14f34ea-2afe-4caf-bbb1-c9a7d74fb582` (์ƒ์„ฑ๋จ, ๋ฏธ์™„๋ฃŒ) - - Hangfire Job 269: ์ƒํƒœ ๋ฏธํ™•์ธ (Host ์žฌ์‹œ์ž‘ ์‹คํŒจ) - - ๊ทผ๋ณธ ์›์ธ: Hangfire ๋ถ„์‚ฐ ๋ฝ ํƒ€์ž„์•„์›ƒ + ๊ฐ€์งœ KRX API ํ‚ค -- **์™„๋ฃŒ๋œ ๊ฒƒ:** - - โœ… DB ๊ฒฉ๋ฆฌ: ํ…Œ์ŠคํŠธ appsettings.Development.json โ†’ `kartselldb_test` - - โœ… Host ์žฌ์‹œ์ž‘: Development ํ™˜๊ฒฝ (DevelopmentHeaderAuthenticationHandler ํ™œ์„ฑํ™”) - - โœ… Hangfire ํƒ€์ž„์•„์›ƒ ๋ณต์›๋ ฅ: Program.cs ์žฌ์‹œ๋„ ๋กœ์ง ์ถ”๊ฐ€ (DEBT-015) - - โœ… ์‹คKRX ๋ฐ์ดํ„ฐ ์„œ๋น„์Šค: KrxDataService ์‹ค์—ฐ๋™ (Program.cs ๋“ฑ๋ก) - - โœ… ๊ธฐ์ˆ ๋ถ€์ฑ„ ๋“ฑ๋ก: DEBT-009~015 (PBO/DSR/์˜ˆ์ธก/false-exit/ํƒ€์ž„์•„์›ƒ/๊ฐ์‹œ) -- **ํ˜„์žฌ ์ œ์•ฝ ์‚ฌํ•ญ (๋ฌธ์„œํ™”๋จ):** - - PBO/Sharpe ๊ณ„์‚ฐ: ๊ฐ„๋‹จํ•œ percentile ๊ณต์‹ (์ •ํ™•ํ•œ CSCV ๋ฐฉ๋ฒ•๋ก  ํ•„์š” โ€” DEBT-009) - - ๋ชจ๋ธ ์˜ˆ์ธก: ๊ณ ์ • ์ˆ˜๋Ÿ‰ (์‹ค์ œ ํฌ์ง€์…˜ ์‚ฌ์ด์ง• ํ•„์š” โ€” DEBT-010) - - ๋น„์šฉ 2๋ฐฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜: ์„ ํ˜• ๊ณต์‹ (์ •ํ™•ํ•œ ์žฌ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•„์š” โ€” DEBT-011) - - False-exit ๋ถ„์„: ๋ฏธ๊ตฌํ˜„ (ํ•ญ์ƒ 0 ๋ฐ˜ํ™˜ โ€” DEBT-012) -- **ํ•„์š” ์กฐ๊ฑด:** - ```bash - # Terminal 1: SSH ํ„ฐ๋„ (์ง€์†) - ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7 - - # Terminal 2: Host ์‹คํ–‰ (Development ํ™˜๊ฒฝ) - cd D:\JobRoomz\KArtSell.Aegis - $env:ASPNETCORE_ENVIRONMENT = "Development" - dotnet run --project src/KArtSell.Host -c Debug - ``` -- **์‹คํ–‰ ๋‹จ๊ณ„:** - 1. โœ… POST /api/shadow-runs (modelId, windowStart, windowEnd) - 2. โœ… 202 Accepted ๋ฐ˜ํ™˜ (Job 269 enqueue) - 3. โณ Hangfire Worker ์ฒ˜๋ฆฌ ์ค‘ (Phase 1-5 ์‹คํ–‰) - 4. โณ Phase 5 ์™„๋ฃŒ โ†’ model_operations.shadow_run ์ €์žฅ - 5. โณ GET /api/shadow-runs/{runId} โ†’ 200 OK (status: Completed) - 6. ๋ชฉ์ : ๋ฐ์ดํ„ฐ ๊ณ„์ธต ๊ฒ€์ฆ + ์‹คKRX ํ†ตํ•ฉ ํ™•์ธ -- **๊ธฐ๋Œ€ ๊ฒฐ๊ณผ (๋ฆฌํ—ˆ์„ค์šฉ):** - - ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๋™์ž‘ ํ™•์ธ - - ์‹คKRX ๊ฐ€๊ฒฉ ๋ฐ์ดํ„ฐ ์ •์ƒ ๋‹ค์šด๋กœ๋“œ - - model_operations.shadow_run ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ์„ฑ๊ณต - - ๋‹จ์ˆœํ™”๋œ ๋ถ„์„ ๋ฉ”ํŠธ๋ฆญ ์ƒ์„ฑ (ํ”„๋กœ๋•์…˜ ๊ฒ€์ฆ ์•„๋‹˜) -- **์ˆœ์„œ:** ๋‹ค์Œ ์„ธ์…˜์—์„œ ์‹คํ–‰ +### VS-03: ๋ชจ๋ธ ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ (Maker-Checker Governance) +- **์œ„์น˜:** `src/KArtSell.Modules.ModelOperations/ApprovalWorkflow/` +- **ํ…Œ์ŠคํŠธ:** 20/20 PASS (๊ฒฉ๋ฆฌ ์‹คํ–‰ ๊ธฐ์ค€) +- **๋ฏธ์™„๋ฃŒ:** ํ”„๋ŸฐํŠธ์—”๋“œ UI ์—†์Œ +- **์ด๋ฒˆ ์„ธ์…˜์—์„œ ๋ฐœ๊ฒฌ/์ˆ˜์ •ํ•œ ๊ฒฐํ•จ:** `ApprovalSql`์ด Dapper๋กœ `DateOnly` ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ๋ชปํ•ด ์Šน์ธ ์ œ์•ˆ์„œ ์ƒ์„ฑ์ด ์‹ค DB ํ™˜๊ฒฝ์—์„œ 100% ์‹คํŒจํ•˜๋˜ ๋ฒ„๊ทธ โ€” ๋ณ‘ํ•ฉ ์ดํ›„ ์‹ค DB๋กœ ํ•œ ๋ฒˆ๋„ ๊ฒ€์ฆ๋˜์ง€ ์•Š์•„ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š๊ณ  ์žˆ์—ˆ์Œ + +### VS-04: ๋ถˆ๋ณ€ ๊ฐ์‚ฌ ์ถ”์  (Audit Trail / GDPR) +- **์œ„์น˜:** `src/KArtSell.Modules.ModelOperations/Compliance/` +- **ํ…Œ์ŠคํŠธ:** 5/5 PASS (๊ฒฉ๋ฆฌ ์‹คํ–‰ ๊ธฐ์ค€) +- **๋ฏธ์™„๋ฃŒ:** ํ”„๋ŸฐํŠธ์—”๋“œ UI ์—†์Œ +- **์ด๋ฒˆ ์„ธ์…˜์—์„œ ๋ฐœ๊ฒฌ/์ˆ˜์ •ํ•œ ๊ฒฐํ•จ:** `ip_address`/`kis_response`๋ฅ˜ ์ปฌ๋Ÿผ์˜ Dapper ํƒ€์ž… ์บ์ŠคํŒ… ์‹คํŒจ, `GdprRetention.RetentionEndsAt`์ด `DATE` ์ปฌ๋Ÿผ์ธ๋ฐ `DateTime`์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋˜ ๋ฌธ์ œ, ๊ทธ๋ฆฌ๊ณ  `KArtSell.BuildingBlocks`์˜ `[ModuleInitializer]`๊ฐ€ ์šฐ์—ฐํžˆ ๋กœ๋“œ๋˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  snake_case ์ปฌ๋Ÿผ์ด null๋กœ ๋งคํ•‘๋˜๋˜ ๋ ˆ์ด์Šค ์ปจ๋””์…˜ + +### VS-10: ๋งค๋„ ๊ฒฐ์ • ์—”์ง„ (Sell Decision Engine) +- **์œ„์น˜:** `src/KArtSell.Modules.ModelOperations/SellDecision/`, `frontend/src/features/sell-decision/` +- **ํ…Œ์ŠคํŠธ:** 32/32 PASS (๊ฒฉ๋ฆฌ ์‹คํ–‰ ๊ธฐ์ค€) +- **์™„๋ฃŒ๋„:** Backend + Frontend ๋ชจ๋‘ ์กด์žฌ (VS-03/04/12/14 ์ค‘ ์œ ์ผ) +- **โš ๏ธ ๋ฏธ๊ฒ€์ฆ ์‚ฌํ•ญ:** ์ฝ”๋“œ/ํ…Œ์ŠคํŠธ ์™„๋ฃŒ โ‰  PBO/DSR ํ”„๋กœ๋•์…˜ ๊ฒ€์ฆ ์™„๋ฃŒ. ์‹ค ์‹œ์žฅ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ์€ Phase 1 Shadow Run ์™„๋ฃŒ ํ›„์—๋งŒ ๊ฐ€๋Šฅ + +### VS-12: ๊ฑฐ๋ž˜ ์‹คํ–‰ ์‹œ์Šคํ…œ (Trade Execution, KIS ์—ฐ๋™) +- **์œ„์น˜:** `src/KArtSell.Modules.ModelOperations/TradeExecution/` +- **ํ…Œ์ŠคํŠธ:** 13/13 PASS (๊ฒฉ๋ฆฌ ์‹คํ–‰ ๊ธฐ์ค€) +- **๋ฏธ์™„๋ฃŒ:** ํ”„๋ŸฐํŠธ์—”๋“œ UI ์—†์Œ +- **์ด๋ฒˆ ์„ธ์…˜์—์„œ ๋ฐœ๊ฒฌ/์ˆ˜์ •ํ•œ ๊ฒฐํ•จ (์‹ฌ๊ฐ):** `UpdateTradeStatusAsync`๊ฐ€ `status`/`kis_response`/`error_message`๋งŒ ์ €์žฅํ•˜๊ณ  `kis_order_id`, `executed_quantity`, `unit_price`, `commission`, `net_proceeds`, ์ฒด๊ฒฐ/์ •์‚ฐ ํƒ€์ž„์Šคํƒฌํ”„๋Š” ๋ณ‘ํ•ฉ ์ดํ›„ ๋งค๋ฒˆ ์กฐ์šฉํžˆ ์œ ์‹ค์‹œํ‚ค๋˜ ๋ฒ„๊ทธ. ๊ฑฐ๋ž˜ ์ฒด๊ฒฐยท์ •์‚ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ๋Š” ์ €์žฅ๋˜๊ณ  ์žˆ์ง€ ์•Š์•˜์Œ + +### VS-14: ํฌํŠธํด๋ฆฌ์˜ค ๋Œ€์‚ฌ (Portfolio Reconciliation) +- **์œ„์น˜:** `src/KArtSell.Modules.ModelOperations/PortfolioReconciliation/` +- **ํ…Œ์ŠคํŠธ:** 18/18 PASS (๊ฒฉ๋ฆฌ ์‹คํ–‰ ๊ธฐ์ค€) +- **๋ฏธ์™„๋ฃŒ:** ํ”„๋ŸฐํŠธ์—”๋“œ UI ์—†์Œ +- **์ฐธ๊ณ :** ์ด ์Šฌ๋ผ์ด์Šค๊ฐ€ ํฌํ•จ๋œ PR(#28)์ด ๋ณ‘ํ•ฉ ๋‹น์ผ `model_operations.models` ํ…Œ์ด๋ธ” ๋ˆ„๋ฝ์œผ๋กœ ์‹ ๊ทœ DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ „๋ถ€ ๊นจ๋œจ๋ฆฌ๋Š” ์ฑ„๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ๊ณ , ๊ฐ™์€ ๋‚  ๋ณ„๋„ PR(#29)๋กœ ๊ธด๊ธ‰ ์ˆ˜์ •๋จ โ€” ๋ณ‘ํ•ฉ ์ „ fresh-install ๋ฆฌํ—ˆ์„ค์ด ์‹ค์ œ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Œ์„ ์‹œ์‚ฌ + +### AEG-X-009: ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค ํ†ตํ•ฉ (KRX/OpenDart/KIS) +- **์œ„์น˜:** `src/KArtSell.Modules.ModelOperations/Infrastructure/`, market_data ์Šคํ‚ค๋งˆ +- **์™„๋ฃŒ:** ์†Œ์Šค ์นดํƒˆ๋กœ๊ทธ/๊ฑฐ๋ฒ„๋„Œ์Šค ์ •์ฑ…(Workstream D/E/F) + ์‹ค API ์—ฐ๋™(Workstream G: KRX OpenAPI/OpenDart/KIS ์„œ๋น„์Šค, ์ผ์ผ ์Šค์ผ€์ค„๋ง, ์—๋Ÿฌ ๋ถ„๋ฅ˜, LKG ํด๋ฐฑ) + +### ๊ทธ ์™ธ ์™„๋ฃŒ ํ•ญ๋ชฉ (VS-00 ํ”Œ๋žซํผ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ, VS-01/VS-02 ์Šฌ๋ผ์ด์Šค ์ŠคํŽ™, ๋ณด์•ˆ/Outbox/OpenAPI ๊ฒŒ์ดํŠธ ๋“ฑ) +์ƒ์„ธ๋Š” `docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv`์˜ AEG-X-001~008, AEG-VS-00-01~07, AEG-VS-01-01, AEG-VS-02-01 ํ–‰ ์ฐธ์กฐ. --- -## โœ… ์™„๋ฃŒ๋จ (Implemented & Tested) +## ๐Ÿ”ด ์‹ค์ œ๋กœ ๋ธ”๋กœํ‚น ์ค‘์ธ ๊ฒƒ (Phase 1 Shadow Run) -### Phase 2: ์ค‘๊ธฐ ์ตœ์ ํ™” +### PHASE-1-SHADOW-RUN: 252+ ๊ฑฐ๋ž˜์ผ ๊ฒ€์ฆ (Gate 5a) +- **์ƒํƒœ:** `BLOCKED` โ€” **์‹คํ–‰ ์ค‘์ด ์•„๋‹˜** +- **๊ทผ๊ฑฐ:** `docs/CURRENT/PHASE-1_SHADOW_RUN_STATUS_CORRECTION.md`์— ์ด๋ฏธ ์ •์ •๋˜์–ด ์žˆ์Œ โ€” ๊ณผ๊ฑฐ ์„ธ์…˜๋“ค์˜ "Job 893/976 RUNNING, ~20+์‹œ๊ฐ„ ๊ฒฝ๊ณผ" ๋“ฑ์˜ ๊ธฐ๋ก์€ ์‹ค์ œ๋กœ๋Š” `POST /api/shadow-runs`๊ฐ€ `PostgresException 23514`(check_status ์ œ์•ฝ์กฐ๊ฑด ์œ„๋ฐ˜)๋กœ 500 ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์‹คํŒจํ•œ ๊ฒƒ์ด์—ˆ๊ณ , Job์ด ์‹ค์ œ๋กœ ์‹œ์ž‘๋œ ์ ์ด ์—†์Œ +- **์ฐจ๋‹จ ์‚ฌ์œ :** ์„œ๋ฒ„ ์ธก `dataset_manifest`, `model_version_registry`, `evidence_snapshot`, `release_evidence_bundle`์— ์Šน์ธ/๋™๊ฒฐ๋œ ํ–‰์ด ์—†์–ด RunId/JobId๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ. ์Šน์ธ๋œ VersionSet ๋Œ€๊ธฐ ์ค‘ +- **์žฌ๊ฐœ ์ ˆ์ฐจ:** `PHASE-1_SHADOW_RUN_STATUS_CORRECTION.md`์˜ 5๋‹จ๊ณ„ ์ฐธ์กฐ (โ‘  check_status ์ œ์•ฝ์กฐ๊ฑด ์ •ํ•ฉ โ‘ก ์Šน์ธ๋œ ํ…Œ์ŠคํŠธ DB์—์„œ fresh/upgrade/์žฌ์‹คํ–‰/์‹คํŒจ๋ณต๊ตฌ ๋ฆฌํ—ˆ์„ค โ‘ข ์ฆ๊ฑฐ ๋ณด์กด โ‘ฃ ๋ช…์‹œ์  ์Šน์ธ ํš๋“ โ‘ค ์‹ ๊ทœ Run ID/Job ID๋กœ ์žฌํ์ž‰) +- **์ด ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ ค๋ฉด:** ์‹ค์ œ RunId/JobId๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ, ๋ฌธ์„œ์— "RUNNING"์ด๋ผ๊ณ  ๋‹ค์‹œ ์ ์œผ๋ ค๋ฉด ๊ทธ ๊ทผ๊ฑฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•ด์•ผ ํ•จ (๊ณผ๊ฑฐ์˜ ํ—ˆ์œ„ ๊ธฐ๋ก์„ ๋ฐ˜๋ณตํ•˜์ง€ ๋ง ๊ฒƒ) -#### 5. โœ… OpenDart ์ผ์ผ ๋ฐฐ์น˜ -- **ํŒŒ์ผ:** src/KArtSell.Host/Observability/OpenDartService.cs (186 lines) -- **Job:** OpenDartDailyBatchJob.cs (169 lines) -- **๋‚ด์šฉ:** - - 1,000 req/day ํ• ๋‹น๋Ÿ‰ ๊ด€๋ฆฌ - - 3๊ฐœ์›” ์บ์‹ฑ (๋ถ„๊ธฐ๋ณ„ ์žฌ๋ฌด์ œํ‘œ) - - ์ผ 1ํšŒ ๋ฐฐ์น˜ ํ˜ธ์ถœ๋งŒ ํ—ˆ์šฉ -- **ํ…Œ์ŠคํŠธ:** 5๊ฐœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (OpenDartServiceTests) -- **์ƒํƒœ:** โœ… COMPLETE - -#### 6. โœ… Gate 4: ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ -- **ํŒŒ์ผ:** GetApprovalQueue/Endpoint.cs, ApproveModel/Handler.cs, RejectModel/Handler.cs -- **๋‚ด์šฉ:** - 1. GET /api/approval-queue (๋Œ€๊ธฐ ์ค‘ ๋ชฉ๋ก) - 2. POST /api/approval/{id}/approve (2๋ช… ์Šน์ธ) - 3. approved_at / approved_by ํƒ€์ž„์Šคํƒฌํ”„ ์ถ”์  -- **ํ…Œ์ŠคํŠธ:** 32๊ฐœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ -- **์ƒํƒœ:** โœ… COMPLETE - -#### 7. โœ… KIS Connection Pool -- **ํŒŒ์ผ:** src/KArtSell.Host/Infrastructure/KisConnectionPool.cs (247 lines) -- **๋‚ด์šฉ:** - - 3-5 concurrent connection pool - - OAuth2 token refresh (55๋ถ„ ์ฃผ๊ธฐ) - - Priority queue (BUY > SELL > CANCEL) -- **ํ…Œ์ŠคํŠธ:** 2๊ฐœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (KisConnectionPoolTests) -- **์ƒํƒœ:** โœ… COMPLETE - ---- - -### โœ… Phase 3: ์žฅ๊ธฐ ๊ณ ๋„ํ™” - -#### 8. โœ… Central Rate Limiter (๋ชจ๋“  API) -- **ํŒŒ์ผ:** src/KArtSell.Host/Infrastructure/RateLimiterService.cs (211 lines) -- **๋‚ด์šฉ:** - - Token bucket pattern (๋ชจ๋“  API ํ†ตํ•ฉ) - - Per-API quota ์ถ”์  - - Fairness ๋ณด์žฅ -- **ํ…Œ์ŠคํŠธ:** 4๊ฐœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (RateLimiterServiceTests) -- **์ƒํƒœ:** โœ… COMPLETE - -#### 9. โœ… Circuit Breaker Pattern -- **ํŒŒ์ผ:** src/KArtSell.Host/Infrastructure/CircuitBreakerPolicy.cs (180 lines) -- **๋‚ด์šฉ:** - - Polly policy ๊ธฐ๋ฐ˜ ๊ตฌํ˜„ - - 429 ์—๋Ÿฌ 3ํšŒ โ†’ 5๋ถ„ ์ฐจ๋‹จ - - ์ž๋™ ๋ณต๊ตฌ (์‹œ๊ฐ„ ํ›„) -- **ํ…Œ์ŠคํŠธ:** 7๊ฐœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (CircuitBreakerTests) -- **์ƒํƒœ:** โœ… COMPLETE - -#### 10. โœ… Gate 5: Observability Dashboard -- **ํŒŒ์ผ:** src/KArtSell.Host/Features/Observability/GetMetricsEndpoint.cs -- **๋‚ด์šฉ:** - - Batch SLA: ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„ - - Data quality: ๊ฒฉ๋ฆฌ๋œ ํ•ญ๋ชฉ ์ˆ˜ - - Duplicate detection: ์ค‘๋ณต ๊ฒฝ๊ณ  (DEBT-014) - - Reconciliation: ์ƒํƒœ ๋ถˆ์ผ์น˜ (DEBT-014) - - Model drift: OOS ์„ฑ๋Šฅ ์ถ”์  -- **ํ…Œ์ŠคํŠธ:** 6๊ฐœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (ObservabilityMetricsTests) -- **์ƒํƒœ:** โœ… COMPLETE - ---- - -## ๐ŸŽฏ Production Readiness Gates - -| Gate | ํ•ญ๋ชฉ | ์ƒํƒœ | ๊ธฐํ•œ | -|------|------|------|------| -| **1** | DbUp ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (0000-0031) | โœ… PASS | - | -| **2** | Outbox/Inbox Crash-recovery | โœ… PASS | - | -| **3** | 252-day Shadow Run (์‹คKRX) | โณ REHEARSAL IN PROGRESS | ์˜ค๋Š˜ | -| **4** | ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ | โœ… IMPL (๋Œ€๊ธฐ) | ์ด๋ฒˆ ์ฃผ | -| **5** | ๊ด€์ฐฐ์„ฑ ๋Œ€์‹œ๋ณด๋“œ (๋ฉ”ํŠธ๋ฆญ) | โœ… IMPL (๋Œ€๊ธฐ) | ๋‹ค์Œ ์ฃผ | - -**Go-Live ๊ธฐ์ค€:** ๋ชจ๋“  Gate PASS + ์ฆ๊ฑฐ ์ˆ˜์ง‘ ์™„๋ฃŒ (โ‰ค 2์ฃผ) - ---- - -## ๐Ÿ“Š ์ง„ํ–‰๋ฅ  - -``` -Infrastructure: โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘ 85% (Phase 1 ์™„๋ฃŒ, Phase 2-3 ์ง„ํ–‰ ์ค‘) -Testing: โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘ 100% (135/135 tests PASS - 5 arch + 95 integration + 35 unit) -Documentation: โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 60% (๋กœ๋“œ๋งต, ๊ณ„์•ฝ, ADR, Gate 3 ๊ฐ€์ด๋“œ) -Validation Gates: โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 50% (Gate 1-2 PASS, Gate 3 IN PROGRESS, Gate 4-5 ์ค€๋น„) -``` - ---- - -## ๐Ÿ”„ ๋‹ค์Œ Iteration - -### ์ด๋ฒˆ ๋ฃจํ”„ (ํ˜„์žฌ, ~60์ดˆ) -- [ ] Host ์ค€๋น„ ํ™•์ธ -- [ ] Agent 1 (Gate 3) ์‹œ์ž‘ ๋˜๋Š” ๊ณ„์† ๋Œ€๊ธฐ -- [ ] Loop 30์ดˆ๋งˆ๋‹ค ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง - -### Host ์ค€๋น„ ํ›„ (์˜ค๋Š˜, ~30๋ถ„) -- [ ] Gate 3 Shadow Run ์‹คํ–‰ -- [ ] 252์ผ ๊ฒ€์ฆ + ๋ฉ”ํŠธ๋ฆญ ๊ณ„์‚ฐ -- [ ] GATE_3_EVIDENCE.md ์ƒ์„ฑ -- [ ] PASS/FAIL ํŒ์ • - -### ๋‹ค์Œ ์ฃผ -- [ ] Gate 4: ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ -- [ ] Phase 2: OpenDart + KIS ์ตœ์ ํ™” -- [ ] ์ฆ๊ฑฐ ์ˆ˜์ง‘ ์™„๋ฃŒ - -### 2์ฃผ ํ›„ -- [ ] Gate 5: ๊ด€์ฐฐ์„ฑ ๋Œ€์‹œ๋ณด๋“œ ํ™œ์„ฑํ™” -- [ ] Production readiness ์ตœ์ข… ํ™•์ธ -- [ ] Go-Live ์ค€๋น„ - ---- - -## ๐Ÿ“ Codex ์—ฐ๊ณ„ ๋ฐฉ๋ฒ• - -### ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ๊ณ„์†ํ•˜๊ธฐ - -1. **ํ˜„์žฌ ์ปค๋ฐ‹ ํ™•์ธ** - ```bash - git log --oneline -10 - # ์ตœ์‹ : eb106d5 (Phase 1 API optimization) - # ์ด์ „: 9a2d939 (idempotency fix) - # ์ด์ „: 4519fa8 (recommendation reports) - ``` - -2. **๋นŒ๋“œ & ํ…Œ์ŠคํŠธ** - ```bash - dotnet build KArtSell.sln -c Release - dotnet test KArtSell.sln -c Release - ``` - -3. **Host ์‹œ์ž‘ (Gate 3 ์ง„ํ–‰)** - ```bash - ssh -L 5432:127.0.0.1:5432 kjh2064@178.104.200.7 # Terminal 1 - dotnet run --project src/KArtSell.Host -c Release # Terminal 2 - ``` - -4. **Shadow Run ์š”์ฒญ** - ```bash - curl -X POST http://127.0.0.1:5002/api/shadow-runs \ - -H "X-KArtSell-User: gate3-rehearsal" \ - -H "X-KArtSell-Role: Researcher" \ - -H "Content-Type: application/json" \ - -d '{ - "modelId": "00000000-0000-0000-0000-000000000001", - "windowStart": "2024-01-02", - "windowEnd": "2024-10-01" - }' - - # ํด๋ง (Analyst ์—ญํ•  ํ•„์š”) - curl http://127.0.0.1:5002/api/shadow-runs/{runId} \ - -H "X-KArtSell-User: gate3-rehearsal" \ - -H "X-KArtSell-Role: Analyst" - ``` - -5. **๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ ํ”„** - - Phase 2 ๊ตฌํ˜„ ์‹œ์ž‘ (OpenDart, KIS) - - ๋กœ๋“œ๋งต ์—…๋ฐ์ดํŠธ +์ด ๊ฒŒ์ดํŠธ๋Š” **๋‹ฌ๋ ฅ ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ ์ž‘์—…**์ž…๋‹ˆ๋‹ค (252+ ๊ฑฐ๋ž˜์ผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ์ปดํ“จํŒ…์œผ๋กœ ์•ž๋‹น๊ธธ ์ˆ˜ ์—†์Œ). "์ตœ์  ์ „๋žต์ ์œผ๋กœ ๋นจ๋ฆฌ ๋๋‚ด๊ธฐ"์˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์—†๊ณ , ๋‚จ์€ ์œ ์ผํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅ ์กฐ์น˜๋Š” ์œ„ ์žฌ๊ฐœ ์ ˆ์ฐจ๋ฅผ ๋ฐŸ์•„ ์‹ค์ œ๋กœ ํ์ž‰ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. --- ## ๐Ÿ“š ๊ด€๋ จ ๋ฌธ์„œ +- **WBS ํŠธ๋ž˜์ปค (ํ•ญ๋ชฉ๋ณ„ ์ƒ์„ธ ์ƒํƒœ):** `docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv` +- **WBS ์› ๊ณ„ํš (๋ฒˆํ˜ธ ์ถฉ๋Œ ์žˆ์Œ, ์ฃผ์˜):** `docs/CURRENT/CATALOGS/WBS_MASTER.csv` +- **Phase 1 ์ƒํƒœ ์ •์ • ๊ธฐ๋ก:** `docs/CURRENT/PHASE-1_SHADOW_RUN_STATUS_CORRECTION.md` - **Architecture:** `docs/03_ARCHITECTURE_BE_FE.md` -- **API Rate Limits:** `docs/API_RATE_LIMIT_STRATEGY.md` -- **Gates:** `PRODUCTION_READINESS.md` - **Code Guidelines:** `CLAUDE.md` - **Tech Debt:** `TECH_DEBT_REGISTER.md` --- -## ๐Ÿ”— Loop ์ƒํƒœ +## ๐Ÿ“ ์ด ๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ ๊ฐฑ์‹ ํ•  ๋•Œ -**ํ˜„์žฌ:** `/loop` 30์ดˆ๋งˆ๋‹ค ๋ชจ๋‹ˆํ„ฐ๋ง (Host ์ค€๋น„ ๋Œ€๊ธฐ) -**๋‹ค์Œ:** Host ์ค€๋น„ โ†’ Gate 3 ์ž๋™ ์‹œ์ž‘ -**์˜ˆ์ƒ:** ์˜ค๋Š˜ ์ด๋‚ด ๊ฒฐ๊ณผ - ---- - -**์ตœ์ข… ๋ชฉํ‘œ:** Production readiness (๋ชจ๋“  Gate PASS) โœ… -**๊ธฐํ•œ:** 2์ฃผ ์ด๋‚ด (2026-08-16) -**Status:** ON TRACK ๐Ÿš€ +1. **git log๋ฅผ ๋จผ์ € ํ™•์ธํ•˜์„ธ์š”.** ์ด ๋ฌธ์„œ์™€ `main`์ด ์–ผ๋งˆ๋‚˜ ๋ฒŒ์–ด์กŒ๋Š”์ง€ (`git log --oneline <์ด-๋ฌธ์„œ-๋งˆ์ง€๋ง‰-์ปค๋ฐ‹>..main`) ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์„œ๋งŒ ์ฝ๊ณ  "ํ˜„์žฌ ์ƒํƒœ"๋ฅผ ํŒ๋‹จํ•˜์ง€ ๋งˆ์„ธ์š”. +2. **ํ…Œ์ŠคํŠธ๋Š” ๊ฒฉ๋ฆฌ ์‹คํ–‰์œผ๋กœ ํ™•์ธํ•˜์„ธ์š”.** ์ „์ฒด ์Šค์œ„ํŠธ ์‹คํ–‰์—์„œ ํ†ต๊ณผํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ์ด ์•ˆ์ •์ ์œผ๋กœ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค (์ด๋ฒˆ ์„ธ์…˜์—์„œ `AuditSql`์ด ์ •ํ™•ํžˆ ์ด ์ด์œ ๋กœ ๋†“์น  ๋ป”ํ–ˆ์Šต๋‹ˆ๋‹ค โ€” `--filter`๋กœ ๋‹จ์ผ ํด๋ž˜์Šค๋งŒ ๋Œ๋ ค์„œ ์žฌํ™•์ธํ•˜์„ธ์š”). +3. **"์™„๋ฃŒ"๋ผ๊ณ  ์“ฐ๊ธฐ ์ „์— ์‹ค์ œ ํŒŒ์ผ ๊ฒฝ๋กœ์™€ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ‘ ํ™•์ธํ•˜์„ธ์š”.** ์ด ์ €์žฅ์†Œ์—๋Š” ๊ฒ€์ฆ ์—†์ด "COMPLETE"/"100%"๋ผ๊ณ  ์„ ์–ธํ•œ ๋ฌธ์„œ๊ฐ€ ๋งค์šฐ ๋งŽ์Šต๋‹ˆ๋‹ค (`EXECUTION_COMPLETE_FINAL.md`, `WORK_COMPLETION_CERTIFICATE.md` ๋“ฑ). ๊ทธ ํŒจํ„ด์„ ๋ฐ˜๋ณตํ•˜์ง€ ๋งˆ์„ธ์š”. +4. **Phase 1 Shadow Run์€ ๋‹ฌ๋ ฅ ์‹œ๊ฐ„ ๊ฒŒ์ดํŠธ์ž…๋‹ˆ๋‹ค.** ์‹ค์ œ๋กœ ํ์ž‰๋˜์–ด ์ง„ํ–‰ ์ค‘์ด๋ผ๋Š” ๊ตฌ์ฒด์  ์ฆ๊ฑฐ(RunId/JobId) ์—†์ด "์ง„ํ–‰ ์ค‘"์ด๋ผ๊ณ  ์“ฐ์ง€ ๋งˆ์„ธ์š”. diff --git a/docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv b/docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv index 6e559b81..b6c3b663 100644 --- a/docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv +++ b/docs/CURRENT/CATALOGS/WBS_PROGRESS_TRACKER.csv @@ -2,7 +2,7 @@ WBS_ID,Sprint,Slice_ID,Task,Status,Completion_Date,Evidence_Link,Owner,Notes AEG-X-001,S0,Cross,Version Coverage Matrix ๊ณ ๋„ํ™”,COMPLETED,2026-08-04,docs/contracts/platform/VERSION_COVERAGE_MATRIX.md,PM/Architect,"โœ… Version matrix: v10/v12/v12.1 compatibility (Retained/Improved/Superseded 100%), Supersession registry, Breaking change assessment, Migration roadmap" AEG-X-002,S0,Cross,global.json ๊ณ ๋„ํ™”,COMPLETED,2026-08-04,.gitea/workflows/ci.yml (dotnet/pnpm restore/build/test),DevOps,"โœ… CI pipeline validates: dotnet restore/build/test (Release config), pnpm frozen install/build/e2e, PostgreSQL 17 health checks, Log output to .gitea/workflows/ci.yml" AEG-X-003,S0,Cross,Architecture tests ๊ณ ๋„ํ™”,COMPLETED,2026-08-04,tests/KArtSell.ArchitectureTests/RepositoryRulesTests.cs (6 tests PASSING),Architect/QA,"โœ… Architecture rules enforced: (1) No prohibited patterns, (2) Domain isolation from infrastructure, (3) SQL validation (no SELECT *, schema-qualified), (4) Endpoint authorization (Roles/Policies), (5) No placeholder files, (6) No duplicate aggregate IDs. All 6 tests PASS." -AEG-X-004,S0,Cross,DbUp ๋ณต๊ตฌ rehearsal ๊ณ ๋„ํ™”,COMPLETED,2026-08-06,"docs/CURRENT/AEG-X-004_DBUP_EVIDENCE.md; docs/CURRENT/AEG-X-004_STATUS_CONTRACT_SLICE.md; db/migrations/0032_shadow_run_queued_status_contract.sql; tests/KArtSell.Integration.Tests/DbUpMigrationTests.cs; tests/KArtSell.Integration.Tests/DbUpRecoveryTests.cs; evidence/AEG-X-004/0032-isolated-migration.trx",DBA/BE,"โœ… Queued status contract applied as append-only 0032; isolated kartsell_migration_test rehearsal targeted 1/1 and recovery 6/6 passed. kartselldb_test was not reset. Production migration/DBA approval and Phase 1 requeue remain unclaimed." +AEG-X-004,S0,Cross,DbUp ๋ณต๊ตฌ rehearsal ๊ณ ๋„ํ™”,COMPLETED,2026-08-06,"docs/CURRENT/AEG-X-004_DBUP_EVIDENCE.md; docs/CURRENT/AEG-X-004_STATUS_CONTRACT_SLICE.md; db/migrations/0032_shadow_run_queued_status_contract.sql; tests/KArtSell.Integration.Tests/DbUpMigrationTests.cs; tests/KArtSell.Integration.Tests/DbUpRecoveryTests.cs; evidence/AEG-X-004/0032-isolated-migration.trx",DBA/BE,"โœ… Queued status contract applied as append-only 0032; isolated kartsell_migration_test rehearsal targeted 1/1 and recovery 6/6 passed. kartselldb_test was not reset. Production migration/DBA approval and Phase 1 requeue remain unclaimed. โš ๏ธ 2026-08-07 regression: 12 DbUpMigrationTests (Migration0008/0009/0010/0032) now fail locally with Postgres 42501 'must be owner of database kartsell_migration_test' โ€” the kartsell DB user no longer owns/can DROP+CREATE that database on this environment. Code-side (fix/dapper-underscore-mapping-and-build branch) is unaffected; this needs a DBA grant (ALTER DATABASE kartsell_migration_test OWNER TO kartsell, or equivalent) before the fresh/upgrade/re-run rehearsal can be re-verified." AEG-X-005,S0,Cross,Security auth ๊ณ ๋„ํ™”,COMPLETED,2026-08-04,"docs/decisions/ADR-SEC-001.md + tests/KArtSell.Integration.Tests/SecurityAuthenticationTests.cs (6 tests)",Security/BE,"โœ… ADR-SEC-001 produced (OIDC/JWT/DevelopmentHeader tiers), SecurityAuthenticationTests.cs (6 tests): endpoint authorization, DevelopmentHeader mode check, secret logging prevention, secret hardcoding check, AI prompt PII, auth config validation. Acceptance_Evidence verified: '๋น„๊ฐœ๋ฐœ ๋ฌด์ธ์ฆ ์ ‘๊ทผ 0, secret/log/prompt ๋…ธ์ถœ 0'" AEG-X-006,S0,Cross,Outbox publisher ๊ณ ๋„ํ™”,COMPLETED,2026-08-04,"docs/CURRENT/ARTIFACTS/AEG-X-006_ACCEPTANCE_EVIDENCE.md + src/KArtSell.BuildingBlocks/Reliability/DapperOutboxWriter.cs + OutboxPollerJob.cs",BE/SRE,"โœ… Outboxโ†’Inbox async pipeline verified: DapperOutboxWriter (transactional), OutboxPollerJob (idempotent), DapperInboxStore (deduplication), 5 consumer implementations. Acceptance_Evidence: All criteria met. 177/177 tests PASS." AEG-X-007,S0,Cross,Serilog/OTel correlation ๊ณ ๋„ํ™”,COMPLETED,2026-08-06,"tests/KArtSell.ArchitectureTests/PiiRedactionTests.cs (6 tests) + commit e7913db",SRE/Security,"โœ… PII redaction policy VERIFIED: SSN/Email/CreditCard/ApiKey redaction (6 tests). Commit e7913db adds pattern-based sanitization validation. All tests PASS (249/253)." @@ -14,14 +14,16 @@ AEG-VS-00-04,S0,VS-00,Vertical Slice API/Application/SQL ๊ตฌํ˜„,COMPLETED,2026-0 AEG-VS-00-05,S0,VS-00,Event/Job/Inboxยท์žฌ์ฒ˜๋ฆฌ ๊ตฌํ˜„,COMPLETED,2026-08-04,"docs/CURRENT/ARTIFACTS/AEG-VS-00-05_ACCEPTANCE_EVIDENCE.md + src/KArtSell.Host/Jobs/OutboxPollerJob.cs + DownstreamConsumerJob.cs",BE/SRE,"โœ… Async event pipeline complete: OutboxPollerJob (poll unprocessed), DownstreamConsumerJob (dispatch), 5 consumers (SignalR/Approval/Audit), Hangfire 8 workers, correlation tracking. Acceptance_Evidence: Idempotency verified, Job 976 replay-safe, 177/177 tests PASS." AEG-VS-00-06,S0,VS-00,Vue featureยทZodยทQueryยท์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„,COMPLETED,2026-08-04,"docs/CURRENT/ARTIFACTS/AEG-VS-00-06_ACCEPTANCE_EVIDENCE.md + frontend/src/features/shadow-run/",FE Lead,"โœ… Vue 3 feature module complete: ShadowRunPage + ShadowRunForm + Results + Chart, Pinia store, TanStack Query, Zod validation, vee-validate, 40/40 component tests PASS. Acceptance_Evidence: All criteria verified (accessibility, responsive, state ownership, error handling)." AEG-VS-00-07,S0,VS-00,ํšŒ๊ท€ยท๊ด€์ œยทRunbookยทRollback ์ฆ๊ฑฐ,COMPLETED,2026-08-04,docs/operational-runbook.md + PRODUCTION_READINESS.md + scripts/*.ps1 + commit ca2aeae,QA/SRE,"Golden/integration/failure/replay/E2E + metric/alert/Owner/Secondary/rollback rehearsal complete (Acceptance_Evidence: 'ํšŒ๊ท€ยท๊ด€์ œยทRunbookยทRollback ์ฆ๊ฑฐ') - 7 scenarios, 4 scripts, 18 queries verified" -AEG-X-009,S1,Cross,Source catalog ๊ณ ๋„ํ™”,COMPLETED,2026-08-07,"docs/CURRENT/CATALOGS/source-catalog.md; docs/CURRENT/AEG-X-009_AUTOMATION_PROPOSAL.md; contracts/data/source-approval.v1.proposed.json; docs/DECISIONS/ADR-DATA-001.md; db/migrations/0033_source_approval_contract.sql; db/migrations/0034_dataset_manifest_freeze_contract.sql; src/KArtSell.Modules.ModelOperations/Infrastructure/DapperApprovedModelContextReader.cs",Data Governance,"โœ… Workstream D/E/F COMPLETED: source-catalog.md v2.0 (KRX/OpenDart/KIS consolidated), VS-02_DATA_GOVERNANCE_POLICY.md, VS-03/04 SLICE_SPECs. All 4 unknowns resolved. Phase 2 implementation ready (Workstreams G/H/I)." +AEG-X-009,S1,Cross,Source catalog ๊ณ ๋„ํ™”,COMPLETED,2026-08-07,"docs/CURRENT/CATALOGS/source-catalog.md; docs/CURRENT/AEG-X-009_AUTOMATION_PROPOSAL.md; contracts/data/source-approval.v1.proposed.json; docs/DECISIONS/ADR-DATA-001.md; db/migrations/0033_source_approval_contract.sql; db/migrations/0034_dataset_manifest_freeze_contract.sql; db/migrations/0033_market_data_import_logs.sql; src/KArtSell.Modules.ModelOperations/Infrastructure/DapperApprovedModelContextReader.cs",Data Governance,"โœ… Workstream D/E/F COMPLETED: source-catalog.md v2.0 (KRX/OpenDart/KIS consolidated), VS-02_DATA_GOVERNANCE_POLICY.md, VS-03/04 SLICE_SPECs. All 4 unknowns resolved. โœ… Workstream G (commit 136665c, 2026-08-07) also now COMPLETE: live KRX OpenAPI / OpenDart / KIS service integrations (P1-P3), daily scheduling + error classification + SLA tracking + LKG fallback (P4-P6), market_data schema with append-only import logs, correlation_id-based idempotent replay. โš ๏ธ Note: 0033 is used by two different, unrelated migrations across branches (source_approval_contract.sql vs market_data_import_logs.sql) โ€” confirm actual applied migration number in the target DB's kartsell_schema_versions journal before assuming both landed as authored." AEG-VS-01-01,S1,VS-01,์ •์ฑ…ยท๋ฒ”์œ„ยท์‹คํŒจ์ƒํƒœ ๊ณ„์•ฝ ํ™•์ •,COMPLETED,2026-08-07,docs/CURRENT/SLICE_SPECS/VS-01-SLICE_SPEC.md,PM/Architect,"โœ… SLICE_SPEC produced: VS-01-SLICE_SPEC.md (identity/MFA/RBAC/maker-checker contract). Prerequisite AEG-X-001 + AEG-VS-00-02 already COMPLETED. Ready for security team review and schema implementation." AEG-VS-02-01,S1,VS-02,์ •์ฑ…ยท๋ฒ”์œ„ยท์‹คํŒจ์ƒํƒœ ๊ณ„์•ฝ ํ™•์ •,COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-02-SLICE_SPEC.md; docs/CURRENT/VS-02_DATA_GOVERNANCE_POLICY.md",PM/Architect,"โœ… COMPLETE: VS-02-SLICE_SPEC.md + governance policy. All 4 unknowns resolved (data source, import SLA, audit policy, schema versioning). Financial security master implementation ready for Phase 2." -AEG-VS-03-01,S2,VS-03,์ •์ฑ…ยท๋ฒ”์œ„ยท์‹คํŒจ์ƒํƒœ ๊ณ„์•ฝ ํ™•์ •,PLANNED,-,-,PM/Architect,"Blocked: Depends on AEG-VS-02-01. Future sprint." -AEG-VS-04-01,S2,VS-04,์ •์ฑ…ยท๋ฒ”์œ„ยท์‹คํŒจ์ƒํƒœ ๊ณ„์•ฝ ํ™•์ •,PLANNED,-,-,PM/Architect,"Blocked: Depends on AEG-VS-03-01. Future sprint." -AEG-VS-05-01,S3,VS-05,์ •์ฑ…ยท๋ฒ”์œ„ยท์‹คํŒจ์ƒํƒœ ๊ณ„์•ฝ ํ™•์ •,PLANNED,-,-,PM/Architect,"Blocked: Depends on Gate 1 (Phase 1). Waiting for Job 976 (~50-90 days)." -AEG-X-011,S4,Cross,Golden vector ๊ณ ๋„ํ™”,BLOCKED,TBD,"AGENTS.md: Algorithm changes require Golden data",Quant/QA,"Gate 2 prerequisite. Blocked by Phase 1 (Job 976) completion." -AEG-VS-09-01,S4,VS-09,BuildEvidenceSnapshot,BLOCKED,TBD,"CLAUDE.md: Evidence requires Phase 1 results",PM/Architect,"Gate 2 prerequisite. Blocked by Phase 1." -AEG-VS-10-01,S4,VS-10,GenerateSellDecision,BLOCKED,TBD,"CLAUDE.md: Model must pass PBO/DSR validation",PM/Architect,"Gate 3 prerequisite. Blocked by Phase 1." -AEG-VS-19-01,S5,VS-19,RunFrozenBacktest,BLOCKED,TBD,"CLAUDE.md: Requires evidence from Phase 1-4",PM/Architect,"Gate 3 prerequisite. Blocked by Phase 1." -PHASE-1-SHADOW-RUN,S0-S5,Cross,252+ Trading Day Shadow Run,BLOCKED,TBD,"docs/CURRENT/PHASE-1_SHADOW_RUN_STATUS_CORRECTION.md; docs/CURRENT/AEG-X-004_DBUP_EVIDENCE.md; docs/CURRENT/PHASE-1_REQUEUE_READINESS.md; docs/CURRENT/PHASE-1_EXECUTION_EVIDENCE_PLAN.md; docs/CURRENT/PHASE-1_PREFLIGHT_20260806.md; docs/CURRENT/PHASE-1_PRODUCTION_PREFLIGHT_20260806.md; evidence/AEG-X-004/production-readonly-preflight-20260806.md; db/migrations/0032_shadow_run_queued_status_contract.sql; logs/phase-1-execution.log; logs/host-startup-20260804-173000.log",๊น€์žฌํ˜„/BE/SRE,"Read-only preflight: active DbUp journal public.kartsell_schema_versions contains 0032 and check_status includes Queued. Capabilities remain order/KIS/client publication OFF. Server-side dataset_manifest, model_version_registry, evidence_snapshot, and release_evidence_bundle contain no approved/frozen rows; no RunId/JobId/enqueue created. Blocked pending approved server-side VersionSet." +AEG-VS-03-01,S2,VS-03,๋ชจ๋ธ ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌํ˜„ (Maker-Checker Governance),COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-03-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/ApprovalWorkflow/ (ApprovalSql.cs, ApprovalPolicy.cs); db/migrations/0036_approval_workflow.sql; tests/KArtSell.Integration.Tests/ApprovalWorkflow/*; commit a2e742c (Workstream H, PR #23, merged to main)",PM/BE Lead,"โœ… Backend implementation + tests complete: maker-checker 2-person approval gate, evidence attachment, approve/reject with justification. 20/20 tests PASS run in isolation (2026-08-07, KARTSELL_POSTGRES=kartselldb). Also fixed same day: ApprovalSql couldn't insert a DateOnly parameter through Dapper at all (see fix/dapper-underscore-mapping-and-build branch) โ€” prior to that fix, proposal creation failed 100% of the time against a real database; this was never caught because no integration test had run against a live DB since the slice merged. โš ๏ธ No frontend UI yet (no frontend/src/features/approval-workflow/). โš ๏ธ WBS_ID COLLISION โ€” DECISION_REQUIRED: docs/CURRENT/CATALOGS/WBS_MASTER.csv defines VS-03 as 'IngestMarketDataPIT' (market data PIT ingestion), an unrelated slice. This VS-03 label was assigned by SLICE_SPECS/VS-03-SLICE_SPEC.md independently, without checking WBS_MASTER.csv. Needs an explicit decision: renumber this slice, or formally supersede WBS_MASTER's original VS-03 definition and record why." +AEG-VS-04-01,S2,VS-04,๋ถˆ๋ณ€ ๊ฐ์‚ฌ ์ถ”์  ๊ตฌํ˜„ (Audit Trail / GDPR),COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-04-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/Compliance/ (AuditSql.cs, GdprRetention.cs); tests/KArtSell.Integration.Tests/Compliance/AuditTrailTests.cs; commit 97444c9 (Workstream I, PR #24, merged to main)",PM/BE Lead,"โœ… Backend implementation + tests complete: append-only audit_events table, GDPR retention tracking + redaction (actor_emailโ†’'', customer_idโ†’''), PII fields (ip_address). 5/5 tests PASS run in isolation (2026-08-07). Also fixed same day (fix/dapper-underscore-mapping-and-build branch): ip_address (inet) and kis_response-style jsonb columns threw InvalidCastException when read through Dapper into a typed class; GdprRetention.RetentionEndsAt was declared DateTime against a DATE column, same failure mode; and a process-wide Dapper snake_case-mapping race condition (KArtSell.BuildingBlocks' [ModuleInitializer] only fires once that assembly loads โ€” AuditSql doesn't reliably touch it) intermittently nulled out every column read from this table depending on unrelated test/host startup order. None of this had ever been exercised against a live database before. โš ๏ธ No frontend UI yet. โš ๏ธ WBS_ID COLLISION โ€” DECISION_REQUIRED: WBS_MASTER.csv defines VS-04 as 'ApplyCorporateActions' (corporate actions processing), an unrelated slice. Same issue and same required decision as AEG-VS-03-01 above." +AEG-VS-05-01,S3,VS-05,์ •์ฑ…ยท๋ฒ”์œ„ยท์‹คํŒจ์ƒํƒœ ๊ณ„์•ฝ ํ™•์ •,PLANNED,-,-,PM/Architect,"Not started. No docs/CURRENT/SLICE_SPECS/VS-05-SLICE_SPEC.md and no src/ implementation exist yet (confirmed 2026-08-07). Previous note referenced 'Job 976 (~50-90 days)' as if Phase 1 were actively running and counting down โ€” that was false; see PHASE-1-SHADOW-RUN row below. Correct statement: blocked behind Gate 1 (Phase 1 shadow run), which itself has not been queued yet." +AEG-X-011,S4,Cross,Golden vector ๊ณ ๋„ํ™”,BLOCKED,TBD,"AGENTS.md: Algorithm changes require Golden data",Quant/QA,"Gate 2 prerequisite. Blocked by Phase 1 completion. Corrected 2026-08-07: Phase 1 (Job 893/976) has not been started, not 'in progress' โ€” see PHASE-1-SHADOW-RUN row. No countdown is currently running." +AEG-VS-09-01,S4,VS-09,BuildEvidenceSnapshot,BLOCKED,TBD,"CLAUDE.md: Evidence requires Phase 1 results",PM/Architect,"Gate 2 prerequisite. Blocked by Phase 1, which has not been started (confirmed 2026-08-07). No src/ implementation exists for this slice." +AEG-VS-10-01,S4,VS-10,๋งค๋„ ๊ฒฐ์ • ์—”์ง„ ๊ตฌํ˜„ (GenerateSellDecision),COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-10-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/SellDecision/ (SellDecisionEndpoints.cs, SellDecisionHandler.cs, SellDecisionSql.cs, SellPriorityRanker.cs); frontend/src/features/sell-decision/; tests/KArtSell.Integration.Tests/SellDecision/SellDecisionTests.cs; commit b1e38ac (Phase 3 J, PR #28, merged to main)",BE Lead/Quant Lead,"โœ… Implementation complete (code + BE + FE + tests), matches WBS_MASTER's VS-10='GenerateSellDecision' definition (no ID collision here). Sell priority ranking (HARD_IMPAIRMENTโ†’...โ†’REENTRY_OPTION) with age/liquidity score boosts per VS-10-SLICE_SPEC.md. 32/32 tests PASS run in isolation (2026-08-07); one test (CalculateScore_HardImpairment_ReturnsLowestScore) had a wrong input value that happened to not exercise the >365-day age-boost branch the spec defines โ€” fixed as a test bug, not a product bug (see fix/dapper-underscore-mapping-and-build branch). โš ๏ธ NOT validated: this row was previously (incorrectly) marked BLOCKED with reasoning 'Model must pass PBO/DSR validation' โ€” that Gate-3/production-readiness validation genuinely still requires real Phase 1 shadow-run data and has not happened. Distinguish 'code implemented and unit/integration-tested' (done) from 'PBO/DSR-validated against real market data' (not done, blocked on Phase 1)." +AEG-VS-19-01,S5,VS-19,RunFrozenBacktest,BLOCKED,TBD,"CLAUDE.md: Requires evidence from Phase 1-4",PM/Architect,"Gate 3 prerequisite. Blocked by Phase 1, which has not been started (confirmed 2026-08-07). No src/ implementation exists for this slice." +AEG-VS-12-01,S2,VS-12,"๊ฑฐ๋ž˜ ์‹คํ–‰ ์‹œ์Šคํ…œ ๊ตฌํ˜„ (Trade Execution, KIS Integration)",COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-12-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/TradeExecution/ (TradeEndpoints.cs, TradeHandlers.cs, TradeSql.cs, Trade.cs, KisTradeExecutionService.cs); db/migrations/0039_trades.sql; tests/KArtSell.Integration.Tests/TradeExecution/TradeExecutionTests.cs; commit b1e38ac (Phase 3 K, PR #28, merged to main)",BE Lead/Trading Ops,"New row โ€” no prior tracker entry existed for this slice. โœ… Backend implementation + tests complete: Trade state machine (Pendingโ†’Submittedโ†’Acceptedโ†’PartiallyFilled/FullyFilledโ†’Confirmedโ†’Reconciled), KIS order submission/poll/settlement. 13/13 tests PASS run in isolation (2026-08-07), but only after two real bugs were fixed on fix/dapper-underscore-mapping-and-build: (1) UpdateTradeStatusAsync only ever persisted status/kis_response/error_message and silently dropped kis_order_id, executed_quantity, unit_price, commission, net_proceeds and both timestamps on every single call since the slice merged โ€” trade fills and settlements were not actually being recorded; (2) the same Dapper snake_case-mapping race condition described in AEG-VS-04-01's notes. โš ๏ธ No frontend UI yet (no frontend/src/features/trade-execution/). โš ๏ธ WBS_ID COLLISION โ€” DECISION_REQUIRED: WBS_MASTER.csv defines VS-12 as 'RankBuyCandidates' (buy candidate ranking), an unrelated slice. This VS-12 label was assigned independently by SLICE_SPECS/VS-12-SLICE_SPEC.md." +AEG-VS-14-01,S2,VS-14,ํฌํŠธํด๋ฆฌ์˜ค ๋Œ€์‚ฌ ๊ตฌํ˜„ (Portfolio Reconciliation),COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-14-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/PortfolioReconciliation/ (Endpoints.cs, ReconcileTradeHandler.cs, ReconciliationEngine.cs, ReconciliationSql.cs, MismatchDetector.cs, CostBasisCalculator.cs); tests/KArtSell.Integration.Tests/PortfolioReconciliation/ReconciliationEngineTests.cs; tests/KArtSell.ModelOperations.UnitTests/EvaluationReconciliationPlannerTests.cs; commit b1e38ac (Phase 3 L, PR #28, merged to main); commit 4059828 (fix: missing model_operations.models table breaking every fresh DB, PR #29, merged to main same day)",BE Lead,"New row โ€” no prior tracker entry existed for this slice. โœ… Backend implementation + tests complete: Sell Decision โ†’ Trade โ†’ Holdings reconciliation, cost-basis calculation, mismatch detection. 18/18 tests PASS run in isolation (2026-08-07). Note this slice's own merge (PR #28) shipped with a missing model_operations.models table that broke every fresh-database migration; that was caught and fixed same day in PR #29 โ€” a reminder that this branch's fresh-install DbUp path had not actually been rehearsed before merge. โš ๏ธ No frontend UI yet. โš ๏ธ WBS_ID COLLISION โ€” DECISION_REQUIRED: WBS_MASTER.csv defines VS-14 as 'GenerateDailyRecommendations' (daily client recommendation packages), an unrelated slice." +PHASE-1-SHADOW-RUN,S0-S5,Cross,252+ Trading Day Shadow Run,BLOCKED,TBD,"docs/CURRENT/PHASE-1_SHADOW_RUN_STATUS_CORRECTION.md; docs/CURRENT/AEG-X-004_DBUP_EVIDENCE.md; docs/CURRENT/PHASE-1_REQUEUE_READINESS.md; docs/CURRENT/PHASE-1_EXECUTION_EVIDENCE_PLAN.md; docs/CURRENT/PHASE-1_PREFLIGHT_20260806.md; docs/CURRENT/PHASE-1_PRODUCTION_PREFLIGHT_20260806.md; evidence/AEG-X-004/production-readonly-preflight-20260806.md; db/migrations/0032_shadow_run_queued_status_contract.sql; logs/phase-1-execution.log; logs/host-startup-20260804-173000.log",๊น€์žฌํ˜„/BE/SRE,"Read-only preflight: active DbUp journal public.kartsell_schema_versions contains 0032 and check_status includes Queued. Capabilities remain order/KIS/client publication OFF. Server-side dataset_manifest, model_version_registry, evidence_snapshot, and release_evidence_bundle contain no approved/frozen rows; no RunId/JobId/enqueue created. Blocked pending approved server-side VersionSet. Re-confirmed 2026-08-07: still no RunId/JobId exists anywhere in this workspace or its evidence trail; nothing changed on this row this session. Any future document that claims this row is RUNNING must cite a real RunId/JobId โ€” do not restate the earlier (already-corrected) false claim."