## 0. 任务卡片与审批门禁

| 项目 | 内容 |
|---|---|
| 目标 | 为资产后台一期准备 11 张空表的字段字典、预检 SQL、建表 SQL、结构验收 SQL 和执行记录模板 |
| 数据库范围 | 仅限获得单独书面授权后的 `xyw_data_test` |
| 本变更不做 | 连接数据库、执行 SQL、删除或修改旧表、旧数据迁移、旧后端修复、API/DTO/前端/认证/发布 |
| 计划审批点 | 审批字段字典、SQL 范围和目标库授权后，才允许开始第 2 节；审批本变更本身不等于授权执行数据库 DDL |

- [ ] 0.1 由负责人确认 11 表字段字典、`create_time` / `update_time` / `delete_time` 命名及“无外键、无检查约束”边界。
- [ ] 0.2 获得 `xyw_data_test` 的单独书面建表授权，记录执行人、授权时间和可恢复备份位置；未获授权不得进入任何数据库。

## 1. 范围文件与实现准备

| 修改点 | 输入 | 输出 | 完成判定 | 依赖前置 | 风险解析与缓解 | 回滚动作 | 新手注释要求 |
|---|---|---|---|---|---|---|---|
| SQL-01 | 已审批字段字典 | `asset-phase1-preflight.sql` | 仅含只读核对语句 | 0.1 | 误连库；先显示库名并遇异常停止 | 不执行建表 | 文件头说明作用、关联文件、顺序、目标库、禁止行为、停止条件 |
| SQL-02 | SQL-01 通过结果与授权 | `asset-phase1-schema.sql` | 仅含 11 个 `CREATE TABLE` 和索引 | 0.2 | DDL 失败出现部分表；立即停止并验收 | 不自动删除，走新审批 | 文件头同上；逐表中文注释说明表用途与关联 |
| SQL-03 | SQL-02 执行结果 | `asset-phase1-schema-verify.sql` | 能核对表、列、主键、索引、禁止约束 | SQL-02 | 漏检结构；逐项读取 `information_schema` | 记录 FAIL，停止后续工作 | 文件头同上；查询分组说明验证项目 |
| DOC-01 | SQL-03 输出 | 验收记录 | 含库名、授权、时间、版本、PASS/FAIL | SQL-03 | 证据不足；记录实际输出 | 保留原始记录，新增修订记录 | 使用中文模板解释每项证据 |

- [ ] 1.1 在开始写 SQL 前再次确认工作区现有改动不被覆盖；只新增本变更定义的 SQL 和验收记录文件。
- [ ] 1.2 为三份 SQL 文件预置统一中文文件头，明确它们不会被 Spring Boot 应用自动读取或执行。
- [ ] 1.3 不新增 Java、JavaScript、DTO、Entity 或 Service 方法；本期 SQL 没有业务方法。后续若扩展到代码，范围内每个方法必须附“代码作用（白话）/关联文件/关联逻辑（调用链、消息链或数据流）”注释。

## 2. 只读预检脚本

- [ ] 2.1 创建 `sql/asset-phase1-preflight.sql`，只查询 `DATABASE()`、`information_schema.tables`、`information_schema.columns` 和 `information_schema.statistics`，列出 11 张目标表的存在状态。
- [ ] 2.2 在预检输出中明确三类停止条件：当前库不是 `xyw_data_test`、任一目标表存在、目标表集合部分存在；不得用 DDL/DML 自动处理这些状态。
- [ ] 2.3 审阅预检脚本，确认不含 `CREATE`、`ALTER`、`DROP`、`DELETE`、`TRUNCATE`、旧表读取、外键或存储过程语句。

## 3. 一期建表脚本

- [ ] 3.1 创建 `sql/asset-phase1-schema.sql`，按 `company_profile → company_person → asset_device → phone_asset → wecom_account / wechat_account / douyin_account / domain_account / merchant → domain_asset → system_user` 的顺序定义表。
- [ ] 3.2 为全部 11 表定义 `id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT`、`create_time DATETIME NULL`、`update_time DATETIME NULL`、`delete_time BIGINT NOT NULL DEFAULT 0`、主键、表注释、InnoDB、`utf8mb4` 和 `utf8mb4_unicode_ci`。
- [ ] 3.3 按设计文档落实 `company_profile`、`company_person`、`asset_device`、`phone_asset` 的业务字段、五个 JSON 快照字段及所有唯一/查询索引。
- [ ] 3.4 按设计文档落实 `wecom_account`、`wechat_account`、`douyin_account`、`domain_account`、`domain_asset`、`merchant`、`system_user` 的业务字段、重复策略及所有唯一/查询索引。
- [ ] 3.5 对需要有效记录去重的 `company_name`、`device_name`、`phone_number`、`account_identifier`、`merchant_number`、`username` 使用“业务字段 + `delete_time`”复合唯一索引；账号表和域名资产不得增加未审批的业务唯一限制。
- [ ] 3.6 审阅建表脚本，确认不使用 `IF NOT EXISTS`、外键、`REFERENCES`、`CHECK`、`ENUM`、触发器、存储过程、旧表读取、迁移、导入或任何删除性语句。

