Two-phase rollout for subnet↔zone moves #17
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem. Adds fail closed mid-rollout (safe, per DESIGN.md §11.2), but
moving a subnet between zones is neither an add nor a remove. Mid-convergence,
device A enforces the new zone mapping while device B enforces the old one —
and the subnet can transiently match an old, broader rule on B. That's a
transient unintended permit, the one rollout direction the current design
doesn't make safe.
Proposal. Detect subnet moves at compile time and split them across two
generations: gen N adds the subnet's new-zone rules everywhere (union posture,
still fail-closed for anything newly permitted), gen N+1 removes the old-zone
association only after the fleet reports convergence on N. Minimum viable
version: refuse the single-step move with an error explaining the manual
two-apply sequence.
Acceptance. A test that moves a subnet from a permissive zone to a
restrictive one and asserts no intermediate generation ever widens access on
any device relative to both endpoints.