# T734 — ownership legacy domain integration

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

## Goal

以整合測試證明 product domain 不破壞舊資料，並阻擋跨 owner 與錯誤父子關係。

## Depends on

- T730、T731、T732、T733

## Inputs

- `../spec.md` 驗收 #1、#7、#10、#12、#13
- T703 fixtures

## Outputs

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/backend/internal/module/radar/usecase/product_domain_integration_test.go` | add | legacy、owner、parent、snapshot cases |
| `apps/backend/internal/logic/radar/product_contract_test.go` | edit | envelope／not-found safety |

## Behavior

- 舊 watch/opportunity 可 list/get/accept，不被回填。
- 他人 ID 回安全錯誤，不含對方名稱。
- 同貼文兩 Product 仍只有一 Opportunity。

## Out of scope

- scorer 與每日 sweep
- frontend

## Acceptance

- [x] legacy、owner isolation、multi-product single-opportunity cases are named tests.

```bash
cd apps/backend && make test-integration
```

Implementation result (2026-08-10): added memory integration coverage for legacy
generic reads, cross-owner denial, two ProductMatches on one Opportunity, and
same-product source merging without snapshot rewrite.
