## 背景 #195 当前回滚设计不可合并,并可能与 #184 共享问题:probe→rename/unlink/restore 的路径回滚竞态会在目标已被替换后删除或覆盖 replacement。 ## 要求 - 禁止对已可见目标执行路径回滚。 - 改为 identity-bound staging 与显式提交状态机。 - 目标可见前只能使用 `committed:false` 状态和 private、identity-bound cleanup。 - 目标一旦可见,任何故障都只能进入 `committed-degraded` 或 `committed-indeterminate`;不得再按 pathname 删除可见目标。 - 重试只能执行 refresh/status,不得重新进行 pathname rollback。 - 精确 hostile rollback 语义必须依赖 native handles,或改用 server-owned store + atomic pointer。 - 覆盖 replacement-window、Koa、client 与 crash tests。 - 链接并阻塞 #195;如适用,与 #184 共享修复方向。 ## 验收标准 在目标可见前发生故障时,仅能清理当前 identity 绑定的私有 staging;在目标可见后发生任何故障时,不会通过 pathname 删除或恢复可见目标,也不会删除/覆盖 replacement;状态、重试和客户端行为对 degraded/indeterminate 结果可观测且安全。replacement-window、Koa、client 和 crash 测试覆盖上述竞态。
背景
#195 当前回滚设计不可合并,并可能与 #184 共享问题:probe→rename/unlink/restore 的路径回滚竞态会在目标已被替换后删除或覆盖 replacement。
要求
committed:false状态和 private、identity-bound cleanup。committed-degraded或committed-indeterminate;不得再按 pathname 删除可见目标。验收标准
在目标可见前发生故障时,仅能清理当前 identity 绑定的私有 staging;在目标可见后发生任何故障时,不会通过 pathname 删除或恢复可见目标,也不会删除/覆盖 replacement;状态、重试和客户端行为对 degraded/indeterminate 结果可观测且安全。replacement-window、Koa、client 和 crash 测试覆盖上述竞态。