202 Commits

Author SHA1 Message Date
머니페니
efbe0f5c3e fix: 로컬 네트워크 접근 시 로그인 불가 문제 해결
- frontend: crypto.subtle(Secure Context 전용)을 Next.js Route Handler로 대체
  - src/app/api/auth/login/route.ts 신규 생성
  - Node.js crypto.createHash('sha256')로 서버사이드 해싱
  - http://192.168.x.x 등 insecure HTTP 환경에서도 동작
  - api.ts에서 클라이언트 사이드 hashPassword() 제거

- backend: UserResponse 응답 직렬화 시 500 에러 수정
  - UserResponse.email을 EmailStr → str로 변경
  - admin@local 처럼 TLD 없는 내부 이메일도 응답 가능
  - UserCreate.email은 EmailStr 유지(입력 검증은 엄격하게)
2026-05-27 22:51:57 +09:00
머니페니
e8eabe61ab ci: remove gitea production deploy workflow 2026-05-27 22:02:49 +09:00
머니페니
d1a9f89397 docs: plan mac mini primary migration 2026-05-27 22:02:25 +09:00
머니페니
a7a053fdb3 chore: test CI after secrets fix
All checks were successful
Deploy to Production / deploy (push) Successful in 1m49s
2026-05-26 23:02:30 +09:00
머니페니
b3f18c3bd8 fix: preserve postgres container during CI deploy to prevent DB auth failure
Some checks failed
Deploy to Production / deploy (push) Failing after 4m36s
2026-05-26 22:55:34 +09:00
머니페니
d0189b3bdc fix: remove docker compose down to prevent production downtime during CI deploy
Some checks failed
Deploy to Production / deploy (push) Failing after 1m0s
2026-05-26 22:50:44 +09:00
머니페니
a52247bb25 chore: trigger Actions test
Some checks failed
Deploy to Production / deploy (push) Failing after 2m30s
2026-05-26 22:43:32 +09:00
머니페니
da8b182b71 docs: add 2026-05-24 session work memo 2026-05-26 22:35:39 +09:00
머니페니
25115b33dd fix: resolve 5 site inspection issues (2026-05-26)
ISSUE-1: ETFPriceCollector 좀비 프로세스 재발 방지
- etf_price_collector: 루프마다 heartbeat() 호출 추가
- admin API: POST /api/admin/collect/reset-stuck 엔드포인트 추가

ISSUE-3: 헤더 제목 "대시보드" 고정 버그
- new-header.tsx pageTitles에 누락된 7개 경로 추가

ISSUE-4: 대시보드 파이 차트 미렌더링
- DonutChart Legend를 Recharts 외부로 분리하여 파이 공간 확보

