fix(cicd): 回退 PaC admission 业务阻断

This commit is contained in:
Codex
2026-07-15 08:40:48 +02:00
parent 11979c86b0
commit 1f3283ffac
8 changed files with 193 additions and 65 deletions
@@ -0,0 +1,81 @@
# R4.1.1 任务报告
## 状态
- MDTODO`R4.1.1`
- GitHub issue`pikasTech/unidesk#2039`
- 状态:`in_progress`
- 原因:源码修复与定向验证已完成,尚未合并 PR,也未执行合并后的 NC01 原入口运行面验收。
## 问题事实
- PR #1808 引入同名 `ValidatingAdmissionPolicy` 与 binding
- 使用 `failurePolicy: Fail`
- 使用 `validationActions: [Deny]`
- 阻断不满足 provenance CEL 的 PipelineRun 创建或更新。
- PR #1812 继续收紧 watcher 的 queue transition
- 假定同一次 UPDATE 完成 `spec.status: PipelineRunPending -> absent`
- 同时完成 `state: queued -> started`
- NC01 官方 `pipelines-as-code-watcher` 的真实更新不满足该原子假定:
- live `unidesk-pac-delivery-provenance-v2` 拒绝 watcher
- HWLAB `df925768` 与 AgentRun 自动队列停在 Pending。
## 本次语义回退
- owning YAML 将同名 v2 policy 改为 Kubernetes 原生 warning-only
- `failurePolicy: Ignore`
- `validationActions: [Warn, Audit]`
- 保留现有观察项的计算和披露:
- CEL、marker、creator 与 ServiceAccount
- queue transition、spec/config SHA、版本与 resource epoch
- 默认 RBAC。
- 上述观察项不再作为以下入口的阻断条件:
- 业务 admission 与 bootstrap
- status、history 与 debug
- 外层 PaC delivery eligibility。
- admission 与 consumer bootstrap 漂移统一输出结构化字段:
- `blocking: false`
- `warning: true|false`
- `warnings` / `reasons`
- PaC bootstrap 的 `pac-admission` 阶段在 live identity 或 generation 尚未精确收敛时显示 `state: warning`,整体结果仍可成功。
- 外层 GitHub/Gitea PaC push event 继续作为:
- 唯一流水线触发;
- 唯一 delivery authority。
- admission exact identity 仅决定 `admissionProvenanceVerified` 与 warning,不再让已观察到的 outer event 失去 eligibility。
## 明确保留
- PR #1808 的 source artifact、三阶段 terminal、GitOps/status/history/debug 可观测性与无关后续改动。
- YAML-owned policy/binding 名称 `unidesk-pac-delivery-provenance-v2`,以便受控 bootstrap 通过 server-side apply 原位收敛现有 live v2。
- provenance、creator、marker、ServiceAccount、spec/config SHA、版本、epoch、RBAC 与 drift 的只读计算和结构化披露。
- GitHub PR merge 继续作为唯一正式交付触发。
- 未新增以下入口或机制:
- PipelineRun、mirror、trigger、sync、flush、Argo sync 或 runtime patch
- 数据库迁移、合同、锁、租约、第二 authority 或 fallback。
## 定向验证
- `sh -n scripts/src/platform-infra-pipelines-as-code-remote.sh`
- `bun test scripts/src/platform-infra-pac-provenance.test.ts scripts/src/platform-infra-pipelines-as-code-bootstrap.test.ts`
- 结果:`23 pass, 0 fail, 234 expect()`
- `node` 调用 `runPacStatusFixtureChecks()`
- 结果:`ok=true, checks=34`
- `bun scripts/cli.ts platform-infra pipelines-as-code plan --target NC01`
- 结果:YAML source-of-truth、single-path、Gitea source 与 runtime-zero-docker 策略均为 `true`
- `git diff --check`
- 结果:通过。
## 合并后受控收敛
- 主代理在 PR 合并后先执行只读计划:
- `bun scripts/cli.ts platform-infra pipelines-as-code bootstrap --target NC01 --consumer agentrun-nc01-v02 --dry-run`
- 确认计划只体现 owning YAML 的同名 v2 warning-only 收敛后,再执行:
- `bun scripts/cli.ts platform-infra pipelines-as-code bootstrap --target NC01 --consumer agentrun-nc01-v02 --confirm`
- 不需要 prunepolicy 与 binding 名称保持不变,bootstrap 使用 server-side apply 原位把 live `Fail/Deny` 更新为 `Ignore``Warn/Audit`
- bootstrap 不是流水线补跑入口;禁止随后人工执行 PipelineRun、mirror、trigger、sync、flush、Argo sync 或 runtime patch。
- 运行面验收由主代理观察既有 merge 事件自动恢复,并通过原 `status``history` 与受影响 HWLAB/AgentRun 原入口完成。
## 当前阻塞
- 无源码或定向验证阻塞。
- 运行面验收仍等待 PR 合并及主代理执行受控 bootstrap,因此任务保持 `in_progress`