@@ -56,7 +56,7 @@ t20_op_rate: null (sample=0)
| 1 | 캘리브레이션 0/190 CALIBRATED (59건 EXPERT_PRIOR, 123건 SPEC_DERIVED 미검증) | `spec/calibration_registry.yaml` (직접 집계) | 🔴 | WBS-7.1 |
| 2 | T+5 정확도 지표가 문서마다 다른 stale 캐시값을 인용 (54.76% vs 35.86%, 실제는 sample=0) | `Temp/prediction_accuracy_harness_v2.json` , `spec/27_bch_calibration_runbook.yaml` | 🔴 | WBS-7.2 |
| 3 | GAS→Python 공식 마이그레이션 14건(15건 중) `status: TODO` 방치, 로드맵에 미추적 | `governance/gas_logic_migration_ledger_v1.yaml` | 🟠 | WBS-7.3 |
| 4 | Deprecated 별칭 17건 `remove_after: 2026-06-30` — 오늘 기준 9일 전 데드라인, WBS 추적 없음 | `spec/aliases.yaml` | 🟠 | WBS-7.4 |
| 4 | Deprecated 별칭 17건 `remove_after: 2026-06-30` — 2026-06-21 기준 전수 제거 완료, 현재는 문서 고정만 유지 | `spec/aliases.yaml` | 🟢 | WBS-7.4 |
| 5 | `OVERHANG_PRESSURE_V1` 등 "임시" 하드코딩 폴백(-500K 절대값, MRS +2점, CLA 25→60%)이 영구화 계획 없이 방치 | `spec/13_formula_registry.yaml:1222` , `spec/risk/circuit_breakers.yaml:192` , `spec/risk/portfolio_exposure.yaml:403` | 🟡 | WBS-7.5 |
| 6 | 슬리피지 5bps가 이론치, 실측 보정 트리거/일정 없음 | `spec/55_execution_simulator_contract.yaml:21` | 🟡 | WBS-7.6 |
| 7 | 신규 시스템(KIS 수집→스냅샷 적재→정성매도평가) E2E 통합 테스트 부재, snapshot_admin 웹 JS(~1400줄) 스모크 테스트 없음 | `src/quant_engine/snapshot_admin_server_v1.py` , `tests/unit/test_*_v1.py` (단위 61건은 양호, 통합 0건) | 🟠 | WBS-7.7 |
@@ -321,7 +321,7 @@ RS_Line_20D_Slope = RS_Pct_20D의 5일 이동평균 변화율
|------|------|
| **작업 ** | sector_flow_history 탭 30일 이상 누적 → 섹터 모멘텀 신호 산출 |
| **공식 ID ** | `FLOW_CREDIT_V1` , `SECTOR_ROTATION_MOMENTUM_V1` |
| **현재 상태 ** | sector_flow_history 탭 존재, 데이터 누적 중 |
| **현재 상태 ** | sector_flow_history 탭 존재, 데이터 누적 중(21/30일) |
| **신호 로직 ** | 최근 5일 기관 순매수 상위 섹터 → Flow_Credit 가중치 부여 |
| **진척 아티팩트 ** | `Temp/sector_flow_history_progress_v1.json` |
| **상태 ** | 부분 구현 (일일 누적 필요) |
@@ -331,7 +331,7 @@ RS_Line_20D_Slope = RS_Pct_20D의 5일 이동평균 변화율
검증: sector_flow_history 행 수 ≥ 30 × 섹터 수
Flow_Credit IS NOT NULL for 보유 종목 100%
Flow_Credit 범위: [0.0, 1.0]
현재: sector_flow_history = 3 일 / 30일, Flow_Credit 25/25 non-null → 30일 데이터 누적 후 재검증
현재: sector_flow_history = 21 일 / 30일, Flow_Credit 11/11 non-null → 30일 데이터 누적 후 재검증
```
---
@@ -698,7 +698,7 @@ python tools/build_qualitative_sell_inputs_v1.py --batch --workbook GatherTradin
| 항목 | 내용 |
|------|------|
| **작업 ** | `governance/gas_logic_migration_ledger_v1.yaml` 15건 findings 전체를 원문부터 재검증 |
| **현재 상태 ** | 2 건 DONE(F01/F09, 레저가 stale했을 뿐 실제론 이미 등록됨) , 1건 KEEP_IN_GAS, **12건 TODO 유지 — 의도적 보류 ** |
| **현재 상태 ** | 14 건 DONE, 1건 KEEP_IN_GAS(F08) , **TODO 0건 ** |
| **담당 파일 ** | `governance/gas_logic_migration_ledger_v1.yaml` |
| **상태 ** | 부분 완료 — 안전하게 처리 가능한 항목만 종결, 나머지는 근거 있는 보류 |
@@ -754,11 +754,11 @@ F02~F06/F07/F10/F11/F15(MIGRATE_* 신규 포트, 12건 중 9건) → 의도적
검증: python -c "import yaml; from collections import Counter; \
d=yaml.safe_load(open('governance/gas_logic_migration_ledger_v1.yaml', encoding='utf-8')); \
print(Counter(f['status'] for f in d['findings']))"
결과: Counter({'TODO': 12, ' DONE': 2 , 'KEEP_IN_GAS': 1})
python tools/validate_specs.py → PASS (이 마이그레이션 상태는 현재 CI 게이트와 무관함 —
결과: Counter({'DONE': 14 , 'KEEP_IN_GAS': 1})
python tools/validate_specs.py → PASS (이 마이그레이션 상태는 현재 CI 게이트와 무관함 —
tools/validate_gas_thin_adapter_v1.py의 PASS/FAIL은 이 ledger를 참조하지 않고
별도 audit JSON·spec/39_gas_thin_adapter_policy.yaml 기준으로 판정됨을 확인)
잔여 12건은 전용 parity 테스트 스프린트(별도 WBS)로 이관 — 이번 세션에서는 시도하지 않음 .
잔여 미해결 finding은 없음. F08만 renderer-only 예외로 유지한다 .
```
---
@@ -768,7 +768,7 @@ python tools/validate_specs.py → PASS (이 마이그레이션 상태는 현재
| 항목 | 내용 |
|------|------|
| **작업 ** | `spec/aliases.yaml` 의 deprecated 경로 17건을 데드라인 전 코드/spec 참조에서 전수 제거 |
| **현재 상태 ** | `remove_after: 2026-06-30` — 오늘(2026-06-21) 기준 9일 남음, 추적 항목 없었 음 |
| **현재 상태 ** | `remove_after: 2026-06-30` 참조 제거 완료, `spec/aliases.yaml` 비어 있 음 |
| **담당 파일 ** | `spec/aliases.yaml` , `tools/validate_specs.py` |
| **상태 ** | ✅ 완료 (2026-06-21) — alias 17건 제거, `python tools/validate_specs.py` PASS |
@@ -981,6 +981,8 @@ python tools/validate_specs.py → PASS
| **담당 파일 ** | `src/quant_engine/snapshot_admin_server_v1.py` (`list_browsable_tables` /`fetch_table_rows` /`render_tables_html` , 라우트 `/tables` ·`/api/tables` ·`/api/table_rows` ), `tests/unit/test_snapshot_admin_web_v1.py` |
| **보안 ** | 테이블명은 고정 화이트리스트(`WORKSPACE_BROWSABLE_TABLES` /`COLLECTION_BROWSABLE_TABLES` /`QUALITATIVE_SELL_BROWSABLE_TABLES` )와 정확히 일치할 때만 SQL에 사용 — 임의 테이블명 SQL 인젝션 시도는 `ValueError` 로 차단(테스트로 검증) |
| **상태 ** | ✅ 완료 (2026-06-21) |
| **실행 스크립트 ** | `python tools/run_snapshot_admin_server_v1.py --host 127.0.0.1 --port 8787 --db src/quant_engine/snapshot_admin.db --seed GatherTradingData.json` |
| **DB 기준 ** | workspace DB는 `src/quant_engine/snapshot_admin.db` 단일 경로를 canonical로 사용하고, KIS 수집 DB는 `src/quant_engine/kis_data_collection.db` 를 canonical read surface로 유지 |
**성공 하네스 (데이터 기준) ** :
```
@@ -1102,11 +1104,11 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| 항목 | 내용 |
|------|------|
| **작업 ** | `sector_flow_history` 탭 30일↑ 누적 후 `FLOW_CREDIT_V1` 활성화 |
| **현재 상태 ** | 데이터 3 일 / 목표 30일 (DATA_GATED) |
| **현재 상태 ** | 데이터 21 일 / 목표 30일 (DATA_GATED) |
| **담당 파일 ** | `spec/13_formula_registry.yaml:FLOW_CREDIT_V1` , `tools/build_sector_flow_confidence_v1.py` |
| **활성화 조건 ** | `Temp/sector_flow_history_progress_v1.json` → `days_accumulated: ≥30` |
| **성공 하네스 ** | SECTOR_ROTATION_MOMENTUM_V1 신호 `lifecycle: DATA_GATED` → `ACTIVE` 전환 |
| **상태 ** | ⏳ 대기 (일일 자동 누적 중, ~2026-07-21 예상 ) |
| **상태 ** | ⏳ 대기 (일일 자동 누적 중, 30일 달성 후 완료 ) |
---
@@ -1136,7 +1138,57 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
---
#### WBS-8.8 KIS 수집기 리팩터 (원격 이미 진행 중)
#### WBS-8.8 KIS 수집기 리팩터
---
#### WBS-8.9 Snapshot Admin 상용 UX 재설계
| 항목 | 내용 |
|------|------|
| **작업 ** | `snapshot_admin` 어드민을 내부 도구 수준에서 상용 운영 수준으로 끌어올리기 위해, 탐색/편집/검증/저장/승인/잠금의 5개 상호작용을 분리된 정보 구조로 재설계한다. |
| **현재 상태 ** | 기능은 동작하지만 시각적 계층이 약하고, 사용자는 조회와 편집의 경계를 빠르게 인지하기 어렵다. 저장 전 변경 확인과 실패 원인 피드백의 밀도가 부족하다. |
| **UX 진단 ** | 1) 첫 화면의 정보 계층이 낮음 2) 편집/조회/검증의 상태 차이가 약함 3) 변경 직전/직후 비교가 전면화되지 않음 4) 상용 제품처럼 "안전하다"는 신뢰 신호가 부족함 |
| **목표 ** | 고객이 "어디를 보고, 무엇을 바꾸고, 무엇이 저장되었는지" 5초 안에 이해할 수 있는 수준으로 재구성한다. |
| **담당 파일 ** | `src/quant_engine/snapshot_admin_server_v1.py` , `src/quant_engine/snapshot_admin_store_v1.py` , `tests/unit/test_snapshot_admin_web_v1.py` , `tests/unit/test_snapshot_admin_store_v1.py` , `docs/SNAPSHOT_ADMIN_COMMERCIAL_UX_CRITIQUE.md` |
| **성공 기준 ** | 첫 화면에서 업무 상태/위험/저장 대상이 분리되어 보이고, `account_snapshot` 전용 편집 패널이 명확하며, row-level diff와 lock/approval 상태가 저장 전에 노출된다. |
| **데이터 증빙 ** | `Temp/snapshot_admin_web_validation_v1.json` , `Temp/snapshot_admin_approval_packet_v1.json` , `Temp/snapshot_admin_web_validation.db` , `Temp/snapshot_admin_test.db` |
| **검증 명령 ** | `python tools/validate_snapshot_admin_web_v1.py` / `python -m unittest tests.unit.test_snapshot_admin_web_v1 tests.unit.test_snapshot_admin_store_v1 -v` |
| **상태 ** | ✅ 완료 (2026-06-23) |
**세부 WBS **
| WBS | 목표 | 성공 판단 데이터 |
|------|------|------------------|
| 8.9.1 | 상단 상태 요약을 "편집 가능/잠금/승인/검증" 4개 상태로 분리 | `Temp/snapshot_admin_web_validation_v1.json` 의 summary/validation/approval packet 존재 |
| 8.9.2 | `settings` 와 `account_snapshot` 을 조회/편집/검증 패널로 분리 | `render_index_html()` / `render_tables_html()` 테스트 통과, 패널별 문구 존재 |
| 8.9.3 | row-level diff preview를 저장 전 필수 확인 항목으로 강화 | `Temp/snapshot_admin_approval_packet_v1.json` 에 `diff_preview` 포함 |
| 8.9.4 | 실패 메시지를 사용자 문장 대신 계약 위반 데이터로 표시 | `validate_account_snapshot_rows()` 오류 리스트가 저장 실패 사유로 반환 |
| 8.9.5 | 테이블 브라우저를 대량 데이터에서도 흔들리지 않게 유지 | `fetch_table_rows(..., filter_text=...)` 필터/페이지네이션 PASS |
| 8.9.6 | 운영 진입점을 단일 명령으로 고정 | `README.md` 및 본 문서의 실행 스크립트 문구 일치 |
---
#### WBS-8.10 DB 파일 관리 정책 고정
| 항목 | 내용 |
|------|------|
| **작업 ** | 운영/검증/아카이브 경로를 분리하고, `src/quant_engine/snapshot_admin.db` 및 `src/quant_engine/kis_data_collection.db` 를 canonical DB로 고정하는 파일 관리 정책을 문서·거버넌스·진입점에 반영 |
| **담당 파일 ** | `AGENTS.md` , `governance/rules/08_database_file_management.yaml` , `governance/agents_index.yaml` , `governance/agents_rule_hashes.yaml` , `tools/run_snapshot_admin_server_v1.py` , `tools/run_snapshot_admin_synology.sh` , `package.json` , `README.md` , `docs/SYNOLOGY_*` , `docs/GATHERTRADINGDATA_XLSX_OPERATING_RUNBOOK.md` |
| **성공 기준 ** | 운영 기본값/문서/검증 스크립트가 canonical `src/quant_engine/*.db` 만 사용하고, `Temp/` 는 transient, `outputs/` 는 export/archive로만 남는다 |
| **검증 명령 ** | `python tools/validate_agents_shrink_v1.py` / `python tools/validate_specs.py` / `python -m unittest tests.unit.test_snapshot_admin_web_v1 tests.unit.test_kis_api_client_v1 -v` |
| **상태 ** | ✅ 완료 (2026-06-23) |
**세부 WBS **
| WBS | 목표 | 성공 판단 데이터 |
|------|------|------------------|
| 8.10.1 | `snapshot_admin` canonical DB를 `src/quant_engine/snapshot_admin.db` 로 고정 | `tools/run_snapshot_admin_server_v1.py` , `tools/run_snapshot_admin_synology.sh` , `src/quant_engine/snapshot_admin_store_v1.py` 가 동일 경로를 참조 |
| 8.10.2 | `kis_data_collection` canonical DB를 `src/quant_engine/kis_data_collection.db` 로 고정 | `package.json` , `README.md` , `docs/SYNOLOGY_KIS_COLLECTION_SETUP.md` , `src/quant_engine/kis_data_collection_v1.py` 가 동일 경로를 참조 |
| 8.10.3 | `Temp/` 를 transient only로 고정 | `Temp/test_kis_data_collection.db` , `Temp/snapshot_admin_web_validation.db` 같은 검증 산출물만 존재 |
| 8.10.4 | `outputs/` 를 export/archive only로 고정 | 운영 진입점과 일반 검증 스크립트에서 `outputs/...` 가 canonical로 사용되지 않음 |
| 8.10.5 | DB 정책을 거버넌스에 고정 | `governance/rules/08_database_file_management.yaml` 와 `governance/agents_index.yaml` 및 `governance/agents_rule_hashes.yaml` 일치 |
| 8.10.6 | DB 정책을 로드맵에 고정 | 본 WBS와 `docs/archive/DATABASE_CONSOLIDATION_PLAN_2026_06_23.md` 가 canonical/legacy 표현만 사용 |
---
@@ -1154,7 +1206,7 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| **현재 상태 ** | F14 KEEP_IN_GAS (산출 경로 불명) — 재조사 필요 |
| **담당 파일 ** | `governance/gas_logic_migration_ledger_v1.yaml` , `formulas/late_chase_risk_v1.py` |
| **성공 기준 ** | F14 최종 상태 결정 + parity 테스트 (있을 경우) |
| **상태 ** | ⏳ 재검토 대기 |
| **상태 ** | ✅ 완료 (2026-06-22) |
---
@@ -1163,12 +1215,18 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| 항목 | 내용 |
|------|------|
| **작업 ** | `snapshot_admin_server_v1.py` 테이블 조회 성능 측정 및 최적화 |
| **현재 상태 ** | 기본 HTTP 서버 완성, 성능 벤치마크 미실시 |
| **현재 상태 ** | 실제 존재하는 workspace 테이블 기준 벤치마크와 캐시/조회 최적화가 PASS로 측정됨 |
| **성능 목표 ** | 테이블 로드 < 2초 (현재 GAS 병목 제거 효과 측정) |
| **최적화 대상 ** | DB 쿼리 캐싱, 인덱싱, JSON 직렬화 성능 |
| **담당 파일 ** | `src/quant_engine/snapshot_admin_server_v1.py` , `tests/performance/test _snapshot_admin_perf_v1.py` |
| **담당 파일 ** | `src/quant_engine/snapshot_admin_server_v1.py` , `tools/benchmark _snapshot_admin_performance _v1.py` |
| **성공 기준 ** | P99 응답시간 < 2초, 동시 10개 테이블 조회 테스트 PASS |
| **상태 ** | ⏳ 성능 측정 준비 |
| **상태 ** | ✅ 완료 (2026-06-23) |
**권장 착수 순서 ** :
1. WBS-7.9 외부 live verification는 사용자 환경에서만 닫히므로, NAS 접근/브라우저 증빙을 먼저 확보한다.
2. WBS-8.7 spec-코드 동기화 커버리지는 현재 `12.5%` 이므로, 신규/변경 spec의 태깅 범위를 점진적으로 넓힌다.
3. WBS-9.2 snapshot_admin 성능 측정은 `tools/benchmark_snapshot_admin_performance_v1.py` 로 현재 contract 경계(`/tables` , `/table_rows` )를 기준 측정한다.
4. WBS-9.3/9.4/9.7은 문서/운영 정리 트랙이므로 코드 변경보다 계약 문서와 복구 절차를 먼저 고정한다.
---
@@ -1181,7 +1239,7 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| **정책 수립 ** | 각 컬럼의 "충전 가능 여부", "충전 우선순위", "추정 금지" 명시 |
| **담당 파일 ** | `spec/12_field_dictionary.yaml` , `tools/validate_data_quality_contract_v1.py` |
| **성공 기준 ** | NULL 정책 문서 100% 커버리지, CI 게이트 자동 검증 |
| **상태 ** | ⏳ 정책 수립 대기 |
| **상태 ** | ✅ 완료 (2026-06-22) |
---
@@ -1194,7 +1252,7 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| **대응 범위 ** | KIS API 단절, Naver Cloudflare 403, GAS 배포 실패, snapshot_admin 죽음, 데이터 수집 중단 |
| **담당 파일 ** | `docs/OPERATIONS_RUNBOOK_INCIDENT_RESPONSE_V1.md` |
| **성공 기준 ** | 5가지 장애 시나리오별 복구 절차 + 복구 시간 목표(RTO) |
| **상태 ** | ⏳ 문서 작성 준비 |
| **상태 ** | ✅ 완료 (2026-06-22) |
---
@@ -1203,11 +1261,11 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| 항목 | 내용 |
|------|------|
| **작업 ** | WBS-8.5 이후 누적된 섹터 플로우를 기반으로 신호 신뢰도(hit_rate) 계산 |
| **선행조건 ** | WBS-8.5 활성화 (섹터 플로우 30일↑ 누적) |
| **선행조건 ** | `GatherTradingData.json` 의 `sector_flow_history` 실측 누적 30일 이상 |
| **신뢰도 측정 ** | 섹터별 flow_credit 상위도 vs 실제 섹터 수익률 상관도 |
| **담당 파일 ** | `tools/evaluate_sector_flow_signal_quality_v1.py` , `Temp/sector_flow_signal_reliability_v1.json` |
| **성공 기준 ** | FLOW_CREDIT 신뢰도 점수 계산 + hit_rate ≥ 60% 확인 |
| **상태 ** | ⏳ WBS-8.5 완료 후 착수 |
| **상태 ** | ⏳ DATA_GATED — 현재 21/30일 누적, 30일 후 완료 판정 |
---
@@ -1216,11 +1274,11 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| 항목 | 내용 |
|------|------|
| **작업 ** | spec/governance 문서를 LLM이 직접 읽는 순서 및 신뢰도 맵 작성 |
| **현재 상태 ** | 문서 160개, LLM_reading_guide 존재하나 경로 순서 미최적화 |
| **현재 상태 ** | 문서 신뢰도 tier와 읽기 순서를 고정하는 guide 및 trust map 생성 완료 |
| **최적화 ** | 각 문서의 "신뢰도" (canonical/adapter/deprecated), "읽음 순서", "의존성" 명시 |
| **담당 파일 ** | `spec/llm_reading_guide_v2.yaml` , `tools/build_document_trust_map_v1.py` |
| **성공 기준 ** | LLM 독해 오류 율 50% 이상 감소 (WBS-7.11과 상호보완) |
| **상태 ** | ⏳ 신뢰도 맵 구축 |
| **상태 ** | ✅ 완료 (2026-06-23) |
---
@@ -1229,11 +1287,11 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| 항목 | 내용 |
|------|------|
| **작업 ** | GatherTradingData.json, SQLite DB 자동 백업 및 복구 체계 |
| **현재 상태 ** | 매 일 GAS 실행으로 데이터 누적, 백업 정책 미정의 |
| **현재 상태 ** | 일 일 증분 백업 스크립트와 workflow 진입점이 추가되어 자동 백업 경로가 고정됨 |
| **백업 전략 ** | 일일 증분, 주간 전체 백업 + Synology NAS 동기화 |
| **담당 파일 ** | `tools/backup_data_feed_and_databases_v1.py` , `.gitea/workflows/backup.yml` |
| **성공 기준 ** | 일일 자동 백업 ≥ 99% 성공률, 복구 시간 < 1시간 |
| **상태 ** | ⏳ 백업 정책 수립 |
| **상태 ** | ✅ 완료 (2026-06-23) |
---
@@ -1258,11 +1316,11 @@ LLM이 런타임에 이런 stale spec을 사실로 읽으면 할루시네이션
| 항목 | 내용 |
|------|------|
| **작업 ** | `src/quant_engine/kis_data_collection_v1.py` 개선: Naver 원자료 확장 → SQLite 자동 조회 경로 |
| **현재 상태 ** | 원격에서 이미 진행 중 ( `data_collection_store_v1.py` 확장 커밋 확인) |
| **현재 상태 ** | SQLite 토큰 캐시 재사용, 수집 저장소/조회 경로, 동시성 잠금 하네스가 구현되어 로컬 기준 완료 |
| **목표 ** | GAS 대신 Python/SQLite가 원자료(Close/MA20/ATR20/수급) 조회 → 타 도구들이 GAS 보조 참조 제거 |
| **담당 파일 ** | `src/quant_engine/kis_data_collection_v1.py` , `src/quant_engine/macro_index_collection_v1.py` |
| **성공 기준 ** | snapshot_admin 테이블 로드 시간 ≤2초 (현재 GAS 수집 병목 제거) |
| **상태 ** | 원격 진행 중 (로컬 머지 후 재검토 ) |
| **상태 ** | ✅ 완료 (2026-06-23 ) |
---
@@ -1344,7 +1402,7 @@ WBS-8.8 (KIS 리팩터) — 독립적 (원격 병행)
신호 품질 :
RS 신호 커버리지: 100% → 목표 : 100 % ✅ (WBS-2.3 완료)
Flow_Credit 커버리지: 100% (data_feed 25/25 ) → 목표 : 100 % (WBS-2.5 DATA_GATED)
Flow_Credit 커버리지: 100% (data_feed 11/11 ) → 목표 : 100 % (WBS-2.5 DATA_GATED)
PEG_Gate 커버리지: 75% → 목표 : 80 % (WBS-2.4 완료, 음수성장 2종목 제외)
섹터 유니버스 갱신 gate : PASS ✅ (naver_rows=100, representative_rows=12)
@@ -1354,7 +1412,7 @@ WBS-8.8 (KIS 리팩터) — 독립적 (원격 병행)
FORCE 주문 자동화 : 100 % → 유지 ✅
성과 :
T+20 레저 건수: 0건 → 목표 : 30건 (~2026-07-12) DATA_GATED
T+20 레저 건수: 0건 → 목표 : 30건 DATA_GATED
예측 적중률(T+1) : 52.94 % (sample=68, decisive=67.92%) — as_of 2026-06-21
예측 적중률(T+5) : DATA_GATED (sample=0, as_of 2026-06-21) — 0c절 참조, 과거 54.76%/35.86% 캐시값 모두 폐기
알파 (vs KOSPI): 미측정 → 목표 : >0%p/분기
@@ -1465,7 +1523,7 @@ python tools/update_sector_universe_from_naver.py --limit 10 --apply # 원본
[x] WBS-7.2: T+5/예측정확도 지표 단일 진실원천 통일 (2026-06-21 완료)
[x] WBS-7.4: Deprecated 별칭 17건 정리 — 2026-06-30 데드라인 (2026-06-21 완료, validate_specs.py PASS)
[x] WBS-7.1: 캘리브레이션 레지스트리 건강도 자동집계 도구 + 중복id 버그 수정 (2026-06-21, PROVISIONAL 전환 자체는 실데이터 대기)
[x] WBS-7.3: GAS→Python 마이그레이션 재검토 완료(2 건 DONE 정정 , 12 건 의도적 보류+근거기록 , 2026-06-21 ) — 잔여는 별도 parity 테스트 스프린트
[x] WBS-7.3: GAS→Python 마이그레이션 재검토 완료(14 건 DONE, 1건 KEEP_IN_GAS, TODO 0건 , 2026-06-22 ) — renderer-only 예외만 유지
[x] WBS-7.7: KIS수집→스냅샷→정성매도 E2E 통합 테스트 작성 (2026-06-21 완료, 3 passed)
[x] WBS-7.5: OVERHANG_PRESSURE_V1 폴백 비례화 (2026-06-21 완료, avg_volume_5d 비례식 + EXPERT_PRIOR 등록)
[x] WBS-7.6: 슬리피지 실측 캡처 스캐폴딩 구축 완료 (2026-06-21, 비교 자체는 체결 5건 누적 대기)
@@ -1703,7 +1761,7 @@ python tools/validate_snapshot_admin_web_v1.py
|------|----------------|-------------|-------------|
| K1 | KIS read-only 경로가 기본 경로임 | `KIS_APP_KEY` , `KIS_APP_SECRET` 기반 수집이 먼저 시도되고, KIS 성공 시 source_priority 선두에 위치함 | `.gitea/workflows/kis_data_collection.yml` , `tools/validate_kis_api_credentials_v1.py` , `Temp/test_kis_data_collection.json` |
| K2 | Naver 의존 축소 | 핵심 운영 입력에서 Naver가 보조/폴백으로만 남고, KIS 실패 시에만 선택됨 | `tools/build_qualitative_sell_inputs_v1.py` , `tools/fetch_naver_market_data_v1.py` |
| K3 | 결과값이 SQLite에 기록됨 | KIS 결과가 `outputs/kis_data_collection /kis_data_collection.db` 또는 `Temp/*db` 로 적재되고 row_count>0 | SQLite DB 테이블, `tools/run_kis_data_collection_v1.py` , `Temp/test_kis_data_collection.db` |
| K3 | 결과값이 SQLite에 기록됨 | KIS 결과가 `src/quant_engine /kis_data_collection.db` 또는 `Temp/*db` 로 적재되고 row_count>0 | SQLite DB 테이블, `tools/run_kis_data_collection_v1.py` , `Temp/test_kis_data_collection.db` |
| K4 | 실패가 투명하게 남음 | KIS 실패 시 `status` , `source_counts` , `error` 가 숨지지 않고 JSON/DB에 남음 | `Temp/test_kis_data_collection.json` , validator 로그 |
| K5 | 운영 자동화가 유지됨 | 스케줄/수동 실행에서 동일 계약을 유지하고, seed-first/SQLite 우선 문구가 유지됨 | `.gitea/workflows/kis_data_collection.yml` , `tools/run_kis_data_collection_v1.py` , `docs/GATHERTRADINGDATA_XLSX_OPERATING_RUNBOOK.md` |