fail closed before resumed publication side effects
This commit is contained in:
@@ -387,6 +387,12 @@ export class WorkspaceRegistry {
|
|||||||
}
|
}
|
||||||
target = state.fetchedTargetCommit ?? target;
|
target = state.fetchedTargetCommit ?? target;
|
||||||
if (!target) throw new WorkspaceRegistryError("registry_bootstrap_recovery_conflict", "Bootstrap recovery is ambiguous or corrupt");
|
if (!target) throw new WorkspaceRegistryError("registry_bootstrap_recovery_conflict", "Bootstrap recovery is ambiguous or corrupt");
|
||||||
|
// Do not reacquire participant leases or run side effects when a restart finds a
|
||||||
|
// target-published job whose active pointer has drifted.
|
||||||
|
if (state.phase === "target_published") {
|
||||||
|
const active = await this.#tryActiveState();
|
||||||
|
if (!active || active.head !== target || registryDigest(active) !== state.targetManifestSha256) throw new WorkspaceRegistryError("registry_bootstrap_recovery_conflict", "Active registry target drifted");
|
||||||
|
}
|
||||||
// Once advertised, the run-specific ref is immutable evidence. Every resume after
|
// Once advertised, the run-specific ref is immutable evidence. Every resume after
|
||||||
// the fetch barrier revalidates it before reading or publishing any bytes.
|
// the fetch barrier revalidates it before reading or publishing any bytes.
|
||||||
if (state.phase !== "target_advertised" && state.phase !== "request_claimed") {
|
if (state.phase !== "target_advertised" && state.phase !== "request_claimed") {
|
||||||
|
|||||||
Reference in New Issue
Block a user