# T060 — Live Run repository mapping

> Status: `done`
> Milestone: `M6`
> Est. change: `~170 lines`

## Goal

完成後，前端 live ScoutRepo 能正確呼叫 run APIs、映射 pagination/counters/times 並保留舊 listPosts。

## Depends on

- T020、T034、T052

## Inputs

- 讀取 / 依賴：
  - 檔案：`apps/web/src/data/live/m5Repos.ts`、`apps/web/src/data/repos.ts`
  - 既有能力 / API：apiRequest、mapScoutPost、query helpers
  - Spec 段落：§5.1、§5.2

## Outputs

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

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/web/src/data/live/m5Repos.ts` | edit | mapScoutRun，實作 listRuns/listRunPosts/removeRun，scan 映射 run。 |
| `apps/web/src/data/live/m5Repos.test.ts` | add/edit | 驗證 URL/query/envelope、unknown time、shortfall 與 error propagation。 |

### 行為變更

- live list 呼叫只取得目前頁；HTTP 錯誤不轉成成功空 page。

### API / 契約（若有）

- page/pageSize 使用 camelCase；path run ID encode；時間原樣映射供顯示。

## Out of scope

- 不重寫 apiRequest、不移除 listPosts。

## Acceptance

- [x] request/response mapping 與 mock ScoutRepo contract tests 等價。
- [x] 指令：

```bash
cd apps/web && npm test -- src/data/live/m5Repos.test.ts
```

驗收結果：live ScoutRepo 已實作 runs／run posts 分頁、filter、encoded run path、Run counters／shortfall／時間映射與刪除；HTTP error 直接拋出，舊 listPosts 保留。Live mapping tests 與 web build 通過。

## Notes

前端不得使用 Number 排序 unix ns；順序完全採 server list。
