# R1.5.9.5 任务报告

## 结论

已在 PR #2084 完成 NC01 固定 `pikaoa-test` 测试运行面的：

- YAML-first Secret 初始化闭环；
- 单步 CLI；
- 可重跑异步状态机。

测试运行面边界：

- 使用 PK01 host PostgreSQL 独立 `pikaoa_test` role/database；
- 固定使用 NodePort `32080`；
- 不创建专用测试集群、动态 namespace 或 namespace-local PostgreSQL；
- 不恢复 dedicated 门禁。

## 实现

- `config/secrets-distribution.yaml`：
  - 声明 `platform-infra/pikaoa-test.env`，必需 key 为 `DATABASE_URL` 与 `PIKAOA_SESSION_SECRET`；
  - `createIfMissing` 只生成 `PIKAOA_SESSION_SECRET`，保留 platform-db export 写入的 `DATABASE_URL`；
  - 增加 `pikaoa-test-nc01` target，固定 `NC01:k3s`、`pikaoa-test` namespace 和 `pikaoa-test` scope；
  - 增加 `pikaoa-test-runtime` Secret 映射，继续消费既有管理员和员工 external raw sources。
- `config/pikaoa.yaml`：
  - `testRuntime.runtime.sessionSecret` 改读 `platform-infra/pikaoa-test.env#PIKAOA_SESSION_SECRET`；
  - 保留 PK01 `pikaoa_test` 数据库、固定 namespace、附件 PVC、NodePort、OTel/Prometheus 和单步工作负载声明。
- `pikaoa test-target`：
  - 新增 `--step foundation`；
  - foundation 不要求 `--commit` 或业务 Secret，只提交带所有权标签的固定 Namespace/PVC；
  - migration、api、worker、web 和 all 继续要求 commit 与 Secret source；
  - 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 旧设计；
  - 写明 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`；
  - `missingFields=[]`；
  - `blockers=[]`；
  - 仅投影 Namespace 与 PersistentVolumeClaim；
  - `secretRequired=false`；
  - `valuesPrinted=false`。
- `secrets plan --scope pikaoa-test`：
  - target 为 `pikaoa-test-nc01`；
  - Secret 为 `pikaoa-test-runtime`；
  - 投影四个声明 key；
  - `mutation=false`；
  - `valuesPrinted=false`。
- `git diff --check`：通过。

## 边界

- 本任务只修改代码、YAML、测试和文档。
- 未执行 foundation、Secret sync、migration、API、Worker、Web 或任何部署。
- 未读取、打印或从 Kubernetes 反解 Secret 值。
- 原入口真实部署与 NodePort 验收由主代理在合并后按文档顺序执行。
