文档:审查报告入库 + 全量校对补注

## 新入库(`docs/演示用/`)

- `代码库全面审查报告-2026-09-14.md`
- `代码修改方案-2026-09-14.md`
- `记忆系统排查报告-2026-09-14.md`
- `记忆系统修复文档-2026-09-14.md`
- `文档一致性审计报告-2026-09-14.md`
- `多Worker接入方案-2026-09-14.md`

## 全量校对(32 个既有文档 + `AGENTS.md`)

跨 39 个文件、**1125 insertions / 148 deletions**。

⚠️ **这批改动同样不是本次会话写的**。我抽样核对过性质:是**实质内容补充**而不是
格式/换行转换。例如 `docs/44-演示流程.md` 新增两条"2026-09-14 补注":

- `启动金融Agent平台.bat` 只在**桌面**上,仓库里只有 `启动平台.bat` 这一份
  (两份由同一个 `tools/make_launcher_bat.py` 产出,改完 `start.ps1` 重跑它一起更新);
- `advisor_t`(9020) 与 `offsite_t`(9006) **不在 `tools/seed_test_rbac.py` 的演示用户里**
  (那里只有 `cust_t`/`risk_t`/`admin_t`/`review_t` 四个),由 `grant_*.py` 系列创建,
  **重跑种子不会重建它们** —— 换机器时这两个账号登录失败,要先查 `sys_user` 有没有这两行,
  而不是查密码。

这两条都是对的地方,与我这一路踩到的现象一致(我确实用到了 `advisor_t`/`offsite_t`)。

