变化捕获与观测增量
框架让事实所有者发布明确变化;内容和调用进度不依赖 Recorder。记录安装可消费这些事实,宿主可组合基线与增量,但框架不附带 HTTP 交付、客户端副本或 UI。订阅和记录不会替代真实业务接纳。
生产者与局部顺序
| 来源 | 正式变化 | 顺序 |
|---|---|---|
| Transcript | 新消息批次、段边界 | transcriptId + revision,index 定位正文 |
| Memories | 创建、更新及完整结果 | memoriesId + sequence |
| Invocation | 开始、进度、直接子关系、结束 | contextId + sequence |
| Recorder | 登记、过程追加、关系追加、终态与显式替换 | recorderId + revision |
不同来源的序号不可互换,也不构成全局事务顺序。内容先校验固定、提交并安装,再独立发布变化与可选观察;捕获或观察失败不抹去已经落实的事实,也不授权重做业务。isolate / propagate 保留各自安装的语义,不能凭没有收到通知推断效果未发生。
一次 RecordRegistration 同步登记新记录及父级 childId,不保证异步事务或其他实体原子性。调用过程、父子接纳与调用边界是不同事实;子 returned 不等于父 accepted,handled 不会将子失败改为成功。资源记录描述本次绑定与访问,不能替代 TranscriptEvent / MemoryEvent,也不能仅凭来源关联推断某次操作造成效果。
捕获、排空与被动发布
ChangeBuffer 只保存尚未取出的事实。capture 同步接纳、不执行下游;wait 唤醒异步消费者,take 转移并清空当前批次。事实正文不可变由来源负责,缓冲器不解释或复制泛型正文。多个来源可共享一个联合类型缓冲器;捕获顺序不是跨源事务。
同一个缓冲器应由明确的消费者负责排空;多个 take 读者会争抢批次,不能用作广播订阅。需要多个出口时,宿主在排空后明确转交。ChangeBuffer 不保留已取出历史,不提供持久日志、ACK、失败重投或任意游标回放;慢消费者、队列预算和网络限流由宿主实现。
自定义 ChangeCapture 必须同步完整接纳,或在接纳前抛错,不重入来源或运行消费者。ChangeCaptureError 保留已经发生的固定事件与 cause,来源状态仍已落实。可选观察独立尝试;多个故障组合交付,不能用普通 catch 将已归属机制故障变成成功。
ProgressChannel 提供被动消费的故障隔离和失败消费者停用,不替代必要捕获。严格机制观察则可能影响当前交付,仍不能撤回已提交内容。Runner 的 output、observation 与 CP 原始反馈具有不同寿命和数据范围,见 运行出口。
宿主基线与连续性
需要同步的宿主应明确建立一致基线与后续变化的交接,避免异步读取快照后才订阅造成缺口。来源 revision、连接交付 sequence 与读取游标分别维护;重建连接不重置实体修订,也不能把断线等同来源不完整。
接收端应在整批身份、顺序和父子关系核验后安装新状态,失败不暴露半条关系。重复交付、顺序缺口、身份冲突和来源失效应有各自策略;不得通过重拉当前快照掩盖已知来源遗漏。记录不完整与业务成功可以同时成立,历史 running 记录也不证明进程仍在执行。
消息正文通过 Transcript 自身查询与变化提供,记录只保存身份/范围和事实投影。正式消息不能从调用预览或记录文本猜测生成。框架 Transcript wire 只接纳单帧,不维护跨帧连续状态;队列、连接替换、有限重建和展示策略由宿主独立验证。
验证入口
changes 测试 验证捕获、缓冲与故障隔离;Transcript changes 验证已落实事实与捕获失败;调用事件 验证纯事件出口;记录测试 验证登记、变化、树与历史读取。框架证据不依赖外部服务或客户端。