订阅治理折叠后的当前态快照(回放结果)。
订阅治理状态机·轻量溯源 fold(ES R4 第二上下文推广 · module-es-r4-second-context-subscriptions · 复用 R1 seam·裁①乙非聚合管道)。
纯函数 事件序列 → 当前态·零框架依赖·零 recordEvent/pullDomainEvents。事件仍由 handler/service 产出(P3 操作记录语义);本件只承「回放即真相」的读侧裁决形态:R4c 写切换后 canTransition 的 前置态即从本 fold 的重放结果取得,而非表行。
事件序列 → 当前态
canTransition
流语义(subscription 流·aggregateType subscription·aggregateId=订阅行 id·裁ⓐ甲):
subscription
subscription.created
subscription.bootstrapped
subscription.status.transitioned
from
from===null
version 为回放段内已应用事件数(快照重启后从 1 起);物理并发校验由 append(expectedVersion) 承担(R4c)。
version
append(expectedVersion)
Readonly
订阅状态。
订阅 id。
已应用事件数(流内位置)。
订阅治理折叠后的当前态快照(回放结果)。
Remarks
订阅治理状态机·轻量溯源 fold(ES R4 第二上下文推广 · module-es-r4-second-context-subscriptions · 复用 R1 seam·裁①乙非聚合管道)。
纯函数
事件序列 → 当前态·零框架依赖·零 recordEvent/pullDomainEvents。事件仍由 handler/service 产出(P3 操作记录语义);本件只承「回放即真相」的读侧裁决形态:R4c 写切换后canTransition的 前置态即从本 fold 的重放结果取得,而非表行。流语义(subscription 流·aggregateType
subscription·aggregateId=订阅行 id·裁ⓐ甲):subscription.created/subscription.bootstrapped:流起点。created=上线后新行· bootstrapped=存量快照。全流回放采「最后快照重启」(bootstrapped 覆盖此前一切·不重排历史·同 tenants); created 亦要求空态出现(再见=流损坏 fail-loud)。subscription.status.transitioned:迁移合法性经canTransition复验·且事件from必须等于 重放态(空流起点from===null);不符即漂移 fail-loud。version为回放段内已应用事件数(快照重启后从 1 起);物理并发校验由append(expectedVersion)承担(R4c)。