---
phase: implementation
agent: implementation-advisor
agent_version: 1
generated_at: 2026-06-29T12:10:00+09:00
workstream: W3-3-posting-board-fix1
concerns: []
concerns_checked: true
planned_workers: 0
actual_workers: 0
---

# 파일 소유권 맵 (W3-3 fix1 — backward 보정)

> 발원 = 구현단계(§2.6). verification FAIL + adversarial SSRF 감사 결함 전수 보정.
> 보정 대상 파일이 2개(SsrfSafeFetcher / FeedParser, 보안핵심 + 강결합)이고 두 파일 모두
> 내부 로직이 상호 일관성을 요구하는 보안 수정이라 advisor 직접 편집을 선택(아래 계량).
> 정상 산출물(XSS sanitize·매퍼·컨트롤러·DDL·OgPreviewService) 불변.

## 변경 파일 (결함번호 매핑)

| 파일 | 변경 유형 | 결함 | 담당 |
|---|---|---|---|
| src/main/java/com/pandoli365/bibimbap/security/SsrfSafeFetcher.java | modify | 결함1·2·3 | advisor 직접 |
| src/main/java/com/pandoli365/bibimbap/service/FeedParser.java | modify | 결함4 | advisor 직접 |
| src/test/java/com/pandoli365/bibimbap/security/SsrfSafeFetcherTest.java | modify | 결함5 (+2·3 커버리지) | advisor 직접 |
| Dockerfile | 변경 없음 | 결함1 (불요) | - |
| pom.xml | 변경 없음 | 결함1 (불요) | - |

> 결함4 의 FeedParserTest 픽스처는 DOCTYPE 미포함(정상 RSS) — 픽스처 정정 불요.
> "Content is not allowed in prolog" / "DOCTYPE is disallowed" stderr 는 broken-input/XXE
> 테스트의 정상(graceful empty) 부산물 로그였음. 유일 Failure 는 pubDate→publishedAt null.

## 계량 (advisor 직접 선택 근거)
- planned_workers: 0 / actual_workers: 0 (worker 미spawn)
- 사유: 파일 수 3 < 8 임계 + 결함1/2/3 이 동일 파일(SsrfSafeFetcher) 내 강결합 보안 로직
  (연결 메커니즘 변경 ↔ 포트 allowlist ↔ IP 차단대역 ↔ 테스트 훅)이라 단일 손에서
  일관성 보장 필요 → 병렬화 이득 0, 충돌 위험만 증가. 보안핵심은 분할보다 일관 편집 우선.

## 충돌 회피
- 각 파일 정확히 1 손(advisor). 교차 소유 0.
- 다른 W·정상 산출물 미접근.
