Pull Request已成功合入, 合并人@openJiuwen-bot
(感谢 zhitinggao 的贡献)🤖 正在生成合并请求摘要,请稍候…


🤖 AI 代码检视正在进行中,请稍候…


欢迎来到 openJiuwen 社区
Hey @AFSDFASD , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。
联系指引
有疑问可以联系 SIG: sig-agent-core ,
维护者是: @seanzhang_cn, @xinyu-jiuwen ,
审核者是: @alan_cheng, @deyang, @iamcandiceguo, @yangzequ .


⚠️ 本次变更过大(46 个可审文件、31090 行,预估需 26 轮分片审查),已超出 AI 代码评审的处理范围,本次跳过。建议拆分为更小的 PR 以获得有效评审。


⚠️ 本次变更过大(46 个可审文件、31090 行,预估需 26 轮分片审查),已超出 AI 代码评审的处理范围,本次跳过。建议拆分为更小的 PR 以获得有效评审。


The pipeline(pipeline number:2497) is running. Please wait a moment...


The pipeline(pipeline number:2497) is running. Please wait a moment...


The pipeline(pipeline number:2497) is running. Please wait a moment...


PR #2497 检视报告
主题:证据驱动的递归 harness 演化(RSI evidence loop)
规模:48 个文件,+31649 / -1601,新增 262 个单元测试
一、实现逻辑梳理
本 PR 构建了一条「证据 → 因果假设 → 干预 → 反馈 → 改进者演化」的闭环,核心模块如下:
1. 证据压缩(evaluation_result_analyzer/evidence_compactor.py,新增)
build_causal_evidence_digest()生成确定性压缩包(no_llm_summarization: True),保留 trial 边界、精确数字、结构化工具参数;按「失败优先/状态变更/内容承载读/终端窗口」动态选取动作。- 响应摘要在策略里显式声明为 display views(非 task-agent observations),并在
ANALYZER_EVIDENCE_COMPACTION标记中保留 raw evidence pointers —— 防止把压缩视图当作因果证据。 _compact_trial_evaluation()对缺失的 grader 字段标记not_instrumented而非当作 0,避免制造虚假对比。
2. 因果调查(evidence_investigation.py,新增)
execute_causal_investigation()只执行控制器持有的只读证据操作(check_relation/compare_numeric_change/search_trace/inspect_artifact/search_repository等),策略声明arbitrary_shell_or_path_access: False。- 路径安全:所有文件读取经
resolve()+is_relative_to(root/case_dir)校验,可抵御符号链接逃逸;Windows 长路径有_windows_long_path处理。 inspect_artifact刻意排除 evaluation metadata —— 修复了「判分描述被当作工件存在证明」的假证据问题。
3. 诊断流程与假设门槛(analyzer.py + member_optimizer/hypothesis.py)
- 诊断 agent 先产出调查计划 → 控制器执行证据操作 → 生成最终诊断;
causal_investigation_required=True(默认)下无调查不得出诊断;截断 JSON 归类为RetryableModelOutputError触发重试。 compile_optimization_hypotheses()(v3→v4)新门槛:evidence_status=confirmed且存在 unresolved 假设 → 跳过;supported_hypothesis允许与未决备选共存(有明确注释与测试背书);verification_status != verified的假设不能绑定优化目标。旧版「唯一 supported 即绑定」保留为向后兼容路径。
4. 需求结果统一(evaluator/requirement_results.py,新增)
- 用统一的 per-requirement 结果替换原先
FAIL_TO_PASS/PASS_TO_PASS/atomic_checks三套解析;_verifier_deltas_by_case()改写在其上,partial_progress定义收敛为「有新通过且无回归」。
5. 改进者演化(improver_evolution/,新增包)
VersionedImproverPolicy:不可变、可序列化、带 canonical digest 的策略快照,父子版本链 +training_ledger_digest锚定训练数据。feedback_analysis.py:跨 cohort 聚合候选反馈账本(min_support_cohorts门槛),产出稳定模式与高价值增益信号。meta_validation.py:成对未见 checkpoint 上的宏平均对比(best-of-k gain / top-m gain / selection regret / 回归率 / 基础设施失败率),非退化容差 + 指标全有或全无原则 +offline_rerank模式明确「仅 ranker 证据、不可晋升完整改进者」。
6. 兄弟候选与反馈账本(single_harness/)
rank_candidate_proposals()在评估前冻结排名(static_priority_v1:executable/coverage/atomicity/duplicate 四特征),语义指纹去重;build_candidate_feedback_cohort()产出 Ledger v1 cohort,搜索指标(best-of-k、top-m、selection regret)只在「排名冻结 + 身份一致 + 增益完备」时计算,否则给出明确 unavailable 原因(共 12 类)—— 反事实指标诚实性做得扎实。- cohort manifest 以输入身份(parent refs、eval ref、hypotheses、frozen cases、policy digest)幂等复用,重试安全。
7. 执行契约与原子束(member_optimizer/execution_contract.py,新增)
evaluate_role_execution()统一判定动作满足性:直接成功 /dependency_failed回退被跳过 / 失败主动作被成功回退替代;同束(role+单 issue)任一失败时,action_executor将成功的部分结果降级为not_merged,verification 增加role_action_bundle:检查且列入不可修复前缀 —— 杜绝半合并候选。
8. 其他
rail动作组全链路支持(scaffold / rails.yaml manifest 规范化 / deterministic remove / 校验)。model_call.py:transient 标记扩充(网关 5xx、连接错误、限流、DB 启动中)、状态码正则、指数退避(1s 起、10s 封顶、RetryableModelOutputError不延迟)+ warning 日志。team_evaluator.py:基础设施异常按 transient 标记重试(退避 min(2^n,4)s,清理 case 输出目录)。trajectory_usage.py:支持 OpenAI 风格 messages 轨迹;python/code工具与save/to_csv/to_excel/to_json/to_parquet纳入持久编辑判定。- harness 模板新增
SubmissionCheckpointRail(反例审计 + 绑定审计 + 语义发布违规拦截),带模型调用预算与超时上限。 data_loader.load_files()支持显式冻结数据集文件,隔离同目录其他 split。
二、发现的问题
N1(中)_resume_fingerprint_matches 的 12→13 迁移分支在生产不可达
_initial_fingerprint 已从 version 10 升到 18,而迁移分支要求 requested.optimization_chain_version == 13 才生效 —— 生产请求恒为 18,该兼容路径永远不会命中,仅被单测直接调用(test_default_i0_can_resume_pre_policy_chain_state)。同时所有旧状态(v10 及中间开发版)resume 均抛 ValueError。若「跨版本一律失效」是本意,建议删除死分支或在 PR 描述中明确 resume 不兼容;若希望保留迁移能力,应将迁移目标与当前版本解耦。
N2(低)model_call.py 重试策略三点
_TRANSIENT_STATUS_RE把 409 列为 transient:持续性 409(如冲突操作)会被重试满 21 次(约 3 分钟)才暴露。- 退避无 jitter:并发 case 同时命中 429 时步调一致重试,放大网关压力(
team_evaluator重试同样无抖动)。 _TRANSIENT_CONNECTOR_BACKEND_MARKERS先于 non-retryable 检查:同时含 DB 启动标记与 "invalid api key" 的消息会重试。标记足够窄、风险低,但把 non-retryable 放最前更稳妥。
N3(低)trajectory_usage._successful_tool_steps 行为变化
命中顶层 steps/messages 容器后不再深入 step 内部嵌套结构(旧实现会递归,可能重复计数)。新语义有测试覆盖,但依赖嵌套扫描的旧轨迹格式 usage 计数会静默下降,建议在变更说明中提示。
N4(信息)严格证据门槛的兼容性影响
causal_investigation_required=True 默认 + 假设需 verification_status=verified:旧版 analyzer 产物(无 verification_status 字段)不再产生优化目标,管线在候选生成前停止(有对应测试)。这是 PR 的核心意图,但运维侧需知晓旧 analysis ref 无法继续驱动优化。
N5(信息)harness 控制器成本
SubmissionCheckpointRail 每任务额外执行反例 + 绑定两次审计模型调用;已有 _max_controller_model_calls 与超时上限兜底,评估单 case 成本会上升,属预期权衡。
三、亮点
- 反事实指标的诚实性:排名先冻结后评估 + 12 类显式 unavailable 原因,杜绝用事后信息美化搜索指标。
- 证据与观测分离:压缩视图、判分描述均不得冒充任务观测,从源头堵住「重复结局描述伪装因果证据」。
- 原子性贯彻到底:cohort 冻结、动作束全有或全无、不可修复前缀收敛修复循环。
- 路径安全:证据调查全程 resolve + is_relative_to 校验,防符号链接逃逸。
- 测试覆盖充分(262 个新测试),关键契约(幂等、迁移、门槛、去重)均有针对性用例。
结论:整体设计严谨、防御性到位,问题以中低严重度为主。N1 建议合入前澄清(删死代码或说明 resume 破坏性);N2/N3 可后续跟进。


/lgtm
/approve


Paired: GitHub #904 ↔ GitCode !2497
What type of PR is this?
/kind feature
Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入)
Linked Closing Issues: