Skip to content

feat(consolidation): 整理默认改为 resolution=auto_v1(C-B2) - #140

Merged
leafliber merged 2 commits into
mainfrom
feat/consolidation-default-auto
Nov 11, 2026
Merged

leafliber merged 2 commits into
mainfrom
feat/consolidation-default-auto

Conversation

@leafliber

@leafliber leafliber commented Nov 11, 2026 •

Copy link
Copy Markdown
Member

C-B2:整理默认改为 resolution=auto_v1(consolidation_hidden_v3 门槛已于 2026-11-11 通过;依据 DECISIONS.md 2026-11-10「全自动阶段计划」C 线)。只改默认值,auto_v1 的行为、提示词、护栏和评测工具都不变。未调用真实模型。

改动

  • 默认值:consolidation.DEFAULTS、settings_api.ConsolidationSettings 的请求默认值、读取时缺字段(或缺整行)的回退都是 auto_v1。未知或旧值(conservative_v2、rewrite_v2、original_v1 等)仍由 normalize_resolution 归一成 report_only_v1,未改。

  • 迁移 038(038_consolidation_default_auto.sql):只在同时满足以下两条时把 runtime_settings.consolidation.resolution 改为 auto_v1:

    1. 当前值仍是迁移 016/019 写入的 report_only_v1;
    2. admin_operations 没有任何 action='consolidation_settings_saved' 记录。

    判定依据:整理设置只有 PATCH /admin/api/settings/consolidation 一条写入路径。它每次保存完整的有效设置,并在同一事务写 consolidation_settings_saved(保存运行时间也走这条路径)。admin_operations 的行不会删除,清除功能只把 details_json 改写成 {"redacted":true},action 保留。迁移 034(max_calls 50→300)用的是同一判定。所以保存过任意整理设置的库,无论保存了什么值(包括 feat(consolidation): resolution=auto_v1(规格 C) #139 之前只改预算或开关的保存),都保持原值。未知值和缺字段的旧库不改写。运行快照(consolidation_runs.settings_json)不动,已接受、未完成的运行按原快照的 report_only_v1 完成。

  • 设置页:选项标注改为“自主处理(默认)”,“只报告”去掉“(默认)”。下拉框的选中值仍取服务端返回值,可以退回 report_only_v1。前端只在服务端缺这个字段时回退 report_only_v1,这一行原样保留,服务端总会返回该字段。已执行 npm ci、npm test、npm run build,构建产物一起提交。

  • README/ARCHITECTURE:整理默认值描述改成现状,补充迁移 038 的判定;“合并待核对”建议和“矛盾依赖只报告”两段注明只适用于“只报告”模式。

测试

  • 新文件 tests/test_consolidation_default_auto.py,覆盖:
    • 新库默认 auto_v1,新运行快照也是 auto_v1;
    • 从未保存过设置的旧库迁移后为 auto_v1,重复打开结果不变,无关的管理员操作不影响判定,未完成运行的快照保持 report_only_v1;
    • 保存过 report_only_v1 的旧库保持原值,包括只保存开关、只保存运行时间和空保存;
    • 保存过 auto_v1 的旧库不变;
    • 未保存过、值为未知或缺字段的旧库不改写;
    • 未知值回退 report_only_v1(设置和运行快照都是);
    • 缺字段或缺整行时回退 auto_v1;
    • 三处默认值一致;
    • 接口能改回 report_only_v1,之后只改其他字段不会重置它,非法值返回 400,再改回 auto_v1,每次都有操作记录。
  • 前端:ConsolidationSettings.test.tsx 增加用例:服务端返回 auto_v1 时下拉框显示 auto_v1 并标“(默认)”,可以退回只报告并保存。
  • 改默认后,原来按只报告写的用例显式选择 report_only_v1,不改断言:
    • conftest.report_only fixture 固定存储值,以及用例整体替换设置时的缺字段回退;
    • 整模块使用:test_consolidation、test_consolidation_annotations、test_merge_details、test_consolidation_details_v3;
    • 单个用例使用:test_consolidation_budget 的 180 秒用例、test_purge_review 的依赖复核用例;
    • test_maintenance_cognition 的两个开关用例在设置里写明 report_only_v1。
  • 断言旧默认的三处改为新默认:test_consolidation_auto 的默认/归一化、新库、设置接口用例,以及 test_consolidation_eval 的 DEFAULTS 断言。
  • test_media_retention 的旧备份用例先回退 038(只删迁移记录,038 不改表结构)。
  • 全量测试(已合入含 fix(persona): 保留不确定语气并审查后来的手写更正 (PE-21) #133 的 origin/main):
    • 3.13:5843 passed、1 failed
    • 3.12(--locked --isolated):5843 passed、1 failed
    • 失败的 tests/test_persona_streaming.py::test_future_deadline_closes_stream_worker_and_preserves_shared_client 是已有问题,与本 PR 无关:feat(consolidation): resolution=auto_v1(规格 C) #139 已记录它在 origin/main 上同样失败;本分支首次全量运行时它通过过,结果不稳定。
  • npm test(35 个文件、471 个用例)、npm run build、uv build 都通过。

请规划者确认

  1. 判定只看 action,不限定 actor(迁移 020 的 persona 判定还要求 actor=admin)。consolidation_settings_saved 只由管理接口写入,actor 恒为 admin,两种写法结果相同;不加 actor 条件更保守。
  2. feat(consolidation): resolution=auto_v1(规格 C) #139 之前的设置页没有“处理方式”选项。这期间管理员只改预算、开关或时间的保存,也算“保存过”,保持 report_only_v1。这符合指令中“无论保存成什么值”。如果希望这类库也切到 auto_v1,需要另行决定。
  3. 读取运行快照的 run_settings 和续跑时也用同一个 DEFAULTS。现存快照都带 resolution 字段(代码写入的快照总有这个字段,迁移 016/019 也补了),所以回退到 auto_v1 不会让旧运行改用 auto_v1。

consolidation_hidden_v3 passed on 2026-11-11, so auto_v1 becomes the default.

- DEFAULTS, the settings request model and the missing-field fallback all use
  auto_v1; unknown or retired values still normalize to report_only_v1.
- Migration 038 switches the stored value to auto_v1 only when it is still the
  migration-written report_only_v1 and admin_operations has no
  consolidation_settings_saved record. Any admin save, whatever it saved,
  keeps the stored value. Run snapshots are not touched.
- Settings page marks auto_v1 as the default; the selection still follows the
  server value and can return to report_only_v1. Frontend rebuilt.
- Report-only suites opt in through a report_only fixture; new tests cover
  new and upgraded databases, admin choices, fallbacks and the settings API.
- README and ARCHITECTURE describe the new default and the migration.
@leafliber
leafliber merged commit a9a8420 into main Nov 11, 2026
1 check passed
@leafliber
leafliber deleted the feat/consolidation-default-auto branch November 11, 2026 09:05
leafliber added a commit that referenced this pull request Nov 11, 2026
- DECISIONS 新增 2026-11-11 条目:#139 门槛结果与审查决定、#140 默认值与迁移判定、#133 合并理由与 PE-23、G/I 规格要点、隐藏集运行授权。
- 设计文档 10.2、12.5、16.1 改为门槛已通过的措辞,16.1 第 7 项改为按 1、3、7 天重试。
- AGENTS 补充当前进度。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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