docs: snapshot WBS-4 gated status

This commit is contained in:
2026-06-21 22:50:42 +09:00
parent f0dd9a8ae4
commit c76f763e64
2 changed files with 119 additions and 8 deletions
+57 -8
View File
@@ -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) |
+62
View File
@@ -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