Files
group_fqcd_jr/开发文档/D1.3-文档规整方案与开发前待决事项-2026-09-17.md
张胜宇 bc61d5c579 docs: 入库权威文档目录(客服agent/ 24 份 + 开发文档/ 50 份,替换旧命名的过期副本)
## 为什么做这一步

权威文档 74 份此前**只在本机**,评审者 clone 分支后看不到任何设计文档;而仓库里那两份同名目录
是 **2026-09-16 之前的过期副本,连文件名都是旧的**(无体系编号)。本次按「**权威覆盖过期**」入库。

## 入库内容

| 目录 | 文件数 | 体积 | 说明 |
|---|---|---|---|
| `客服agent/` | 24 | 0.77 MB | `D2.1`~`D2.6` 对外交付四件套 + 演示脚本/答辩报告 + `_build` 构建工具 |
| `开发文档/` | 50 | 2.16 MB | `D1.x` 索引与决策、`D3.x` 方案、`D4.x` 清除与重构留痕、`D5.x` 业务流程、`D6.x` 业务事实基座、`D7.x` 交付物、`D8.x` 规范 |

**旧的过期副本整体移除**(`客服Agent执行Todolist.md` → `D2.1-客服Agent执行Todolist.md` 之类
的改名 + 新增 `D2.5`/`D2.6`),入库后目录内容与权威副本**逐文件一致(零差异,已复核)**。

## 入库前的安全扫描(必须留痕)

- 扫描规则:`sk-` 类密钥 / `Bearer` 长串 / `password=`、`api_key=` 赋值 / 会话中出现过的两把明文 key 片段。
- 结论:**真实密钥只出现在 `.env`**(已被 `.gitignore` 命中,未入库);`.env.example` 与
  `config/risk.env.example` 只有**空占位**。
- 文档内唯一命中是 `D3.1` 里一处**截断的示例 JWT**(`Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...`),
  末尾带省略号,是接口文档的示意值,**不是可用凭据**。
2026-09-20 15:03:15 +08:00

