# T745 — fit stale concurrency tests

> Status: `done`  
> Milestone: `M4` · Phase C  
> Kind: `test` · Est. change: `~190 lines`

## Goal

鎖定 stale 保存、產品更新快照、純同名排除與並行 merge 的端到端 domain 行為。

## Depends on

- T742、T743、T744

## Inputs

- `../spec.md` 驗收 #2–#8、#12
- 代表性 CandidatePost 與 Product fixtures

## Outputs

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/backend/internal/module/radar/usecase/product_fit_integration_test.go` | add | scorer→merge→primary cases |
| `apps/backend/internal/module/radar/repository/product_match_race_test.go` | add | concurrent same/different product merge |

## Behavior

- 20 天貼文 rejected/stale 但 match reasons 完整保存。
- Product 更新不重寫同 Opportunity 舊 match。
- race 結果無 duplicate，人工 primary 保留。

## Out of scope

- HTTP 與前端
- 真平台抓取

## Acceptance

- [x] 具名覆蓋 stale／snapshot／same-product／override／並行 merge；普通測試通過。

```bash
cd apps/backend && go test ./internal/module/radar/... -race -count=1
```

Implementation result (2026-08-10): added stale-candidate evidence retention,
immutable product snapshot, and concurrent same/different-product merge tests;
the memory repository keeps one match per product and preserves human primary
overrides. The requested race command was attempted, but this environment has
CGO enabled without a `gcc` compiler, so the race binary cannot be built here.
