Commit Graph

48 Commits

Author SHA1 Message Date
kjh2064 2af3681fb9 WBS-7.9: keep push CI on core validation only 2026-06-22 01:47:57 +09:00
kjh2064 cfcf65f822 WBS-7.9: split CI core and ui/storage validation jobs 2026-06-22 01:42:38 +09:00
kjh2064 47184a2f25 WBS-7.9: trim CI cache-hit overhead and wait for deploy readiness 2026-06-22 01:38:11 +09:00
kjh2064 6ed2da7a9d WBS-7.9: wait for snapshot admin readiness before verify 2026-06-22 01:30:14 +09:00
kjh2064 744372f75c WBS-7.9: target snapshot admin deploy host runner 2026-06-22 01:07:39 +09:00
kjh2064 05ee10079d WBS-7.9: improve snapshot admin run clarity 2026-06-22 01:02:17 +09:00
kjh2064 316e1fd08c WBS-7.9: clarify snapshot admin smoke gate 2026-06-22 00:58:21 +09:00
kjh2064 d280ef8e69 WBS-7.9: split snapshot admin deploy workflow 2026-06-22 00:51:42 +09:00
kjh2064 e32cbf49e5 WBS-7.9: wire snapshot admin CI deploy 2026-06-22 00:42:02 +09:00
kjh2064 3002149fce fix: dry-run mock KIS validation in workflows 2026-06-21 23:22:22 +09:00
kjh2064 610b9b1330 fix: reinstall workflow deps on cached venvs 2026-06-21 23:17:57 +09:00
kjh2064 febd85d95e fix: synology py38 compatibility and KIS validation deps 2026-06-21 23:09:55 +09:00
kjh2064 d5d0c6f4be Track trading seed JSON and checkout trigger ref 2026-06-21 22:35:26 +09:00
kjh2064 a95198cf8c Fix Gitea seed recovery and workflow guards 2026-06-21 22:33:30 +09:00
kjh2064 4c00229442 KIS·정성매도·스냅샷어드민·캘리브레이션을 CI/npm/문서에 통합 배선
이전 커밋들에서 추가한 기능을 실제로 동작시키는 배선 작업.

- .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 20:11:26 +09:00
kjh2064 ee4d1fdab8 캘리브레이션 거버넌스 도구 + WBS-7.1/7.2 실증 격차 가시화
캘리브레이션 백로그 → 우선순위 → 검토리포트 → 승인목록 → 결정초안으로
이어지는 임계값 보정 거버넌스 파이프라인을 추가하고, 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 스냅샷은 "역사적, 현재로 인용 금지"로 명시
2026-06-21 20:07:32 +09:00
kjh2064 f99f9821d2 스냅샷 어드민 웹 UI + WBS-7.10 Tabler 테이블 그리드 조회
settings/account_snapshot SQLite를 직접 편집하는 잠금/승인/변경이력
기반 웹 에디터를 추가하고, 2026-06-21 비판적 리뷰에서 요청된 테이블별
그리드 조회 기능(Tabler CDN)을 /tables 경로로 덧붙인다.

- 잠금(lock)·승인(approval)·undo·변경로그 전체 감사 추적
- KIS Collection 대시보드 통합(별도 SQLite, 워크스페이스 DB와 분리)
- WBS-7.10: 워크스페이스/KIS수집/정성매도전략 3개 SQLite, 11개 테이블을
  Tabler 그리드로 조회 — 테이블명은 고정 화이트리스트와 정확히 일치할
  때만 SQL에 사용(SQL 인젝션 방지, 단위테스트로 검증)
2026-06-21 20:06:55 +09:00
kjh2064 da0e1b0f7e 비기계적 매도전략(가치보존) + 위성종목 추천 엔진 추가
매크로·실적·펀더멘털·공매도수급·호가미시구조·대내외 변수 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 일일 스케줄(장마감 후) + 파이프라인 계약 검증 게이트
2026-06-21 20:05:55 +09:00
kjh2064 4cb206a269 KIS Open API 조회전용 연동 + 직접매매 절대금지 안전게이트
매수/매도 주문 및 계좌 잔고조회를 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)
2026-06-21 20:04:44 +09:00
kjh2064 0823d1b5a8 fix: CI venv hash-cache + sector exposure renderer + auditor registration
- ci.yml: venv 해시 기반 캐싱 적용 (validate_specs.py md5 기준), requirements.txt 불필요 스텝 제거
- harness_coverage_auditor.py: sector_trend_analysis.py, etf_representative_monitor.py PY_FILES 등록
- render_operational_report.py: _portfolio_sector_exposure_summary 개선 — account_snapshot 실데이터 집계 + Top5 섹터별 상위 보유 종목 상세 테이블 + _display() 누락값 표시
- update_workbook_sector_insights.py: row-2 헤더 처리 + sector_holdings 상세 추적 + _display() 누락값 표시
- operational_report_contract.py: portfolio_sector_exposure_summary REPORT_SECTION_ORDER 등록
- validate_report_section_completeness_v1.py: 동일 섹션 추가
- build_architecture_boundaries_v2.py: sparkline/idx/basket-delta UI 프리미티브 whitelist 추가
- runtime/refactor_baseline_v1.yaml: 엔트로피 베이스라인 갱신 (1692 files, gate=PASS)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-14 21:16:32 +09:00
kjh2064 ea172633bb fix(ci): Notify PR Result 에서 always() 제거 — act_runner v0.2.11 job failure 오보 수정
Synology act_runner v0.2.11에서 push 이벤트 시
'if: always() && github.event_name == pull_request'
조건이 스텝을 failure로 잘못 처리해 job conclusion이 failure로 오보됨.

