Product1 distinct publisher3 min readUpdated
The tfcompat harness runs the same HCL program through tofu and pulumi, then compares what the providers saw. The oracle is tofu, not a recorded expectation.
The Product Desk · Product desk

Compiled by The Product DeskSomething wrong?How this is made
Pulumi has published the mechanics behind the one sentence its Terraform migration story rests on: a program that works for `tofu apply` will also work for `pulumi up` [1]. The consequential part is not the promise but its testability, because Pulumi defines correctness for Pulumi HCL as generating the same set of provider steps that tofu does for the same program [2], and has built a harness, tfcompat, that checks the property by running both tools and comparing what the providers saw [3].
The reasoning is narrow in a useful way. Pulumi's argument is that providers are the part of its model that generates user-observable behavior, so if the two systems match what providers see, they match what users see [4]. Both engines are described as doing the same job, turning actual state and desired state into imperative actions so one can be reconciled to the other, however different the expression syntax and the reconciliation engine underneath [5]. Pulumi HCL dynamically bridges any Terraform provider in the registry in order to match semantics [6], and Pulumi frames the whole promise as a precondition for sharing Terraform modules between tofu configs and Pulumi programs [7]. Note the scope: the equivalence is asserted for the subset of Pulumi programs that are valid OpenTofu programs [8], which makes the guarantee one-directional [9].
Mechanically, a tfcompat case is two things: the files of the HCL program, and the providers that program uses [10]. RunCase starts each provider in memory, copies the test files into two separate temp directories, then runs `tofu plan` and `tofu apply` on one side and `pulumi preview` and `pulumi up` on the other, using TF_REATTACH_PROVIDERS and PULUMI_BRIDGE_REATTACH_PROVIDERS respectively to attach both runs to the same in-memory providers [11]. The harness records every provider gRPC call and the stack outputs from both invocations, then asserts that the outputs match and that the providers saw the same operations [12].
The design detail worth copying: nowhere in a test case does anyone write down what Pulumi HCL should do, because RunCase takes a scenario and not accepted behavior [13]. tofu is the oracle. That removes the standard failure mode of golden-file compatibility suites, where the recorded expectation quietly drifts away from the thing it was supposed to imitate. It also means the suite is worth exactly as much as its scenario list.
Which is where the published account thins. The worked example, TestL2SimpleResource, is one resource with two inputs and one output, run against a purpose-built in-memory provider named "simple" [14], and its assertions cover ConfigureProvider, the plan RPC issued during preview and plan, a single ApplyResourceChange that creates the resource, and the absence of any other provider RPCs [15]. Plan-and-create against a synthetic provider is the easy end of the problem. In the material available, Pulumi does not state how many cases tfcompat runs, what share of the HCL surface they cover, or which incompatibilities are currently known [16].
For anyone treating a migration as a verification exercise rather than a rewrite, the things to watch are whether cases exercise update, destroy and refresh rather than initial create; whether they run against real registry providers instead of in-memory doubles; and whether tfcompat is packaged so a team can point it at its own modules and get the same diff for itself.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Pulumi states that Pulumi HCL has at its core a simple promise: a program that works for `tofu apply` will also work for `pulumi up`.
Pulumi's stated definition of correctness: Pulumi HCL correctly interprets an HCL program when it generates the same set of provider steps as tofu does.
Pulumi has created a framework called tfcompat to assert the compatibility property for Pulumi HCL.
Pulumi argues that providers are the part of its model that generates user-observable behavior, so matching what providers see means matching what users see.
Pulumi describes both Pulumi and Terraform as systems that translate actual state and desired state into a series of imperative actions so actual state can be reconciled to desired state, noting that how desired state is expressed and the underlying reconciliation engine can be radically different.
To match semantics, Pulumi HCL dynamically bridges any Terraform provider in the registry.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Specific and falsifiable, but single-source and unquantified
The mechanism is described at an unusually verifiable level of detail — full Go test source, the main.tf under test, the exact CLI sequences, both reattach environment variables, gRPC-call and stack-output recording, and an explicit iff pass condition. That specificity is what lifts this above a marketing claim. It is capped by three things: the only publisher is the vendor whose product is being validated, the demonstration is a single trivial resource case, and the post supplies no case count, no HCL coverage measure and no known-incompatibility list, so the breadth of the tested property is unknown.
Vendor-internal usage only
The only adoption signal in the supplied material is Pulumi describing its own internal use: tfcompat living in the Pulumi repository as the Pulumi HCL compatibility suite, plus an internal LLM-agent workflow that files failing-test PRs. There is no third-party user, no external deployment, no download or usage figure, and no evidence that anyone outside Pulumi has run the harness or validated the compatibility promise against a real module corpus. Real-world adoption of the promise itself — Terraform modules actually shared across tofu and Pulumi in production — is not evidenced anywhere in the cluster.
Mildly overstated: strong promise, narrow demonstration
The framing is restrained by vendor-blog standards — the post volunteers its own scoping condition, defines correctness precisely, and shows real code. The gap is modest and comes from the distance between the headline promise, that anything working under `tofu apply` will work under `pulumi up`, and what is actually demonstrated: one resource with two inputs and one output, checked against in-memory test providers, with no coverage figure and no known-incompatibility list. The guarantee is also one-directional, and the LLM bug-hunting section asserts a low false-positive rate without quantifying it.
Vendor publishing on its own compatibility with a competitor's ecosystem
The sole source is Pulumi's own blog, describing Pulumi's product, its testing framework, and its own engineering practice. The subject matter is directly commercial: compatibility with Terraform/OpenTofu configuration and modules is the switching-cost argument for adopting Pulumi HCL, and the post's central promise is precisely the one a prospective migrator needs to believe. Pulumi controls what is measured, what passes, and which results are disclosed, and it discloses no failures, no coverage figures and no open incompatibilities. Partially offsetting: the piece publishes a falsifiable criterion and volunteers its own scope limitation rather than hiding it.
Confident about the method, not about its reach
Confidence is high that the described method exists and works as stated: the mechanics are concrete, internally consistent, and cheap to falsify, and the vendor is a competent primary source about its own repository. Confidence is low that the compatibility promise holds broadly, because the cluster has exactly one publisher with a direct commercial interest, one worked example, in-memory rather than real providers, no coverage or failure data, and no external verification.
build
1,500 submissions in 14 days: what a 12th-place GPU kernel says about agent loops1 distinct publisher
build
Decoys in the .env file: Jitpass bets on lying to your coding agent1 distinct publisher
science
Text watermarks land on 2 December. The detection they imply does not.1 distinct publisher
build
Notion's agent stack is live, not slideware, and it only changes one of your decisions1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 13, 2026