41ad56e3ef
feat(lotto): grade_tickets 매칭 채점 + 등수 매핑
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:49:49 +09:00
bb0e771a4a
feat(lotto): backtest_runs/winner_calibration 테이블 + CRUD
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:49:03 +09:00
160fc27279
docs(plan): 로또 자가학습 백테스트 구현 plan (7 Phase, TDD)
...
Phase 1 데이터모델+구매/채점 → 2 캘리브레이션+forward+백필 →
3 API+스케줄러 → 4 evolver lift 학습신호 → 5 agent-office 일요회고 →
6 web-ui 자율학습 탭 → 7 통합검증. 각 task TDD bite-sized + 멱등.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:44:21 +09:00
f3f6cccd33
docs(spec): 로또 자가학습 백테스트 & 캘리브레이션 설계
...
3종 스마트 에이전트 고도화 중 로또 1번. forward 가상구매(수천 장/회차)
+ winner 캘리브레이션(역대 백필) + 일요 회고 브리핑 + weight_evolver
학습 신호 강화(W-무관 결함 수정). null-model 베이스라인 내장으로
무작위 대비 우위를 정직하게 측정. NAS-first, Windows WSL 이전 가능 설계.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:37:25 +09:00
2bfbd1dd93
feat(P3): 5개 서비스 비즈니스 이벤트 logger.info 보강
2026-05-28 22:38:43 +09:00
c5c260aefc
feat(agent-office/scheduler): 매일 03:00 agent_logs 90일 retention cleanup
2026-05-28 08:39:33 +09:00
378f5210d4
feat(P2): stock/music-lab/insta-lab/realestate-lab access_log 적용 + AGENT_CONTAINER_MAP 4개 매핑
2026-05-28 08:38:36 +09:00
cfbb3c24b8
fix(lotto): _shared mount target 을 패키지 경로로 변경
...
마운트 `${RUNTIME_PATH}/_shared:/shared:ro` 가 컨테이너 안에서
`/shared/access_log.py` 만 노출하여 PYTHONPATH=/shared 에서 `from _shared.access_log import ...` 패키지 import 실패 (ModuleNotFoundError: No module named '_shared'). mount target 을 `/shared/_shared` 로 변경하여 `/shared/_shared/__init__.py` 가 패키지로 인식되게 함.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-28 08:29:03 +09:00
c7214b8896
fix(deploy): _shared 마운트 NAS 배포 실패 fix
...
deployer 컨테이너 안에서 docker compose 가 실행될 때 './_shared' 상대
경로가 deployer 내부 path '/runtime/_shared' 로 resolve 되어 host docker
daemon 이 mount source 를 찾지 못하는 문제. 추가로 deploy-nas.sh 의 SERVICES
화이트리스트에 _shared 미등재라 rsync sync 자체에서 빠져 host 에 디렉토리
가 생성되지 않음.
- scripts/deploy-nas.sh: SERVICES 에 _shared 추가
- docker-compose.yml: lotto volume 을 ./_shared → \${RUNTIME_PATH}/_shared 로 변경
- docs/superpowers/plans/...: Phase 2 task 11-14 의 docker-compose 패턴
동일 적용 (replace_all)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-28 05:09:17 +09:00
4224333219
refactor(agent-office/base): transition의 State 자동 로그 제거
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-28 02:47:41 +09:00
5613497367
feat(agent-office): /agents/{id}/logs 엔드포인트가 service /logs/recent 와 merge
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-28 02:46:44 +09:00
b25abea80a
feat(agent-office/db): get_logs에서 State: 자동 로그 제외 + delete_old_logs(90일)
2026-05-28 02:45:10 +09:00
ed30790f22
feat(agent-office): fetch_service_logs 추가 (path_prefix 정규식 필터)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-28 02:42:23 +09:00
1d723764b4
feat(agent-office): AGENT_CONTAINER_MAP 상수 추가 (Phase 1 lotto)
2026-05-28 02:40:18 +09:00
c0c4422c7c
build(lotto): PYTHONPATH=_shared + json-file logging 추가 (Phase 1 PoC)
2026-05-28 02:38:47 +09:00
fe4d3912a5
feat(lotto): _shared/access_log install (Phase 1 PoC)
2026-05-28 02:37:19 +09:00
f461f05ac0
feat(_shared): access_log 공용 모듈 추가 (ring buffer + middleware + /logs/recent)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-28 02:31:30 +09:00
dfd3b1bb17
docs(agent-office): docker logs 통합 타임라인 구현 계획
...
21개 task로 분해된 3-phase 실행 계획. Phase 1 (PoC, lotto 단일),
Phase 2 (4개 서비스 확장 + cleanup 스케줄러), Phase 3 (비즈니스 이벤트
보강). TDD 기반 task 구성, 모든 step 에 실제 코드/명령 포함.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-28 01:44:43 +09:00
809eec9b15
docs(agent-office): docker logs 통합 타임라인 설계 spec
...
agent-office LogTab에 각 서비스의 docker 로그(액세스 + 비즈니스 이벤트)를
통합 타임라인으로 노출하는 아키텍처를 정의. 5개 서비스 공용 _shared/access_log
모듈, ring buffer 기반 /logs/recent 엔드포인트, agent-office 측 merge 로직,
3단계 phase 분리 포함.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-28 01:23:21 +09:00
512ed59dcd
fix(nginx): /api/tarot/ proxy_read/send_timeout 300s→600s
...
3-card Claude 해석 응답이 truncation reroll 발생 시 90초+ 걸려 DSM Reverse
Proxy 또는 docker nginx에서 504 가능성. 600s 안전 마진 (saju/music과 동일
수준).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-27 13:19:24 +09:00
4ee4a1ae7d
docs(plan): 호령 사주 UI v2 리디자인 — Phase 1~6 implementation plan
...
spec(commit fd40777 )을 30+ task / 130+ step으로 분해. Phase 1: shell+토큰+공통
컴포넌트, Phase 2~5: home/saju/today/match 라우트 교체, Phase 6: v1 cleanup +
QA. 각 task는 test/run/implement/verify/commit 5-step 또는 시각 검증 step 포함.
self-review 통과 (spec 12절 모두 cover, placeholder/type inconsistency 없음).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 23:35:41 +09:00
fd40777177
docs(spec): 호령 사주 UI v2 리디자인 — 디자인 시스템 + 4 라우트 동시 교체
...
백호 사주도사 프로토타입(JSX 11파일 + styles.css)을 web-ui로 옮기는 작업의 spec.
주요 결정: (1) 사주 4 라우트 동시 리디자인 + /saju/me placeholder 신설 (2)
useViewportMode 1024px 분기로 모바일/데스크탑 컴포넌트 분리 (3) BottomNav 5항목
+ DesktopHeader 도입 (4) v1 components 12개 + SajuNav + Saju.css 전체 교체.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 23:24:22 +09:00
be9165efd2
fix(tarot-lab): max_tokens 1400→2800 + stop_reason 검사로 응답 truncation 처리
...
3-card spread 해석 응답이 1400 토큰 한계에서 잘려 JSON "Unterminated string" 파싱 실패가 reroll 2회 모두 발생하던 버그 수정.
- max_tokens 1400 → 2800 (saju-lab 2400 기준 + interactions 마진)
- stop_reason == "max_tokens" 검사 → 신규 TarotTruncated 예외로 truncation 명시화
- reroll feedback에 "각 카드 1~2문장으로 축약" 안내 추가 → 모델이 다음 응답 길이 조절
- truncation 시나리오 테스트 2개 추가 (1차 잘림→성공, 2회 모두 잘림→TarotError)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 22:55:28 +09:00
99dca8df64
fix(nginx): /api/image/ public gateway + /media/image/ 정적 서빙 추가
...
VideoStudio T5에서 누락된 image-lab의 외부 진입점. /api/internal/image/
(worker webhook 차단)만 있고 public /api/image/ 라우팅이 빠져 있어
catch-all /api/로 빠지면서 외부 호출이 잘못된 lab으로 가서 404.
video-lab 패턴(line 83)을 그대로 따라 image-lab gateway + image-render
결과 SMB 파일 정적 서빙 두 블록 추가.
memory: reference_nas_url_routing.md — 신규 lab 추가 시 nginx 7번째 등재 위치 영구 기록
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 22:24:10 +09:00
03e1dc1dbb
feat(saju-lab): /interpret 응답에 fortune_scores + lucky + monthly_flow 포함
2026-05-26 08:08:14 +09:00
f57c790437
feat(saju-lab): db.py — saju_records 3 컬럼 추가 (fortune_scores/lucky/monthly_flow) + 4 마이그레이션 테스트
2026-05-26 08:05:41 +09:00
030367da6c
feat(saju-lab): monthly_flow.py — 12개월 운세 흐름 (4 tests)
...
월간(月干)과 월지(月支)의 일간 관계를 이용한 12개월 운세 점수 계산:
- 월간 상생(生) 관계: +5~10점
- 월간 상극(剋) 관계: -8점
- 월지 육합(六合) 관계: +10점
- 월지 육충(六衝) 관계: -12점
- 월지 상생/상극: ±4점
점수 범위 0~100, 5단계 레이블 (정체/도전/변동/안정/성장)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 08:02:35 +09:00
429e3448e5
feat(saju-lab): lucky.py — 럭키 컬러/숫자/방향 + 행운/위험 알림 (6 tests)
2026-05-26 08:00:37 +09:00
579e7387be
feat(saju-lab): fortune_scores.py — 4 카테고리 점수 + overall (6 tests)
2026-05-26 07:58:02 +09:00
8ef0ba81f2
docs(plan): saju-lab UI v1 — 호령 사주 페이지 구현 plan
...
- Phase A 백엔드 확장 (Task 1-5): fortune_scores + lucky + monthly_flow + DB 마이그레이션 + 응답 확장
- Phase B 캐릭터 자산 (Task 6): horyung.png + saju_color_sheet.png에서 6 PNG 추출 (PIL)
- Phase C 프론트 구축 (Task 7-16): CSS 격리 + 컴포넌트 11개 + 3 페이지 + e2e 검증
- TDD + 빈번한 commit + 시안 1:1 매칭 목표
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 07:54:13 +09:00
afb4175bd5
docs(spec): saju-lab UI v1 — 호령 사주 페이지 설계
...
- 시안 4종(메인/오늘운세/궁합/사주풀이) + 호령 캐릭터 시트 + 컬러시트 기반
- v1 범위: 메인 + 사주풀이 + 오늘운세 (궁합은 v2 placeholder)
- 백엔드 확장: fortune_scores + lucky + monthly_flow 산출
- 입력 흐름: reading_id URL 공유 + useSajuReading 캐시
- 데스크탑 우선 + 태블릿 반응형
- CSS .saju-page scope로 격리 + Pretendard + Noto Serif KR 폰트
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 02:51:34 +09:00
af836df1ac
feat(healthcheck): tarot-lab(18250) + saju-lab(18300) 헬스체크 추가
...
deploy.sh/deploy-nas.sh/docker-compose.yml/nginx의 5위치는 이미 동기화됐으나
scripts/healthcheck.sh가 누락되어 있어 추가.
- 7. Tarot Lab: /health + /api/tarot/readings
- 8. Saju Lab: /health + /api/saju/readings
- 10. Frontend (nginx): /api/tarot/, /api/saju/ proxy 검증 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 21:02:02 +09:00
8123f758a8
feat(deploy): saju-lab 컨테이너 + nginx + 5위치 동기화
2026-05-25 20:29:34 +09:00
8ec3abb800
feat(saju-lab): main.py + routers (saju 6 + compat 5) + route tests
...
Phase 2 백엔드 마지막 task — FastAPI app · 11 endpoint · 10 route tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 20:28:08 +09:00
6d752acbe1
feat(saju-lab): interpret/pipeline.py — Claude 호출 + reroll 1회 (8 tests)
2026-05-25 20:23:38 +09:00
f995f8739f
feat(saju-lab): interpret/prompt + schema — 12항목 + 궁합 SYSTEM_PROMPT (8 tests)
2026-05-25 20:21:07 +09:00
cad65dc869
feat(saju-lab): config + Pydantic 모델 + db.py CRUD (saju + compat) — 10 tests
2026-05-25 20:18:19 +09:00
f4f518fc80
feat(saju-lab): compatibility.py — 두 사주 궁합 점수 + breakdown
...
- saju-web/app/compatibility/result/page.tsx의 calculateCompatibility() 1:1 매핑
- 알고리즘: base 50 ± (일간 오행 same/produce/overcome) ± (일지 6합/3합/충), clamp [0,100]
- breakdown: day_master_element + branch_interaction (delta + relation/flags + description)
- 17 unit tests passed (헬퍼 9개 + 통합 8개), 438/438 total
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 20:14:47 +09:00
db1f69c7a5
feat(saju-lab): daeun.py — 대운 8개 계산 (30/30 reference)
2026-05-25 20:09:46 +09:00
ebfade655a
feat(saju-lab): analysis.py — 오행/신강신약/용신/세운 (30/30 reference)
...
- calculate_detailed_element_balance: 가중치 오행 점수 (천간 1.0, 본기 1.0, 중기 0.5, 여기 0.3)
- calculate_element_score: 오행 비율 (%) — JS Math.round 호환
- analyze_day_master_strength: 신강/신약/중화 + score + reasons
(월령 득령/실령, 통근, 투출, 오행 비율 4단계 평가)
- estimate_yongshin: 용신/희신/기신 + explanation
(신강 → 식상/재성/관살 중 약한 2개, 신약 → 인성/비겁 중 약한 것, 중화 → 5행 중 약한 2개)
- calculate_seun: 올해 세운 + 4주 지지와 충/합 매핑
- perform_full_analysis: 위 5종 + branch_interactions + shinsal + gongmang + hidden_stems 통합
saju-web/lib/ai-interpretation.ts 와 1:1 매핑, 30 reference fixture 모두 통과 (180/180).
전체 saju-lab 테스트 389/389 passed.
JS Math.round 와 Python round() 의 banker-rounding 차이 보정을 위해 _js_round 헬퍼 추가.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 20:00:36 +09:00
234ccfe857
feat(saju-lab): shinsal.py — 지장간/신살/공망/지지 상호작용
2026-05-25 19:54:21 +09:00
3f0b7bcd74
feat(saju-lab): core.py — 60갑자 + 십성 + 십이운성 + calculate_saju (30/30 reference pass)
2026-05-25 19:48:28 +09:00
f91a74237b
feat(saju-lab): lunar.py — 음력↔양력 변환 (sxtwl)
2026-05-25 19:39:06 +09:00
95243a7f1f
fix(saju-lab): reference fixture 재생성 (solarlunar gzMonth 기반 + xfail 제거)
...
이전 fixture는 saju-web `getCurrentSolarTerm` 루프 버그로 30 케이스 모두 month branch='丑'으로 고정되어 검증 불가했음. saju-web을 임시 패치(solarlunar.gzMonth 직접 사용)하여 재생성한 뒤 패치는 되돌렸음. 결과: 12개 unique month branch + sxtwl과 49 테스트 전부 PASS.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 19:35:49 +09:00
07b5c32f2f
feat(saju-lab): solar_terms.py — sxtwl 기반 24절기 + 月支 매핑
2026-05-25 19:28:33 +09:00
4ddcd75453
feat(saju-lab): calculator/constants.py — 천간/지지/오행/지장간 상수
2026-05-25 19:20:34 +09:00
018459db88
feat(saju-lab): reference fixture 30 케이스 (TS 엔진 결과 추출)
2026-05-25 19:18:22 +09:00
42182014f0
feat(saju-lab): 스캐폴딩 — Dockerfile + requirements + 디렉토리 구조
2026-05-25 18:58:41 +09:00
03edfb04aa
refactor(agent-office): tarot 모듈 제거 (tarot-lab으로 cutover 완료)
...
- DELETE: app/tarot/ 디렉토리 (pipeline, prompt, schema 모듈)
- DELETE: app/routers/tarot.py (FastAPI 라우터)
- DELETE: 4개 tarot 테스트 파일 (test_tarot_*.py)
- MODIFY: app/main.py — tarot 라우터 import + register 제거
- MODIFY: app/models.py — 5개 Tarot* 클래스 제거
- MODIFY: app/config.py — 4개 TAROT_* 환경변수 제거
- MODIFY: app/db.py — 6개 tarot_readings CRUD 함수 제거
KEEP:
- tarot_readings CREATE TABLE 블록 (DB 호환성)
- CREATE INDEX ... tarot_readings 인덱스 2개
- scripts/migrate_tarot_to_lab.py (cutover 마이그레이션)
- tests/test_migrate_tarot.py (마이그레이션 테스트)
테스트: 88 pass (migrate_tarot tests 포함)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 18:54:12 +09:00
8b0c12b595
feat(deploy): tarot-lab 5위치(SERVICES/BUILD/CONTAINER/HEALTH/DATA) 동기화
2026-05-25 18:43:34 +09:00