Aster文档
搜索 Aster 文档
ESC
产品
版本

输入关键词开始搜索。

    文档目录

    ASTER EFFECT / 03

    Effect 恢复与运行验证

    事实折叠、Transition 幂等性、等待恢复、结构化并发和测试。

    Actor 的恢复依据是不可变事实日志。进程重启后,Runtime 重新折叠日志,而不是恢复进程内等待器。

    日志决定下一步

    resume 先折叠已保存事实。每个 Component 的 step 更新自己的状态,output 再给出视图和可执行 Transition。

    如果某个 Transition Key 已经是事实的 Cause,Runtime 不会再次选择它。重复恢复完成的 Turn 不会追加事实,也不会重复调用模型。

    两个 Component 同时声明同一个 Key 时,Projection 在执行任何 Effect 前返回 ActorError::DuplicateTransition。命名空间用于避免组合冲突。

    等待与恢复

    Coding Scheduler 的等待恢复
    等待状态结束事实后续行为
    CodingPhase::Confirmconfirmation.answered批准后执行一次 Tool,拒绝则结束 Turn
    CodingPhase::Questionquestion.answered执行下一次模型 Turn

    Question 视图保留模型返回的 allow_free_text。等待期间没有可用 Transition,恢复调用不会推进状态。

    拒绝确认不会调用 Tool。批准确认和回答问题都只通过对应事实触发一次后续 Transition。

    重试、并发与资源

    retry 只重复 Exit::Fail。Exit::Die 即使还有重试次数也只执行一次。

    zip_par 和 race 使用结构化取消。一个分支不再需要时,Runtime 取消兄弟分支。bracket 在成功、预期失败、缺陷和取消路径上释放资源。

    Effect::with_span 记录 Runtime Span。Trace 只描述执行,不改变事实日志的恢复语义。

    验证清单

    1. 构造 Effect 时确认服务调用仍为零。
    2. 验证 retry 不重复 Exit::Die。
    3. 重复恢复完成的 Turn,确认没有新事实。
    4. 注入重复 Transition Key,确认 Effect 尚未执行就被拒绝。
    5. 在等待确认和问题时恢复,确认执行零步。
    6. 追加回答事实,确认后续 Transition 只执行一次。
    7. 在成功、失败和取消路径核对资源释放。

    开发检查

    从 crates/effect 目录运行:

    cargo test
    cargo fmt --all -- --check
    

    测试应覆盖事实解析、日志恢复、Transition 幂等性和取消清理。不要只用进程内状态验证恢复。

    实现依据