478 lines
38 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
# 开发文档规整方案与开发前待决事项
> **体系编号**:`D1.3` · 域:一、治理与索引 · 编号体系见 `D1.1` §4.0
> **编号**:CS-DOC-2026-014 | **日期**:2026-09-17 | **性质**:**只读盘点 + 规整方案**(物理动作待你确认后执行)
> **盘点范围**:`开发文档\`(49 份)+ `客服agent\`(4 份)= **53 份**(不含 `ai\`、`_build\` 脚手架)
---
## 0. 一句话结论
53 份里**真正需要开工读的只有 5 份**;其余是「取证底稿 / 清除记录 / 过程文档 / 早期系统文档」四类。其中 **1 份整份作废、9 份使命已完成**。
另外核出 **4 个必须处理的问题**——其中最急的一条是:**四份交付文档的品牌标题至今仍是「XX科技」**。
---
## 1. 盘点结果
### 1.1 现行权威 —— 开工只读这 5 份
| # | 文档 | 规模 | 作用 |
|---|---|---|---|
| **A1** | `客服agent\D2.1-客服Agent执行Todolist.md` **v5.2** | 440 行 | 🔴 **唯一开工入口**。52 项 / 7 批次(A—G)/ 12 步关键路径 / 2 组会签 / 12 条完工判据 |
| **A2** | `客服agent\D2.2-客服Agent需求文档.html` **v2.4** | 1064 行 | 对外需求:FR-CS-001~048 + NFR-CS-001~021 全量、身份与鉴权模型、验收标准 |
| **A3** | `客服agent\D2.3-客服Agent开发计划.html` **v1.0** | 869 行 | 前置条件、测试环境就位(G-00)、会签流程、门禁、交付物 |
| **A4** | `客服agent\D2.4-客服Agent知识库设计方案.html` **v1.2** | 1615 行 | 三集合 / 三档可见性 / 8 模块 / 7 步入库 8 步检索 / 8 项决策 |
| **A5** | `开发文档\D3.3-访客与角色分离的鉴权方案建议-2026-09-16.md`(CS-AUTH-2026-011) | 322 行 | 鉴权专项:四方案对比、三条不变量、甲乙时序 |
> **已验证**:A1 与 `开发文档\D3.4-客服Agent重构Todolist.md` v5.1 的**任务编号完全一致**(52 个、7 批次),说明 v5.2 是 v5.1 的**收敛版而非分叉**;A2 与 v2.3 的 **FR 48 条 / NFR 21 条完全一致**。
### 1.2 取证底稿 —— 内部复核时查,不开工时读
| 文档 | 规模 | 为什么保留 |
|---|---|---|
| `开发文档\D3.1-客服Agent需求开发文档与设计方案.html` v2.3 | 4366 行 | A2 的**完整版**:逐条需求都带证据引用与推导过程 |
| `开发文档\D3.2-知识库设计方案.html` | 2374 行 | A4 的**完整版**:含被收敛掉的备选方案与否决理由 |
| `开发文档\D3.4-客服Agent重构Todolist.md` v5.1 | 606 行 | A1 的前身,含更细的 DoD 描述 |
| `开发文档\D4.1-客服Agent重构报告-2026-09-16.md`(CS-REFACTOR-2026-010) | 416 行 | **清除了什么、缺什么、按什么顺序装回去**的逐项取证;§9 已拍板记录 |
| `开发文档\D4.5-投顾模块清除执行报告-2026-09-17.md`(CS-PURGE-2026-013) | 171 行 | 投顾清除的验证数据 + 恢复方式 |
| `开发文档\D4.3-客服模块清除执行报告-2026-09-16.md`(CS-PURGE-2026-008) | 156 行 | 客服形态A清除的验证数据 |
### 1.3 知识源 —— 13 份(已于 2026-09-17 统一为「南方基金」)
| 目录 | 份数 | 内容 |
|---|---|---|
| `公司信息\` | 4 | `D6.1.1-南方基金-企业信息.md`、`D6.1.2-南方基金-高频问答对.md/.txt`(64 组,**档位 public 54 / registered 10**,判据见其 §四)、`D6.1.4-公司新人指南.md` |
| `公司业务\` | 6 | 个人理财产品手册、企业金融服务方案、高净值客户服务规范、用户测试数据 3 份 |
| `金融政策\` | 3 | 适当性管理指南、反洗钱手册、销售管理办法 |
| `用户研判规则\` | 4 | 风险画像规则、可疑交易识别、用户信息数据示例 ×2 |
### 1.4 过程文档 —— 使命已完成(9 份)
| 文档 | 状态 |
|---|---|
| `待决事项清单.md`(19 项) | ✅ 19 项全部已定 |
| `客服Agent模块重构方案与Todolist.md` v2.0 | ⛔ 被 v5.x 取代 |
| `客服Agent双角色方案决策对比.md` | ✅ 决策已定,结论已进 A2 |
| `五项决策建议与新增证据.md` | ✅ 5 项决策已并入报告 §9 |
| `项目信息补充表.md`(567 行) | ✅ 信息已并入需求文档 |
| `Todolist编写就绪度评估与补充清单.md` | ✅ 评估已完成 |
| `客服Agent清除与重构方案(底座层与业务层分层).md` | ⛔ 被 CS-REFACTOR-2026-010 取代 |
| `客服重建启动前落点复核与建议-2026-09-16.md`(CS-009) | ⛔ 被 CS-010 取代 |
| `客服模块清理执行记录-2026-09-16.md` | ✅ 执行记录,可并入 008 |
### 1.5 早期系统级文档 —— 状态待确认(6 份)
| 文档 | 日期 | 我的判断 |
|---|---|---|
| `D7.1-需求文档.html`(2499 行) | 07-17 | 项目**整体**需求("智能财富管家系统 — 项目开发需求文档"),非客服专项。**可能仍有效,但品牌是 XX科技、且可能含投顾内容** → 待你定 |
| `D7.2-功能设计文档.html`(1752 行) | 07-20 | 系统级 Agent 功能设计(含"2. 智能客服 Agent")。同上 |
| `D7.3-记忆架构设计.html`(1662 行) | 07-20 | 标题是「AI Agent 记忆架构设计指南」——像**通用教材**而非本项目文档 |
| `D7.4-开发引导.md`(328 行) | 07-17 | 开发实施引导,可能已被 A3 覆盖 |
| `D7.5-答辩须知.md`(14 行) | 06-26 | 答辩要求,**仍有效** |
| `CLAUDE.md`(177 行) | 06-05 | 项目语言规范,**仍有效** |
### 1.6 已归档 / 整份作废(2 份)
| 文档 | 处理 |
|---|---|
| `归档-访客鉴权与访客分层讨论-已清除-2026-09-16.md` | 已归档,保留 |
| 🔴 `客服与投顾模块重构前代码清理建议-2026-09-15.md` | **整份作废**:它是「死代码清理建议」,**投顾条目已因投顾整体清除而失效**;客服侧条目也已随形态A清除完成 |
---
## 2. 四个必须处理的问题
### 🔴 P-1(最急)四份交付文档的品牌标题仍是「XX科技」
| 位置 | 现状 |
|---|---|
| `<title>` | `XX科技·智能财富管家系统 — 智能客服 Agent 需求文档` 等 4 份**全部** |
| `<h1 id="...">` | `XX科技·智能财富管家系统智能客服 Agent …` |
| sidebar-brand / topbar | 同样继承自原文档 |
**成因**:我产出 `客服agent\` 四份时,从原文档**抽取版式外壳**(head/title/sidebar)再灌新正文——外壳里的品牌名一并带了过来。
**影响**:与你 09-17 定的「全部以南方基金为例」**口径冲突**;答辩时打开就是打脸。
**修法**:4 份各改 `<title>` + `<h1>` + 品牌位(约 12 处替换),零风险。
### ⚠️ P-2 两套文档并行,没有权威声明
`客服agent\`(4 份新版)与 `开发文档\`(v2.3 / v5.1 / 知识库完整版)内容**不完全相同**(收敛版 vs 完整版),但**没有任何一份文档说明谁为准、各自什么用途**。后来者(或三个月后的你)会不知道读哪份。
### ⚠️ P-3 文档交叉引用密集,**不能随便移动文件**
多份文档按 **完整路径 + 行号** 互引(如 `_cs_purge_backup/app/service/agent/implementations/customer_service.py:193-206`、`§2.5`、`docs/33 §1.2`)。贸然把文档挪进子目录,会让这些引用**批量失效**。⇒ **规整不能靠"搬文件",要靠"一份索引 + 状态标注"。**
### ⚠️ P-4 早期系统文档(6 份)状态不明
见 §1.5。它们用 XX科技 品牌、可能含投顾内容,但又是"项目整体"层面的文档——**删了怕缺、留着怕误导**。
---
## 3. 规整方案(推荐方案:零破坏)
### 方案甲 ✅ 推荐 —— 加索引、不动文件
**新建 `开发文档\D1.1-文档索引与权威声明.md`**,内容:
1. **权威链**(A1—A5)+ **更新顺序**(改需求 → 改 Todolist → 改计划 → 改知识库)
2. **每份文档的状态标注**(现行 / 底稿 / 已完成 / 已作废 / 待确认)
3. **"开工只读这 5 份"的粗体提示**
4. **引用约定**:文档内互引一律用「文档编号 + 章节」,不用文件路径
**另做 3 件小事**:
- 把 `客服与投顾模块重构前代码清理建议-2026-09-15.md` 移入 `开发文档\归档\`
- 把 `归档-访客鉴权与访客分层讨论-已清除-2026-09-16.md` 移入 `开发文档\归档\`
- 修 P-1 的品牌(4 份交付文档)
**收益**:零引用破坏;任何人打开 `00-文档索引` 就知道从哪读。**成本**:约 10 分钟。
### 方案乙 —— 物理分层(不推荐)
建 `现行\` `底稿\` `归档\` 三个子目录,把文档按类搬进去。
**问题**:§P-3 的交叉引用会批量失效;且你之前提交到远程的 `zsy_developcc` 分支里已有 `开发文档\` 的旧路径,两边会不一致。
### 方案丙 —— 合并同类项(不推荐)
把 9 份过程文档物理合并成 1 份「决策过程留档」。
**问题**:这些文档**都有编号**(CS-REFACTOR-2026-00X / CS-PURGE-2026-0XX),报告与需求文档里**按编号引用**它们。合并后编号无处安放,引用全断。
---
## 4. 开发前待决事项
### 4.1 🔴 只有你能定的(4 项)
| # | 事项 | 为什么必须你定 | 我的建议 | 不定的后果 |
|---|---|---|---|---|
| **D-1** | **四份交付文档品牌改成「南方基金」?** | 这是**对外口径**变更,且会改到你已提交的分支 | **改**。改成 `南方基金·智能服务系统 — 智能客服 Agent …`;同时决定系统名是否保留"智能财富管家系统" | 答辩打开就是 XX科技,与知识源(已统一南方基金)自相矛盾 |
| **D-2** | **早期 6 份系统文档怎么办?** | 只有你知道它们是否还有用 | `D7.5-答辩须知.md` + `CLAUDE.md` **保留**;`D7.1-需求文档.html` + `D7.2-功能设计文档.html` **保留但标为「系统级、品牌待同步」**;`D7.3-记忆架构设计.html` **移入归档**(像通用教材);`D7.4-开发引导.md` 标为「已被开发计划覆盖」 | 25 万字里混着过期口径,评审翻到会问 |
| **D-3** | **`admin` 角色的 15 条投顾域权限要不要一并清?** | 上一轮的遗留;超管角色,我不敢擅动 | **清**。投顾功能已全删,这些权限码在任何角色上都不会被调用;但为稳妥可先只读核查 `sys_role_permission` | 库里留着 15 条指向已删功能的权限,审计时是瑕疵 |
| **D-4** | **代码侧的品牌残留要不要一起改?** | 不在"四个知识源目录"里,但你昨天说的是"全部以南方基金为例" | **改**。至少三处:`B-01` 入库门禁的品牌白名单(`南方财富`+`南方基金`+`nanfangwm.com` → `南方基金`+`nffund.com`)、`promotion.js:29` 的 `南方基金管理有限公司`(少"股份")、`governance.py:47` 的热线常量 | 门禁会**误杀**新知识源(白名单里没有 `nffund.com` 就报占位符错误) |
### 4.2 已授权、只差发令(可立即执行,不需要你再决策)
| # | 事项 | 说明 |
|---|---|---|
| **E-1** | **G-00 测试环境就位** | 已拍板"装"。⚠️ 且我 09-17 实测发现**本机 MySQL 3306 + Redis 6379 都在跑、`jr_agent` 库可直连**(账号 `root`/`123456`)→ 环境比预想的好,可以开始 |
| **E-2** | **A-03 配置快照实测**(含 T-11 白名单核查) | 同样因为库可连,现在能升级为强证据 |
| **E-3** | **T-01 / T-02 / T-03 / T-10 连库实测** | Embedding 实际维度、三集合是否存在及 Schema、RAG 基础设施签名、`fin_knowledge_meta` 等表是否已建 |
| **E-4** | **`seed_test_rbac.py` 重跑** | 库里 `customer` 角色的 8 条投顾权限我已用等价 SQL 撤销,但脚本与库的**最终一致性**建议重跑确认 |
### 4.3 记录在案、不影响开工(3 项)
- `docs\` 约 30 处投顾残余引用 + `AGENTS.md:163` 引用已删发布脚本
- 本地 `origin/qyqy_develop` 陈旧(`8643ad1`,远程实际 `74b7d00`)——你本机跑一次 `git fetch origin` 即可
- `开发文档\` 已复制进 `group_fqcd_jr\开发文档\` 并推送(若只想让它待在 `zsy_developcc`,可删工作区副本)
---
## 5. 建议的执行顺序
```
① 你定 D-1~D-4(4 项,一次回一句话即可)
② 我执行方案甲(加索引 + 归档 2 份 + 修品牌) ← 约 10 分钟,零破坏
③ 我执行 D-4 的代码侧品牌改判(3 处) ← 与 ① 同批
④ 开始 G-00(测试环境就位)→ 批次 A ← 真正开工
```
> **③ 与 ④ 之间有依赖**:`B-01` 的品牌白名单若不同步改,重跑入库时新知识源会被门禁拦下(这是 D-4 必须先做的实际原因)。
---
## 6. 执行记录(2026-09-17 · 用户指令「把作废的文档都删除掉」)
### 6.1 已归档 **14 份**(**移动**方式,可随时恢复)
| 类别 | 份数 | 文档 |
|---|---|---|
| 整份作废 | 1 | `客服与投顾模块重构前代码清理建议-2026-09-15.md` |
| 过程文档(使命已完成) | 9 | `待决事项清单.md`、`客服Agent模块重构方案与Todolist.md`、`客服Agent双角色方案决策对比.md`、`五项决策建议与新增证据.md`、`项目信息补充表.md`、`Todolist编写就绪度评估与补充清单.md`、`客服Agent清除与重构方案(底座层与业务层分层).md`、`客服重建启动前落点复核与建议-2026-09-16.md`、`客服模块清理执行记录-2026-09-16.md` |
| 已归档件 | 1 | `归档-访客鉴权与访客分层讨论-已清除-2026-09-16.md` |
| 🔴 **旧版残留**(见 §6.2) | 3 | `公司信息\南方财富-企业信息.md`、`公司信息\南方财富-高频问答对.md`、`公司信息\南方财富-高频问答对.txt` |
**归档位置**:`D:\桌面\金融\_archived_docs_20260917\`(保持原文件名;仓库副本的同类文件在 `_repo_copy\` 下)。
### 6.2 🔴 顺带核出的新问题(**新增 P-5**)
**「重命名」在本沙箱里实际是「复制」而非「移动」** —— `公司信息\` 下曾**同时存在**:
- `南方财富-*` **3 份(旧版)**:内容全旧(域名 `nanfangwm.com`、热线 `400-826-9518`、`has_new=False`)
- `南方基金-*` **3 份(新版)**:已完整替换
⇒ 已清掉旧版 3 份。**教训:本沙箱下"移动/重命名"必须用「目标存在 + 源消失」双条件复核**,不能只看命令返回 0。
**另有 5 份文档正文仍含「南方财富」**(属**内容过期**,不是文件重复):`D3.4-客服Agent重构Todolist.md` v5.1、`D4.1-客服Agent重构报告-2026-09-16.md`、`D3.1-客服Agent需求开发文档与设计方案.html`、`D3.2-知识库设计方案.html`,以及本方案文档(后者属正常引用说明)。⇒ **建议并入 D-4 一起改**。
### 6.3 清理后规模
| 位置 | 清理前 | 清理后 |
|---|---|---|
| `开发文档\` | 53 个文件 | **40 个**(根目录 **17**;4 个知识源目录共 **17**;`ai\` 脚手架 6) |
| `group_fqcd_jr\开发文档\`(仓库副本) | 42 个文件 | **39 个**(同步清理,**未重新推送** — 远程 `zsy_developcc` 仍是 09-17 11:38 的快照) |
> **根目录剩余 17 份**(实测复核过):现行权威 4 份(`D3.4-客服Agent重构Todolist.md` v5.1 / `D3.1-客服Agent需求开发文档与设计方案.html` v2.3 / `D3.2-知识库设计方案.html` / `D3.3-访客与角色分离的鉴权方案建议-2026-09-16.md`)+ 支撑底稿 2 份(`D4.1-客服Agent重构报告-2026-09-16.md` / `D5.1-业务流程-MVP版-最终交付-2026-09-15.md`)+ 清除执行记录 4 份(客服影响面清单 / 客服执行报告 / 投顾范围清单 / 投顾执行报告)+ 早期系统文档 6 份(`CLAUDE.md` / `D7.5-答辩须知.md` / `D7.4-开发引导.md` / `D7.2-功能设计文档.html` / `D7.3-记忆架构设计.html` / `D7.1-需求文档.html`)+ 本方案文档 1 份。合计 17 份。**结构已可一眼看清。**
---
## 7. 执行记录(2026-09-17 · 第二轮:**结构整理**)
> **本轮指令**:「请按照你此前给出的建议进行改写,并在此基础上同步整理我的开发文档,确保整体结构清晰、分类合理、层级分明、命名统一、条理井然,便于后续查阅与维护。整理时请列出你做了哪些调整以及调整的理由。」
> **执行范围**:落实 §3 **方案甲**(加索引、不动文件)+ §2 **P-1** 复核 + 内容口径改写(另见 `CS-CONTENT-2026-016`)。
### 7.1 一句话结论
**新增 1 份索引(`D1.1-文档索引与权威声明.md`)+ 前置 1 条命名规则(`00-` 前缀);未移动、未改任何既有文件名。**
理由:本区文档按「完整路径 + 行号」互引且已推送远程,**搬文件 = 批量断链**(§2 P-3)。故「整理」落在**索引、分类、标注、规范**四处,而非物理分层。
### 7.2 结构层调整(4 项)
| # | 调整 | 具体动作 | 理由 | 影响范围 |
|---|---|---|---|---|
| **S-1** | **新建索引与权威声明** | 新增 `开发文档\D1.1-文档索引与权威声明.md`(CS-DOC-2026-017):开工只读集、权威链与更新顺序、8 类分类总览、46 个文件位全量清单、命名规范、状态口径、引用约定、待决事项 | 直接解 §2 **P-2**(两套文档并行无权威声明);用 `00-` 前缀使其在任意排序下**置顶** | 新增 1 份文件;不改动任何既有文件 |
| **S-2** | **明确「收敛版 vs 完整版」关系** | 在索引 §0/§4 显式声明:`客服agent\`(A1—A4)为**对外交付 + 唯一开工入口**,`开发文档\` 同名旧版为**取证底稿**;**冲突时以 `客服agent\` 为准** | 解 P-2 的另一半:此前只知"两份不完全相同",不知谁为准 | 仅文档声明,无文件变动 |
| **S-3** | **建立 8 类分类体系** | Ⅰ 对外交付 / Ⅱ 区内现行权威 / Ⅲ 内部复核底稿 / Ⅳ 清除执行记录 / Ⅴ 本次整改工作文档 / Ⅵ 公司事实与知识源 / Ⅶ 早期系统文档 / Ⅷ AI 协作脚手架 | 原盘点只有 7 类且把「现行权威」与「底稿」混列。**按"什么时候读"分类**比按"文件形态"分类更可用 | 索引 §3/§4 |
| **S-4** | **命名规范成文** | 索引 §5 写入 6 条文件名规则(R1—R6)、7 类文档编号格式、统一头部元数据块、5 档状态口径 | 原无任何成文命名规范,"命名统一"只能靠记忆;下一步新增文档才有共同格式 | 索引 §5;**既有文件不改名**(见 §7.3) |
### 7.3 命名偏差:**7 项全部判定「暂不改名」(零改名)**
| # | 偏差 | 决策 | 理由 |
|---|---|---|---|
| N-1 | 13 份带日期后缀、5 份不带 | 不改 | 均为已互引文件,改名即断链;「带日期 = 一次性成果 / 不带 = 长期文档」已是可读的隐含规则 |
| N-2 | `D6.4.3-用户信息数据示例.md` 与 `.txt` 同名并存 | 不改 | 设计如此:`.md` 人读画像、`.txt` 纯文本摘要,服务不同消费方 |
| N-3 | `D3.1-客服Agent需求开发文档与设计方案.html` 一名含两类文档 | 不改 | 已被 A2、CS-REFACTOR-2026-010 及多个 HTML 按名称引用 |
| N-4 | `ai\D8.3-01_READING_RULES.md` 等下划线大写风格 | 不改 | 脚手架文件,遵循 AI 工具约定,与交付文档本非同类 |
| N-5 | 早期编号 `JR-*` 与新 `NF-*` 并存 | 不改 | 重编号会改动 `理财产品销售管理办法` 等文件的自引编号;新文档统一用 `NF-*`,旧编号自然淘汰 |
| N-6 | 4 个知识源目录名粒度不完全对齐 | 不改 | 已与 `tools\build_knowledge_chunks.py` 扫描路径 + A4 知识库集合划分绑定,改名会**同时**打断文档与代码两侧引用 |
| N-7 | 无「索引置顶」规则 | **新增** | 建立唯一规则:仅索引用 `00-` 前缀 |
### 7.4 引用约定成文(2 项)
| # | 调整 | 理由 |
|---|---|---|
| **S-5** | 新文档互引**一律用「文档编号 + 章节」**,不用行号 | 行号随编辑必然漂移(本区已有 `重构报告:209` 这类行号引用因改版失效的先例) |
| **S-6** | 明确**旧值可出现的三类上下文**(修订说明 / 禁止清单 / 变更说明),且须紧邻新值 | 解决「全仓扫旧值 = 0」这条硬指标与「变更说明必须记录旧值」的**天然矛盾**——否则扫描永远无法归零 |
### 7.5 内容口径改写(本轮同批完成,详见 `CS-CONTENT-2026-016`)
| # | 文件 | 主要改动 | 理由 |
|---|---|---|---|
| 1 | `公司信息\D6.1.3-南方基金-高频问答对.txt` | 重写为 V2.0,与已更正的 `.md` **逐条对齐**(64 组);身份由「代销机构」→「公募基金管理人 + 官方直销」;AUM 2,200 亿 → 1.43 万亿;56 家网点 → 6 分公司 + 6 客户服务中心;杭州滨江 → 1998 深圳;基金大厦 26 层 → 32—42 楼;删保险经纪 / 证券投资咨询 / 私募登记等**无资格**的资质 | `.md` 已改,`.txt` 未改 ⇒ **同源两版数据打架**,而 `.txt` 正是知识库导入源,必须先修 |
| 2 | `用户研判规则\D6.4.3-用户信息数据示例.md` | 重写为 V2.0:客户持仓拆分为「本公司持仓」与「其他机构持有」;删「保本理财」(资管新规后已退市);补 C—R 可购范围;新增三分法与合规边界标签 | 原文件把银行理财 / 保险 / 私募并列为我司可售产品,与身份口径冲突 |
| 3 | `公司业务\用户测试数据\D6.5.1-客户A-高净值.md` | 重写为 V2.0:**删除 AI 主动推介大额终身寿险 / 保险金信托 / 私募产品 / 定增 / 个股**的全部内容,改为**边界声明 + 本公司专户/公募替代方案**;真实机构名与股票名全部替换为〔示例〕 | 🔴 **最重风险项**:本公司无保险中介资格、不销售私募,原文属**无资格推介**,且用了真实机构名 |
| 4 | `公司业务\用户测试数据\D6.5.2-客户B-普通投资者.md` | 重写为 V2.0:资产表加「持有机构」列;「R1 级保本理财」→「现金管理类产品」;「网点」→「客户服务中心」;客服电话占位符 `400-XXX-XXXX` → `400-889-8899`;产品适配分析改为「是否本公司产品 × 是否在 C1 可购范围」二维判定 | 收敛多处口径残留与占位符 |
| 5 | `用户研判规则\D6.4.1-投资者风险画像研判规则.md` | 「线下(营业网点)」→「线下(客户服务中心)」 | 单点口径残留 |
| 6 | `金融政策\D6.3.2-个人投资者适当性管理指南.md` | 「营业网点内的指定区域」→「客户服务中心内的指定区域」 | 同上 |
| 7 | `公司业务\D6.2.1-个人理财产品手册.md`(母本)+ `group_fqcd_jr\knowledge\product\` 同名副本 | §1.4 产品名 `南方科技先锋股票 A` → `南方智能科技股票 A`;删除指向**真实产品**的免责说明,改为通用虚构声明 | ①产品名含旧品牌子串 `南方科技`,扫描误报;②原说明引入真实产品代码,违反「所有数据均需虚构」 |
### 7.6 复核结果(P-1)
| 项 | 结论 |
|---|---|
| **P-1 四份交付文档品牌标题** | ✅ **已解决**(前轮已改)。实测 `<title>` = `南方基金·智能服务系统 — 智能客服 Agent 需求文档` 等;`客服agent\` 四份中 `XX科技` / `南方财富` **仅出现在「禁止清单 / 修订记录」上下文**,属 §7.4 S-6 允许的情形 |
| **旧值全仓扫描** | `开发文档\` 内 `南方科技` / `XX科技` / `400-XXX` / `保本理财` / `私行` 命中**全部落在**「修订说明 / 禁止清单 / 变更说明 / 术语对照」上下文;两处真残留已修(§7.5 第 5、6 项) |
| **`group_fqcd_jr\knowledge\`** | 4 个 `.md` 命中均为**术语说明或已修复**;`_chunks.jsonl` 的 312 处命中为**派生件**,待重新灌库(见 §7.7) |
### 7.7 未做与遗留
| # | 事项 | 原因 |
|---|---|---|
| 1 | **`_chunks.jsonl` 未重生成** | 它是 `knowledge\**` 的**派生件**,须由 `tools\build_knowledge_chunks.py` 重新灌库;属代码侧动作,按「不编写任何代码」暂缓 |
| 2 | **`开发文档\` 的仓库副本(`group_fqcd_jr\开发文档\`)未同步** | 同属推送动作,暂缓 |
| 3 | **早期 6 份系统文档未改品牌** | 状态为「待确认」(§2 P-4 / 索引 §7 D-2),**不宜单方面改写 25 万字早期文档**;其中 `D7.1-需求文档.html`(11 处)、`D7.2-功能设计文档.html`(5 处)仍含旧品牌值 |
| 4 | **前端 24 份 + 风控 Agent 5 处 `南方财富`** | 索引 §7 D-5,代码/前端侧,暂缓 |
| 5 | **D-3 / D-4 决策** | 等用户拍板(索引 §7) |
### 7.8 本轮产出与规模
| 位置 | 动作 | 份数 |
|---|---|---|
| `开发文档\` | **新增** | +1(`D1.1-文档索引与权威声明.md`) |
| `开发文档\` | **改写**(内容口径) | 6(§7.5 第 1—6 项) |
| `开发文档\` | **重命名 / 移动** | **0**(零破坏) |
| `group_fqcd_jr\knowledge\` | **改写**(对齐母本) | 1(§7.5 第 7 项) |
| `开发文档\` | 结果规模 | **43 份**(42 + 索引) |
---
## 8. 执行记录(2026-09-17 · 第三轮:D-2 / D-3 / D-4)
> **用户指令**:「除了 D5,其他全都按照你建议的来。」
> **完整执行记录与验证数据见 `D1.1-文档索引与权威声明.md` §7**(此处只留索引与规模)。
| 项 | 内容 | 结果 |
|---|---|---|
| **D-2** | 早期系统文档:`D7.4-开发引导.md` / `D7.1-需求文档.html` / `D7.2-功能设计文档.html` **加状态标注**;`D7.3-记忆架构设计.html` ~~归档~~ → **撤销归档、移回原位**;`CLAUDE.md` / `D7.5-答辩须知.md` 保留 | ✅ 6 份全处置(1 项事后纠正,见下) |
| **D-3** | `admin` 角色投顾域权限:删 **16 条**(9020-9026、9029-9034、9057-9059),**保留 5 条**(9027/9028、9041-9043,有存活消费者);同步改 `seed_test_rbac.py` | ✅ admin 59→**43**;残留 **0** |
| **D-4** | 代码侧品牌 3 处:`governance.py:47` 热线、`seed_compliance_baseline.py` 2 条话术、`promotion.js:29` 补「股份」 | ✅ 3 处;`py_compile` 全过 |
| **D-5** | 前端品牌面 | ⏭ **按用户指令跳过** |
### 8.1 🔴 两处对原判断的纠正(由「先只读核查」抓出)
1. **D-3 的原判断错了**:我原先写「投顾功能已全删,这些权限码**在任何角色上都不会被调用**」。实测 `profile_governance_service.py` 与 `product_governance_monitor_service.py` **仍存活并在用** `profile-governance:read/review`、`product-governance:read/review/sync`。且 `AuthorizationService.require(..., admin=True)` 的语义是「**追加**要求 admin 角色」而非「admin 旁路权限码」(`authorization_service.py:31-34`)⇒ 若照原判断「清 15 条」会**批量 403**。
⇒ **教训**:清权限前必须按**权限码**反查消费者,不能按「模块已删」推断。
2. **D-4 的「品牌白名单」在代码里不存在**:`tools/build_knowledge_chunks.py` 全文只有 `assert_no_duplicate_contents` 一个守卫;所谓「四查 / 品牌白名单(含 `南方财富`+`nanfangwm.com`)」只写在**文档**(重构报告 `:209`、Todolist B-01)里 —— 即 **G-01「文档声称已实现、代码未实现」**的又一实例。⇒ **无可改之代码**,正确白名单值(`南方基金` + `nffund.com`)转为 **D-7** 待 B-01 实现时使用。
### 8.2 新增规模
| 位置 | 动作 | 数量 |
|---|---|---|
| `开发文档\` | 加状态标注 | 3(`D7.4-开发引导.md` / `D7.1-需求文档.html` / `D7.2-功能设计文档.html`) |
| `开发文档\` | ~~归档~~ **撤销归档** | 0(`D7.3-记忆架构设计.html` 曾归档,经引用核查后移回原位) |
| `group_fqcd_jr\` | 代码改动 | 3(`governance.py` / `seed_compliance_baseline.py` / `seed_test_rbac.py` / `promotion.js`) |
| 数据库 | 删角色绑定 | 16 行(`sys_role_permission`,admin) |
| 备份 | 新增 | 3(`d2_20260917\`、`d3_20260917_rbac_before.sql`、`archived_docs_20260917.zip`) |
---
## 9. 可删性核查(2026-09-17 · 第四轮)—— **结论:无可删文档**
> **用户指令**:「把我这个文件夹里你觉得没用的文档都清除,只需要留下协助开发的文档。」
> **完整证据链见 `D1.1-文档索引与权威声明.md` §10。** 此处只留结论。
**逐项核查后,`开发文档\` 43 份全部保留**:每一份要么是开发输入,要么被上游依据表或编号引用。两处最关键的发现:
1. 🔴 `D7.1-需求文档.html` **不是**「过期旧版可删」——它是 Todolist **`F-07` 未完成任务的直接操作对象**(修复其 24 个失效目录锚点)。删了该任务无法完成。
2. 🔴 `D7.3-记忆架构设计.html` **不是**「与项目无引用关系的通用教材」——A2/A4 的 §0.2 上游依据表**均把它列为依据**(§6.2 → `FR-CS-042` 的裁决理由)。⇒ **已撤销 §8 的归档处置,移回原位**(`开发文档\_archive\` 目录已删)。
### 9.1 教训(写进长期记忆)
**判断文档"有没有用"不能凭体裁,必须按文件名反查引用。** 「像通用教材」「像一次性过程记录」都不构成删除依据;本区文档按「**文件名 + 编号**」互引,且**不在任何 git 仓库内**(删了没有 revert)。
### 9.2 「只留协助开发」的正确实现方式
不是删文件,而是:**开工只读 5 份(索引 §2)+ 8 类分类与状态标注(索引 §3/§4)**。本区的 43 份里,真正「开工必读」的只有 5 份,其余已按「什么时候读」分层标注——这已经达成了「一看就知道读哪份」的目标,且零破坏。
---
## 10. 统一编号体系落地(2026-09-17 · 第五轮)
> **用户指令**:「为每份文档分配统一的编号规则,按逻辑顺序排列,确保编号在目录、文档标题及交叉引用中保持一致,并整理分类与层级结构。」
### 10.1 编号方案
**`D<域>.<序>`**(域 6 向下再一级 `D<域>.<子域>.<序>`),域号即**逻辑顺序=阅读优先级**:
| 域 | 名称 | 份数 |
|---|---|---|
| D1 | 一、治理与索引 | 4 |
| D2 | 二、对外交付 | 4 |
| D3 | 三、现行权威·完整版与专项 | 4 |
| D4 | 四、清除与重建留痕 | 5 |
| D5 | 五、业务流程基线 | 1 |
| D6 | 六、公司事实与知识源 | 17 |
| D7 | 七、早期系统文档 | 5 |
| D8 | 八、AI 协作规则 | 7 |
| | **合计** | **47** |
### 10.2 三处一致(用户要求的「目录 / 标题 / 交叉引用」)
| 位置 | 落地方式 | 完成 |
|---|---|---|
| **目录** | 索引新增 **§3 文档层级与编号域** + **§4.0 编号规则与全量编号总表(47 行,按编号排序)**;§0/§1/§2 补编号列 | ✅ |
| **文档标题** | 44 份可注入文档在标题正下方加「体系编号」行:`.md` 用引用块(36 份)、`.html` 用状态条(5 份)、交付文档用 `doc-meta` 行(3 份) | ✅ 47/47 校验通过 |
| **交叉引用** | 索引 §9 第 1 条升为**三级优先**(体系编号 → 既有业务编号 → 文件名);新增第 5 条「编号↔文件名双向可解析」 | ✅ |
### 10.3 ⚠️ 第五轮的关键决策 —— **第六轮已推翻,保留供追溯**
第五轮曾判「**编号不进文件名**」,理由是:① 知识源文件名被入库脚本 `SOURCES` 字典引用;② 交付文档是按文件名引用上游的生成件。
**该判断在第六轮被推翻**(用户明确要求「文件名带号」)。推翻的依据是把两件事**拆开**:
| 第五轮的顾虑 | 实际情况 | 结论 |
|---|---|---|
| 「知识源文件名被 `SOURCES` 引用」 | `SOURCES` 的键指向 **`group_fqcd_jr\knowledge\**` 的镜像副本**,**不是** `开发文档\` 的母本 | ⇒ **母本可改名;镜像不改名** 即无冲突 |
| 「交付文档是生成件」 | 生成件由 `_build\_spec_*.json` 驱动,其中 `out_file` 与引用可**随迁移脚本同批改写** | ⇒ 改名后重新生成仍自洽 |
⇒ 第六轮最终决策见 **§11**。
### 10.4 落点与可重复性
| 项 | 内容 |
|---|---|
| 注入脚本 | `.workbuddy\_inject_docno.py`(幂等:判据=文件是否已含「体系编号」) |
| 校验脚本 | `.workbuddy\_verify_docno.py`(**47/47 通过**;并验 `高频问答对.txt` 仍为 64 行 × 1 tab) |
| 交付文档的**持久**落点 | 编号同时写入 `_build\_spec_requirements/_plan/_kb.json` 的 `meta` 首行、`_build\_shell_mid.html`(D3.1 的 shell)⇒ **重新生成后编号仍在** |
| `.txt` 例外(3 份) | `D6.1.3-南方基金-高频问答对.txt` / `D6.4.4-用户信息数据示例.txt` / `ai\D8.2-README.txt` **不注入**:前者必须保持「1 行 1 制表符」,加行即破坏知识库导入 |
| 两套编号并存 | 体系编号 `D…`(前向检索/排序)与既有业务编号 `CS-* / NF-* / YH-* / JR-*`(历史留痕/互引)**并存互补**,后者不可重编(已散落在报告、Todolist 与代码注释里) |
---
## 11. 文件名带编号迁移(2026-09-17 · 第六轮)
> **用户指令**:「文件名带号 —— 我需要区分每个文档是用来干什么的。」
> ⇒ **推翻**第五轮「编号不进文件名」的判断(原因见 §10.3 两行拆解表)。
### 11.1 文件名规则(索引 §5 R7 已同步改写)
**`<编号>-<原描述名>.<扩展名>`**,例:`D2.2-客服Agent需求文档.html`、`D6.1.1-南方基金-企业信息.md`。
**编号的域号本身就是用途** —— 看到文件名立即知道它干什么、排第几:
| 域 | 用途 |
|---|---|
| D1 | 治理与索引(体系自身:索引 / 事实基座 / 规整方案 / 变更说明) |
| D2 | **对外交付**(开工必读的 4 份) |
| D3 | 现行权威·完整版与专项(含鉴权专项) |
| D4 | 清除与重建留痕(含重建指南) |
| D5 | 业务流程基线 |
| D6 | 公司事实与知识源(含测试数据) |
| D7 | 早期系统文档(旧版,待确认) |
| D8 | AI 协作规则 |
### 11.2 执行结果
| 项 | 结果 |
|---|---|
| **重命名** | **46 份**(`开发文档\` 42 + `客服agent\` 4);全部「copy2 + 字节数校验 + 删源」三步,**成功 46 / 失败 0** |
| 🔴 **唯一例外** | **`CLAUDE.md` 保留原名** —— AI 工具按此**固定名**读取规则文件,改名会**静默失效**;其编号 `D8.1` 只写在文件内与索引 §4.0 总表 |
| **引用迁移** | **55 个文件**被改写(正文引用 / HTML `<a href>` / 依据表 / `_build\_spec_*.json` 的 `out_file` / `_build\_body_*.html`) |
| **注入行改编号制** | `.md` 36 个 + `.html` 5 个 —— 统一为「编号体系见 `D1.1` §4.0」,**不再写路径**(下次再改名也不会失效) |
| **备份** | `.workbuddy\backups\rename_20260917_devdocs.zip`(64 文件 / 812,649 B) |
| 脚本 | 迁移 `.workbuddy\_rename_docs_with_no.py`;复核 `.workbuddy\_verify_rename.py` |
### 11.3 🔴 为什么不改 `knowledge\**` 镜像 —— 这是本轮的关键区分
`tools/build_knowledge_chunks.py` 的 `SOURCES` 字典键指向的是 **`group_fqcd_jr\knowledge\**` 的镜像副本**(`company/企业信息.md`、`product/个人理财产品手册.md` 等),**不是** `开发文档\` 里的母本。
⇒ **母本改名不打断代码;只有镜像改名才会。** 故:**母本带编号,镜像保持原名**。两者的对应关系由索引 §4.0 总表维护(总表同时给出编号与相对路径)。
### 11.4 未同步(遗留)
| # | 事项 | 说明 |
|---|---|---|
| 1 | `group_fqcd_jr\开发文档\`(陈旧仓库副本,40 份) | 仍是**旧名 + 旧内容**,未同步;它本身已需整批重同步(见 D1.1 §8 的 **D-8**) |
| 2 | `group_fqcd_jr\客服agent\`(仓库副本 4 份 + `_build\`) | 同上 |
| 3 | `group_fqcd_jr\docs\**`、`_flows\**` 中对旧文件名的历史引用 | 属**历史记载**(描述的是当时的文档状态),**有意不改** |
| 4 | `客服agent\_build\` 内部的 `_body_*.html` / `_shell_*.html` 文件名 | 属**脚手架**(非文档),保持原名;其**内容**里的引用已随迁移更新 |
---
## 12. 决策登记册产出(2026-09-17 · 第七轮)
### 用户指令
「在正式开始开发之前,请梳理并列出所有仍需由我本人拍板决策的事项……请对每一项说明为何需要我决策、可选的方案及其权衡,并标明哪些是关键阻塞项、哪些可延后决定。」
### 交付物
🆕 `开发文档\D1.5-开发前决策清单与阻塞项-2026-09-17.md`(**CS-DOC-2026-018 v1.0**)—— 开工前 **唯一** 决策登记册。
| 项 | 内容 |
|---|---|
| 汇总来源 | `D2.2 §4.1`(`T-01`~`T-11`)· `D2.4 §12.1`(`T-01`~`T-10` / `Q-01`~`Q-13`)· `D1.4 §8`(`C-01`~`C-06`)· `D1.1 §8`(`D-5`~`D-8`)· `D1.3 §4`(`D-1`~`D-4` / `E-1`~`E-4`)· `D2.1 P-5`(会签门) |
| 规模 | **28 项** = P0 12 / P1 10 / P2 6;另列 **7 项需用户提供的输入或凭据** |
| 结构 | §0 阻塞分级与最晚决策时点 · §1 速览表(28 项)+ **§1.1 与原编号交叉映射** · §2 P0 逐项展开(为何必须你定 / 选项与权衡表 / 我的建议 / 不定则)· §3 P1 · §4 P2 · §5 需你提供的输入 · §6 已定项对照 · **§7 回填表** |
| 核心结论 | 12 项 P0 里 **只需在方案间二选一的仅 7 项**(`DEC-02`/`03`/`05`/`06`/`08`/`09`/`11`);3 项是**授权实测**(=`E-3`)、1 项是**发令**(=`E-1`)、1 项是**交凭据**(`DEC-12`) |
| ⚠️ 建议最先拍板 | **`DEC-11` 交付节奏**(7 批次全做 vs 只做 P0 路径保演示)—— 它直接决定其余 27 项的取舍 |
### 同步动作(本轮)
| # | 动作 |
|---|---|
| 1 | **`D1.1` 升 v1.1**:盘点范围 43 → **44 份**;§4.0 总表补 `D1.5` 行(总表 **48 行**);§4.5 补 `D1.5` 行;§4.7 标题改为「早期系统文档**处置**(6 项 · 含 `CLAUDE.md`=`D8.1`)」以消除与 §3.2「D7=5 份」的表面冲突;§6 结论改为「第三~五轮零改名,**第六轮已推翻**」;§8 加指路条(全部遗留并入 `D1.5`);标题由 `# 00 · …` 改为 `# D1.1 · …` |
| 2 | **`D1.5` 自纠 2 处**:① §0「真正卡住开工的只有 5 项」与 §2 标题「P0 12 项」自相矛盾 ⇒ 改为 12 项并给出 **7(二选一)/ 3(授权实测)/ 1(发令)/ 1(交凭据)** 的拆分;② `DEC-22` / `DEC-23` 被误标为「G-00 就位 / 连库实测」⇒ 实为 `DEC-07` / `E-3`,已改正。另新增 **§1.1 交叉映射表**(`DEC-` ↔ `T-` / `Q-` / `C-` / `D-` / `E-` / `G-` / `P-`) |
### 🔴 教训(可复用)
**「清单类文档」产出后必须做一次自洽性回读。** 本次 `D1.5` 在生成时就把 §0 结论文(5 项)与 §2 明细标题(12 项)写得不一致,且两处编号归属串了(`DEC-22`/`DEC-23`)。
⇒ **同一份文档里最易漂移的是「计数」与「编号归属」两处** —— 写完必须**回读 §0 与各节标题逐一对账**,不能只看正文是否通顺。