실제 CI는 모든 검증 단계 통과(Job succeeded) 했으나 API가 failure 반환.
always() 제거로 push 이벤트에서 스텝이 정상적으로 skip 처리됨.
PR 이벤트에서만 알림 발송 (실패 시 알림 없음은 허용 가능한 트레이드오프).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-14 09:57:34 +09:00
kjh2064 d20e6dce35 ci: Validate Behavioral Coverage 스텝 제거
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>
2026-06-13 22:37:48 +09:00
kjh2064 fb8833b66e ci: node_modules 영구 캐시 추가 (package-lock.json 해시 기반)
매 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>
2026-06-13 22:12:48 +09:00
kjh2064 30f6814fcf ci: ARMv7l 제약 반영 — 순수Python 검증 게이트로 재편
DS216j 32-bit ARM 환경 제약:
- numpy/pandas: 공식 휠 없음(PyPI/piwheels/conda-forge 모두)
- gcc: 미설치, 소스 빌드 불가

CI 역할 재정의:
- 코드 구조 검증 게이트 (pyyaml, openpyxl만 설치)
- validate_specs / formula_registry / golden_coverage / behavioral_coverage / harness_auditor
- numpy 의존 스텝(ingest, release_dag, bundle) 제거 → 로컬 실행

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 21:54:10 +09:00
kjh2064 393e4df27c ci: numpy/pandas ARM 설치를 micromamba(conda-forge)로 전환
32-bit ARM(armv7l) + Python 3.8 조합은 공식 pip 휠 없음:
- PyPI: manylinux aarch64만 제공 (64-bit)
- piwheels: cp38 armv7l 휠 없음 (cp311+ 만 제공)
- 소스 빌드: gcc 미설치로 불가

해결: micromamba(linux-32) + conda-forge
- conda-forge는 armv7l 네이티브 바이너리 제공
- /volume1/gitea/micromamba, /volume1/gitea/conda_py38 영구 저장

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 21:50:36 +09:00
kjh2064 d5121753e3 ci: ARM venv 설치 piwheels 사용 및 설치 완료 체크 강화
- 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>
2026-06-13 21:39:31 +09:00
kjh2064 acc279d69e ci: Configure Runtime Paths 스텝 내 PATH 인라인 export 추가
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>
2026-06-13 21:34:31 +09:00
kjh2064 1fda3ca0d2 ci: 시놀로지 설치 경로 직접 참조로 변경 (설치 단계 제거)
- 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>
2026-06-13 21:27:25 +09:00
kjh2064 b6ef6dfd74 ci: numpy 빌드 호환성을 위해 Cython<3.0 으로 버전 제한 추가 2026-06-13 20:56:27 +09:00
kjh2064 d8a8917c55 ci: 파이프라인에서 인라인 stub 생성을 제거하고 환경 레벨 가이드로 우회 2026-06-13 20:46:51 +09:00
kjh2064 692ae74010 ci: distutils stub 파일에 CygwinCCompiler, MSVCCompiler mock 클래스 정의 추가 2026-06-13 20:42:26 +09:00
kjh2064 4c01393891 ci: 표준 라이브러리 distutils에 cygwinccompiler.py, msvccompiler.py stub 생성 추가 2026-06-13 20:40:48 +09:00
kjh2064 db3a19800d ci: setuptools==59.6.0 강제 재설치로 빌드 격리 해제 컴파일 호환성 확보 2026-06-13 20:39:14 +09:00
kjh2064 05a2056a3a ci: armv7l 환경의 numpy, pandas 빌드를 위해 --no-build-isolation 및 의존성 사전설치 추가 2026-06-13 20:37:59 +09:00
kjh2064 9e23f0a65a ci: 파이프라인에서 numpy 빌드 오류 해결을 위해 setuptools 60 미만 다운그레이드 추가 2026-06-13 20:34:56 +09:00
kjh2064 4151cd2345 Fix: 빌드 격리로 인한 numpy 재컴파일을 원천 차단하기 위해 --no-build-isolation 추가 및 SETUPTOOLS_USE_DISTUTILS=stdlib 구성 2026-06-13 20:33:11 +09:00
kjh2064 d0e38cd864 Fix: 파이썬 3.8 컴파일 예방을 위해 의존성 버전을 3.8 최적 버전으로 고정 구성 2026-06-13 20:30:42 +09:00
kjh2064 4535033746 Fix: 파이썬 3.8 환경의 소스 컴파일 원천 차단을 위해 --prefer-binary 옵션 복구 및 추가 2026-06-13 20:29:15 +09:00
kjh2064 7a4ce3842f Fix: 파이썬 3.8 컴파일 환경 호환을 위한 setuptools<60.0 다운그레이드 추가 2026-06-13 20:27:08 +09:00
kjh2064 d367c272da Fix: 파이썬 3.8 컴파일 방지를 위해 pip install에 --prefer-binary 옵션 추가 2026-06-13 20:24:22 +09:00
kjh2064 784388adeb Fix: 파이썬 3.8 컴파일 에러 방지를 위해 numpy pre-compiled 버전을 선 설치하도록 구성 2026-06-13 20:23:04 +09:00
kjh2064 2626a0e4a3 Fix: 파이썬 3.8 환경에 호환되는 get-pip.py 다운로드 URL로 교체 2026-06-13 20:16:57 +09:00
kjh2064 3fc43367b9 Fix: 시놀로지 CI 러너의 pip 부재 오류 해결 및 --user 영역 설치 구성 2026-06-13 20:12:02 +09:00
kjh2064 5f619186ae Fix: 시놀로지 CI 러너의 node 부재 해결을 위해 Checkout 단계를 수동 git 명령으로 대체 2026-06-13 20:05:39 +09:00
kjh2064 5eaf4fb931 feat: add PR CI result notification comment
CI 완료(성공/실패) 시 PR에 자동 코멘트 추가.
Gitea 구독 알림과 연동 -> kjh2064@gmail.com 이메일 알림 발송.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 18:05:22 +09:00
kjh2064 25f771cc77 feat: WBS-4.4 evaluation_dashboard + CI fix + Synology Gitea 최적화
[WBS-4.4] 일별 성과 모니터링 대시보드 구현
- updateEvaluationDashboard_(): gdf_04_execution_quality.gs에 GAS 함수 신규 추가
  · daily_history 시트 → total_asset, mdd_pct
  · macro 시트 KOSPI Close → 1D 수익률 (직전 행 Close 차이 계산)
  · evaluation_dashboard 탭 자동 생성/업데이트 (Date/Total_Asset/KOSPI_Close/
    Portfolio_Return_1D_Pct/KOSPI_Return_1D_Pct/Alpha_1D_Pct/Cumulative_Alpha_Pct/MDD_Pct)
