# Phase 1: P0 紧急修复 - Context

**Gathered:** 2026-03-27
**Status:** Ready for planning

<domain>
## Phase Boundary

修复 8 个已知的代码路径断点（CRITICAL-01~08），使"充值→自动购包→佣金计算→实名激活"的主链路可端到端跑通。无新功能，无 API 新增，只改现有文件。

</domain>

<decisions>
## Implementation Decisions

### CRITICAL-06 修复范围（sellerCostPrice）

- **D-01:** 对 `internal/service/order/service.go` 中 6 处 `sellerCostPrice = buyerCostPrice` 逐一语义审查，按场景决定是否修改
- **D-02:** 语义审查依据：修正业务完整方案中的五种购买场景对应表（`.sisyphus/plans/修正业务-完整方案.md` 方案 A-5 段落）
- **D-03:** 不做模式匹配式全量替换，有些场景使用 `buyerCostPrice` 可能是正确的

### 执行顺序与分组

- **D-04:** 分 2 批执行：
  - 第 1 批（主链路）：CRITICAL-01 → CRITICAL-02 → CRITICAL-03 → CRITICAL-04 → CRITICAL-05
  - 第 2 批（独立 Bug）：CRITICAL-06 → CRITICAL-07 → CRITICAL-08
- **D-05:** 每个 Bug 修复后独立一个 commit（回滚粒度细，便于定位问题）
- **D-06:** 依赖约束：CRITICAL-02 必须在 CRITICAL-01 之后执行；CRITICAL-05 必须在 CRITICAL-04 之后执行

### Bootstrap 依赖注入

- **D-07:** CRITICAL-03（PollingHandler 注入 asynqClient）和 CRITICAL-04（recharge.Service 注入 queueClient + 注册 AutoPurchaseHandler）分开处理，各自一个 commit
- **D-08:** CRITICAL-04 涉及两个修改点：
  - API 侧：`internal/bootstrap/services.go` 的 `rechargeSvc.New()` 调用新增 `deps.QueueClient` 参数（`QueueClient` 已在 `deps` 中，无需新增字段）
  - Worker 侧：`pkg/queue/handler.go` 新增 `registerAutoPurchaseHandler()` 方法并在 `RegisterHandlers()` 中调用
- **D-09:** 无需修改 `worker_services.go`（recharge.Service 不在 Worker bootstrap 链路中）

### 验证策略

- **D-10:** 每个 Bug 修复后执行 `go build ./...` 确认编译通过，然后提交
- **D-11:** 不要求自动化测试，人工验收方式：`rg` 确认代码路径 + DBHub 验证数据 + 日志关键字
- **D-12:** 方案文档中每个 Bug 都有"人工验收清单"，按清单逐一核对

### the Agent's Discretion

- 具体代码片段已在 `.sisyphus/plans/修正业务-完整方案.md` 中提供，agent 应直接按文档实现，不需要重新设计
- 日志消息使用中文（项目规范）
- 所有注释使用中文

</decisions>

<canonical_refs>
## Canonical References

**Downstream agents MUST read these before planning or implementing.**

### 修复规格（核心参考）
- `.sisyphus/plans/修正业务-完整方案.md` — 完整修复规格书：每个 Bug 的业务背景、代码现状（含文件路径+行号）、完整代码片段、人工验收清单
  - 方案 A-1（CRITICAL-01）：第 59-128 行
  - 方案 A-2（CRITICAL-02）：第 132-163 行
  - 方案 A-3（CRITICAL-03）：第 165-299 行
  - 方案 A-4 P0-3（CRITICAL-04）：第 301-441 行
  - 方案 A-4 P0-4（CRITICAL-05）：第 442-575 行
  - 方案 A-5（CRITICAL-06）：第 579-618 行
  - 方案 A-6（CRITICAL-07）：第 621-670 行
  - 方案 A-7（CRITICAL-08）：第 673-705 行

### 需要修改的核心文件
- `internal/task/polling_handler.go` — CRITICAL-01 (parseRealnameStatus), CRITICAL-03 (asynqClient 注入)
- `internal/model/iot_card.go` — CRITICAL-01 (注释修正)
- `pkg/constants/iot.go` — CRITICAL-01 (常量确认)
- `internal/service/client_order/service.go` — CRITICAL-02 (实名判断)
- `internal/bootstrap/services.go` — CRITICAL-04 (rechargeSvc.New() 添加 queueClient)
- `internal/service/recharge/service.go` — CRITICAL-04 (HandlePaymentCallback 触发购包)
- `pkg/queue/handler.go` — CRITICAL-03 (NewPollingHandler asynqClient), CRITICAL-04 (registerAutoPurchaseHandler)
- `internal/task/auto_purchase.go` — CRITICAL-05 (ProcessTask 触发佣金)
- `internal/service/order/service.go` — CRITICAL-06 (sellerCostPrice 6 处审查)
- `pkg/utils/excel.go` — CRITICAL-07 (DeviceRow IMEI 字段)
- `internal/task/device_import.go` — CRITICAL-07 (导入时填充 IMEI)
- `internal/service/my_commission/service.go` — CRITICAL-08 (RowsAffected 校验)

### 项目规范
- `AGENTS.md` — 语言要求（中文注释/日志）、错误处理规范、架构分层规范
- `.planning/research/PITFALLS.md` — 已知陷阱：sellerCostPrice 6 处全量检查要求

</canonical_refs>

<code_context>
## Existing Code Insights

### 已确认的代码现状
- `sellerCostPrice = buyerCostPrice`：6 处确认（order/service.go 第 187, 262, 472, 548, 734, 809 行）
- RPush 降级 + `_ = task`：polling_handler.go 第 1101-1114 行确认
- `AutoPurchaseHandler`：已存在于 `internal/task/auto_purchase.go`，但 `pkg/queue/handler.go` 未注册
- `QueueClient`：已在 `internal/bootstrap/dependencies.go:24` 中定义，已传入 Order、IotCardImport、DeviceImport 服务

### Established Patterns
- 错误处理：Service 层用 `errors.New(code)` / `errors.Wrap(code, err)`，禁止 `fmt.Errorf`
- Asynq 任务提交：Worker 内直接用 `h.asynqClient.EnqueueContext()`；Service 层用 `deps.QueueClient.EnqueueTask()`
- 日志：`zap.Logger`，字段用具体类型（`zap.Uint`、`zap.Error` 等），消息用中文

### Integration Points
- Worker bootstrap：`pkg/queue/handler.go:RegisterHandlers()` → 任务注册
- API bootstrap：`internal/bootstrap/services.go:initServices()` → 服务初始化
- 轮询调度：`internal/polling/scheduler.go` 驱动，不直接受此次改动影响

</code_context>

<specifics>
## Specific Ideas

- CRITICAL-04 的 AutoPurchaseHandler 注入参数列表中有多个 nil 占位符（见方案 A-4 代码片段），agent 应检查当前 `NewAutoPurchaseHandler` 的签名，确保传入参数与现有定义匹配，而非照搬规格书里可能过时的 nil 列表
- CRITICAL-06 修复时，需对照"五种购买场景表"逐一确认每个分支的"卖家"身份（场景 1/2/3/4/5），不要只看变量名

</specifics>

<deferred>
## Deferred Ideas

None — discussion stayed within phase scope

</deferred>

---

*Phase: 01-p0*
*Context gathered: 2026-03-27*