## 4. 结构验收脚本与记录

- [ ] 4.1 创建 `sql/asset-phase1-schema-verify.sql`，以只读查询确认当前库名和 11 张表全部存在。
- [ ] 4.2 为每张表验证 4 个通用列、业务列数据类型、可空性、`delete_time` 默认值、主键、唯一索引和查询索引。
- [ ] 4.3 验证目标表没有 `FOREIGN KEY`、`REFERENCES` 或 `CHECK` 约束，并输出可人工审阅的 PASS/FAIL 明细。
- [ ] 4.4 建立 `docs/acceptance/asset-phase1-schema-YYYY-MM-DD.md` 模板，记录授权标识、实际数据库名、脚本校验和、执行时间、执行人、预检/建表/验收结果及异常。

## 5. 数据库实施与失败处置

- [ ] 5.1 在授权会话中运行预检并人工确认全部停止条件均未命中；把实际 `DATABASE()` 输出写入验收记录。
- [ ] 5.2 仅在 5.1 通过后运行建表脚本；任何一条语句失败即停止，不重试、不自动补表、不自动删除。
- [ ] 5.3 运行只读结构验收；仅全部匹配时将记录标记为 PASS，否则记录 FAIL、当前结构和失败 SQL 后停止。
- [ ] 5.4 出现部分表、字段/索引缺失或目标库不符时，提出新的修订变更与单独数据库授权；本变更不提供自动回滚或清理 SQL。

## 6. 字段追踪与后续接口边界

本期没有新增页面、接口、DTO、Controller、Service、Prompt 或聊天链路，字段追踪止于数据库层；任何后续新后端改动必须补全完整链路。

| 字段组 | 当前层级 | 文件 | 使用位置 | 作用 | 输入/输出 | 是否必填 | 默认/兜底 | 风险点 | 覆盖测试 |
|---|---|---|---|---|---|---|---|---|---|
| `id/create_time/update_time/delete_time` | DB | 三份 SQL | 全部 11 表 | 主键、审计和软删除 | SQL 定义 / 后续 Entity | `id`、`delete_time` 必填 | `delete_time=0` | 查询漏过滤软删除行 | 结构验收逐表检查 |
| 11 表业务字段与索引 | DB | 建表/验收 SQL | 对应表 | 后续资产数据模型 | SQL 定义 / 后续 Entity | 依设计的 `NOT NULL` | 其他字段允许空 | 类型或索引遗漏 | `information_schema` 验收 |
| `phone_asset` 五个 JSON 快照 | DB | 建表/验收 SQL | `phone_asset` | 关联摘要存储 | 后续 Service 写入 / 后续 API 读取 | 表列可空 | 后续新建显式写 `[]` | 版本兼容、失效快照 | 类型与列存在性验收 |

- [ ] 6.1 在后续新后端变更前，补齐“页面 → 前端 API → DTO → Controller → Service → Entity/Mapper → DB → 测试 → OpenAPI”的逐字段追踪，未进入接口层的字段必须明确标为“不落库以外层”。
- [ ] 6.2 后续查询有效数据时统一加入 `delete_time = 0`；后续删除实现写 Unix 毫秒时间戳并覆盖同毫秒冲突策略。

## 7. 接口、权限与 API 文档

- [ ] 7.1 保持本期“无 API 变更、无 DTO 变更、无 Apifox/OpenAPI 变更、无权限变更”的边界；不得为建表临时暴露接口。
- [ ] 7.2 后续认证梯队才定义 `system_user` 初始管理员、密码摘要生成和登录接口；本期不得写入任何账户数据。
- [ ] 7.3 后续 API 梯队新增接口时，再在 Apifox/OpenAPI 中给出分组、最小请求、成功/失败响应、错误码、前端调用点和最小回归清单。

## 8. 验证与自动化

