# T040 — 話題簽章與必要概念群

> Status: `done`
> Milestone: `M4`
> Est. change: `~180 lines`

## Goal

完成後，所有候選都以原始 intent 的必要實體與概念群判定，泛用搜尋錨點不能單獨使結果入選。

## Depends on

- T001、T034

## Inputs

- 讀取 / 依賴：
  - 檔案：`apps/backend/internal/module/scout/usecase/activity_terms.go`、`service.go`
  - 既有能力 / API：normalizeSignal、searchAnchors、selected scan terms
  - Spec 段落：§4 流程 C、§9 #3/#4

## Outputs

### 程式變更（預期路徑）

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/backend/internal/module/scout/usecase/topic_signature.go` | add | 從 intent／terms 建立必要實體、概念群、alias 與 match 結果。 |
| `apps/backend/internal/module/scout/usecase/topic_signature_test.go` | add | 覆蓋作品名、多詞意圖、錨點、CJK 與英文大小寫。 |

### 行為變更

- 候選需命中每個必要概念群；「推薦／分享／工程師」等泛詞不能取代明確主題。

### API / 契約（若有）

- Match 結果提供命中核心，供 match_reason 使用；不暴露內部 tokenization。

## Out of scope

- 不做 embedding、個人化或 provider ranking。

## Acceptance

- [x] 外包後端與鬼滅案例阻擋同字不同題內容。
- [x] 指令：

```bash
cd apps/backend && go test ./internal/module/scout/usecase -run TopicSignature -count=1
```

驗收結果：新增 TopicSignature／TopicConcept 必要概念群、核／別名匹配與 anchor 排除；多概念、作品名、拆詞、CJK 與英文大小寫案例通過。

## Notes

優先重用目前 normalize 與 intent-aware terms，不建立平行規則。
