Projection Remediation Eval:stale projection 统一补证路径¶
数据分类:synthetic_internal_demo。实验验证 Context Router 的 block_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 Queue 和 Projection 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_adapter、reindexed、retry_scheduled或dead_letter。Projection Remediation Event记录reindex_waiting、reindex_succeeded、reindex_failed、reindex_retry_scheduled、reindex_timed_out、reindex_dead_lettered、reindex_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
当前结论¶
block_and_report_gap已从单纯的路由 action 进入统一补证路径。- 补证队列负责 reindex handoff,本地 worker 已能消费 adapter result,将 item 标记为
reindexed并记录reindex_succeededevent。 - 本地 worker 已验证 timeout retry path:waiting item 超过 lease 后进入
retry_scheduled,retry delay 到期后重新打开waiting_for_adapterattempt,并轮换 idempotency key。 - 本地 worker 已验证 lease/callback guard:第二个 worker 不能抢占 active lease,错误 lease token 的 callback 会被拒绝且不会改变 reindex 状态。
- Worker event 已作为安全事件源进入项目 Timeline,也进入 LoopSpec Demo 的 Projection Remediation Retry Loop。
- Semantic Review 负责人工确认和安全披露边界。
- safe output 不暴露
source_uri、domain://、owner、原始对象 ID、内容 marker、adapter_idempotency_key或lease_token。 - 当前实现是本地 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
下一步¶
- 将当前本地 projection remediation worker 替换为真实 Postgres/OpenSearch reindex worker。
- 将 Semantic Review handoff 接入真实企微或 GitHub review adapter。
- 把 retry policy 的 lease、死信、幂等 key 和 callback token 写入真实持久化队列,并做并发锁、重复 callback、adapter error 和 dead letter 回放测试。