ISSUE-5: daily_snapshots records_count 항상 0
- PriceService에 ETFPrice 테이블 fallback 추가
2026-05-26 22:35:02 +09:00
머니페니
ac0984ed04 chore: trigger deployment 2026-05-24 23:14:00 +09:00
머니페니
6412c40caf feat: add recent KJB sector candidate analysis 2026-05-24 21:08:03 +09:00
머니페니
0bcf5bbf23 fix: bulk fallback price collection 2026-05-14 23:40:55 +09:00
머니페니
5a452e4714 fix: harden screening data collection
Some checks failed
Deploy to Production / deploy (push) Failing after 12h57m55s
2026-05-14 23:32:59 +09:00
머니페니
0b66eae847 feat: improve KJB screening workflow
All checks were successful
Deploy to Production / deploy (push) Successful in 3m5s
2026-05-14 07:52:28 +09:00
머니페니
c97f73ab0c fix: delete all duplicate portfolios in seed_data to ensure idempotency
All checks were successful
Deploy to Production / deploy (push) Successful in 2m2s
2026-05-13 22:48:01 +09:00
머니페니
fc0a24888d chore: trigger deployment
All checks were successful
Deploy to Production / deploy (push) Successful in 2m32s
2026-05-13 22:31:28 +09:00
머니페니
625ffadcab perf: bulk-fetch prices in generate_snapshots to reduce API calls
OpenAPI: date당 1회 호출 (기존 ticker×date회)
pykrx: ticker당 전체 기간 조회 1회 (기존 date×ticker회)
date별 sleep(1) 제거
2026-05-13 22:15:22 +09:00
머니페니
de5ff34db6 fix: support KRX OpenAPI ticker fields 2026-05-13 22:05:09 +09:00
머니페니
da9abd3e93 docs: CLAUDE.md에서 AI가 이미 아는 내용 제거
Architecture/Environment 섹션, 파일 목적 설명, snake_case 컨벤션,
docker-compose up 등 코드에서 유추 가능한 내용을 삭제하고
프로젝트 고유 정보만 남김
2026-05-13 22:02:49 +09:00
머니페니
49e60b7048 fix: rename migration revision id to avoid varchar(32) overflow and duplicate id
All checks were successful
Deploy to Production / deploy (push) Successful in 6m5s
2026-05-10 17:01:58 +09:00
머니페니
ba9c92f034 fix: alembic multiple heads merge
Some checks failed
Deploy to Production / deploy (push) Failing after 1m14s
2026-05-10 16:57:23 +09:00
머니페니
120a8546cb fix: 테스트 리포트 보완 계획 전체 구현
Some checks failed
Deploy to Production / deploy (push) Failing after 2m38s
2026-05-10 16:44:05 +09:00
머니페니
76e3220e77 feat: 에이전트 기능 추가 (LLM 서비스, 에이전트 API, 테스트)
All checks were successful
Deploy to Production / deploy (push) Successful in 3m10s
2026-05-06 20:56:45 +09:00
머니페니
34d09d9d34 feat: 김종봉식 KOSPI 종목발굴 전략 구현
Some checks failed
Deploy to Production / deploy (push) Failing after 6m46s
- KOSPIMarketStateDetector: KOSPI MA 기반 시장 상태 판단 (bull/neutral/bear/crash)
- VolumeScreener: 거래대금 2000억+ 스크리닝 (상한가 우선, 희소성 체크, 대형주 예외)
- SectorPortfolioManager: 섹터 기반 비중 배분
- KJBScreeningSignalGenerator: 눌림목 진입, 5MA 손절, 단계적 익절
- KISTradeExecutor: KIS API 자동 매수/매도 (기본값 모의투자)
- ScreeningSignal / AutoOrder DB 모델 추가
- screening API 엔드포인트 추가
- 스케줄러 잡 3종 추가 (08:30/5분/15:35)
- Price.trading_value 컬럼 추가
- MarketIndex 테이블 추가 (KOSPI/KOSDAQ 지수 일봉)
- IndexCollector 추가 (일일 수집 잡 등록)
- intraday_exit_check 시간 필터 추가 (09:05~15:20 KST)
- 드라이런 스크립트 추가 (scripts/screening_dryrun.py)
2026-05-05 23:03:53 +09:00
머니페니
9ab232ba12 feat: KRX Open API migration with pykrx fallback
- Add pykrx-openapi dependency
- New krx_client.py wrapper module
- ETFCollector: Open API bulk fetch + pykrx fallback
- ETFPriceCollector: Open API date-based bulk + pykrx fallback
- StockCollector: Open API base_info + daily_trade + pykrx fallback
- PriceCollector: Open API date-based bulk + pykrx fallback
- ValuationCollector: pykrx retained (Open API has no PER/PBR)
- generate_snapshots.py: Open API + pykrx fallback
- Auto-switch based on KRX_OPENAPI_KEY env var
- All 278 tests passing
2026-04-17 23:07:09 +09:00
머니페니
5009168246 feat: transaction modal - add per-unit price label + total amount field
All checks were successful
Deploy to Production / deploy (push) Successful in 3m42s
- Rename '가격' → '1주당 가격'
- Add '총 금액' field with auto-calculation
- Price ↔ Total synced via quantity
2026-04-16 22:51:13 +09:00
머니페니
ae244153d6 feat: generate portfolio snapshots from KRX market prices
All checks were successful
Deploy to Production / deploy (push) Successful in 1m47s
- New script: scripts/generate_snapshots.py
- Fetches actual ETF closing prices from KRX for each month-end
- Computes portfolio value from cumulative holdings at each date
- Generates 12 monthly snapshots (2025-04 ~ 2026-03)
- Added to CI/CD deploy pipeline
2026-04-15 23:42:12 +09:00
머니페니
c7178eb084 ci: add KRX credentials + seed data step to deploy workflow
All checks were successful
Deploy to Production / deploy (push) Successful in 4m15s
2026-04-15 22:17:35 +09:00
머니페니
072b6059d4 fix: KRX data collection + TIGER 200 ticker fix + trade history seed
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
- Upgrade pykrx 1.2.3 → 1.2.6 (KRX login session support)
- Add KRX_ID/KRX_PW env vars for KRX authentication
- Enhance error handling in all pykrx-dependent collectors
  - ETFCollector: raise KRXDataError with login hint
  - ValuationCollector: raise RuntimeError with login hint
  - StockCollector/PriceCollector/ETFPriceCollector: JSONDecodeError handling
