부모
부모 이슈: #385
의존: Sub 1~5
작업 범위
1. `internal/processor/fetcher/worker/resolver.go` → `internal/publisher/resolver.go` 이동
- `PriorityResolver` / `ChainablePriorityResolver` / `CompositeResolver` / `ExplicitPriorityResolver` / `SourcePriorityResolver` / `RuleBasedPriorityResolver` / `DefaultPriorityResolver` 모두 이동
2. Publisher 의 모든 PublishX 가 resolver chain 통과
```go
func (p *Publisher) publishCore(ctx, job *core.CrawlJob, headers map[string]string) error {
priority := p.resolver.Resolve(job)
topic := topicForPriority(priority)
...
}
// PublishSeed / PublishChained / PublishRetry / PublishUpgrade 모두 publishCore 통과
```
3. 일관성 효과
- 시드, chained, retry, upgrade 모든 경로가 동일 resolver chain 통과
- 운영자가 한 곳에만 resolver 룰 추가하면 모든 경로에 적용
- ExplicitPriorityResolver 가 chain 1순위 → entry.Priority / job.Priority 명시 시 우선
4. 테스트
- 기존 worker resolver 테스트 → publisher resolver 테스트로 이동
- 각 PublishX 의 resolver 통과 검증 (integration test)
영향 / 위험
완료 조건
부모
부모 이슈: #385
의존: Sub 1~5
작업 범위
1. `internal/processor/fetcher/worker/resolver.go` → `internal/publisher/resolver.go` 이동
2. Publisher 의 모든 PublishX 가 resolver chain 통과
```go
func (p *Publisher) publishCore(ctx, job *core.CrawlJob, headers map[string]string) error {
priority := p.resolver.Resolve(job)
topic := topicForPriority(priority)
...
}
// PublishSeed / PublishChained / PublishRetry / PublishUpgrade 모두 publishCore 통과
```
3. 일관성 효과
4. 테스트
영향 / 위험
완료 조건