**我没有逐字审阅全部 39 个文件**,只抽样确认了改动性质与规模。若其中有需要复核的段落,
请指明文件,我逐处核对。
This commit is contained in:
2026-09-14 20:36:00 +08:00
parent c0e5c80929
commit 36c7a9d8d2
38 changed files with 3604 additions and 138 deletions
+31 -7
View File
@@ -24,10 +24,22 @@
> 客服/RAG 那条线的个人分支是 **`NL_develop`**(个人分支 → PR 合回 `qyqy_develop`),**不要再用 `6516ccb`**。
> 它是对"当前状态"最准确的一份,读完它再读下面这些。
>
> **🖥️ 前端(2026-09-13 起)**:**正式前端在 `app/static/portal/`**,由 `app/main.py` 挂载,
> 通过 **`/portal/`** 访问(`/` 会 307 跳到访客首页)。四套页面:`guest/`(访客,公开产品页
> 暂时用 `common/mock-data.js` 并在页面上标注)、`customer/`(客户)、`employee-console/`(管理员)、
> `employee-risk/`(风控)。**端点表集中在 `common/api-client.js`**,改接口调用请改那一份。
> **🖥️ 前端(2026-09-14 修订)**:**正式前端在 `app/static/portal/`**,由 `app/main.py` 挂载,
> 通过 **`/portal/`** 访问(`/` 与 `/portal/` 都 307 跳到 `/portal/guest/home/`)。
> **实际是 6 个角色目录**(原写"四套页面"已过期,漏了投顾与运营两个):
>
> | 目录 | 角色 | 子页面 |
> |---|---|---|
> | `guest/` | 访客(免登录) | `home/`、`products/`、`product-detail/` |
> | `customer/` | 客户 | `login/`、`dashboard/`、`orders/`、`transactions/`、`holdings/`、`cash-ledger/`、`profit-loss/`、`risk-questionnaire/` |
> | `employee-console/` | 平台管理员 | `login/`、`workspace/` |
> | `employee-risk/` | 风控专员 | `dashboard/` |
> | `employee-advisor/` | 投顾 | `dashboard/` |
> | `employee-operations/` | 运营(场外/推广/NL2SQL) | `dashboard/`、`nl2sql/`、`offsite/`、`promotion/` |
>
> ⚠️ `employee-advisor/` 与 `employee-console/` **是两个不同角色,不是改名关系**,别合并。
> 访客公开产品页已由 `app/api/controllers/public_platform.py` 的 `/products` 等端点供数,
> **不再是** `common/mock-data.js`。**端点表集中在 `common/api-client.js`**,改接口调用请改那一份。
> 启动:`python -m uvicorn app.main:app --port 8000`(注意模块级变量是 **`app`**,不是 `application`)。
> `tools/portal.py`(8101)**只是跨角色联调工具,不是产品前端**,不要再往它加功能。
>
@@ -102,7 +114,7 @@
| 文件 | 为什么 |
|---|---|
| `TODO.md` | **自 2026-09-09 起未随 Phase 1 更新**:5 处"49 张表"(实为 51 张业务表)、T8.1 客服 Agent 整节未勾选但**已交付**、多处标"进行中"其实已完成。**当前进度一律以 `phase1-acceptance-report.md` 为准。** |
| `TODO.md` | **自 2026-09-09 起未随 Phase 1 更新**:5 处"49 张表"(实为 **89 张业务表**)、T8.1 客服 Agent 整节未勾选但**已交付**、多处标"进行中"其实已完成。**当前进度一律以 `phase1-acceptance-report.md` 为准。** |
| `docs/04` / `06` / `10` / `13` / `99` | 内容**未核对过、可能过期**(自相矛盾 / 结论失效 / 清单不全)。经 2026-09-11 评审**保留**(不再删除),仅作历史参考。**不要用它们判断现状** |
### E. 环境与命令口径(易错点)
@@ -115,6 +127,10 @@
场外/推广那 17 张逐表登记见 `docs/28-场外与推广域数据表登记.md`;
**投顾那 21 张的登记文档待补**(按同样口径另立一份)。
核验命令:`python tools/audit_schema.py`(若报 `unexpected` 先分清是"库里多表"还是"迁移没进来")。
- ⚠️ **画像有两个存储,别只找 MySQL**:**值在 MySQL**(`fin_customer_profile` / `profile_snapshots` /
`fin_risk_assessment` / `user_facts`,唯一真相),**关系在 Neo4j**(`Customer` 节点 + `Tag`/`Product`
等,单向、幂等、可重建的派生视图)。图不一致时**一律以 MySQL 为准**
(`python tools/reconcile_graph.py <customer_id> [--repair]`)。设计细节见 **`docs/23`(已与代码对齐)**。
- 已注册业务 Agent(**7 个**,见 `app/service/agent/implementations/` 与 `app/service/agent/`):
`FundQueryDemoAgent`、`CustomerServiceAgent`、`RiskAgent`、`PlatformProbeAgent`、
**`AdvisorAgent`**、**`OffsiteFundAgent`**、**`PromotionMaterialAgent`**。
@@ -122,15 +138,23 @@
**`query_knowledge` 是 `search_knowledge` 的别名**(同一 handler,为兼容一期发布配置与旧客户端保留,见 `bootstrap.py`);
其余业务线工具(风控、投顾、NL2SQL)按各自 Agent 白名单注册,全部在 `bootstrap.py` 的 `get_agent_factory()` 里。
**工具可用范围 = 代码上限 ∩ 当前 active `config_release` 的发布白名单**,缺发布配置则失败关闭。
- ⚠️ **RBAC 权限码的定义源是 `tools/seed_test_rbac.py` 的 `PERMISSIONS`**(9001-9046 号段):
- ⚠️ **RBAC 权限码的定义源是 `tools/seed_test_rbac.py` 的 `PERMISSIONS`**(**9001-9065 号段,共 65 条**):
那个脚本是 **DELETE 重建**语义(`DELETE FROM sys_permission WHERE id BETWEEN 9001 AND 9099`),
**没并进它的权限码重建一次就没了**,表现是"接口突然 403"而没有任何报错线索。
`tools/grant_*.py` 只补种子里缺的,且 id 必须与种子**逐条一致** ——
一致性由 `python tools/check_rbac_seed_consistency.py` 及其单测守着
(2026-09-12 曾因两套 id→code 映射并存,让 `advisor` 在种子重建后静默拿到语义错误的权限)。
号段演进(**改这里之前先看这段**):
`9001-9017` 一期公共;`9018-9034` 客服二期/投顾;`9041-9046` 产品治理与候选审核
(**`9035-9040` 与 `4041-4046` 从未建过**,`9041` 是把冲突的 `9020-9035` 挪走的修正结果,见 `docs/36`);
`9047-9050` 风控告警四个;`9051-9056` 推广/NL2SQL/探针;
`9057-9059` 投顾客户范围三项;**`9060-9065` 账户与交易看板六项**(2026-09-12 后追加,**`AGENTS.md` 旧写的「9046」已过期**)。
另注:`sys_user` 已改为「存在则更新、不存在才插入」,故重跑种子**不会**再弄丢演示密码。
- ⚠️ **`config_release` 是环境数据,不随代码合并**:本机 active 版本 id 与架构师环境**不同**
(本机是我方发布的客服白名单;他那边还有风控的 9 条白名单)。**"白名单已发布"必须带环境限定**,换环境要重发。
(本机是我方发布的客服白名单;他那边还有风控的白名单)。**"白名单已发布"必须带环境限定**,换环境要重发。
⚠️ 常被误读的一点:「架构师环境有**风控的 9 条白名单**」说的是**那台环境 `config_release` 里的 9 个
`agent_tools` 配置项**,**不是**代码里的常量——**别去仓库里找"9 条"这个对象**
(本机发布脚本 `tools/publish_risk_agent_config.py` 只发 4 条:3 工具 + `general` 空)。
发布脚本 `tools/publish_customer_service_config.py`:**同 key 的继承项必须被本次定义覆盖**,
否则旧值会被子集校验 422 拦下整次发布;**继承范围必须覆盖全部三张受管表** ——
它此前只搬 `platform_config_item`,把 `customer_service_chitchat` 提示词静默漏在了旧版本里