c7036212e2
merge: co-gahusb DNS-rebinding 421 핫픽스
2026-06-12 10:20:05 +09:00
756d9fccf3
fix(co-gahusb): DNS-rebinding 보호 비활성화 (public Host 421 해결)
...
- FastMCP가 기본 host(127.0.0.1)에서 DNS rebinding 보호를 자동 활성화 →
allowed_hosts=localhost만 허용 → nginx가 넘기는 Host gahusb.synology.me가 421.
- 실 보안은 nginx 앞단 Bearer 인증(MCP 도달 전 401)이므로 Host 검증 비활성화.
- 재현/회귀 테스트 추가 + config.CO_BUS_KEY import-순서 격리 버그 수정 (23 통과).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 10:20:04 +09:00
ea5cf49cea
merge: co-gahusb 세션 협업 팀 버스 (MCP + Redis + 어드바이저리 락)
...
- FastMCP streamable-http 서버(12툴) + Bearer 인증 + Redis 백엔드
- 메시지/작업보드/락/team_log, 동시쓰기 분리(소유권 파티션 + 락)
- compose(18920)/nginx(/api/co/)/deploy 등재 + 클라이언트 배선
- 22 테스트 (전부 통과)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 07:51:00 +09:00
d07a8dad76
feat(co-gahusb): BE 클라이언트 배선 (.mcp.json + 역할 블록 + 셋업 문서)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 07:34:08 +09:00
d74bc189b5
feat(co-gahusb): deploy SERVICES 화이트리스트 등재
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 07:32:10 +09:00
d4405204f9
feat(co-gahusb): nginx public /api/co/ 라우팅 (Authorization forward, no-buffer)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 07:31:44 +09:00
2c157334dc
feat(co-gahusb): docker-compose 서비스 등재 (18920, depends_on redis)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 07:31:28 +09:00
d840859fc9
fix(co-gahusb): update_task 존재하지 않는 task_id not_found 가드
2026-06-12 07:30:03 +09:00
e115eee159
feat(co-gahusb): FastMCP 서버 (12 툴 + Bearer 인증 + health)
2026-06-12 07:25:47 +09:00
fc1ebf134d
docs(checkpoint): oversight 프론트 배포 완료 반영
...
ActivityTimeline 프론트 NAS 라이브 반영 완료(SSH 직접 배포, Z: 매핑 우회).
56d0f5b 위 새 커밋 — feat/co-gahusb-team-bus가 56d0f5b를 base로 의존하므로
amend 대신 신규 커밋.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 07:23:45 +09:00
d71937b6ee
feat(co-gahusb): team_log 활동 피드 (capped, TDD)
2026-06-12 07:23:14 +09:00
0cc4505af7
feat(co-gahusb): 작업 보드 (create/claim/update/list, TDD)
2026-06-12 07:22:55 +09:00
9c18f0a467
feat(co-gahusb): 메시지 inbox (post/read/mark_read, TDD)
2026-06-12 07:22:36 +09:00
8212a51f90
feat(co-gahusb): 어드바이저리 락 (acquire/release/heartbeat/list, TDD)
2026-06-12 07:20:30 +09:00
0d466b235c
feat(co-gahusb): 스캐폴드 (Dockerfile·requirements·config)
2026-06-12 07:19:51 +09:00
1129600341
docs: co-gahusb 팀 버스 구현 플랜 (11 태스크, TDD)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 01:31:06 +09:00
2a0a2f3490
docs: co-gahusb 세션 협업 팀 버스 설계 spec
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 01:26:11 +09:00
56d0f5b8a8
docs(checkpoint): 5/25~6/12 작업 전면 반영 + 보드 재편
...
5/22 이후 누락분(tarot/saju 분리·신설, _shared 로그, lotto v3 백테스트,
stock 보유종목 인텔, nginx CVE, insta 카드뉴스 v2 + 자율발급, 에이전트
오버사이트, music 파이프라인 신뢰성) 완료 타임라인에 반영. 미완성 큰
기능(Video Studio 프론트) + 후속(music stuck 감지) + 백로그 재편.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 01:18:48 +09:00
796ac6d39f
test(agent-office): test_init_and_seed stale 단언 수정 (고정 개수→subset)
...
에이전트 레지스트리가 2→7로 늘어 len==2/{stock,music} 고정 단언이 stale였음. 핵심 시드 subset 검증으로 변경(레지스트리 확장에 견고). 이번 세션 audit에서 반복 플래그된 부채.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:48:58 +09:00
18cea427be
docs(music): 파이프라인 retry 엔드포인트 문서화
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:46:04 +09:00
6c178006d3
feat(agent-office): ytpub_retry 텔레그램 콜백 → music-lab retry 프록시
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:39:31 +09:00
084e4f1b4d
feat(agent-office): youtube_publisher 파이프라인 실패 텔레그램 알림+재시도 버튼
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:36:38 +09:00
d048251a97
feat(agent-office): service_proxy pipeline_retry/list_failed_pipelines (+ music-lab status=failed 필터)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:33:28 +09:00
ef1a7a92fd
fix(music-lab): retry 레이스 가드(retrying 전이) + failed_step 검증 + backoff 빈리스트 가드
...
- Fix 1: retry_pipeline이 bg.add_task 직전 상태를 'retrying'으로 전이 → 동시 retry 409 방지
- Fix 2: test_retry_failed_pipeline_retriggers에 called[pid/step] assert 추가
- Fix 3: failed_step이 STEPS에 없으면 409 (엉뚱한 prefix 방지)
- Fix 4: STEP_RETRY_BACKOFF_SEC 빈 리스트 시 IndexError → 0으로 폴백
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:31:19 +09:00
44dbe7c426
feat(music-lab): POST /pipeline/{id}/retry — 실패 step 수동 재개
...
terminal failed 파이프라인을 마지막 실패 step부터 재개.
publish + youtube_video_id 있으면 중복 업로드 방지 409.
pytest.ini에 pythonpath=.. 추가 (PYTHONPATH=.. 없이 TestClient 테스트 구동).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:23:24 +09:00
e90e25d78f
feat(music-lab): orchestrator step 자동 재시도 (publish 제외)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:20:29 +09:00
d638666659
feat(music-lab): get_last_failed_step — 파이프라인 재개용 실패 step 판별
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:18:07 +09:00
51eff1538e
docs(plan): music 파이프라인 신뢰성·복구 구현 계획 (7 tasks, TDD)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:12:33 +09:00
ffb96de61d
docs(spec): music/YouTube 파이프라인 신뢰성·복구 설계
...
step 자동 재시도(publish 제외) + terminal failed의 실패 step 수동 재개(텔레그램 [재시도]). orchestrator + retry 엔드포인트 + youtube_publisher 실패 알림.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 00:08:01 +09:00
c8ce6cb617
fix(packs-lab): 일회성 토큰 jti 영속화 (SQLite) — 재시작 replay 방어 유지
...
인메모리 _used_jti set은 컨테이너 재시작 시 비워져 TTL 내 토큰 replay가 가능했음(webhook 배포가 잦아 실재 구멍). 영속 볼륨(PACK_BASE_DIR)의 jti_store.db에 사용 jti를 기록(PK 원자성), 만료 항목은 lazy 정리. verify_upload_token이 jti_store.consume 사용. TDD 3 + 기존 replay 테스트 보존.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 15:08:02 +09:00
3c11b75a5f
fix(agent-office/lotto): deep CuratorError fallthrough + urgent 발송 재시도
...
결함1: deep signal-check에서 curate_weekly가 CuratorError면 전체 check가 abort돼 sim/drift 시그널이 미평가되던 문제 → try/except로 confidence만 포기하고 sim/drift는 계속(curate_result=None fallthrough).
결함2: send_urgent_signal 실패가 outer except로 빠져 task 실패+미마킹이던 문제 → _send_urgent_with_retry(3회/60s) 추출, 최종 실패해도 raise 안 함(시그널 평가·태스크 보존), 성공 시에만 mark_signal_notified. TDD 3 신규 테스트.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 08:48:08 +09:00
2c2828c8f0
feat(agent-office): /activity 통합 피드에 필터 추가 (agent_id/type/status/days)
...
오버사이트 UI용. get_activity_feed가 브랜치별 WHERE로 필터, total도 동일 반영. status는 task 전용(주면 log 제외). 값은 ? 바인딩, type은 브랜치 선택만이라 injection 안전. 신규 5 테스트.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 08:25:19 +09:00
c62e3e70b9
fix(insta-lab): ranked가 judge에 보낼 후보를 상위 30개로 cap
...
미사용 키워드 대량 누적 시 judge 프롬프트/응답이 토큰 한도를 넘어 파싱 실패→claude 신호 전부 null로 degrade되던 문제(프로덕션 확인됨) 해결. base score 상위 JUDGE_CANDIDATE_CAP(30)개만 judge·선별에 적용해 claude 신호 일관 보장.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 03:07:29 +09:00
e1b1944f43
feat(insta): dedup_window_days config end-to-end wiring (spec 6.4)
...
- insta-lab ranked_keywords: add dedup_window_days Query param (default 14, ge=1, le=90); pass to db.list_recent_issued_topics
- service_proxy.insta_ranked: add dedup_window_days param (default 14); include in GET params
- InstaAgent.on_schedule: read dedup_window_days from custom_config (default 14); pass to insta_ranked call
- test_ranked_respects_dedup_window: verifies window param gates eligible flag correctly
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:55:46 +09:00
149e7c40fe
docs(insta): 자율 발급 API 2개 문서화 (ranked, decision)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:50:24 +09:00
28d489770a
test(agent-office): 하위호환(비자율 경로) + issue_regen 콜백 테스트
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:48:18 +09:00
9d50aa4256
feat(agent-office): issue_* 텔레그램 콜백 디스패치
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:41:13 +09:00
bc0f583a0f
feat(agent-office): issue_approve/reject/regen 콜백 처리
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:38:56 +09:00
7c5ca15b64
feat(agent-office): InstaAgent 자율 발급 경로 + 커버 프리뷰
...
- on_schedule에 autonomous_issue 분기 추가 (eligible 픽만 선별·max_per_day 제한)
- _generate_and_preview 메서드: 슬레이트 생성 → 커버 PNG → 인라인 승인 버튼
- messaging.send_photo 신규 추가 (multipart/form-data, reply_markup 지원)
- insta_get_preferences 실패를 warning으로 격리해 자율 경로 중단 방지
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:36:26 +09:00
9fc764a78c
feat(agent-office): service_proxy insta_ranked/insta_decision
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:32:43 +09:00
83398c8413
fix(insta-lab): 선별 zero-pref 크래시 가드 + judge max_tokens 상향 + 404 테스트
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:31:18 +09:00
7d1857c8a4
feat(insta-lab): GET /keywords/ranked + POST /slates/{id}/decision
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:23:33 +09:00
c3a6e78954
feat(insta-lab): Claude Haiku 카드가치 판단(graceful)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:21:09 +09:00
5d0e80fb49
feat(insta-lab): selection.py 순수 선별 점수(4신호)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:19:32 +09:00
af2fb57760
feat(insta-lab): 발행 상태 컬럼 + set_slate_decision/list_recent_issued_topics
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:14:48 +09:00
4d02d9c321
docs(plan): insta 자율 카드 발급 구현 계획 (9 tasks, TDD)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:11:32 +09:00
c99017e68c
docs(spec): insta 자율 카드 발급 (스마트 에이전트 3번) 설계
...
선별 지능(4신호)+카드별 승인 게이트+상태머신/발행이력. 접근법 A: insta-lab 선별·상태 소유, agent-office 오케스트레이션·텔레그램 승인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:05:51 +09:00
ce6c8d8f7d
docs(CLAUDE): 카탈로그 슬림화(966→484) + 서비스별 메모리 분담 + stale 수정
...
포트/nginx/API 엔드포인트 목록·cross-cutting 규칙만 CLAUDE.md에 유지. DB 스키마 세부·스케줄러·env·운영 히스토리는 service_<name>.md 메모리로 이관(§0 규칙 명시).
코드 대조로 발견한 stale 수정: insta 렌더는 Windows 워커(card_renderer.py DEPRECATED), lotto v3 backtest API 추가, music-lab 워커 위임, internal webhook X-Internal-Key 2중, /media video↔videos 구분 등.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 01:48:15 +09:00
0d1b04d322
fix(insta-lab): webhook이 렌더 PNG를 card_assets로 등록 (cutover 누락 복구)
...
2026-05-19 cutover(렌더를 Windows insta-render 워커로 이관)에서 card_assets 등록 단계가 새 설계에 누락됨. 구 card_renderer.render_slate가 NAS DB에 등록하던 것을, webhook은 task/slate status만 갱신하도록 만들어 card_assets가 영구 빈 상태 → /assets 404, /package 409, get_slate assets=0.
insta_update가 succeeded 시 워커 출력 디렉토리를 스캔해 실제 PNG만 card_assets에 등록(_register_rendered_assets). CARDS_DIR/{id}, INSTA_DATA_PATH/{id} 두 후보를 순서대로 스캔 → 경로 정합 전환기에도 견고. 신규 테스트 2건(등록 성공 / 파일 없으면 미등록).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 01:17:54 +09:00
8b6b251225
merge: 인스타 카드뉴스 품질 고도화 + zip 패키지 (Phase 1-5)
...
모던 미니멀 디자인 시스템 템플릿 + 카피 글자수 가이드 + zip 패키지 다운로드 API.
(렌더 견고화·템플릿 authoritative는 web-ai repo)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 13:39:35 +09:00