# 20 状态工件
平面:执行
governed_by:D-016、D-017、D-029、D-036、D-055
用途:用少数几份外置工件回答"现在在哪里、下一步做什么、中断后怎么接上",让每轮推理与每次交接从读状态开始,而不是回放对话。
## 1. 最小职责与接口
- **它必须做到的**
- 维护三类职责不重叠的工件:当前任务的实时状态源、某一时刻带身份的临时快照、跨工作项的里程碑摘要。
- 让每条状态记录带上可交叉核对的工作副本身份与时间。
- 用唯一一套状态机描述工作项,"完成"只有一个定义。
- 为每次状态转换留下结构化记录,含三态裁定与它所引用的工件事件。
- 保证进行中的单元有活性信号,并声明哪些点是合法停止点。
- 保证从任一持久检查点可恢复,且不重复已发生的不可逆副作用。
- **从别的部件拿什么**:从[10 意图与验收](10-意图与验收.md)拿验收条目 ID 与切片边界;从[21 调度与拆分](21-调度与拆分.md)拿阶段划分、返工去向与停机结论;从[30 验证与测试](30-验证与测试.md)拿三态裁定与定位信息;从[32 证据与追踪](32-证据与追踪.md)拿状态转换所引用的工件事件与证据位置;从[40 人的检查点与授权](40-人的检查点与授权.md)拿状态转换处的确认、授权与有效豁免。
- **给别的部件什么**:给[22 上下文装配](22-上下文装配.md)每轮的起点与恢复锚点(读状态,不回放对话);给[21 调度与拆分](21-调度与拆分.md)当前阶段、阻塞与活性信号;给[31 守卫与权限边界](31-守卫与权限边界.md)转换前可直接观察的前置事实;给[33 评估与演进](33-评估与演进.md)阶段耗时、返工分布与失败去向的原始记录。
- **它自己维护什么**:三类工件本身、状态转换记录、待补偿的外部写清单、已执行的不可逆动作清单、合法停止点的声明。
- **未决**:三类工件是否允许合并为一份载体(在 L0 常见),随载体实例附录处理;触发一次恢复的入口归属见第六条不变量([架构确定 §5.3](架构确定.md#invariants))。
## 2. 原则
- **P1 三类状态工件职责不重叠,且互不直接覆盖。** 实时状态源只管当前任务的范围、阶段、阻塞与下一原子动作;临时快照只是某一时刻的恢复凭据,核对后合并回实时源再归档;里程碑摘要只决定项目级优先级与风险,不承载任务内的下一步。|防的失败:三种载体互相覆盖,恢复时选错下一步 |删除条件:写不出(责任结构型:三类的**职责**划分与用几份载体承载是两件事——载体可否合并见 §4 未决;职责一旦重叠,恢复时选错下一步无人负责)
- **P2 每条状态记录必须归属到一个具体的、可重新验证的工作副本快照。** 它至少回答"是哪一份工作副本"和"是它的哪一个版本",且该标识可与实际工件交叉核对;仅凭记录自称不算。载体形态由项目自选并在项目内保持一致,本部件不规定选哪一种。|防的失败:不同工作副本上的记录被直接比较,旧验证结果被继续沿用 |删除条件:载体对每条记录自动绑定不可伪造的工作副本标识、且该标识可与实际工件机械交叉核对时,"须自行带上标识"的记录动作可删;"仅凭记录自称不算"写不出(责任结构型:自证不构成核对)
- **P3 新鲜度冲突时失败关闭。** 身份不同的记录不可直接比较;同一身份下状态版本高者优先,但仍须与工件交叉核对。时间或版本缺失、倒退、同版本内容不同、工作副本不匹配时标记冲突并停止,不继续沿用旧结论。**状态记录同样是"结论 + 其成立条件"**(形式见[30 验证与测试](30-验证与测试.md) §2 P1):身份或新鲜度不可核对、或转换由人工直接改写(P5)时,出口不止"停止"一种——**记录其成立条件后可带降级标记继续使用,但依赖它的不可逆动作与验收判定必须停止**。本条的失败关闭作用于"无条件沿用旧结论",不作用于"带成立条件使用";这消解本条与 P5 在接手场景的相反指令,不需要在两者之间另设优先级。置信的表达是全平面通用的,[12 记忆与知识治理](12-记忆与知识治理.md) §2 P1 隔离的是五类的治理身份,不是它们能不能带成立条件。|防的失败:过期快照直接覆盖实时状态 |删除条件:载体提供单调版本且写入天然串行时,冲突检测可退化为版本比较
- **P4 一套状态机,一个完成定义。** 实现候选已形成、可集成、已发布或明确无需发布、已验收是不同的状态,不得互相冒充;阻塞是附加的显式标记,必须带原因、所需新证据或决策、责任人与复查条件,不是一种乐观的完成态。状态的增删判据见[21 调度与拆分](21-调度与拆分.md)。|防的失败:多套完成定义制造虚假完成;阻塞被藏在进行中 |删除条件:写不出(责任结构型:"完成"的定义是验收权的归属(见[10 意图与验收](10-意图与验收.md) §2 P7),多套定义等于多个人各自宣布完成)
- **P5 状态由工件事件派生,优先于执行者自报。** 每次转换绑定触发它的工件事件(分支、合并、验证运行、发布、回读);人工直接改写的转换标为低可信并分列统计,其可继续使用的形式见 P3(结论 + 其成立条件)。阶段耗时、消耗(含子执行者)、重试次数与改动量由事件采集,不由执行者填写。|防的失败:自报进度与过程记录互相矛盾,流动度量失去意义 |删除条件:执行平台把阶段耗时、消耗、重试次数与改动量作为不可由执行者改写的事件发出且工作流可读取时,"不由执行者填写"一句可删(能力补偿类);"转换绑定工件事件"写不出(责任结构型:状态的事实来源不能是被度量者自己)
- **P6 每次状态转换留下结构化记录。** 至少含:起止状态、工作项身份与状态版本、责任人与实际执行者、发生时间、工作副本身份、目标环境、所引用的闸门标识(闸门自身的合同语义见[31 守卫与权限边界](31-守卫与权限边界.md))、三态裁定(通过 / 失败 / 未定(UNDETERMINED)及其子原因)与定位信息、证据位置、触发来源、有效豁免与限制。未定不得折算为通过。延期或取消附下游影响链。|防的失败:转换只留一句"已完成",事后无法判断它凭什么通过 |删除条件:起始档——字段完备的结构化转换记录自 L2 起才有对象(L0/L1 的形态是"每条记录带工作副本身份与时间",见 §3);"未定不得折算为通过"对一切档成立,写不出(责任结构型:折算等于替消费方做出它没做过的判断)
- **P7 活性不变量。** 进行中的单元必须绑定可探活的执行者与最后活动时间;失去绑定或超期即转为显式的未定或阻塞并通知,而不是保持进行中。反向同样成立:状态未到声明的合法停止点时,执行者不得静默停止,生成交接是合法停止点之一。|防的失败:任务长期停在进行中无人发现;调度器提前收工 |删除条件:执行平台原生提供任务租约与心跳且可被工作流读取时,巡检形态可删,不变量本身不删
- **P8 恢复是从上一检查点之后重放,不是从中断行继续。** 恢复者先核对快照、工作副本身份与状态版本,再核对已执行的不可逆动作清单与外部回执:已发生的不可逆副作用必须跳过或补偿,已确认结果不得丢失。不可逆动作前状态须已持久化;对外部系统的写另受[24 工具与执行环境](24-工具与执行环境.md) §2 P6 与第六条不变量约束,写失败可不阻断但入待补偿记录,依赖它的状态在补偿完成前记为未定(结果未知),不得宣告。|防的失败:恢复后重复发出外部写;网络抖动变成静默的假交付 |删除条件:执行环境对全部外部副作用提供恰好一次语义且不截断时,巡检可删,语义不消失
- **P9 交接分两层:短交接进窗口,完整产物按引用回源。** 短交接只含当前判断所需的结论、关键决策、已完成项与证据位置、未完成原因、身份与状态版本、捕获时间、目标环境、最后验证时间、已执行的不可逆动作清单、风险与下一原子动作;窗口外的完整产物原样保留、不改写、不预先塞入,接收方按位置回源。|防的失败:完整报告在多个会话里反复携带并重复计费;缺身份的交接无法核对新鲜度 |删除条件:窗口容量与注意力不再随携带内容长度退化时,"完整产物不进窗口"可删(能力补偿类);"交接须带身份与状态版本"写不出(责任结构型:无身份的交接无法核对新鲜度,核对责任落在接收方而它没有可核对的东西)
- **P10 状态字段有写时失效责任。** 阶段切换时,写入方更新或移除上一阶段的过时描述;读取方不得把"记录里还在"当作"仍然有效"。|防的失败:上一阶段的当前错误在新阶段仍被注入,执行者继续修一个已解决的问题 |删除条件:状态载体支持按阶段绑定字段并自动失效
## 3. 从 L0 到 L3
| 档 | 形态 |
|---|---|
| L0 一人一工具 | 一份进度、一份清单、一份交接;朴素文本即可,关键是每条记录带工作副本身份与时间。 |
| L1 一人多会话 | 会话结束与压缩前都生成短交接;新会话先读状态再动手,恢复时核对不可逆动作清单。 |
| L2 团队 | 状态转换记录成为团队共读的结构化对象;转换绑定工件事件,人工改写分列统计;活性巡检定期扫描超龄的进行中单元。 |
| L3 无人值守 | 活性信号与合法停止点是运行前提;待补偿清单非空即不得宣告完成;恢复入口由持久工件的存在性决定并自动重新提供。 |
## 4. 追溯
本章的写作期内容——它解决什么问题、源章节与主题综合的映射、每条原则的证据强度——在[追溯账本](追溯账本.md#ch-20),效力为零。