feat: add rectification event decision contract v2

This commit is contained in:
Jesse_Chen
2026-08-15 00:56:06 +08:00
parent 21fce9513c
commit 83fef19779
24 changed files with 3637 additions and 562 deletions
+15
View File
@@ -3167,3 +3167,18 @@
- 防复发:不得把 Skill/Case read gate、focus 目标、attempt 成功归属或 Skill 身份降级为 Prompt 约定;公开正文、usage、Activity 与 receipt 必须只来自 `successful_attempt_id`;失败/重试不得重复扣费或重复 evidencefocus resolve 必须引用服务器持久化 focus/evidence,不能解析 Agent prose;历史 Case 必须继续绑定创建时可核验的 immutable Skill package。
- 相关记录:BUG-173、BUG-174、BUG-175、BUG-179、BUG-181、BUG-185
- 修复版本:本次功能分支提交(精确 SHA 以提交与远程分支核对结果为准;未合并 staging,未部署)
## BUG-187 | 生时校正详细事件被压平,候选采用与精确确认缺少版本化服务器门禁
- 状态:resolved(本地候选,未部署)
- 首次发现:2026-08-14
- 最近更新:2026-08-14
- 影响面:V9/V10 生时校正事件评分输入、候选排序与展示、候选结果持久化、候选采用/精确确认 RPC、Activity 技法凭证。
- 用户现象:教育、事业、关系、迁居和财务事件在进入 Python 评分前被压成粗粒度类型;Web 根据 margin、候选数量和事件 domain 自行判断置信度、采用权限与已执行技法;候选采用可能在代表分钟上隐式升级为 confirmed;所谓 candidate ID 实际是调用方提交的 `HH:MM`,不能证明来自服务器保存的候选结果。
- 触发条件:提交 `career_entry/career_exit``relationship_commitment/relationship_separation` 等生命周期事件进行候选评分;展示候选卡或 Activity;采用代表候选;或调用旧的 time-based candidate RPC。
- 根因:Python 事件合同只接受少量粗粒度 kindTypeScript adapter 承担了有损映射、排序/tie/置信度/permission 和 technique 推断;结果表与 RPC 只保存调用方提供的布尔值和候选 JSON,没有版本化 decision receipt、真实 execution ledger 与服务器 candidate UUID 边界;历史 accept RPC 仍可把 accepted 与 confirmed 混合。
- 修复:引入 Event Contract v2 与 Decision Policy v2,由 Python 返回版本化 `candidate_decisions``decision_receipt` 和真实 `execution_ledger`,日期精度进入服务器评分;Web 只做严格安全投影,不再自行推断 rank、tie、margin confidence、selection gate 或已执行技法。forward-only migration 保存政策与执行凭证,以服务器生成的 candidate UUID 绑定 result,并将 representative candidate 重写为持久化 UUIDaccepted 与 confirmed 使用独立 RPC 和状态门禁,精确确认必须引用已接受候选、有效 consent/source turn,旧 time-based RPC 对 `service_role` 撤权。Case/Dossier 恢复路径同时投影完整 v2 receipt、ledger、selected candidate 与 display gate。
- 验证:Python 服务回归 36 passedTypeScript 核心合同 49 passed、0 failedmigration 与 PR-4 真实 PostgreSQL 场景 75 passed、0 failedV9/V10/candidate 全量聚焦门禁 219 passed、0 failed,覆盖 request replay、payload conflict、候选 UUID 归属、representative UUID 缓存一致性、accepted/confirmed 原子分离、consent/source-turn 精确确认门禁、legacy RPC 撤权与 Case/Dossier 恢复。目标 ESLint 0 error/0 warningPython Ruff 与 `py_compile` 通过,`git diff --check` 通过。全库 `tsc --noEmit` 仅剩 5 个既有无关测试错误:`production-data-migration.test.ts` 两处 fixture 字段缺失、`staging-backend-workflows.test.ts` 三处低 target 正则 flag。
- 防复发:详细事件不得在 adapter 层压平;“有候选”不得等于“允许采用”;Web 不得自行推断执行技法或业务 tie;采用候选永远不能隐式确认精确分钟;candidate action 必须引用服务器持久化 result 中的 candidate UUID。
- 相关记录:BUG-172、BUG-179、BUG-184、BUG-186
- 修复版本:本次功能分支提交(精确 SHA 以提交与远程分支核对结果为准;未合并 staging,未部署)