docs: snapshot WBS-4 gated status
This commit is contained in:
+57
-8
@@ -436,6 +436,9 @@ MDD = (peak_total_asset - current_total_asset) / peak_total_asset × 100
|
||||
| **진척 아티팩트** | `Temp/data_gated_progress_v1.json` |
|
||||
| **현재 상태** | 스키마 완성, 데이터 0건 |
|
||||
|
||||
> 2026-06-21 누적 상태: `Temp/realized_performance_v1.json` 기준 `t1_operational.n=68`, `t5_operational.n=0`, `t20_replay_estimated.n=0`. 레저 구조는 있으나 T+20 실측 종료 조건은 아직 충족하지 못했다.
|
||||
> 상세 상태 스냅샷: [`docs/WBS_4_1_4_3_STATUS_2026_06_21.md`](/C:/Temp/data_feed/docs/WBS_4_1_4_3_STATUS_2026_06_21.md)
|
||||
|
||||
**성공 하네스 (데이터 기준)**:
|
||||
```
|
||||
활성화 체크:
|
||||
@@ -472,6 +475,8 @@ match_rate_pct = 예측방향 맞춘 건수 / 전체 예측 건수 × 100
|
||||
현재: 데이터 부족으로 산출 불가 → WBS-4.1 완료 선행
|
||||
```
|
||||
|
||||
> 2026-06-21 누적 상태: `Temp/prediction_accuracy_harness_v2.json` 기준 `calibration_state=INSUFFICIENT_SAMPLES`, `t1_sample=68`, `t5_sample=0`, `t20_sample=0`, `t20_replay_sample=0`.
|
||||
|
||||
---
|
||||
|
||||
#### WBS-4.3 알파 보정 루프 (ALPHA_CALIBRATION_V2)
|
||||
@@ -493,6 +498,8 @@ match_rate_pct = 예측방향 맞춘 건수 / 전체 예측 건수 × 100
|
||||
calibration_registry_v1.json 업데이트 타임스탬프 IS NOT NULL
|
||||
```
|
||||
|
||||
> 2026-06-21 누적 상태: `Temp/alpha_feedback_loop_v2.json` 기준 `status=DATA_INSUFFICIENT`, `cases_analyzed=0`, `recommended_adjustments={}`.
|
||||
|
||||
---
|
||||
|
||||
#### WBS-4.4 성과 모니터링 대시보드 (EVALUATION_DASHBOARD_V1)
|
||||
@@ -728,14 +735,14 @@ python tools/validate_specs.py → PASS (이 마이그레이션 상태는 현재
|
||||
| **작업** | `spec/aliases.yaml`의 deprecated 경로 17건을 데드라인 전 코드/spec 참조에서 전수 제거 |
|
||||
| **현재 상태** | `remove_after: 2026-06-30` — 오늘(2026-06-21) 기준 9일 남음, 추적 항목 없었음 |
|
||||
| **담당 파일** | `spec/aliases.yaml`, `tools/validate_specs.py` |
|
||||
| **상태** | TODO — **긴급(데드라인 임박)** |
|
||||
| **상태** | ✅ 완료 (2026-06-21) — alias 17건 제거, `python tools/validate_specs.py` PASS |
|
||||
|
||||
**성공 하네스 (데이터 기준)**:
|
||||
```
|
||||
검증: grep -rl "old_portfolio_exposure_framework\|old_risk_control" spec/ src/ tools/ | wc -l
|
||||
현재: deprecated 별칭 17건 등록, 참조 잔존 여부 미확인
|
||||
결과: 참조 0건, `spec/aliases.yaml`은 비워짐
|
||||
추가 검증: python tools/validate_specs.py → PASS
|
||||
목표: 2026-06-30 이전 참조 0건 + spec/aliases.yaml에서 deprecated 항목 제거
|
||||
python tools/validate_specs.py → deprecated 경로 사용 시 FAIL 처리로 전환
|
||||
```
|
||||
|
||||
---
|
||||
@@ -849,9 +856,9 @@ python tools/validate_specs.py → PASS
|
||||
| 항목 | 내용 |
|
||||
|------|------|
|
||||
| **작업** | `src/quant_engine/snapshot_admin_server_v1.py`(Python 어드민 웹 UI)를 Gitea CI/CD 배포 스텝을 통해 Synology NAS에서 상시 서비스로 운영할 수 있는지 검토 |
|
||||
| **현재 상태** | **기술적으로는 가능, 단 3가지 제약 확인됨** (아래) |
|
||||
| **담당 파일** | `.gitea/workflows/ci.yml`, `tools/run_snapshot_admin_server_v1.py`, `src/quant_engine/snapshot_admin_server_v1.py` |
|
||||
| **상태** | TODO — 구현 전 보안·접근 정책 결정 필요 |
|
||||
| **현재 상태** | **기술적으로는 가능**. 기본 루프백 보호 + Basic Auth 게이트를 추가했고, Synology 외부 노출은 리버스 프록시 기반 POC로 가이드함. 실배포 검증은 아직 필요 |
|
||||
| **담당 파일** | `.gitea/workflows/ci.yml`, `tools/run_snapshot_admin_server_v1.py`, `src/quant_engine/snapshot_admin_server_v1.py`, `docs/SYNOLOGY_SNAPSHOT_ADMIN_POC.md`, `docs/WBS_7_9_EVIDENCE_PACKET_FINAL.md` |
|
||||
| **상태** | 부분 완료 — POC 절차/보안 게이트 구현 완료, Synology live verification pending |
|
||||
|
||||
**조사 결과**:
|
||||
|
||||
@@ -869,7 +876,49 @@ python tools/validate_specs.py → PASS
|
||||
검증: 배포 후 curl http://127.0.0.1:8787/api/state → 200 응답 + CI 잡 종료 후 5분 뒤에도 프로세스 생존 확인
|
||||
```
|
||||
|
||||
> **이 항목은 "구현 가능"으로 결론났으나, 인증 부재 상태로 상시 서비스화하는 것은 보안 리스크이므로 사용자의 명시적 정책 결정(인증 추가 여부, 노출 범위) 없이는 실제 배포 스텝을 작성하지 않는다.**
|
||||
> **이 항목은 "구현 가능"으로 결론났고, 기본 보안 게이트는 추가되었다. 다만 Synology 실배포/외부 노출 검증은 아직 남아 있으므로, 리버스 프록시·방화벽·인증을 함께 적용하는 POC 절차만 제시한다.**
|
||||
|
||||
**실측 절차 (WBS-7.9 live verification)**:
|
||||
```
|
||||
1) NAS 내부 확인
|
||||
curl -i http://127.0.0.1:8787/api/state
|
||||
기대: 200 OK, JSON 응답, version.app=snapshot-admin-web-v7
|
||||
|
||||
2) 외부 경유 확인
|
||||
curl -i https://<public-host>/api/state
|
||||
기대: 인증 미제공 시 401 Unauthorized + WWW-Authenticate: Basic
|
||||
|
||||
3) 인증 확인
|
||||
curl -u '<user>:<password>' https://<public-host>/api/state
|
||||
기대: 200 OK, JSON 응답
|
||||
|
||||
4) UI 확인
|
||||
브라우저에서 https://<public-host>/, /tables 접속
|
||||
기대: Basic Auth 프롬프트 후 페이지 렌더링
|
||||
|
||||
5) 지속성 확인
|
||||
Python 서비스 재시작 또는 NAS 재부팅 후 5분 이내 재접속
|
||||
기대: 동일 URL이 다시 200/401 규칙대로 동작
|
||||
|
||||
6) 증빙 보관
|
||||
- curl 출력 2개 이상
|
||||
- 브라우저 스크린샷 2장
|
||||
- DSM Reverse Proxy 규칙 스크린샷
|
||||
- 인증서/호스트명/포트 기록
|
||||
```
|
||||
|
||||
**완료 판정 기준**:
|
||||
- `tools/run_snapshot_admin_synology.sh start` 실행 후 `healthcheck ok` 확인
|
||||
- `curl -i http://127.0.0.1:8787/api/state` 가 200 응답
|
||||
- `curl -i https://<public-host>/api/state` 가 인증 없이는 401 응답
|
||||
- `curl -u '<user>:<password>' https://<public-host>/api/state` 가 200 응답
|
||||
- 브라우저에서 `https://<public-host>/` 및 `/tables` 가 인증 후 렌더링
|
||||
- NAS 재시작 또는 서비스 재시작 뒤에도 위 동작이 동일하게 재현
|
||||
- `docs/SYNOLOGY_SNAPSHOT_ADMIN_EVIDENCE_TEMPLATE.md` 양식에 맞춰 증빙을 채우고 보관
|
||||
- 최종 완료 문구는 `docs/SYNOLOGY_SNAPSHOT_ADMIN_DEPLOYMENT_CHECKLIST.md` §8 템플릿을 사용
|
||||
- 현장용 채움본은 `docs/SYNOLOGY_SNAPSHOT_ADMIN_DEPLOYMENT_CHECKLIST_FILLED.md` 참조
|
||||
- DSM 입력 표는 `docs/SYNOLOGY_SNAPSHOT_ADMIN_FIREWALL_PROXY_TABLE.md` 또는 `docs/SYNOLOGY_SNAPSHOT_ADMIN_FIREWALL_PROXY_COPYPASTE.md` 참조
|
||||
- 최종 점검 10개는 `docs/SYNOLOGY_SNAPSHOT_ADMIN_FINAL_PREFLIGHT_10.md` 참조
|
||||
|
||||
---
|
||||
|
||||
@@ -968,7 +1017,7 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
|
||||
| 7.6 슬리피지 실측 보정 | 🟡 Medium | 낮음 | 체결 5건↑ | 스캐폴딩완료, 비교는 DATA_GATED | **100%** ✅ (캡처 도구, 비교는 표본 대기) |
|
||||
| 7.7 E2E 통합테스트 | 🟠 High | 중간 | 없음 | 완료 | **100%** ✅ (2026-06-21, 3 passed) |
|
||||
| 7.8 ETF NAV 수집경로 확정 | 🟡 Medium | 높음 | KRX/KIND 정책 | 완료(재검토주기 설정) | **100%** ✅ (next_review: 2026-09-30) |
|
||||
| 7.9 Synology 배포 검토 | 🟡 Medium | 중간 | 보안정책 결정 | 완료(검토만) | **100%** ✅ (구현은 정책 결정 대기) |
|
||||
| 7.9 Synology 배포 검토 | 🟡 Medium | 중간 | 보안정책 결정 | 부분완료 | **부분완료** (외부 접근 POC 가이드 + Basic Auth 게이트 추가, live verification pending) |
|
||||
| 7.10 어드민 테이블 그리드(Tabler) | 🟢 Low | 낮음 | 없음 | 완료 | **100%** ✅ (2026-06-21, 8 passed) |
|
||||
| 7.11 spec-코드 동기화 게이트 | 🔴 Critical | 중간 | 없음 | 완료 | **100%** ✅ (2026-06-22, 12/159 태깅, 85 passed) |
|
||||
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
# WBS-4.1 / 4.2 / 4.3 Status Snapshot
|
||||
|
||||
## Snapshot
|
||||
|
||||
As of `2026-06-21`, the performance-intelligence phase remains `DATA_GATED`.
|
||||
The current outputs are enough to prove the structure exists, but not enough to claim live operational completion.
|
||||
The KIS collection and qualitative sell workflows now run successfully on Gitea with the triggering ref checkout and seed recovery path in place.
|
||||
|
||||
## WBS-4.1 T+20 outcome ledger
|
||||
|
||||
Source: `Temp/realized_performance_v1.json`
|
||||
|
||||
- `t1_operational.n = 68`
|
||||
- `t1_operational.mean_return_pct = 2.68`
|
||||
- `t5_operational.n = 0`
|
||||
- `t20_replay_estimated.n = 0`
|
||||
- `current_drawdown_pct = -3.42`
|
||||
- `worst_case_mdd_pct = 30.26`
|
||||
|
||||
Interpretation:
|
||||
|
||||
- There is operational history, but not enough T+20 live outcomes to close the ledger target.
|
||||
- The portfolio-level evidence is still marked as `insufficient_data`.
|
||||
- The collection pipeline blocker is cleared; the remaining blocker is live T+20 accumulation.
|
||||
|
||||
## WBS-4.2 prediction accuracy harness
|
||||
|
||||
Source: `Temp/prediction_accuracy_harness_v2.json`
|
||||
|
||||
- `calibration_state = INSUFFICIENT_SAMPLES`
|
||||
- `evaluation_methodology = ACTIVE_PASSIVE_SPLIT_V1_INCONCLUSIVE_EXCLUDED`
|
||||
- `t1_sample = 68`
|
||||
- `t5_sample = 0`
|
||||
- `t20_sample = 0`
|
||||
- `t20_replay_sample = 0`
|
||||
- `macro_event_excluded_count = 0`
|
||||
|
||||
Interpretation:
|
||||
|
||||
- The harness is structurally present.
|
||||
- There is no valid T+5/T+20 sample set yet, so `match_rate` cannot be promoted.
|
||||
- The harness can now consume the tracked seed snapshot in CI, but the sample set is still too small for promotion.
|
||||
|
||||
## WBS-4.3 alpha calibration loop
|
||||
|
||||
Source: `Temp/alpha_feedback_loop_v2.json`
|
||||
|
||||
- `status = DATA_INSUFFICIENT`
|
||||
- `cases_analyzed = 0`
|
||||
- `recommended_adjustments = {}`
|
||||
|
||||
Interpretation:
|
||||
|
||||
- The calibration loop is not yet receiving enough real outcome data to produce stable reweighting.
|
||||
- `run 165` and `run 166` confirm the upstream seed and collection stages are unblocked.
|
||||
|
||||
## Bottom line
|
||||
|
||||
- WBS-4.1: not complete
|
||||
- WBS-4.2: not complete
|
||||
- WBS-4.3: not complete
|
||||
- Shared blocker: insufficient live T+20 accumulation
|
||||
Reference in New Issue
Block a user