# R1.5.8 任务报告

## 结论

已按 [pikasTech/unidesk#2053](https://github.com/pikasTech/unidesk/issues/2053) 补齐 PikaOA 临时测试运行面的附件配置、namespace 内附件 PVC 和数据库迁移启动链。fixture 现在渲染严格 runtime YAML 所需的 `attachment.storageRoot`、`attachment.maxBytes`，并按“基础对象与 PostgreSQL 就绪、迁移 Job 完成、API/Worker rollout”顺序执行。

## 实现

- owning YAML：`config/fixtures/pikaoa-test-target.yaml#testRuntime.targets.TEST01` 声明附件 PVC、迁移镜像、Job 名称、重试和产品 CLI 命令。
- renderer：`scripts/src/pikaoa-test-target.ts` 只读取并校验 YAML 形状，渲染 PVC、迁移 Job、API 挂载和三阶段启动脚本。
- 可见性：`plan` 显示附件与迁移的脱敏摘要；PostgreSQL、迁移 apply/wait 和业务 rollout 分别返回具名失败码。
- 审核纠偏：迁移命令未显示 `migrate up` 时返回 `migration-command-unrecognized blocking=false`，不再由 parser 阻塞；fixture 的有效命令保持不变。
- 文档：`docs/reference/pikaoa.md` 记录附件存储归属和迁移先于业务 workload 的长期契约。
- 产品静态核对：`/root/pikaoa/internal/config/config.go` 要求附件字段；`/root/pikaoa/internal/cli/root.go` 与 README 确认 `pikaoa migrate up --config <path>` 入口。

## YAML-first 分类

- `keep-domain-special`：PikaOA 严格 runtime YAML、产品内置迁移 Job、namespace 生命周期内附件 PVC。
- `remove-code-default`：附件 volume 名直接复用 YAML `claimName`；未新增容量、重试或 StorageClass 隐藏默认。
- `legacy-retire`：不适用。

## 验证

- `bun --check scripts/src/pikaoa-test-target.ts`：通过。
- `bun scripts/cli.ts check`：11/11 通过。
- 默认 `pikaoa test-target plan --output json`：`configured=false`、`mutation=false`、`valuesPrinted=false`。
- fixture `plan` 结构化断言：包含 `PersistentVolumeClaim`、`Job`、API/Worker `Deployment`，迁移阶段为 `after-postgres-before-workloads`，`validationOnly=true`、`mutation=false`、`valuesPrinted=false`，未出现数据库 URL。
- fixture `status`：`remoteQueried=false`、`reason=validation-only-target`。
- 非标准迁移命令只生成一个 `migration-command-unrecognized blocking=false` warning，命令仍返回 `ok=true`、`mutation=false`。
- `git diff --check`：通过。

## 风险与边界

- fixture 只声明验证用 `registry.invalid` 镜像；真实专用测试 target 仍需由 owning YAML 指定可用镜像与 StorageClass。
- 同一 instance 的失败或已完成 Job 不承担原地重跑契约；调试重试应使用新的临时 instance，或先通过受控 `stop` 删除精确归属 namespace。
- 未执行 `start/stop`，未连接集群，未修改产品仓、正式 namespace、CI/CD、GitOps 或公网暴露。
- 实现 checkpoint：`03ca5ffe`；审核纠偏 checkpoint：`0b6ad4ef`。
