OpenProgram 承诺与心跳

本文只区分三个部分:OpenProgram 当前已实现内容、其他项目的当前设计、OpenProgram 后续计划。该功能不是通用任务系统。

1. OpenProgram 当前现状

已实现

writer 与可信证据

现有 memory writer 在 Runtime 选定的批次内调用 record_commitments。LLM 提供语义字段、Source ref 和一行精确引用;Runtime 验证引用属于当前批次可信 Source,并以 Source ref + quote 派生 ID。ID 不依赖 LLM 措辞、日期解释或 item 顺序。Schema 与 Runtime 同时限制每批创建+转移合计 64 项、文本 2,048 字符、quote 8,192 字符、Source ref 512 字符;owner Web 仍是单项显式转移,不接受这些 writer 语义字段。

已实现

原子状态

commitments.jsonl 与 Topic 变更通过同一 staged transaction 安装;既有 workspace 无文件时按空集合读取,无需一次性 migration。writer closure 要求当前批次 Source 与精确引用并持久化 provenance;显式 done/dismissed 只接受 owner authority 和当前 revision,记录 owner/manual

已实现

确定性 heartbeat

现有 cron-worker 执行到期判断,不调用 LLM。默认 daily 09:00;也支持 hourly/off;安静时段默认 23:00-08:00 本地时间。

已实现

状态与 Memory Web

memory_status、owner CLI/API 和 Memory Web 展示计数与记录。Web 的 done/dismissed 控件复用 revision-checked transaction,stale revision 返回 conflict,非法 JSON 返回结构化 400;model-facing 投影不包含宿主路径、channel account、peer、Source 原文引用或任意额外字段。

实际执行关系

1 提取LLM 识别义务语义,并提供 writer 当前批次中的 Source ref 与精确 quote。
2 校验与存储Runtime 校验 Source、quote、日期、ID、发言人和状态,并原子安装。
3 cadencecron-worker 按 live config 触发确定性检查。
4 routeRuntime 从 Source 的来源 session 读取既有 channel binding。
5 send相同 target 合并发送;成功后才记录 notification step。

当前边界

同一 Source 的不同 quote 支持多承诺,同一证据的改写提取由确定性 ID 去重;当前每条记录最多成功发送 due 与 overdue:7 两档。通知档位严格按 due → overdue:7 单向推进:如果首次检查时记录已经逾期七天以上,先发送并记录 due,后续符合 cadence 的 heartbeat 才发送 overdue,不允许先记录 overdue 再回退到 due。兼容修复前已经持久化的 overdue-only 状态:任何已有 overdue:* 都表示记录已经越过 due,不得补发或追加 due。发送失败不记档并在后续 heartbeat 重试。发送是带重试和退避预算的网络 I/O,在 workspace 写锁之外执行:读取到期记录取一次锁,写入已送达档位再取一次,第二次写入只把档位合并到当时磁盘上的记录,因此提醒发送期间提交的状态变更不会被覆盖。正常并发 heartbeat 先通过独立 claim 串行化,对同一通知档位只发送一次;但 channel 成功后、状态原子写入前的进程退出仍可能使后续进程重复发送,因此该终止窗口仍是 at-least-once;现有跨渠道 outbound 没有统一 idempotency key。状态/heartbeat 隔离并计数非法行,更新通知状态时原样保留这些行;upsert/transition 发现非法行则拒绝写入。同一次 record_commitments 中的 create 与 transition 是一个调用级原子批次,任何一项校验或写入失败都必须以原子替换把 stage 恢复到调用前的逐字节状态;如果恢复本身失败,Runtime 必须先标记该 stage 不可提交,再尽力丢弃 stage。任何 stage 刷新只有在全部复制与保护步骤完成后才恢复可提交状态;清理或刷新再次失败不能安装部分结果。无日期或没有 channel target 的记录保持可见但不推送;测试不发送真实消息。该功能要求 cron-worker 运行,不提供 fallback timer,也不包含优先级、子任务、项目、自主执行或新 scheduler/storage/task manager。

