# T031 — Memory Run store

> Status: `done`
> Milestone: `M3`
> Est. change: `~190 lines`

## Goal

完成後，MemoryStore 完整實作 Run repository 契約並成為後續 usecase 的快速 contract test double。

## Depends on

- T030

## Inputs

- 讀取 / 依賴：
  - 檔案：`apps/backend/internal/module/scout/repository/memory.go`
  - 既有能力 / API：MemoryStore mutex、Post/Homework storage
  - Spec 段落：§3、§4 流程 D–F、§8

## Outputs

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

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/backend/internal/module/scout/repository/memory.go` | edit | 保存 runs，實作 guarded transition、run/result page、seen、publish、delete、counts。 |
| `apps/backend/internal/module/scout/repository/memory_run_test.go` | add | 覆蓋排序、owner isolation、guard 與 paging。 |

### 行為變更

- 終態不倒退；run/result 順序都有 ID tie-breaker。

### API / 契約（若有）

- running/failed run 的 staged posts 不出現在公開 result page。

## Out of scope

- 不模擬 Mongo driver 細節或真 transaction。

## Acceptance

- [x] 同資料重複查頁順序一致，跨 owner 無資料洩漏。
- [ ] 指令：

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

驗收結果：3 MemoryRun tests passed。

## Notes

copy 回傳物件與 slice，避免測試呼叫者修改 store 內部狀態。
