# 大版本发布验收总表(2026-05-21) > 目标:把当前超大改动面压缩成可验收、可证明、可发布的 `RC` 版本。 > 原则:不再按“继续开发”推进,而按“关卡验收 -> 暴露故障 -> 定点修复 -> 回归通过”推进。 --- ## 1. 发布前总原则 本次版本只有在以下条件同时满足时,才允许进入大版本推送: 1. 数据库结构与 SQL 脚本执行状态已确认 2. 所有 `P0` 关卡全部通过 3. 所有 `P1` 关卡全部通过 4. 关键页面与关键接口无 `500` 5. 无 `UndefinedTable / UndefinedColumn` 级别错误 6. 核心租户边界验证完成 7. 发布说明、执行 SQL、上线步骤、观察项已整理完毕 --- ## 2. 关卡定义 | 关卡 | 优先级 | 范围 | 当前状态 | | --- | --- | --- | --- | | `G0` | `P0` | 数据库结构与迁移脚本对齐 | 待验收 | | `G1` | `P0` | 登录 / 当前用户 / RBAC / 租户上下文 | 已通过(人工重放 + Pytest) | | `G2` | `P0` | 租户管理 + 用户租户设置 | 已通过(人工重放 + Pytest) | | `G3` | `P0` | 首页入口 + 入口模块后台 + 新租户分配 | 已通过(人工重放 + Pytest) | | `G4` | `P0` | 文档 / 合同模板 / 公文 上传-列表-详情-边界 | 已通过(Pytest,文档主链路) | | `G5` | `P1` | RAG 应用 / 知识库 / 会话 读写边界 | 部分通过(Pytest,当前真实权限模型) | | `G6` | `P1` | 评查组 / 规则集 / 交叉评查 主链路 | 部分通过(Pytest,只读矩阵 + 建单边界) | | `G7` | `P1` | 使用统计 / 审计快照 / 租户聚合 | 未开始 | | `G8` | `P2` | 前端去角色硬编码与菜单/按钮一致性 | 未开始 | --- ## 3. 通过标准 每个关卡只允许有三种判定: 1. `通过` 2. `失败` 3. `未验证` 判定标准: 1. `通过` - 有真实接口或真实页面操作证据 - 有明确返回结果 - 无日志级严重错误 2. `失败` - 出现 4xx/5xx 且不符合预期 - 数据写错、查错、串租户、越权 - 页面与接口口径不一致 3. `未验证` - 没有实际执行 - 只有历史日志,无本次独立重放 --- ## 4. G0 数据库结构与脚本对齐 ### 验收目标 确认这轮租户化与权限改造依赖的数据库对象,在**新数据库**中完整存在。 ### 必验对象 1. `sys_tenants` 2. `sys_tenant_aliases` 3. `sys_tenant_feature_flags` 4. `leaudit_entry_module_tenants` 5. `sso_users.tenant_code` 6. 高风险阶段新增 `tenant_code` 字段与索引 ### 通过标准 1. 表存在 2. 关键列存在 3. 索引存在或已确认可延后 4. 初始化种子不缺失到影响主链路 --- ## 5. G1 登录 / RBAC / 租户上下文 ### 核心用例 1. `POST /api/auth/login` 2. `GET /api/auth/me` 3. `GET /api/v3/rbac/users` 4. `GET /v3/rbac/roles` 5. `GET /api/rbac/user/routes` 6. `GET /admin/users/organizations/tree` ### 关注点 1. 登录是否正常签发 token 2. 当前用户是否返回正确 `tenant_code` 3. 用户列表是否按租户边界收敛 4. 路由列表是否正常返回 5. 组织树是否仍能正常读取 ### 通过标准 1. `000` 可登录 2. `/api/auth/me` 返回 `tenant_code` 3. `RBAC` 只读接口无 `500` 4. 日志无 `UndefinedTable / UndefinedColumn` --- ## 6. G2 租户管理 + 用户租户设置 ### 核心用例 1. `GET /api/v3/tenants` 2. `GET /api/v3/tenants/options` 3. `GET /api/v3/tenants/{tenantCode}` 4. `POST /api/v3/tenants` 5. `PUT /api/v3/tenants/{tenantCode}` 6. `PATCH /api/v3/tenants/{tenantCode}/status` 7. `PUT /api/v3/rbac/users/{userId}/tenant` ### 关注点 1. 租户能否真实新增 2. 新增后能否查到详情 3. 功能开关与能力字段能否正确保存 4. 用户租户更新后重新登录是否生效 5. 禁用租户时是否有引用保护 ### 通过标准 1. 能新增一个测试租户 2. 能更新测试租户 3. 能启停测试租户 4. 能把用户切到测试租户并重新读取到正确上下文 --- ## 7. G3 首页入口 + 入口模块后台 + 新租户分配 ### 核心用例 1. `GET /api/home/entry-modules` 2. `GET /api/v3/entry-modules` 3. `GET /api/v3/entry-modules/{id}` 4. `POST /api/v3/entry-modules` 5. `PUT /api/v3/entry-modules/{id}` 6. `GET /api/v3/tenants/options?feature_key=home.entry_module` ### 关注点 1. 首页是否按当前用户租户展示入口 2. 后台列表/详情是否以 `tenants` 为主输出 3. 能否把新租户分配到入口模块 4. 新分配后首页是否能看到入口 ### 通过标准 1. 现有入口读取正常 2. 新建或更新入口模块时可写入 `tenants` 3. 新租户分配后首页展示正确 4. 管理端和首页口径一致 --- ## 8. G4 文档 / 合同模板 / 公文 ### 核心用例 1. 文档上传 2. 文档列表 3. 文档详情 4. 附件追加 5. 合同模板上传 6. 公文上传与运行 ### 通过标准 1. 写入不落错租户 2. 同租户可查可读 3. 跨租户不可见 4. 详情、附件、状态、运行链路不绕边界 --- ## 9. G5 RAG ### 核心用例 1. 应用列表 / 默认应用 2. 会话列表 / 消息列表 3. 会话重命名 / 删除 4. 消息反馈 / StopMessage 5. 知识库创建 / 更新 / 删除 ### 通过标准 1. 读链路正常 2. 写链路按租户边界收敛 3. 不再因角色名误放行 --- ## 10. G6 评查组 / 规则集 / 交叉评查 ### 核心用例 1. 评查组只读 2. 规则集只读 3. 规则版本创建 / 发布 / 回滚 4. 交叉评查建单 5. 补传文档 6. 成员与文档混租户拦截 ### 通过标准 1. 只读链路正常 2. 敏感写操作不越权 3. 任务维度不串租户 --- ## 11. 当前执行策略 本轮先执行并已固化为黑盒验收: 1. `G1` 2. `G2` 3. `G3` 4. `G4` 5. `G5` 6. `G6` 的首轮主链路矩阵 ### 当前已完成补充 已新增 `pytest` 黑盒验收基座: 1. `tests/release/test_g1_rbac_context.py` 2. `tests/release/test_g2_g3_tenant_entry_chain.py` 3. `tests/release/test_role_tenant_matrix.py` 4. `tests/release/test_g4_documents.py` 5. `tests/release/test_g5_rag.py` 6. `tests/release/test_g5_rule_cross_review_matrix.py` 已通过结果: 1. 发布级黑盒验收总数:`16 passed` 2. `G1-G3`:已通过 3. 角色/租户矩阵基础:已通过 4. `G4` 文档跨租户读写边界:已通过 5. `G5` RAG 可见性与管理边界:按当前真实权限模型通过 6. `G6` 规则集/评查组只读矩阵与交叉评查建单边界:已通过 本轮验收中暴露并已修复: 1. `tenantServiceImpl._replaceTenantAliases()` 由“软删 + 重插”改为“物理删 + 重插”,解决 `PUT /api/v3/tenants/{tenantCode}` 的重复更新 `500` 执行规则: 1. 先验收 2. 出故障就只修该故障 3. 修完立刻回归 4. 不顺手扩散 --- ## 12. 发布阻塞定义 以下任一项存在,直接判定为**不可推大版本**: 1. 关键写链路未验证 2. 出现 `500` 3. 出现 `UndefinedTable / UndefinedColumn` 4. 租户边界存在串数据或落错数据 5. 管理端与首页、前端与后端口径不一致 6. SQL 执行顺序和上线步骤未确认 --- ## 13. 当前备注 当前仓库处于大改冻结态,后续所有推进都必须回写本总表和冻结版验收文档: 1. [冻结版进度盘点与最小冒烟验收-2026-05-21.md](/home/wren-dev/Porject/leaudit-platform/docs/权限与地区隔离/冻结版进度盘点与最小冒烟验收-2026-05-21.md) 2. 本文档 --- ## 14. 本轮实测结果(G1-G3) ### `G1` 登录 / RBAC / 租户上下文 判定:`通过` 实测通过: 1. `POST /api/auth/login` 2. `GET /api/auth/me` 3. `GET /api/v3/rbac/users?page=1&page_size=5` 4. `GET /api/rbac/user/routes` 5. `GET /api/admin/users/organizations/tree?include_users=false` 关键结果: 1. `000 / admin06111` 可正常登录 2. `/api/auth/me` 返回 `tenant_code=MZ`,后续切换后返回 `tenant_code=ZZRC1` 3. 组织树真实可用路径是 `/api/admin/users/organizations/tree` 说明: 1. 之前打 `/admin/users/organizations/tree` 得到 `404`,属于验收口径错误,不是后端能力缺失 ### `G2` 租户管理 + 用户租户设置 判定:`通过` 实测通过: 1. `POST /api/v3/tenants` 2. `GET /api/v3/tenants/ZZRC1` 3. `PUT /api/v3/tenants/ZZRC1` 4. `PATCH /api/v3/tenants/ZZRC1/status` 5. `PUT /api/v3/rbac/users/5/tenant` 6. 重新登录后 `GET /api/auth/me` 本轮实际创建测试租户: 1. `tenant_code=ZZRC1` 2. `tenant_name=发布验收租户1-更新` 本轮修复: 1. 修复 [tenantServiceImpl.py](/home/wren-dev/Porject/leaudit-platform/fastapi_modules/fastapi_leaudit/services/impl/tenantServiceImpl.py) 中租户更新 `feature_flags` 时,软删后重插撞唯一约束导致的 `500` ### `G3` 首页入口 + 入口模块后台 + 新租户分配 判定:`通过` 实测通过: 1. `GET /api/home/entry-modules` 2. `GET /api/v3/tenants/options?feature_key=home.entry_module` 3. `GET /api/v3/entry-modules/2` 4. `PUT /api/v3/entry-modules/2` 5. 更新后再次 `GET /api/home/entry-modules` 关键结果: 1. `000` 切到 `ZZRC1` 后,首页初始返回空入口 2. 给模块 `2` 补充 `ZZRC1` 租户分配后,首页立即返回该入口 结论: 1. `租户主数据 -> 用户租户 -> 入口模块租户分配 -> 首页展示` 链路已被真实打通 --- ## 15. 本轮新增实测结果(G4-G6) ### `G4` 文档上传 / 列表 / 详情 / 附件 / 删除边界 判定:`通过` 已由 `tests/release/test_g4_documents.py` 黑盒验证: 1. 租户 A 创建文档后,租户 A 可见、租户 B 不可见 2. 本租户管理员可更新本租户文档 3. 跨租户更新、追加附件、删除均被拒绝 4. 普通用户仅能看到自己创建的文档 5. 附件追加 `mergeMode=new` 当前真实行为为“生成新版本”,不是在原文档上原地追加 ### `G5` RAG 应用 / 知识库 / 会话边界 判定:`部分通过` 已由 `tests/release/test_g5_rag.py` 黑盒验证的当前真实行为: 1. 全局管理员可创建并更新不同租户数据集 2. 租户管理员可读取本租户数据集详情 3. 租户管理员当前不能访问 `/api/v3/rag/datasets/admin` 4. 租户管理员当前不能创建或修改数据集 5. 本租户私有应用仅本租户可见,公共数据集挂载应用可跨租户可见 说明: 1. 这表示 `RAG` 当前已经具备租户可见性边界 2. 但“管理能力”仍保留在当前权限种子对应的全局管理侧,不能宣称已完成最终去角色化或最终权限化 ### `G6` 评查组 / 规则集 / 交叉评查主链路 判定:`部分通过` 已由 `tests/release/test_g5_rule_cross_review_matrix.py` 黑盒验证: 1. 规则集元数据列表当前为全局可读 2. 规则绑定与评查组树已按入口模块租户映射做过滤 3. 交叉评查任务建单支持同租户正常创建 4. 建单时混入跨租户文档会返回 `403` 5. 建单时混入跨租户成员会返回 `403` 未纳入本轮通过范围: 1. 规则版本创建 2. 规则发布/回滚 3. 交叉评查后续提案、投票、归档深链路