Commit Graph

468 Commits

Author SHA1 Message Date
b9aea81d14 docs(insta): InstaCards 분해 결과 하네스·README 반영 2026-07-10 14:02:12 +09:00
b60a511cb6 docs(refactor): spec CATEGORY_COLORS 배치 코멘트 정정 (co-locate)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 14:01:28 +09:00
ad81f150a5 refactor(insta): Trends 3패널+PromptTemplatesEditor 추출 → InstaCards shell 확정 2026-07-10 13:51:41 +09:00
06b6717eb9 refactor(insta): SlatesPanel/SlateDetail/PagesStrip 추출 (Cards 탭 우측) 2026-07-10 13:45:00 +09:00
a8d1c5dfca refactor(insta): TriggerPanel/KeywordsPanel 추출 (Cards 탭 좌측) 2026-07-10 13:38:37 +09:00
dfe621362d refactor(insta): instaUtils(fmtDate)+usePollTask 훅+StatusBadge/TaskStatusBox 추출 2026-07-10 13:31:23 +09:00
25a8be6e23 docs(refactor): InstaCards 분해 구현 계획 (4 task)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 11:29:17 +09:00
44fd423161 docs(refactor): InstaCards 분해 설계 (서브프로젝트 4)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 11:21:27 +09:00
f688229c95 feat(infra): naver-fetch 워커 2D 표시 — fetcher 라벨·수집 상태·Naver Fetch 타이틀
BE가 /api/agent-office/nodes에 등재한 naver-fetch(kind=fetcher) 워커 카드가
데이터 구동 2D 패널에 자동 표시되도록 statusVisual 매핑 보강.
- kindLabel('fetcher') → '수집 워커'
- workerStateLabel state:'fetching' → '수집 중'
- WORKER_TITLES 'naver-fetch' → 'Naver Fetch'
TDD: statusVisual.test.js 3케이스 추가(RED→GREEN).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 11:02:16 +09:00
9de96f5851 merge: PortfolioTab 모듈 분해 리팩토링 (671→74줄 shell + portfolio/ 8모듈) 2026-07-10 10:39:49 +09:00
d018b9eedf docs(portfolio): PortfolioTab 분해 결과 하네스·README 반영 2026-07-10 10:38:31 +09:00
5064dc2b93 refactor(portfolio): 보유행/브로커섹션 추출 → PortfolioTab shell 축소 2026-07-10 10:28:30 +09:00
ca5adbf4a4 refactor(portfolio): 예수금 패널 CashPanel 컴포넌트 추출
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 10:20:56 +09:00
6f98c0a84d refactor(portfolio): 추가폼/총자산요약/자산추이차트 컴포넌트 추출
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 10:16:25 +09:00
81c9a5d692 refactor(portfolio): formatPriceTime util + PriceSessionBadge 추출 + 테스트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 10:10:42 +09:00
afc28c64cf docs(refactor): PortfolioTab 분해 설계·계획
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 10:08:39 +09:00
c1da59574f merge: RealEstate 모듈 분해 리팩토링 (909→190줄 shell + useComplexes 훅)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-10 09:58:44 +09:00
5ecda580f7 refactor(realestate): 데이터 로직 useComplexes 훅 추출 → RealEstate shell 축소
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 23:57:57 +09:00
bf834dae7f refactor(realestate): 카드/지도패널/일정/분석/모달 표현 컴포넌트 추출
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 23:06:16 +09:00
e578c41485 refactor(realestate): 상수·데이터·순수헬퍼를 realEstateUtils로 추출 + 테스트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 22:57:01 +09:00
96de7e714d docs(refactor): RealEstate 분해 설계·계획
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 22:54:18 +09:00
795f1d9bab merge: Subscription 모듈 분해 리팩토링 (1647→67줄 shell) + 기능 모듈 구조 컨벤션
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 18:22:30 +09:00
7f29931f93 docs(refactor): CLAUDE.md 모듈 분해 표기 정정(components/8→10, shell 67줄)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 18:20:56 +09:00
6bcf4c96e4 docs: 기능 모듈 구조 컨벤션 하네스(CLAUDE.md)·README 기록
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 18:14:28 +09:00
4f5d7796c1 refactor(subscription): 4개 탭 컴포넌트 추출 → Subscription을 shell로 축소
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 18:09:57 +09:00
5eaca69f78 refactor(subscription): 공고 카드/상세/캘린더 컴포넌트 추출
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 17:58:58 +09:00
d2dae3d042 refactor(subscription): StatusBadge 컴포넌트 추출 + 스모크
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 17:51:15 +09:00
d82550610a refactor(subscription): 상수·순수헬퍼를 subscriptionUtils로 추출 + 테스트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 17:47:08 +09:00
15cb30311e docs(refactor): 기능 모듈 구조 컨벤션 + Subscription 분해 설계·계획
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 17:43:09 +09:00
1b4fba3c19 merge: 실매물 매물·안전마진 UI (/realestate/listings) FE
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 16:58:22 +09:00
f7c7394a94 fix(listings): ToolsTab 제출·disclaimer 테스트 추가 + 수집 완료 폴링
최종 리뷰 반영: (1) ToolsTab 제출→중첩객체·disclaimer 렌더 경로 테스트
2건 추가(최고위험 미검증 경로), (2) handleCollect의 고정 3초 타임아웃을
collected_at 변경 기반 폴링(최대 60s)으로 교체 — 진행 중을 완료로 오표시
하지 않도록.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 16:39:34 +09:00
690964c994 feat(listings): Listings shell+스타일+라우트 배선 + 청약 교차링크 + 문서
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 16:28:27 +09:00
17b1348f5d fix(listings): 조건 로드 실패 시 무한 로딩 대신 에러 표시
리뷰 지적: getListingsCriteria 실패 시 c=null로 남아 '불러오는 중…' 가
영구 표시되고 에러 메시지가 unreachable. 가드를 loading/!c로 분리해
실패 시 에러를 렌더 + 실패 경로 테스트 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 16:23:40 +09:00
0431ae6887 feat(listings): 조건 편집 탭(equity·소득 포함 부분 PUT) + 스모크
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 16:17:12 +09:00
9fc023da9d feat(listings): 판정 도구 탭(안전마진 체커+예산 계산기, disclaimer) + 스모크
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 16:11:39 +09:00
ffd306859f test(listings): 매물 빈-상태 스모크 assertion을 버튼과 겹치지 않게 좁힘
리뷰 지적: /매물이 없습니다|수집/ 의 |수집 이 항상 존재하는 '수집 실행'
버튼과 매치 → 빈-상태 미검증. /매물이 없습니다/ 로 좁혀 실제 검증.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 16:08:53 +09:00
4869e3c97a feat(listings): 매물 목록 탭(필터·판정 tier·수집) + 스모크 테스트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 14:40:38 +09:00
ed81f73f13 feat(listings): realestate 실매물/안전마진/예산 API 헬퍼 8종
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 14:37:22 +09:00
a5e33b70df feat(listings): 실매물 tier/금액 순수 헬퍼 + 테스트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 14:32:52 +09:00
a087c3d1e5 docs(listings): 실매물 매물·안전마진 설계·구현 계획
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 14:31:41 +09:00
dec696b16e feat(stock): 매매알람 카드에 reason(근거 문자열) 표시
BE가 /api/stock/trade-alerts에 reason 필드 추가(사람이 읽는 조건별 근거,
텔레그램 💡 라인과 동일). AlertCard가 reason을 primary 내러티브로,
formatDetail(detail)을 secondary 숫자 근거로 표시. reason은 문자열이라
안전(detail 객체는 formatDetail로 이미 크래시 방지).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-09 13:05:57 +09:00
d57f9b9b65 fix(stock): 매매알람 detail 객체 렌더 크래시(React #31) 방지
/api/stock/trade-alerts의 alerts[].detail은 condition별 가변 객체
({ma50,ma200,severity} 등)인데 JSX 자식으로 직접 렌더 → React #31로
페이지 크래시(워커가 실제 알람 발화 시작하며 발현, BE msg #17).

formatDetail 헬퍼 추가: 객체를 안전 문자열로 변환(알려진 키 한글 라벨,
*_pct 퍼센트, null 값 스킵, 미정의 키도 원문 폴백 — 스키마 가정 없음).
AlertCard가 detail 대신 formatDetail(detail) 렌더.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 22:06:11 +09:00
970c8164e0 docs: README에 관심종목 탭(실시간 매매 알림 연동) 반영
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 11:08:18 +09:00
cb15ae1d24 merge: 관심종목 탭 (watchlist CRUD + 매매 시그널 알림) FE
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 10:04:55 +09:00
6bf36f34f0 fix(stock): watchlist 렌더 크래시 가드·성공 시 폼 리셋·정렬 테스트
- watchlistUtils: Object.hasOwn 가드 + Object.freeze (프로토타입 키 → 함수 반환 방지)
- useWatchlist.add: boolean 반환 + 재진입 가드; 성공 시에만 폼 리셋
- byFiredAtDesc 멀티 알림 정렬 테스트 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 02:13:59 +09:00
3656ee9a59 feat(stock): 거래 데스크에 관심종목 탭 등재 + API 문서 갱신
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 02:03:46 +09:00
e8091a0391 feat(stock): WatchlistTab 컴포넌트 + wl-* 스타일 + 스모크 테스트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 01:58:24 +09:00
a52fd0db8f feat(stock): watchlist API 헬퍼 + useWatchlist 훅(낙관적 CRUD·알림) + 테스트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 01:49:44 +09:00
ae33aa4def feat(stock): 관심종목 탭 순수 헬퍼(watchlistUtils) + 테스트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 01:44:34 +09:00
3e73077b29 docs(stock): 관심종목 탭 설계·구현 계획
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
2026-07-03 01:43:03 +09:00