审查修复任务 brief

批准基线为 95e778aa,最终集成实现证据为 33dd7d2c。本修复只允许修改 openprogram/proactive/heartbeat.pyopenprogram/memory/management/tools.pyopenprogram/memory/management/workspace.pytests/unit/test_memory_commitments.py 与本页。公共 RED 必须覆盖首次检查已逾期记录的单向通知顺序、组合 create+transition 失败后 stage 与 committed workspace 均不变化,以及恢复写入失败后部分 stage 不可提交。兼容边界包括发送失败重试、正常并发 claim 对同一通知档位只发送一次、channel 成功后与状态写入前进程退出窗口的 at-least-once、malformed 行策略、owner 单项 transition、既有 stage 修改和不含 commitments 文件的 stage。排除新 scheduler、delivery journal、跨进程终止窗口的端到端 exactly-once、优先级、子任务、项目和 Windows 专项实现。验收命令为 commitments 专项 Python 测试、Memory Web 检查、scoped Ruff、文档构建与链接、独立规格复审、独立质量审查和最终组合门禁;任何实现或测试变更后均需重新审查。

实现与验证证据

最终集成实现证据为 33dd7d2c;相关最终修复提交为 60affd50716d34337dd084695fd76a4479d2d704。SPEC review、QUALITY review 与 whole-branch review 均为 PASS,remaining findings 均为 0。

门禁结果
完整 Python 门禁5,265 passed,10 skipped,2 deselected,1 xfailed
文档构建与链接490 pages built;0 broken links
功能矩阵160 项;OpenProgram 84.5 分;67 个候选差异;6 个快照差异
WebWeb checks、build-no-linttsc --noEmit 均 PASS;whole Web lint 仍受 origin/main 已有问题阻塞,不记为本修复通过

2. 其他项目如何设计

Primary source来源明确说明的设计与 OpenProgram 的差异
OpenClaw Heartbeat Heartbeat 是由 Automations scheduler 管理的 main-session 定时轮次,支持显式 delivery target 和 active hours。 采用并修改:采用 active-hours 原则并实现为 quiet hours;target 来自可信 Source/session。拒绝另建 scheduler 和 heartbeat LLM turn。
OpenClaw Inferred commitments 当前官方文档说明 inferred-commitments 实验已经退役,不再提取或送达新 follow-up;legacy 行仍可查看和 dismiss。 采用谨慎结论、修改 provenance、拒绝退役机制:保留 inspect/dismiss 和评测要求,但必须引用可信 Source,不采用置信度驱动的自主扩张。
LangMem 提供 hot-path memory tools 和自动提取、合并、更新知识的 background memory manager。 采用 lifecycle、拒绝第二个 manager:在现有 writer 内提取,加入 Source batch 校验和原子 staging,不增加 memory service。
LangSmith cron jobs 按 cron schedule 在指定 thread 或新 thread 上运行 assistant 和输入。 复用原则、拒绝另一套 API:复用现有 cron-worker 和来源 session binding,不增加 scheduled assistant turn 或 thread scheduler。

这些来源只支持逐项机制比较,不能据此认定各系统的信任、存储、状态转移或送达语义等价。

3. OpenProgram 后续计划

计划
  1. 在会话 replay 上测量提取精度、遗漏义务、错误日期、过早关闭、重复提醒和提醒有效性。
  2. 把已实现的 fake-transport 矩阵扩展成 writer/heartbeat 并发与 post-send/pre-state-write 进程终止的 soak test。
  3. 只有全部 outbound adapter 能遵守统一契约时才增加 transport idempotency key;此前正常并发 heartbeat 由 claim 保证同一档位只发送一次,仅对 channel 成功后、状态写入前的进程终止窗口维持并记录 at-least-once。
  4. 实际使用提出需求后再考虑可配置 overdue interval 或 timezone;此前保持七天逾期档和宿主本地时间。
  5. 不加入优先级、子任务、项目、自主执行,也不新增 scheduler/storage/task-manager 子系统。