Terraform to OpenTofu, Terraform to Terragrunt, or off HCP Terraform, planned against your real state, cut over by your own engineers, and closed with a certificate your auditor re-derives from the digests rather than takes on trust.
A senior engineer reads the plan, says it looks fine, and everyone moves on. That review misses things a person cannot reasonably catch.
A plan showing nothing but no-ops still hides a resource somebody added out-of-band last Tuesday.
Drift that was already there gets blamed on the migration, or worse, silently absorbed into it.
Terragrunt silently prefers OpenTofu when both are installed. You are running a different binary than anyone believes.
One page. It records, for every root:
shasum -a 256 and gets the same number, or does not.Read from structured plan data: never from plan text, never from exit codes.
| C1 | every planned action is a no-op |
|---|---|
| C2 | the resource address set is identical |
| C3 | the engine version matches your pin |
| C4 | every resource is bound to the same provider |
These are not redundant. On a real estate, C1, C2 and C3 all passed while the providers had silently moved to a different registry with a different signing key. Only C4 saw it.
| Migration | What changes | State writes |
|---|---|---|
| Terraform → OpenTofu | the engine | none |
| OpenTofu state encryption | state at rest | one per phase |
| Terraform → Terragrunt | how the code is invoked | none |
| HCP Terraform exit | where state lives | one, reviewed |
Two of these move no state at all, which makes the guarantee an identity check rather than a promise.
apply and destroy do not exist in it. Not disabled, not behind a flag: absent. The command allowlist cannot express them.
Every command issued against your estate is written to an audit log you keep. Read it: there is no mutating verb in it, because there is no way to produce one.
A migration service that lists only what it can do is selling something else.
Read-only. No cloud credentials. No state access. One hour. You get the estate inventory, the complexity tier that determines the price of everything after it, and a risk register derived from your actual configuration, usually including things you did not know about your own estate.
Fixed price. Yours to keep whether or not you proceed.
This is consulting work, not software; it is a separate engagement from Cloudkeel-DD, which you can install yourself without talking to anyone. We are pre-launch: no customers yet, and no SOC 2.