## ⚠️ 复核结果：状态报告准确，但 main 当前处于半修复状态

@代码评审专家 报告里的状态数字全部对得上。补充了几个 reviewer 没查到的关键事实：

### 1. PR 实际状态（已通过 `gh pr view` 验证）

| PR | 标题 | 状态 | 合并时间 | 备注 |
|---|---|---|---|---|
| #237 | FET-143: Unify frontend exchange-rate default to 7.20 | **OPEN · CONFLICTING** | — | `mergeStateStatus: DIRTY`，无法自动合并 |
| #238 | feat: 前端汇率改为从后端 API 获取 | **MERGED** ✅ | 2026-06-03T19:14:13Z | 已合入 main |

### 2. main 上的真实情况：P0 实际只完成了一半

我在 `origin/main` 上跑了与当初评审时同样的 `grep`：

```
OrderDetailPage.vue:326:  const rate = orderData.exchange_rate || 7   ← 老代码
OrderListPage.vue:128 / 134 / 347  (3 处)                          ← 老代码
partner/OrderDetailPage.vue:899 / 905                              ← 老代码
partner/PartnerDashboard.vue:1801 / 1807                           ← 老代码
```

**仍有 8 处 `exchange_rate || 7` 留在 main 上**，用户端 OrderListPage 和两个 partner 文件完全没改；最讽刺的是 `OrderDetailPage.vue` **第 310 行已经换成新写法** (`?? configStore ?? DEFAULT_EXCHANGE_RATE`)，**第 326 行还是 `|| 7`** —— 同一个文件两种机制，正是当初评审标记的 bug 形态。

`AdminOrders.vue:337` 的 `|| '-'` 也没改，依然显示 `-`。

### 3. 根因：PR #238 先于 PR #237 合并

- PR #237 创建于 2026-06-03T16:16:16Z
- PR #238 创建于 2026-06-03T16:08:36Z（更早），但在 19:14:13 合并
- PR #238 改动的 5 个文件与 PR #237 重叠（`OrderDetailPage.vue`、`WarehousePage.vue`、`EditOrderPage.vue` 等），且 PR #238 新建的是 `constants.js`，PR #237 新建的是 `constants.ts` —— 两者冲突
- 评审时 FET-145 描述里写「前置：FET-143」是**语义**上的依赖（长期清理建立在紧急清理之上），但**不是构建/import 级别**的硬依赖 —— PR #238 引入的 `?? configStore ?? DEFAULT_EXCHANGE_RATE` 链可以独立编译，PR #237 引入的 `?? DEFAULT_EXCHANGE_RATE` 也是。这是为什么系统没有拦下 PR #238。

### 4. 关于系统消息的依赖规则

`648f76ca` system 提示我「不要依据父级 high-level breakdown 提升 backlog，要看子 issue 自己的描述里声明的依赖」。

按这个规则检视：
- FET-145 描述里说「前置：FET-143」，但实际编译不依赖。**操作上** PR #238 已合并，**语义上** FET-143 的"常量统一"已通过 PR #238 的 `constants.js` 实现了一部分。这是模糊地带，但**结论是 FET-145 的 work 不需要回退**。
- FET-144 描述里说「前置：FET-143」，且「需要生产数据库只读访问权限」。PR #237 未合并 ≠ 数据审计被阻塞。**FET-144 维持 `blocked`，与 DB 权限有关，与 PR 状态无关。**

### 5. 决定

| 项 | 决定 |
|---|---|
| FET-143 (PR #237) | **不能就此合入**。需要在 #238 已合入的 main 上 rebase / resolve conflict 后再合。这是当前最关键的卡点。 |
| FET-145 | 维持 `done`。PR #238 已合并，代码在 main 上功能可用。依赖问题通过合并 PR #237 即可追溯满足。 |
| FET-144 | 维持 `blocked`。等 DBA 给 read-only DB 凭据。 |
| 父 issue FET-134 | **维持 `in_review`，不要升 `done`**。理由：main 上 8 处硬编码、AdminOrders 仍显示 `-`、PR #237 还没真合并，P0 修复在"看起来修了"和"真的修了"之间。 |
| 是否需要新 issue | **不需要**。PR #237 rebase 是已有 issue 内的执行动作。 |

### 6. 下一步行动（请转给 PR 合并专家）

请 [代码评审专家](mention://agent/34d7c53d-bd70-45a8-bbbb-77dbb1da16b5) 协调 PR 合并专家在 PR #237 上：

1. **Rebase** 到最新 `main`（含 PR #238）
2. **Conflict 解决**：
   - `constants.ts` vs `constants.js`：保留 `constants.js`（PR #238 已落地），删除 PR #237 的 `constants.ts`
   - 5 个文件双重 import 冲突：取并集，确保 18 处都改为 `?? configStore.exchangeRate ?? DEFAULT_EXCHANGE_RATE`（这样 #238 的 store 也能用上），而不是 PR #237 当前 PR 里的 `?? DEFAULT_EXCHANGE_RATE`
   - `AdminOrders.vue` 确认 `?? DEFAULT_EXCHANGE_RATE.toFixed(2)`（不要 `|| '-'`)
3. 重新跑 `vue-tsc --noEmit`
4. 跑 `grep -rE "exchange_rate\s*\|\|" frontend/src` 验收，必须 0 行
5. 合并后我会把父 issue 推 `done`

**不要新增 issue、不要重新跑 DB 审计、不要重做 FET-145。** 当前阻塞点就一个：PR #237 落 main。
