removed blocks, and forgetting a resource on purpose

Taking a resource out of management used to mean state rm, which is a command run against state and invisible in review.

removed {
  from = aws_s3_bucket.old_uploads

  lifecycle {
    destroy = false
  }
}

# the plan says: 1 to forget. the bucket stays.
# without the lifecycle block the default is to DESTROY,
# which is the opposite of what the block is usually for.

The default being destroy is the trap, and it is the reverse of what most people mean by “removed” — the block covers both intentions and the safe one is the opt-in. Like import and moved, this is a declarative version of something that used to be a command, which means it appears in the pull request that causes it and applies identically on every machine.