- [ ] 8.1 对三份 SQL 文件执行静态审阅：预检和验收仅含只读查询；建表仅含 `CREATE TABLE`/索引；任一文件不含 `DROP`、`DELETE`、`TRUNCATE`、`ALTER`、旧表读取或外键定义。
- [ ] 8.2 在已授权测试库中按“预检 → 建表 → 验收”执行人工 smoke 验证，并将 SQL 客户端原始输出摘录到验收记录。
- [ ] 8.3 验收至少覆盖：目标库名、11 表存在、所有通用列、关键业务列、主键、复合唯一索引、查询索引、无外键/检查约束、无业务数据写入。
- [ ] 8.4 本期不跑后端构建、前端 E2E 或 Playwright，因为不修改业务代码；后续 Entity/Mapper 接入时再增加数据库集成测试并以非零退出码报告失败。

## 9. 工程术语与新手注释验收

- [ ] 9.1 保留设计文档的工程术语注释表：软删除、复合唯一索引、预检、回滚和幂等均需说明白话含义、使用位置、不这样做的风险和示例。
- [ ] 9.2 验收 SQL 文件头和逐表注释能让新手理解：该文件/表做什么、依赖什么、从预检到验收的执行顺序以及异常时为何停止。
- [ ] 9.3 若实施范围扩展到 Java 或 JavaScript，先更新本计划的范围文件用途表与方法清单，再为每个改动方法补齐新手注释后实施。

## 10. 数据安全与兼容性

- [ ] 10.1 确认 SQL、验收记录和日志不写入 `.env`、数据库密码、token、私钥或连接字符串。
- [ ] 10.2 确认本期不读取、修改、迁移或兼容旧 `wx_phone`、`wx_data` 和历史账号表；旧后端启动问题不作为本次验收条件。
- [ ] 10.3 确认所有逻辑关联保持无外键，后续 Service 需补足引用存在性、有效性和删除保护校验。

## 11. 风险观察与降级

- [ ] 11.1 把“数据库名不匹配、目标表部分存在、DDL 执行错误、验收缺列/缺索引”列为阻断信号，任何一个命中即停止。
- [ ] 11.2 发生阻断时的降级（先保持系统安全可用的做法）为：不接入新后端、不写数据、不修改旧逻辑，仅保留只读诊断与验收记录。
- [ ] 11.3 回滚（失败后恢复安全状态）只允许“停止并走新审批”；严禁把自动 `DROP` 当作本期回滚手段。

## 12. 完成定义（DoD）

- [ ] 12.1 11 张表、字段、通用审计/软删除列、主键、唯一和查询索引均与设计和规格一致。
- [ ] 12.2 预检、建表、结构验收与验收记录均存在；预检/验收只读，建表脚本无删除、迁移、旧表读取、外键或检查约束。
- [ ] 12.3 已获得 `xyw_data_test` 单独授权，且执行记录证明预检、建表、验收均在该库完成。
- [ ] 12.4 验收记录明确 PASS，或在失败时已标记 FAIL 并停止；未产生任何旧表兼容、数据导入、业务接口或发布改动。

## 13. 实施后新手流程图

```mermaid
flowchart TD
  A[负责人审批字段字典和 SQL 范围] --> B{已获 xyw_data_test 单独授权？}
  B -- 否 --> C[停止：只保留 OpenSpec 计划]
  B -- 是 --> D[人工连接测试库并执行只读预检]
  D --> E{库名正确且 11 表均不存在？}
  E -- 否 --> F[记录异常并停止：不自动补表或删除]
  E -- 是 --> G[人工执行仅含 CREATE TABLE 的建表脚本]
  G --> H{任一 DDL 失败？}
  H -- 是 --> I[停止并执行只读验收，记录部分结构]
  H -- 否 --> J[执行只读结构验收]
  J --> K{表、列和索引全匹配？}
  K -- 否 --> L[记录 FAIL，等待新的修订计划和授权]
  K -- 是 --> M[记录 PASS，后续再接入新后端]
```

## 14. 假设与待确认项

- [ ] 14.1 确认 `xyw_data_test` 是可建空表的授权测试库，生产环境永不属于本任务范围。
- [ ] 14.2 确认一期采用设计文档的最小字段；人员附加资料、状态正式枚举、设备容量、管理员初始密码和账号恢复均留待后续变更。
- [ ] 14.3 确认应用创建/更新时间由后续代码写入，而非在数据库列上添加未审批的自动时间戳行为。

## 15. 交接与后续梯队

- [ ] 15.1 交接提案、设计、规格、任务清单、三份 SQL 和验收记录给新后端梯队。
- [ ] 15.2 新后端梯队按字段追踪表新增 Entity、Mapper、Service、Controller、DTO、测试和 API 文档，并保证旧逻辑不被本期建表直接替换。
- [ ] 15.3 未完成任一审批、授权、静态审阅或结构验收门槛前，不得标记本变更为已实施。
