Skip to main content

Releases · 产品与数据合同

Asset
ADP-DLV-DOC-DOC-0006
Feature
releases
领域
delivery-integrations
文档状态
draft
文档 Owner
DOC
事实源
canonical-docs
更新
2026/10/14

本文承载 Releases PRD 的对象边界、角色与租户边界、读写管理导出 矩阵和稳定状态合同,不复制 PRD 的背景、范围或发布决策。原子 REQ / AC 与正式 TEST Asset 尚未由 PLN、DOC 与 QA owner 登记,因此本页保持 draft。

实现级事实按 PLN · 75c4f1c80ac12f1322fe7bac2132d49a875f3291 固定修订核验。

术语与对象边界​

术语定义事实 owner
Release 条目Project 级发布沟通对象,包含名称、状态、标签、目标/实际发布日期、变更日志、负责人和稳定身份Plane(project_releases)
发布范围Release 与 Work Item 的有效关联集合,要求同 Workspace 与同 ProjectPlane(project_release_work_items)
Milestone 关联Release 与 Milestone 的有效关联,双向可读,不改写任一侧状态Plane(project_milestone_release_links)
写入 receipt按 actor 与幂等键记录的写入结果,用于重放同一请求Plane(project_release_mutations)
Harbor sealed release artifact由 protected-tag 交付链路 seal 出的不可变制品身份GitLab 与 Harbor
部署 evidenceTEST/PRODUCTION 目标、health 与 observed commit 等环境事实owning release surface,不是本文档

边界结论:

  1. Release 条目是发布沟通对象,不等价于 Harbor sealed release artifact、制品摘要或 TEST/PRODUCTION 部署 evidence。任何“已发布”“已上线”“已验收”结论不得从 Release 状态派生。
  2. 当前 Plane source 在 apps/api/plane/automation/ 下没有任何代码引用 ProjectRelease;Release 条目与 GitLab/Harbor/GitOps/Argo CD 交付事实没有共享状态。
  3. 当前 GitLab/Harbor/GitOps/Argo CD 发布链路不读取 project_release_mutations;Plane 的写入 receipt 与 delivery evidence 没有共享状态,引用时不得混用。
  4. 发布流程、seal、Harbor bundle identity 与部署顺序由 发布流程 和 代码托管与独立发布 拥有。

角色与租户边界​

维度合同
Workspace 边界每个 Release 条目必须属于一个 Workspace 与一个 Project;读写都以 Workspace slug 与 Project ID 作为上下文
Project 边界发布范围与 Milestone 关联的对象必须与 Release 同 Workspace、同 Project;任一越界 ID 使整批请求失败
成员边界读取要求请求者是当前 Project 的 active 成员;非成员不返回该 Project 的业务数据
角色边界写入额外要求 Project Admin 角色;Project Member 只有只读能力
功能边界Project 级 release_view 为关闭时,服务端拒绝写入并返回稳定“功能未启用”错误
已删除对象已删除或超出范围的 Release 读取返回稳定“已删除或超出范围”错误,不返回内容
同名对象同名的 Milestone 与 Release 是两个独立对象,不因名称相同产生任何隐式关联或状态传递

读写管理导出矩阵​

能力Project Admin(role 20)Project Member(其它 active 角色)非成员 / 其它 Workspace依据
读取 Release 列表与详情允许允许拒绝读请求只校验 active 成员资格
读取发布范围与关联 Milestone允许允许拒绝读请求只校验 active 成员资格
创建条目允许拒绝拒绝写请求要求 role 20
更新条目(含状态、日期、负责人)允许拒绝拒绝写请求要求 role 20 且携带当前 version
维护发布范围允许拒绝拒绝写请求要求 role 20 且携带当前 version
关联 / 解除 Milestone允许拒绝拒绝写请求要求 role 20 且携带当前 version
删除条目允许拒绝拒绝写请求要求 role 20 且携带当前 version
启用 / 停用 Project Releases允许拒绝拒绝Project Settings 功能开关
导出当前无导出 API 或 UI 入口(unknown)不适用不适用本文不定义导出合同

退出条件:以上矩阵是当前实现事实与本期合同的交集。若后续引入更细的角色(只读 Guest、发布角色),必须先 更新本矩阵与 Releases PRD 的待确认事项,再改实现。

稳定状态与转换​

Release 状态只有三个稳定值,全部是发布沟通状态:

状态值用户可见含义允许的来源
unreleased已规划或进行中,尚未宣布发布创建默认值,或显式设置
released已宣布发布,可记录实际发布日期显式设置
cancelled该发布不再推进显式设置

当前实现事实:状态是带枚举校验的普通字段,服务端当前不限制转换方向,任何 Admin 都可以在携带当前 version 与幂等键的前提下把状态改为任一允许值;状态变化不触发部署、通知、Milestone 状态或工作项状态变化。

本期合同提案:转换保持显式用户动作,并且

  1. 状态集合固定为上述三个值,未知值必须被拒绝;
  2. released 允许记录实际发布日期,unreleased 不得被视为“已发布”;
  3. 任何状态变化必须携带当前 version 与幂等键,并被写入 receipt;
  4. 是否把转换收窄为 unreleased → released、unreleased → cancelled、released → cancelled 由 Producer 与 PLN owner 决定(见 PRD 第 12 节),在决定前实现不得增加隐式转换,文档也不得把收窄规则写成已批准合同。

其他状态轴不在此列:工作项业务状态、Milestone 交付状态、部署状态与 Automation 运行状态各自由其 owner 定义。

FR 追踪草案​

PRD 功能本页合同仍缺少
FR-001 启用与发现Project 级功能开关、入口可见性与服务端拒绝原子 REQ / AC / TEST
FR-002 创建与维护条目字段校验、负责人边界、version 递增原子 REQ / AC / TEST
FR-003 发布范围同 Project 校验、关联唯一性、整批失败原子 REQ / AC / TEST
FR-004 Milestone 关联双向读模型、状态独立、ID 集合一致原子 REQ / AC / TEST
FR-005 删除与收敛软删除、关联收敛、重放原子 REQ / AC / TEST
FR-006 权限与保护角色矩阵、幂等键、乐观并发原子 REQ / AC / TEST

非目标​

  • 不把 Release 条目升级为制品、候选、bundle 或环境记录。
  • 不让 Release 状态驱动部署、合并、闸门或生产操作。
  • 不定义 SemVer 与 CHANGELOG 的事实源。
  • 不改写 Milestone、工作项、Cycle、Module 的任何状态。
  • 不新增跨 Project Release、Release 模板、附件、导出或通知投递。
  • 不把 receipt 表声明为不可篡改审计。