# 01 — 建立设备 CSV 批量任务与受控上传基础设施

**What to build:** 为设备 CSV 批量分配提供可复用的任务基础设施：运营人员能够取得仅允许 CSV 的受控上传地址；系统可持久化并追踪异步任务，严格校验、解析和去重单列表格，安全记录行级失败，并仅以任务 ID 向异步队列投递任务。

**Blocked by:**

- [.scratch/ur36-bulk-package-purchase/issues/02-controlled-upload-object-ownership.md](../../ur36-bulk-package-purchase/issues/02-controlled-upload-object-ownership.md) — 02 — 交付受控直传与对象归属证明
- [.scratch/tech-public-foundation/issues/06-unified-async-task-contract.md](../../tech-public-foundation/issues/06-unified-async-task-contract.md) — 06 — 冻结统一异步任务五态和查询契约
- [.scratch/tech-global-audit/issues/01-audit-event-write-loop.md](../../tech-global-audit/issues/01-audit-event-write-loop.md) — 01 — 交付不可变 Audit Event 写入闭环

**Status:** ready-for-agent

**架构通道：** Infrastructure（辅助：简单写 Application）。

**完整业务边界：** 本票收口受控上传用途、设备批量任务持久化与五态生命周期、CSV 文件级/行级校验边界、去重、失败明细、最小队列载荷及任务创建/终态审计。简单任务记录使用 Application 事务脚本，不为任务表创建空洞聚合。

**明确不迁移：** 不迁移既有 Excel 设备导入、同步设备分配、同步套餐系列绑定及其他未触碰异步任务。

- [ ] `device_batch_allocation` 受控用途只生成 `.csv` 对象键，默认 `text/csv`，并拒绝错误扩展名、用途、对象归属、实际类型或不存在的对象。
- [ ] 独立任务保存命令、目标、操作者快照、五态、汇总、脱敏失败明细和中文错误摘要；创建任务或入队失败不会留下永久处理中任务，并写统一 Audit Event。
- [ ] CSV 支持 UTF-8（含 BOM）、LF/CRLF 和固定单列表头；在任何业务写入前拒绝文件级错误，逐行保留空值、非法标识、未找到及重复行失败，且保持 `total_count = success_count + fail_count`。
- [ ] 异步载荷仅为结构化 `task_id`，不含文件字节、临时路径或敏感上下文；下载后的解析和后续批量查询契约支持每批最多 200 条标识。
