Callback 送回抽象:存储 + 到期扫描 + 无门控送回集成 #53

Closed
opened 2026-07-24 04:27:59 +00:00 by KumaAgent · 0 comments
Member

Parent

#52 [PRD] arise 深挖任务委托(Deep Task Delegation)落地

What to build

新增一个通用的 Callback 送回抽象——持久化的待定记录 + 到期扫描 + 无门控重新进入 Runtime Loop 送回。这是深挖任务委托"任务完成后无门控送回"这个投递语义的地基,本 ticket 只建通用管线本身,不接任何真实生产者(用测试直接写入记录来验证)。

具体行为(用户可观察的端到端路径,通过测试模拟触发):

  • 一条 Callback 记录被写入存储后,到期扫描任务会在下一次扫描周期内发现它。
  • 到期记录经完整 assemble_context()(安全基线→persona→冻结快照→触发注入→本次内容)重新进入 Runtime Loop,不经过两级门控/沉默预算——这是"履约"语义,不是主动性决策。
  • 送回完成后该记录被清除,不会被重复送回。
  • 若目标 chat 当前正被前台占用(复用 Drive Tick 已有的"忙时 defer"检查),送回顺延到下一次扫描,不强行插队造成并发写冲突。
  • 一个 chat 可以同时存在多条待定 Callback 记录,互不覆盖(不是单槽位设计)。

Acceptance criteria

  • 新增 Callback 存储切片:字段含 idchat_idcontent(送回时注入的内容)、trigger_source(本次只有 "task_completion" 一个取值,字段本身对未来扩展开放,如 "user_reminder")、created_atfire_at(可空——本次唯一生产者语义上是"立即到期",为未来 time 模式预留)
  • per-chat 支持多条待定记录,新增/查询/删除均不互相覆盖(同 pending_intent 的 per-scope 多记录先例),有独立于调度驱动的存储集成测试
  • 新增一个纯函数判定"哪些待定记录现在算到期"(fire_at 为空或已到期即算),不依赖真实时钟/调度器,可直接构造固定输入断言结果
  • 新增 APScheduler 定时任务(同 Drive Tick/反思闭环既有先例)扫描到期记录并触发送回;送回目标 chat 若正被前台占用则顺延到下一次扫描(复用已有的"忙时 defer"追踪)
  • 到期记录送回时确实调用了完整 assemble_context()(而不是走 run_light/事件驱动的裁剪版组装),且不经过 _evaluate_unified_gate(有集成测试断言这一点)
  • 送回不占用/不消耗两级门控的沉默预算
  • 送回完成后记录被清除,不会被下一次扫描重复送回

Blocked by

None — can start immediately

## Parent #52 [PRD] arise 深挖任务委托(Deep Task Delegation)落地 ## What to build 新增一个通用的 Callback 送回抽象——持久化的待定记录 + 到期扫描 + 无门控重新进入 Runtime Loop 送回。这是深挖任务委托"任务完成后无门控送回"这个投递语义的地基,本 ticket 只建通用管线本身,不接任何真实生产者(用测试直接写入记录来验证)。 具体行为(用户可观察的端到端路径,通过测试模拟触发): - 一条 Callback 记录被写入存储后,到期扫描任务会在下一次扫描周期内发现它。 - 到期记录经完整 `assemble_context()`(安全基线→persona→冻结快照→触发注入→本次内容)重新进入 Runtime Loop,**不经过两级门控/沉默预算**——这是"履约"语义,不是主动性决策。 - 送回完成后该记录被清除,不会被重复送回。 - 若目标 chat 当前正被前台占用(复用 Drive Tick 已有的"忙时 defer"检查),送回顺延到下一次扫描,不强行插队造成并发写冲突。 - 一个 chat 可以同时存在多条待定 Callback 记录,互不覆盖(不是单槽位设计)。 ## Acceptance criteria - [ ] 新增 Callback 存储切片:字段含 `id`、`chat_id`、`content`(送回时注入的内容)、`trigger_source`(本次只有 `"task_completion"` 一个取值,字段本身对未来扩展开放,如 `"user_reminder"`)、`created_at`、`fire_at`(可空——本次唯一生产者语义上是"立即到期",为未来 time 模式预留) - [ ] per-chat 支持多条待定记录,新增/查询/删除均不互相覆盖(同 `pending_intent` 的 per-scope 多记录先例),有独立于调度驱动的存储集成测试 - [ ] 新增一个纯函数判定"哪些待定记录现在算到期"(`fire_at` 为空或已到期即算),不依赖真实时钟/调度器,可直接构造固定输入断言结果 - [ ] 新增 APScheduler 定时任务(同 Drive Tick/反思闭环既有先例)扫描到期记录并触发送回;送回目标 chat 若正被前台占用则顺延到下一次扫描(复用已有的"忙时 defer"追踪) - [ ] 到期记录送回时确实调用了完整 `assemble_context()`(而不是走 `run_light`/事件驱动的裁剪版组装),且不经过 `_evaluate_unified_gate`(有集成测试断言这一点) - [ ] 送回不占用/不消耗两级门控的沉默预算 - [ ] 送回完成后记录被清除,不会被下一次扫描重复送回 ## Blocked by None — can start immediately
Yushu closed this issue 2026-07-24 06:05:15 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ProjectKuma/arise#53
No description provided.