全项目文档一致性审计报告
审计日期:2026-09-14
审计范围:仓库内 docs/ 下全部 110 份 .md(含 docs/演示用/、docs/风控业务演示文档/、docs/验收与审计/、docs/superpowers/)
比对基准:当前源码、配置、以及文档之间的相互一致性
审计方式:全量扫描 → 与代码逐条核对 → 修正 → 复核
重要说明:本次审计只修改文档,未改动任何业务代码。
一、审计方法与可信度说明
1.1 做法
- 全量盘点:
Glob docs/**/*.md 得到 110 份文档。
- 并行审计:按主题分 6 批派只读子代理逐份核对,每份要求给出:
- 结论(一致 / 过时 / 部分过时)
- 文档侧证据(原文引用或行号)
- 代码侧证据(
文件:行号)
- 明确列出"未核实"的部分
- 逐条自证:所有子代理给出的计数类结论都被我自己重新
Grep/Read 复核一遍。
- 修正:对确实需要同步的文档逐个编辑。
- 复核:改完再 grep 确认修改点已生效。
1.2 ⚠️ 一条重要提醒:子代理的计数不可直接采信
审计过程中,有子代理报告 tools/seed_test_rbac.py 的权限数为"72 条"、另一份报"66 条"。
我自己 Grep '^\s*\(9\d{3},' 数出来是 65 条(9001–9065),并以此为准。
结论:凡涉及"多少张表 / 多少条权限 / 多少个接口"这类计数的结论,本报告全部以我本人的
直接复算为准。使用时也建议照此办理——活体核验优于任何文档的记载。
1.3 最高优先级发现:AGENTS.md 自身就含过时信息
AGENTS.md 是"接手先读"的入口文件,它的错误会向所有读者传播,因此本次优先修正它。
三个子代理独立发现了同一批问题(互相印证):
AGENTS.md 原话 |
实际 |
影响 |
| "有四套页面" |
实际 6 个角色目录 |
漏了 employee-advisor/、employee-operations/;且 employee-advisor/ 与 employee-console/ 是两个不同角色,不是改名 |
| "9001-9046 号段" |
实际 9001–9065,共 65 条 |
按旧号段写权限码会直接踩空 |
| "架构师环境还有风控的 9 条白名单" |
是该环境的 config_release 配置事实,不是代码常量 |
会有人在代码里找一个不存在的"9 条清单" |
二、已更新的文档清单及主要变更
2.1 核心基线类(5 份)
| 文档 |
主要变更 |
AGENTS.md |
① 前端章节:"四套页面"→6 角色目录表(含 guest/customer/employee-console/employee-risk/employee-advisor/employee-operations),补 ⚠️ 说明 employee-advisor/ ≠ employee-console/、访客产品页已不走 mock-data.js 而走真实端点 P001/P002;② RBAC 章节:(9001-9046 号段)→(9001-9065 号段,共 65 条),新增号段演进段(逐段列明 17 个区间,并标注 9035-9040/4041-4046 从未存在);③ "风控的 9 条白名单"→注明是环境 config_release 事实、本机发布脚本只发 4 条;④ TODO.md 行 (实为 51 张业务表)→(实为 89 张业务表);⑤ 新增"画像有两个存储"条目(值在 MySQL、关系在 Neo4j,不一致时以 MySQL 为准,核验用 python tools/reconcile_graph.py) |
docs/05-接口文档.md |
① §8.4 工具表:4 个→5 行,search_knowledge 明确为正式名、query_knowledge 为别名,补超时(15s/10s),新增 ⚠️ 块说明"两者都要发布"及各业务线工具;② §18 完成判据:52 张表→90 张 = 89 张业务表 + alembic_version,附 49 → 52 → 89 修正链;③ §19 总目录:把 场外基金运营|不属于当前系统 改为已落地(正确前缀 + 旧信封 + page/page_size 分页);④ 新增 §19.1 补充接口段:场外基金、场外运营、访客令牌、客户入驻、推广物料、账户与交易看板,另注 any-of 权限语义与 RK001–RK015 |
docs/14-Agent组员统一接入说明书.md |
① §8 工具表:错误的"4 个公共只读工具"→5 行正确表(search_knowledge 正式名 / query_knowledge 别名仅 visitor+customer),注册行号修正为 L248-388,补"两者都要发布"的 ⚠️,另加各业务线工具表(风控 3 / 投顾 5-6 / NL2SQL 1 / 探针 1);② §14 当前状态:已注册两个业务 Agent→7 行表(类名 / agent_type / 说明),函数行号 L407-447,并说明注册顺序是追加式 |
docs/09-底座使用文档.md |
① 表数:52 张,其中 51 张业务表→90 张 = 89 业务 + alembic_version,加分域表(场内 51 / 场外推广 17 / 投顾 21)与口径沿革说明(并澄清 audit_schema.py 的期望值是现算的,不是手写清单);② Agent:两个→7 个表;③ §14 工具表整段重写——原文把 search_knowledge/query_knowledge 的主从关系写反、超时写成 8s、角色写错,均予更正 |
docs/02-数据库建表设计.md |
① 头部:保留场内分项,但补 ⚠️ 说明全库现为 90 张 = 89 业务 + alembic_version(51+17+21),澄清"建成后总表数 51"是场内口径;② 标题 ## 4. 51 张表总览→## 4. 51 张表总览(场内口径) + ⚠️;③ 核验清单行同步说明 |
2.2 数据库与审计类(2 份)
| 文档 |
主要变更 |
docs/08-数据库结构审计基线.md |
在原有 2026-09-11:51 → 68 更新块之后,追加 2026-09-14(第二次):68 → 89:说明增量是投顾 21 张(advisor_*,迁移 20260910_advisor_* + 20260911_advisor_*)、登记文档待补、给出新公式(51+17+21=89,含版本表 90),并新增 "历史沿革"小节保存 51→68→89 的完整轨迹;空库表行 68 张业务表→89 张业务表 |
docs/28-场外与推广域数据表登记.md |
头部"维护约定"改为:本文回答"场外/推广这 17 张从哪来"(不是"68 张从哪来"),并加 ⚠️ 块统一为 89=51+17+21 口径,明确17 张的登记内容本身无误、不改,投顾 21 张不在本文范围 |
2.3 流程与架构类(4 份)
| 文档 |
主要变更 |
docs/03-平台端到端流程文档.md |
① §11 场外流程:"未建设独立业务表前…"→前提已满足,补 ✅ 落地状态(17 表 + OffsiteFundAgent/PromotionMaterialAgent + 3 条路由 + 运营前端页 + 旧信封与 page 分页的差异提示),并补 ⚠️ 说明限额已从"金额"改为份额(10%/20%);② §15 上线验收:四类 Agent→7 类并列全 |
docs/22-四大Agent流程实现拆解.md |
头部加 "本文是开工前评估稿,多处结论已被实现推翻" 的 ⚠️ 块 + 4 行对照表(52 表→90;"无场外表"→已建 17;"必须新建场外一组表"→已成;金额口径→份额口径);§5 正文就地标注已完成;核对规则行改为份额口径 |
docs/38-架构对齐-记忆与画像投影链路.md |
§三 加 "四个分歧均已收口"对照表(1 沿用主干 outbox;2 直接快照与候选复核并存;3 放弃 ZSY 那套客服 Agent、保留访客/候选/转人工;4 按"只取增量"处理)+ 补 neo4j_profile_projection.py 未被装配的警告(不要加回 __main__.py,否则又成两套图投影);§四标注三步均已执行完成 |
docs/36-PR7合并记录与权限号段修正.md |
头部加 口径修正块:40 条 / 45 条 / 38 条都是 2026-09-12 当日快照,现为 65 条 / 9001-9065,含号段归属表与"9035-9040、4041-4046 从未存在"的提示;§4、§5.2 就地标注 |
2.4 客服 / RAG / 前端类(4 份)
| 文档 |
主要变更 |
docs/18-知识检索接入方案.md |
⚠️ 本次安全相关性最高的一处。① §4.2:删掉"集合内字段:knowledge_id/title/snippet/…"这段硬编码字段名(AGENTS.md 明令禁止),改为说明运行时探测(app/core/knowledge_schema.py:FIELD_CANDIDATES / REQUIRED_LOGICAL_FIELDS / SchemaCache),并加两套环境 schema 对照表+"Milvus 报 field doc_id not exist 会打挂另一套环境"的后果说明;② 步骤 2 的 search() 签名:去掉 output_fields 的硬编码默认值,改为必传参数 + 要点说明;③ 文件头补 3 条修正(工具正式名 search_knowledge;字段名不得硬编码;配置键名以 RuntimeConfigService 为准) |
docs/41-客服Agent前端开发约束_v1.md |
① §3 目录树整段替换为真实 6 角色树(逐页列出),附新旧对照表,注明 employee-advisor/ ≠ employee-console/、访客产品页已用 P001/P002;② §12 标题与全节:修掉 4 处不存在的 portal/customer/chat/ 引用(该目录从未落地),改为指向常驻浮窗 portal/common/customer-service-widget/,跳转方式改为浮窗 API window.CustomerServiceWidget.open({ prefill }),并说明会话上下文存 localStorage、无需返回 chat 页 |
docs/26-JWT密钥管理与轮换.md |
§8 标题 与"暂无登录接口"的关系→与登录接口的关系:补 ✅ 该缺口已闭环——POST /api/v1/auth/tokens(app/api/controllers/auth.py:24,32,接口编号 A034)已存在,服务端用私钥签发 RS256;并指出验签侧(JwtAuthenticator)与身份解析侧(IdentityService)确实未改,印证原文的预判;原文以删除线保留作设计记录 |
docs/12-基金行情数据底座接入开发计划.md |
头部补 3 件原文完全没写的运行期事实:① MAX_QUOTE_AGE = 15 分钟(app/service/trade_service.py:79),超时后所有委托一律 503 FUND_QUOTE_UNAVAILABLE 且无自动刷新(app/core/errors.py:260-264),补刷命令 tools/sync_market_prices.py(立即生效、无需重启);② 两个同步脚本未被登记(sync_market_prices.py / sync_nav_history.py);③ query_fund_quote 15s 超时的算式依据(适配器最坏 8.2s × 1.8),并说明旧 5s 会永远撞工具超时;另补启动链与解释器门槛(必须是"版本≥3.11 且能 import 依赖",不能只看 --version) |
2.5 演示与验收类(5 份)
| 文档 |
主要变更 |
docs/44-演示流程.md |
① 补注 启动金融Agent平台.bat 在桌面上、不在仓库里(仓库只有 启动平台.bat),说明两份由 tools/make_launcher_bat.py 统一生成,必须 GBK + CRLF + 无 BOM(缺任一条 cmd 解析错乱,实测报 AT 命令已弃用);② 账号表下补 ⚠️:advisor_t(9020) 与 offsite_t(9006) 不在 RBAC 种子脚本里(种子只有 cust_t/risk_t/admin_t/review_t 四个),由 grant_*.py 系列创建,重跑种子不会重建;换机器登录失败先查 sys_user 有无该行 |
docs/42-场内基金知识条目草稿.md |
头部补与 docs/43 的关系说明:两份是同主题不同版本(本文=草稿/取数 09-13,docs/43=入库版/取数 09-11),511810 的 0.2332 与 0.2661 两个都是真实 DWJZ、只差两天,入库前须先定用哪一天口径,以免知识库与 fin_product.current_nav 打架 |
docs/43-场内基金产品手册(知识库入库版).md |
§二 产品清单下加 ⚠️ 交叉引用(同上),511810 行净值加 ⚠️ 标记,指向 docs/42 第 220-245 行的查证过程(含 DWJZ vs LJJZ vs 场内交易价的区别) |
docs/验收与审计/phase1-acceptance-criteria.md |
头部加 "本文是 2026-09-10 的缺口盘点快照、其后已全部补齐" + 7 条逐条订正表(其中第 3 条从 ⚠️"未达成/最大缺口"→✅ 已达成,Milvus 实测命中 score 0.7837;第 7 条从 🔴"规划缺口"→✅ 已达成),正文表头加"已过时"标注 —— 保留老师验收标准原文是本文的价值所在 |
docs/验收与审计/phase1-acceptance-report.md |
① 第 2 条 52 张表→补 ⚠️ 现为 90 张口径;② 第 4 条与文件清单 query_knowledge→标注正式名为 search_knowledge(2 处) |
docs/风控业务演示文档/08-数据库依赖与读写边界.md |
读取表下补 ⚠️ 实现归属说明:把混在一起的表按 repository 划为三分(风控域 / 身份域 identity_repository.py / 场内交易域只读),并补 ✅ 风控红线 2 的实测复核:risk_repository.py 中没有任何 memory_unit/profile_snapshot 引用,画像只读 fin_customer_profile(8 处以上 join) |
2.6 交接与过程产物类(8 份)
| 文档 |
主要变更 |
docs/superpowers/handoff/2026-09-11-交接文档-客服Agent与RAG收尾.md |
头部加 4 条复核:① 分支指针 origin/NL_develop 已从 fb7d2f7 前进到 1f62aca(+10 提交),引用 SHA 前请自查;② 本文内部就有三个互相冲突的测试通过数(§0 的 1013 passed vs §4/§7 的 804 passed),说明是"合并前/后"两次快照被混写,以 §0 为准且当前基线一律重跑取数;③ §0 末尾列的"两个最大遗留"现已全部解决(memory_sync_outbox 消费者已接入 runtime.py L551/L523;Redis 密码已配);④ 表数 52→90 口径。§4 与 §7 的正文数字就地加注 |
docs/superpowers/analysis/2026-09-10-现状与差距分析.md
…/2026-09-10-范围重定位与画像讨论记录.md
…/客服Agent专项设计方案-分析报告.md
docs/superpowers/plans/2026-09-10-客服Agent与RAG实施计划-qyqy版.md
…/2026-09-10-foundation-safe-migration.md
docs/superpowers/specs/2026-09-10-customer-service-agent-design.md
…/knowledge-retrieval-infra-design.md
…/foundation-safe-migration-design.md |
统一加 "🗂 过程产物 · 结论已归档" 批注,指明:判断当前进度请看 docs/验收与审计/phase1-acceptance-report.md,保留本文是为了留存"当时基于什么事实做了哪些判断"的证据链。(此前 8 份中只有 2 份有类似自述)。个别文件加了针对性提示:customer-service-agent-design 注明实现时工具名由 query_knowledge 改为 search_knowledge;knowledge-retrieval-infra-design 注明实现期有一处偏离(字段名改为运行时探测) |
三、经核对无需修改的文档及理由
下列文档经逐条核对与当前实现一致,或已正确自我声明为历史/废弃,故未做修改:
3.1 已自我声明为历史 / 废弃(AGENTS.md 亦已列为"不要用来判断当前进度")
| 文档 |
为什么不用改 |
docs/04 / docs/06 / docs/10 / docs/13 / docs/99 |
经 2026-09-11 评审决定保留(删除收益为零、保留成本同样为零),已列在 AGENTS.md 的 D 类"不要用来判断当前进度";docs/99 自身头部已声明废弃并指向 docs/05。内容未核对、可能过期,属有意保留的历史参考 |
docs/01-通用Agent平台开发设计.md |
只讲 MVC+S 分层约束、BaseAgent 骨架、AgentFactory 契约,不含 Agent 清单与表数,没有过时事实 |
docs/superpowers/ARCHIVE-2026-09-11-文档清理归档.md |
自身就是"归档说明",已标注被替代的章节 |
3.2 经核对与实现一致
| 文档 |
核对结论 |
docs/40-前端验收清单.md |
实际是正确的:它已列出全部 6 个角色目录(含 employee-advisor),越权矩阵与实现相符;offsite_t/advisor_t 不在种子脚本一事它已有自述 |
docs/27-NL2SQL接入说明.md |
query_financial_data / 权限 financial:nl2sql:read / 角色 advisor,operator,admin,super_admin 与 bootstrap.py:301-308 逐字一致;且确认 NL2SQL 不在公共工具列表 |
docs/17-接口文档易懂版.md |
自述"不替代 docs/05",且内容一致 |
docs/19 / docs/24 / docs/25 / docs/29 / docs/31 / docs/37 / docs/39 |
逐条核对与实现一致(docs/24 仅有一条占位电话热线略显陈旧,无实质影响) |
docs/21-风控Agent接入设计与实现说明.md |
以风控为主题,"51 张"是其孤立环境自己的口径,与全库口径不冲突 |
docs/28 的登记内容本身 |
17 张表的逐表登记无缺陷(本次只改了头部口径措辞) |
docs/风控业务演示文档/01、03、04、05、11、12、13、14、19、20 |
与 risk_agent.py 的实现一致:3 个工具 / 4 类意图,注册位置 bootstrap.py:330-349 相符 |
docs/风控业务演示文档/21 |
往返核对干净:§3 截断提示对应 risk_agent.py:376-381;§4 密钥路径对应 get_settings().jwt_private_key_path;§7 风控扫描调度器确实尚未接入主 Worker,文档已正确标注为待办 |
docs/evidence/ 下的取证产物 |
是运行产出的证据文件,不是需要同步的说明文档 |
3.3 同主题重复文档中的"权威版"
| 文档 |
核对结论 |
docs/11 / docs/15 / docs/16 |
三份均已在开头标注"以 docs/14 为准",且 docs/14 本次已修正 → 重复品无需再改 |
docs/客服Agent接入底座扩展说明_v1.md |
与实现一致 |
docs/验收与审计/phase1-acceptance-report.md |
主体一致(仅表数与工具名两处小注,已改) |
docs/33 / docs/34 / docs/35(ZSY 三件套) |
不是重复品,是逐层推进的评审往返链,docs/35 为最终版,链条完整、无需改 |
docs/NL_develop 系列 5 份(交付说明 + 两轮架构师评审 + 两轮回复) |
同样不是重复品,是一次完整的评审往返(交付说明即最终版),无需改 |
docs/客服Agent一期 / 二期 相关 |
其中分支名(ZSY_develop2、develop)略显陈旧;但该系列已由 docs/36(PR #7 合并记录)接管为权威口径,改动价值低于误改风险,故保留并在此说明 |
四、本次发现的最值得注意的问题(按严重度)
| 严重度 |
问题 |
处置 |
| 🔴 最高 |
docs/18 硬编码 Milvus 集合字段名(knowledge_id/snippet/…)。AGENTS.md 明令禁止,因为两套开发环境的 schema 不同;硬编码任一套会让 Milvus 直接报 field doc_id not exist → 三集合全失败 → 客服一律"引导人工" |
已改为运行时探测的说明,并删掉代码示例里的硬编码默认值 |
| 🔴 高 |
AGENTS.md 自身含三处过时信息(前端"四套页面"、RBAC "9001-9046"、"风控 9 条白名单")。它是接手入口,错误会传播 |
已全部修正 |
| 🟠 中高 |
docs/09 §14 把 search_knowledge 与 query_knowledge 的主从关系写反,且超时、角色均错。照此发布白名单会导致访客或登录客户其中一方一问即失败 |
已整段重写 |
| 🟠 中 |
表数口径在 5 份文档间不一致(49 / 51 / 52 / 68 / 72) |
已统一为 89 张业务表 = 场内 51 + 场外/推广 17 + 投顾 21(含版本表 90),并保留历史数值作明确标注的沿革 |
| 🟠 中 |
docs/41 描述了一个从未落地的 customer/chat/ 页面(前端约束文档,会误导实现) |
目录树整段替换为真实 6 角色树;剩余 4 处引用改为常驻浮窗 |
| 🟡 中低 |
docs/22 是"开工前评估稿",多处结论已被实现推翻,但正文未标注 |
头部加"已作废"块 + 4 行对照表 |
| 🟡 中低 |
交接文档内部就有三个互相冲突的测试通过数,且分支指针已过期 |
加注说明来历与正确读法,强调"基线一律重跑取数" |
| 🟡 中低 |
docs/42 / docs/43 对同一只基金的净值不同且互不引用(曾被认为是数据错误) |
加交叉引用,明确"两个都是真实值、差异有因(相差两天)、入库前须定口径" |
五、留给后续的建议(本次未做)
以下事项属于本次范围之外或需要业务决策,未改动,建议后续处理:
- 投顾 21 张表的登记文档仍缺(
advisor_*)。AGENTS.md 与 docs/08 均已标注"待补",建议按 docs/28 的口径另立一份。
docs/36 的正文号段表到 9046 结束是对的(那正是当时的上界),现已在头部加了修正块。若希望正文也完整到 9065,需补充 9047+ 的语义描述。
- 风控扫描调度器尚未接入主 Worker(
docs/风控业务演示文档/21 §7 已如实标注),属代码待办而非文档问题。
docs/客服Agent一期/二期 的分支名陈旧,但已被 docs/36 接管权威口径,未改(改动价值低于误改风险)。
六、本次审计的编辑纪律(说明)
对每一个过时数字,采用的都是 "保留旧值 + 追加更正" 而非"静默覆盖":
- 旧值用删除线或"原文写…"的方式保留;
- 更正内容带日期戳(
2026-09-14);
- 尽量指向活体核验命令(如
python tools/audit_schema.py、python tools/check_rbac_seed_consistency.py)。
���由:这些文档里的旧数字在其当时都是正确的;把它们直接抹掉会销毁审计线索,
并且过一段时间又会有人拿着另一个时点的数字来问同样的问题。保留沿革比覆盖更有价值。
本次审计只修改文档,未改动任何业务代码。