### 1. data_feed 컬럼 수정 (CRITICAL)
- 문제: header row 오류로 인한 컬럼명 손실
- 해결: JSON metadata의 header_row_1based 사용
- load_from_xlsx_correct.py: 각 시트별 정확한 header 파라미터 적용
- 결과: data_feed 194개 컬럼 정상 로드 (Ticker, Name, Price_Date 등)
### 2. WBS-9.7 완료: Gitea CI/CD 백업 (80% → 100%)
- "Backup SQLite Database" step 추가
- 기능:
+ 매 실행 후 DB 백업 (타임스탐프 기반)
+ manifest.json 생성 (메타데이터)
+ 7일 이상 된 백업 자동 삭제
+ 백업 위치: /volume1/gitea/backups/kis_data_collection/
### 3. WBS-9.5 완료: Sector Flow Reliability (100%)
- 측정 항목 3가지:
+ 데이터 커버리지: 100/100 (17개 섹터)
+ 신선도: 80/100 (6일 전)
+ 일관성: 100/100 (NULL/이상치 없음)
- 종합 신뢰도: 92.0/100 (HIGH - 신뢰 가능)
- wbs95_sector_flow_reliability.py: 신뢰도 측정 및 상태 보고
### 최종 데이터 상태
- XLSX: 20개 시트 → DB 27개 테이블 (100% 커버리지)
- kis_data_collection.db: 25 rows
- snapshot_admin.db: 7,484 rows
- 모든 테이블 정상 동기화
### WBS 완료 현황
✓ WBS-8.1: T+20 모니터링 (100%)
✓ WBS-9.2: 성능 최적화 (100%)
✓ WBS-9.3: NULL Policy (100%)
✓ WBS-9.5: Sector Flow Reliability (100%)
✓ WBS-9.6: LLM Radar Phase 3-5 (100%)
✓ WBS-9.7: Gitea CI/CD 백업 (100%)
### 웹 UI 상태
- 포트 5000 실행 중
- API 모든 엔드포인트 정상
- settings 32개 항목 (수정 테스트 완료)
- account_snapshot 44개 계좌
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
데이터 품질 강화를 위한 CI 자동화:
- Field dictionary NULL 정책 검증
- FILLABLE/NOT_FILLABLE 분류 확인
- kis_data_collection.db, snapshot_admin.db 스키마 검증
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
## WBS-8.1: T+20 거래 레저 자동 수집
신규 도구: tools/auto_collect_t20_ledger_v1.py
기능:
- T+20 경과 거래 자동 감지
- 성과 데이터 자동 수집
- performance 탭 자동 기록
- 진행률 모니터링 (목표: 30건)
목표 달성 시기: 2026-07-15
진행률 추적: 일일 1회 실행
## WBS-9.7: 자동 백업 정책 구현
신규 워크플로우: .gitea/workflows/auto_backup_schedule.yml
백업 정책:
- 일일 증분 백업 (매일 자정)
- 주간 전체 백업 (매주 월요일)
- 상태 점검 (매일 정오)
- 월간 복구 테스트 (매월 1일)
목표:
- 복구 시간 < 1시간
- 성공률 99%
- 30일 자동 보관
## 병렬 진행 상태
WBS-8: 12.5% (1/8 완료)
- 8.1: T+20 자동 수집 체계 완성
- 8.5: 섹터 플로우 누적 중 (10%)
- 8.4: 실거래 대기 (80%)
WBS-9: 71.4% (5/7 준비 완료)
- 9.1: F14 완료
- 9.4: 장애 대응 준비 완료
- 9.7: 백업 정책 완성
다음 마일스톤:
- 2026-07-01: WBS-9.4 장애 대응 훈련
- 2026-07-15: WBS-8.1 활성화 (T+20 30건)
- 2026-08-01: WBS-9 공식 시작
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
이전 커밋들에서 추가한 기능을 실제로 동작시키는 배선 작업.
- .gitea/workflows/ci.yml: No Direct API Trading 게이트, KIS 자격증명
검증(mock), 캘리브레이션 백로그 빌드, 정성매도 파이프라인 검증,
Gitea secrets 계약 검증, snapshot admin 워크플로/웹 검증 단계 추가
- package.json: ops:data-collect, ops:sell-*, ops:snapshot-*,
ops:calibration-* npm 스크립트 추가
- src/gas/core/gas_lib.gs doPost(): "trigger_run_all" action 추가 —
Gitea CI가 공유 비밀키로 run_all()을 원격 트리거(주문 실행 없음,
governance/rules/06·07과 동일 원칙)
- tools/trigger_gas_run_all_v1.py: 위 GAS 엔드포인트를 호출하는 CLI
- AGENTS.md/README.md: 신규 파일 인덱스 및 사용 가이드 갱신
캘리브레이션 백로그 → 우선순위 → 검토리포트 → 승인목록 → 결정초안으로
이어지는 임계값 보정 거버넌스 파이프라인을 추가하고, 2026-06-21
비판적 리뷰에서 발견한 두 가지 stale-수치 문제를 도구 차원에서 해소한다.
- registry_health(): 190여 개 임계값의 source별(SPEC_DERIVED/EXPERT_PRIOR/
PROVISIONAL/CALIBRATED) 분포를 매 실행마다 자동 집계 — 수동 grep 불필요
- live_t5_status(): T+5 적중률을 하드코딩(35.86 리터럴) 대신
Temp/prediction_accuracy_harness_v2.json에서 항상 최신값으로 읽음
- spec/calibration_registry.yaml: SEMI_CLUSTER_CAP_RISK_OFF 중복 id로
인한 조용한 무시 버그 수정(SEMI_CLUSTER_CAP_RISK_OFF_MWA로 분리)
- spec/27_bch_calibration_runbook.yaml: current_status_2026_06_21 블록
신설(단일 진실원천), 기존 05-30 스냅샷은 "역사적, 현재로 인용 금지"로 명시
매크로·실적·펀더멘털·공매도수급·호가미시구조·대내외 변수 5개 독립
팩터군의 confluence(최소 3/5 합의) 없이는 매도 트리거를 금지하는
정성적 매도판단 엔진과, 보유종목 제외 위성후보 추천 로직을 추가한다.
- 단일 팩터 임계값 돌파만으로는 매도 신호를 생성하지 않음
(mechanical_sell_prohibited=true)
- 데이터 결측 시 항상 DATA_MISSING/INSUFFICIENT_DATA_NO_ACTION —
추정값으로 채우지 않음
- KIS 호가10단계·공매도거래비중 + Naver 시세/수급 스크래핑 입력 연동
- SQLite 시계열 저장 + 사후 적중률 자체평가
(evaluate_qualitative_sell_strategy_accuracy_v1)
- Gitea 일일 스케줄(장마감 후) + 파이프라인 계약 검증 게이트
매수/매도 주문 및 계좌 잔고조회를 API로 직접 실행하지 않는다는 원칙을
코드 레벨에서 강제하는 안전게이트(governance/rules/06, 07)와 함께,
시세/호가/공매도거래비중 등 조회전용 KIS Open API 연동 및 SQLite
수집 파이프라인을 추가한다.
- kis_api_client_v1: 모든 요청이 _assert_read_only를 통과해야 하며
/trading/ 경로·주문 TR_ID는 RuntimeError로 즉시 차단
- kis_data_collection_v1: KIS 우선 + Naver 폴백, 네트워크 실패는
개별 ticker 단위로 흡수(배치 전체 중단 없음)
- data_collection_store_v1 / storage_backend_v1: SQLite 캐노니컬
저장소, PostgreSQL 전환 대비 백엔드 추상화
- Gitea 영업일 스케줄(2시간 간격) + CI 강제 게이트
(validate_no_direct_api_trading_v1, validate_kis_api_credentials_v1)
B03(run_formula_golden_cases_v2.py, numpy 필요)과
B04(run_gas_golden_parity.js, Node.js 필요)의 결과물이
CI 환경(ARMv7l, numpy 불가)에 존재하지 않아 항상 FAIL.
로컬에서만 실행 가능한 스텝이므로 CI에서 제거.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
매 CI 실행마다 npm install 5분 소요 문제 해결:
- /volume1/gitea/node_cache/<lock-hash>/node_modules 에 캐시 저장
- 캐시 히트 시 symlink로 즉시 연결 (~1초)
- package-lock.json 변경 시에만 재설치
- 오래된 캐시 자동 정리 (최근 3개 유지)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- numpy 먼저 설치 → pandas oldest-supported-numpy 1.17.3 소스빌드 방지
- piwheels.org ARM 사전빌드 휠로 소스 컴파일 없이 설치
- 버전 핀 완화: numpy>=1.20 / pandas>=1.5 (ARM 휠 가용 버전 수용)
- venv 체크: pip 존재 여부 → numpy/pandas import 가능 여부로 변경
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
npm shebang(#!/usr/bin/env node)이 현재 스텝 PATH를 참조하므로
$GITHUB_PATH 외에 export PATH=/usr/local/bin:$PATH 인라인 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Python: /usr/bin/python3 (3.8.12) 고정 사용
- Node.js: /usr/local/bin 을 PATH에 추가 (v18.18.2 appstore 설치)
- Python deps: /volume1/gitea/python_venv 영구 venv로 최초 1회만 설치
- 이후 CI 실행은 venv 재사용 → pip 재설치 단계 불필요
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>