Files
pikasTech-unidesk/docs/MDTODO/details/pr-merge-driven-automatic-delivery/R4.1.1_Task_Report.md
T

6.4 KiB
Raw Blame History

R4.1.1 任务报告

状态

  • MDTODOR4.1.1
  • GitHub issuepikasTech/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/provenance 观察项不再作为以下入口的阻断条件:
    • 业务 admission 与 bootstrap
    • status、history 与 debug
    • 外层 PaC delivery eligibility。
  • admission 漂移输出结构化 blocking: false warning;真实 consumer bootstrap 缺失不降级:
    • runner ServiceAccount、RoleBinding 或 Argo repository credential 未就绪时,status 保持 ok: false
    • 顶层 status 继续要求 bootstrap_ready=true,避免 false green。
  • 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, 239 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 更新为 IgnoreWarn/Audit
  • bootstrap 不是流水线补跑入口;禁止随后人工执行 PipelineRun、mirror、trigger、sync、flush、Argo sync 或 runtime patch。
  • 运行面验收由主代理观察既有 merge 事件自动恢复,并通过原 statushistory 与受影响 HWLAB/AgentRun 原入口完成。

当前阻塞

  • 无源码或定向验证阻塞。
  • 运行面验收仍等待 PR 合并及主代理执行受控 bootstrap,因此任务保持 in_progress

启动 backlog 后续

  • warning-only admission 收敛后,新 PaC run 已可创建,但 NC01 官方 watcher 在重放历史 PipelineRun 时暴露第二断点:
    • Pod pipelines-as-code-watcher-7f6c87497c-7lhfh/live 在集中 reconcile 期间超过 5s timeout
    • 默认 liveness 在 initialDelaySeconds: 5failureThreshold: 3 下连续失败并重启容器;
    • 同期 readiness 失败只影响流量就绪,liveness 重启会反复打断历史 backlog 初始同步。
  • owning YAML 新增 release.workloads.watcher,明确声明:
    • watcher Deployment 与 container identity
    • startup、readiness 与 liveness 三类 HTTP probe
    • startup backlog 窗口和 liveness 延迟全部由 YAML 持有,代码不提供隐藏数值默认值。
  • PaC bootstrap 下载官方 v0.48.0 release manifest 后,在 apply 前按 YAML 精确匹配 watcher Deployment/container 并渲染探针:
    • 未匹配 Deployment 或 container 时直接失败;
    • 不使用 runtime patch、第二份 manifest 或手工 kubectl patch
    • 后续官方 release reapply 仍由同一 bootstrap 渲染相同 desired state。
  • 启动窗口采用:
    • startup:延迟 30s,每 10s 检查,单次 timeout 5s,允许 60 次失败;
    • liveness:延迟 180s,每 10s 检查,允许 6 次失败;
    • readiness:保留 5s 延迟、10s 周期和 3 次失败,只控制就绪状态。
  • 定向验证:
    • bun test scripts/src/platform-infra-pipelines-as-code-bootstrap.test.ts13 pass, 0 fail, 66 expect()
    • 使用真实 v0.48.0 上游 manifest 验证:共解析 35 个对象,精确命中 pipelines-as-code-watcher/pac-watcher 并渲染三类 YAML-owned probe
    • bun scripts/cli.ts platform-infra pipelines-as-code plan --target NC01 --consumer hwlab-nc01-v03 --json:成功披露 watcher probeswarnings=[]
    • git diff --check:通过。
  • 合并后只允许由 PaC migrated consumer 的正常 PR merge 自动链触发交付;不得人工执行 PipelineRun、mirror、trigger、sync、flush、Argo sync、runtime patch 或删除历史业务对象。