**task-930.4 완료 보고** (dev2-team) **완료 보고서: Passive Feedback diff 감지 로직 구현** (9분 45초) **핵심 결과** `passive_feedback.py` (199줄)와 테스트 (178줄)를 TDD로 구현 완료. pytest 8/8 통과 (0.41초), pyright 0 에러, black/isort 준수. CLI 3개 서브커맨드(snapshot/detect/history)와 learnings_archiver 연동이 정상 작동한다. ## 생성/수정 파일 - `scripts/passive_feedback.py` (신규, 199줄) — diff 감지 엔진 + CLI - `scripts/tests/test_passive_feedback.py` (신규, 178줄) — 테스트 8건 ## 구현 상세 ### Phase 1: diff 감지 엔진 - `save_snapshot()`: 원본 파일을 `memory/skill-feedback/{skill}/snapshots/{timestamp}.txt`에 저장 - `detect_diff()`: difflib.unified_diff로 비교, 공백/포맷 변경 제외, AI로 learning 추출 - `_compute_meaningful_diff()`: remove/add 라인 strip() 정렬 비교로 공백만 변경 필터링 ### Phase 2: passive-diffs.jsonl - 스키마 준수: timestamp, skill_name, task_id, snapshot_path, diff_summary, diff_lines, learning_extracted, learning_id - `_save_diff_record()`로 append-only 기록 ### Phase 3: learnings 생성/수정: 2개 파일, 테스트: pyright 0 에러 **발견/해결 이슈 3건** 1. **파일명 hyphen vs underscore** — Python 모듈 임포트를 위해 `passive_feedback.py` (underscore) 사용. CLI 실행은 `python3 scripts/passive_feedback.py`로 동일 작동. 2. **black/isort 포맷 불일치** — 초기 생성 파일에 포맷 차이 발견, `black + isort` 적용 후 테스트 재통과 확인. 3. **anthropic mock 호환성** — `isinstance(block, TextBlock)` 대신 `getattr(block, "text", None)` 사용하여 mock 환경에서도 정상 작동하도록 처리.