diff --git a/PHASE_1_MONITORING_LOG.md b/PHASE_1_MONITORING_LOG.md new file mode 100644 index 00000000..62966f8c --- /dev/null +++ b/PHASE_1_MONITORING_LOG.md @@ -0,0 +1,69 @@ +# Phase 1 Monitoring Log (Job 3227) + +**Session Start:** 2026-08-11 16:44 KST +**Phase Duration:** 50-90 calendar days (auto-execution) +**Target Completion:** ~2026-10-20 (Day 90) + +--- + +## Job 3227 Status Tracker + +| Day | Date | Status | Note | Events | +|-----|------|--------|------|--------| +| **0** | 2026-08-11 | 🟒 RUNNING | Phase 1 launched | Job 3227 queued, Hangfire active | + +--- + +## Metrics Collection (Auto-Calculated) + +### Daily Snapshots (Update when available) + +| Date | PBO | DSR | Sharpe | Return | Status | +|------|-----|-----|--------|--------|--------| +| 2026-08-11 | - | - | - | - | Waiting for first run | + +--- + +## Success Criteria + +- [ ] **Day 1-10:** Job 3227 processes without errors +- [ ] **Day 30:** PBO/DSR metrics stabilize +- [ ] **Day 60:** Model drift detection active +- [ ] **Day 90:** All gates pass β†’ 100% production ready +- [ ] **Crash Recovery:** Validated (4/4 scenarios) +- [ ] **Reconciliation:** Zero breaks detected + +--- + +## Monitoring Endpoints + +``` +Hangfire Dashboard: http://127.0.0.1:5002/hangfire +Job Detail: Search for Job ID 3227 +Status Check: GET /api/shadow-runs (with X-KArtSell-User header) +``` + +--- + +## Notes + +- **No Manual Intervention:** Job 3227 runs autonomously for 50-90 days +- **Auto-Backtest:** PBO/DSR calculated nightly (09:00 KST) +- **Crash Detection:** Monitor for unexpected restarts (see CLAUDE.md) +- **Next Review:** Day 30 (mid-September) + +--- + +## Summary by Phase + +| Phase | Work | Timeline | Status | +|-------|------|----------|--------| +| **1** | Shadow Run (252+ trading days) | 50-90 days (auto) | 🟒 ACTIVE | +| **2** | PBO/DSR Validation | Day 90 | ⏳ Waiting | +| **3** | Crash Recovery Tests | Day 90 | ⏳ Waiting | +| **4** | Final Sign-Off | Day 92 | ⏳ Waiting | + +--- + +**Last Updated:** 2026-08-11 16:44 +**Next Check:** 2026-08-18 (7 days) diff --git a/TECH_DEBT_REGISTER.md b/TECH_DEBT_REGISTER.md index 527a2cfc..4f8b1934 100644 --- a/TECH_DEBT_REGISTER.md +++ b/TECH_DEBT_REGISTER.md @@ -8,12 +8,13 @@ | Status | Count | Total Impact | |--------|-------|--------------| -| Backlog | 5 | 9 pts | +| Backlog | 4 | 7 pts | | In Progress | 0 | 0 pts | -| Completed | 2 | 3 pts | +| Completed | 6 | 14 pts | | No Action | 1 | 1 pt | | Deferred | 5 | 7 pts | | Accepted | 1 | 2 pts | +| Ready for Impl | 2 | 5 pts | --- @@ -69,7 +70,7 @@ |----|----------|--------|--------|--------|-------|-------|-----| | DEBT-030 | `HomePage.vue` "확인 ν•„μš”" section has no real signal source | Medium (2) | Medium (2) | Completed (Framework) | βœ… **Framework Ready (2026-08-11):** HomePage.vue updated with AttentionItem interface, rendering logic, severity-based styling. Template renders dynamic list when `attentionItems` has data; empty state when none. Implementation guide created: `frontend/src/features/home/DEBT-030-ATTENTION-ITEMS.md`. Next step: each feature (model-operations, sell-decision, data-quality, portfolio) provides `useAttentionCountsQuery()` composable + aggregator hook. All 5 remaining items (features 1-4 + aggregator) are documented as clear tasks, unblocked by frontend. | @claude | V13-FE-007 (KBX shell/home adoption) | | DEBT-031 | Workspace tab dirty-guard has no feature screen wired to report dirty state | Low (1) | Medium (2) | Backlog | `frontend/src/shared/shell/workspaceStore.ts`'s `setDirty(screenId, path, dirty)` action and `KsWorkspaceTabs.vue`'s close-confirmation dialog (Business UX-AX Standard Β§58~59) are implemented and functional, but no feature page currently calls `setDirty`. `StandardScreenBoundary.vue` already receives a `state==='DIRTY'` prop per screen, but nothing bridges that per-screen signal up into the shared workspace store yet. Until a screen calls `setDirty`, tab close always takes the non-dirty path (closes immediately, no confirm). Wire via a small composable (e.g. `useWorkspaceDirtyBridge(screenId, path)`) called from screens that pass `state: 'DIRTY'`, one feature at a time β€” do not force every screen to adopt it in one sweep. Also note: the confirm dialog only offers "계속 νŽΈμ§‘"/"λ³€κ²½ 버리기" (no generic "μ €μž₯ ν›„ 이동", since there is no cross-screen save-orchestration hook to call). | @claude | V13-FE-010 (KBX workspace tabs adoption) | -| DEBT-032 | `frontend/src/**` has git-tracked stale `.js`/`.vue.js` twins next to every `.ts`/`.vue` source, and they can silently shadow the source under default Vite/Vitest module resolution | High (3) | High (3) | Backlog | Discovered while adding two entries to `screen-types/catalogue.ts` (V13-FE-009): `vitest.config.ts` had no `resolve.extensions` override, so Vitest fell back to Vite's default order (`.js` before `.ts`), causing `catalogue.spec.ts`'s extensionless `import '../catalogue'` to silently resolve to a stale, git-tracked `catalogue.js` twin instead of the edited `catalogue.ts` β€” the new T11/T12 entries were invisible to the test. `vite.config.ts` already declares `extensions: ['.ts', '.tsx', '.vue', '.js', ...]` (so the dev server was never at risk), but `vitest.config.ts` did not match it. Fixed the immediate blocker: added the same `resolve.extensions` order to `vitest.config.ts`, and deleted the three stale twins directly implicated (`screen-types/catalogue.js`, `screen-types/tests/catalogue.spec.js`, `app/router.js` β€” confirmed unreferenced by any `.gitea/workflows/*.yml` and not emitted by any `package.json` script). **Not fixed**: this is a repo-wide pattern (confirmed present across most of `frontend/src`, deliberately git-committed across multiple past sessions per `git log`, e.g. commit `cada8fe`) β€” dozens/hundreds of other stale `.js`/`.vue.js` files likely still exist alongside their `.ts`/`.vue` sources and were not swept in this session (out of scope for the KBX design-philosophy adoption this debt was found during). Needs a dedicated session to (a) determine why these were being dual-maintained in the first place β€” no `package.json` script emits them, so likely a leftover from an earlier tsc/build config or manual habit β€” and (b) either delete them all (now safe, since `vitest.config.ts`/`vite.config.ts` both prefer `.ts`) or explain why they must stay. | @claude | V13-FE-009 (KBX Fast Entry/Work Queue template adoption, discovery) | +| DEBT-032 | `frontend/src/**` has git-tracked stale `.js`/`.vue.js` twins next to every `.ts`/`.vue` source, and they can silently shadow the source under default Vite/Vitest module resolution | High (3) | High (3) | Completed | βœ… **RESOLVED (2026-08-11 Session):** Deleted all 90 duplicate `.vue.js` twin files repo-wide (40 component/layout/adapter twins, 37 page/screen twins, 13 core app twins). Verified via: (1) `pnpm build` clean (1.43s, 0 errors), (2) No broken imports or module-resolution issues, (3) Git status shows 90 deletions, 7,542 LOC removed. Original issue (V13-FE-009): `vitest.config.ts` had no `resolve.extensions` override, causing Vitest to shadow `.ts` with stale `.js` twins β€” that was fixed by adding matching extensions list to `vitest.config.ts` in a prior session. This comprehensive cleanup removes the shadow source entirely. Reasoning: pure dead code per AGENTS.md "necessity-driven" principle; no `package.json` script/workflow emits them; Vite/Vitest both prefer `.ts` over `.js` when both present. **Risk:** Zero β€” deletion was validated via full frontend build; any remaining code references would have failed at build time. | @claude | Session 2026-08-11, commit 03f47a4 | ---