Skip to content

feat(arc): 赛马输家逐项消融(开发窗口单因素回测,结果回流研究记忆) - #80

Draft
Shadowell wants to merge 7 commits into
mainfrom
codex/loser-ablation
Draft

Shadowell wants to merge 7 commits into
mainfrom
codex/loser-ablation

Conversation

@Shadowell

Copy link
Copy Markdown
Owner

概要

赛马被系统判负(lost_futility、lost_exam)且相对母体改了两处及以上的挑战者,会在开发窗口上逐项消融:先测母体基线,再把每一处改动单独加到母体上回测,得出每项改动是有害、有益还是中性;结果作为单因素观察回流研究记忆,下一轮 AVO 可以据此提出「只留有益改动」的收窄候选。结论是开发窗口内的单因素效应,不含改动之间的交互,不是因果结论。

依赖与合并顺序

做了什么

  • 账本:迁移 0051 新增 arc_ablation_runs(每个 target/挑战者一行,唯一键)与 arc_ablation_steps(每项改动一步,唯一键 (run_id, step_key));迁移幂等可重跑,SQLite 与 PostgreSQL 都测过。
  • 引擎 arc/ablation.py:从 arc_forward_outcomes 挑已对接血缘的输家;冻结开发窗口(as_of 为前一天);走与 AVO develop 同一条 ARCSelfTestService.run(purpose="development") 路径(同成本、资金、标的口径);self_test.run 新增可选参数 data_reference,让候选直接用基线回测的封存数据,避免为带结构算子的候选再隐式建一行基线,从而每个输家恰好「改动数 + 1」次回测(不传时 AVO 行为不变)。
  • 幂等与恢复:BitPro 幂等键由母体身份、开发窗口、资金、标的与周期派生、不含输家身份,同母体同窗口的同一改动复用变体行与回测作业,复用不计费;检查点存在步骤行,语义仿照 BacktestActionRunner(读失败有界重试、中断有界续跑、单作业等待上限 24 小时、版本变化原样记失败);计费点是作业身份落库,崩溃后重放同一幂等键不重复建作业、不重复计费。
  • 预算:EvolutionConfig 新增 ablation_enabled(默认开)、ablation_max_backtests_per_day(默认 6,按 UTC 日)、ablation_max_backtests_per_loser(默认 6,范围 3–6);不占每日研究名额;一次只跑一个回测。旧的已存配置照常加载。关闭:把 ablation_enabled 设为 false。
  • 记忆回流:_memory 在前向结果之后、开发记忆之前插入 type=ablation 条目(memory_id 形如 ablation:<run_id>),只投影本轮已展示的前向输家的已完成消融;与前向结果合计不超过 8 条,模型可见的前 20 条里开发记忆至少 12 条;消融窗口不得晚于本轮开发窗口结束日;出错只记运行错误,研究照常。AVO 系统提示说明含义与引用方式;研究证据视图单列 ablation_references。
  • 可观察:GET /api/v1/arc/evolution 的 budget.ablation(当日用量与上限、各状态任务数、原因计数、输家计数、下次检查时间;独立事务,失败只降级为 unavailable);效果报告新增 ablation_* 字段;只读列表 GET /api/v1/arc/evolution/ablations(不含原始回测指标)。失败都写具体原因码(如 parent_changed_since_race、parent_relay_hold、daily_budget_exhausted、too_many_changes),不补零。

安全边界

  • 只回测、只用开发窗口,从不请求最终验证窗口;不碰 Paper/实盘,不建 ARC 任务,不进 incubation 与 Paper 审核(测试用一个只允许五个回测相关方法的假客户端证明)。
  • 消融行是停止状态、无正式 Paper 审核绑定。已对照 BitPro main(59c869ca)核实:auto_enroll_uncontested_variants 只纳管 has_formal_review_binding 为真的候选,relay_variants 也跳过未审核的候选,所以消融行不会被当成挑战者,也不会进入 tried_variants。不需要新增 purpose,BitPro 未改。
  • 影响面:budget_status 与 _memory 的 GitNexus 影响分析为 HIGH(tick 扫描依赖),两处新增逻辑都在独立事务或 try/except 内,异常只降级自身;相对 feat(arc): 赛马输赢回流研究记忆——前向结果表、裁判记账与沿接班链回流 #79 分支的 detect_changes 为 LOW,无受影响执行流程。

验证

  • 新增 tests/test_arc_ablation.py、test_arc_ablation_schema.py、test_arc_ablation_postgres.py(真 PostgreSQL)、test_arc_ablation_observability.py、test_arc_ablation_memory.py,并在 test_arc_self_test.py、test_arc_evolution.py、test_arc_external_surface.py、test_avo_evidence.py 补充用例。
  • 对 9 处关键守卫做过变异检验(作业复用、计费标记、母体身份校验、隐式基线、每日上限、名额共享、记忆顺序、证据视图隔离、记忆失败隔离),去掉任一处都有用例失败;每日上限有两道检查,同时去掉才失败,属有意冗余。
  • 完整检查(LC_ALL=en_US.UTF-8):前端 lint、15 项测试与构建,ruff、mypy(319 个文件)、pytest 2325 项全部通过。前端复用主工作区依赖、未重新安装。

未线上实测与已知限制

  • 未在生产上跑过;首次运行会对已有的已关联输家逐个排队,每天最多 6 次回测。
  • 需要 BitPro 配合的点(本 PR 未改 BitPro):BitPro 每个母体只扫描最近 400 条 purpose=candidate 回执,消融行会占用这个扫描窗口(复用与每日上限使影响有限,长期可在扫描时排除无审核绑定的行);BitPro 谱系接口需要管理员会话,未用于历史回填。
  • 崩溃恰好发生在「记下续跑次数」与「发出续跑请求」之间时会多算一次续跑(与原 BacktestActionRunner 相同的边界)。
  • 前向赛马的时间段可能与下一轮最终验证窗口在日历上重叠;记忆条目只给结论级数字,最终验证仍按同窗基线比较与门禁执行,不因此放宽。
  • docs/agent_architecture_and_interview_handbook.pdf 未重新生成,其中迁移数仍为旧值。

实现由 DeepSeek V4.1 Flash 按 Claude 的任务书执行,每个提交都经 Claude 审查。

🤖 Generated with Claude Code

Shadowell and others added 7 commits October 22, 2026 09:13
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
@Shadowell
Shadowell deleted the branch codex/race-outcome-memory October 22, 2026 02:16
@Shadowell Shadowell closed this Oct 22, 2026
@Shadowell Shadowell reopened this Oct 22, 2026
@Shadowell
Shadowell changed the base branch from codex/race-outcome-memory to main October 22, 2026 02:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant