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