Cloudkeel-ZeroDiff

Prove your Terraform migration changed nothing.

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.

Assessment needs no cloud credentialsapply and destroy do not exist in the tool

Every migration ends with someone hoping.

A senior engineer reads the plan, says it looks fine, and everyone moves on. That review misses things a person cannot reasonably catch.

A clean plan can still be wrong

A plan showing nothing but no-ops still hides a resource somebody added out-of-band last Tuesday.

Old drift becomes your fault

Drift that was already there gets blamed on the migration, or worse, silently absorbed into it.

The engine changes underneath

Terragrunt silently prefers OpenTofu when both are installed. You are running a different binary than anyone believes.

And when something breaks six weeks later, there is nothing to point at. That is the gap this closes: not a tidier repo, but evidence that survives the argument.

A Migration Certificate.

One page. It records, for every root:

You do not have to trust us. Your auditor runs shasum -a 256 and gets the same number, or does not.

The four checks

Read from structured plan data: never from plan text, never from exit codes.

C1every planned action is a no-op
C2the resource address set is identical
C3the engine version matches your pin
C4every 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.

Plus eight supporting documents

Executive summaryReadiness assessmentRisk registerBackup manifestMigration planVerification reportHypercare planPackage index

The migrations we do.

MigrationWhat changesState writes
Terraform → OpenTofuthe enginenone
OpenTofu state encryptionstate at restone per phase
Terraform → Terragrunthow the code is invokednone
HCP Terraform exitwhere state livesone, reviewed

Two of these move no state at all, which makes the guarantee an identity check rather than a promise.

How it runs.

  1. 0
    AssessmentRead-only, one hour, no cloud credentials. Estate inventory, complexity tier, risk register.
  2. 1
    BaselineWe record what is already drifting, before touching anything. Signed. This is what settles the argument later.
  3. 2
    MigrateNew files only. We never edit your .tf: the parser we read HCL with physically cannot write it back.
  4. 3
    VerifyThe four checks. Certificate issued only on a pass.
  5. 4
    CutoverYour engineers, your CI, a window you choose.
  6. 5
    HypercareSeven days, with the rollback path armed and the checksummed backups intact.

The tool cannot break your infrastructure.

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.

What we do not claim.

A migration service that lists only what it can do is selling something else.

Start with the assessment.

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.