跳转至

Projection Remediation Eval:stale projection 统一补证路径

数据分类:synthetic_internal_demo。实验验证 Context Routerblock_and_report_gap 决策能否进入统一补证路径:先生成 projection reindex item,再由本地 worker 根据 adapter result 更新状态、记录事件、处理 timeout retry、attempt idempotency、lease owner 和 callback token 校验,同时生成 Semantic Review handoff,并保持 safe output 不泄漏原始来源、owner、内容 marker、幂等 key 或 lease token。

实验定位

上一轮 Context Router Stale Policy Eval 已经证明 stale projection 可以按任务风险分级处理:

  • 低风险:allow_with_notice
  • 中风险:require_human_confirmation
  • 高风险:wait_for_reindex
  • 关键风险:block_and_report_gap

这一轮处理关键风险的后半段:block_and_report_gap 不能只停留在 trace 里,而要进入可恢复、可审计、可交接的补证队列。

本地 Contract

本轮新增 Projection Remediation QueueProjection Remediation Event Log 作为本地 MVP contract。

text Context Router -> block_and_report_gap -> Projection Remediation Item -> Projection Remediation Worker -> Adapter Reindex Result -> Projection Remediation Event -> Semantic Review Item -> Safe Output

其中:

  • Projection Remediation Item 记录 task、context library、adapter id、source/index generation、reindex status、review status、证据路径和验收标准。
  • Projection Remediation Worker 当前是本地 contract,可把 queued_for_reindex 转成 waiting_for_adapterreindexedretry_scheduleddead_letter
  • Projection Remediation Event 记录 reindex_waitingreindex_succeededreindex_failedreindex_retry_scheduledreindex_timed_outreindex_dead_letteredreindex_callback_rejected 状态变化,不记录 source URI、owner、原始 payload、幂等 key 或 lease token,并已投影到项目 Timeline。
  • Retry Policy 当前本地默认 lease timeout 30 分钟、retry delay 10 分钟、最多 3 次 retry;每个 adapter attempt 都生成 deterministic idempotency key 和 lease token,重试时轮换 key,callback 必须带匹配的 lease token,safe output 只暴露计数。
  • Semantic Review Item 负责把补证任务交给人工确认,确认 reindex 结果和安全披露边界。
  • Safe Output 只暴露 item id、context library、risk/action、状态、adapter id 和 generation。

汇总结果

  • Case 数:3
  • 通过数:3
  • 失败数:0
  • 通过率:100%
  • queued_for_reindex:3
  • worker reindexed:2
  • worker event:7
  • worker retry scheduled:1
  • worker timeout:1
  • worker dead letter:0
  • worker callback rejected:1
  • worker idempotency key present:3
  • worker lease token present:1
  • semantic review handoff:3
  • safe output 泄漏标记:0

当前结论

  1. block_and_report_gap 已从单纯的路由 action 进入统一补证路径。
  2. 补证队列负责 reindex handoff,本地 worker 已能消费 adapter result,将 item 标记为 reindexed 并记录 reindex_succeeded event。
  3. 本地 worker 已验证 timeout retry path:waiting item 超过 lease 后进入 retry_scheduled,retry delay 到期后重新打开 waiting_for_adapter attempt,并轮换 idempotency key。
  4. 本地 worker 已验证 lease/callback guard:第二个 worker 不能抢占 active lease,错误 lease token 的 callback 会被拒绝且不会改变 reindex 状态。
  5. Worker event 已作为安全事件源进入项目 Timeline,也进入 LoopSpec Demo 的 Projection Remediation Retry Loop。
  6. Semantic Review 负责人工确认和安全披露边界。
  7. safe output 不暴露 source_uridomain://、owner、原始对象 ID、内容 marker、adapter_idempotency_keylease_token
  8. 当前实现是本地 contract,不等于真实 Postgres/OpenSearch worker、持久化队列锁或真实 adapter callback 已接入。

代码入口

  • Contract:framework/workflows/projection_remediation.py
  • 实验:framework/evals/projection_remediation_eval.py
  • 测试:tests/test_projection_remediation_eval.py
  • 运行:python scripts/projection_remediation_eval.py --write-report
  • 输出:vault/50-outputs/projection-remediation-analysis.md

下一步

  1. 将当前本地 projection remediation worker 替换为真实 Postgres/OpenSearch reindex worker。
  2. 将 Semantic Review handoff 接入真实企微或 GitHub review adapter。
  3. 把 retry policy 的 lease、死信、幂等 key 和 callback token 写入真实持久化队列,并做并发锁、重复 callback、adapter error 和 dead letter 回放测试。