# R1.3.12 任务报告

## 结论

PikaOA outbox 已建立显式 `record-only` / `handler-required` 处理策略。当前无消费者的既有业务事件会由 Worker 一次标记为 processed；未声明 topic 与缺少真实 handler 的 `handler-required` 事件仍保持 `handler_not_registered` 重试/失败语义。

## 源码交付

- 产品 issue：[pikainc/pikaoa#38](https://github.com/pikainc/pikaoa/issues/38)。
- 产品 PR：[pikainc/pikaoa#39](https://github.com/pikainc/pikaoa/pull/39)。
- 初始提交：`7717415f68cad64ac90b7429e19adb0f3046a554`。
- 纠偏提交：`215eea77c8f469f4acade785a44d7ba89344a12a`。
- 合并提交：`2ef02f4560c1383f8b36d694ede32c1e8d43a492`。

## 实现

- 模块发布事件显式声明处理策略，Worker 从启用模块描述符构建 registry，不维护第二份 topic 清单。
- 附件 `.v1` transport topic 与合同、发票、身份、伙伴既有无版本 topic 均映射到真实 producer topic。
- `record-only` 事件不调用虚假 handler、不产生第二消息，保留 PostgreSQL outbox 事实并记录有界 Prometheus 指标与 OTel span 属性。
- `HandlerRegistry.Register` 拒绝未声明 topic，且只允许 `handler-required` topic 注册真实 handler。
- 未清洗或重放历史 failed outbox 行，未修改数据库迁移、CI/CD、Kubernetes、PK01 或运行面。

## 验证

- Target：`NC01:/root/pikaoa/.worktree/outbox-handling-policy`。
- 真实附件 `.v1`、既有无版本 topic、未声明 Register、未声明 Processor 和缺失 handler 合同测试通过。
- `go test -p 1 -count=1 ./...` 通过。
- `git diff --check` 通过。
- 主代理完成架构与 bounded diff 审核后执行 guarded merge。

## 残余边界

未来新增 producer 时必须继续通过模块描述符声明显式策略，并用合同测试固定 transport topic；本任务不要求部署，也不修改当前异常的 CI/CD 基础设施。
