fix(pikaoa): 允许终态测试步骤安全重跑
This commit is contained in:
@@ -2,7 +2,18 @@
|
||||
|
||||
## 结论
|
||||
|
||||
已在 PR #2084 完成 NC01 固定 `pikaoa-test` 测试运行面的 YAML-first Secret 初始化闭环和单步 CLI 收口。测试运行面使用 PK01 host PostgreSQL 独立 `pikaoa_test` role/database、固定 NodePort `32080`,不创建专用测试集群、动态 namespace 或 namespace-local PostgreSQL,也未恢复 dedicated 门禁。
|
||||
已在 PR #2084 完成 NC01 固定 `pikaoa-test` 测试运行面的:
|
||||
|
||||
- YAML-first Secret 初始化闭环;
|
||||
- 单步 CLI;
|
||||
- 可重跑异步状态机。
|
||||
|
||||
测试运行面边界:
|
||||
|
||||
- 使用 PK01 host PostgreSQL 独立 `pikaoa_test` role/database;
|
||||
- 固定使用 NodePort `32080`;
|
||||
- 不创建专用测试集群、动态 namespace 或 namespace-local PostgreSQL;
|
||||
- 不恢复 dedicated 门禁。
|
||||
|
||||
## 实现
|
||||
|
||||
@@ -18,16 +29,31 @@
|
||||
- 新增 `--step foundation`;
|
||||
- foundation 不要求 `--commit` 或业务 Secret,只提交带所有权标签的固定 Namespace/PVC;
|
||||
- migration、api、worker、web 和 all 继续要求 commit 与 Secret source;
|
||||
- plan 只投影当前 step 所需对象,并保持 Secret 脱敏。
|
||||
- plan 只投影当前 step 所需对象,并保持 Secret 脱敏;
|
||||
- request identity 包含 target、instance、commit、step 和当前 step 稳定 structural manifest fingerprint;
|
||||
- request fingerprint 继续脱敏 Secret `stringData`,并排除每次渲染变化的 `pikaoa.unidesk.io/expires-at`;
|
||||
- 完全相同 request 返回已有任务;
|
||||
- 不同 request 遇 queued/running 且 worker 存活时返回 `start-instance-conflict`;
|
||||
- 不同 request 遇终态或 worker-missing 时,原子退役旧有界状态目录并提交新任务;
|
||||
- `status` 继续读取同一 `target/instance/step` 的最新任务,不引入第二状态库、控制器或租约。
|
||||
- `docs/reference/pikaoa.md`:
|
||||
- 删除专用测试集群、动态 namespace 和临时 PostgreSQL 旧设计;
|
||||
- 删除动态 namespace 和临时 PostgreSQL 旧设计;
|
||||
- 写明 foundation、Secret sync、migration、api、worker、web 顺序;
|
||||
- 写明终态可重跑、运行中去重和稳定 request fingerprint;
|
||||
- 写明先稳定 CLI,再建设独立 test CI/CD,且不得成为业务阻塞门禁。
|
||||
|
||||
## 验证
|
||||
|
||||
- `bun --check scripts/src/pikaoa-test-target.ts`:通过。
|
||||
- `bun test scripts/src/pikaoa-test-target-async.test.ts`:2 pass,0 fail。
|
||||
- 异步回归覆盖:
|
||||
- 同 request 在任务终态后仍返回 `start-already-succeeded`;
|
||||
- 不同 commit 在旧任务运行中返回 `start-instance-conflict`;
|
||||
- 不同 commit 在旧任务终态后重置并重新提交;
|
||||
- 同 commit 但探针 manifest 变化时重置并重新提交;
|
||||
- 仅 `expires-at` 渲染时间变化时仍识别为同 request;
|
||||
- worker-missing 时允许安全重置并重新提交;
|
||||
- foundation 终态后可用新 request 重跑。
|
||||
- `bun scripts/cli.ts check --syntax-only`:11 pass,0 fail。
|
||||
- `pikaoa test-target plan --step foundation`:
|
||||
- `readyForMutation=true`;
|
||||
|
||||
@@ -89,7 +89,25 @@
|
||||
- foundation 不需要 `--commit`,也不检查业务 Secret。
|
||||
- migration、api、worker、web 和 all 必须显式提供 `--commit`。
|
||||
- 每个 `start` 立即返回任务 ID;使用同一 target、instance 和 step 的 `status` 查询终态。
|
||||
- 相同任务重复提交只返回已有任务状态,不并行创建第二任务。
|
||||
- request identity 包含:
|
||||
- target;
|
||||
- instance;
|
||||
- 产品 commit;
|
||||
- step;
|
||||
- 当前 step 的稳定 structural manifest fingerprint。
|
||||
- request fingerprint 对 Secret `stringData` 只保留 key 结构和脱敏占位,不包含 Secret 原值。
|
||||
- request fingerprint 排除 `pikaoa.unidesk.io/expires-at` 等每次渲染变化的易变字段。
|
||||
- 完全相同 request 重复提交只返回已有任务状态,不并行创建第二任务。
|
||||
- 不同 request 遇旧任务处于 queued/running 且 worker 存活时返回 `start-instance-conflict`。
|
||||
- 不同 request 遇旧任务已 succeeded/failed/canceled,或 queued/running 但 worker 明确缺失时:
|
||||
- 原子退役该 step 的旧有界状态目录;
|
||||
- 继续使用同一 `target/instance/step` 状态路径提交新任务;
|
||||
- `status` 只读取该 step 的最新任务。
|
||||
- foundation 也遵循相同规则。
|
||||
- foundation 需要显式形成新 request 时,可以:
|
||||
- 提供新的 `--commit` 修订标识;
|
||||
- 修改 foundation 的稳定 manifest 结构。
|
||||
- 不为重跑引入第二状态库、控制器、租约或长期历史存储。
|
||||
- 迁移、rollout 或运行面查询失败返回具名失败码,不静默进入下一阶段。
|
||||
- OTel exporter、配置版本和 commit 对齐漂移只产生 `blocking=false` warning,不恢复 dedicated 门禁。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user