# 灵犀 · 信息流素材生产平台 项目开发计划
> **文档定位**:把 PRD V1.6 与《技术架构》V0.4 翻译成**可执行、可并行、可验收**的开发计划。
> **不替代上游**:需求口径以 PRD 为准,技术选型与硬约束以技术架构和 [`AGENTS.md`](../../AGENTS.md) 为准;本文件只回答"先做什么、做到什么程度、前后端怎么并行、怎么验收"。
## 0 文档信息与使用说明
| 项 | 内容 |
| --- | --- |
| 文档名称 | 灵犀 · 信息流素材生产平台 项目开发计划 |
| 版本 | V0.1(初稿,待评审) |
| 日期 | 2026-11-02 |
| 状态 | **执行中**:A0 工程骨架与契约基线已完成(2026-11-02);A1 身份认证与用户管理已完成(2026-11-03);A2 角色权限与数据范围已完成(2026-11-03);A3 客户与行业目录已完成(2026-11-04 最终验收);下一步 A4 |
| 需求基线 | PRD V1.6([灵犀-信息流广告素材一站式生产平台PRD.md](../PRD/灵犀-信息流广告素材一站式生产平台PRD.md)) |
| 技术基线 | 技术架构 V0.4([灵犀_信息流素材生产平台_技术架构_V0.1.md](../技术架构/灵犀_信息流素材生产平台_技术架构_V0.1.md))+ `AGENTS.md` V1.0 + `docs/工程规范/` V1.0 |
| 覆盖范围 | **M0 任务级;M1–M4 迭代级 + 任务组级;M5 预研边界(不排期)** |
| 读者 | 产品 / 技术负责人、Harness 编队、测试、运维 |
| 维护 | 每批结束回写实际工期与偏差;范围变更同步 §5 与 §13 |
### 0.1 版本记录
| 版本 | 日期 | 修订内容 |
| --- | --- | --- |
| V0.1 | 2026-11-02 | 初稿:全项目 M0–M4 开发计划(M0 十二批次任务级 WBS;M1–M4 迭代 + 任务组 WBS;M5 预研边界)、七个管理模块专项、前后端并行与联调机制、质量门禁、风险与验收、待确认事项 |
| V0.1(进度回写) | 2026-11-02 | A0 工程骨架与契约基线完成:批次总览增加状态列、A0 WBS 标注完成、回写执行证据与偏差;不改变原计划范围与验收口径 |
| V0.1(进度回写 A1) | 2026-11-03 | A1 身份认证与用户管理完成:批次总览更新 A1 状态、A1 WBS 标注完成、回写执行证据与遗留;不改变原计划范围与验收口径 |
| V0.1(路由规范回写) | 2026-11-03 | 「平台」更名「管理中心」,前端路由统一为 `/<模块>/<功能>`(A1 用户页改为 `/system/users`);同步附录 C 页面清单与前端目录约定,不改变功能范围与验收口径 |
| V0.1(A1 部门管理补强) | 2026-11-03 | 补 `/system/departments` 部门管理:WBS 增 A1-BE-05 / A1-FE-04,补页面与接口清单;只停用不删除、有成员/启用子部门禁止停用;不改变其它批次范围 |
### 0.2 引用约定
| 记号 | 来源 | 含义 |
| --- | --- | --- |
| `R-01` ~ `R-30` | PRD §6 | 跨模块业务规则,实现注释必须带编号 |
| `P-01` ~ `P-18` | PRD §5.4.10 | 平台管理功能编号 |
| `S-xx` / `M-xx` / `A-xx` / `E-xx` | PRD §5.1 / §5.2 / §5.3 / §5.5 | 脚本 / 素材 / 资产 / 导出的功能编号 |
| `Q-01` ~ `Q-32` | PRD §10 | 需求侧待确认问题 |
| `T0` ~ `T3` | 技术架构 §10.2 | 技术交付里程碑(本文按 PRD 的 M0–M4 表述,括号标注对应 T 阶段) |
| `D-01` ~ `D-11` | 技术架构 §8 | 架构决策 |
| `R-T-xx` / `QT-xx` | 技术架构 §11 | 技术风险 / 技术侧待确认 |
| `AS-xx` | 本文件 §0.3 | 计划假设(已按此排期,推翻需重排) |
| `DP-xx` | 本文件 §13 | 计划侧待确认(需要人类决策) |
| `A0` ~ `B3` | 本文件 §5.2 | M0 开发批次编号 |
| `G0` ~ `G5` | 本文件 §10.1 | 每批质量门禁;`H0` ~ `H5` 为 §3.4 的人工决策门 |
### 0.3 计划假设(AS)
| 编号 | 假设 | 依据 / 影响 |
| --- | --- | --- |
| AS-01 | 开发全程由 **DeepSeek Harness 编队**执行:1 名 Lead + 最多 3 名并行 Worker + 独立 Verifier;人类负责范围、口径、验收与发布决策 | 用户明确要求;排期以"批次 + 相对周次"表达,不承诺绝对日期 |
| AS-02 | 工量单位用**等效人日(EPD)**,沿用技术架构 §10.2 的"净开发"口径;编队净产能按 **3.0 EPD/工作日**、缓冲 **25%** 估算 | §10.2 的人日口径可直接对齐;产能系数每批校准 |
| AS-03 | M0 登录先做**账号密码 + JWT**,SSO 只留适配器接口 | 对应 `QT-04`;SSO 协议未定(`Q-10`) |
| AS-04 | M0 的 AI 只做**配置底座 + 调用账本 + Mock Provider**,不接真实计费模型 | 供应商、预算未定(`QT-05` / `Q-09`) |
| AS-05 | M0 只要求**本地 Docker Compose + 1 台 staging** 可用;云厂商与域名在 M1 前确认 | `QT-01` / `QT-03`,备案需提前 2–3 周 |
| AS-06 | **"任务管理"= 跨模块异步任务中心**:统一任务协议、进度(SSE + 轮询)、失败重试、取消、队列健康;不改变各模块任务语义 | 技术架构 §6.4;`media_tasks` 同时承载脚本任务 |
| AS-07 | **"日志管理"= 审计日志中心(业务留痕) + 运行日志观测入口**;运行日志(Pino/OTel)不入业务库 | PRD §5.4.6;架构 §2.7 / 工程规范 08 |
| AS-08 | M0 范围按 PRD §7 的 M0 清单(含行业包、表单设计器、合规规则集、资产最小集、要素卡/脚本模板、导出骨架),**不含**脚本生成与图片生产 | PRD §7;这两项属 M1 |
| AS-09 | UI 以 **Semi Design 组件与交互为基线**,M0 不单独出视觉稿;页面走查用 staging 演示数据完成 | 减少设计依赖;如要求品牌化视觉需另排 |
| AS-10 | 每批默认**前端 Mock 先行 + 后端契约先行**,联调固定在批次第 3–4 日;不等待整批后端完成才启动前端 | 前后端同时开发的核心机制 |
| AS-11 | 本计划覆盖**全项目 M0–M4**:M0 任务级,M1–M4 迭代级 + 任务组级;**M5 为预研,不排期**,只在 §5.9 给进入条件 | PRD §7 分期;用户 2026-11-02 确认「补全所有开发计划,从 M0 到完整结束」 |
> **推翻任一假设的代价**:AS-03 / AS-04 / AS-05 只影响对应批次的实现细节;AS-01 / AS-02 影响全部排期;AS-06 / AS-07 影响 §7 两个模块的范围定义;AS-08 影响 M0 的边界与工期(见 §2.5)。
### 0.4 与既有文档的关系
| 文档 | 关系 | 本文件如何引用 |
| --- | --- | --- |
| PRD V1.6 | 需求唯一来源 | 功能编号、优先级、业务规则、验收标准(AC-01~AC-04)直接引用,不复制口径 |
| 技术架构 V0.4 | 技术与数据唯一来源 | 模块边界、表清单、接口清单、任务协议、部署与观测直接作为任务卡约束 |
| `AGENTS.md` | 硬约束与索引 | §3 硬红线、§5 仓库结构、§6 命令契约是每批门禁的判定依据 |
| `docs/工程规范/` | 落地细则 | Git、API、数据库、测试、日志、密钥、资产命名的检查项进入 §10 门禁 |
| 立项建议 V0.1 | 背景与商业论证 | 只引用分期周期与人力建议做交叉校验,不约束实现 |
---
## 1 计划摘要(一页看懂)
### 1.1 一句话
**先用 6–7 周把"人、角色、客户、字典、日志、任务、AI 配置、行业包"这套地基立住(M0),再用 4–5 周跑通"要素卡 → 脚本 → 图片 → 导出"(M1);接着 5–6 周上视频线、快筛与 AI 治理(M2),4–5 周做资产复用、送审与效果回流(M3),最后 1–2 周把投放数据、爆量判定与脚本反哺收口(M4,项目交付闭环)。M5(AI 素材生产预研)不在本期排期。全程前后端同批并行、契约先行、每批可演示。**
### 1.2 关键结论
| 阶段 | 范围 | 净工量(EPD) | 参考日历 | 退出标准(摘要) |
| --- | --- | --- | --- | --- |
| **M0 地基**(T0 + M0 增量) | 工程骨架、身份权限、客户行业、字典配置、审计日志、任务中心、AI 配置、行业包与表单设计器、资产最小集、要素卡/脚本模板、导出骨架 | 65–70 | 6–7 周(30–35 个工作日) | 新客户 10 分钟内完成建档与权限分配;电商行业包 v1 可配置、可发布;空任务可提交并看到进度;审计可查 |
| **M1 主链路** | 脚本生成 / 解析 / 校核 / 审核入库 / 编号、图片线(PSD 套版 + 抠图 + 多规格)、预览勾选、导出与归档、金融行业包 v1 试跑 | 48–56 | 4–5 周(20–25 个工作日) | AC-01:1 个真实客户走通"要素卡 → 脚本 → 图片 → 导出";交付周期与单条成本首次可测 |
| **M2 提效** | 视频逐镜生成 / 拼接 / 校验、快筛、变体矩阵、脚本版本与交付包、AI 路由与额度、成本看板、成片入库与复用、第三行业包 | 62–70 | 5–6 周(25–30 个工作日) | 单条视频从脚本到成片跑通;成本可查;任务成功率 ≥ 98% |
| **M3 复用** | 资产复用度量、效果标签、混合实拍与口播、成片入库与素材库、送审与效果回流、SSO / 系统配置完善 | 45(40–50) | 4–5 周 | 资产复用率 ≥ 60%;新客户冷启动 ≤ 1 个工作日;素材关联率与日指标可测 |
| **M4 交付闭环** | 投放登记完善、日指标、爆量判定与阈值固化、脚本权重反哺、关联率与爆量榜看板 | 12(10–14) | 1–2 周 | 爆量判定口径可配置;榜单可用;反哺进入脚本参考权重 |
- **关键路径**:`A0 → A1 → A3 → B0 → B2 → B3 → M1-3(图片线)→ M2-1(视频线)→ M3-2(效果回流)→ M4-1(爆量判定)`。占用关键路径的批次不得并行插入范围。
- **全项目工量**:M0 68.5 + M1 55 + M2 67 + M3 45 + M4 12 = **247.5 EPD**;参考日历 **20–25 周**(约 5–6 个月,含 25% 缓冲)。
- **最大风险**:表单设计器复杂度(`R-T-04`)、行业包字段与合规规则未定(`Q-15` / `Q-16`)、图片渲染无先例(`R-T-13`)、AI 供应商与预算未定(`QT-05` / `Q-09`)、人类验收瓶颈。
- **排期底线**:M0 不砍权限、审计、客户隔离、导出留痕;其余均可按 §2.4 顺序后移。
### 1.3 管理模块优先的落地映射
用户点名的七个管理模块全部落在 **A1–A7**,且排在行业包与主链路之前:
| 要求的模块 | 批次 | PRD 编号 | 主要交付物 |
| --- | --- | --- | --- |
| 用户管理 | A1 | P-01 | 部门两级、用户生命周期(停用不删)、登录 / 刷新 / 登出、`/me`、路由与按钮权限 |
| 角色管理 | A2 | P-02 / P-03 | 角色 CRUD / 复制 / 停用、权限点勾选树、六类数据范围、特殊权限、SoD 校验 |
| 客户管理 | A3 | P-04 / P-05(P-17 提前到 M0) | 行业目录、客户档案(简称必填)、客户组、客户级字段申请与审批、客户状态机 |
| 数据字典 | A4 | P-06 / P-13(部分) | 通用枚举表、行业作用域三层合并、编码不可改、系统配置与命名规则 |
| 日志管理 | A5 | P-07 | 审计日志 append-only、检索 / 导出、敏感访问留痕、运行日志观测入口 |
| 任务管理 | A6 | 架构 §6.4 / M-05 | 统一任务协议、BullMQ 队列骨架、SSE + 轮询、取消 / 重试 / 幂等、任务中心 |
| AI 配置 | A7 | P-08 | 供应商 / 模型 / 任务映射 / 提示词四层配置、密钥加密、连通性测试、Mock 调用与账本 |
| (地基组成)行业包与表单 | B0 | P-14 ~ P-16 / P-18 | 行业包版本、表单设计器、发布审批、合规规则集、schema 快照 |
> 这七个模块是**横切能力**:业务表都挂 `customer_id`、查询都带 `ScopeContext`、变更都要进审计、阈值都来自 `system_configs`、耗时操作都走任务协议。后补成本极高(立项建议 §「M0 三件必做」),因此必须先做。
### 1.4 交付节奏
```mermaid
flowchart LR
W0["W1–W7
M0 地基
A0–B3"] --> W1["W8–W12
M1 主链路
脚本 + 图片线"]
W1 --> W2["W13–W18
M2 提效
视频 + 快筛 + 成本"]
W2 --> W3["W19–W23
M3 复用
复用 + 送审 + 回流"]
W3 --> W4["W24–W25
M4 交付闭环
爆量 + 反哺 + 看板"]
W0 -. 每批可演示 .-> H4["人类验收门 H4"]
W1 -. AC-01 .-> D1["业务方现场验收"]
W2 -. 指标 .-> D2["任务成功率 / 成本曲线"]
W4 -. 交付闭环 .-> D3["M4 验收:爆量口径 + 看板"]
```
> 周次为相对周(W1 = A0 启动周),不是日历承诺;换算方式见 §4.5。
---
## 2 目标、范围与优先级
### 2.1 分阶段目标与退出标准
| 阶段 | 目标(一句话) | 退出标准 | 判定方式 |
| --- | --- | --- | --- |
| M0 地基 | 能装人、能装客户、能装资产、能装行业 | ① 能登录;② 超管可创建角色并分配数据范围;③ 可建行业 / 客户 / 客户组;④ 可配置并发布电商行业包 v1;⑤ 可配 AI 供应商(Mock 连通);⑥ 可提交空任务并看到进度;⑦ 关键操作审计可查 | 演示脚本(§12.1)+ 权限三态用例 + 审计抽样 |
| M1 主链路 | 一个真实客户完整走通"要素卡 → 脚本 → 图片 → 导出" | AC-01 达成;交付周期、一次过审率、单条成本可测 | 业务方现场验收 + 埋点 |
| M2 提效 | 视频线可用、配置可运营、成本可治理 | 单条视频从脚本到成片跑通;成本可查;任务成功率 ≥ 98%;峰值 500 条/日无积压(T3 口径) | 压测 + 成本看板 + 灰度观察 |
| M3 复用 | 资产复用与经验沉淀 | 资产复用率 ≥ 60%;新客户冷启动 ≤ 1 个工作日;效果回流可用 | 看板 + 抽样 |
| M4 交付闭环 | 投放数据可回流、爆量可判定、经验可反哺 | 爆量判定与阈值可配置;关联率 / 复用排行 / 爆量榜可用;脚本参考权重可回写 | 看板 + 判定抽样 + 全量回归 |
### 2.2 本计划范围
**M0 任务级拆解(§6)**:A0 工程骨架、A1 身份与用户、A2 角色权限、A3 客户行业、A4 字典与配置、A5 审计日志、A6 任务中心、A7 AI 配置、B0 行业包与表单、B1 资产最小集、B2 要素卡与脚本模板、B3 导出骨架。
**M1–M4 迭代级 + 任务组级(§5.5–§5.8、§6.13–§6.16)**:以 PRD §7 的 M1–M4 清单为基线;提前 / 后移项见 §2.5。
**M3 / M4 迭代级(§5.7 / §5.8)**:PRD §7 的 M3、M4 清单;M3 含 A-10/A-11/S-12/S-18/M-10/M-13/E-05/E-06/P-12/P-13/M-21~M-24,M4 含 M-25/M-26 + 阈值固化。
**M5 边界(§5.9)**:M-27 与 AI 素材生产路线属预研,不排期,只给进入条件。
### 2.3 明确不做(越界即评审驳回)
- 通用视频剪辑器、投放执行、效果归因、客户自助登录、计费结算;
- 图片线 AI 生图 / 图生图(`R-29`,M5 前不做);
- 通用低代码 / 审批引擎(表单设计器只解决要素卡字段,见 PRD §5.4.8);
- 模型训练与微调、外部 AI 供应商直连(必须走 `platform.ai`);
- 跨客户资产复用授权流程(M3 再评估);
- SSO 真实对接(M0 只留适配器,`Q-10` 未定);
- 生产级多地域 / 私有化部署(`QT-13`)。
### 2.4 排序原则与砍范围顺序
**排序原则**(冲突时按序裁决):
1. **地基先行**:权限、客户隔离、审计、字典、任务协议先于业务功能;
2. **管理模块优先**:A1–A7 先于行业包与主链路(用户明确要求);
3. **契约先行**:接口 / 表 / 状态机冻结后才并行写前后端,禁止"先写页面再补接口";
4. **每批可演示**:任何批次结束必须能演示,不允许"三个批次后一起联调";
5. **先确定性后生成式**:图片线先于视频线(`D-11`、立项建议 §9.2)。
**砍范围顺序**(工期不足时从下往上砍,砍完必须回写 §13):
| 顺序 | 可砍内容 | 代价 |
| --- | --- | --- |
| 1 | M4 全部(爆量判定 / 反哺 / 看板) | 交付闭环缺失,M0–M3 验收不受影响 |
| 2 | M3 全部 | 不影响 M0–M2 验收 |
| 3 | M2 的 M-02 规格矩阵、M-11 自动校验、M-18~M-20 成片入库 | 视频线仍可跑通,效率类指标下降 |
| 4 | M1 的 S-03 卖点库;M2 的 S-10 版本、S-11 引用、S-15 模板库、S-16 审核链接、S-17 Word 交付包 | 主链路仍闭环 |
| 5 | B0 设计器降级为 **JSON 编辑 + 试填预览**(不做拖拽与联动 UI) | 行业配置效率下降,第二行业上线变慢 |
| 6 | B1 资产预览降级为**缩略图 + 元数据**(不做真实合成预览) | 模板准入质量下降,M1 图片线需补 |
| ✗ 不砍 | 权限、客户隔离、审计、导出留痕、任务幂等、AI 密钥安全 | 触碰 AGENTS §3 红线 |
### 2.5 与架构 `T0` 口径的差异说明(必须接受)
技术架构 §10.2 的 `T0` 估算为 **25–30 EPD**,只覆盖骨架 + 管理底座 + 行业包 v1;本计划 M0 为 **65–70 EPD(细化 68.5)**,因为按 PRD §7 的 M0 清单额外包含:表单设计器、合规规则集、资产最小集(A-01~A-05)、要素卡 / 脚本模板(S-01/S-02/S-04)、导出骨架(E-01~E-03);另把**客户级字段审批(P-17)提前到 M0**,避免客户表结构在 M1 二次变更。
**跨里程碑提前项(显式决策,均已在对应表内标注)**:
| 编号 | 原属 | 本计划位置 | 提前的部分与理由 |
| --- | --- | --- | --- |
| P-17 客户级字段审批 | M1 | M0 A3 | 全量;客户表结构一次到位,避免 M1 二次迁移 |
| P-13 系统配置 | M3 | M0 A4 | 仅 `system_configs` 与阈值读取;`R-26` 要求阈值单一来源,先建底座 |
| M-05 任务进度与重试 | M1 | M0 A6 | 仅协议 / 队列 / SSE / 幂等骨架;业务验收在 M1-3 |
| S-10 脚本版本 | M2 | M1-2 | 仅「入库即版本」基础;完整版本链 / diff 在 M2-4 |
| S-11 脚本引用 | M2 | M1-2 | 仅引用写入;引用查询与展示在 M2-4 |
| E-05 成片自动归档 | M3 | M1-4 | 仅归档骨架;策略与批量归档在 M3 完善 |
| M-18~M-20 成片入库 | M3(§7) | M2-3 | PRD 功能表标注 P1(M2),按功能表放 M2;M3 只做完善 |
| 口径 | 范围 | EPD | 参考日历 |
| --- | --- | --- | --- |
| 架构 `T0` | 骨架 + 管理底座 + 行业包 v1 | 25–30 | 3–4 周 |
| 本计划 M0 | `T0` + PRD M0 增量(设计器 / 资产 / 要素卡 / 导出 / P-17 提前) | 65–70 | 6–7 周 |
**建议**:维持完整 M0。若必须先出"能登录能建客户"的可用版本,可把 `B1–B3` 后移到 M1 之前并行,M0 缩到 4–5 周,但 M1 会因要素卡与资产缺失而返工——这与 PRD「多行业的代价」的结论一致(PRD §7 注)。**该取舍需人类确认(`DP-03`)。**
---
## 3 开发模式与协作机制(DeepSeek Harness 全程驱动)
### 3.1 编队与角色
| 角色 | 承担者 | 职责 | 介入频率 |
| --- | --- | --- | --- |
| **人类决策者**(产品 / 技术负责人) | 项目负责人 | 范围裁决、口径确认(§13)、权限点与 SoD 审批、AI 供应商与预算、UI 走查、批次验收、发布签字 | 每批 1 次验收 + 按需 |
| **Lead**(Harness) | 主会话 | 拆任务卡、冻结契约、分派与集成、跑门禁、维护计划文档、对人类的唯一汇报口 | 全程 |
| **后端 Worker**(Harness) | 并行成员 | 模块 / 接口 / 迁移 / 守卫 / 队列 / AI 适配 | 每批 1–2 名 |
| **前端 Worker**(Harness) | 并行成员 | 页面 / 表单渲染 / 权限渲染 / 任务进度 / 联调 | 每批 1–2 名 |
| **基础设施 / 测试 Worker**(Harness) | 并行成员 | Monorepo、CI、Compose、观测、测试与压测 | 每批 0.5–1 名 |
| **Verifier**(Harness,独立上下文) | 并行成员 | 用 PRD / 架构 / 本计划独立复核产出,专抓"越权、跨模块、静默交付、类型逃逸" | 每批末 1 次 |
**并行度约束**:同一时刻活跃 Worker ≤ 3(不含 Lead);每批任务卡 6–12 张(多数 8–10);每张卡写范围不得重叠;`prisma/schema.prisma`、`packages/shared`、`pnpm-lock.yaml`、`turbo.json` 为**单写者文件**,由 Lead 或指定 owner 统一改。
### 3.2 批次工作流(每批 4–7 个工作日)
| 步骤 | 时点 | 动作 | 产出 |
| --- | --- | --- | --- |
| ① 开卡 | D1 上午 | Lead 在共享任务板建卡(§3.3),标注依赖 / 写范围 / 验收 / 工量;人类确认范围(H0) | 任务卡 + 写范围清单 |
| ② 冻结契约 | D1 下午 | 后端产出 Zod schema / OpenAPI 草稿 / 迁移草案;前端产出 mock 与页面骨架;Lead 冻结 v0 契约 | 契约快照 + Mock |
| ③ 并行开发 | D2–D3 | 前后端同时实现;前端只依赖契约与 Mock,不等待后端合并 | 功能分支 + 单测 |
| ④ 集成联调 | D3–D4 | 按 §8.2 检查单联调;修契约偏差;跑冒烟 | 联调记录 + 修复清单 |
| ⑤ 门禁 | D4 | `lint` / `typecheck` / `test` / 契约 diff / 权限三态 / 迁移可回滚(§10) | 门禁报告 |
| ⑥ 演示验收 | D4–D5 | 人类按演示脚本走查(§12.2),Verifier 独立复核 | 验收结论 + 缺陷单 |
| ⑦ 回写复盘 | D5 | 回写实际 EPD、偏差原因、决策到本文档 / ADR;更新 §13 | 计划增量 |
> **不允许跳步**:②未冻结不得进 ③;⑤未全绿不得进 ⑥;⑥未通过不得开下一批(可并行开不依赖的批次)。
### 3.3 任务卡规范
每张卡必须包含以下字段,缺一不得开工(DoR):
| 字段 | 要求 |
| --- | --- |
| 编号 / 标题 | `A1-BE-02 认证与 JWT`,编号与 §6 一致 |
| 模块 / 端 | `identity` / `BE`;禁止跨模块 |
| 背景与目标 | 一句话说明对应 PRD 编号(如 `P-01`)与不做的边界 |
| 接口与数据 | 路由、方法、权限点、请求 / 响应 schema、涉及表与迁移 |
| 验收标准 | 可执行的断言(HTTP 状态、返回码、页面行为、审计记录),不写"体验良好" |
| 依赖 | 前置任务卡编号;未满足即阻塞 |
| 写范围 | 目录 / 文件前缀,用于并行冲突检查 |
| 工量 | EPD(0.5 / 1 / 1.5 / 2) |
| 风险 | 外部依赖、待确认项、可能的返工点 |
**完成定义(DoD)**:代码合入 + 单测覆盖关键规则 + 接口在 OpenAPI 中可见 + 权限点已注册 + 审计已埋点 + 前端空态 / 加载态 / 错误态齐全 + 演示脚本可走通 + 文档(含迁移说明)同 PR。
### 3.4 人类决策门
| 门 | 时机 | 需要确认什么 | 不确认的后果 |
| --- | --- | --- | --- |
| **H0 范围门** | 每批开卡 | 本批范围、砍 / 加项、验收口径 | 返工或范围蔓延 |
| **H1 权限门** | A2 开卡前 | 权限点目录、六类数据范围、SoD 互斥对、特殊权限授予规则 | 权限模型返工,影响全部页面 |
| **H2 AI 门** | A7 开卡前 | 供应商清单、密钥保管方式、Mock 范围、预算阈值 | AI 配置返工,成本不可控 |
| **H3 UI 门** | 每批演示前 | 页面布局、关键交互(表格 / 表单 / 空态)、是否需要视觉稿 | 前端返工 |
| **H4 验收门** | 每批第 4–5 日 | 是否接受本批产出、遗留缺陷是否带病进入下一批 | 缺陷累积 |
| **H5 发布门** | M0 末 / M1 灰度 | 是否可内测、灰度范围、回滚方式 | 线上事故 |
> `H` 门是人的决策,不替代 §10.1 的 `G0`–`G5` 质量门禁;两者对应关系见 §10.1 表后注。
### 3.5 上下文与知识治理
- **唯一事实源**:`AGENTS.md` → 工程规范 → 技术架构 → PRD。禁止凭记忆写版本号、包名、表名、路由(AGENTS §11)。
- **每批必须回写**:实际工期 / 偏差(本文档 §5)、新决策(`docs/adr/ADR-xxx`)、接口(OpenAPI)、权限点(`packages/shared`)、迁移说明。
- **Verifier 独立复核**:复核者不继承 Lead 会话上下文,只拿任务卡 + 代码 + 验收标准,避免"自己验自己"。
- **会话压缩不等于文档**:任何影响后续批次的结论必须落盘到本文件或 ADR,不能只存在于对话里。
### 3.6 并行度、写范围与冲突控制
| 规则 | 做法 |
| --- | --- |
| 写范围隔离 | 每张卡声明目录前缀;同一文件同一时刻只允许一个 owner |
| 单写者文件 | `prisma/schema.prisma`、`prisma/migrations/*`、`packages/shared/*`、`pnpm-lock.yaml`、`turbo.json`、`package.json`(根)由 Lead / 指定 owner 统一改 |
| 迁移编号 | 按批次预分配前缀,禁止两个 Worker 同批改同一迁移;遵循 expand → migrate → contract(AGENTS §3) |
| 合并顺序 | 契约 → 后端 → 前端 → 文档;Lead 负责最终 rebase 与冲突裁决 |
| 冲突升级 | 同一文件被两人修改 → 停止并重排任务,不靠机械 rebase 硬解 |
| 演示数据 | 种子脚本由 Lead 统一维护,避免各批各造一套数据 |
---
## 4 总体开发策略
### 4.1 契约先行(前后端并行的前提)
```mermaid
flowchart LR
P["PRD / 本计划"] --> S["packages/shared
Zod schema · 错误码 · 权限点 · 枚举"]
S --> B["NestJS DTO
(静态 Zod + 动态 Ajv)"]
B --> O["OpenAPI
(构建产物)"]
O --> F["apps/web
openapi-typescript 生成 client"]
F --> Q["TanStack Query hooks + 页面"]
S --> M["MSW / Prism Mock
(后端未就绪时)"]
M --> Q
```
| 规则 | 说明 |
| --- | --- |
| 单一真源 | DTO 以 `packages/shared` 的 Zod schema 为准;后端不另写一套类型,前端不手写接口类型 |
| 破坏性变更 | `pnpm openapi:diff` 报 breaking 必须升版本并通知前端(工程规范 04 / 06) |
| 字段命名 | JSON body 用 camelCase,query 用 snake_case(`C-01`) |
| 列表信封 | 列表 `{ items, next_cursor }`,单资源不套 `data`(`C-02`) |
| Mock 边界 | Mock 只模拟传输层与状态码,不模拟业务规则;业务规则必须等真接口验证 |
### 4.2 前后端并行配对
| 批次 | 后端主线 | 前端主线 | 共享契约 | 联调点(D3–D4) |
| --- | --- | --- | --- | --- |
| A0 | API / worker 骨架、Prisma 基线、健康检查 | Web 骨架、布局、登录壳、UI 包 | 错误码、分页、OpenAPI 管线 | 登录页可打开;`/health` 200 |
| A1 | 部门 / 用户 / 认证 / 守卫 / `/me` | 登录、用户管理、路由守卫、权限上下文 | `User` / `Me` / `Login` schema | 登录 → 用户 CRUD → 停用即时失效 |
| A2 | 角色 / 权限点 / 数据范围 / SoD | 角色编辑器、权限树、范围选择 | `Role` / `Permission` / `Scope` | 新角色授权后页面即时变化 |
| A3 | 行业 / 客户 / 客户组 / 字段审批 | 行业页、客户页、客户组、审批页 | `Industry` / `Customer` / `CustomerField` | 建客户 → 分配范围 → 越权 403 |
| A4 | 字典 / 系统配置 / 命名规则 | 字典双视图、配置页 | `DictType` / `DictItem` / `SystemConfig` | 字典三层合并、阈值读取一致 |
| A5 | 审计写入 / 检索 / 导出 / 分区 | 审计列表 / 详情 diff / 导出 | `AuditLog` | 操作后审计可查、导出本身留痕 |
| A6 | 任务协议 / 队列 / SSE / 幂等 | 任务中心、进度组件、角标 | `Task` / `TaskEvent` | 提交 → SSE 进度 → 取消 / 重试 |
| A7 | AI 四层配置 / 密钥 / Mock / 账本 | 供应商、模型、映射、提示词页 | `AiProvider` / `AiModel` / `AiMapping` | 保存 → 测试连通 → Mock 调用记账 |
| B0 | 行业包 / schema / 校验 / 发布 / 合规 | 行业包、设计器、试填预览、规则集 | `IndustryPack` / `FormSchema` / `Rule` | schema 保存 → 校验 → 发布 → 客户绑定 |
| B1 | 资产 / 版本 / 引用 / 上传 / 模板校验 | 资产库、上传、引用、预览 | `Asset` / `Presign` | 上传 → 引用保护 → 模板解析结果 |
| B2 | 要素卡 / 物化索引 / 参考物料 / 脚本模板 | form-engine、要素卡填写、模板管理 | `BriefCard` / `ScriptTemplate` | 行业包 schema → 表单渲染 → 检索 |
| B3 | 导出 / 命名 / zip / 签名 URL | 导出弹窗、进度、交付清单 | `Export` / `Manifest` | 勾选 → 导出 → 下载 → 审计 |
### 4.3 管理模块为什么必须先做
1. **横切依赖**:`ScopeContext`、权限守卫、审计埋点、任务协议、字典、系统配置会被后续每个模块调用;后补等于全量返工。
2. **数据归属**:所有业务表挂 `customer_id`,客户与行业目录是资产和生产任务的根节点(PRD §4 / `R-20`)。
3. **红线承接**:客户隔离(`R-04`)、审计(`R-05`)、阈值同源(`R-26`)、低质量标记(`R-30`)都依赖这层底座。
4. **成本最低**:立项建议明确指出 M0 三件必做是数据权限、审计日志、客户资产包,后补成本极高。
### 4.4 每批交付物与可演示性
| 类型 | 最低交付 |
| --- | --- |
| 后端 | 可启动的 API / worker、OpenAPI 快照、迁移与种子、接口冒烟脚本、审计样例 |
| 前端 | 可打开的页面、空 / 加载 / 错误三态、权限渲染、Mock 数据、走查录屏 |
| 数据 | 迁移文件、种子数据(超管 / 示例角色 / 字典 / 电商行业包) |
| 文档 | 本批任务卡回写、接口说明、已知问题与临时开关 |
> 没有 UI 的批次用 `curl` / OpenAPI 演示;没有后端的批次用 Mock 演示。**不允许"等集成后再演示"。**
### 4.5 排期口径与产能校准
| 项 | 口径 |
| --- | --- |
| EPD | 净开发工作量,不含评审等待、外部 API 等待、部署等待(沿用技术架构 §10.2) |
| 编队 | 1 Lead + 3 Worker(前端 / 后端 / 基础设施与测试),效率系数 0.75 |
| 净产能 | **3.0 EPD / 工作日**(已含自检与集成,不含人类评审) |
| 缓冲 | **25%**(评审、联调、返工、外部依赖) |
| 换算 | `日历工作日 = EPD ÷ 3.0 × 1.25`;如编队缩为 1 Lead + 2 Worker,按 2.0 EPD/工作日重算 |
| 校准 | 每批回写"计划 vs 实际";连续两批偏差 > 20% 触发重排并在 §5 标注 |
| 不承诺 | 不写绝对交付日期;里程碑以"W 周次 + 退出标准"表达;如需对外承诺,由人类按实际起点换算(`DP-03`) |
---
## 5 里程碑与批次计划
### 5.1 里程碑总表
| 里程碑 | 对应架构阶段 | 范围 | 净工量(EPD) | 参考日历 | 退出标准 |
| --- | --- | --- | --- | --- | --- |
| **M0 地基** | T0 + M0 增量 | A0–B3(§6) | 65–70 | 6–7 周 | §12.1 全部通过;电商行业包 v1 发布;审计可查 |
| **M1 主链路** | T1 | 脚本生成 / 校核 / 审核入库 / 编号;图片线;预览勾选;导出归档;金融行业包试跑 | 48–56 | 4–5 周 | AC-01;指标可测 |
| **M2 提效** | T2 | 视频逐镜 / 拼接 / 校验;快筛;变体矩阵;脚本版本与交付包;AI 路由 / 额度;成本看板;成片入库 | 62–70 | 5–6 周 | 视频闭环;成本可查;任务成功率 ≥ 98% |
| **M3 复用** | T3 | 资产复用度量、效果标签、混合实拍与口播、成片入库与素材库、送审与效果回流、SSO / 配置完善 | 40–50(细化 45) | 4–5 周 | 复用率 ≥ 60%;冷启动 ≤ 1 工作日;关联率与日指标可测 |
| **M4 交付闭环** | T3 收尾 | 投放登记完善、日指标、爆量判定与阈值固化、脚本权重反哺、关联率 / 爆量榜看板 | 10–14(细化 12) | 1–2 周 | 爆量口径可配置;反哺生效;M0–M4 回归通过 |
> 交叉校验:技术架构 T0–T2 净开发 120–145 EPD;本计划 M0–M2 为 175–196 EPD(按各里程碑区间相加;按当前 WBS 实际合计 190.5);M0–M4 合计 225–260(细化 247.5),差额来自 M0 增量(设计器 / 资产 / 要素卡 / 导出)、M3 并入成片入库与效果回流、M4 新增交付闭环与更细的验收口径。若采用架构原口径,可把 B1–B3 后移(见 §2.5)。
### 5.2 M0 批次总览
| 批次 | 状态 | 主题 | 依赖 | EPD | 参考工期 | 并行波次 | 退出条件(摘要) |
| --- | --- | --- | --- | --- | --- | --- | --- |
| **A0** | ✅ 已完成 | 工程骨架与契约基线 | — | 6 | 4–5 日 | W0 | lint / typecheck / test / CI 全绿;三依赖可起;api / web / worker 可启动;OpenAPI 可导出 |
| **A1** | ✅ 已完成 | 身份认证与用户管理 | A0 | 6 | 4–5 日 | W1 | 登录 / 刷新 / 登出;用户生命周期;路由权限;权限三态用例 |
| **A2** | ✅ 已完成 | 角色权限与数据范围 | A1 | 5.5 | 4–5 日 | W2 | 角色可配;SoD 命中拒绝;特殊权限默认关闭;范围过滤生效 |
| **A3** | ✅ 已完成 | 客户与行业目录 | A1 / A2 | 7 | 4–5 日 | W2 | 行业 / 客户 / 客户组可用;唯一性;状态只读;字段审批 |
| **A4** | 未开始 | 数据字典与系统配置 | A3 | 4 | 3–4 日 | W3 | 三层合并;编码不可改;阈值同源;配置版本 + 审计 |
| **A5** | 未开始 | 审计与日志 | A1 / A4 | 4 | 3–4 日 | W2–W3 | 关键操作全留痕;不可篡改;导出自身审计 |
| **A6** | 未开始 | 任务中心与队列骨架 | A0 / A1 | 6 | 4–5 日 | W2–W3 | 提交 → SSE → 完成 / 失败;幂等;取消 / 重试 |
| **A7** | 未开始 | AI 配置与调用底座 | A0 / A1 / A5 | 6 | 4–5 日 | W3 | 四层配置;Mock 调用;密钥不泄露;账本可查 |
| **B0** | 未开始 | 行业包与表单设计器 | A3 / A4 | 8 | 6–7 日 | W4 | 电商行业包 v1;七项校验;双人发布;快照 |
| **B1** | 未开始 | 资产与模板最小集 | A3 / A5 | 6.5 | 5–6 日 | W4 | 15 类资产;引用保护;PSD 图层校验 |
| **B2** | 未开始 | 要素卡与脚本模板 | B0 | 4.5 | 4–5 日 | W5 | 动态表单渲染;要素卡检索;模板版本 |
| **B3** | 未开始 | 导出骨架与归档 | B1 / B2 | 5 | 4–5 日 | W6 | E-01~E-03;命名规则;审计;签名 URL |
**合计**:12 个批次,68.5 EPD,6–7 周(含 25% 缓冲与 M0 末集成缓冲)。
> **A0 进度(2026-11-02)**:✅ 已完成。10/10 项 WBS 通过;本批门禁 `format:check / lint / typecheck / test / build / test:int / openapi:export / openapi:diff / e2e` 与本地 CI `pnpm ci:local` 全绿;`/health`、`/api/docs`、web 布局与登录壳、worker 启动均实测通过。实现记录与偏差见 [A0 实施报告](./灵犀_A0工程骨架与契约基线_实施报告_V0.1.md)。环境适配:本地 PG/Redis 复用已有 Docker、对象存储使用公网 RustFS、种子仅 `system_configs`(`Q-A0-01`)、Gitea 暂无 runner 时以 `pnpm ci:local` 为准。
>
> **A1 进度(2026-11-03)**:✅ 已完成。10/10 项 WBS 通过;`format:check / lint / typecheck / test` 全绿(shared 121 / api 90 / web 120),`test:int` 33 项(真实 PG / Redis),A1-QA-01 浏览器 e2e 6/6;登录 → 首次登录强改 → 用户列表 / 新建 / 详情 / 停用启用 / 角色调整 / 客户转交占位全链路实测。**补强**:`/system/departments` 部门管理(两级组织树、负责人/排序、只停用不删除、停用拦截)已落地并联调。实现记录、口径与遗留见 [A1 实施报告](./灵犀_A1身份认证与用户管理_实施报告_V0.1.md)。已知遗留:客户转交真实接口(A3)、审计落库(A5)。
>
> **A2 进度(2026-11-03)**:✅ 已完成。8/8 项 WBS 通过;H1 权限门已确认并记录 [ADR-001](../adr/ADR-001-权限点目录与六类数据范围.md);UI 门三套原型独立评审 A 8 / B 8 / C 7,用户选定 **B 主从分栏**。最终验收(2026-11-03):`format:check / lint / typecheck / test` 全绿(shared 121 / api 90 / web 120,共 331),`test:int` 33 项(真实 PG / Redis),A2-QA-01 浏览器 e2e 1/1(22.1s,最终版 UI 下复跑通过);角色可配、SoD 40304、特殊权限默认关闭、六类范围解析与 `ScopeContext` 全链路、系统角色保护、变更审计与 outbox 均实测。收口项:侧栏/页面统一为「角色管理」、列表页头主操作右对齐、角色详情「编辑角色」移入页头、移除重复的权限点目录抽屉。实现记录、口径与遗留见 [A2 实施报告](./灵犀_A2角色权限与数据范围_实施报告_V0.1.md)。已知遗留:A3 前客户目录为空集、A5 审计落库、DP-14 两项特殊权限、导航模块级权限口径。
### 5.3 批次依赖图
```mermaid
flowchart TD
A0["A0 工程骨架"] --> A1["A1 身份与用户"]
A1 --> A2["A2 角色与数据范围"]
A1 --> A3["A3 客户与行业"]
A2 --> A3
A3 --> A4["A4 字典与配置"]
A1 --> A5["A5 审计与日志"]
A4 --> A5
A0 --> A6["A6 任务中心"]
A1 --> A6
A1 --> A7["A7 AI 配置"]
A5 --> A7
A3 --> B0["B0 行业包与设计器"]
A4 --> B0
A3 --> B1["B1 资产最小集"]
A5 --> B1
B0 --> B2["B2 要素卡与脚本模板"]
B1 --> B3["B3 导出骨架"]
B2 --> B3
B3 --> M1["M1 主链路"]
M1 --> M2["M2 提效"]
```
### 5.4 并行波次
| 波次 | 并行批次 | 说明 | 关键路径 |
| --- | --- | --- | --- |
| W0 | A0 | 全员先建骨架,避免各写各的 | ✓ |
| W1 | A1 | 身份是全部页面的前置 | ✓ |
| W2 | A2 / A3 / A5 / A6 | 4 个批次争 3 个 Worker:优先 A2 + A3 + A6,A5 从 W2 后段插入 | ✓(A3) |
| W3 | A4 / A7 / A5 收尾 | A4 依赖 A3;A7 依赖 A5 | — |
| W4 | B0 / B1 | 两条独立线:配置线与资产线 | ✓(B0) |
| W5 | B2 / B3 前段 | B3 的导出记录可先用 Mock 数据 | ✓(B2) |
| W6 | B3 收尾 + M0 集成 | 全链路演示 + 审计抽样 + 性能冒烟 | ✓ |
> **争用说明**:W2 的 A5 可拆成"审计写入骨架(A1 后即可)"与"检索 / 导出(A4 后)"两段,前者随 A2/A3 并行,后者在 W3 完成。任务卡已按此拆分(A5-BE-01/02 与 A5-BE-03)。
### 5.5 M1 迭代级计划(T1)
| 迭代 | 主题 | 范围(PRD 编号) | 前后端要点 | 净工量 | 退出标准 |
| --- | --- | --- | --- | --- | --- |
| **M1-1** | 脚本生成与解析 | S-05、S-03、S-07(基础四类)、S-14(基础) | BE:生成任务、提示词组装、JSON 解析、校核规则、失败重试;卖点库标签与使用计数;FE:生成向导、结果列表、失败明细 | 14 | 批量生成可提交,逐条结果可见,解析失败留原文 |
| **M1-2** | 审核入库与编号 | S-08、S-09、S-13、S-10(基础:入库即版本)、S-11(基础:引用写入) | BE:审核状态机、批量审核、原子取号、版本;FE:审核工作台、入库、编号展示 | 12 | 过审入库分配唯一编号;修改产生新版本 |
| **M1-3** | 图片生产线 | M-01、M-03、M-04(安全区 / 警示语)、M-05、M-14 | BE:`render` 包(PSD 解析 / 抠图 / 合成 / 编码)、image 队列、批次快照、低质量标记;FE:批次提交、网格预览、失败重试 | 15 | 单模板端到端出图;批次可重试;低质量有标记 |
| **M1-4** | 预览勾选、导出与收口 | M-03 完整、E-04、E-05(归档骨架)、金融行业包 v1 试跑 | BE:勾选持久化、导出打包、归档、命名;FE:快筛网格、勾选恢复、导出记录、交付清单 | 14 | AC-01 达成;1 个金融客户试跑 1 个批次 |
> M1 合计 48–56 EPD(细化 55);任务组见 §6.13。关键路径为 M1-3(图片渲染是唯一无先例链路,`R-T-13`),建议从 M1-2 起并行做 PSD 解析 spike(2–3 日,不计入批次正式工量,算风险预备)。注:S-10 / S-11 在 M1 只做基础、E-05 只做归档骨架,完整能力分别在 M2-4 / M3 点亮。
### 5.6 M2 迭代级计划(T2)
| 迭代 | 主题 | 范围(PRD 编号) | 前后端要点 | 净工量 | 退出标准 |
| --- | --- | --- | --- | --- | --- |
| **M2-1** | 视频逐镜生成 | M-06、M-15、M-16 | BE:分镜拆解、关键帧、图生视频、镜头并行、超时控制;FE:视频方向选择、任务进度、在线预览 | 15 | 单条视频从脚本到分镜成片跑通 |
| **M2-2** | 拼接、校验与单镜替换 | M-07、M-11、M-17 | BE:ffmpeg 拼接、音量归一、自动校验、命名;FE:单镜重生成、成片下载 / 导出 | 13 | 成片可下载;校验报告可见;单镜可替换 |
| **M2-3** | 快筛、变体与成片入库 | S-06、M-08、M-09、M-12、M-18~M-20 | BE:变体矩阵、成本预估、分片直传 / 秒传、版本链;FE:分组并排快筛、快捷键、素材库双视图 | 15 | 快筛效率达标;外部成片可入库并转码 |
| **M2-4** | 脚本增强与交付包 | S-10、S-11、S-15~S-17、E-07 | BE:脚本版本链与 diff、引用记录、结构模板库审核、客户在线审核链接、Word 交付包;FE:版本对比 / 回滚入口、模板库、审核链接、交付记录 | 10 | 脚本可版本化与追溯;审核链接与交付包可用且留痕 |
| **M2-5** | AI 治理、资产增强与第三行业 | P-09、P-10、P-11、A-06~A-09、M-02、第三行业包 | BE:路由 / 降级 / 额度 / 预算闸门 / 成本聚合、资产版本与人物场景池、规格矩阵补齐;FE:AI 路由与额度页、成本看板、资产增强 | 14 | 成本可查可分摊;预算 100% 阻断;第三行业包可配置 |
> M2 合计 62–70 EPD(细化 67);任务组见 §6.14。视频质量不确定性最高(`R-T-02`),必须先做"单镜质量基线"再上批量。注:`M-18~M-20` 在 PRD 功能表标注 P1(M2)、在 §7 归入 M3,本计划按功能表放在 M2,M3 只做完善;其余提前项见 §2.5。
### 5.7 M3 迭代级计划(T3)
| 迭代 | 主题 | 范围(PRD 编号) | 前后端要点 | 净工量 | 退出标准 |
| --- | --- | --- | --- | --- | --- |
| **M3-1** | 资产复用与口播增强 | A-10、A-11、S-12、S-18、M-10、M-13 | BE:复用率统计、复审任务与降权、脚本效果标签、版本 diff / 回滚、TTS + lip sync、相似度提示与来源标签;FE:复用看板、复审工作台、版本对比、口播配置 | 15 | 复用率与排行可统计;复审可执行;口播成片可预览并留痕 |
| **M3-2** | 成片运营与效果回流 | M-21 ~ M-24、E-05(完善)、E-06 | BE:脚本-素材关联与血缘、分享链接、送审登记、投放登记与日指标、批量重导 / 按组导出;FE:关联视图与待办、送审台、投放登记、指标视图 | 16 | 关联率可测;日指标可导入;分享与送审全留痕 |
| **M3-3** | 外部访问与系统完善 | P-12、P-13、M-18 ~ M-20(M2 遗留收口)、检索与性能收口 | BE:SSO / 手机号适配、系统配置、检索与标签、性能收口;FE:登录方式、配置页、全局搜索 | 14 | SSO 或手机号至少一种可用;配置项生效;P95 达标 |
> M3 合计 40–50 EPD(细化 45);任务组见 §6.15。M-22 分享链接受 `R-28` 开关约束(默认关闭,`DP-18`);P-12 的 SSO 协议未定(`Q-10` / `DP-04`),M3 先做手机号 + 适配器,SSO 可替换。
### 5.8 M4 迭代级计划(交付闭环)
| 迭代 | 主题 | 范围(PRD 编号) | 前后端要点 | 净工量 | 退出标准 |
| --- | --- | --- | --- | --- | --- |
| **M4-1** | 爆量判定与脚本反哺 | M-25、M-26(查询部分) | BE:爆量判定任务、阈值配置、评级 → 权重映射与反哺、关联率 / 复用排行查询;FE:爆量榜、关联率与排行视图 | 7 | 阈值只读 `system_configs`;判定可重跑且幂等;反哺生效可在脚本参考权重中查到 |
| **M4-2** | 度量看板与项目验收 | M-26(看板)、成本 / 质量 / 资产总览、告警 | BE:指标汇总与导出、告警规则;FE:总看板;QA:M0–M4 全量回归 | 5 | 四类看板可用;告警可触发;全量回归通过 |
> M4 合计 10–14 EPD(细化 12),1–2 周(含验收与全量回归);任务组见 §6.16。M4 不新增业务表,复用投放登记 / 日指标 / 脚本权重字段;爆量阈值口径见 `DP-16`。
### 5.9 M5 预研边界(不排期)
PRD §7 把 **M-27(素材元素级拆解)** 与「自动字幕 → TTS 配音 → FFmpeg 时间线剪辑 → 一键成片 → 数字人 / 生成式画面」列为 **M5 预研**,不进入本计划排期。进入条件(满足后单独立项,不在本文件加任务卡):
1. M4 验收通过,M0–M4 的资产 / 效果数据已积累 ≥ 1 个季度;
2. `Q-32` 明确是否做 AI 生图 / 生视频,以及覆盖哪些非电商行业;
3. 预算、版权(肖像 / 音乐 / 模型许可)与算力方案获批。
### 5.10 关键路径与缓冲
- **关键路径**:`A0 → A1 → A3 → B0 → B2 → B3 → M1-3(图片线)→ M2-1(视频线)→ M3-2(效果回流)→ M4-1(爆量判定)`;
- **有浮动的批次**:A2(可后 1 日)、A5(可拆两段)、A6 / A7(W2–W3 内可调)、B1(与 B0 并行);
- **缓冲安排**:每波次末留 1 日技术债 / 联调缓冲;M0 末额外 3 日集成缓冲(全链路演示 + 审计抽样 + 性能冒烟);M1–M3 各留 2 日;M4 留 1 日做全量回归;
- **全项目参考日历**:M0 6–7 周 + M1 4–5 周 + M2 5–6 周 + M3 4–5 周 + M4 1–2 周 = **20–25 周**(约 5–6 个月);
- **关键路径纪律**:关键路径上的批次**不接受插入新范围**;如必须插入,先砍等量范围或顺延里程碑。
---
## 6 任务级工作分解(WBS)
> **编号规则**:`A1-BE-02` = 批次 A1 / 端别 / 序号。端别:`INF` 基础设施、`SH` 共享包、`BE` 后端、`FE` 前端、`QA` 测试。
> **工量**:EPD(等效人日),已含自检与单测,不含人类评审与联调等待。
> **门禁**:每批末尾的门禁是进入下一批的必要条件;验收要点写可执行断言,不写主观描述。
> **开卡时展开**:本表是计划级摘要;批次开卡按 §3.3 补齐接口、鉴权、写范围、风险后执行。
### 6.1 A0 工程骨架与契约基线
> **执行状态:✅ 已完成(2026-11-02)**。以下 10 项 WBS 全部交付并实测;验收证据、环境差异与待确认项见 [A0 实施报告](./灵犀_A0工程骨架与契约基线_实施报告_V0.1.md)。
**目标**:一次建对仓库、工具链、CI 与契约管线,避免后续每个批次各修一遍。
**对应**:技术架构 §10.1;`AGENTS.md` §3 / §5 / §6;工程规范 01–03 / 06 / 09。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD | 状态 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| A0-INF-01 | Monorepo 与工具链 | INF | pnpm workspace + Turborepo;TS strict;ESLint 9 flat + Prettier + commitlint + lint-staged;`.nvmrc` 24.15.0、`engines`、`packageManager`、`only-allow pnpm`;`apps/api`、`apps/worker`、`apps/web`、`packages/*`、`prisma/`、`infra/` 目录骨架 | — | `pnpm install` 成功;`pnpm lint` / `pnpm typecheck` 可执行;目录与 AGENTS §5 一致;npm / yarn 被拒绝 | 1.0 ✅ |
| A0-INF-02 | 本地依赖与迁移种子 | INF | `docker-compose.dev.yaml`(PG18 / Redis7.4 / MinIO)、健康检查;`.env.example`;Prisma 初始化、首版迁移、种子脚本(超管、示例角色、核心字典、电商行业包占位) | A0-INF-01 | `pnpm compose:up` 三依赖健康;`pnpm db:migrate` 正向成功;种子可重复执行不重复插入 | 0.5 ✅ |
| A0-INF-03 | CI 与质量门禁 | INF | 流水线:`install --frozen-lockfile` → lint → typecheck → test → build → OpenAPI 产物;依赖缓存;失败阻断合并 | A0-INF-01 | 首条 PR 全绿;故意写 `any` / 类型错误 / 未格式化能被拦截 | 0.5 ✅ |
| A0-BE-01 | API 骨架 | BE | NestJS 11 + Fastify;Pino + trace_id;统一错误过滤器(`{code,message,details,trace_id}`);`/health`;Swagger / OpenAPI 生成;Zod 管道;CORS 与安全头 | A0-INF-01 | `GET /health` 返回 200;错误结构统一;OpenAPI 可导出且含错误码 | 1.0 ✅ |
| A0-BE-02 | Prisma 基线 | BE | Prisma client 封装;迁移基线;`outbox_events` / `idempotency_keys` / `system_configs` 骨架;ULID 主键、软删、时间字段约定 | A0-INF-02 | 迁移可升可回滚;字段命名与工程规范 05 一致;无跨模块表 | 0.5 ✅ |
| A0-SH-01 | shared 包基线 | SH | 错误码枚举(400xx–500xx)、权限点常量骨架与命名规范(`模块:动作`)、ULID、游标分页、时间与命名工具、通用 Zod schema | A0-INF-01 | 前后端同时引用成功;shared 不依赖任何业务包 | 0.5 ✅ |
| A0-FE-01 | Web 骨架 | FE | Vite 6 + React 19 + Router 7 + TanStack Query 5 + Zustand 5;`@douyinfe/semi-ui-19` + `react19-adapter`;路径别名;请求层(token 注入、401 刷新、统一错误提示) | A0-INF-01 | 页面可启动;路由可切换;请求层有单测 | 0.5 ✅ |
| A0-FE-02 | UI 包基线 | FE | Semi 二次封装(表格 / 查询表单 / 弹窗 / 空态 / 错误态 / 加载骨架);`icons.ts` 统一出口(Remix Icon 语义名);locale;主题 token | A0-FE-01 | 业务代码不直接引图标库、不内联 SVG;ESLint 可拦截违规引用 | 0.5 ✅ |
| A0-FE-03 | 布局与登录壳 | FE | 侧边导航(按模块分组)、顶栏(用户 / 任务角标占位)、面包屑、401 / 403 / 404 页、登录页静态壳 | A0-FE-01 | 布局可打开;403 页可演示;导航配置集中管理、可按权限过滤 | 0.5 ✅ |
| A0-QA-01 | 冒烟与报告 | QA | 健康检查 / 登录页 / OpenAPI 冒烟用例;覆盖率报告;CI 产物归档 | A0-INF-03 | CI 产出测试报告;3 条冒烟通过 | 0.5 ✅ |
**本批门禁**:`pnpm format:check && pnpm lint && pnpm typecheck && pnpm test` 全绿;`pnpm ci:local` 全绿(含 build、test:int、openapi:export / diff、e2e);api / web / worker 可启动;OpenAPI 快照入库;CI 流程已配置,Gitea 暂无 runner 时以本地 CI 为准。
> **环境与范围偏差**:本地 PG / Redis 复用已有 `docker-postgres-1` / `docker-redis-1`;S3 使用公网 RustFS(单桶 `lingxi-dev`);超管 / 角色 / 字典 / 电商行业包种子依赖 A1–A4 的表,A0 仅种子 `system_configs`,已登记为 `Q-A0-01` 并在 A0 报告中说明。
### 6.2 A1 身份认证与用户管理
> **执行状态:✅ 已完成(2026-11-03)**。以下 8 项 WBS 全部交付并实测;验收证据、口径与遗留见 [A1 实施报告](./灵犀_A1身份认证与用户管理_实施报告_V0.1.md)。
**目标**:能登录、能装人、能按权限渲染页面。**对应**:P-01、PRD §5.4.1;架构 §6.2 / §7.1;`R-16` / `R-17` 前置。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD | 状态 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| A1-BE-01 | 部门与用户 | BE | `departments`(两级,父级最多两级校验)、`users`(手机号唯一、离职停用不删、一人多角色);用户 CRUD、停用 / 启用、角色绑定、客户转交接口占位 | A0-BE-02 | 建部门超两级被拒;停用后登录被拒;删除用户被拒、只能停用 | 1.0 | ✅ |
| A1-BE-02 | 认证与会话 | BE | 账号密码登录(Argon2)、JWT access + refresh 旋转、`jti` 吊销、登出、失败次数限制、密码策略;SSO 适配器接口(不实现) | A0-BE-02 | 登录 → 刷新 → 登出全链路;旧 refresh 立即失效;错误码 40101 / 40102 正确 | 1.0 | ✅ |
| A1-BE-03 | 守卫链与审计拦截 | BE | `JwtGuard` → `PermissionGuard` → `SpecialPermissionGuard` → `ScopeGuard` 骨架 → 业务校验;`@Audit()` 装饰器与请求上下文(用户、客户、trace_id) | A1-BE-02、A0-SH-01 | 无 token 401;无权限点 40301;守卫顺序可单测 | 1.0 | ✅ |
| A1-BE-04 | `/me` 与权限上下文 | BE | 当前用户、角色、权限点集合、数据范围、可见客户集合;权限变更即时生效(不缓存旧权限) | A1-BE-03 | `/me` 与登录返回一致;角色变更后下一次请求生效 | 0.5 | ✅ |
| A1-BE-05 | 部门管理补强 | BE | `GET /departments/tree?include_disabled`、`POST/PATCH /departments`、`POST /departments/{id}/disable|enable`;负责人/排序;只停用不删除;有在职成员或启用子部门禁止停用 | A1-BE-01 | 两级/超两级/重名/负责人校验;停用三类拦截;无 DELETE | 0.5 | ✅ |
| A1-FE-01 | 登录与会话 | FE | 登录页、token 存储与刷新、登出、会话过期跳转、路由回跳 | A0-FE-03 | 登录 → 刷新页面仍在线;token 过期自动刷新一次;刷新失败回登录 | 0.5 | ✅ |
| A1-FE-02 | 用户管理页 | FE | 用户列表(游标分页 / 筛选)、新建 / 编辑、停用确认、部门筛选、角色多选、客户转交入口 | A0-FE-02 | 列表可分页筛选;停用需二次确认;页面按 `user:manage` 隐藏写操作 | 1.0 | ✅ |
| A1-FE-03 | 权限上下文与路由守卫 | FE | `/me` 全局缓存、权限点 Hook(`usePermission`)、路由级与按钮级控制、403 页 | A1-FE-01 | 无权限路由被拦截;按钮级无权限不渲染(非 `removeChild` 式隐藏) | 0.5 | ✅ |
| A1-FE-04 | 部门管理页 | FE | `/system/departments` 两级组织树 + 详情/内联编辑 + 新建部门/小组 + 停用/启用二次确认;显示已停用、`?id=` 选中可恢复 | A1-FE-01、A1-FE-03 | 无 `user:manage` 只读;停用被拒有明确提示;刷新恢复选中 | 0.5 | ✅ |
| A1-QA-01 | 账号生命周期用例 | QA | 登录 / 刷新 / 登出 / 停用 / 角色变更 / 越权 6 类用例 | A1-BE-04 | 用例全部通过并进 CI | 0.5 | ✅ |
**本批门禁**:登录闭环;用户生命周期可演示;权限有 / 无用例通过(范围外 ScopeContext 随 A2 补齐);审计已记录登录与用户变更(当前为结构化日志,落库随 A5)。
### 6.3 A2 角色权限与数据范围
**目标**:角色可配置、范围可解析、互斥可校验。**对应**:P-02 / P-03、PRD §5.4.3;`R-16` / `R-17` / `R-18`;架构 §6.2 / §7.1;`D-07`。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| A2-BE-01 | 角色 CRUD / 复制 / 停用 | BE | `roles`、`role_permissions`;新建 / 复制 / 停用;超管 `is_system=true` 不可改;删除前校验无绑定用户;示例模板 5–7 个可改可删 | A1-BE-01 | 超管不可删改停用(仅显示名可改);有用户绑定的角色只能停用;复制生成独立角色 | 0.5 |
| A2-BE-02 | 权限点注册与同步 | BE | 代码注册的权限点目录 → 启动时同步 `permissions` 表;`code` 唯一;前端可拉取权限树 | A0-SH-01 | 新增权限点无需手写迁移;`/permissions` 返回树形结构 | 0.5 |
| A2-BE-03 | 角色权限与特殊权限 | BE | 角色 → 权限点绑定;M0 特殊权限五项(导出 / AI 配置 / 审计查看导出 / 行业包发布 / 字段审批)默认关闭、单独授予;跨客户复用、批量删除待架构给编码后补入(`DP-14`) | A2-BE-01 | 新角色默认全空;特殊权限不随角色复制带入;二次确认记录审计 | 0.5 |
| A2-BE-04 | 数据范围与 ScopeContext | BE | 六类范围(全部 / 本部门及下级 / 本部门 / 指定客户组 / 负责客户 / 本人创建);`data_scopes` 解析为可见客户集合;Repository 强制注入 `customer_id` | A1-BE-03、A2-BE-01 | 范围外写操作 40302、列表裁剪为空、单条 404;SQL 必带客户维度;禁止"先查全量再过滤" | 1.0 |
| A2-BE-05 | SoD 与变更审计 | BE | 三对互斥校验(生成 / 审核、行业包编辑 / 发布、字段申请 / 审批);保存即校验;变更审计含前后值、影响用户数;受影响用户通知占位 | A2-BE-03 | 命中互斥返回 40304;审计可查"谁改了哪些权限点、影响多少人" | 0.5 |
| A2-FE-01 | 角色编辑器 | FE | 角色列表、权限点勾选树(按模块 / 操作)、六类数据范围选择、特殊权限单独区域、保存前影响面提示 | A1-FE-03 | 权限树与后端目录一致;保存失败展示 40304 与冲突对 | 1.0 |
| A2-FE-02 | 复制 / 模板 / 停用 | FE | 从角色或示例模板复制;停用倒计时与在线用户提示;角色详情展示绑定用户 | A2-FE-01 | 复制后可独立编辑;停用后在线用户下次请求失效 | 1.0 |
| A2-QA-01 | 权限三态与 SoD 用例 | QA | 每个角色相关端点 3 类用例(有 / 无 / 范围外)+ 3 对 SoD 用例;权限变更即时生效 | A2-BE-05 | 用例全部通过;越权访问有审计记录 | 0.5 |
> **A2 完成情况(2026-11-03,最终验收)**:8/8 项 WBS 完成;A2-BE-01~05、A2-FE-01/02、A2-QA-01 全部验收通过,计划状态置为 ✅ 已完成。H1 权限门确认:30 权限点 / 10 模块(保留 `read/write` 只补缺)、特殊权限五项 6 编码、SoD 三对、六类数据范围全链路、超管隐式全集、A2 审计先结构化日志;见 [ADR-001](../adr/ADR-001-权限点目录与六类数据范围.md)。UI 三套原型评审 A 8 / B 8 / C 7,用户选定 B 主从分栏。最终门禁:`test` 331 项全绿(shared 121 / api 90 / web 120),`test:int` 33 项,A2 e2e 1/1(22.1s);实现与遗留见 [A2 实施报告](./灵犀_A2角色权限与数据范围_实施报告_V0.1.md)。
**本批门禁**:角色可配、范围可解析、SoD 可拦截;权限三态用例全绿;特殊权限默认关闭;人类完成 **H1 权限门**(§3.4)。
### 6.4 A3 客户与行业目录
> **执行状态:✅ 已完成(2026-11-03 开发完成,2026-11-04 UI 对齐 / 本地 CI 最终验收)**。以下 9 项 WBS 全部交付并实测;实现记录、验收证据与遗留见 [A3 实施报告](./灵犀_A3客户与行业目录_实施报告_V0.1.md)。
**目标**:行业 / 客户 / 客户组 / 客户字段四件事立住,作为全部资产的根节点。**对应**:P-04 / P-05 / P-17、PRD §5.4.2 / §5.4.9;`R-20` / `R-04`;架构 §6.3.2。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD | 状态 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| A3-BE-01 | 行业目录(两级) | BE | `industries`;一级 → 二级最多两级;一级名称全局唯一、二级同父唯一;客户只挂末级行业;删除前校验无子行业 / 客户 / 资产,否则只能停用;有启用子行业时禁止停用 | A2-BE-04 | 重名 40902;有子行业 / 客户时删除被拒;有启用子行业停用被拒;停用后新建客户不可选 | 0.5 | ✅ |
| A3-BE-02 | 客户档案与状态机 | BE | `customers`;简称必填、`(industry_id, name)` 唯一;服务状态(在服务 / 暂停 / 结束);负责人 / 对接人;交付偏好;套用行业资产包入口 | A3-BE-01 | 简称缺失 42201;暂停只读、不能发起新任务;结束全只读 | 1.0 | ✅ |
| A3-BE-03 | 客户组 | BE | `customer_groups` + `customer_group_members`;客户组作为授权与数据范围最小单位 | A3-BE-02 | 成员增删幂等;数据范围引用客户组后可见集合正确 | 0.5 | ✅ |
| A3-BE-04 | 客户级字段申请与审批 | BE | `customer_fields`;申请(定义 + 用途 + 是否进入生成)→ 审批 → 生效;每客户 ≤ 5 个进入生成字段、基础字段 ≤ 10 | A3-BE-02 | 超限 40001(字段校验失败);未审批字段不进入生成;审批与变更进审计 | 1.0 | ✅ |
| A3-BE-05 | 客户上下文与归属校验 | BE | 客户上下文中间件;资产 / 任务归属校验函数;跨客户访问统一 404(不暴露存在性) | A2-BE-04、A3-BE-02 | 跨客户访问返回 40401;所有查询带 `customer_id` | 0.5 | ✅ |
| A3-FE-01 | 行业管理页 | FE | 行业列表 / 新建 / 编辑 / 停用;删除前引用提示 | A0-FE-02 | 重名与有客户时的错误可读;停用状态清晰 | 0.5 | ✅ |
| A3-FE-02 | 客户列表与档案 | FE | 列表(行业 / 状态 / 负责人筛选)、详情、分步新建(行业 → 基础信息 → 交付偏好 → 资产包)、简称必填校验 | A3-FE-01 | 分步表单可回退;暂停 / 结束状态只读并提示 | 1.5 | ✅ |
| A3-FE-03 | 客户组管理 | FE | 客户组列表、成员批量添加 / 移除、按客户组授权提示 | A3-FE-02 | 批量操作有确认与结果反馈 | 0.5 | ✅ |
| A3-FE-04 | 字段申请与审批 | FE | 字段定义表单、用途说明、是否进入生成、审批列表、超限提示 | A3-FE-02 | 申请 / 审批状态可追踪;超限给出明确文案 | 0.5 | ✅ |
| A3-QA-01 | 唯一性 / 状态 / 范围用例 | QA | 行业与客户唯一性、状态只读、跨客户越权、字段上限 | A3-BE-05 | 用例全绿;越权访问有审计 | 0.5 | ✅ |
**本批门禁**:可建行业 → 客户 → 客户组;唯一性与状态机生效;客户字段审批可用;所有查询带客户维度。
> **A3 完成情况(2026-11-03 开发完成 / 2026-11-04 最终验收)**:9/9 项 WBS 全部 ✅。两级行业树(ADR-002)、客户档案与状态机、客户组、客户级字段双层与审批、客户转交、真实 `CustomerDirectory`、客户上下文与跨客户 404 全部落地;前端按用户选定混搭实现(行业 B / 客户列表 A / 客户详情 A / 新建 B / 客户组 B / 字段 A),侧栏更名「客户管理」「行业管理」并新增「客户组」。门禁:`format:check / lint / typecheck / test` 全绿(shared 131 / api 90 / web 125,共 346),`test:int` 39 项(5 文件,含 A3 client 6 条),A3 浏览器 e2e 1/1(11.6s),`build` 8/8;实现记录、截图与遗留见 [A3 实施报告](./灵犀_A3客户与行业目录_实施报告_V0.1.md)。已知遗留:B0 行业资产包套用、A5 审计落库、A4 字段上限配置、客户详情面包屑末级名称。
### 6.5 A4 数据字典与系统配置
**目标**:字典与配置成为唯一来源,杜绝前后端硬编码。**对应**:P-06、P-13(部分)、PRD §5.4.5;`R-10` / `R-01` / `R-26`;架构 §5.3 / §5.7。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| A4-BE-01 | 字典模型与三层合并 | BE | `dict_types` / `dict_items` 通用枚举表;类型 + 编码 + 名称 + 父编码 + 行业 + 排序 + 启用;编码不可改、名称可改;查询按"本行业 + 父行业 + 通用"三层合并 | A3-BE-01 | 一张表同时表达二级树与词表;编码修改被拒;三层合并结果有单测 | 1.0 |
| A4-BE-02 | 系统配置与版本 | BE | `system_configs` 键值 + 版本 + 变更审计;命名规则、导出设置、通知开关、阈值(爆量 / 超时 / 上限)单一来源;前后端同源读取 | A0-BE-02 | 配置变更留前后值;阈值只有一处定义;前端上限读取配置接口 | 0.5 |
| A4-BE-03 | 命名规则服务 | BE | `R-01` 占位符解析(行业 / 客户 / 方向 / 日期 / 序号),中文 / 字母 / 数字 / 下划线 / 短横线校验,同名自动加序号,≤ 100 字符 | A4-BE-02 | 占位符缺失报错;同名序号连续;规则可被导出 / 素材 / 脚本共用 | 0.5 |
| A4-BE-04 | 字典快照 | BE | 字典项被引用时保存填写时快照;字典变更只影响新数据;历史统计按填写时解释(`R-10`) | A4-BE-01 | 改字典名称后历史数据不变;快照查询可复现 | 0.5 |
| A4-FE-01 | 字典管理 | FE | 字典类型列表、条目树 / 词表双视图、行业作用域、排序、启停;编码只读 | A4-BE-04 | 编码不可编辑;树与词表可切换;影响范围提示 | 0.5 |
| A4-FE-02 | 系统配置页 | FE | 命名规则、导出设置、通知、阈值配置;版本与变更记录 | A4-BE-02 | 保存前展示影响面;阈值修改有二次确认 | 0.5 |
| A4-QA-01 | 合并 / 快照 / 同源用例 | QA | 三层合并、编码不可改、快照、阈值前后端一致 | A4-BE-04 | 用例全绿;改字典不影响历史 | 0.5 |
**本批门禁**:字典三层合并可用;编码不可改;阈值只存一处且前后端一致;配置变更可审计。
### 6.6 A5 审计与日志
**目标**:关键操作全留痕、不可篡改、可检索可导出。**对应**:P-07、PRD §5.4.6;`R-05`;架构 §5.4.5 / §9.7;工程规范 08。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| A5-BE-01 | 审计表与 append-only | BE | `audit_logs` 按月分区;应用账号只有 INSERT 权限(DB 层禁 UPDATE / DELETE);字段:主体、动作、对象、前后值、客户、IP / UA、trace_id | A0-BE-02 | 直接 UPDATE / DELETE 被数据库拒绝;分区可自动创建 | 0.5 |
| A5-BE-02 | 审计采集 | BE | `@Audit()` 装饰器 + 领域事件采集(PRD §5.4.6 七类):登录 / 登出、权限变更、资产增删改、客户与字典等配置变更、导出、任务提交与结果、敏感数据访问 | A1-BE-03、A4-BE-02 | 关键动作 100% 有记录;失败请求也记录;前后值可 diff | 0.5 |
| A5-BE-03 | 审计检索与导出 | BE | 按人 / 客户 / 时间 / 动作 / 对象检索(游标分页);导出为异步任务并**自身也写审计**;只读接口 | A5-BE-02 | 检索返回稳定排序;导出记录含"谁导出了审计";无修改入口 | 0.5 |
| A5-BE-04 | 敏感访问与保留归档 | BE | 客户资产包、成本数据、审计日志查看单独留痕;保留 ≥ 12 个月策略与归档任务占位(`QT-10`) | A5-BE-03 | 查看成本 / 审计也产生审计;归档任务可配置 | 0.5 |
| A5-FE-01 | 审计列表与详情 | FE | 多条件筛选、列表、详情(前后值 diff、trace_id、IP)、只读标识 | A5-BE-03 | 前后值对比可读;无可编辑控件 | 0.5 |
| A5-FE-02 | 审计导出与只读 | FE | 导出(异步进度 + 下载)、导出历史、权限点控制 | A5-FE-01 | 无 `audit:export` 不显示导出;导出后审计列表新增一条 | 0.5 |
| A5-INF-01 | 运行日志与观测 | INF | Pino 字段规范、trace_id 贯通、OTel 接入、日志平台入口(后台只放跳转链接,不入库) | A0-BE-01 | 请求可串 trace;后台"运行日志"入口可跳转;日志无密钥 | 0.5 |
| A5-QA-01 | 不可篡改与留痕用例 | QA | 登录 / 权限 / 资产 / 配置 / 导出 / 任务 / 敏感访问 7 类留痕 | A5-BE-04 | 用例全绿;篡改尝试失败 | 0.5 |
**本批门禁**:关键操作全留痕;审计不可改;导出本身留痕;运行日志与审计分离。
### 6.7 A6 任务中心与队列骨架
**目标**:所有耗时操作走统一任务协议,前端有统一进度体验。**对应**:架构 §6.4 / §3.3;M-05;`D-02` / `D-08`。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| A6-BE-01 | 任务协议与状态机 | BE | `media_tasks` / `media_items` 基表;状态机**对齐架构 §3.6 九态**(排队 / 生成中 / 部分失败 / 待预览 / 已勾选 / 已导出 / 已入库 / 失败 / 已取消),M0 先点亮排队 / 生成中 / 部分失败 / 失败 / 已取消,其余状态由 B3 / M1 点亮;提交返回 `{taskId, estimatedItems, estimatedCost, estimatedSeconds}`;`Idempotency-Key` 24 小时去重 | A0-BE-02、A0-SH-01 | 重复提交返回同一任务;缺预估字段拒绝提交;状态枚举与架构 §3.6 一致;流转有单测 | 1.0 |
| A6-BE-02 | 队列骨架 | BE | BullMQ 队列组(`script` / `image` / `video` / `export` / `verify`,共 9 个具体队列);worker 按 `QUEUE` 启动;重试与退避、死信、并发上限;scheduler 与 Redis 锁 | A0-BE-02 | 五个队列组可独立启停;单队列积压不影响其他队列 | 1.0 |
| A6-BE-03 | 进度推送 | BE | SSE `/media-tasks/{id}/events`(心跳、断线重连、Last-Event-ID)+ 轮询兜底;进度落库而非只在内存 | A6-BE-01 | 断网后轮询可恢复;进程重启进度不丢 | 1.0 |
| A6-BE-04 | 任务中心接口 | BE | 跨类型任务列表 / 详情(按客户、状态、类型、时间筛选)、取消、仅重试失败项、失败明细行号 | A6-BE-02 | 取消只影响未开始项;重试不重复成功项 | 0.5 |
| A6-BE-05 | Outbox 事件 | BE | `outbox_events` 写入与投递(至少一次 + 幂等消费);业务写入与事件同事务 | A0-BE-02 | 事务回滚不产生事件;重复投递不重复处理 | 0.5 |
| A6-INF-01 | 队列监控 | INF | 队列长度 / 等待时长 / 失败率指标、告警规则、worker 健康检查 | A6-BE-02 | 积压与失败率可看;阈值告警可触发 | 0.5 |
| A6-FE-01 | 任务中心 | FE | 列表(类型 / 状态 / 客户 / 时间)、详情(进度条、逐项状态、失败明细、重试 / 取消) | A0-FE-02 | 任务可筛选;失败项可单独重试;取消有确认 | 0.5 |
| A6-FE-02 | 进度组件与角标 | FE | 可复用 SSE 进度组件、全局任务角标、断线降级为轮询、完成通知 | A6-FE-01 | 组件可被后续批次直接复用;断网提示清晰 | 0.5 |
| A6-QA-01 | 幂等 / 取消 / 断线用例 | QA | 重复提交、取消、重试、断线恢复、进程重启恢复 | A6-BE-04 | 用例全绿;无重复产物 | 0.5 |
**本批门禁**:提交 → SSE → 完成 / 失败闭环;幂等与取消生效;队列隔离;进度落库可恢复。
### 6.8 A7 AI 配置与调用底座
**目标**:四层配置可管、密钥安全、Mock 可跑通、调用有账本。**对应**:P-08、PRD §5.4.4;`R-23`;架构 §2.6 / §7.7;`D-10` 前置。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| A7-BE-01 | 供应商与模型 | BE | `ai_providers`(Base URL、密钥 AES-256-GCM 密文、状态)、`ai_models`(上下文、最大输出、默认参数 JSONB、连通性测试);出参只给 `hasApiKey` | A0-BE-02、A1-BE-03 | 密钥不出现在响应 / 日志 / 前端 bundle;连通性测试有超时与错误码 | 1.0 |
| A7-BE-02 | 任务映射与提示词 | BE | `ai_task_mappings`(任务类型 → 主 / 备模型 + 任务级参数)、`ai_configs` / `ai_config_versions`(提示词、行业指南);保存即快照、可回滚、回滚产生新版本 | A7-BE-01 | 合并优先级:任务 > 模型 > 供应商;回滚不覆盖历史 | 1.0 |
| A7-BE-03 | ai-sdk 适配器与 Mock | BE | Provider 适配器接口(方言差异:thinking 开关、JSON 模式、联网搜索);`platform.ai` 唯一出口;Mock Provider(固定延迟与固定产物);路由与降级骨架 | A7-BE-02 | 业务模块不直接引模型 SDK;Mock 可被 CI / 压测复用 | 1.0 |
| A7-BE-04 | 调用账本 | BE | `ai_call_logs` / `ai_usage` append-only、按月分区;记录任务、模型、耗时、token / 张 / 秒、估算金额、成败、错误码 | A7-BE-03 | 每次调用有记录;账本禁改;可按客户 / 模型 / 批次查询 | 0.5 |
| A7-FE-01 | 供应商与模型页 | FE | 供应商列表 / 新建 / 编辑 / 启停、密钥输入(只回显是否已配置)、模型列表与默认参数、连通性测试 | A0-FE-02 | 密钥输入后不可回读;测试结果与错误可读 | 0.5 |
| A7-FE-02 | 映射与提示词页 | FE | 任务映射(主 / 备模型、参数覆盖)、提示词编辑与版本历史、回滚确认 | A7-FE-01 | 版本可 diff;回滚需二次确认 | 1.0 |
| A7-FE-03 | 调用日志 | FE | 按任务 / 模型 / 客户 / 时间查询;耗时与费用列;失败原因 | A7-FE-01 | 列表不返回大字段;金额口径与后端一致 | 0.5 |
| A7-QA-01 | 密钥 / 回滚 / Mock 用例 | QA | 密钥泄漏扫描、版本回滚、Mock 全链路、权限(`ai:configure` 特殊权限) | A7-BE-04 | 日志 / 响应 / bundle 无密钥;无权限不可改配置 | 0.5 |
**本批门禁**:四层配置闭环;Mock 调用记账;密钥安全通过自查;人类完成 **H2 AI 门**(§3.4)。
### 6.9 B0 行业包与表单设计器
**目标**:行业差异用配置表达,不发版;电商行业包 v1 可发布。**对应**:P-14 ~ P-16 / P-18、PRD §5.4.7 ~ §5.4.8;`R-11` / `R-12` / `R-13` / `R-15`。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| B0-BE-01 | 行业包与版本状态机 | BE | `industry_packs` / `industry_pack_versions`;草稿 / 已发布 / 已弃用;发布后不可变;复制行业包;与行业绑定 | A3-BE-01 | 已发布版本修改被拒;复制生成新草稿 | 1.0 |
| B0-BE-02 | Schema 存储与七项校验 | BE | `form_schemas`(JSON Schema + UI 元数据);校验:变量引用完整性、必填满足生成链路、联动成环、枚举来源有效、引用资产存在、key 唯一、字段总数 ≤ 60 | B0-BE-01 | 七项逐条可测;失败返回 40002 与具体原因 | 1.5 |
| B0-BE-03 | 合规规则集 | BE | `compliance_rules`:禁用词(通用 / 行业 / 客户)、强制提示语、必填资质、审核要点;按行业包版本生效 | B0-BE-01 | 规则可按行业 / 客户覆盖;命中可被后续校核引用 | 0.5 |
| B0-BE-04 | 发布审批 | BE | 草稿 → 自动校验 → 双人复核 → 发布;编辑与发布权限分离;`SoDGuard`;发布审计 | B0-BE-02、A2-BE-05 | 同一人编辑 + 发布被拒;发布后生成版本快照 | 0.5 |
| B0-BE-05 | 客户绑定与快照 | BE | 行业包 → 客户绑定;客户级覆盖入口;要素卡保存 `form_schema_id` 快照引用;历史不回改 | B0-BE-04 | 换行业包不影响历史要素卡;覆盖项可追溯 | 0.5 |
| B0-FE-01 | 行业包与版本 | FE | 行业包列表、版本列表、状态、复制、发布审批入口 | A0-FE-02 | 状态与操作按权限显示;发布前展示校验结果 | 0.5 |
| B0-FE-02 | 表单设计器 | FE | 14 类字段白名单、字段属性(key / 类型 / 必填 / 进入生成 / 变量优先级 / 参与校核 / 可检索 / 生效范围)、分组与排序、两级联动 | B0-BE-02 | 类型不可越白名单;联动最多两级且可检测成环;字段计数提示 | 1.5 |
| B0-FE-03 | 试填预览 | FE | 客户视角预览、真实要素卡试填、变量渲染结果预览 | B0-FE-02 | 试填缺失必填时禁止提交;渲染结果与后端一致 | 0.5 |
| B0-FE-04 | 合规规则集编辑 | FE | 禁用词、强制提示语、资质字段、审核要点;行业 / 客户作用域 | B0-FE-01 | 规则可启用 / 停用;变更进审计 | 0.5 |
| B0-FE-05 | 导入导出 JSON | FE | 行业包 JSON 导出 / 导入(校验后落为草稿) | B0-FE-01 | 导入非法结构被拒;导入不直接发布 | 0.5 |
| B0-QA-01 | 校验 / 快照 / 权限分离 | QA | 七项校验、双人发布、历史快照、字段上限 | B0-BE-05 | 用例全绿;发布链路有审计 | 0.5 |
**本批门禁**:电商行业包 v1 可配置、校验、双人发布;客户可绑定;历史快照可复现;发布与编辑权限分离。
### 6.10 B1 资产与模板最小集
**目标**:15 类资产可管理、可引用保护、模板可校验准入。**对应**:A-01 ~ A-05、PRD §5.3;`R-02` / `R-03`;架构 §7.3 / §7.9。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| B1-BE-01 | 资产与引用 | BE | `assets` / `asset_versions` / `asset_refs`;15 类 `asset_type`;客户归属 + 软删;被引用只能停用(`R-02`);已入库修改产生新版本(`R-03`) | A3-BE-05、A5-BE-02 | 被引用删除返回 40901 与引用清单;停用不删数据 | 1.0 |
| B1-BE-02 | 预签名上传 | BE | `/uploads/presign` → 直传 → `complete` 校验(headObject)→ 写元数据;hash 秒传;大小 / 类型限制 | A0-BE-01 | 应用服务器不中转大文件;秒传命中不重复存 | 0.5 |
| B1-BE-03 | 模板图层校验 | BE | `ag-psd` 解析 PSD;图层命名约定校验(工程规范 10);缺失 / 重复 / 未知前缀拒绝入库;`layer_config` 快照与预览图 | B1-BE-02 | 不合规模板返回明确缺失图层;解析失败不静默跳过 | 2.0 |
| B1-BE-04 | 合成预览骨架 | BE | sharp 读取模板 + 素材生成预览图;预览失败降级为模板图 + 标记 | B1-BE-03 | 预览可生成;失败有降级标记 | 0.5 |
| B1-FE-01 | 资产库 | FE | 按类型 / 行业 / 客户筛选;上传 / 在线创建;启停 / 排序;批量操作骨架 | A0-FE-02 | 15 类可筛选;上传进度可见;停用后不可被新任务引用 | 1.0 |
| B1-FE-02 | 引用与删除保护 | FE | 引用关系查看(双向)、删除失败展示引用清单与替换入口 | B1-FE-01 | 删除失败文案可操作;引用计数准确 | 0.5 |
| B1-FE-03 | 模板上传与预览 | FE | 模板上传、图层校验结果(通过 / 缺失清单)、真实合成预览 | B1-FE-01 | 校验失败不可入库;预览与模板一致 | 0.5 |
| B1-QA-01 | 引用 / 版本 / 解析用例 | QA | 引用保护、版本新增、PSD 解析失败、秒传 | B1-BE-04 | 用例全绿;失败模板不入库 | 0.5 |
**本批门禁**:资产库可用;引用保护生效;模板解析失败明确拒绝;预览可生成。
### 6.11 B2 要素卡与脚本模板
**目标**:行业包 schema 能真正渲染成表单并产出可检索要素卡。**对应**:S-01 / S-02 / S-04、PRD §5.1.1 / §5.1.6;`R-11` / `R-14`。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| B2-BE-01 | 要素卡、参考物料与物化索引 | BE | `brief_cards` / `brief_card_index`;动态值存 JSONB + 每卡每字段一行索引;参考物料关联与白底图标记(S-02);按客户与品类检索;必填 / 进入生成校验(`R-14`) | B0-BE-05 | 索引与 JSONB 一致;缺必填禁止提交生成 | 1.0 |
| B2-BE-02 | 脚本模板 | BE | `script_templates` + 版本;启停;结构化字段(方向 / 钩子 / 段落 / 时长档) | B0-BE-01 | 修改产生新版本;停用不影响历史引用 | 0.5 |
| B2-FE-01 | form-engine 包 | FE | 14 类字段渲染器、分组 / 分栏 / 折叠、两级联动、校验、只读模式;只依赖 schema,不写行业分支 | B0-FE-02 | 14 类逐类有 story / 用例;新增行业包无需改代码 | 1.5 |
| B2-FE-02 | 要素卡页面 | FE | 列表 / 详情 / 新建 / 编辑 / 复制 / 停用;按客户与品类筛选;填写完整度提示 | B2-FE-01 | 缺必填不可保存;复制保留 schema 版本引用 | 1.0 |
| B2-FE-03 | 脚本模板 | FE | 脚本模板列表 / 版本 / 启停、结构化字段编辑 | B2-FE-01 | 修改产生新版本;停用不影响历史引用 | 0.5 |
**本批门禁**:任意行业包 schema 可在前端渲染;要素卡可检索;模板版本化;无行业硬编码分支。
### 6.12 B3 导出骨架与归档
**目标**:勾选 → 导出 → 命名 → 审计 → 签名下载的最小闭环。**对应**:E-01 ~ E-03、PRD §5.5;`R-01` / `R-05`;架构 §7.5 / §6.5。
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| B3-BE-01 | 导出与清单 | BE | `exports` / `export_items` / `delivery_manifests`;导出异步任务、状态、逐项结果;清单快照不可变 | A6-BE-01 | 只导出勾选项;清单含条数 / 规格 / 脚本编号 / 成本 | 1.0 |
| B3-BE-02 | 命名与打包 | BE | 命名服务接入(`R-01`);zip 异步打包;产物短时效签名 URL(不进 JSON);临时产物 3 天清理 | B3-BE-01、A4-BE-03 | 同名自动序号;URL 过期失效;大文件不中转 | 1.0 |
| B3-BE-03 | 导出审计 | BE | 谁、何时、哪些、导出到哪、包大小、下载次数;导出失败也留痕 | B3-BE-02、A5-BE-02 | 每次导出有记录;下载也留痕 | 0.5 |
| B3-FE-01 | 导出弹窗与记录 | FE | 勾选汇总、预估条数 / 成本、导出进度、历史记录、重新下载 | A6-FE-02 | 未勾选不可导出;进度可恢复;过期提示重导 | 1.0 |
| B3-FE-02 | 交付清单 | FE | 清单详情、按批次下载、字段与后端一致 | B3-FE-01 | 清单不可编辑;导出记录可追溯 | 1.0 |
| B3-QA-01 | E-01 ~ E-03 验收 | QA | 勾选导出、命名、审计、签名 URL 过期 | B3-BE-03 | 用例全绿;导出抽样与审计一致 | 0.5 |
**本批门禁**:导出闭环可演示;命名与审计正确;签名 URL 安全;M0 全链路演示通过。
> **M0 合计**:12 批、68.5 EPD,与 §5.2 一致。
---
### 6.13 M1 任务组(脚本与图片线)
> M1-1 ~ M1-4 的任务组已到「可直接开工」粒度(1–3 EPD),规则同 M0:开卡时补测试数据与验收证据;组内如需再拆子卡由 Worker 在批次计划里补充。
#### M1-1 脚本生成与解析(14 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M1-1-BE-01 | 生成任务与提示词组装 | BE | 批量生成任务(`media_tasks` type=script);参数 → 模板 → 要素卡 → 上下文槽位;调用 `platform.ai`;失败重试与逐条结果 | B2-BE-02、A7-BE-03 | 批量可提交;逐条独立成败;提示词变量缺失即拒绝提交 | 2.0 |
| M1-1-BE-02 | 生成上下文与 RAG 召回 | BE | 行业指南 / 历史佳作 / 模板三级上下文;召回失败按级降级;召回来源写任务快照 | A7-BE-02、A7-BE-03 | 三级降级可测;上下文快照可复现;不跨客户召回 | 1.5 |
| M1-1-BE-03 | JSON 解析与结构化 | BE | 模型输出 → 分镜 / 标签 / 结构化字段;解析失败保留原文与错误位置,可重试 | M1-1-BE-01 | 解析失败不丢原文;重试只跑失败项;单测覆盖异常 JSON | 2.0 |
| M1-1-BE-04 | 自动质量校核(基础四类) | BE | 结构完整、时长、禁用词、必含项四类;拦截 / 警告分级;规则来自行业包合规集 | M1-1-BE-03、B0-BE-03 | 四类逐条可测;命中可定位到字段;警告不拦截入库 | 2.0 |
| M1-1-BE-05 | 卖点库 | BE | 行业级 / 客户级卖点、标签、使用次数统计;停用不删 | A4-BE-01 | 客户级覆盖行业级;计数准确;停用不影响历史引用 | 1.5 |
| M1-1-FE-01 | 生成向导 | FE | 选客户 / 模板 / 要素卡 / 数量 / 参数;提交前预估条数与成本;Mock 先行 | M1-1-BE-01 | 缺必填不可提交;预估与实际偏差可解释 | 2.0 |
| M1-1-FE-02 | 结果列表与失败明细 | FE | 逐条状态、失败原因、原文查看、单条重试;按任务筛选 | M1-1-BE-03 | 失败项可单条重试;列表刷新不丢筛选 | 1.5 |
| M1-1-QA-01 | 生成链路用例 | QA | 生成 → 解析 → 校核 → 失败重试;Mock 与真实 Provider 各一轮 | M1-1-BE-04 | 用例进 CI;成本与耗时记录可查 | 1.5 |
#### M1-2 审核入库与编号(12 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M1-2-BE-01 | 审核状态机与批量审核 | BE | 待审核 / 通过 / 驳回 / 局部重写;批量操作;审核人与生成人 SoD | A6-BE-01、M1-1-BE-04 | 同一人生成 + 审核被拒(40304);批量结果逐条返回 | 2.0 |
| M1-2-BE-02 | 原子取号与编号规则 | BE | 客户编码-YYMMDD + 序号;Redis 原子取号;唯一、不重用 | A4-BE-03 | 并发取号不重复;作废号不回收 | 1.5 |
| M1-2-BE-03 | 入库与标签 | BE | 入库为 `scripts`;标签化与检索;入库快照 | M1-2-BE-01 | 未过审不可入库;标签可筛选;快照可复现 | 1.5 |
| M1-2-BE-04 | 版本与引用写入(基础) | BE | 已入库修改 → 新版本 + 重新审核;引用写入 `script_refs` | M1-2-BE-01、B1-BE-01 | 修改不覆盖旧版本;引用关系可反查 | 2.0 |
| M1-2-FE-01 | 审核工作台 | FE | 待审列表、并排对比、通过 / 驳回 / 局部重写、批量 | M1-2-BE-01 | 键盘可完成审核;驳回理由必填 | 2.0 |
| M1-2-FE-02 | 入库与编号展示 | FE | 入库操作、编号展示与复制、版本标记 | M1-2-BE-02 | 编号格式正确;版本切换不串数据 | 1.5 |
| M1-2-QA-01 | 审核 / 编号 / 版本用例 | QA | SoD、并发取号、修改生版本、入库校验 | M1-2-BE-04 | 用例全绿;审计可查 | 1.5 |
#### M1-3 图片生产线(15 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M1-3-BE-01 | render 包与 PSD 解析 | BE | `packages/render`:`ag-psd` 读图层、按前缀定位可替换层、坐标与字体提取;解析结果快照 | B1-BE-03、A6-BE-02 | 命名图层缺失拒绝渲染;解析结果可缓存 | 2.5 |
| M1-3-BE-02 | 抠图与缓存 | BE | 本地 ONNX 抠图(CPU);按内容 hash 缓存;失败退原图并标 `low_quality` | M1-3-BE-01 | 抠图不出内网;失败降级有原因码;同图不重复推理 | 2.0 |
| M1-3-BE-03 | 合成与多规格编码 | BE | sharp 合成、文字替换、安全区 / Logo / 警示语;JPG / PNG(调色板色数);单张 ≤ 10s | B1-BE-04、A4-BE-04 | 多规格尺寸正确;超限降质有标记;耗时达标 | 2.5 |
| M1-3-BE-04 | image 队列与批次快照 | BE | 按「模板 × 商品图 × 规格」展开;批次号原子取号;参数与命名快照;中断恢复 | M1-3-BE-03、A6-BE-04 | 100 张中断后可续跑;批次快照可复现 | 2.0 |
| M1-3-BE-05 | 质量校验与低质量标记 | BE | 安全区、Logo 完整、主体不变形、警示语四项;失败不静默通过 | M1-3-BE-03 | 低质量条目默认不勾选;原因码来自字典 | 1.5 |
| M1-3-FE-01 | 批次提交与网格预览 | FE | 物料 / 模板 / 规格选择、预估条数、提交、网格预览与单张放大 | M1-3-BE-04 | 50 张预览不卡;失败图有占位与原因 | 2.0 |
| M1-3-FE-02 | 失败重试与低质量筛选 | FE | 失败项重试、低质量筛选、批次历史 | M1-3-BE-05 | 重试只跑失败项;筛选可组合 | 1.0 |
| M1-3-QA-01 | 图片线端到端 | QA | 模板准入 → 合成 → 降级 → 批次恢复;性能冒烟 | M1-3-BE-05 | 端到端通过;低质量可追踪 | 1.5 |
#### M1-4 预览勾选、导出与收口(14 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M1-4-BE-01 | 勾选持久化与恢复 | BE | 勾选状态与任务项绑定;刷新 / 换设备恢复;未勾选保留 | M1-3-BE-04、A6-BE-04 | 并发勾选不丢;取消勾选即时生效 | 1.5 |
| M1-4-BE-02 | 导出打包与命名 | BE | 按勾选导出;目录结构;命名快照;zip 流式打包(级别 9);签名 URL | B3-BE-02、M1-4-BE-01 | 未勾选不可导出;同名加序号;URL 短时效 | 2.0 |
| M1-4-BE-03 | 归档骨架 | BE | 导出成功登记 `assets(type=render)`;可被后续复用 | B3-BE-01、M1-4-BE-02 | 归档幂等;失败不回滚导出记录 | 1.5 |
| M1-4-BE-04 | 交付清单 | BE | 清单快照(条数 / 规格 / 编号 / 成本);按批次查询 | M1-4-BE-02 | 清单不可变;字段与导出包一致 | 1.5 |
| M1-4-FE-01 | 快筛网格与快捷键 | FE | 网格 / 并排预览、保留 / 淘汰 / 收藏、全选反选、同组收敛 | M1-4-BE-01 | 50 张操作不卡;快捷键可发现 | 2.0 |
| M1-4-FE-02 | 导出记录与交付清单 | FE | 导出进度、历史、重下载、清单详情 | M1-4-BE-02 | 过期提示重导;清单不可编辑 | 1.5 |
| M1-4-INF-01 | 字体自检与性能 | INF | 镜像内置中文字体启动自检;图片线并发与内存上限;预览性能埋点 | M1-3-BE-03 | 缺字体启动即失败;并发参数可配 | 1.0 |
| M1-4-QA-01 | AC-01 端到端与金融试跑 | QA | 真实客户走通要素卡 → 脚本 → 图片 → 导出;金融行业包 1 个批次 | M1-4-BE-04、B0-BE-04 | AC-01 达成;交付周期与单条成本可测 | 3.0 |
### 6.14 M2 任务组(视频线与提效)
#### M2-1 视频逐镜生成(15 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M2-1-BE-01 | 分镜拆解 | BE | 脚本 → N 镜(场景 / 景别 / 时长 / 画面 / 台词);不可解析给原文 | M1-1-BE-03、B2-BE-02 | 拆解结果可编辑;镜头数与时长校验 | 2.0 |
| M2-1-BE-02 | 关键帧生成 | BE | 每镜首帧(图生图);参考物料锁定(电商白底图);失败单镜重试 | M2-1-BE-01、A7-BE-03 | 主体不变形;失败不影响其他镜 | 2.0 |
| M2-1-BE-03 | 逐镜生成与重试 | BE | 图生视频;单镜独立超时 / 重试 / 换模型;成本按镜记账 | M2-1-BE-02 | 单镜重来不重跑整条;失败分类可查 | 2.5 |
| M2-1-BE-04 | 镜头并行与拼接前处理 | BE | 镜头并行度、超时、产物落盘与清单;为拼接准备统一编码 | M2-1-BE-03 | 并行不串镜;中断可恢复 | 1.5 |
| M2-1-BE-05 | 视频任务预估与预算 | BE | 转数 / 时长 / 成本预估;单任务预算上限;超限拒绝 | A6-BE-01、A7-BE-04 | 预估与实际可对账;超限 42902 | 1.0 |
| M2-1-FE-01 | 视频制作向导 | FE | 脚本、视频方向(必选)、人物 / 场景 / 景别 / 时长 / 数量、口播与 BGM | M2-1-BE-01 | 缺视频方向不可提交;预估展示清晰 | 2.0 |
| M2-1-FE-02 | 任务详情与镜头状态 | FE | 逐镜状态、失败原因、单镜重试入口、成本累计 | M2-1-BE-03 | 镜头级状态准确;重试有确认 | 2.0 |
| M2-1-QA-01 | 单条视频端到端 | QA | 脚本 → 分镜 → 关键帧 → 逐镜 → 产物;失败与重试用例 | M2-1-BE-04 | 单条视频跑通;成本可查 | 2.0 |
#### M2-2 拼接、校验与单镜替换(13 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M2-2-BE-01 | ffmpeg 拼接与包装 | BE | 拼接、字幕、Logo、警示语、BGM、音量归一;输出比例 / 时长 | M2-1-BE-04 | 音画同步;包装元素位置符合安全区 | 2.0 |
| M2-2-BE-02 | 成片自动校验 | BE | 时长 / 比例 / 黑帧 / 静音 / 字幕错字 / 合规;报告落任务项 | M2-2-BE-01 | 六项可测;失败原因可定位 | 2.0 |
| M2-2-BE-03 | 单镜替换 | BE | 指定镜重生成并替换;只失效该镜关联产物 | M2-1-BE-03 | 替换不重跑整条;版本可追溯 | 2.0 |
| M2-2-BE-04 | 命名与下载 / 导出 | BE | 通用字符 + 占位符命名;下载与导出双通道;同名加序号 | M1-4-BE-02、A4-BE-03 | 命名实时校验;未勾选不可下载 | 1.5 |
| M2-2-FE-01 | 在线预览与断点续播 | FE | 逐条播放 / 暂停 / 重播、断点续播、全选反选、来源脚本 | M2-2-BE-01 | 50 条预览可用;续播位置准确 | 2.0 |
| M2-2-FE-02 | 单镜替换与下载 | FE | 镜头时间轴、替换入口、下载 / 导出 | M2-2-BE-03 | 替换后预览即时更新;命名冲突提示 | 1.5 |
| M2-2-QA-01 | 校验 / 替换 / 命名用例 | QA | 六项校验、单镜替换、命名与下载 | M2-2-BE-04 | 用例全绿;失败项可重试 | 2.0 |
#### M2-3 快筛、变体与成片入库(15 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M2-3-BE-01 | 变体矩阵 | BE | 脚本 × 人物 × 场景 × 时长;2 轴交叉、单批上限、预估 | M2-1-BE-03 | 只支持声明的轴;超上限拒绝 | 2.0 |
| M2-3-BE-02 | 快筛 API | BE | 保留 / 淘汰 / 收藏、理由、同组收敛;筛选与统计 | M2-2-FE-01 | 操作幂等;理由进字典统计 | 1.5 |
| M2-3-BE-03 | 分片直传与秒传 | BE | 分片 / 断点续传 / hash 秒传 / 自动元数据;转码任务 | B1-BE-02 | 大文件不中转;续传可恢复 | 2.0 |
| M2-3-BE-04 | 版本链与采用版本 | BE | 成片版本链、「采用版本」标记、历史不可变 | M2-3-BE-03 | 采用版本唯一;回退可追溯 | 1.5 |
| M2-3-BE-05 | 素材库查询与批量操作 | BE | 双视图数据、批量标签 / 送审 / 打包下载 | M2-3-BE-04 | 批量操作异步可追踪;空结果不误导 | 2.0 |
| M2-3-FE-01 | 并排快筛与快捷键 | FE | 分组并排播放、保留 / 淘汰 / 收藏、同组只留最佳 | M2-3-BE-02 | 3 分钟可筛 50 条;误操作可撤销 | 2.0 |
| M2-3-FE-02 | 素材库双视图与批量 | FE | 列表 / 网格、筛选、批量操作、版本与采用标记 | M2-3-BE-05 | 视图切换保留筛选;批量有进度 | 2.0 |
| M2-3-QA-01 | 快筛效率与入库用例 | QA | 快筛效率、批量、分片 / 秒传、版本链 | M2-3-BE-05 | 效率基线达标;失败可恢复 | 2.0 |
#### M2-4 脚本增强与交付包(10 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M2-4-BE-01 | 脚本版本链与 diff | BE | 完整版本链、字段级 diff、回滚生成新版本 | M1-2-BE-04 | 回滚不删历史;diff 可读 | 2.0 |
| M2-4-BE-02 | 引用记录 | BE | 被哪些素材任务 / 成片引用;引用计数 | M2-4-BE-01 | 计数准确;停用前可查引用 | 1.0 |
| M2-4-BE-03 | 结构模板库 | BE | 人工创建 + 审核发布、使用计数;未发布不可引用 | M1-1-BE-04 | 审核分离;计数准确 | 1.5 |
| M2-4-BE-04 | 客户在线审核链接 | BE | 免登录、短时效、可作废、改稿快照、二维码;开关默认关闭 | M1-2-BE-03、`R-28` | 链接不可枚举;作废即时生效;访问留痕 | 1.5 |
| M2-4-BE-05 | Word 交付包 | BE | 编号 + 标题 + 分镜表;交付记录可查;飞书 P2 预留 | M2-4-BE-01 | 包内容与版本一致;重复导出留痕 | 1.5 |
| M2-4-FE-01 | 版本对比与模板库 | FE | 版本时间线、字段 diff、回滚;模板库审核与计数 | M2-4-BE-01 | 回滚需二次确认;模板状态清晰 | 1.5 |
| M2-4-QA-01 | 交付包与审核链接 | QA | 审核链接安全、Word 包内容、版本回滚 | M2-4-BE-05 | 用例全绿;安全项(越权 / 过期 / 作废)通过 | 1.0 |
#### M2-5 AI 治理、资产增强与第三行业(14 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M2-5-BE-01 | 资产版本 | BE | `asset_versions`、版本对比、历史快照 | B1-BE-01 | 修改生版本;历史可回看 | 1.5 |
| M2-5-BE-02 | 引用关系与失效替换 | BE | 双向引用查询、失效资产替换向导 | M2-5-BE-01 | 替换不破坏引用;操作留痕 | 1.5 |
| M2-5-BE-03 | 人物 / 场景 / 光影 / BGM 池 | BE | 池化管理、行业声明槽位、启停 | M2-5-BE-01 | 槽位由行业包声明;停用不影响历史 | 2.0 |
| M2-5-BE-04 | 提示词模板 | BE | 版本、生效范围(行业 / 客户 / 任务)、发布审核 | A7-BE-02 | 生效范围可叠加;回滚可查 | 1.5 |
| M2-5-BE-05 | 用途路由与降级 | BE | 任务 → 主 / 备模型;健康探测、超时降级、限流 | A7-BE-03 | 主模型失败自动降级;降级可观测 | 2.0 |
| M2-5-BE-06 | 预算闸门与成本聚合 | BE | 预占 / 结算、预算上限、按客户 / 批次 / 模型聚合 | A7-BE-04 | 超预算 100% 阻断;账本可对账 | 1.5 |
| M2-5-FE-01 | 资产增强页 | FE | 版本、引用、池管理、失效替换入口 | M2-5-BE-03 | 版本与引用关系可读 | 1.5 |
| M2-5-FE-02 | 成本看板 | FE | 成本趋势、模型分布、客户 / 批次下钻 | M2-5-BE-06 | 口径与后端一致;导出可用 | 1.5 |
| M2-5-QA-01 | 第三行业包配置与试跑 | QA | 第三个行业包配置 → 校验 → 发布 → 1 个批次试跑 | M2-5-BE-04、B0-BE-04 | 不写行业代码即可配置;试跑通过 | 1.0 |
### 6.15 M3 任务组(复用与回流)
#### M3-1 资产复用与口播增强(15 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M3-1-BE-01 | 复用率与排行统计 | BE | 按客户 / 资产 / 周统计复用率、排行;口径与看板一致 | M2-3-BE-05、M2-5-BE-01 | 口径可复算;空数据不误导 | 2.0 |
| M3-1-BE-02 | 复审任务与降权 | BE | 资产复审任务、过期提醒、降权 / 下线 | M3-1-BE-01 | 复审留痕;降权即时生效 | 2.0 |
| M3-1-BE-03 | 脚本效果标签 | BE | 起量 / 一般 / 未起量人工标注;检索 | M1-2-BE-04、M2-3-BE-04 | 标签可改但留痕;统计可查 | 1.5 |
| M3-1-BE-04 | 版本对比与回滚 | BE | 任一历史版本 diff、回滚为新版本 | M2-4-BE-01 | 回滚不覆盖历史;权限受控 | 2.0 |
| M3-1-BE-05 | 口播 TTS 与 lip sync | BE | 台词 → TTS → 唇形对齐;音色 / 语速配置;失败降级 | M2-1-BE-04、A7-BE-03 | 音画同步;失败可重试且不计费 | 2.5 |
| M3-1-BE-06 | 相似度提示与来源标签 | BE | 实拍 / AI / 混合标签;近 30 天相似度提示 | M3-1-BE-01 | 标签不可缺省;提示阈值可配 | 1.5 |
| M3-1-FE-01 | 复用看板与复审 | FE | 复用率 / 排行、复审列表、降权操作 | M3-1-BE-02 | 下钻可用;操作有确认 | 2.0 |
| M3-1-QA-01 | 复用与口播用例 | QA | 复用口径、复审、口播同步、相似度 | M3-1-BE-05 | 用例全绿;口径与看板一致 | 1.5 |
#### M3-2 成片运营与效果回流(16 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M3-2-BE-01 | 脚本-素材关联与血缘 | BE | 关联 / 解除、血缘视图、未关联待办、关联率统计 | M2-3-BE-05、M1-2-BE-03 | 关联率可按客户 / 周统计;待办可清理 | 2.0 |
| M3-2-BE-02 | 素材分享链接 | BE | 短时效、可作废、外部访问留痕、开关默认关闭 | A5-BE-03、`R-28` | 不可枚举;作废即时;访问有审计 | 2.0 |
| M3-2-BE-03 | 送审与外部提审登记 | BE | 内部送审、外部平台 / 计划 / 时间、驳回原因与截图凭证 | M3-2-BE-01 | 状态可追踪;附件走对象存储 | 2.0 |
| M3-2-BE-04 | 投放登记与日指标 | BE | 平台 / 账户 / 素材 ID / 计划 ID;日 × 素材指标(消耗 / 曝光 / CTR / CVR / ROI) | M2-3-BE-05 | 手工登记幂等;累计口径正确 | 3.0 |
| M3-2-BE-05 | 自动归档完善 | BE | 导出 / 送审 / 投放后自动归档策略;批量归档 | B3-BE-01、M2-3-BE-04 | 归档幂等;失败可重跑 | 1.0 |
| M3-2-BE-06 | 按组导出与批量重导 | BE | 按组 / 清单导出、批量重导、失败项重导 | B3-BE-02 | 重导不重复归档;清单一致 | 1.5 |
| M3-2-FE-01 | 关联 / 送审工作台 | FE | 血缘由、未关联待办、送审登记、凭证上传 | M3-2-BE-03 | 关联操作可撤销;待办可筛选 | 2.0 |
| M3-2-FE-02 | 投放登记与指标 | FE | 登记表单、日指标录入 / 导入、趋势图 | M3-2-BE-04 | 导入校验清晰;指标可累计 | 1.0 |
| M3-2-QA-01 | 关联率与回流用例 | QA | 关联率、分享安全、送审、指标累计 | M3-2-BE-04 | 用例全绿;审计可查 | 1.5 |
#### M3-3 外部访问与系统完善(14 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M3-3-BE-01 | SSO / 手机号登录 | BE | 手机号验证码登录;SSO 适配器(OIDC / SAML 至少一种可插拔);会话与吊销 | A1-BE-02 | 未配置 SSO 不影响密码登录;吊销即时生效 | 3.0 |
| M3-3-BE-02 | 系统配置完善 | BE | 通知、导出、命名、阈值、保留期配置化;版本与回滚 | A4-BE-02 | 配置项前后端同源;变更留痕 | 1.5 |
| M3-3-BE-03 | 成片入库完善 | BE | 分片 / 秒传、版本链、素材库批量操作收口 | M2-3-BE-05 | 大文件与批量稳定;失败可恢复 | 2.0 |
| M3-3-BE-04 | 检索与性能收口 | BE | 全局检索(脚本 / 素材 / 资产)、索引与慢查询治理 | M3-2-BE-01 | P95 ≤ 500ms;索引命中可观测 | 2.0 |
| M3-3-FE-01 | 登录方式与配置页 | FE | 手机号登录、SSO 入口、系统配置页 | M3-3-BE-01 | 登录方式可切换;配置影响提示 | 2.0 |
| M3-3-FE-02 | 全局搜索与标签 | FE | 全局搜索、标签筛选、结果高亮 | M3-3-BE-04 | 跨类型搜索可用;空态清晰 | 1.5 |
| M3-3-QA-01 | 回归与性能 | QA | 登录方式、配置、检索、M0–M3 回归 | M3-3-BE-02 | 回归通过;性能达标 | 2.0 |
### 6.16 M4 任务组(交付闭环)
#### M4-1 爆量判定与脚本反哺(7 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M4-1-BE-01 | 爆量判定与阈值配置 | BE | 判定任务(消耗阈值 + ROI 达标);阈值只读 `system_configs`;可重跑、幂等 | M3-2-BE-04、A4-BE-02 | 阈值单源;重跑不重复计;判定结果可追溯 | 2.0 |
| M4-1-BE-02 | 脚本权重反哺 | BE | 爆量素材 → 脚本评级 → 权重映射 → RAG 召回加权 | M4-1-BE-01、M1-1-BE-02 | 权重可查可回滚;派生指标不落库 | 1.5 |
| M4-1-BE-03 | 关联率与排行查询 | BE | 关联率、复用排行、爆量榜查询接口 | M4-1-BE-01 | 排序稳定;口径与看板一致 | 1.5 |
| M4-1-FE-01 | 爆量榜与关联率视图 | FE | 爆量榜、关联率、复用排行、下钻 | M4-1-BE-03 | 榜单可筛选;数字可追溯到明细 | 1.5 |
| M4-1-QA-01 | 判定口径与幂等用例 | QA | 阈值边界、重跑、反哺、权限 | M4-1-BE-02 | 用例全绿;越权不可见 | 0.5 |
#### M4-2 度量看板与项目验收(5 EPD)
| 编号 | 任务 | 端 | 内容与产出 | 依赖 | 验收要点 | EPD |
| --- | --- | --- | --- | --- | --- | --- |
| M4-2-BE-01 | 指标汇总与导出 | BE | 生产 / 质量 / 成本 / 资产四类汇总;导出异步 | M4-1-BE-03 | 口径统一;导出留痕 | 1.5 |
| M4-2-FE-01 | 总看板 | FE | 四类指标总览、趋势、对比 | M4-2-BE-01 | 首屏 ≤ 2s;空态 / 加载态完整 | 1.5 |
| M4-2-INF-01 | 告警与运行报告 | INF | 任务成功率、成本、队列积压告警;周报模板 | A6-INF-01 | 告警可触发;报告可导出 | 1.0 |
| M4-2-QA-01 | M4 验收与全量回归 | QA | M4 验收脚本、M0–M4 回归、性能冒烟 | M4-2-BE-01 | 全量回归通过;验收记录归档 | 1.0 |
---
## 7 七个管理模块专项(产品与交互口径)
> 本章是 A1–A7 的"做什么、页面长什么样、规则是什么"的补充,**不重复** WBS 的实现细节。页面路由与权限点见附录 B / C。
### 7.1 用户管理(A1 / P-01)
| 项 | 内容 |
| --- | --- |
| 页面 | `/login`、`/system/users`、`/system/users/new`、`/system/users/:id`、`/system/departments`(部门管理) |
| 接口 | `POST /auth/login`、`/auth/refresh`、`/auth/logout`、`GET /me`、`GET /users`、`POST /users`、`PATCH /users/{id}`(含角色分配)、`POST /users/{id}/transfer-customers`;`GET /departments/tree`、`POST/PATCH /departments`、`POST /departments/{id}/disable`、`/enable`(不提供删除) |
| 关键规则 | 部门最多两级;手机号唯一;一人可多角色;离职**停用不删**,名下客户必须转交;超管建议 ≤ 2 人、授予二次确认并审计;停用即时生效 |
| 页面状态 | 空态(无用户 / 无搜索结果)、加载骨架、错误重试、无权限 403;停用用户列表默认隐藏、可筛选查看 |
| 验收 | ① 新建用户 → 分配角色 → 登录成功;② 停用后无法登录且在线会话失效;③ 删除按钮不存在,只有停用;④ 部门超两级被拒;⑤ 用户变更进审计 |
### 7.2 角色管理(A2 / P-02、P-03)
| 项 | 内容 |
| --- | --- |
| 页面 | `/roles`、`/roles/:id`(编辑器:权限树 / 数据范围 / 特殊权限三区) |
| 接口 | `GET/POST/PATCH /roles`、`GET /permissions`(复制角色 = 读取现有角色后 `POST /roles`,不加端点) |
| 关键规则 | 仅超管内置且不可改(**仅显示名可改**);其余角色全部可配;新角色默认全空;特殊权限单独授予、不随复制带入;六类数据范围;三对 SoD 保存即校验;变更即时生效、留痕、通知受影响用户;角色 ≤ 20 个建议值 |
| 交互要点 | 权限点按"模块 × 操作"分组勾选;范围选择展示"可覆盖客户数";SoD 命中时高亮冲突对并禁止保存;保存前展示"影响 N 名用户" |
| 验收 | ① 新建角色 → 勾选权限 → 分配用户 → 页面即时变化;② 复制角色不携带特殊权限;③ 三对 SoD 各 1 条拒绝用例;④ 角色停用后在线用户下次请求失效;⑤ 变更审计含前后值 |
### 7.3 数据字典与系统配置(A4 / P-06、P-13 部分)
| 项 | 内容 |
| --- | --- |
| 页面 | `/dicts`、`/dicts/:type`(树 / 词表双视图)、`/system/configs` |
| 接口 | `GET/POST/PATCH /dicts`、`/dicts/{type}/items`、`GET/PUT /system/configs` |
| 关键规则 | 一张通用枚举表;编码不可改、名称可改;按行业作用域三层合并(本行业 + 父行业 + 通用);变更只影响新数据、历史保留快照(`R-10`);阈值 / 上限只存 `system_configs`(`R-26`) |
| 交互要点 | 编码字段创建后置灰;停用项在历史引用处显示"已停用"而非消失;配置项展示版本与变更记录;阈值修改二次确认并提示影响范围 |
| 验收 | ① 行业二级树与词表共用一张表;② 三层合并结果正确;③ 改名称后历史数据不变;④ 前端上限与后端 DTO 读同一配置;⑤ 配置变更审计可查 |
### 7.4 客户管理(A3 / P-04、P-05)
| 项 | 内容 |
| --- | --- |
| 页面 | `/industries`、`/customers`、`/customers/new`(分步)、`/customers/:id`、`/customer-groups`、`/customer-fields/approvals` |
| 接口 | `GET/POST/PATCH /industries`、`GET/POST/PATCH /customers`、`/customer-groups`、`/customers/{id}/fields`、`/customer-fields/{id}/approve`、`POST /customers/{id}/apply-industry-pack` |
| 关键规则 | 行业两级树;一级名称全局唯一、二级同父唯一;客户名称同末级行业唯一;**简称必填**(用于全部自动命名);客户必须归属末级行业、不可跨行业移动;暂停只读、结束只读归档(`R-07`);基础字段 ≤ 10 且永不进入生成,进入生成字段 ≤ 5 且必须审批 |
| 交互要点 | 新建客户为分步表单(行业 → 档案 → 交付偏好 → 资产包),可回退;状态为暂停 / 结束时顶部只读横幅;客户组作为授权单位,批量授权入口清晰 |
| 验收 | ① 重名返回 40902;② 简称缺失 42201;③ 暂停客户不能提交新任务;④ 客户组授权后范围正确;⑤ 字段超限 40001、未审批字段不进入生成 |
### 7.5 日志管理(A5 / P-07)
| 项 | 内容 |
| --- | --- |
| 页面 | `/audit-logs`、`/audit-logs/:id`、`/system/logs`(运行日志平台跳转) |
| 接口 | `GET /audit-logs`、`POST /audit-logs/export` |
| 关键规则 | 审计 append-only(DB 层禁 UPDATE / DELETE);保留 ≥ 12 个月(`Q-08` 待确认最终值);导出本身也审计;敏感数据访问(客户资产包 / 成本 / 审计)单独留痕;只读,无编辑入口 |
| 交互要点 | 筛选:人 / 客户 / 时间 / 动作 / 对象;详情展示前后值 diff、trace_id、IP / UA;导出为异步任务,产物短时效 URL |
| 验收 | ① 关键七类动作全留痕;② 直接改库被拒;③ 导出审计新增一条"导出审计";④ 无 `audit:export` 看不到导出按钮;⑤ 运行日志与审计分开 |
### 7.6 任务管理(A6 / 架构 §6.4、M-05)
| 项 | 内容 |
| --- | --- |
| 页面 | `/tasks`(跨类型任务中心)、`/tasks/:id`(进度 / 逐项 / 失败明细 / 重试 / 取消) |
| 接口 | `POST /media-tasks`、`GET /media-tasks`、`/media-tasks/{id}`、`GET /media-tasks/{id}/events`(SSE)、`POST /media-tasks/{id}/cancel`、`POST /media-tasks/{id}/retry` |
| 关键规则 | 提交必带 `Idempotency-Key`;必须返回预估条数 / 成本 / 时长,缺一不可提交;状态机统一;进度落库、进程重启不丢;取消只影响未开始项;重试只重失败项;队列分组隔离,视频积压不拖垮脚本 |
| 交互要点 | 列表默认按创建时间倒序、支持类型 / 状态 / 客户筛选;详情展示逐项状态与失败行号;SSE 断线自动降级轮询并提示;完成 / 失败有全局通知 |
| 验收 | ① 重复提交返回同一任务;② 断网后轮询恢复;③ 取消 / 重试语义正确;④ 单队列积压不影响其他队列;⑤ 任务中心可查到所有类型任务 |
> 脚本任务复用同一套任务协议(`/script-tasks`,权限 `script:view` / `script:generate`,M1 生效),任务中心按 `type` 合并展示;权限点最终以 `packages/shared` 定稿为准(`DP-01`)。
### 7.7 AI 配置(A7 / P-08)
| 项 | 内容 |
| --- | --- |
| 页面 | `/ai/providers`(含供应商下的模型列表)、`/ai/routes`(任务映射)、`/ai/prompts`、`/ai/usage` |
| 接口 | `GET/POST/PATCH /ai/providers`、`/ai/routes`、`/ai/prompts`、`GET/PUT /ai/budgets`、`GET /ai/usage`(模型 CRUD 作为供应商下的嵌套资源,架构 §6.3.7 未单列端点,A7 前回写架构,见 `DP-15`) |
| 关键规则 | 四层配置(Provider → Model → TaskMapping → CallLog);合并优先级:任务 > 模型 > 供应商;提示词保存即快照、可回滚、回滚产生新版本(`R-23`);密钥 AES-256-GCM、主密钥来自环境变量、出参只给 `hasApiKey`;`platform.ai` 是唯一出网入口;内容违规不重试、失败降级到备用模型 |
| 交互要点 | 密钥输入后不可回读、只显示"已配置";连通性测试有超时与错误分类;任务映射展示主 / 备模型与任务级覆盖;调用日志展示耗时 / 用量 / 估算金额 / 成败 |
| 验收 | ① 响应 / 日志 / bundle 无明文密钥;② 保存 → 快照 → 回滚 → 新版本;③ Mock 调用全链路;④ 无 `ai:configure` 不可改;⑤ 调用账本可按客户 / 模型 / 批次查询 |
> **共同约束**:七个模块的所有列表都使用游标分页与显式白名单筛选;所有写操作进审计;所有查询带 `ScopeContext` 与 `customer_id`(平台级配置除外);所有错误返回统一结构 `{ code, message, details, trace_id }`。
---
## 8 前后端并行与联调机制
### 8.1 契约与 Mock
| 环节 | 约定 |
| --- | --- |
| 契约来源 | `packages/shared` 的 Zod schema(DTO / 枚举 / 错误码 / 权限点)为唯一真源 |
| 后端产出 | NestJS DTO → OpenAPI;每批 D1 产出 `openapi.v0.json` 快照 |
| 前端消费 | `openapi-typescript` 生成类型 + TanStack Query hooks;禁止手写接口类型 |
| Mock | 前端用 MSW(或 Prism)按 OpenAPI 生成 mock;覆盖成功 / 400 / 401 / 403 / 404 / 409 / 422 / 429 / 500 |
| 契约冻结 | 每批 D1 下午冻结 v0;冻结后如需改,必须同时更新 shared / OpenAPI / mock / 前端类型,并在批次记录中登记 |
| 契约校验 | CI 跑 `pnpm openapi:diff`;破坏性变更必须升版本并通知前端 |
### 8.2 联调检查单(每批 D3–D4 逐项打勾)
1. 登录态与 401 / 403 表现与契约一致;
2. 列表分页 / 筛选 / 排序与游标行为一致;
3. 错误码与前端提示文案映射完整(40001 / 40301 / 40302 / 40303 / 40902 / 42201 …);
4. 权限点与页面按钮 / 路由一一对应;
5. 审计记录在操作后 1 秒内可查;
6. 空态 / 加载态 / 错误态三态齐全;
7. 关键写操作有二次确认与成功反馈;
8. 任务类操作有预估、进度、失败明细与重试入口。
### 8.3 前端工程约定
| 项 | 约定 |
| --- | --- |
| 目录 | `apps/web/src/{app,pages,features,components,hooks,lib,stores}`;页面按 `pages/<模块>/<功能>/` 与路由一一对应,详见 [11-前端路由与目录规范](../工程规范/11-前端路由与目录规范.md);禁止在 `apps/web` 内自建"共享包" |
| 路由 | 统一 `/<模块>/<功能>`(见 [11](../工程规范/11-前端路由与目录规范.md)),路由表集中声明(路径、标题、权限点、菜单分组);守卫读 `/me` 权限;无权限跳 403 |
| 权限渲染 | 统一 `usePermission` / ``;禁止 `removeChild` 式隐藏;无权限按钮不渲染但接口仍要校验 |
| 数据请求 | TanStack Query:queryKey 规范、失效策略、乐观更新仅用于勾选类;错误统一 toast + 页面级错误态 |
| 表单 | 优先 Semi Form;动态表单走 `form-engine`;字段校验前后端同源(Zod / schema) |
| 交互 | 危险操作二次确认;批量操作展示影响条数;长任务离开页面有提示 |
| 样式 | Semi token + 少量局部样式;禁止引入其他组件库 / 图标库;禁止内联 SVG(品牌 Logo 除外) |
### 8.4 后端工程约定
| 项 | 约定 |
| --- | --- |
| 模块骨架 | 每个模块 `controller / service / repository / dto / events`;模块间只走 Service 接口或领域事件,禁止跨模块 `prisma.*` |
| 鉴权链 | `JwtGuard → PermissionGuard → SpecialPermissionGuard → ScopeGuard → 业务校验`;路由默认拒绝,白名单显式放行 |
| 数据访问 | Repository 方法必须接收 `ScopeContext`;查询必须带 `customer_id`;禁止"先查全量再过滤" |
| 事务 | 业务写入 + outbox 同事务;外部调用不在事务内;幂等键表 24 小时 |
| 审计 | 变更类接口必须 `@Audit()`;审计字段含主体、对象、前后值、客户、trace_id |
| 错误 | 统一错误码;404 统一措辞避免探测;不把内部异常直接透出 |
| 配置 | 阈值 / 上限只读 `system_configs`;密钥只从环境变量读;日志脱敏 |
### 8.5 演示数据与种子
| 数据 | 内容 | 维护者 |
| --- | --- | --- |
| 超管 | 1 个,首次启动生成随机密码并强制修改 | Lead |
| 示例角色 | 运营 / 设计 / 文案 / 审核 / AI 工程 / 行业配置 / 客户负责人(5–7 个可改可删模板) | A2 |
| 行业与客户 | 电商 1 个行业、2 个客户、1 个客户组 | A3 |
| 字典 | 平台规格、时长档、钩子类型、景别、警示语类型、失败原因、淘汰理由、脚本方向、行业二级 | A4 |
| 行业包 | 电商 v1(草稿 → 发布) | B0 |
| 资产 | 1 个 PSD 模板 + 1 个 Logo + 1 组警示语 | B1 |
| AI | 1 个 Mock 供应商 + 2 个 Mock 模型 + 1 组任务映射 | A7 |
---
## 9 工程与环境准备
### 9.1 建仓清单(A0 必须完成)
```text
根目录:package.json / pnpm-workspace.yaml / turbo.json / tsconfig.base.json
.nvmrc(24.15.0) / .npmrc / .editorconfig / .gitignore / .env.example
eslint.config.mjs / prettier.config.mjs / commitlint.config.js / .lintstagedrc
vitest.config.ts / playwright.config.ts / docker-compose.dev.yaml
README.md / AGENTS.md / docs/
apps/api:NestJS + Fastify 入口、健康检查、OpenAPI、Pino、错误过滤器
apps/worker:QUEUE 环境变量启动、队列注册、优雅退出
apps/web:Vite + React 19、路由、布局、请求层、Semi 适配
packages/shared:错误码、权限点、Zod 通用 schema、ULID、分页
packages/ui:Semi 封装、icons.ts、locale
packages/form-engine:字段渲染器(B2 落地,先建包占位)
packages/render:PSD / 抠图 / 合成(M1 落地,先建包占位)
packages/ai-sdk:Provider 适配器(A7 落地,先建包占位)
prisma/:schema.prisma、migrations/、seed.ts
infra/:compose、Nginx、监控、备份脚本占位
```
### 9.2 CI 流水线
| 阶段 | 内容 | 失败处理 |
| --- | --- | --- |
| install | `pnpm install --frozen-lockfile` | 阻断(锁文件不一致) |
| static | `pnpm lint` · `pnpm typecheck` · `pnpm format:check` | 阻断 |
| unit | `pnpm test`(Vitest) | 阻断 |
| build | `pnpm build`(api / worker / web) | 阻断 |
| contract | `pnpm openapi:diff`(对上一版快照) | 破坏性变更不得合并 |
| integration | Testcontainers(PG / Redis / MinIO)主链路 | 阻断(M0 起逐步启用) |
| e2e | Playwright 冒烟(登录 / 用户 / 客户 / 字典 / 任务) | 阻断(M0 末起) |
| security | 依赖审计、密钥扫描、`any` / 跨模块 prisma 检查 | 阻断 |
### 9.3 环境矩阵
| 环境 | 用途 | 依赖 | 数据 |
| --- | --- | --- | --- |
| local | 开发 | Docker Compose(PG18 / Redis7.4 / MinIO) | 种子数据 |
| staging | 每批演示 / 联调 | 1 台云主机 + 同 compose | 演示数据,可重置 |
| production | M1 灰度后启用 | 架构 §4.2 拓扑 | 真实数据,迁移先行 |
### 9.4 观测与告警(M0 基线)
- Pino 结构化日志 + `trace_id` 全链路;
- OTel 指标:请求量 / 延迟 / 错误率、任务队列长度 / 等待时长 / 失败率、AI 调用耗时与成本;
- 告警:5xx 突增、队列积压、审计写入失败、AI 连续失败、对象存储不可用;
- 看板:任务中心健康、AI 调用账本(M2 完善成本看板)。
### 9.5 安全基线(M0 必须)
1. 密钥只在环境变量 / 密钥管理,不入库、不进日志、不进 bundle;
2. JWT 签名密钥支持轮换;refresh 旋转 + 吊销;
3. 密码 Argon2;登录失败限流;
4. 上传类型 / 大小校验;预签名 URL 短时效;
5. 依赖审计与许可证检查进 CI;
6. 权限三态用例覆盖每个受保护端点;
7. 审计 append-only 由数据库权限兜底,不能只靠代码。
---
## 10 质量门禁与测试策略
### 10.1 门禁总表
| 门禁 | 时点 | 通过条件 | 不通过处理 |
| --- | --- | --- | --- |
| **G0 批次准入** | 每批 D0 | 批次卡就绪;依赖批次验收通过;契约版本确认;环境可用;本批待确认项已清零或有明确默认 | 不启动,先补条件 |
| **G1 任务卡完成** | 每张卡 | `lint` / `typecheck` / 单测绿;无 `any` / `as` 逃逸;无跨模块 `prisma`;接口有 OpenAPI 描述;关键分支有测试;自查清单勾完 | 打回,不进入集成 |
| **G2 后端批次门** | 每批 D2 | 契约 v0 快照产出;权限三态用例通过;迁移可在空库重复执行;审计写入验证;错误码覆盖 | 本批不交付前端联调 |
| **G3 联调门** | 每批 D4 | 联调检查单 8 项全勾;页面三态齐全;错误提示映射完整;冒烟 E2E 通过 | 延期,不带病验收 |
| **G4 批次验收** | 每批 D5 | DoD 清单 + 演示脚本通过;`openapi:diff` 无未登记破坏性变更;批次记录与风险台账更新 | 不计入完成,顺延 |
| **G5 里程碑** | M0–M4 每个里程碑末 | 里程碑 DoD;AC 映射;性能预算;安全基线;文档同步;回滚演练(M1+) | 不进入下一里程碑 |
> **与人工决策门的关系**:§3.4 的 `H0`–`H5` 是**人的决策点**,不替代本节 `G0`–`G5` 的**质量门禁**。对应关系:`H0`↔`G0`(范围确认后开卡)、`H1`/`H2`/`H3` 为专题评审(分别在 A2 / A7 / 每批演示前)、`H4`↔`G4`(批次验收)、`H5`↔`G5`(里程碑发布)。
### 10.2 测试分层
| 层 | 范围 | 工具 | 何时强制 |
| --- | --- | --- | --- |
| 单元 | shared 工具与 schema、权限判定、状态机、命名生成、字典三层合并、AI 路由优先级 | Vitest | 每张任务卡 |
| 集成 | 登录链路、权限三态、客户隔离、任务幂等 / 重试、审计 append-only、密钥加密、文件预签名 | Vitest + Testcontainers(PG / Redis / MinIO) | 每批 G2 起 |
| 契约 | OpenAPI 快照 diff;前端 mock 与 schema 一致性 | `openapi:diff` + 契约测试 | 每批 |
| E2E | 登录、用户 / 角色、客户、字典、任务中心、AI 配置(Mock) | Playwright | M0 末起,每批冒烟 |
| 性能 | 任务提交 P95、列表 P95、SSE 连接数 | k6 | M1 起 |
| 安全 | 依赖审计、密钥扫描、越权用例、上传校验 | CI + 用例 | 每批 |
覆盖率只升不降;M0 起点行覆盖率 60%,`identity` / `platform` 关键模块 70%。
### 10.3 权限三态矩阵(每个受保护端点必填)
| 端点 | 有权限 | 功能权限缺失 | 特殊权限缺失 | 数据范围外 / 不可见 |
| --- | --- | --- | --- | --- |
| `GET /users` | 200 列表 | 403 `40301` | N/A | N/A |
| `GET /customers` | 200 范围内客户 | 403 `40301` | N/A | 空列表 / 详情 404 |
| `PATCH /customers/{id}` | 200 | 403 `40301` | N/A | 404(不泄露存在性) |
| `POST /media-tasks` | 202 任务 | 403 `40301` | N/A | `40302` / 404 |
| `GET /audit-logs` | 200 | 403 `40301` | 403 `40303` | 按审计范围裁剪 |
| `POST /audit-logs/export` | 202 | 403 `40301` | 403 `40303` | 同上 |
| `PATCH /ai/providers/{id}` | 200 | 403 `40301` | 403 `40303` | N/A |
| `POST /industry-packs/{id}/versions/{v}/publish` | 200 | 403 `40301` | 403 `40303` | N/A |
> 口径(对齐架构 §6.1 错误码表):**功能权限缺失 → 403 `40301`;数据范围外 → 403 `40302`(写操作)/ 空列表(列表)/ 404(单条,不泄露存在性);特殊权限缺失 → 403 `40303`;职责互斥 → 403 `40304`**。每个端点必须有对应三态用例,缺用例视为 G2 不通过。
### 10.4 契约与迁移门禁
| 检查 | 规则 |
| --- | --- |
| 破坏性变更 | 删字段 / 改类型 / 改必填 / 改枚举值 / 改错误码 → 必须升版本 + 前端同步 + `openapi:diff` 登记 |
| 迁移 | 一律 expand → migrate → contract;同一发布内禁止"删字段 + 改代码";迁移必须可在空库与存量库各跑一次 |
| 回滚 | 每个迁移附回滚说明;不可逆操作(删列 / 改类型)必须双人 review + 备份确认 |
| 数据修复 | 禁止在迁移里做业务数据修复;修复走独立脚本并留审计 |
### 10.5 强制双人 Review 清单
权限 / 角色 / 数据范围 · 数据库迁移 · AI 供应商与密钥 · 导出与分享 · 审计与保留期 · 行业包发布 · 跨客户复用。
### 10.6 缺陷分级与阻断规则
| 级别 | 定义 | 处理 |
| --- | --- | --- |
| P0 | 数据泄露 / 越权 / 丢数据 / 密钥泄露 / 审计缺失 | 立即停批修复,修复后补回归用例 |
| P1 | 主流程不可用 / 契约破坏 / 权限判定错误 | 本批内必须清零 |
| P2 | 非主流程缺陷 / 体验问题 | 下一批处理,登记台账 |
| P3 | 建议 / 优化 | backlog |
**硬规则:任何 P0 / P1 未清零,不得进入下一批。**
---
## 11 风险与应对
### 11.1 项目风险
| 编号 | 风险 | 概率 | 影响 | 应对 | 触发信号 |
| --- | --- | --- | --- | --- | --- |
| PR-01 | M0 范围与架构 T0 口径不一致,评审时被压缩 | 高 | 高 | §2.5 显式说明差异与建议;DP-03 早确认;如压缩优先砍资产 / 导出,不砍权限与字典 | 评审会要求回到 25–30 EPD |
| PR-02 | 表单设计器复杂度超预期(R-T-04) | 中 | 高 | 14 类字段白名单 + 硬上限;先"JSON 编辑 + 渲染"降级路径;`form-engine` 独立包可单测 | B2 超期 3 天 |
| PR-03 | 行业包字段 / 合规规则未定(Q-15 / Q-16) | 高 | 中 | 电商包先行;字段清单 B0 开卡前书面确认;上限进配置 | B0 无法开卡 |
| PR-04 | 图片线渲染无先例(R-T-13) | 中 | 高 | M1 前 2 周 spike;单模板端到端优先;模板数量收敛 | PSD 解析失败率 > 10% |
| PR-05 | AI 供应商 / 预算未定(QT-05 / Q-09) | 高 | 中 | Mock 先行 + 适配器隔离;预算 P1 再做;切换供应商不改业务代码 | A7 无法联调真实模型 |
| PR-06 | 权限模型复杂,越权风险(R-16~R-18) | 中 | 高 | H1 权限门先落地;权限三态用例强制;数据范围统一走 ScopeGuard | 出现"先查全量再过滤" |
| PR-07 | 人工验收成为瓶颈 | 高 | 中 | 固定验收窗口;演示脚本预填;缺陷分级;验收人提前指定 | 验收演示连续两次改期 |
| PR-08 | 前后端契约漂移 | 中 | 中 | shared Zod 单一真源;契约冻结;`openapi:diff`;mock 契约测试 | 前端手写接口类型 |
| PR-09 | 迁移 / 种子冲突 | 中 | 中 | 迁移单写者;种子脚本幂等;每批预留迁移窗口 | 两人同改 `prisma/` |
| PR-10 | 中文字体 / 编码环境问题(R-T-18) | 中 | 中 | 镜像内置字体;启动自检;M1 前验证 | 渲染缺字 / 方框 |
| PR-11 | 一个人同时改多模块导致回归 | 中 | 中 | 写范围声明;模块 owner;CI 全量跑 | 同一 PR 跨 > 3 模块 |
| PR-12 | 需求在开发中变更 | 高 | 中 | 变更走批次记录 + 影响面评估;未确认项进 §13;不接"顺手加" | 口头新增需求 |
### 11.2 Harness 协作特有风险
| 编号 | 风险 | 应对 |
| --- | --- | --- |
| HR-01 | 模型幻觉 API / 字段 / 版本号 | 强制先读上游文档;以 `packages/shared` 与 OpenAPI 为准;typecheck + 契约测试兜底;Verifier 抽查 |
| HR-02 | 跨模块 `prisma` 或越权捷径 | ESLint 自定义规则 + 架构测试 + Review 清单 |
| HR-03 | `any` / `as` 逃逸类型 | `no-explicit-any` 与 `no-unnecessary-type-assertion` 阻断;Review 抽查 |
| HR-04 | 静默失败 / 假成功 | 失败必须显式上报;低质量产出打标(`R-30`);E2E 断言真实结果 |
| HR-05 | 上下文漂移 / 遗忘约束 | 任务卡自包含;每批重读 AGENTS 与批次卡;关键决策落文档 |
| HR-06 | 过度设计 / 提前抽象 | 只做任务卡范围;YAGNI;抽象需两个以上真实用例 |
| HR-07 | 测试只写 happy path | 权限三态 / 负向 / 边界用例强制;覆盖率只升不降 |
| HR-08 | 并行写冲突 | 写范围声明 + 单写者;冲突走 rebase + 复核 |
| HR-09 | token / 成本失控 | 每批限定上下文;复用文档摘要;长任务拆卡;避免重复全量读库 |
### 11.3 风险回顾
每批 D5 更新风险台账(新增 / 关闭 / 概率变化);每个里程碑做一次复盘,输出"下阶段 Top 3 风险"。
---
## 12 验收与交付
### 12.1 M0 完成定义(DoD)
- [ ] 新环境按 README 一条命令起依赖、一条命令起服务;
- [ ] 超管首登强制改密;用户 / 角色 / 部门可用;
- [ ] 自定义角色 + 权限点 + 六类数据范围 + 特殊权限可用;
- [ ] SoD 三对规则生效且有拒绝用例;
- [ ] 行业两级树(一级 → 二级,客户挂末级)、客户 / 客户组 / 客户端字段审批可用;
- [ ] 通用字典三层合并、编码不可改、历史快照可用;
- [ ] 审计七类关键动作留痕、只读、导出留痕;
- [ ] AI 四层配置 + Mock 全链路 + 密钥不回显;
- [ ] 任务中心可查 / 可取消 / 可重试,幂等生效;
- [ ] 行业包 v1(电商)草稿 → 校验 → 审核 → 发布;
- [ ] 资产包上传 / 版本 / 停用 / 引用保护;
- [ ] 要素卡与脚本模板可用,表单设计器 14 类字段可用;
- [ ] 权限三态用例覆盖全部受保护端点;
- [ ] `pnpm lint && pnpm typecheck && pnpm test` 全绿;E2E 冒烟通过;
- [ ] 文档与索引同步(README / AGENTS / 本计划)。
### 12.2 每批演示脚本模板
| 步骤 | 操作 | 期望 | 证据 |
| --- | --- | --- | --- |
| 1 | 以不同角色登录 | 菜单 / 按钮按权限差异显示 | 截图 × 2 |
| 2 | 执行本批核心写操作 | 成功反馈 + 审计 1s 内可查 | 截图 + 审计记录 |
| 3 | 越权 / 范围外访问 | 403 / 404 / 空列表符合口径 | 截图 |
| 4 | 触发错误分支 | 错误码与提示文案正确 | 截图 |
| 5 | 刷新 / 重进页面 | 状态持久、无脏数据 | 录屏或截图 |
### 12.3 里程碑退出标准
| 里程碑 | 退出标准 | 对应 AC |
| --- | --- | --- |
| M0 | §12.1 全勾 + 演示通过 + 无 P0/P1 | 支撑 AC-04 |
| M1 | 单客户"要素卡 → 脚本 → 图片素材 → 快筛 → 导出归档"闭环;3 个模板可用;导出留痕 | AC-01、AC-04 |
| M2 | 提效能力上线;至少 3 项指标可量化;成本看板可用 | AC-02 |
| M3 | 复用、成片入库、送审与回流、SSO / 系统配置上线;复用率 ≥ 60%;关联率与日指标可测 | AC-03 |
| M4 | 爆量判定与阈值可配置;脚本反哺生效;四类看板可用;M0–M4 全量回归通过 | AC-02、AC-04 |
### 12.4 交付物清单
| 类别 | 内容 |
| --- | --- |
| 代码 | `apps/api`、`apps/worker`、`apps/web`、`packages/*`、`prisma/`、`infra/` |
| 文档 | 本计划、批次记录、接口快照、迁移说明、Runbook(T1 前) |
| 演示 | 每批演示脚本与截图、M0–M4 验收记录 |
| 台账 | 风险台账、待确认清单、缺陷台账、AI 调用账本(M2) |
### 12.5 发布与灰度
| 阶段 | 策略 |
| --- | --- |
| M0 | 内测环境部署,仅项目组 + 种子客户使用;每日构建 |
| M1 | staging 验证 → 生产灰度(1–2 个客户);功能开关控制新能力 |
| M2+ | 按客户 / 行业分批放量;迁移先行、代码后行;保留上一版本镜像 |
回滚:镜像回滚 + 迁移回滚说明 + 功能开关关闭;每次发布前演练一次。
### 12.6 验收记录
每批 D5 记录:批次号、日期、参与人、演示项、通过 / 不通过项、遗留缺陷、风险变化、下一批准入结论。
---
### 12.7 全项目完工定义(M0–M4)
- [ ] M0–M4 各里程碑退出标准全部满足(§12.1、§12.3);
- [ ] AC-01:至少 3 个不同行业包客户可重复走通「要素卡 → 脚本 → 图片 / 视频 → 快筛 → 导出归档」;
- [ ] AC-02:至少 3 项提效指标较基线改善 ≥ 30%,口径与看板一致;
- [ ] AC-03:周活 ≥ 50%,覆盖策划 / 设计 / 投手 3 类岗位;
- [ ] AC-04:权限隔离用例全绿;导出、权限变更、分享访问、AI 调用均可审计;
- [ ] 数据保留期、审计导出、备份恢复演练通过;
- [ ] 代码仓库打 tag `v1.0.0`,交付文档包(计划 / 接口 / 迁移 / Runbook / 验收记录)归档。
---
## 13 待确认清单(需产品 / 技术负责人确认)
| 编号 | 待确认项 | 影响 | 建议默认 | 阻塞批次 |
| --- | --- | --- | --- | --- |
| DP-01 | 「任务管理」是否即跨模块异步任务中心;是否新增 `task:*` 权限点 | 权限模型与页面范围 | 按 AS-06 做任务中心,复用 `media:view` / `media:generate`,暂不新增权限点 | A6 / H1 |
| DP-02 | 「日志管理」是否含运行日志查询入口 | 页面与权限 | 审计中心为主,运行日志跳转 Grafana / Loki,不自研 | A5 |
| DP-03 | M0 范围与排期是否对外承诺;是否接受 6–7 周 | 项目计划与预期 | 维持完整 M0,按 6–7 周排;对外只承诺里程碑不承诺日期 | 立项 |
| DP-04 | 登录方式与 SSO 时点(Q-10) | A1 设计与后续改造 | M0 账号密码 + 刷新令牌;SSO 预留接口 | A1 |
| DP-05 | AI 供应商、密钥保管方式、预算阈值(QT-05 / Q-09) | A7 与 M1 真实调用 | 先 Mock;生产密钥走环境变量 / 密钥管理;预算 P1 | A7 / M2 |
| DP-06 | 云厂商、域名、备案、对象存储(QT-01 / QT-03) | 部署与环境 | 单云 + 托管 PG / Redis / S3 兼容存储 | A0 / M1 |
| DP-07 | 行业包首批字段与审批人(Q-14 / Q-15 / Q-16) | B0 / B2 | 电商包按 PRD 示例字段;审批人=产品负责人 | B0 / B2 |
| DP-08 | UI 视觉稿与走查机制 | 前端效率与返工 | 以 Semi 默认为基线,M0 中补关键页视觉稿 | A0 / M1 |
| DP-09 | Harness 团队规模与并发 Worker 数 | 排期与冲突 | 1 Lead + 3 Worker;写范围隔离 | 全程 |
| DP-10 | 生产运维责任、值班与告警接收人 | 上线 | 开发兼任,M1 前补 Runbook | M1 |
| DP-11 | 数据保留期(Q-08) | 审计 / 日志 / 产物 | 审计 ≥ 12 个月,运行日志 30 天,产物按客户配置 | A5 / M1 |
| DP-12 | 平台清单与尺寸矩阵(Q-03) | 字典与渲染 | 先按 PRD 附录清单,进字典可配 | B0 / M1 |
| DP-13 | 行业包七项校验中哪些阻断、哪些仅警告(PRD §5.4.8 未区分) | B0 / B2 | 结构性问题阻断,内容类问题警告 | B0 / B2 |
| DP-14 | 跨客户复用授权、批量删除两项特殊权限的权限点编码(PRD §5.4.3 要求,架构 §6.3 未给) | 角色编辑器特殊权限区完整性 | M0 先实现五项;两项在 M2/M3 启用前回写架构并补入 `packages/shared` | A2 / M2 |
| DP-15 | AI 模型管理的端点形态(架构 §6.3.7 只有 providers / routes / prompts,未单列 models) | A7 接口契约与前端页面 | 模型作为 `/ai/providers/{id}` 嵌套资源,A7 前回写架构 §6.3.7 | A7 |
| DP-16 | M4 爆量判定阈值与 ROI 口径(PRD 未给数值,`R-26` 要求只存配置) | M4 判定逻辑、榜单与反哺 | 默认「消耗 ≥ 客户日均消耗 3 倍且 ROI ≥ 1.2」,进 `system_configs` 可改 | M4-1 |
| DP-17 | M5 预研(M-27 / AI 素材生产)是否立项、预算与版权方案(Q-32) | 后续路线与资源 | M4 验收后单独立项评估,不在本期承诺 | M5 |
| DP-18 | 公开分享 / 免登录审核链接开关(`R-28`) | M2-4 审核链接、M3-2 素材分享 | 默认关闭,按客户白名单开启;链接短时效、可作废、访问留痕 | M2-4 / M3-2 |
> 处理规则:任一 DP 在阻塞批次开卡前未确认,按"建议默认"执行并登记;若影响面跨模块,升级为 ADR。
---
## 14 附录
### A 任务卡模板
```markdown
### T-<批次>-<序号> <任务名>
- 端:BE / FE / BOTH / INFRA
- 模块:identity / client / catalog / industry / script / media / delivery / platform
- 依赖:<任务号或"无">
- 写范围:<文件 / 目录前缀>
- 目标:<一句话>
- 输入:<上游文档章节 / 契约 / 设计稿>
- 实现要点:<3–6 条>
- 验收标准:<可执行、可断言,3–5 条>
- 测试要求:<单测 / 集成 / 三态用例>
- 工量:
- 风险 / 待确认:
```
### B M0 权限点清单(规划,最终以 `packages/shared` 为准)
| 模块 | 权限点 | 说明 |
| --- | --- | --- |
| identity | `user:view` / `user:manage` | 用户查看 / 增改停用转交 |
| identity | `role:view` / `role:manage` | 角色查看 / 增改与授权 |
| client | `customer:view` / `customer:manage` | 客户查看 / 增改 |
| client | `customer:transfer` | 客户转交 |
| client | `customer_group:manage` | 客户组管理 |
| client | `customer_field:apply` / `customer_field:approve`★ | 字段申请 / 审批 |
| industry | `industry_pack:view` / `industry_pack:edit` | 行业包查看 / 编辑 |
| industry | `industry_pack:review` / `industry_pack:publish`★ | 审核 / 发布 |
| catalog | `brief_card:view` / `brief_card:edit` | 要素卡 |
| catalog | `script_template:view` / `script_template:edit` | 脚本模板 |
| catalog | `asset:view` / `asset:edit` / `asset:delete` | 资产(被引用仅停用) |
| media | `media:view` / `media:generate` | 任务查看 / 提交(任务中心复用) |
| delivery | `export:create`★ | 导出 |
| platform | `dict:view` / `dict:edit` | 字典 |
| platform | `ai:view` / `ai:configure`★ | AI 配置 |
| platform | `audit:view`★ / `audit:export`★ | 审计查看 / 导出(均为特殊权限) |
| platform | `system:configure` | 系统配置 |
★ = 特殊权限,默认关闭,不随角色复制带入。PRD §5.4.3 另有「跨客户复用授权」「批量删除」两项特殊权限;架构 §6.3 尚未给出权限点编码,计划在 M2/M3 启用前回写架构并补入(`DP-14`)。
### C M0 页面清单
| 路由 | 页面 | 权限点 | 批次 |
| --- | --- | --- | --- |
| `/login` | 登录 | 公开 | A1 |
| `/system/users`、`/system/users/new`、`/system/users/:id` | 用户与部门 | `user:view` / `user:manage` | A1 |
| `/system/departments` | 部门管理(两级组织树、停用/启用) | `user:view` / `user:manage` | A1 |
| `/system/roles`、`/system/roles/:id` | 角色管理 | `role:view` / `role:manage` | A2 |
| `/system/industries` | 行业管理 | `customer:read` / `customer:manage` | A3 |
| `/system/customers`、`/system/customers/new`、`/system/customers/:id` | 客户管理 | `customer:view` / `customer:manage` | A3 |
| `/system/customer-groups` | 客户组 | `customer_group:manage` | A3 |
| `/system/customer-fields/approvals` | 字段审批 | `customer_field:approve` | A3 |
| `/system/dicts`、`/system/dicts/:type` | 字典 | `dict:view` / `dict:edit` | A4 |
| `/system/settings` | 系统配置 | `system:configure` | A4 |
| `/system/audit-logs`、`/system/audit-logs/:id` | 审计 | `audit:view` | A5 |
| `/material/tasks`、`/material/tasks/:id` | 任务中心 | `media:view` / `media:generate` | A6 |
| `/system/ai`(后续 `/system/ai/providers` 等) | AI 配置 | `ai:view` / `ai:configure` | A7 |
| `/system/industry-packs`、`/system/industry-packs/:id/versions/:ver` | 行业包与设计器 | `industry_pack:*` | B0–B2 |
| `/assets/library`、`/assets/library/:id` | 资产包 | `asset:*` | B1 |
| `/scripts/framework-cards`、`/scripts/framework-cards/new`、`/scripts/framework-cards/:id` | 要素卡 | `brief_card:*` | B2 |
| `/scripts/templates` | 脚本模板 | `script_template:*` | B2 |
| `/delivery/export`、`/delivery/records`、`/delivery/records/:id` | 导出与归档 | `export:create` | B3 |
| `/403`、`/404` | 异常页 | 公开 | A0 |
### D 接口清单
以技术架构 §6.3 为准;M0 需要实现:`GET /health`(运维探针,架构未列)、`GET /me`、`POST /auth/refresh`、`POST /auth/logout`、`GET /permissions`、`POST /users/{id}/transfer-customers`、`POST /customers/{id}/apply-industry-pack`、`GET /dicts/{type}/items`(除 `/health` 外均见架构 §6.3)。模型管理随 `/ai/providers` 嵌套实现,见 §7.7 注。
### E 术语
| 术语 | 含义 |
| --- | --- |
| 行业包 | 一个行业的内容知识资产(字段 / 术语 / 模板 / 规则),可版本化发布 |
| 要素卡 | 单条素材的输入卡(核心信息 / 卖点 / 必含项 / 禁忌项),脚本生成上游 |
| 快筛 | 人工对素材逐条打标(合格 / 待修 / 淘汰 + 理由) |
| 低质量产出 | 标注 `low_quality` + 原因码的产出,不按成功静默交付 |
| ScopeContext | 请求作用域上下文(用户 / 角色 / 数据范围 / 客户),所有数据访问必带 |
| 特殊权限 | 默认关闭、需单独授予的高危权限(导出 / AI 配置 / 审计 / 发布等) |
| EPD | 人日(Effort Person-Day) |
| Lead / Worker | Harness 编队中的协调者与执行者 |
### F 修订记录
| 版本 | 日期 | 变更 |
| --- | --- | --- |
| V0.1 | 2026-11-02 | 初稿:范围、编队、批次、WBS、七个管理模块专项、联调、门禁、风险、验收、待确认 |
| V0.1(补全) | 2026-11-02 | 按用户确认补全为**全项目 M0–M4**:M1–M4 增加迭代级 + 任务组级 WBS;补 M4 交付闭环、M5 预研边界、全项目完工定义;待确认增至 DP-18 |
---
> 本计划与 PRD `V1.6`、技术架构 `V0.4` 配套使用;冲突时以 PRD → 技术架构 → 工程规范 → 本计划为序。