feat: 补齐深挖任务委托的灰度开关(issue #61) #64

Merged
Yushu merged 2 commits from feature/61-delegate-task-gray-release-toggle into main 2026-07-25 01:00:21 +00:00
Member

Closes #61

这个 PR 做了什么

补齐 docs/design.md"上线路线"第 5 阶段原文承诺的深挖任务委托"灰度、可一键关"——issue #52 PRD → #53-#56(PR #57-#60)实现完成后核实,delegate_task/cancel_delegate_task 两个工具恒可见,没有落地任何专属开关。已如实记录进 ADR-0020/CONTEXT.md/design.md(用删除线标注,不是悄悄改口)。本 PR 补上这个开关本身。

静态 config 开关

  • config.py:新增 arise_delegate_enabled: bool = True(默认保持现有恒开启行为不变,不是破坏性变更)

工具可见性门控

  • tools.pyDELEGATE_TASK_SCHEMA/CANCEL_DELEGATE_TASK_SCHEMA_ALWAYS_AVAILABLE_STATIC_SCHEMAS 移出,改为 build_tool_schemas() 按新增的 delegate_enabled 参数条件追加——同 capabilities.poke_send/capabilities.reaction_send/capabilities.profile_like 既有"能力为假=模型看不到"策略,不是调用时报错
  • 刻意不复用渐进解锁曲线(note_pending_intent 那套模式):arise_delegate_enabled 是静态 host 部署级开关,跟 capabilities 一样是"两条触发路径共享同一份、不按 chat 现算"的值,PR #59 review 已经拍板深挖任务委托不适用渐进解锁的"新部署更保守"语义,本 PR 不重开这个讨论
  • runtime_loop.pyRuntimeLoop 新增 delegate_enabled 构造参数(同 spontaneous_goal_unlocked 先例,必需参数),__init__.py 从 config 读取注入

不影响存量状态

  • 关闭本身不影响已经在跑的后台任务(DelegatedTaskRegistry 是独立进程内状态,与 RuntimeLoop 构造无关)
  • 关闭本身不影响 Callback 送回管线(_callback_scan/run_callback() 从不查询这个开关,已登记的待送回记录照常送达)

测试

默认开启/关闭时工具列表含/不含这两个工具;关闭不影响其它恒可见工具;关闭不影响已登记的运行中任务;关闭不影响 Callback 送回管线本身。

全部 894 个测试通过,ruff check/ruff format 干净。

Code review

跑过 /code-review(Standards + Spec 两轴并行子智能体):

  • Spec 轴:AC1-4 落实到位,无越界;AC5(docs 分支文档回填)单独处理(见下)
  • Standards 轴:确认了"用 build_tool_schemas 参数门控而非 NOTE_PENDING_INTENT_SCHEMA 式外部条件追加"这个设计选择站得住(arise_delegate_enabled 语义上和 capabilities 同属"静态、两条触发路径共享"一类,不是 spontaneous_goal_unlocked 那种按 chat 现算的值),未发现硬性标准违反;两处风格建议——一处已采纳(合并连续 append 为 extend),一处评估后判断维持现状更合适(见对应 commit 说明)
Closes #61 ## 这个 PR 做了什么 补齐 `docs/design.md`"上线路线"第 5 阶段原文承诺的深挖任务委托"灰度、可一键关"——issue #52 PRD → #53-#56(PR #57-#60)实现完成后核实,`delegate_task`/`cancel_delegate_task` 两个工具恒可见,没有落地任何专属开关。已如实记录进 ADR-0020/CONTEXT.md/design.md(用删除线标注,不是悄悄改口)。本 PR 补上这个开关本身。 ### 静态 config 开关 - `config.py`:新增 `arise_delegate_enabled: bool = True`(默认保持现有恒开启行为不变,不是破坏性变更) ### 工具可见性门控 - `tools.py`:`DELEGATE_TASK_SCHEMA`/`CANCEL_DELEGATE_TASK_SCHEMA` 从 `_ALWAYS_AVAILABLE_STATIC_SCHEMAS` 移出,改为 `build_tool_schemas()` 按新增的 `delegate_enabled` 参数条件追加——同 `capabilities.poke_send`/`capabilities.reaction_send`/`capabilities.profile_like` 既有"能力为假=模型看不到"策略,不是调用时报错 - 刻意不复用渐进解锁曲线(`note_pending_intent` 那套模式):`arise_delegate_enabled` 是静态 host 部署级开关,跟 `capabilities` 一样是"两条触发路径共享同一份、不按 chat 现算"的值,PR #59 review 已经拍板深挖任务委托不适用渐进解锁的"新部署更保守"语义,本 PR 不重开这个讨论 - `runtime_loop.py`:`RuntimeLoop` 新增 `delegate_enabled` 构造参数(同 `spontaneous_goal_unlocked` 先例,必需参数),`__init__.py` 从 config 读取注入 ### 不影响存量状态 - 关闭本身不影响已经在跑的后台任务(`DelegatedTaskRegistry` 是独立进程内状态,与 `RuntimeLoop` 构造无关) - 关闭本身不影响 Callback 送回管线(`_callback_scan`/`run_callback()` 从不查询这个开关,已登记的待送回记录照常送达) ### 测试 默认开启/关闭时工具列表含/不含这两个工具;关闭不影响其它恒可见工具;关闭不影响已登记的运行中任务;关闭不影响 Callback 送回管线本身。 全部 894 个测试通过,`ruff check`/`ruff format` 干净。 ### Code review 跑过 `/code-review`(Standards + Spec 两轴并行子智能体): - Spec 轴:AC1-4 落实到位,无越界;AC5(docs 分支文档回填)单独处理(见下) - Standards 轴:确认了"用 `build_tool_schemas` 参数门控而非 `NOTE_PENDING_INTENT_SCHEMA` 式外部条件追加"这个设计选择站得住(`arise_delegate_enabled` 语义上和 `capabilities` 同属"静态、两条触发路径共享"一类,不是 `spontaneous_goal_unlocked` 那种按 chat 现算的值),未发现硬性标准违反;两处风格建议——一处已采纳(合并连续 append 为 extend),一处评估后判断维持现状更合适(见对应 commit 说明)
实现 issue #61——design.md 曾承诺深挖任务委托"灰度、可一键关",但 #52
PRD 实现期(#53-#56)落下了这个开关,delegate_task/cancel_delegate_task
恒可见。本片补上部署级静态开关。

- config.py:新增 arise_delegate_enabled: bool = True(默认保持现有恒
  开启行为不变,不是破坏性变更)
- tools.py:build_tool_schemas 新增 delegate_enabled 参数,按静态 host
  部署级开关门控 DELEGATE_TASK_SCHEMA/CANCEL_DELEGATE_TASK_SCHEMA(同
  capabilities.poke_send 等既有能力位"为假=模型看不到"策略,不复用
  note_pending_intent 那套渐进解锁条件追加模式——PR #59 review 已经
  拍板深挖任务委托不适用渐进解锁语义,这是一个独立静态开关)
- runtime_loop.py:RuntimeLoop 新增 delegate_enabled 构造参数(同
  spontaneous_goal_unlocked 先例,必需参数,无默认值),__init__.py
  从 config 读取并注入

测试:默认开启/关闭时工具列表含/不含这两个工具;关闭不影响其它恒可见
工具;关闭不影响已登记的运行中任务(登记表是独立进程内状态,与本次
RuntimeLoop 构造无关);关闭不影响 Callback 送回管线本身(run_callback
从不查询这个开关,已登记的待送回记录照常送达)。

全部 894 个测试通过,`ruff check`/`ruff format` 干净。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
tools.py:build_tool_schemas 里两次连续 append 合并成一次 extend(
Standards review 的风格建议)。查过 _never_finishes 这个测试辅助协程
在 test_delegate_task.py/test_delegate_task_tools.py/
test_callback_scan_e2e.py/test_drive_tick_e2e.py 里已经各自独立定义
(本次新增的 test_delegate_task_gray_release.py 是第 5 处)——这是
测试套件里已经确立的既有惯例,不是本次 diff 引入的重复,只统一改掉
新增的这一处会造成新的不一致,维持现状。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Yushu merged commit 8fa5af80e9 into main 2026-07-25 01:00:21 +00:00
Yushu deleted branch feature/61-delegate-task-gray-release-toggle 2026-07-25 01:00:22 +00:00
Sign in to join this conversation.
No description provided.