Files
wecom_it_smart_desk/docs/00-产品开发流程与文档管理规范.md
T

1464 lines
62 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IT智能服务台 - 产品开发流程与文档管理规范
> **版本**: v1.14
> **日期**: 2026-08-09
> **状态**: [已评审]
> **作者**: Simon
> **变更说明**:
> - v1.11 → v1.12:新增 §14 大需求重构的文档化策略(2026-07-28 管理后台 IA 重构经验)
> - v1.12 → v1.13:新增 §16 技术方案偏离时的"增量更新章节"治理(基于 2026-08-03 voice_asr.py P0 安全巡检 + 文档-代码不一致修复经验),涵盖:① §16.1 技术方案与实际部署偏离的场景识别;② §16.2 §10 增量更新章节模板;③ §16.3 多策略功能(如语音输入的"手机 JS-SDK / PC 百度 ASR / Web Speech"三分支)的文档化要求;④ §16.4 API 端点调用方分析强制检查项;⑤ §16.5 运营/配置/运维文档与代码一致性核查清单模板
> - **v1.13 → v1.14**:新增 §13.5.1~13.5.4 归档命名约定全员一致性(基于 2026-08-09 工具栏统一设计 v0.3~v1.9 批量归档经验),涵盖:① §13.5.1 归档命名格式表 + 全员一致性铁律;② §13.5.2 引用指向规则(活文档指向当前生产版本);③ §13.5.3 归档目录位置规则;④ §13.5.4 归档操作 7 步 SOP;同步清理 §13.5 旧表述 `-archived-日期`(统一为 `.archive`
---
## 一、流程定义
### 1.1 阶段划分
```
┌────────────────────────────────────────────────────────────────────────────┐
│ 产品开发标准流程(需求→设计→技术→测试→运维→运营) │
├────────────────────────────────────────────────────────────────────────────┤
│ 【阶段1】 【阶段2】 【阶段3】 【阶段4】 【阶段5】 【阶段6】 │
│ 需求定义 设计验证 技术实现 测试验证 运维运营 运营分析 │
│ ──────── ──────── ──────── ──────── ──────── ──────── │
│ 业务问题 低保真原型 技术方案 测试用例 部署方案 运营报告 │
│ 竞品分析 高保真原型 接口设计 功能测试 监控告警 采用率分析 │
│ 可行性评估 交互验证 数据库设计 回归测试 运维手册 用户反馈 │
│ PRD撰写 用户测试 详细设计 性能/安全测试 数据看板 推广复盘 │
│ 需求评审 设计评审 技术评审 测试报告 故障排查 KPI回流需求 │
│ │
│ │ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ ▼ │
│ 产出:PRD 产出:原型图 产出:技术 产出:测试 产出:运维 产出:运营报告 │
│ 文档 报告+缺陷单 文档 │
└────────────────────────────────────────────────────────────────────────────┘
```
### 1.2 阶段依赖
| 阶段 | 前置条件 | 可并行 | 产出 |
|------|----------|--------|------|
| 阶段1 需求定义 | 业务目标 | 竞品分析 | PRD |
| 阶段2 设计验证 | 需求确认 | 技术预研 | 原型图 |
| 阶段3 技术实现 | 设计确认 | - | 技术方案 |
| 阶段4 测试验证 | 开发完成提测 | 性能压测预排 | 测试用例、测试报告、缺陷单 |
| 阶段5 运维运营 | 测试通过、上线审批 | 监控看板预配置 | 部署方案、运维手册、故障排查 |
| 阶段6 运营分析 | 上线运行一段时间 | - | 运营报告、采用率、用户反馈、KPI |
### 1.3 各环节的关键定位
| 环节 | 不是什么 | 是什么 |
|------|----------|--------|
| 测试验证 | 开发的附属、上线前的"过场" | 质量闸门——未通过验收标准不得上线 |
| 运维运营 | 上线后的"甩锅环节" | 稳定保障——部署/监控/手册三件套齐备方可发布 |
| 运营分析 | 可有可无的"报表" | 价值闭环——验证需求是否达成业务目标,KPI 回流需求 |
**核心逻辑**:需求定义"做什么"→设计验证"长什么样"→技术实现"怎么造"→测试验证"造得对不对"→运维运营"稳不稳"→运营分析"用得好不好"。测试是质量的守门员,运维是稳定的保障者,运营是价值的验收员,三者都向前回溯(缺陷回到开发,指标回到需求)。
---
## 二、文档目录结构
### 2.0 项目根目录结构(代码与配置)
> **基于 2026-07-27 整理实践**
```
wecom_it_smart_desk/ # 项目根目录
├── src/ # 源代码(统一管理)
│ ├── backend/ # Python FastAPI 后端
│ ├── frontend-agent/ # 坐席工作台前端 (Vue3 + TS)
│ ├── frontend-h5/ # H5 员工端前端
│ ├── frontend-admin/ # 管理后台前端
│ └── frontend-terminal/ # 终端管理前端
├── configs/ # 配置文件
│ ├── .env # 主环境配置
│ ├── .env.example # 环境配置模板
│ ├── .env.production # 生产环境配置
│ ├── .env.nas # NAS 配置
│ └── .dockerignore
├── packages/ # 当前部署包(最新版本)
│ ├── h5_dist.tar.gz # H5 部署包
│ ├── frontend-agent-dist.tar.gz # 坐席端部署包
│ └── frontend-admin-dist.zip # 管理端部署包
├── archives/ # 历史归档(无活跃引用)
│ ├── h5-dist-v*.tar.gz # 旧版本前端
│ ├── agent-dist-v*.tar.gz # 旧版本坐席端
│ └── backend-*.tar.gz # 旧版本后端
├── scripts/ # 脚本工具
│ ├── deploy/ # 部署脚本
│ ├── debug/ # 调试/测试脚本
│ └── fix/ # 修复脚本
├── docs/ # 项目文档(按本规范管理)
├── tools/ # 辅助工具
├── nginx/ # Nginx 配置
├── ops-tools/ # 运维工具
├── docker-compose.yml # Docker 配置(生产)
└── docker-compose.dev.yml # Docker 配置(开发)
```
#### 2.0.1 目录整理规则
| 类别 | 存放位置 | 说明 |
|------|----------|------|
| 源代码 | `src/` | 后端+前端统一管理 |
| 配置文件 | `configs/` | 环境变量、Docker配置 |
| 当前部署包 | `packages/` | 正在使用的部署包 |
| 历史归档 | `archives/` | 旧版本、临时文件 |
| 部署脚本 | `scripts/deploy/` | 部署相关脚本 |
| 调试脚本 | `scripts/debug/` | 测试、调试脚本 |
| 修复脚本 | `scripts/fix/` | 问题修复脚本 |
| 项目文档 | `docs/` | 按本规范管理 |
#### 2.0.2 部署配置路径更新
> **重要**:目录结构变更后,部署配置需同步更新:
| 配置文件 | 需要更新的路径 |
|----------|---------------|
| `docker-compose.yml` | `context: ./src/backend` |
| `docker-compose.yml` | `volumes: ./src/backend/app:/app/app` |
| `docker-compose.yml` | `volumes: ./src/frontend-*/dist:...` |
### 2.1 标准结构(9 类 + 根治理文件)
```
docs/
├── 00-产品开发流程与文档管理规范.md ← 本规范(治理文件,置顶)
├── 00-版本迭代总览.md ← 全局版本索引(治理文件,置顶)
├── 01-产品文档/
│ ├── 01-认证与登录/ (PRD+原型: 企微登录、OTP、SSO)
│ ├── 02-会话管理/ (PRD+原型: 消息、暂停恢复、存档)
│ ├── 03-AI服务/ (PRD+原型: 意图识别、路由、对话)
│ ├── 04-坐席工作台/ (PRD+原型: 消息框、截图、布局)
│ ├── 05-用户端H5/ (PRD+原型: H5界面、群聊、邀请)
│ ├── 06-审批与待办/ (PRD+原型: 审批流、代办)
│ ├── 07-知识库/ (PRD+原型: RAG、知识迭代)
│ └── 08-集成生态/ (PRD+原型: 第三方集成)
├── 02-技术文档/
│ ├── 技术架构/ (系统架构设计、类图/时序图、架构图)
│ ├── 实现配置/ (Dify Prompt、实施计划、审批模板等)
│ └── 重构记录/ (按版本拆分的重构方案,原 02-技术文档/重构记录)
├── 03-测试文档/
│ ├── 00-测试规范/
│ ├── 01-综合报告/
│ ├── 02-E2E测试/
│ ├── 03-功能测试用例/
│ ├── 04-版本测试报告/
│ └── 05-缺陷单/ (BUG 单独立落点:BUG-{模块}-{描述}-{序号}.md)
├── 04-运维文档/
│ ├── 运维指南/ (运维手册、故障排查)
│ └── 部署运维/ (部署指南、nginx配置、运维工具 toolbox、发布说明)
├── 05-运营文档/
│ ├── 用户手册/ (坐席/员工操作手册——运营过程中的物料)
│ └── 运营报告/ (运营周/月报、功能采用率、用户反馈、推广效果)
├── 06-安全审计/ (安全审计报告、漏洞扫描、CORS/CSP、集成安全分析)
├── 07-项目管理/ (任务说明书、SOP、状态看板、日报)
└── 08-历史归档/ (仅保留历史留痕、无活跃引用的文档)
```
### 2.2 类别边界规则(避免错放)
| 类别 | 包含 | 不包含(应放别处) |
|------|------|------|
| 01-产品文档 | PRD、原型图、设计说明(按子系统合并:PRD+原型放同一目录) | 操作手册→05;技术方案→02 |
| 02-技术文档 | 架构设计、接口/DB设计、Prompt配置、实施计划、重构方案 | 部署手册→04;测试用例→03 |
| 03-测试文档 | 测试规范、用例、报告、缺陷 | 开发自测记录→02 |
| 04-运维文档 | 部署、监控、故障排查、运维SOP | 业务运营报告→05 |
| 05-运营文档 | 用户手册、运营报告 | 技术运维→04 |
| 06-安全审计 | 安全审计、漏洞、合规 | 一般运维→04 |
| 07-项目管理 | 任务说明书、迭代、会议、看板 | PRD→01 |
| 08-历史归档 | 仅历史留痕 | 仍被引用的→提升回主文档 |
### 2.3 命名规则
#### 2.3.1 产品文档(01-产品文档)
| 文档类型 | 命名格式 | 示例 |
|----------|----------|------|
| PRD | `PRD-REQ-[需求编号]-[功能名]-v[版本号].md` | `PRD-REQ-会话-001-暂停恢复-v1.1.md` |
| 原型图 | `原型-REQ-[需求编号]-[功能名]-v[版本号].html` | `原型-REQ-会话-001-暂停恢复-v1.1.html` |
#### 2.3.2 技术文档(02-技术文档)
| 文档类型 | 命名格式 | 示例 | 关联 |
|----------|----------|------|------|
| 技术方案 | `技术方案-REQ-[需求编号]-[功能名]-v[版本号].md` | `技术方案-REQ-会话-001-暂停恢复-v1.0.md` | 关联 PRD |
| 架构设计 | `架构设计-[功能名].md` | `架构设计-知识库迭代.md` | 可关联 REQ |
| 接口设计 | `API-[功能名].md` | `API-会话管理.md` | 可关联 REQ |
| 数据模型 | `数据模型-[功能名].md` | `数据模型-知识库.md` | 可关联 REQ |
| 前端设计 | `前端设计-[功能名].md` | `前端设计-知识库迭代.md` | 可关联 REQ |
| Dify DSL备份 | `{应用标识}_{版本/日期}_{操作类型}.yml` | `itdesk_main_2026-7-24_102740.yml` | 关联 Dify 应用 |
#### 2.3.2.1 Dify DSL 备份文件命名规范
> **适用范围**Dify 应用的 DSLDomain Specific Language)导出文件备份
| 应用 | 应用标识 | 示例 |
|------|---------|------|
| 主应用(智能IT支持-员工咨询) | `itdesk_main` | `itdesk_main_2026-7-24_102740.yml` |
| 分诊应用 | `triage` | `triage_2026-7-20_v1.yml` |
| 审批意图应用 | `approval_intent` | `approval_intent_2026-7-18.yml` |
**保存位置**`02-技术文档/实现配置/dify_dsl/`
#### 2.3.3 其他文档
| 文档类型 | 命名格式 | 示例 |
|----------|----------|------|
| 需求变更 | `变更-功能名-日期.md` | `变更-暂停恢复-20260719.md` |
| 测试用例 | `TC-功能名.md` | `TC-暂停恢复.md` |
| 测试报告 | `TR-功能名-版本.md` | `TR-暂停恢复-v1.1.md` |
| 缺陷单 | `BUG-{模块}-{描述}-{序号}.md`(目录:`03-测试文档/05-缺陷单/`| `03-测试文档/05-缺陷单/BUG-AI-打印机安装路由错误-001.md` |
| 部署方案 | `DEPLOY-功能名.md` | `DEPLOY-暂停恢复.md` |
| 监控告警 | `MON-功能名.md` | `MON-暂停恢复.md` |
| 运维手册 | `OPS-功能名.md` | `OPS-暂停恢复.md` |
| 用户手册 | `手册-角色.md` | `手册-坐席端.md` |
| 运营报告 | `运营报告-周期.md` | `运营报告-2026Q3.md` |
| 安全审计 | `SEC-主题-日期.md` | `SEC-前端审计-20260615.md` |
| 任务说明书 | `任务说明书-编号-主题.md` | `任务说明书-78-审批流程.md` |
| 版本总览 | `00-版本迭代总览.md` | - |
> **命名规则说明**
> - 产品文档必须关联 REQ 编号(PRD、原型)
> - 技术文档建议关联 REQ 编号(技术方案必须关联,其他可选)
> - 存量文件允许保留原名(避免破坏内部引用),新文档按上表命名
> - 重命名需同步修正引用
### 2.4 重构记录拆分规则
`02-技术文档/重构记录` 不再单列。按版本迭代内容拆分:
- **架构/技术方案部分** → `02-技术文档/技术架构``02-技术文档/重构记录`
- **需求/PRD 部分** → 并入对应 `01-产品文档/子系统` 的 PRD 版本历史
- **全局版本索引** → `00-版本迭代总览.md`
### 2.5 历史归档分拣规则
`08-历史归档` 仅保留**无活跃引用**的历史留痕。新文档归档前必须分拣:
- **仍被主文档引用**(规范/PRD/技术方案引用了该文件)→ 提升回对应主文档(附录或引用)
- **仅历史留痕、无活跃引用** → 留在归档
- 归档文件命名保留 `-archived-日期` 后缀以便追溯
---
## 三、版本管理
### 3.1 版本号规则
```
PRD-功能名-MAJOR.MINOR.PATCH
│ │ │
│ │ └─ Patch: 错别字修正、格式调整
│ │
│ └──── Minor: 新增非核心功能、UI调整
└────── Major: 核心功能变更、架构调整
```
### 3.2 文档状态
| 状态 | 标记 | 说明 |
|------|------|------|
| 草稿 | [草稿] | 正在编写中 |
| 待评审 | [待评审] | 等待评审 |
| 已评审 | [已评审] | 评审通过 |
| 已废弃 | [已废弃] | 已不推荐使用 |
---
## 四、变更管理
### 4.1 变更流程
```
需求变更
评估影响范围 ━━━━━━━━━━┓
│ │
▼ ▼
小变更 大变更(架构/核心)
│ │
▼ ▼
更新PRD版本号 重新评审
+ 变更记录 + 重新设计
+ 通知相关人 + 技术方案更新
```
### 4.2 变更记录模板
```markdown
## 变更记录
| 日期 | 变更人 | 变更内容 | 变更原因 | 影响范围 |
|------|---------|----------|----------|----------|
| 2026-07-19 | Simon | 新增版本回滚功能 | 用户反馈需要 | 需更新技术方案 |
```
### 4.3 文档更新时机
| 场景 | 需要更新的文档 |
|------|---------------|
| 新增功能(涉及UI) | PRD + 原型图 + 技术方案 + 测试用例 |
| 新增功能(纯接口) | PRD + 技术方案 + 测试用例 |
| 功能调整 | PRD(版本号) + 变更记录 + 原型图(视情况)+ 测试用例 |
| UI优化 | 原型图 |
| 技术优化 | 技术方案 |
| 需求变更 | PRD(版本号) + 变更记录 + 回归测试用例 |
| 提测 | 测试用例定稿 + 测试报告初版 |
| 发现缺陷 | 缺陷单 + 回归用例(修复后) |
| 上线 | 部署方案 + 监控告警 + 运维手册 |
| 线上故障 | 缺陷单 + 运维手册(排查SOP补充) |
| 运营复盘 | 运营报告 + 监控结论回流至 PRD 指标章节 |
| 归档 | 按 2.5 分拣:提升回主文档 或 留 08-历史归档 |
### 4.4 原型图必要性判断
| 需求类型 | 是否需要原型图 | 判断依据 |
|----------|---------------|----------|
| 涉及新页面/新组件/UI交互变化 | ✅ 需要 | 有用户可见的界面改动 |
| 纯后端 API / 数据逻辑 | ❌ 不需要 | 无 UI 变化 |
| 仅修改现有组件的显示逻辑 | ⚠️ 视情况 | 参考现有原型是否有该元素 |
---
## 五、文档关联
### 5.1 引用关系
```
00-版本迭代总览.md(全局索引)
├─ 引用 → 各版本 PRD / 技术方案 / 测试报告 / 发布说明
PRD (01-产品文档)
├─ 引用 → 原型图(01-02产品设计)
├─ 引用 → 技术方案(02-技术文档)
│ └─ 引用 → 接口设计 / 数据库设计
├─ 引用 → 测试用例(03-测试文档)
│ └─ 回流 → 缺陷单 → 回归用例
├─ 引用 → 部署/监控/运维手册(04-运维文档)
├─ 引用 → 安全审计(06-安全审计,涉及合规的需求)
└─ 运营指标回流 → PRD 指标章节(05-运营文档 闭环)
```
### 5.2 文档头部模板
```markdown
# 功能名称
> **版本**: v1.0
> **日期**: 2026-07-19
> **状态**: [待评审]
> **作者**: Simon
> **关联文档**:
> - PRD: `01-产品文档/子系统/PRD-REQ-模块-序号-功能名-v版本号.md`
> - 原型: `01-产品文档/子系统/原型-功能名.html`
> - 技术: `02-技术文档/实现配置/xxx.md`
> - 测试: `03-测试文档/04-版本测试报告/TR-xxx.md`
> - 运维: `04-运维文档/部署运维/DEPLOY-xxx.md`
```
---
## 六、总结
### 流程原则
1. **阶段清晰**:需求 → 设计 → 技术 → 测试 → 运维 → 运营,顺序执行、向后回溯
2. **依赖明确**:前序产出作为后续输入
3. **质量闸门**:测试未通过验收标准不得上线;运维三件套齐备方可发布
4. **价值闭环**:运营指标未达预期回流需求
5. **版本管理**:每次变更更新版本号
6. **变更记录**:所有变更必须记录
### 核心规则
- **需求确认后才开始设计**
- **设计确认后才开始技术方案**
- **技术方案评审后才开始开发**
- **开发提测后测试是质量守门员,不得"带病上线"**
- **测试通过后运维接手,部署/监控/手册三件套齐备方可发布**
- **上线后运营分析回流 PRD,形成需求→价值闭环**
- **重构记录按版本拆分,不单列目录**
- **历史归档先分拣,仍被引用的提升回主文档**
- **所有文档变更必须记录版本和变更内容**
---
## 七、需求编号体系
### 7.1 需求编号与文档的关系
```
需求编号(主键)
├── 关联 PRD 文档
├── 关联 技术方案 文档
├── 关联 测试用例 文档
└── 关联 任务说明书
REQ-会话-001 ──┬──→ PRD-会话模块-暂停恢复.md
├──→ 技术方案-会话模块-暂停恢复.md
├──→ TC-会话模块-暂停恢复.md
└──→ 任务说明书-会话-001.md
```
**关系**
- 一对一:1个需求编号 → 1个核心PRD文档
- 一对多:1个需求编号 → 多个关联文档(技术方案、测试用例等)
### 7.2 需求编号命名规则
```
[类型]-[模块]-[序号]
类型:
- REQ(需求/Requirement)——产品需求
- TASK(任务/Task)——开发任务
- BUG(缺陷/Bug)——缺陷修复
模块:
- 认证(认证与登录)
- 会话(会话管理)
- AIAI服务)
- 坐席(坐席工作台)
- 用户(用户端H5
- 审批(审批与待办)
- 知识(知识库)
- 集成(集成生态)
序号:3位数字,自动递增
```
### 7.3 需求编号全局唯一性(强约束)
> **⚠️ 强制要求:需求编号在项目范围内全局唯一**
| 规则 | 说明 |
|------|------|
| 唯一性 | 同一REQ编号只能分配给一个需求,禁止重复使用 |
| 跨模块 | 序号在模块内递增,不同模块可使用相同序号(如REQ-会话-001和REQ-坐席-001 |
| 禁用历史编号 | 已使用过的REQ编号即使需求废弃也不能重新分配 |
| 技术文档关联 | 所有技术方案、测试用例、任务说明书必须关联REQ编号 |
**违规处理**
- 新增需求时AI需校验REQ编号是否已存在
- 代码commit message必须包含REQ编号
- 上线审批需检查REQ编号关联的文档是否完整
### 7.3 编号示例
| 需求编号 | 含义 |
|---------|------|
| REQ-会话-001 | 会话模块第1个需求 |
| REQ-审批-012 | 审批模块第12个需求 |
| TASK-会话-001 | 会话模块第1个开发任务 |
| BUG-消息-003 | 消息模块第3个缺陷 |
### 7.4 文档命名规范(增加需求编号)
```
# PRD 文档
PRD-[模块名]-[功能名].md
PRD-REQ-[需求编号]-[功能名].md # 推荐
# 技术方案
技术方案-[模块名]-[功能名].md
# 测试用例
TC-[模块名]-[功能名].md
# 任务说明书
任务说明书-[需求编号]-[功能名].md
```
---
## 八、文档生命周期管理
### 8.1 新增 / 变更 / 删除判断
| 类型 | 判断依据 | 举例 |
|------|---------|------|
| **新增** | 之前不存在、从未实现过的功能 | "新增暂停恢复功能" |
| **变更** | 已有功能的需求/技术调整 | "修改暂停超时从24h改为8h" |
| **删除** | 已有功能不再需要 | "移除短信通知功能" |
### 8.2 生命周期流程
```
需求进入 → 判断[新增/变更/废弃]
├─ 新增 → 新建完整文档
├─ 变更 → 在原文档中更新 + 追加变更记录
└─ 删除 → 标记"已废弃" + 扫描引用
```
### 8.3 变更记录模板
```markdown
## 变更记录
| 日期 | 版本 | 变更内容 | 变更人 | 变更原因 |
|------|------|----------|--------|----------|
| 2026-07-19 | v1.1 | 新增暂停超时配置 | Simon | 用户反馈24h太长 |
```
### 8.4 废弃文档处理
- 在文档头部标记状态:`> **状态**: [已废弃]`
- 说明废弃原因和替代方案
- 保留在原位置(不移动到归档,除非完全无引用)
---
## 九、输入环节模板体系
### 9.1 各环节标准模板
| 环节 | 模板 | 关键字段 |
|------|------|---------|
| 业务需求入口 | 需求收集表 | 需求编号、类型标记、新增/变更/废弃 |
| 产品评审 | PRD 评审表 | 关联需求编号、类型标记 |
| 设计评审 | 原型评审表 | 关联PRD、变更标记 |
| 技术评审 | 技术方案评审表 | 关联需求编号、关联PRD |
| 测试评审 | 测试用例评审表 | 关联技术方案、变更标记 |
| 上线审批 | 上线checklist | 文档完备性检查、需求编号关联 |
### 9.2 需求收集表模板
```markdown
# 需求收集表
> **需求编号**: REQ-[模块]-[序号] <!-- AI 自动生成 -->
> **需求名称**:
> **需求类型**: [ ] 新增 [ ] 变更 [ ] 废弃
> **关联模块**:
> **需求来源**:
> **业务背景**:
## 需求描述
## 预期收益
## 关联文档(若有)
```
### 9.3 任务说明书模板(增加关联字段)
```markdown
# 任务说明书
> **关联需求编号**: REQ-[模块]-[序号] <!-- 必填 -->
> **关联PRD**:
> **需求类型**: [ ] 新增 [ ] 变更 [ ] 废弃
```
---
## 十、约束管理措施
### 10.1 用户直接修改的约束
**问题场景**
```
用户 → 直接找技术 → 修改参数 → 代码变更
没有产品评审,没有文档记录
```
**约束流程**
```
用户直接反馈
技术接收 → 立即转产品确认(强制)
产品评估 → 判断[新增/变更/废弃]
├─ 变更 → 更新PRD + 变更记录
├─ 废弃 → 标记已废弃
└─ 拒绝 → 告知用户原因
技术执行 → 代码commit必须关联需求编号
上线审批 → 检查需求编号是否存在、文档是否更新
```
### 10.2 代码提交约束
```
# Commit message 格式
[REQ-会话-001] 添加暂停恢复功能
# 强制关联需求编号(必填)
```
### 10.3 上线审批检查项
| 检查项 | 说明 |
|--------|------|
| 需求编号关联 | commit message 必须包含 REQ-xxx |
| PRD 更新 | 对应的 PRD 文档是否已更新 |
| 变更记录 | 变更是否有变更记录 |
| 测试用例 | 是否有对应的测试用例 |
---
## 十一、AI/Skill 自动引导功能
### 11.1 Skill 可实现的功能
| 功能 | 实现方式 |
|------|---------|
| 自动生成需求编号 | 根据模块+序号自动生成下一个编号 |
| 编号校验 | 检查编号格式是否正确、是否已存在 |
| 关联检查 | 检查需求编号是否关联了必要文档(PRD+技术方案+测试用例) |
| 命名规范检查 | 正则匹配 `PRD-[模块]-[功能].md`,不符则警告 |
| 变更记录提醒 | 识别"变更"类型时,自动在文档末尾追加变更记录表格 |
| 引用检查 | 扫描被引用的文档是否标记为"已废弃" |
### 11.2 Skill 无法完全自动化的环节
| 环节 | 需要人工 |
|------|---------|
| 判断是新增还是变更 | 需理解业务上下文 |
| 确认废弃是否有风险 | 需人工评估 |
| 最终审批 | 需人工确认 |
### 11.3 自动引导流程
```
输入(需求/任务)
AI 检索历史文档库 ──→ 找到相关文档?
│ │
│ 否 ──→ 建议新增文档
│ │
▼ ▼
有相关文档 ──→ 一致性检查
│ │
│ 是 ──→ 建议变更文档(追加变更记录)
│ │
│ 否 ──→ 冲突警告(需人工确认)
生成/更新文档(强制填写需求编号)
技术执行 → commit message 关联需求编号
上线审批 → 自动检查文档完备性
```
---
## 十二、缺陷管理(BUG Tracking
### 12.1 缺陷管理流程
```
缺陷发现 → 评估优先级 → 创建缺陷单 → 修复 → 验证 → 关闭
回归测试用例
```
### 12.2 缺陷状态流转
| 状态 | 英文 | 说明 | 流转方向 |
|------|------|------|----------|
| 待处理 | Open | 缺陷已确认,待指派 | 新建 → 指派 |
| 进行中 | In Progress | 正在修复中 | 指派 → 修复中 |
| 已修复 | Fixed | 代码已修复,待验证 | 修复中 → 验证 |
| 已验证 | Verified | 验证通过,缺陷关闭 | 验证 → 关闭 |
| 已关闭 | Closed | 缺陷修复并验证完成 | - |
| 延期 | Deferred | 暂不处理,推迟 | 指派 → 延期 |
| 无法复现 | Can't Reproduce | 无法复现,关闭 | 指派 → 无法复现 |
### 12.3 缺陷优先级定义
| 优先级 | 级别 | 说明 | SLA(响应时限) |
|--------|------|------|-----------------|
| P0-Critical | 致命 | 系统崩溃、数据丢失、业务中断 | 4小时内响应 |
| P1-High | 高 | 核心功能不可用、严重影响业务 | 24小时内响应 |
| P2-Medium | 中 | 功能异常但有绕过方案 | 3天内响应 |
| P3-Low | 低 | 轻微问题、UI样式、体验优化 | 下一迭代安排 |
### 12.4 缺陷编号规则
```
BUG-[模块]-[序号]
模块:
- AIAI服务/意图识别/路由)
- 会话(会话管理)
- 坐席(坐席工作台)
- 用户(用户端H5
- 审批(审批与待办)
- 知识(知识库)
- 集成(第三方集成)
- 运维(部署/运维问题)
序号:3位数字,自动递增
```
**示例**
- `BUG-AI-001` - AI模块第1个缺陷
- `BUG-会话-003` - 会话模块第3个缺陷
### 12.5 缺陷单模板
```markdown
# 缺陷单:缺陷简要描述
> **缺陷编号**: BUG-[模块]-[序号]
> **状态**: [待处理/进行中/已修复/已验证/已关闭/延期/无法复现]
> **优先级**: [P0-Critical/P1-High/P2-Medium/P3-Low]
> **发现日期**: YYYY-MM-DD
> **发现人**:
> **指派人**:
> **修复人**:
> **关闭日期**:
## 基本信息
| 字段 | 内容 |
|------|------|
| 缺陷标题 | |
| 影响范围 | |
| 触发条件 | |
| 预期行为 | |
| 实际行为 | |
## 复现步骤
1.
2.
3.
## 根因分析
## 修复方案
## 验证结果
| 验证项 | 结果 | 验证人 | 验证日期 |
|--------|------|--------|----------|
| 功能验证 | 通过/失败 | | |
| 回归测试 | 通过/失败 | | |
## 变更记录
| 日期 | 变更内容 | 变更人 |
|------|----------|--------|
| | | |
## 关联信息
- **关联需求**: REQ-[模块]-[序号](若有)
- **关联代码文件**:
- **关联测试用例**: TC-[模块]-[缺陷编号]
```
### 12.6 缺陷跟踪表(轻量级管理)
缺陷管理采用**双视图分离架构**:跟踪表(横向汇总)在 `07-项目管理/`BUG 单(纵向闭环)在 `03-测试文档/05-缺陷单/`
```markdown
# 缺陷跟踪表
| 缺陷编号 | 标题 | 状态 | 优先级 | 发现日期 | 修复人 | 预计完成 | 实际关闭 |
|----------|------|------|--------|----------|--------|----------|----------|
| BUG-AI-001 | 打印机安装路由错误 | 已验证 | P2 | 2026-07-20 | Simon | 2026-07-20 | 2026-07-20 | [03-测试文档/05-缺陷单/BUG-AI-001.md](../03-测试文档/05-缺陷单/BUG-AI-打印机安装路由错误-001.md) |
```
> **双视图协作**
> - `缺陷跟踪表.md`:横向视角(多缺陷状态汇总)
> - `BUG-{模块}-{描述}-{序号}.md`:纵向视角(单缺陷全生命周期)
>
> **禁止**
> - ❌ 把 BUG 单放进 `07-项目管理/`(违反 § 2.2 类别边界规则)
> - ❌ 把缺陷跟踪表放进 `05-缺陷单/`(跟踪表属于项目管理工具)
### 12.7 缺陷管理与代码提交
```
# Commit message 格式
[BUG-AI-001] 修复打印机安装路由到前台的问题
# 强制关联缺陷编号(必填)
```
### 12.8 缺陷管理检查清单
| 步骤 | 操作 | 说明 |
|------|------|------|
| 1 | 创建缺陷单 | 填写基本信息、复现步骤 |
| 2 | 评估优先级 | 根据影响范围确定 P0-P3 |
| 3 | 指派修复人 | 明确责任人 |
| 4 | 代码修复 | commit message 关联 BUG 编号 |
| 5 | 创建回归用例 | 确保修复不引入新问题 |
| 6 | 验证修复 | 功能验证 + 回归测试 |
| 7 | 更新缺陷单 | 填写验证结果,关闭缺陷 |
---
## 十三、文档整理实践指南(基于2026-07-19经验)
### 13.1 整理检查清单
| 步骤 | 操作 | 说明 |
|------|------|------|
| 1 | 扫描目录结构 | 使用 `Get-ChildItem -Recurse` 列出所有文件 |
| 2 | 检查命名规范性 | PRD/技术方案是否包含 REQ 编号 |
| 3 | 检查头部模板 | 是否包含必填字段(版本、日期、状态、作者) |
| 4 | 检查关联 | 技术方案是否关联 PRD,PRD 是否关联原型 |
| 5 | 更新引用路径 | 文档移动后必须更新所有引用 |
| 6 | 检查归档标记 | 历史文档使用 `-archived-日期` 后缀 |
### 13.2 常见问题与修复
| 问题 | 修复方法 |
|------|----------|
| REQ 编号格式错误(如 `REQ-02-001` | 修正为 `REQ-[模块]-[序号]`(如 `REQ-会话-001` |
| 引用路径过时(如 `docs/02-产品需求/` | 更新为 `01-产品文档/子系统/` |
| 技术方案缺少 REQ 编号 | 在头部添加 `> **REQ编号**: REQ-[模块]-[序号]` |
| 文档放错目录 | 按 2.2 类别边界规则移动到正确目录 |
| 子目录编号不统一 | 统一使用 `01-``02-`、... 前缀 |
| BUG 单放错目录(如 `07-项目管理/BUG-*.md` | 按 § 12.6.3 迁移至 `03-测试文档/05-缺陷单/` |
| BUG 单命名格式错误(如缺序号) | 重命名为 `BUG-{模块}-{描述}-{序号}.md`(符合 `^BUG-.*-\d+\.md$`|
### 13.2.1 构建产物验证三证据链(基于 2026-07-28 经验)
> **适用场景**:管理后台等需要企业微信扫码登录的端,agent-browser 无法自动 E2E 时,如何证明前端改造正确?
| 证据 | 验证方式 | 命令 |
|------|---------|------|
| **编译层** | `npm run build` 通过,无 TS 报错 | `npm run build 2>&1 \| tail -10` |
| **产物层** | chunk 含新功能字符串字面量(保留特征) | `grep -E "新功能\|字符串" dist/assets/{Chunk-*.js}` |
| **部署层** | 服务器 HTTP 200 + 关键 API 200 | `curl -I http://{server}/itadmin/ && curl http://{server}:8000/admin/{endpoint}` |
**禁止**:用源码变量名验证产物(minify 后变量名消失)。改用:
- 属性名(`.in_progress` / `.session_id`
- CSS class`.mode-card` / `.monitor-widget`
- Route name(字符串保留)
- 字符串字面量(`手动接单` / `agents-assignment`
### 13.3 引用路径更新原则
1. **同步更新**:文档移动或重命名后,必须更新所有引用该文档的地方
2. **使用相对路径**`01-产品文档/02-会话管理/PRD-REQ-会话-001-暂停恢复-v1.1.md`
3. **避免死链接**:更新后验证目标文档是否存在
### 13.4 部署配置同步铁律(基于2026-07-23经验)
> 修改 `config.py` 默认值 ≠ 配置生效,必须同步更新服务器 `.env` 文件。
| 场景 | 操作 |
|------|------|
| 修改 config.py 默认值 | 同步更新服务器 `.env` 文件(或确保 docker-compose.yml 有正确的默认值兜底 `${VAR:-默认值}` |
| 新增环境变量 | 同时更新 `.env` 文件、docker-compose.yml、config.py 三处 |
| 部署/重启前 | 核对 `.env` 与 config.py 的差异 |
**违反后果**:配置不生效,导致运行时使用旧值/默认值,引发难以排查的运行时异常(如本次 Dify 超时导致 [object Object] bug)。
### 13.5 归档文件处理
- **归档命名约定**`.archive` 后缀(详见 §13.5.1
- **归档目录**:默认留在原目录(命名加 `.archive` 即可);仅当完全无活跃引用 + 跨多个子系统时,移至 `08-历史归档/{原类别}/`
- **归档条件**:无活跃引用(不被其他文档引用)
- **归档前确认**:仍有引用 → 提升回主文档(不归档);无引用 → 归档
#### 13.5.1 归档命名约定(全员一致性铁律)
> **核心原则**:**同一条演进线上所有旧版本必须全员打 `.archive` 后缀,不留半归档半未归档。**
**命名格式表**
| 文档类型 | 归档命名格式 | 示例 |
|---------|-------------|------|
| PRD / 技术方案 | `原文件名.archive.md` | `PRD-REQ-会话-001-工具栏统一设计-v1.3.archive.md` |
| 原型 HTML | `原文件名.archive.html` | `原型-REQ-会话-001-工具栏统一设计v1.4-xxx.archive.html` |
| 任务说明书 | `原文件名.v{X}.archive.md`(保留版本号) | `任务说明书-REQ-集成-002-xxx.v1.0.archive.md` |
| Vue 组件 | `原文件名.archive.vue` | `AssignmentMode.archive.vue` |
**触发场景(任一命中即应归档)**
| 场景 | 说明 |
|------|------|
| **被新版本接替** | 同一需求编号的 vN → vN+1,前序版本归档 |
| **被合并/收编** | 多源 → 单一源,被合并方归档 |
| **文档状态变更** | 文档状态变为 `[已废弃]`(§8.4 |
**全员一致性原则**
- 同一条演进线:**第一个版本加 `.archive` 之后,所有同级版本必须全员加 `.archive`**
- 自查:`ls *.html` 第一眼必须能区分"当前生产"和"历史归档"
- 反例:v1.9 加了 `.archive` 但 v1.4~v1.8 仍无 `.archive` → 目录里"半归档半未归档",结构混乱(2026-08-09 工具栏原型原状)
**`.archive` vs `.archive-日期` 取舍**
- **推荐**`.archive`(无日期)—— 文件位置 + REQ 编号本身就是时间戳
- 仅当需要明确"精确归档日期"时附加 `-YYYYMMDD`(如 `xxx.archive-20260809.md`
- §2.5 / §13.5 旧版提到的 `-archived-日期` 格式已**不再推荐**,统一为 `.archive`v1.14 清理)
**禁止**
- ❌ 把归档文件直接删除(保留作为历史快照)
- ❌ 在活文档里混用半归档(部分打 `.archive` 部分不打)
- ❌ 用 `-old` / `-deprecated` / `_bak` 等其他后缀命名归档(统一用 `.archive`
#### 13.5.2 引用指向规则
> **核心原则**:活文档的引用应指向当前生产版本;归档文件仅作历史参考。
| 引用场景 | 指向规则 |
|---------|---------|
| 任务说明书 / 交付清单的"基线" | 指向当前生产版本(不带 `.archive`|
| PRD / 技术方案引用 | 指向当前生产版本 |
| 运维 SOP / 故障排查 | 指向当前生产版本 |
| 历史对照 / 复盘 | 可引用 `.archive` 文件(说明对比意向)|
**反例**2026-08-09 群聊入口接线任务说明书教训):
- 任务说明书"5 按钮基线"指向 `v1.9-员工端落地版.archive.html` → 误导实施者锁错版本
- 修正:扫描 grep,识别所有指向 `.archive` 的活文档引用,**必须更新到当前生产版本**
#### 13.5.3 归档文件目录位置
- **首选**:留在原目录(不移动),命名加 `.archive` 后缀即可
- 仅当满足以下全部条件时才能移到 `08-历史归档/`
- 完全没有活跃引用
- 跨多个子系统的历史归档
- 明确标 `08-历史归档/{原类别}/原文件名`
**禁止**
- ❌ 把被引用的归档文件移动到 `08-历史归档/`(违反"归档 = 历史留痕"的可达性)
- ❌ 修改归档文件内容(保持历史不变性)
#### 13.5.4 归档操作 SOP(基于 2026-08-09 工具栏原型归档经验)
| # | 步骤 | 操作 |
|---|------|------|
| 1 | 识别归档范围 | 列出该 REQ 编号下所有版本文件,按时间/版本号排序 |
| 2 | 区分当前生产 vs 旧版本 | 当前生产保留原名,其余加 `.archive` |
| 3 | 批量重命名 | `Bash``mv` 或 PowerShell 的 `Rename-Item` |
| 4 | 跨文档树扫描引用 | `grep -rn 原文件名 docs/ src/` |
| 5 | 同步更新活文档引用 | 将指向 `.archive` 的引用更新到当前生产 |
| 6 | 跳过归档区 | `archives/` / `08-历史归档/` 目录内的引用**不动**(历史不变性) |
| 7 | 验证 | `ls` 目录确认当前生产 vs 归档分离清晰 |
### 13.6 Dify DSL 备份与变更管理规范
> **基于 2026-07-24 实践总结**
#### 13.6.1 Dify 应用维护流程
```
备份当前DSL → 本地修改 → 导入Dify控制台 → 点击发布 → 重启后端 → 验证
```
#### 13.6.2 备份规范
| 项目 | 规则 |
|------|------|
| 备份位置 | `docs/02-技术文档/实现配置/dify_dsl/` |
| 命名格式 | `{应用标识}_{YYYY-M-D_HHMMSS}.yml` |
| 操作类型后缀 | `_BACKUP`(常规备份)、`_v版本号`(特定版本) |
| 变更日志 | `docs/02-技术文档/实现配置/dify变更日志.md` |
#### 13.6.3 变更日志格式
```markdown
## 2026-07-24
- 应用:智能IT支持-员工咨询
- 操作:导出DSL备份 / 修改Prompt / 导入发布
- 文件:itdesk_main_2026-7-24_102740.yml
- 备注:变更内容简要说明
```
#### 13.6.4 关联技能
- **dify-deploy**Dify 应用维护工具集 skill,支持备份、导入、发布、重启、验证全流程
#### 13.6.5 关键注意事项
| 场景 | 注意事项 |
|------|----------|
| 修改前 | 必须先从 Dify 控制台导出当前 DSL 备份 |
| 导入后 | 必须点击「发布」按钮,否则更改不生效 |
| 发布后 | 必须重启后端容器(`docker compose restart backend` |
| 验证 | 手动发送测试消息,确认 AI 回复符合预期 |
### 13.7 多路径代码同步铁律(基于 2026-07-27 经验)
> **场景**:项目同时存在于中文路径与 ASCII 路径两处
| 路径 | 用途 |
|------|------|
| `D:\资料\03-项目开发\wecom_it_smart_desk\src\` | 工作目录(中文) |
| `D:\dev\wecom\src\` | ASCII 构建路径(`pnpm install` 不卡死) |
**铁律**
- **修改源代码时必须两边都改**(中文路径 + ASCII 路径)
- **build 用 ASCII 路径**(中文路径下 `pnpm install` 卡死,建 junction 也无效)
- **验证方法**build 后查 `dist/assets/*.css``*.js` 的 hash 变化(hash 变 = 源码改了)
- **优化方向**:未来考虑用 `mklink /J` 建符号链接(待评估)
**违反后果**build 用的是 ASCII 路径下的旧代码,部署后无效果。
### 13.8 前端小 UI 改造的 7 件套文档清单(基于 2026-07-28 经验)
> **适用**Tab 收编 / Tab 拆分 / 页面合并 / 单组件重构等小 UI 改造。
按规范 §4.3"功能调整" + §5.1 引用关系,小 UI 改造也必须配套 7 件套:
| # | 文档 | 路径 | 必要度 |
|---|------|------|--------|
| 1 | PRD(版本号升级 + 变更记录) | `01-产品文档/{子系统}/` | 必须 |
| 2 | 原型图(同步改造) | `01-产品文档/{子系统}/` | 必须 |
| 3 | 技术方案 | `02-技术文档/` | 必须 |
| 4 | 测试用例(覆盖 + 回归) | `03-测试文档/03-功能测试用例/` | 必须 |
| 5 | 任务说明书 | `07-项目管理/任务说明书/` | 必须 |
| 6 | 版本迭代总览 | `00-版本迭代总览.md` | 必须 |
| 7 | 部署运维补充(含回滚预案) | `04-运维文档/部署运维/` | 必须 |
详细流程见 § 十五"前端模块收编/拆分流程"。
---
## 十四、大需求重构的文档化策略
> **基于 2026-07-28 管理后台 IA 重构三件套补齐经验总结**
> P0 三 bug + P1 单一真源 + P1-b Dashboard widget + P2-a/P2-c 两路由补全 + v1.2 分配模式 Tab 收编,跨越 5 次部署迭代,6 阶段全部闭环)
### 14.1 大需求识别标准
满足以下任一条件,应视为**大需求**,需要专门的文档化策略:
| 判定条件 | 说明 |
|---|---|
| 跨越多个阶段(P0+P1+P2 等) | 每个阶段独立部署 |
| 跨越多次部署迭代 | 每次迭代可能持续数小时到数天 |
| 影响多个端(前端+后端+运维) | 跨端改动需协调 |
| 涉及单一真源改造(IA 重构、配置化重构) | 触动现有架构约定 |
| 涉及多个子系统(菜单+路由+组件+API) | 跨子系统改动 |
### 14.2 铁律 1:第 1 个阶段就建任务说明书
> **不要等所有阶段上线后回溯补全任务说明书。**
**原因**
- 跨多阶段的需求,踩坑经验/技术决策/版本号一致性容易遗漏
- 后续阶段实施时缺乏统一输入文档
- 验收追溯不完整
**正确做法**
- 在第 1 个阶段(哪怕只是 P0 bug 修复)就建任务说明书
- 任务说明书覆盖全部 WBS 阶段(已知 + 计划)
- 每个阶段上线后,任务说明书追加状态更新
- 任务说明书 v1.0 → v1.1(最终闭环)→ v1.2(追加最后阶段)
### 14.3 铁律 2:文件名版本号 = 文档内容版本号
> **PRD 文件名必须跟实际版本号一致,否则引用混乱。**
**问题示例**
- 文档内容已是 v1.2,但文件名仍是 `PRD-xxx-v1.0.md`
- 引用方写 `PRD-xxx-v1.0.md`,实际内容已是 v1.2,造成误导
- 重命名时若不改引用,会出现"指向 v1.0 但内容是 v1.2"的诡异情况
**正确做法**
- 文件名版本号必须 = 文档头部的 `> **版本**: vX.Y` 字段
- 重命名文件时同步更新所有引用(grep 全文搜索)
- 例:`PRD-REQ-集成-002-管理后台-v1.0.md``PRD-REQ-集成-002-管理后台-v1.2.md`
### 14.4 铁律 3:三件套版本对齐
> **PRD + 技术方案 + 任务说明书的版本号必须保持一致。**
**理由**
- PRD v1.2 描述 v1.2 变更,技术方案应该是 v1.2,任务说明书也应该是 v1.2
- 不一致会导致引用方无法判断"哪个版本是当前权威"
**操作**
- 三个文档使用同一版本号(按需求覆盖范围最高版本)
- 整改时同步更新三个文件的版本号 + 引用链
### 14.5 铁律 4:子任务合并/扩展的归档规范
> **被合并/扩展的旧任务说明书应改名为 `.v{X}.archive.md` 保留作为历史参考。**
**理由**
- 保留完整的旧任务历史,便于后续追溯
- 文件名后缀明确区分"在维护"和"已归档"
- 避免误以为还在维护导致重复编辑
**操作示例**
```
原文件名:任务说明书-REQ-集成-002-分配模式Tab收编.md
归档后: 任务说明书-REQ-集成-002-分配模式Tab收编.v1.0.archive.md
新建: 任务说明书-REQ-集成-002-IA重构整体.md(覆盖整体 6 阶段)
```
### 14.6 铁律 5:整改记录建立独立索引文件
> **文档规范化整改应该建立独立的索引文件(`04-运维文档/部署运维/00-文档规范化整改记录.md`),记录每次整改。**
**格式**
```markdown
### 整改 #N · 触发需求 / 整改对象
| 项目 | 值 |
|------|------|
| 日期 | YYYY-MM-DD |
| 触发人 | |
| 源需求 / 源文档 | |
| 整改维度 | A 命名/位置 + B 关联引用 + C 命令铁律 + D 完整度 |
| 问题数 | |
| 关键修复 | (逐项描述) |
| 归档动作 | (被替换的旧文档处理方式) |
| 引用同步 | (哪些文件的引用路径需更新) |
| ASCII 副本同步 | (中文路径 ↔ ASCII 副本) |
| 收益 | |
| 教训 | |
| 上线状态 | ✅ 已完成 / 🟡 待部署 / ... |
```
**已知整改索引**`00-文档规范化整改记录.md`):
- 整改 #1-#6:覆盖部署文档 / BUG 单规范化 / BUG 单目录迁移 / 页面去重 / BUG-通用-002 / IA 重构三件套补齐
- 详见 `04-运维文档/部署运维/00-文档规范化整改记录.md`
### 14.7 单一真源 menu.config.ts 模式(IA 重构关键技术决策)
适用于"菜单/路由/权限分散在多个文件"的情况:
```
menu.config.ts(单一真源)
├─ groups[] // 5 个分组(顺序、图标、颜色)
├─ items[] // 业务菜单
├─ subTabs[] // 父子页签
├─ lockedItems[] // 折叠区占位
└─ rolesFilter // 角色过滤字段
↓ 派生
Sidebar.vue // v-for 渲染,零硬编码
router/index.ts // meta.menuKey 反查
```
**收益**:新增菜单仅改 1 文件,自动出现在 Sidebar + router + 角色过滤三处。
### 14.8 6 阶段标准工作分解(WBS 模板)
| 阶段 | 内容 | 优先级 | 估时参考 |
|------|------|--------|---------|
| **P0** | 止血 bug 修复(路由/菜单/组件可点性等) | P0 | 20 min |
| **P1-a** | 单一真源配置(menu.config.ts / table.config.ts 等) | P1 | 1.5 h |
| **P1-b** | 业务功能补全(Dashboard widget / 详情页双视图) | P1 | 2 h |
| **P2-a** | 路由补全(顶级路由缺失) | P2 | 30 min |
| **P2-b** | 子路由补全(嵌套路由缺失) | P2 | 30 min |
| **v1.2** | UI 收编/合并(独立页 → Tab 收编) | P2 | 30 min |
**每个阶段独立部署、独立验证****避免一次大爆炸式变更**。
### 14.9 跨项目铁律沉淀(候选)
| 铁律 | 说明 |
|---|---|
| **大需求第 1 阶段就建任务说明书** | 不要等所有阶段上线后回溯补全 |
| **文件名版本号 = 内容版本号** | PRD 文件名必须跟实际版本号一致 |
| **三件套版本对齐** | PRD + 技术方案 + 任务说明书使用同一版本号 |
| **子任务合并归档** | 旧任务说明书改名为 `.v{X}.archive.md` |
| **整改记录建索引文件** | `00-文档规范化整改记录.md` 记录每次整改 |
| **单一真源派生模式** | menu.config.ts 派生 Sidebar + router,避免多源维护脱节 |
| **6 阶段分批部署** | P0 → P1 → P1-b → P2-a → P2-b → v1.2,每次独立部署独立验证 |
---
## 十五、前端模块收编/拆分流程(基于 2026-07-28 分配模式 Tab 收编经验)
> **适用范围**:前端模块的"独立页 → Tab 内嵌"或反之"Tab 内嵌 → 独立页"调整。这是一类**小 UI 改造**(不影响后端 API / 数据库),但涉及多文件联动 + 文档联动。
### 15.1 场景识别
| 场景 | 触发条件 | 典型例子 |
|------|---------|---------|
| **页面收编** | 一个独立页(如 `/admin/assignment-mode`)内容极薄(>50% 灰化占位),且与另一个页面(`/admin/agents`)有强上下文关联 | 分配模式 → 坐席管理 Tab |
| **页面拆分** | Tab 内嵌内容膨胀(>3 个 Tab 或 Tab 内有复杂配置),需要拆回独立页 | 阶段二/三分配策略可能膨胀 |
| **页面合并** | 两个独立页面功能高度重叠,可合并为一个带 Tab 的页面 | 快速回复模板 → 快速回复规则 Tab |
### 15.2 决策矩阵:独立页 vs Tab 内嵌 vs 合并
| 评估维度 | 独立页 | Tab 内嵌 | 合并 |
|---------|--------|----------|------|
| **页面复杂度** | 内容丰富、独立性强 | 内容薄、强依赖其他页面数据 | 两页内容都属于同一业务域 |
| **未来扩展性** | 长期独立演进 | 短期共存,未来可拆可合 | 长期共存 |
| **上下文关联** | 与其他页面弱关联 | 强关联(如解锁条件依赖数据) | 强关联 |
| **菜单负担** | 占独立菜单项(可接受) | 节省菜单项 | 节省菜单项 |
| **回滚难度** | 拆 → Tab:需重做 UI;合 → Tab:低 | 独立 → Tab:低;Tab → 独立:中 | 独立 → 合:中;合 → 独立:高 |
**推荐原则**
- 内容薄 + 强依赖 → **Tab 内嵌**(本次方案)
- 内容薄 + 弱依赖 → **保持独立页**
- 内容丰富 + 强依赖 → **保持独立页**Tab 切换不会降低复杂度)
- 两个页面均属同一业务域 → **合并**(但需谨慎评估回滚难度)
### 15.3 实施步骤(11 步标准流程)
> 基于 2026-07-28 分配模式 Tab 收编 80 min 实战提炼。
| # | 步骤 | 预计耗时 | 输出物 |
|---|------|----------|--------|
| 1 | 读源文件 + 画迁移映射(哪些行迁移、哪些保留) | 5 min | 迁移映射清单 |
| 2 | 目标页(Agents.vue)加 `<el-tabs>` 套层,原内容迁入 Tab 1 | 15 min | 目标页模板改造 |
| 3 | Tab 2 复制源页(AssignmentMode.vue)的模板 + 脚本(含 reactive、computed、API 调用) | 15 min | 第二个 Tab 内容 |
| 4 | 路由表删除源页路由项(`/admin/assignment-mode` | 2 min | router/index.ts |
| 5 | 源页文件保留 + 顶部加停用注释(含 30 min 回滚步骤) | 2 min | AssignmentMode.vue 顶部注释 |
| 6 | **多路径同步铁律**(中文路径 + ASCII 路径双改) | — | 见 § 13.7 |
| 7 | `npm run build` 验证(无 TS 报错、无 lint 警告) | 5 min | dist 目录 |
| 8 | **构建产物验证三证据链**(见 § 13.2 补充) | 5 min | 见 § 13.2 |
| 9 | 部署到生产(`v2_ops.py upload` + 服务器解压 + `docker restart wecom_it_nginx` | 15 min | 生产 dist |
| 10 | (可选)agent-browser 端到端验证 | 10 min | E2E 报告 |
| 11 | API 兼容性 curl 验证(关键 API 200 OK | 2 min | API 验证报告 |
### 15.4 完整文档清单(按规范 §4.3 "功能调整" + §5.1 引用关系)
| # | 文档 | 路径 | 规范要求 |
|---|------|------|----------|
| 1 | **PRD** | `docs/01-产品文档/{子系统}/PRD-REQ-集成-002-xxx-v1.X.md` | §4.3"功能调整"+版本号+变更记录 |
| 2 | **原型图** | `docs/01-产品文档/{子系统}/原型-REQ-xxx-v1.X.html` | §4.3"原型图(视情况)" |
| 3 | **技术方案** | `docs/02-技术文档/技术方案-REQ-xxx-xxx.md` | §4.3 |
| 4 | **测试用例** | `docs/03-测试文档/03-功能测试用例/TC-xxx-xxx.md` | §4.3"功能调整"+回归 |
| 5 | **任务说明书** | `docs/07-项目管理/任务说明书/任务说明书-REQ-xxx-xxx.md` | §3.1.3 |
| 6 | **版本迭代总览** | `docs/00-版本迭代总览.md`(追加一行 + 经验总结) | §5.1 引用关系 |
| 7 | **部署运维补充** | `docs/04-运维文档/部署运维/DEPLOY-xxx-xxx.md` | §4.3"上线" + 含回滚预案 |
| 8 | **commit message** | `[REQ-集成-002] 分配模式 Tab 收编` | §10.2 强制 |
> **重要**:规范 § 4.3 "功能调整" 场景下,PRD、原型图、测试用例 **必须** 更新,技术方案与任务说明书 **建议** 配套(复杂改动必备)。
### 15.5 强约束(基于本次踩坑)
#### 15.5.1 多路径代码同步铁律
> **场景**:项目同时存在中文路径(`D:\资料\03-项目开发\wecom_it_smart_desk\`)与 ASCII 路径(`D:\dev\wecom\`),build 用 ASCII 路径。
| 操作 | 强制要求 |
|------|---------|
| 修改源代码 | **两边都改**(中文路径 + ASCII 路径) |
| 验证方法 | build 后查 `dist/assets/*.css` / `*.js` 的 hash 变化 |
| 优化方向 | 未来用 mklink 建符号链接(见 § 13.7 |
#### 15.5.2 构建产物验证三证据链
> **场景**:admin 后端需企业微信扫码登录,无法用 agent-browser 自动 E2E;如何证明改造正确?
| 证据 | 方式 | 命令示例 |
|------|------|---------|
| **编译层** | `npm run build` 通过 | `npm run build 2>&1 \| tail -10` |
| **产物层** | chunk 含新功能字符串字面量 | `grep -E "agents-assignment\|手动接单" dist/assets/Agents-*.js` |
| **部署层** | 服务器 HTTP 200 + 关键 API 200 | `curl -I http://10.90.5.110/itadmin/ && curl -I http://10.90.5.110:8000/admin/assignment-mode` |
**禁止**:用源码变量名验证产物(minify 后变量名消失)。
#### 15.5.3 源页文件保留 + 停用注释
> **目的**:未来回滚有迹可循(30 分钟可逆)。
源页(AssignmentMode.vue**不删除**,顶部加:
```vue
<!--
=============================================================================
[模块名] - v1.2 起停用仅供回滚
=============================================================================
说明本文件于 v1.2 起不再使用内容已迁移至 [目标页] [Tab ]
回滚步骤 docs/04-运维文档/部署运维/DEPLOY-xxx-xxx.md § 回滚预案
=============================================================================
-->
```
#### 15.5.4 路由删除 vs 保留
| 选项 | 适用场景 |
|------|----------|
| **删除路由项** | 收编后源页已无意义(本次方案) |
| **保留路由 + 重定向到目标页** | 旧链接仍可能访问(外部文档/聊天残留) |
**推荐**:删除路由项(强制走新结构),但在变更日志中明确告知"旧路径已废"。
### 15.6 回滚预案必备要素
任何收编/拆分/合并 PR 必须包含 § DEPLOY 文档的"回滚预案"章节:
1. **恢复路由**(精确到行号或代码片段)
2. **恢复菜单项**(如涉及)
3. **把内容搬回源页**(列出搬移清单)
4. **恢复目标页单一结构**(列出删除的包装层)
5. **build + 部署命令**(与正向流程相同)
6. **归档文档**(旧 PRD / 任务说明书状态改 `[已废弃]`
**总耗时估算** ≤ 30 min(本次验证)。
### 15.7 跨项目铁律沉淀
| 铁律 | 说明 |
|------|------|
| **Tab 收编 vs 轻合并 vs 保持现状** | 内容薄 + 强依赖 → Tab 收编;内容薄 + 弱依赖 → 保持独立;内容丰富 → 独立页 |
| **多路径同步** | 中文路径 + ASCII 路径必须双改 |
| **构建产物验证三证据链** | 编译 + 产物 grep + 部署 HTTP |
| **源页不删,加停用注释** | 30 min 可逆回滚 |
| **回滚预案必备** | DEPLOY 文档 § 四 |
| **完整文档清单** | PRD + 原型 + 技术方案 + TC + 任务说明书 + 版本总览 + DEPLOY(7 件套)|
---
## 十六、技术方案偏离时的"增量更新章节"治理
> **基于 2026-08-03 voice_asr.py P0 安全巡检 + 文档-代码不一致修复经验总结**
> (场景:技术方案 v1.0 设计 H5 = 企微 JS-SDK / 坐席端 = Web Speech API 双路径,实际部署中 H5 PC/Mac 端企微用户改用"前端录音 + 后端 `POST /api/voice/asr`(百度 ASR"作为第三条兜底分支,v1.0 漏写)
### 16.1 场景识别:什么时候触发"增量更新章节"
技术方案(v1.0)发布后,实际部署出现以下任一偏离时,**必须**走"增量更新章节"流程(**禁止**直接覆盖原版本内容):
| 场景 | 说明 | 典型例子 |
|------|------|----------|
| **第三方 SDK/WebView 行为限制** | 企微 PC/Mac 客户端内置浏览器对 Web Speech API 不支持、JS-SDK 在桌面端挂起 | 语音输入 PC/Mac 兜底 |
| **性能/配额约束** | 实际跑出性能瓶颈导致必须改用其他方案 | 切换 ASR 供应商、换文件上传通道 |
| **跨端一致性需求** | 原本独立的方案在跨端测试中发现必须统一 | 路由前缀 `/api/v1/` 统一化 |
| **安全合规补丁** | 加 auth、加审计、加加密 | voice_asr.py 加 `Depends(get_current_user)` |
| **环境适配分支** | 不同浏览器/客户端需要不同策略("多策略自动切换")| 语音输入双策略 |
### 16.2 增量更新章节模板(§10 节)
技术方案文档应在末尾预留 `## 10. 增量更新记录(vX.Y` 章节,使用以下模板:
```markdown
## 10. 增量更新记录(vX.Y
> **更新日期**: YYYY-MM-DD
> **触发事件**: (安全巡检 / 性能告警 / 用户反馈 / 跨端测试发现 ...)
### 10.1 背景:vX.0 与实际部署的偏离
(用对比表说明设计 vs 实际的差异,列出哪些分支遗漏)
### 10.2 为什么必须有"X 兜底"
(解释第三方 SDK/WebView/性能约束的客观限制,说明为什么必须走其他路径)
### 10.3 实际技术方案
(流程图 + 关键文件清单)
### 10.4 关联的代码/配置变更
(列出本次同步修改的源文件路径)
### 10.5 编号冲突说明(⚠️ 待治理)
(如果涉及 REQ 编号与 PRD 冲突,记录并提出治理建议,**禁止**当下擅自重命名编号避免范围蔓延)
### 10.6 文档-代码一致性核查清单
(用表格列出所有相关文档的核查状态,强制一次扫一遍)
### 10.7 测试矩阵
(覆盖新分支的所有场景,含安全/性能/兼容性)
```
### 16.3 多策略功能的文档化要求
> **核心原则**:技术方案文档必须列出**所有**生产环境会用到的技术路径,不止是"理想路径"。
对于"自动检测环境 + 多策略切换"的功能(如语音输入),技术方案必须:
| 必填项 | 说明 |
|---|---|
| **策略枚举表** | 列出所有可能环境(如:手机企微 / PC 企微 / Mac 企微 / 普通浏览器),每个环境的策略选型 |
| **策略优先级** | 明确优先级(如:企微 JS-SDK > 百度 ASR > 不显示按钮)|
| **降级条件** | 每个策略的禁用/降级触发条件 |
| **不显示按钮 vs 显示禁用态** | 必须二选一并说明理由(项目惯例:降级策略须"不支持隐藏按钮",见 §60)|
| **第三方 SDK/WebView 限制证据** | 注释中明确写明"哪些客户端不支持",避免后续重复排查 |
### 16.4 API 端点调用方分析强制检查项(基于 2026-08-03 voice_asr.py 教训)
> **⚠️ 强约束**:判定某个 API 端点为"孤儿接口"或评估"加 auth 影响范围"前,**必须**完成以下 5 个来源的 grep 验证,**任意一处命中即不能算孤儿**。
| # | grep 来源 | 命令模式 |
|---|----------|---------|
| 1 | **所有前端项目源码**(含 composable/store/api/utils| `Grep -l "<endpoint 字符串>" src/frontend-*/src/` |
| 2 | **前端 `apiClient` 全局拦截器**(决定加 auth 后的兼容性)| `Grep -l "interceptors\|Bearer" src/frontend-*/src/api/` |
| 3 | **后端其他模块的反向调用** | `Grep -l "<endpoint 字符串>" src/backend/app/` |
| 4 | **测试用例**(即使 AsyncMock 不走 HTTP 也算潜在生产调用意图)| `Grep -l "<endpoint 字符串>" src/backend/tests/` |
| 5 | **运维配置 + 文档注释**(环境变量清单、技术方案增量更新)| `Grep -l "<endpoint 字符串>" docs/04-运维文档/` |
**关键判断问句(每次必答)**
> "如果对这个端点加 auth,会破坏什么用户路径?"
**答不出 = 没查够,禁止下结论。**
**反例(2026-08-03 教训)**
- 仅 grep `/voice/asr` 字符串找不到全部调用方
- 必须顺藤摸瓜查到 `useWecomVoice` / `useAudioRecorder` / `useSpeechRecognition` 三个 composable
- 必须看 InputBar.vue 的 `voiceStrategy` computed(多策略自动切换)
- 必须看 `api/index.ts``interceptors.request`(自动注入 Bearer Token 决定加 auth 兼容性)
### 16.5 文档-代码一致性核查清单模板
> **触发场景**:任何技术方案发布 +90 天、出现 P0/P1 巡检发现、文档与代码不一致修复时,必须做一次一致性核查。
| 文档类型 | 核查内容 | 命中关键词举例 |
|---------|---------|--------------|
| 运营手册(如 `手册-坐席端.md`)| 端 × 技术方案矩阵是否真实 | 语音 / Web Speech / 百度 ASR / 企微 JS-SDK |
| 配置清单(如 `配置清单与环境变量.md`)| 每个环境变量是否有"调用方"说明 | `BAIDU_*` / `WECOM_*` / `DIFY_*` |
| 架构设计(如 `系统架构设计文档v2.md`)| 模块描述是否包含多策略分支 | "H5 端采用双策略 ..." |
| 业务影响评估(如 PRD)| 是否包含"第三方 SDK/WebView 限制"章节 | 企微 / Chrome / Edge / Firefox |
| 测试用例(如 `TC-xxx.md`)| 覆盖矩阵是否包含所有策略分支 | 移动端 / PC 端 / 普通浏览器 |
**输出物**:在技术方案的 `§10.6 文档-代码一致性核查清单` 中以表格形式列出,每行带 ✅/⚠️/❌ 状态。
### 16.6 跨项目铁律沉淀(候选 → ~/.workbuddy/MEMORY.md
| 铁律 | 说明 |
|---|---|
| **增量更新章节模板** | 技术方案偏离时用 `## 10. 增量更新记录(vX.Y` 治理,禁止覆盖原版本 |
| **多策略功能必须列全** | 策略枚举表 + 优先级 + 降级条件 + SDK 限制证据 |
| **API 调用方 5 来源 grep** | 端点安全审计/影响评估前必须多源验证 |
| **"加 auth 会破坏什么"必答题** | 答不出 = 没查够 |
| **文档-代码一致性核查清单** | 技术方案 §10.6 + 每次 P0/P1 巡检必做 |
---
*文档结束*