- Fix TIGER 200 ticker: 069500 → 102110 in seed data
- Rebuild seed_data.py from actual 33 trade records
- Add trade_history_raw.csv as source data
- Fix pension_allocation recommendation: KODEX 200 → TIGER 200
- Add ticker dropdown to transaction add modal (frontend)
- Update .env.example with KRX credentials
- All 276 tests passing
2026-04-15 22:16:42 +09:00
머니페니
862c1637bd fix: add resilience to ETFCollector and ValuationCollector
Some checks failed
Deploy to Production / deploy (push) Has been cancelled
- ETFCollector: retry once on JSONDecodeError/ConnectionError with 3s delay
- ValuationCollector: fallback to previous 3 business days on KeyError/empty data
- Both: graceful skip on persistent failure, never delete existing DB data
- Add test_collector_resilience.py (9 tests)
2026-03-29 22:45:20 +09:00
머니페니
3dcbcd3080 fix: resolve TypeScript type errors in benchmark and drawdown Tooltip formatter
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
2026-03-29 10:04:48 +09:00
머니페니
12d235a1f1 feat: add 9 new modules - notification alerts, trading journal, position sizing, pension allocation, drawdown monitoring, benchmark dashboard, tax simulation, correlation analysis, parameter optimizer
Phase 1:
- Real-time signal alerts (Discord/Telegram webhook)
- Trading journal with entry/exit tracking
- Position sizing calculator (Fixed/Kelly/ATR)

Phase 2:
- Pension asset allocation (DC/IRP 70% risk limit)
- Drawdown monitoring with SVG gauge
- Benchmark dashboard (portfolio vs KOSPI vs deposit)

