MINIAPP DISTRIBUTION / PLAN 484

小程序测试下发,
不再复制一套环境

参考 TestFlight 的构建—测试组模型:ZIP 保持不可变,服务端按组织上下文解析版本,客户端复用现有下载与回滚链。

RECOMMENDED

控制面加一层,运行时不分叉

新增 Build、Test Group、Assignment 与 Release 指针;不新建第二套对象存储、下载器或小程序容器。

VERIFIED BASELINE

最低改动建立在已经存在的链路上

代码事实与目标设计分开:下面四项来自 2026-08-21 客户端 dev-umi 与开放平台前端基线;后端表结构仍待仓库验证。

01

客户端已有上下文

get/login 请求已携带 workspace_id,无需新增客户端选版参数。

02

安装链可复用

sversion 比较、ZIP 下载、ZipSlip、staging、原子替换和失败回滚已经存在。

03

上传链可复用

预签名上传、对象存储、版本创建、扫描审核和正式发布已经存在。

04

必须修的缺口

Apps 快照只按 appId 缓存,跨组织切换可能先运行上一个组织的版本。

ARCHITECTURE

控制面、解析面、运行面只有一条版本真值

正式版本是默认指针,组织测试绑定是覆盖规则;所有客户端拿到的仍是同一份 sversion/download_url 合同。

小程序组织测试下发总体架构开放平台上传不可变构建,分发控制面绑定测试组;客户端携带组织上下文请求版本解析器,再按需下载并原子安装。CONTROL PLANE · 上传、审核、分发RESOLUTION PLANE · 服务端权威选版RUNTIME PLANE · 客户端按需安装开放平台公共 UI不可变 Build测试组 + Assignment审计与指标resolve(appid, workspace_id, user_id)Matrix X Chat按 sversion 比较ZIP 事务安装/回滚本地服务 + WebView
一份构建只上传一次;组织只是服务端解析上下文,客户端永远不能自行指定版本。

IMPLEMENTATION FLOW

一次 resolve 决定下一次打开运行什么

优先级固定为:组织测试组绑定 → 当前正式版本 → 无可用构建。异常测试规则回退正式版本并记录审计。

REQUEST · EXISTING{ appid, workspace_id }

继续使用已有请求,不增加客户端可控 version_id。

RESPONSE · COMPATIBLE{ sversion, download_url }

可选增加 distribution 诊断对象,但不能成为安装分支条件。

CACHE FIX · REQUIREDuserId / workspaceId / appId

Apps 快照必须按账号和组织隔离,并在启动前取得权威解析。

DELIVERY PLAN

五阶段交付,每一阶段都能独立验收

第一期只做组织定向,不做百分比、地区、设备、账号白名单或随机灰度。

P0

事实冻结

读取后端版本表、审核事务与 resolve 入口;冻结 artifact_version 不变量。

P1

分发控制面

新增测试组、组织成员、构建绑定、冲突检查、幂等与审计。

P2

公共 UI

在版本管理中加入测试组下发、范围确认、停止测试与全量提升。

P3

客户端正确性

组织隔离缓存,启动前权威 resolve;下载与安装器保持不动。

P4

封闭验证

1 个小程序、2 个组织,观察解析、下载、安装、回退和启动延迟。

DATA INVARIANTS

先锁死不会串包的规则

  • artifact_version 在单个 app 内唯一且不可变
  • 审核后 SHA-256 与 artifact_path 禁止替换
  • 同一测试组同一时刻只有一个 active 构建
  • 同一组织不能从多个组命中不同构建
  • 停止 Assignment 不删除 Build
  • 客户端只消费服务端解析结果

ACCEPTANCE GATES

上线前必须能当场证明

  • 同账号跨组织首次打开不串版
  • 加入或移出测试组后下一次打开立即生效
  • 同一组织不能同时命中两个构建
  • 未审核或已撤销构建不能下发
  • 下载失败不破坏当前 live 版本
  • 相同 artifact_version 不得绑定不同 ZIP
  • 伪造 workspace_id 必须被成员关系校验拒绝
  • 单包/双包、全屏/半屏回归全部通过

INDUSTRY REFERENCES

借成熟模型,不引入一整个平台

TestFlight 提供构建—测试组关系;OpenFeature 提供上下文解析边界;Unleash 提供约束、稳定命中、审计和回滚纪律。

NEXT ACTION

先读后端仓,再冻结数据库迁移与 OpenAPI

当前方案已经冻结产品边界和客户端最低改动;后端真实表名、事务和 resolve 查询位置仍必须从源码补证,未补证前不能写成“已实现”。

查看完整接口、ER 图、时序与验收矩阵