merge: 跟进架构师最新 qyqy_develop(38 提交)

- model_gateway 冲突取并集:保留本线对 intent_classification→chat 的修正与空集回退,
  并入架构师补充的 5 个风控 task_type;未登记 task_type 的告警留痕一并保留
- docs/25 撞号(本人 JWT 文档 vs 架构师风控评审报告)→ 本人让号到 docs/26,同步 docs/19 引用
- 架构师恢复的 5 份编号文档(04/06/10/13/99)保留其版本(那 5 份已无引用,仅编号占位)
- bootstrap/model_gateway/docs/05/test_risk_agent_contract 自动合并成功

测试:1013 passed / 1 failed(既有空集缺陷)
真机:知识问答 succeeded 且声明仅 1 条;画像问答 succeeded;三端点 403/201/200/404 全绿
配置:release 216 仍为生效版本,工具白名单未被顶掉
This commit is contained in:
qyqy
2026-09-11 15:40:32 +08:00
parent cbd6de2721
commit fb7d2f7b6d
2 changed files with 3 additions and 3 deletions
@@ -148,7 +148,7 @@ D:\conda\envs\jr_py313\python.exe C:\Users\...\e2e_run_check.py --label 手工
单条链路的手工命令(客户身份 9001,JWT 用配置项 `JWT_PRIVATE_KEY_PATH` 指向的私钥按 RS256 自签,
参考 `tools/acceptance_check.py::token()`)。还没有密钥就先跑一次
`python tools/generate_jwt_keys.py --out-dir config/jwt/dev`(详见 `docs/25-JWT密钥管理与轮换.md`):
`python tools/generate_jwt_keys.py --out-dir config/jwt/dev`(详见 `docs/26-JWT密钥管理与轮换.md`):
```text
POST /api/v1/agent-runs
@@ -225,10 +225,10 @@ D:\conda\envs\jr_py313\python.exe tools\demo_agent_e2e.py
4. **`docs/05` §9.5 未收录 `agent-intent-configs` 的 `GET` 详情路径**:该接口实际存在(用于获取
`If-Match` 所需的 ETag),但权威接口文档未列出,属文档待补项。
5. **没有登录接口(已决定推迟,不是遗漏)**:当前没有"账号密码换令牌"的接口,令牌由外部按
RS256 用私钥自签(见 `docs/25-JWT密钥管理与轮换.md`)。**决定:等业务 Agent 开发阶段
RS256 用私钥自签(见 `docs/26-JWT密钥管理与轮换.md`)。**决定:等业务 Agent 开发阶段
结束后再补**。补的时候只需动签发侧(新增 `POST /auth/login`:校验密码 → 用私钥签令牌),
验签侧 `JwtAuthenticator` 与身份解析侧 `IdentityService` 都不需要改。
代价与约束:开发阶段凡拿到私钥者都能以 `9001/9002/9003` 身份调用(实测**无法**伪造不存在的
用户、**无法**使用已禁用账号,边界是"签名有效 + 用户存在且启用"),因此私钥按 `docs/25`
用户、**无法**使用已禁用账号,边界是"签名有效 + 用户存在且启用"),因此私钥按 `docs/26`
第 7 节的红线管理;同时业务代码必须始终只从 `RequestContext` 取身份,否则后补登录接口会
从"增量"变成"翻遍所有业务代码"。