mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-20 16:07:11 +08:00
53 lines
4.2 KiB
Markdown
53 lines
4.2 KiB
Markdown
# ADR-0509:Cluster Alpha Bundle 与跨架构里程碑闭合
|
||
|
||
- 状态:Accepted(首份实际 Cluster milestone artifact 待维护者授权)
|
||
- 日期:2026-08-28
|
||
- 决策:D-414
|
||
- 关联:ADR-0503、ADR-0506、ADR-0508
|
||
|
||
## 背景
|
||
|
||
QingLong 3.0 已开发约二十天。Local Alpha 已有双架构 Trial Kit 和完整 CI 后置 milestone index,但 Cluster 的 control、control-ai、admin、worker 仍由矩阵 job 内的 shell 各自生成 Docker archive 和一份 v1 manifest。
|
||
|
||
旧 Cluster archive 没有 `SHA256SUMS`、闭合文件集、独立 verification evidence 或可离线 auditor;manifest 直接把 gate 写成 `passed`,没有绑定 workflow ref/SHA、run ID/attempt 和 exact image ID。八个 artifact 也没有完整 CI 后置的唯一完成信号。部署者无法区分“某个矩阵 job 上传成功”与“本次阶段版本整体成立”。
|
||
|
||
## 决策
|
||
|
||
### 1. 单镜像 bundle 由仓库脚本统一物化
|
||
|
||
新增 `ql3-cluster-alpha-bundle.cjs`,固定四角色的 repository、OCI title、runtime user 和两种架构。bundle schema 为 `qinglong/alpha-cluster-image@v1`,文件集恰好包含:单镜像 Docker archive、对应 CycloneDX SBOM、`verification-evidence.json`、README、manifest 和 `SHA256SUMS`。
|
||
|
||
物化前必须重新检查 image reference、ID、OS、architecture、non-root user、source/version/title label,复用现有 SBOM closure audit,并验证 evidence 绑定 exact source、role、architecture、image ID、workflow ref/SHA、run/attempt 和 gate 集。离线 audit 不调用 Docker或网络,拒绝额外文件、symlink、长度/digest、SBOM/evidence 或 checksum 漂移。
|
||
|
||
### 2. 八个 bundle 只有在完整 CI 后才能闭合
|
||
|
||
新增 `cluster-alpha-milestone` finalizer,依赖现有完整 CI 的 19 个顶层 job。它下载同一 source 的四角色乘 amd64/arm64 八个 artifact,逐个离线复审,并要求 version/source/run/attempt 一致,image ID、archive digest 和 verification digest 八项均互不复用。
|
||
|
||
成功后上传 `qinglong/alpha-cluster-milestone@v1` 三文件索引。索引保存八个 artifact 名、bundle manifest digest、archive digest、image ID 和 verification digest。缺少索引的零散 archive 是中间文件,不是阶段版本。
|
||
|
||
### 3. 仍不把 Integration Candidate 冒充 Public Release
|
||
|
||
Cluster milestone 的 maturity 固定为 `cluster_integration_candidate_not_public_release`。它可供隔离 registry/K3s/Kubernetes 节点做多组件集成,但没有受保护 tag、GHCR immutable digest、签名/attestation、release catalog 或生产 deployment lock。正式发布继续由 Public Release Set 独立裁决。
|
||
|
||
## 被拒绝的替代方案
|
||
|
||
- 保留 workflow 内联 shell:难以单测和离线复核,manifest 仍会自报通过。
|
||
- 只依赖 GitHub job 绿色状态:下载物与 workflow 主体没有内容级绑定,失败运行也可能留下部分 archive。
|
||
- 把八个 archive 合并为一个超大 artifact:会重复下载和存储,对只需要特定角色/架构的部署者不友好。
|
||
- 将 Cluster candidate 直接提升为正式发布:缺少 registry、签名、catalog 和生产部署闭环。
|
||
|
||
## 影响
|
||
|
||
- 显式 `alpha_artifact_scope=cluster|all` 时增加 verification 文件、离线 audit 和一次八 artifact finalization;普通 push/PR 不生成大产物;
|
||
- 每个部署者只下载目标架构/角色,milestone 本身保持三文件小索引;
|
||
- 新实现属于 repository release tooling,不新增 workspace package、runtime dependency、镜像 layer、端口、daemon、timer、连接池或稳态 RSS;
|
||
- Local 的路由/NAS 稳态边界不变,Cluster 节点获得可裁决的阶段集成产物。
|
||
|
||
## 验证
|
||
|
||
- bundle 正向测试覆盖闭合六文件、image/SBOM/evidence identity 与离线 audit;
|
||
- 负向测试覆盖 root user、archive/SBOM/evidence 篡改、额外文件和 image subject 脱离;
|
||
- milestone 正向测试闭合八项,并覆盖跨 workflow run 混用、index mutation、额外文件和 workflow 门序;
|
||
- 静态 audit 固定 19 个完整 CI dependency、八 artifact 下载和 `finalize → audit → upload`;
|
||
- 首份真实产物仍需维护者显式授权 `produce_alpha_artifacts=true + alpha_artifact_scope=cluster`。
|