- run_all() Step-8로 연결 (gas_lib.gs), runRebalanceSheet_ 이후 실행

[CI/CD] validate_formula_registry.py 수정 (WBS-5.1 완성)
- spec/formulas/manifest.yaml 신규 생성 (domains/manifest.yaml 동일 내용)
- RetirementAssetPortfolio.yaml에 formula_registry_manifest 등록
- validate_specs.py PASS 복원 → run_release_dag_v3 gate=PASS step_count=55

[CI/CD] Synology Gitea act_runner 환경 최적화
- runs-on: ubuntu-latest → self-hosted (NAS host-based runner)
- actions/setup-python / actions/setup-node 제거 (NAS에 직접 설치)
- python → python3 명시
- actions/checkout@v3 → v4

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 16:46:44 +09:00
kjh2064 08f4fa2293 [Sprint-3] Complete WBS-2.1, 3.2, 4.1, 5.1 - Fundamental V2, Engine V2, Performance Ledger, and CI/CD 2026-06-13 15:54:14 +09:00
kjh2064 eabacde438 feat: Sprint-3 (펀더멘털 피드 완성, MDD 모니터링 구축, Gitea CI/CD 파이프라인 추가) (2026-06-13)
주요 변경 사항:
- tools/ingest_fundamental_raw.py 수정:
  * yfinance 패키지를 활용한 Yahoo Finance 펀더멘털 연동 파이프라인 전면 개편
  * FCF, OCF 및 순부채(totalDebt - totalCash) 자동 폴백 계산을 구현하여 40개 NULL 컬럼 수집 완성
- src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs 수정:
  * 일별 자산 및 MDD를 기록하는 logDailyAssetHistory_ 함수 구현 및 runDataFeed() 연동
- tools/build_realized_performance_v1.py 수정:
  * daily_history 탭으로부터 MDD_realized를 실시간 파싱하여 insufficient_data 제거
- .gitea/workflows/ci.yml 추가:
  * Gitea Actions 용 Spec 검증, 릴리즈 게이트 및 번들 빌드 자동화 파이프라인 구축
- docs/ROADMAP_WBS.md 수정:
  * WBS-2.1, WBS-3.4, WBS-5.1 과업의 체크박스를 완료[x] 상태로 갱신
- 검증 결과: npm run full-gate (55단계 릴리즈 게이트) PASS 검증 완료

Co-Authored-By: Antigravity AI <noreply@google.com>
2026-06-13 14:31:40 +09:00