Phase 3:
- Tax benefit simulation (Korean pension tax rules)
- Correlation matrix heatmap
- Parameter optimizer with grid search + overfit detection
2026-03-29 10:03:08 +09:00
머니페니
fd03744bc9 chore: remove galaxis-agent docs from galaxis-po repo
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
Move design specs, plans, and HANDOFF.md to their proper home
in the galaxis-agent repository. Clean up CLAUDE.md references.
2026-03-21 13:47:37 +09:00
머니페니
70ef97dd62 docs: apply review feedback to CI/CD plan
Some checks failed
Deploy to Production / deploy (push) Has been cancelled
2026-03-20 23:26:27 +09:00
머니페니
ab7b3b1e05 docs: add galaxis-agent CI/CD implementation plan 2026-03-20 23:25:22 +09:00
머니페니
5dd2ec862d docs: apply review feedback to CI/CD design spec 2026-03-20 23:24:16 +09:00
머니페니
ab6cdcb501 docs: add galaxis-agent CI/CD design spec 2026-03-20 23:22:07 +09:00
머니페니
fc58eca634 docs: add Phase 5 implementation plan with review fixes 2026-03-20 22:26:07 +09:00
머니페니
9b2b3921c8 docs: apply review feedback to Phase 5 deploy spec 2026-03-20 22:21:22 +09:00
머니페니
47c873a962 docs: add Phase 5 deployment automation design spec 2026-03-20 22:18:53 +09:00
머니페니
2b1e7cefbe docs: update CLAUDE.md with galaxis-agent reference and strengthened rules
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
2026-03-20 19:03:35 +09:00
머니페니
149560c083 docs: add Phase 1 implementation plan for galaxis-agent
17-task plan covering: open-swe fork setup, code cleanup,
git_utils extraction from github.py, config module, Docker
sandbox/compose setup, ARM64 compatibility validation.
Two review iterations applied.
2026-03-20 14:28:14 +09:00
머니페니
43ff569aa3 docs: add galaxis-agent autonomous SWE agent design spec
Design for an autonomous development agent that forks open-swe
(LangGraph + Deep Agents) with Gitea webhook + Discord bot triggers,
Docker sandbox execution on Oracle VM A1 (ARM64), and Claude API.
Includes phased implementation roadmap from conservative (PR-only)
to autonomous (auto-merge with E2E gates).
2026-03-20 14:06:53 +09:00
머니페니
f6db08c9bd feat: improve security, performance, and add missing features
- Remove hardcoded database_url/jwt_secret defaults, require env vars
- Add DB indexes for stocks.market, market_cap, backtests.user_id
- Optimize backtest engine: preload all prices, move stock_names out of loop
- Fix backtest API auth: filter by user_id at query level (6 endpoints)
- Add manual transaction entry modal on portfolio detail page
- Replace console.error with toast.error in signals, backtest, data explorer
- Add backtest delete button with confirmation dialog
- Replace simulated sine chart with real snapshot data
- Add strategy-to-portfolio apply flow with dialog
- Add DC pension risk asset ratio >70% warning on rebalance page
- Add backtest comparison page with metrics table and overlay chart
2026-03-20 12:27:05 +09:00
머니페니
49bd0d8745 chore: add frontend/test-results to .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 23:19:41 +09:00
머니페니
2ad2f56d31 docs: add project config docs, analysis report, and e2e signal cancel test
Add CLAUDE.md and AGENTS.md for AI-assisted development guidance,
analysis report with screenshots, and Playwright-based e2e test for
signal cancellation flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 23:18:16 +09:00
머니페니
f818bd3290 feat: add walk-forward analysis for backtests
- Add WalkForwardResult model with train/test window metrics
- Create WalkForwardEngine that reuses existing BacktestEngine
  with rolling train/test window splits
- Add POST/GET /api/backtest/{id}/walkforward endpoints
- Add Walk-forward tab to backtest detail page with parameter
  controls, cumulative return chart, and window results table
- Add Alembic migration for walkforward_results table
- Add 8 unit tests for window generation logic (100 total passed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:33:41 +09:00
머니페니
741b7fa7dd feat: add skip/limit pagination to prices, snapshots, and transactions APIs
Add paginated responses (items/total/skip/limit) to:
- GET /api/data/stocks/{ticker}/prices (default limit=365)
- GET /api/data/etfs/{ticker}/prices (default limit=365)
- GET /api/portfolios/{id}/snapshots (default limit=100)
- GET /api/portfolios/{id}/transactions (default limit=50)

Frontend: update snapshot/transaction consumers to handle new response
shape, add "Load more" button to transaction table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:32:34 +09:00
머니페니
98a161574e security: migrate JWT from localStorage to httpOnly cookie
Eliminates XSS token theft by storing JWT in httpOnly Secure cookie
instead of localStorage. Backend sets cookie on login and clears on
logout. Token extraction uses cookie-first with Authorization header
fallback for backward compatibility with existing tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:30:47 +09:00
머니페니
60d2221edc feat: add manual transaction entry UI with modal dialog
Add "거래 추가" button to the transactions tab with a modal dialog for
manually entering buy/sell transactions (ticker, type, quantity, price, memo).
Refreshes portfolio and transaction list after successful submission.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:22:56 +09:00