# R4.5 任务报告

## 结论

完成 [UniDesk #2502](https://github.com/pikasTech/unidesk/issues/2502) 的规则回归修复。后续 Workbench L1 调试以 owning YAML 为唯一端口真相，并在声明 Kafka-only 前一次审计事件入口、终态来源和配置来源，禁止 REST、snapshot 或 read-model 成为 UI 第二权威。

## 根因

- `d0ef4d2e` 已正确规定其他服务占用 L1 端口时，本服务修改 owning YAML 退让到空闲端口。
- `31106a2e` 合并并行工作区语义时重新引入等待原端口的旧规则，导致 devlevel、WebDev 与 `docs/reference/hwlab.md` 冲突。
- 既有 Kafka 验收偏重 EventSource 和 topic 连通性，未同时排除 AgentRun `/events`、`/result` polling、snapshot/read-model 补事件和 polling 配置，因此不能证明 UI 只有一个 terminal authority。

## 修改

- `$unidesk-devlevel`：
  - 同服务旧进程只通过项目 CLI 停止或重启；
  - 其他服务占用时修改本服务 owning YAML 退让；
  - 禁止命令行、临时环境变量和隐藏 fallback 形成第二端口真相。
- `$unidesk-webdev`：
  - 恢复端口退让流程；
  - 退让后从 YAML 新端口执行 `web-probe native-readiness`；
  - 交叉引用 `docs/reference/hwlab.md#workbench-浏览器回归专项`，不复制第二份 HWLAB 规则。
- `$unidesk-kafka`：
  - 新增一次有界的 Kafka-only 第二权威审计；
  - 同时覆盖 `/events`、`/result`、terminal projection、snapshot、authority 和 polling YAML/env；
  - 明确 submit/cancel POST 只可返回 identity，AgentRun 或 CI/CD 故障时不得启用 fallback。

## 验证

- 三个 skill 均通过 `quick_validate.py`，结果均为 `Skill is valid!`。
- 单次有界检索确认 L1 application/dispatcher 只保留 `terminalAuthority: "hwlab.event.v1"` 和会话读取声明，不存在 `/result`、`waitForTerminal`、`projectTerminal` 或 polling 环境变量。
- owning YAML 中的 `/v1/agent/chat/result/` 与 `/snapshot` 命中属于 `forbiddenRequestPaths` 验收规则，不是实现 fallback；其他 snapshot 命中属于 source artifact 或内存 guard 等无关领域。
- `git diff --check` 通过。

## 边界

本任务只修改 skill、MDTODO 和报告，没有修改 HWLAB、AgentRun、CI/CD 或任何运行面，不新增 runtime guard、合同测试、测试矩阵、第二 authority 或门禁。`rollout=not-applicable`。
