Skip to content

Add walkthrough blog covering state backend, modules, and HCL - #20644

Merged
cnunciato merged 12 commits into
release/2026-08-04from
cnunciato/tf-support-blog-post
Aug 4, 2026
Merged

Add walkthrough blog covering state backend, modules, and HCL#20644
cnunciato merged 12 commits into
release/2026-08-04from
cnunciato/tf-support-blog-post

Conversation

@cnunciato

@cnunciato cnunciato commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Companion walkthrough for the HCL Launch campaign (publishing 2026-08-04), tied to the new Terraform state backend, Terraform module registry, and native HCL support. Sits alongside the launch blog (#20569) and the engineering deep-dives (#20573, #20445) as the hands-on, do-it-yourself piece.

The post walks through, one step at a time:

  1. Migrating a Terraform project's state to the Pulumi Cloud backend (tf.pulumi.com), including remote execution and ESC credentials.
  2. Publishing a Terraform module to the Pulumi Cloud registry (go-tfe) and consuming it from Terraform.
  3. Consuming that module from a Pulumi program across languages (converted package, local conversion, and the dynamic loader).
  4. Writing and running a new project in HCL, natively on the Pulumi engine, and referencing the registry module.

Facts and commands were reconciled against the queued docs PRs: the state backend + remote-execution pages (#20570), the module-registry concept page (#19453), and the HCL language reference.

Still to do before ready-for-review

  • Add 3 screenshots (marked with <!-- SCREENSHOT --> comments): migrated stack, registry module page, VCS Confirm/Discard.
  • Generate the feature image (/blog-feature-image); feature_image is commented out until then.
  • Draft social copy (/draft-social-post).
  • /docs-review pass, then flip draft: false.

~1,740 words, draft: true. Author: christian-nunciato.

🤖 Generated with Claude Code

Closes https://github.com/pulumi/marketing/issues/1782.

@cnunciato cnunciato changed the title blog: hands-on Terraform/HCL/Pulumi Cloud walkthrough Add walkthrough blog covering state backend, modules, and HCL Aug 2, 2026
@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Social Media Review

content/blog/terraform-to-pulumi-cloud-hands-on/index.md

X — missing

LinkedIn — missing

Bluesky — missing

No social: block in frontmatter at all — the post won't be promoted until copy is added. Drafted fresh from the blog body below.


Suggested copy

X (232/255 chars):

Teams keep asking to move to Pulumi without rewriting the Terraform they already have — state, modules, HCL. We walked a real project through migrating its state and publishing a module to Pulumi Cloud.

Here's the full walkthrough.

LinkedIn (628/2950 chars):

Most teams that want to adopt Pulumi already have real Terraform in production — state sitting in an S3 bucket or HCP Terraform, modules other teams depend on, HCL nobody wants to rewrite.

We put together a hands-on walkthrough that moves a real project through all of it. Migrating the state backend to Pulumi Cloud comes down to one command, and nothing about the infrastructure changes — only where the state lives. From there, the module gets published to a private registry and consumed from a Pulumi program, and the same HCL runs natively on the Pulumi engine alongside it.

Here's the full walkthrough, start to finish.

Bluesky (288/300 chars):

Adopting Pulumi usually means real Terraform already in production — state in an S3 bucket or HCP Terraform, modules other teams depend on. We walked a real project through migrating its state to Pulumi Cloud, publishing its module, and running the same HCL natively.

Here's how it went.


To apply these suggestions, comment: @claude please update the social posts in the frontmatter with the suggested copy from the social media review above

To re-run the social media review after updates, comment: /social-review

Updated for commit 9bef009a2595ed84a27c1728434db56ca89d4b85 (short: 9bef009) at 2026-08-04 01:17 UTC.

@pulumi-bot

pulumi-bot commented Aug 2, 2026

Copy link
Copy Markdown
Collaborator

@pulumi-bot

Copy link
Copy Markdown
Collaborator

Lighthouse Performance Report

Commit: dcc1bca | Metric definitions

Page Device Score FCP LCP TBT CLS SI
Homepage Mobile 🔴 36 6.2s 13.6s 1184ms 0.001 6.2s
Homepage Desktop 🟡 88 0.8s 1.1s 240ms 0.014 1.3s
Install Pulumi Mobile 🟡 57 5.9s 8.9s 88ms 0.054 8.0s
Install Pulumi Desktop 🟡 81 1.3s 1.9s 0ms 0.015 2.9s
AWS Get Started Mobile 🟡 57 5.7s 9.4s 36ms 0.109 5.7s
AWS Get Started Desktop 🟡 86 1.3s 2.0s 0ms 0.049 1.4s

cnunciato and others added 5 commits August 3, 2026 18:12
Companion walkthrough for the HCL Launch campaign (publishing 2026-08-04):
migrate Terraform state to the Pulumi Cloud backend, publish and consume a
Terraform module via the Pulumi Cloud registry, and write HCL that runs
natively on the Pulumi engine.

Draft: still needs 3 screenshots, a feature image, and social copy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Completeness pass on the Terraform/HCL walkthrough:
- Link the launch announcement post from the intro.
- Migration: back up state first, reassure that only state location
  changes, and link out for S3/Azure/GCS/HCP/TFE source backends.
- Note audit policies (every stack) vs preventative policies (remote runs).
- Link the Terraform module registry concept page.
- Point HCL readers at `pulumi convert` for moving to a general-purpose
  language on their own schedule.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Reframe the intro around the three buckets (state backend + remote
  execution, modules as cross-language Pulumi components, first-class
  HCL), lead with GA, and pitch it as a brisk end-to-end walkthrough
  doable with a free account and trial. Link the release page and the
  announcement post.
- Develop the "why HCL": native pulumi/ providers alongside bridged
  ones, cross-language component/module interop, and the superset point,
  linking Ian's engine deep-dive.
- Sharpen the "why a dynamic module" note.
- Warmer open-source (Apache 2.0) close inviting issues and feedback.
- Fix dead link /docs/idp/deployments/ -> /docs/deployments/, and soften
  "audit policies run on every stack" to "can run on any stack."

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Expand HCL and Pulumi ESC on first mention.
- Note the module work happens in a separate org from the migrated
  personal account, to avoid org-context confusion.
- Capitalize the product name "Pulumi Policies".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pin the homepage featured slots for the Aug 4 launch: the "Bring Your
Terraform Estate Into the Agentic Era" announcement as the hero, followed
by the "Emulating Terraform on Pulumi's Engine" deep-dive and this
hands-on walkthrough. Slot 4 auto-fills.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
cnunciato and others added 2 commits August 3, 2026 23:48
- Fix dropped-word typos (consume, some teams, seen, a/an) and a
  broken relative ESC link (add leading slash).
- Add descriptive alt text to all four screenshots.
- Reword the HCL provider/module line (no "community-supported
  hashicorp/*"; don't conflate providers with modules).
- Tighten the VCS/Deployments walkthrough from four steps to three,
  keeping every action and the confirm screenshot.
- Normalize all shell command lines to a $ prompt for consistency.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@cnunciato
cnunciato requested a review from djperlovsky August 4, 2026 15:58
@cnunciato
cnunciato marked this pull request as ready for review August 4, 2026 15:58
@github-actions github-actions Bot added review:triaging Claude Triage is currently classifying the PR domain:blog PR touches blog posts or customer stories labels Aug 4, 2026
Fix dropped/incorrect words (a locally defined module, terraform CLI,
workspace name, paste into the prompt, copy your existing state, create a
new project), a stray comma, and a doubled phrase in the closing links.
Drop the contradictory "bridged" qualifier on the pulumi/aws provider and
fix the "community-supported" typo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions github-actions Bot removed the review:triaging Claude Triage is currently classifying the PR label Aug 4, 2026
@github-actions github-actions Bot added the review:in-progress Claude review is currently running label Aug 4, 2026
Comment on lines +442 to +445
* [Storing Terraform state in Pulumi Cloud](/docs/iac/get-started/terraform/terraform-state-backend/)
* [Using Terraform modules in Pulumi](/docs/iac/get-started/terraform/terraform-modules/)
* [The Pulumi HCL language reference](/docs/iac/languages-sdks/hcl/)
* [More HCL project templates](/templates/) to get going with a new project easily

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't love these, but the clock ran out and my brain turned to mush, so any suggestions are welcome. 💜

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-08-04T16:05:10Z

Tip

Summary: This PR adds a new hands-on blog post (content/blog/terraform-to-pulumi-cloud-hands-on/index.md, category: tutorials) that walks a reader end-to-end through the new Terraform support — migrating state to Pulumi Cloud, publishing and consuming a module, and running HCL natively — as the practical companion to the announcement post bring-your-terraform-estate-into-the-agentic-era, whose date this PR also normalizes; it pins both plus the engine deep-dive into the blog homepage's featured slots. Because this is a follow-along walkthrough, the wrongness that matters is anything that stops a reader mid-tour: a link that 404s, a step whose stated prerequisites don't match reality, or a command or package name that doesn't work as printed — and three findings of exactly that kind are below (a broken /releases/… link in the opening sentence, a free-account promise the module section contradicts, and an over-broad "the process is identical" claim about HCP Terraform state migration). Passes that ran: fact-check over 149 extracted claims (94 verified), cited-link spot checks, a frontmatter sweep, a structural readthrough, code-example checks, and Vale style linting. Note that a sizable share of the extracted claims were anchored to text from an earlier draft of the post and no longer match the head file — those are triaged below rather than reported as defects.

Review confidence:

Dimension Level Notes
mechanics MEDIUM Hugo preflight was skipped (content-only PR), so link and render checks here are by inspection; make lint and the full build run in their own jobs.
facts MEDIUM 94 of 149 claims verified, but the tier requirement for module publishing and several HCL/registry compatibility statements have no citation that actually supports them.
coherence MEDIUM Readthrough found a real prerequisite conflict between the intro's "free Pulumi account" promise and the module section's paid-tier requirement.
code correctness MEDIUM No executable example programs to run; snippets reviewed by inspection, and the @pulumi-labs/hcl package name is unconfirmed against the published package.
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 94 of 149 claims verified (17 unverifiable, 4 contradicted, 2 framing-drift) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 107 Pass 1, 25 Pass 2 (verified 9, contradicted 1, unverifiable 15), 17 Pass 3 (verified 6, contradicted 0, unverifiable 11).
  • Cited-claim spot-checks: 25 of 25 cited claims fetched and compared
  • Frontmatter sweep: ran on body + meta_desc + social.{bluesky, linkedin, twitter}
  • Temporal-trigger sweep: ran (recency words present in diff; spot-check in-review)
  • Code execution: not run (no static/programs/ change)
  • Code-examples checks: ran (3 specialists: structural, existence, body-code-coverage); 0 findings
  • Editorial-balance pass: ran (single-subject, N/A)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
3 16 0 0

🔍 Verification trail

149 claims extracted · 94 verified · 17 unverifiable · 4 contradicted · 2 framing-drift · 3 detector findings
  • L3 in content/blog/bring-your-terraform-estate-into-the-agentic-era/index.md "date: 2026-08-04" → ➖ not-a-claim (evidence: This is a front-matter date field for a blog post, which is metadata set by the author to indicate publish date, not a falsifiable factual assertion about the world.; source: content/blog/bring-your-terraform-estate-into-the-agentic-era/index.md front matter)
  • L5 in content/blog/bring-your-terraform-estate-into-the-agentic-era/index.md "Pulumi Cloud as a Terraform backend is generally available (GA)." → ✅ verified (evidence: (escalated from pass1) Pulumi's blog announcement states: "Starting today, Pulumi Cloud can serve as a Terraform state backend, letting you store and manage Terraform state alongside your Pulumi stacks... This feature is now generally avai…; source: https://www.pulumi.com/blog/terraform-state-backend-pulumi-cloud/)
  • L5 in content/blog/bring-your-terraform-estate-into-the-agentic-era/index.md "Pulumi IaC now includes native Terraform module support." → ✅ verified (evidence: Pulumi docs confirm: "Direct Terraform Module Support... Execute Terraform modules directly in Pulumi without conversion" and "Pulumi has first-class Terraform module support, so you can reference existing modules from a Pulumi program."; source: pulumi/docs: content/blog/2025-product-launches/index.md, content/blog/announcing-direct-tf-modules/index.md)
  • L2 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "title: 'Terraform state, modules, and HCL: A guided tour'" → ➖ not-a-claim (evidence: This is a front-matter title field for the blog post itself, not a falsifiable factual assertion about a third party — it's the author's own chosen title for their content.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L3 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "date: 2026-08-04T10:00:00-07:00" → ➖ not-a-claim (evidence: This is a blog post front-matter date field (publish timestamp metadata), not a falsifiable factual assertion that can be independently verified.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L5 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The post's meta description states that the Terraform support covers migrating state to Pulumi Cloud, publishing and consuming modules, and running HCL nativel…" → ✅ verified (evidence: The post body explicitly organizes itself into the same three buckets the meta description names: "1. Terraform state backend support... 2. Terraform module support — publish your modules to Pulumi Cloud and consume them from any Pulumi la…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L18 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is an announcement post at /blog/bring-your-terraform-estate-into-the-agentic-era/ that covers the what and why of this Terraform support." → ✅ verified (evidence: The file content/blog/bring-your-terraform-estate-into-the-agentic-era/index.md exists and its content ("What we're shipping today" section covering Terraform state backend, Terraform modules, and HCL GA, plus the rationale in the opening…; source: repo:content/blog/bring-your-terraform-estate-into-the-agentic-era/index.md)
  • L18 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a page at /releases/terraform-state-backend-modules-hcl/ describing the general availability of this feature set." → 🤷 unverifiable (framing: Content about GA of this feature set exists on pulumi.com, but not confirmed at the specific /releases/ path named in the claim; could be a real but unindexed…; evidence: (escalated from pass1) Search results confirm Pulumi published GA content about Terraform state backend and HCL support, but at URLs like /blog/terraform-state-backend-pulumi-cloud/ ("This feature is now generally available") and /blog/all…; source: WebSearch ran query "pulumi.com/releases/terraform-state-backend-modules-hcl"; top results didn't address the claim's specific URL)
  • L18 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi's Terraform state backend support, Terraform module support, and first-class HCL support are generally available as of the release announced in this pos…" → ✅ verified (framing: Source explicitly confirms GA for the state backend; GA for HCL/module support is corroborated by the original announcement's Q1 2026 GA target and later posts…; evidence: The Pulumi blog post "Now Generally Available: Store Terraform State in Pulumi Cloud" (March 2026) confirms the Terraform state backend feature is GA: "This feature is now generally available." Earlier (Dec 2025) Pulumi announced HCL and T…; source: https://www.pulumi.com/blog/terraform-state-backend-pulumi-cloud/ ; https://www.pulumi.com/blog/all-iac-including-terraform-and-hcl/)
  • L20 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "* Support for Pulumi Cloud as a Terraform state backend, including remote execution with human approvals" → ➖ not-a-claim (evidence: The quoted bullet is the PR author's own paraphrase of Pulumi's own product feature (Terraform state backend support on Pulumi Cloud), consistent with the doc's own text: "Terraform state backend support, including remote execution on Pulu…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L22-23 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi Cloud supports publishing Terraform modules and consuming them from any Pulumi language as native Pulumi components." → ✅ verified (framing: Docs confirm the general "any Terraform module becomes a native Pulumi component usable from any language" mechanism; the blog's specific claim (publish to Pul…; evidence: Pulumi's own docs (content/docs/iac/get-started/terraform/terraform-modules.md) confirm pulumi package add terraform-module turns a Terraform module into a native SDK package (e.g. pulumi_vpc/@pulumi/vpc) usable identically from Type…; source: repo:content/docs/iac/get-started/terraform/terraform-modules.md; repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L23 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi modules published to Pulumi Cloud can be consumed from any Pulumi language as native Pulumi components." → ✅ verified (framing: The post shows one language (TypeScript) as a worked example of the general "any Pulumi language" capability asserted in the summary line; the specific case is…; evidence: The same post demonstrates this exact workflow end-to-end: a Terraform module is published to Pulumi Cloud's registry, then consumed via pulumi package add s3-bucket-aws, which "generates a local TypeScript SDK in the project at ./sdks…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (lines 265-298))
  • L24-25 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi provides first-class support for HCL, running natively on the Pulumi engine." → ✅ verified (evidence: The pulumi-hcl repo (github.com/pulumi/pulumi-hcl) implements a Pulumi language plugin (pulumi-language-hcl) that integrates with the Pulumi engine via the standard LanguageRuntime gRPC server, parsing HCL/.tf files into an AST and transla…; source: gh api repos/pulumi/pulumi-hcl (README.md) — "A Pulumi language plugin that enables running Pulumi against a Terraform HCL IaC program... It parses HCL files and translates them to Pulumi resource registrations at runtime.")
  • L24 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "To make this release a little easier to appreciate holistically, I've put together a quick end-to-end walkthrough that doesn't quite cover everything, but do…" → ➖ not-a-claim (evidence: The text describes the author's own walkthrough structure ("I've put together a quick end-to-end walkthrough... We'll start with a simple Terraform project") — a faithful description of the PR author's own content plan, not a third-party-a…; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L26-27 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The walkthrough in this post can be followed start to finish using only a free Pulumi account and a free trial." → ✅ verified (framing: Claim restates what the post's own step-by-step instructions establish (free account for state backend, free trial for org-level module publishing) — self-cons…; evidence: The post itself explains each step's account requirements: state backend migration only needs a free individual Pulumi Cloud account ("create a Pulumi Cloud account ... it's free for individuals"), while module publishing "requires an Ente…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L31-32 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The starter project used in this walkthrough provisions a single Amazon S3 bucket." → 🤷 unverifiable (evidence: The pre-fetched GitHub page body is truncated to just the page header/loader markup and does not contain the repository's README or Terraform file contents, so the claim that the template provisions a single S3 bucket cannot be confirmed f…; source: https://github.com/cnunciato/simple-tf-template)
  • L35-38 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The GitHub repository cnunciato/simple-tf-template exists and can be used as a template via gh repo create." → ✅ verified (evidence: GitHub API confirms repo cnunciato/simple-tf-template exists, is public, and has \"is_template\": true, meaning it can be used as a template repo (e.g. via gh repo create --template).; source: gh api repos/cnunciato/simple-tf-template)
  • L42 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Every Terraform CLI command in this walkthrough has an equivalent OpenTofu (opentofu) command." → 🤷 unverifiable (evidence: The cited URL is an AWS CLI documentation page about configuring environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, etc.) — it has nothing to do with Terraform, OpenTofu, or CLI command equivalence between the two tools. This…; source: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html; intuition: Cited source (AWS CLI env vars page) is topically unrelated to the claim about Terraform/OpenTofu CLI command equivalen…)
  • L50 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "First, create a Pulumi Cloud account if you don't have one — it's free for individuals — and sign in. Then add a backend blo…" → ✅ verified (framing: The URL is a working signup page; the "free for individuals" claim is an accompanying editorial note not directly verifiable from the truncated body but not co…; evidence: The cited URL https://app.pulumi.com/signup returns HTTP 200 and loads the Pulumi Cloud signup page, consistent with the claim's instruction to create a Pulumi Cloud account there. The free-for-individuals claim is a well-established aspec…; source: https://app.pulumi.com/signup)
  • L60 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "First, create a Pulumi Cloud account if you don't already have one (it's free for individuals) and sign into the Pulumi consol…" → ✅ verified (framing: The link target (signup page) matches the claim's instruction to create an account; the parenthetical about being free for individuals is a supplementary detai…; evidence: The cited URL https://app.pulumi.com/signup returns HTTP 200 and serves the Pulumi Cloud signup page, consistent with the claim's instruction to create a Pulumi Cloud account there. The 'free for individuals' framing is a widely known aspe…; source: https://app.pulumi.com/signup)
  • L62 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Adding a backend block to main.tf pointing at Pulumi Cloud requires setting the organization field to your Pulumi Cloud account or organization name." → 🤷 unverifiable (framing: Cited source is a signup page unrelated to the technical claim about the backend block's organization field.; evidence: The cited URL (app.pulumi.com/signup) is just a signup page and its fetched body ("Pulumi Cloud") contains no information about the backend block syntax or the organization field requirement for Terraform-to-Pulumi Cloud state backend…; source: https://app.pulumi.com/signup)
  • L64-77 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi Cloud's Terraform remote backend is configured with backend 'remote' using hostname = 'tf.pulumi.com'." → ✅ verified (evidence: Pulumi docs (content/docs/iac/get-started/terraform/terraform-state-backend.md) show the identical configuration: hostname = "tf.pulumi.com" inside a backend "remote" { ... } block, matching the blog post's code sample exactly.; source: pulumi/docs:content/docs/iac/get-started/terraform/terraform-state-backend.md)
  • L65 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The workspace name maps directly onto Pulumi's model: the first part (my-tf-project) is the project and the second (dev) is…" → ✅ verified (framing: Source says a project "can have as many stacks as you need"; claim paraphrases as "as many stacks as you like" — same assertion, different wording, fully entai…; evidence: The Pulumi Stacks concept doc states "A project can have as many stacks as you need" and the Projects doc confirms a project is defined by a Pulumi.yaml file, with stacks created within it — matching the claim's description of the project/…; source: repo:content/docs/iac/concepts/stacks.md and repo:content/docs/iac/concepts/projects/_index.md)
  • L77 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The workspace maps is an underscore-delimited string that expresses the name of the project you'd like to use (here, my-tf-p…" → ✅ verified (evidence: The projects doc confirms Pulumi.yaml defines a project and stacks are created within it (stacks.mdmeta_desc: "a project can have as many stacks as you need"), matching the claim's description of the workspace stringmy-tf-project_de…; source: repo:content/docs/iac/concepts/projects/_index.md and repo:content/docs/iac/concepts/stacks.md)
  • L79 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "In a Terraform workspace name mapped onto Pulumi's model, the first part of the workspace name corresponds to the Pulumi project and the second part correspond…" → ✅ verified (evidence: Sibling docs (content/docs/iac/get-started/terraform/terraform-state-backend.md and content/blog/terraform-state-backend-pulumi-cloud/index.md) confirm: "The workspace name follows the convention <project>_<stack> (for example, `networki…; source: repo:content/docs/iac/get-started/terraform/terraform-state-backend.md)
  • L79 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a docs page at /docs/iac/concepts/projects/ describing the Pulumi project concept." → ✅ verified (evidence: The docs page content/docs/iac/concepts/projects/_index.md exists and renders at /docs/iac/concepts/projects/, with title "Projects" and text "A Pulumi project is any folder that contains a Pulumi.yaml project file," confirming it descri…; source: repo:content/docs/iac/concepts/projects/_index.md)
  • L79 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "A single Pulumi project can have as many stacks as you like." → ✅ verified (evidence: Pulumi's own docs state verbatim: "A project can have as many stacks as you need," matching the blog's claim that "A single project can have as many stacks as you like."; source: gh search code --owner pulumi "as many stacks" -> pulumi/docs:content/docs/iac/concepts/stacks.md)
  • L83-84 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Logging in to Pulumi Cloud via Terraform is done using the command terraform login tf.pulumi.com." → ✅ verified (evidence: Pulumi's own docs (content/docs/iac/get-started/terraform/terraform-state-backend.md) show the exact command: 'terraform login tf.pulumi.com' — described as the way to 'Authenticate with Pulumi Cloud' via Terraform.; source: repo:content/docs/iac/get-started/terraform/terraform-state-backend.md)
  • L85 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Choose yes when prompted, and you'll be taken to Pulumi Cloud to create a [personal access token](/docs/administration/access-identity/access-tokens/#persona…" → ✅ verified (evidence: The docs page at content/docs/administration/access-identity/access-tokens.md (served at /docs/administration/access-identity/access-tokens/) contains a "## Personal access tokens" section, matching the anchor #personal-access-tokens and d…; source: gh api repos/pulumi/docs/contents/content/docs/administration/access-identity/access-tokens.md)
  • L87 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "A personal access token can be created via the Pulumi Cloud docs page at /docs/administration/access-identity/access-tokens/#personal-access-tokens." → ✅ verified (evidence: The docs page content/docs/administration/access-identity/access-tokens.md exists (renders to /docs/administration/access-identity/access-tokens/) and contains a "## Personal access tokens" section with subsection "### Creating personal ac…; source: repo:pulumi/docs content/docs/administration/access-identity/access-tokens.md)
  • L91-93 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "After successfully logging in via terraform login tf.pulumi.com, the CLI prints 'Success! Logged in to Terraform Enterprise (tf.pulumi.com)'." → ✅ verified (evidence: The blog shows the CLI output as "Success! Logged in to Terraform Enterprise (tf.pulumi.com)" following terraform login tf.pulumi.com. This matches the standard Terraform CLI login success message format (host substituted into the templa…; source: gh search code "Success! Logged in to Terraform Enterprise" (cross-repo corroboration of Terraform CLI's standard login message format); repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L98 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Migrating Terraform state to a newly configured backend is done using the command terraform init -migrate-state." → ✅ verified (evidence: Terraform's own CLI source confirms this flag: init.go defines -migrate-state Reconfigure a backend, and attempt to migrate any [existing state], matching the claim that migrating state to a newly configured backend is done via `terrafor…; source: gh search code --repo hashicorp/terraform "migrate-state" (internal/command/init.go: "-migrate-state Reconfigure a backend, and attempt to migrate any"))
  • L101-110 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Terraform detects a backend configuration change and prompts 'Do you want to copy existing state to the new backend?' offering to migrate state from the previo…" → ✅ verified (evidence: Terraform's own source (hashicorp/terraform internal/command/meta_backend_migrate.go) contains the exact query string: 'Do you want to copy existing state to the new backend?' — confirming this is real Terraform CLI behavior triggered on b…; source: gh search code --owner hashicorp "Do you want to copy existing state to the new backend" (hashicorp/terraform:internal/command/meta_backend_migrate.go))
  • L103 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "In the Pulumi Cloud console, choose Stacks, and you'll see your new stack in the list, along with its first update and the resources now under management.…" → 🤷 unverifiable (evidence: The quoted claim text ("resources now under management. Those resources are searchable, too — press ⌘K and start typing") does not appear anywhere in the current content/blog/terraform-to-pulumi-cloud-hands-on/index.md file. The correspond…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md; intuition: Claim text not found in the target file at all — possible stale extraction from a prior draft or diff artifact rather t…)
  • L105 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "" → ➖ not-a-claim (evidence: This is an HTML comment placeholder instructing where to insert a screenshot; it is not a falsifiable assertion about Pulumi's product or behavior.; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L107 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Nothing about your infrastructure changed here — only where its state lives. Run terraform plan to confirm you see no changes. We used a local backend to kee…" → ✅ verified (framing: Blog claims the same migration process applies to S3, Azure, GCS, HCP Terraform, and Terraform Enterprise; the cited doc explicitly covers S3/Azure/GCS/local a…; evidence: The target page content/docs/iac/get-started/terraform/terraform-state-backend.md documents exactly this: a section "Migrate from a standard backend (S3, Azure Blob, GCS, local)" and another "Migrate from HCP Terraform (Terraform Cloud)",…; source: gh api repos/pulumi/docs/git/blobs/8a9fec8af0cad62cb16e55f6d1b1ac7072d97b8a (content/docs/iac/get-started/terraform/terraform-state-backend.md))
  • L109 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "One thing to know: new Terraform stacks backed by Pulumi Cloud run remotely by default, the same way HCP Terraform and Terraform Enterprise do. Plans and app…" → ✅ verified (evidence: The Pulumi docs page on Terraform remote execution states: "New stacks created through the Terraform or OpenTofu CLI default to remote execution," and lists in a table "remote (default for new stacks) | Plans and applies run on Pulumi Cl…; source: repo:content/docs/iac/get-started/terraform/terraform-remote-execution.md)
  • L114-117 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "After confirming migration, Terraform prints 'Successfully configured the backend 'remote'! Terraform will automatically use this backend unless the backend…" → ✅ verified (evidence: Terraform's own source code (hashicorp/terraform internal/command/views/init.go) contains the format string 'Successfully configured the backend %q! Terraform will automatically...' which matches the claimed message exactly when %q is "rem…; source: gh search code --owner hashicorp "Successfully configured the backend" (hashicorp/terraform:internal/command/views/init.go))
  • L117 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Note that nothing about your deployed infrastructure has changed, here; all we did was migrate your local state to Pulumi Cloud, and the process is identical w…" → ✅ verified (evidence: The linked docs page content/docs/iac/get-started/terraform/terraform-state-backend.md exists and is titled "Store Terraform State in Pulumi Cloud." It explicitly covers migration from standard backends ("Migrate from a standard backend (S…; source: gh api repos/pulumi/docs/contents/content/docs/iac/get-started/terraform/terraform-state-backend.md?ref=master)
  • L119 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a docs page at /docs/iac/get-started/terraform/terraform-state-backend/ titled 'Store Terraform state in Pulumi Cloud' with details on the migration p…" → ✅ verified (evidence: The docs repo has content/docs/iac/get-started/terraform/terraform-state-backend.md with front matter title: Store Terraform State in Pulumi Cloud and h1: "Store Terraform State in Pulumi Cloud", resolving to /docs/iac/get-started/terr…; source: gh search code --repo pulumi/docs terraform-state-backend)
  • L119 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The Terraform state migration process to Pulumi Cloud is the same regardless of whether you're moving from S3, Azure, Google Cloud, HCP Terraform, or Terraform…" → ❌ contradicted (framing: Source distinguishes an automatic single-command migration for S3/Azure/GCS/local vs. a manual export-and-push process for HCP Terraform; claim asserts "the pr…; evidence: The linked doc (terraform-state-backend.md) describes two distinct migration paths: "Migrate from a standard backend (S3, Azure Blob, GCS, local)" is done via a single command (terraform init -migrate-state), but the doc explicitly state…; source: gh api repos/pulumi/docs/contents/content/docs/iac/get-started/terraform/terraform-state-backend.md)
  • L121 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "After migrating state, the new stack appears in the Pulumi Cloud console under the Stacks section, along with its first update." → ➖ not-a-claim (evidence: The text is a first-person hands-on walkthrough describing the author's own observed UI result, directly illustrated by an accompanying screenshot (./new-tf-stack.png) in the same PR — this is the author's own account of their own reproduc…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L123 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The migrated Terraform stack and its first update in the Pulumi Cloud console" → ➖ not-a-claim (evidence: This is an image alt-text/markdown embed referencing a screenshot file, not a falsifiable temporal assertion.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md L123)
  • L126 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "https://tf.pulumi.com/app//my-tf-project_dev/runs/run-..." → ➖ not-a-claim (evidence: The URL contains placeholder segments (<your-org>, my-tf-project_dev, run-...) illustrating the format of a Pulumi Cloud run URL, not a real, dereferenceable link. Fetching the base domain naturally 404s since it's an illustrative te…; source: https://tf.pulumi.com/app/)
  • L127 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Plans and applies for Terraform stacks backed by Pulumi Cloud are executed on a Pulumi-hosted runner, with output streaming back to the user's terminal." → ✅ verified (evidence: Blog post states: "Plans and applies are executed on a Pulumi-hosted runner, and the output streams back to your terminal," corroborated by the shown CLI output "Running apply in the remote backend. Output will stream here" and a link to v…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (L125-147))
  • L129 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Confirm the apply, and you'll notice it fails — the remote runner doesn't have AWS credentials yet. That's expected, and it's where Pulumi ESC…" → ✅ verified (evidence: The link target /docs/esc/ resolves to the live Pulumi ESC documentation home page ("Pulumi ESC (Environments, Secrets, and Configuration) provides centralized secrets management and orchestration across all your infrastructure and applica…; source: repo:content/docs/esc/_index.md)
  • L133 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "When you create a Terraform stack through the CLI, Pulumi Cloud provisions a linked ESC environment with the same name as the stack. Open the stack's **Overvie…" → 🤷 unverifiable (evidence: (escalated from pass1) Search results confirm Pulumi Cloud's Terraform state backend feature (workspace-to-stack mapping, stack outputs, remote backend API) but no source explicitly states that Pulumi Cloud automatically provisions a linke…; source: WebSearch ran query "Pulumi Cloud Terraform stack linked ESC environment automatically created"; top results didn't explicitly address the auto-provisioning claim; intuition: Claim describes a specific Pulumi Cloud UI behavior (auto-provisioning of a same-named ESC environment) that would be b…)
  • L134 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Confirm the apply, and you'll notice it fails — the remote runner doesn't have AWS credentials yet. That's expected, and it's where Pulumi ESC…" → ✅ verified (evidence: The /docs/esc/ page's front matter defines: "Pulumi ESC (Environments, Secrets, and Configuration) provides centralized secrets management and orchestration across all your infrastructure and applications," matching the claim's description…; source: repo:content/docs/esc/_index.md)
  • L140-144 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "When running terraform apply against a Pulumi Cloud remote backend, the CLI prints 'Running apply in the remote backend. Output will stream here.' along with…" → 🤷 unverifiable (evidence: The pre-fetched target is the root https://tf.pulumi.com/app/ which returns HTTP 404, but the claim actually cites a specific run URL (https://tf.pulumi.com/app/cnunciato/my-tf-project_dev/runs/run-8a635542-334f-4367-b188-8b4b442b2550) tha…; source: https://tf.pulumi.com/app/; intuition: Pre-fetched URL (bare /app/ root) does not match the specific run URL cited in the claim; target alignment is questiona…)
  • L141 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "With ESC, you build and share configuration and secrets across as many Terraform and Pulumi projects as you like, and stack outputs are exposed through ESC so…" → ✅ verified (evidence: Pulumi docs confirm ESC lets you "define configuration and secrets once in an environment and share them across every stack that imports it" and supports "Importing outputs from other Pulumi (or Terraform) stacks into an environment with t…; source: https://www.pulumi.com/docs/esc/guides/pulumi-iac/)
  • L145 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Confirm with another yes, and you'll notice the apply fails — which makes sense, considering the runner doesn't have your AWS credentials yet. That's whe…" → ✅ verified (evidence: The linked page content/docs/esc/_index.md exists and describes Pulumi ESC as centralized secrets management and configuration ("Pulumi ESC (Environments, Secrets, and Configuration) provides centralized secrets management and orchestratio…; source: repo:content/docs/esc/_index.md)
  • L147 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "An apply against a Pulumi Cloud remote backend will fail if the Pulumi-hosted runner does not yet have the necessary AWS credentials configured." → ❌ contradicted (evidence: The line is a first-hand narrative describing the author's own hands-on walkthrough result ("Confirm the apply, and you'll notice it fails — which should make sense, considering the runner doesn't have AWS credentials for you yet"), not a…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L147 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Remote execution is powered by Pulumi Deployments, which also supports VCS triggers — pull requests and pushes to GitHub, GitLab, and…" → ❌ contradicted (framing: Claim cites /docs/idp/deployments/ and describes a "Pulumi GitHub app" workflow, but the live file uses /docs/deployments/ and a different VCS-configuration wo…; evidence: The current blog file at that location links to /docs/deployments/ (a top-level "Deployments & Workflows" menu section per data/docs_menu_sections.yml, confirmed to exist at content/docs/deployments/_index.md), not `/docs/idp/deployments…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (line 193); repo:data/docs_menu_sections.yml; gh api repos/pulumi/docs/contents/content/docs/deployments)
  • L147 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "A terraform apply run fails when the Pulumi-hosted runner lacks AWS credentials for the stack." → ➖ not-a-claim (evidence: This is a first-person, hands-on narrative step in the author's own walkthrough ("Confirm the apply, and you'll notice it fails — which should make sense, considering the runner doesn't have AWS credentials for you yet. That's where Pulu…; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md:127-147)
  • L149 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "When you create a new Terraform stack, Pulumi Cloud automatically creates a linked ESC environment for you with the same na…" → ✅ verified (evidence: The link target /docs/esc/concepts/environments/ resolves to a live page (content/docs/esc/concepts/environments.md in pulumi/docs) titled "Environments" that defines "An environment is the fundamental unit of organization in Pulumi ESC.…; source: gh api repos/pulumi/docs/contents/content/docs/esc/concepts/environments.md)
  • L151 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "That's the lift-and-shift. Your Terraform stacks are now first-class citizens in Pulumi Cloud, with [access control](/docs/administration/access-identity/rbac/…" → ✅ verified (evidence: The RBAC page confirms access control governs stacks in Pulumi Cloud ("Role-Based Access Control (RBAC) in Pulumi Cloud controls who can access which resources in your organization"); the Neo code reviews page confirms it analyzes pull req…; source: repo:content/docs/administration/access-identity/rbac/_index.md, repo:content/docs/ai/neo/code-reviews/_index.md, repo:content/docs/insights/policy/_index.md)
  • L151 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The linked ESC environment for a Terraform stack can be used to configure settings such as cloud credentials and other encrypted secrets, making them automatic…" → ✅ verified (framing: The cited OIDC guide is one specific mechanism (OIDC token exchange) within the broader ESC environment capability the blog describes (configuring settings/sec…; evidence: The cited page /docs/esc/guides/configuring-oidc/ (confirmed to exist in pulumi/docs) documents exactly this capability: "Pulumi ESC can be configured to act as an OpenID Connect (OIDC) provider, issuing signed, short-lived tokens. These…; source: gh api repos/pulumi/docs/contents/content/docs/esc/guides/configuring-oidc/_index.md)
  • L152 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Remote execution is powered by Pulumi Deployments, which also supports VCS triggers — pull requests and pushes to GitHub, GitLab, and oth…" → ❌ contradicted (framing: Source: "Deployments has no native approval gate, so this is a supported workaround" (via ESC open-approval ruleset). Claim: Deployments itself "supports... ma…; evidence: Pulumi's own docs state plainly: "Deployments has no native approval gate, so this is a supported workaround" — manual approval is only achieved indirectly by gating the ESC environment a deployment opens for credentials, not a built-in De…; source: repo:content/docs/esc/concepts/approvals.md (line 119))
  • L153 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "In the Pulumi Cloud console, a stack's Overview tab has a link to its associated ESC environment that can be opened to set AWS credentials directly or wire up…" → ➖ not-a-claim (evidence: This is a first-person hands-on tutorial description of the author's own walkthrough of the Pulumi Cloud console UI ("Since I've already defined an environment..."), not a third-party technical assertion. The underlying capability — linked…; source: repo:content/docs/esc/concepts/environments.md)
  • L153 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Since I've already configured an environment for sharing my AWS credentials across all of my stacks (which I've named default/personal), I can just [import t…" → ✅ verified (evidence: The linked docs page exists at pulumi/docs content/docs/esc/concepts/imports.md, which documents importing one ESC environment into another — matching the claim's link text and described usage.; source: gh api repos/pulumi/docs/contents/content/docs/esc/concepts (imports.md, path content/docs/esc/concepts/imports.md, size 9149))
  • L155 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi ESC supports importing one environment into another, as described at /docs/esc/concepts/imports/." → ✅ verified (evidence: The /docs/esc/concepts/imports/ page exists and states: "Pulumi ESC allows you to compose environments by importing configuration and secrets from other environments... You can import both static and dynamic values, including secrets, from…; source: repo:content/docs/esc/concepts/imports.md)
  • L156-157 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "That's the lift-and-shift. Your Terraform stacks are now first-class citizens in Pulumi Cloud, with [access control](/docs/administration/access-identity/rbac/…" → ✅ verified (evidence: The linked page content/docs/administration/access-identity/rbac/_index.md exists and describes: "Role-Based Access Control (RBAC) in Pulumi Cloud controls who can access which resources in your organization and what actions they can take.…; source: content/docs/administration/access-identity/rbac/_index.md)
  • L157-159 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "An ESC environment can import another environment using an imports: YAML key listing the environment name, e.g. imports:\n- default/personal." → ✅ verified (evidence: The ESC docs page linked by the blog itself confirms: "Explicit imports are defined in the imports top-level key of an environment. The imports key is a list of environments that are resolved at runtime," with an example `imports:\n -…; source: repo:content/docs/esc/concepts/imports.md)
  • L157 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Module publishing is an Enterprise or Business Critical capability, so you'll want an organization for this part. You can create one…" → 🌀 framing-drift (framing: The link merely points to the Pulumi Cloud app (title: "Pulumi Cloud"); it doesn't itself confirm the claim that module publishing requires Enterprise/Business…; evidence: The cited URL https://app.pulumi.com returns HTTP 200 and loads the Pulumi Cloud app, which is the correct entry point for creating an organization and starting a trial as described in the claim. The claim's link target matches its stated…; source: https://app.pulumi.com)
  • L159 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Our starter project includes a small module at ./modules/s3-bucket that provisions a bucket and returns its ARN. The registry's publish API is wire-compatibl…" → ✅ verified (evidence: The cited URL resolves (HTTP 200) to the hashicorp/go-tfe GitHub repo, described as "HCP Terraform/Enterprise API Client/SDK in Golang" — consistent with the claim's description of go-tfe as a library used with HCP Terraform's API.; source: https://github.com/hashicorp/go-tfe)
  • L161 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "If you've got a pile of Terraform lying around, you've almost certainly got modules, and you need somewhere to keep them. Alongside its role as a state backend…" → ✅ verified (evidence: The docs page at /docs/idp/concepts/terraform-modules/ (content/docs/idp/concepts/terraform-modules.md) confirms: "Pulumi Cloud hosts Terraform modules as a first-class registry resource alongside packages and templates," and details a pri…; source: gh api repos/pulumi/docs/contents/content/docs/idp/concepts/terraform-modules.md)
  • L162 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Module publishing is an Enterprise or Business Critical capability, so you'll want an organization for this part — separate from the personal account we just m…" → 🤷 unverifiable (evidence: The cited URL (https://app.pulumi.com) returns HTTP 200 but only renders the Pulumi Cloud app shell ("Pulumi Cloud"), with no content addressing organization creation, free trials, or Enterprise/Business Critical module publishing capabili…; source: https://app.pulumi.com)
  • L165-191 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Running terraform apply -auto-approve after configuring AWS credentials via ESC succeeds and produces output showing 'Plan: 0 to add, 1 to change, 0 to destr…" → ➖ not-a-claim (evidence: This is the blog author's own first-person hands-on walkthrough narrative, showing illustrative terminal output from a workflow they personally performed (running terraform apply -auto-approve against Pulumi Cloud remote state). It's a f…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (lines 164-191))
  • L166 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "-version 0.1.0 " → ➖ not-a-claim (evidence: The line -version 0.1.0 \ is part of a CLI example command (go run . -org ... -provider aws -version 0.1.0 -path ...) where the author is uploading their own sample module and arbitrarily chose 0.1.0 as its initial version — it's not a…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L175 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "In the Pulumi Cloud console, navigate to Platform → Terraform Modules and you'll find the new module in the list; open it to see its inputs, outputs, and v…" → ❌ contradicted (evidence: The actual file text (line 235) reads: "And then in the Pulumi console, navigate to Platform → Private components, and you should see the new module in the list." The claim's phrase "Platform → Terraform Modules" does not appear anywhe…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (line 235))
  • L189 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "bucket_arn = 'arn:aws:s3:::my-tf-project-bucket-b64b8e37'" → ➖ not-a-claim (evidence: This is an example/placeholder ARN value shown in a blog post's code output to illustrate Terraform-to-Pulumi migration, not a verifiable factual assertion about a real, checkable entity.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md (example output in blog post))
  • L191 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Remote execution is powered by Pulumi Deployments, which means your Terraform stacks can also be triggered by VCS events — pull requests…" → ✅ verified (evidence: Sibling docs confirm this: terraform-remote-execution.md states "By default, VCS-triggered applies pause after the plan completes and wait for manual approval before proceeding," and the VCS integrations page confirms GitHub, GitLab, Bitbu…; source: repo:content/docs/iac/get-started/terraform/terraform-remote-execution.md; repo:content/docs/integrations/version-control/_index.md)
  • L193 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Because remote execution is powered by Pulumi Deployments, Terraform stacks on Pulumi Cloud get VCS triggers for plans and applies on PRs and pushes to GitHub,…" → ✅ verified (evidence: Docs page confirms: "You can configure your workspace to trigger runs automatically when you push to a repository or open a pull request, using the same deployment settings as Pulumi Deployments" and…; source: repo:content/docs/iac/get-started/terraform/terraform-remote-execution.md)
  • L195-196 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "A stack's VCS-triggered deploy configuration (repo and base branch) is set under Settings → Deploy in the Pulumi Cloud console." → ✅ verified (evidence: Pulumi docs (deployments-using-cli.md) describe exactly this flow: "From the stack page, select Settings, then Deploy in the left navigation to open the deployment settings. Under Source control settings, connect the stack to y…; source: repo:content/docs/deployments/get-started/deployments-using-cli.md)
  • L197-199 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pushing a commit to the configured base branch causes a new plan to appear in the Deployments tab, and once it finishes, prompts the user to confirm or discard…" → ✅ verified (evidence: Sibling docs page confirms this exact Deployments behavior: "By default, VCS-triggered applies pause after the plan completes and wait for manual approval before proceeding. The Pulumi Cloud console shows the plan output and provides **Con…; source: repo:content/docs/iac/get-started/terraform/terraform-remote-execution.md)
  • L203 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "And that's it! Your Terraform stacks are now first-class citizens in Pulumi Cloud, with access control, [Neo code…" → ✅ verified (evidence: The linked page /docs/administration/access-identity/rbac/ exists in the pulumi/docs repo and documents Pulumi Cloud's RBAC system ("Role-Based Access Control (RBAC)... Pulumi Cloud's configurable RBAC features"). Since Pulumi Cloud manage…; source: gh search code --repo pulumi/docs rbac (content/docs/administration/access-identity/rbac/_index.md))
  • L205 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a docs section at /docs/iac/get-started/terraform/terraform-state-backend/#audit-policies describing audit policies." → ✅ verified (evidence: The page content/docs/iac/get-started/terraform/terraform-state-backend.md contains a heading "### Audit policies" (line 433) which renders to anchor #audit-policies, describing audit (detective) policy packs for Terraform-managed stacks,…; source: repo:content/docs/iac/get-started/terraform/terraform-state-backend.md)
  • L205 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Terraform stacks backed by Pulumi Cloud have access control, Neo code reviews, and Pulumi Policies available to them." → ✅ verified (evidence: Docs corroborate each element: terraform-cloud.md states "Get Neo code reviews on Terraform and OpenTofu pull requests, informed by what Pulumi Cloud knows about the infrastructure you actually have running" and "Run preventative policies…; source: gh search code --owner pulumi (pulumi/docs: content/docs/iac/comparisons/terraform-cloud.md, content/docs/iac/guides/migration/migrating-to-pulumi/from-terraform.md))
  • L208 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "And that's it! Your Terraform stacks are now first-class citizens in Pulumi Cloud, with access control, [Neo code…" → ✅ verified (evidence: The /docs/administration/access-identity/rbac/ page confirms RBAC ("Role-Based Access Control (RBAC) in Pulumi Cloud controls who can access which resources in your organization and what actions they can take") is a real Pulumi Cloud featu…; source: repo:content/docs/administration/access-identity/rbac/_index.md)
  • L209 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "If your team's been using Terraform for a while, chances are you've also written some Terraform modules, so you'll need somewhere to keep them as you move to P…" → ✅ verified (evidence: The linked page content/docs/idp/concepts/terraform-modules.md exists in pulumi/docs and states: "Pulumi Cloud hosts Terraform modules as a first-class registry resource alongside packages and templates. Teams migrating from HCP Terraform…; source: gh api repos/pulumi/docs/contents/content/docs/idp/concepts/terraform-modules.md)
  • L210 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The most direct path: every module version you publish is also converted into a Pulumi package, named after the module. Our s3-bucket/aws module becomes a pa…" → ➖ not-a-claim (evidence: This is the PR author's own hands-on walkthrough describing their own demonstrated workflow: the same doc shows uploading the module as veridian/s3-bucket/aws and then consuming it via pulumi package add s3-bucket-aws, which is interna…; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md (internal consistency check))
  • L211 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a docs page at /docs/idp/concepts/terraform-modules/ describing the private Terraform module registry." → ✅ verified (evidence: The docs page content/docs/idp/concepts/terraform-modules.md exists at path /docs/idp/concepts/terraform-modules/ (confirmed via GitHub API listing and search hits), and other docs pages reference it as covering Pulumi Cloud's private Terr…; source: gh search code --repo pulumi/docs terraform-modules; repos/pulumi/docs/contents/content/docs/idp/concepts)
  • L211 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi Cloud now includes a private registry that hosts Terraform modules and makes them available across an organization." → ✅ verified (evidence: The docs page content/docs/idp/concepts/terraform-modules.md (linked by the claim) confirms: "Pulumi Cloud hosts Terraform modules as a first-class registry resource alongside packages and templates. Teams migrating from HCP Terraform can…; source: gh search code --owner pulumi "tf.pulumi.com" -> pulumi/docs:content/docs/idp/concepts/terraform-modules.md)
  • L211 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Module publishing requires an Enterprise or Business Critical plan, so you'll need an organization with one of those for thi…" → 🤷 unverifiable (evidence: The pre-fetched pricing page body is truncated to generic nav/header content and does not include the pricing tier details or any mention of "module publishing" being restricted to Enterprise or Business Critical plans, so the specific cla…; source: https://www.pulumi.com/pricing/)
  • L213 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Publishing Terraform modules to Pulumi Cloud's registry requires an Enterprise or Business Critical subscription." → 🤷 unverifiable (evidence: The cited URL (https://app.pulumi.com) is a login-gated app page that only returns the string 'Pulumi Cloud' with no content addressing subscription tiers or Terraform module publishing requirements; it cannot confirm or deny the claim.; source: https://app.pulumi.com; intuition: Claim names specific tier requirements (Enterprise or Business Critical) that should be checkable against Pulumi's pric…)
  • L213 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi Cloud's Terraform registry API is wire-compatible with HCP Terraform's, which means the tools you already use for publishing — e.g., the [go-tfe](http…" → 🤷 unverifiable (framing: The cited URL only establishes what go-tfe is, not whether Pulumi Cloud's API is wire-compatible with it — that assertion is about Pulumi's own product and isn…; evidence: The go-tfe repo page confirms it is "HCP Terraform/Enterprise API Client/SDK in Golang," which supports that go-tfe is a valid tool for interacting with Terraform's registry/API, but the fetched page contains no information about Pulumi Cl…; source: https://github.com/hashicorp/go-tfe)
  • L215 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Because Pulumi Cloud's Terraform registry API is wire-compatible with HCP Terraform's, existing publishing tools such as the go-tfe library or the hashicorp…" → ✅ verified (evidence: Pulumi docs corroborate this exactly: "The publish API is wire-compatible with HCP Terraform's private registry: point your existing go-tfe or hashicorp/tfeprovider pipelines attf.pulumi.com`, supply a Pulumi access token, and they ru…; source: gh search code --owner pulumi "tf.pulumi.com" (content/docs/iac/comparisons/terraform-cloud.md, content/docs/idp/concepts/terraform-modules.md))
  • L216 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Module publishing requires an Enterprise or Business Critical subscription, so you'll need an organization for this part — but you can easily [create one](http…" → 🤷 unverifiable (framing: The cited link is just a "create one" call-to-action pointing to the app; it is not the source of the tier-requirement claim, so the framing check doesn't appl…; evidence: The pre-fetched URL (https://app.pulumi.com) returns HTTP 200 with only minimal body content ("Pulumi Cloud"), which is an app login page rendered via JS — it does not contain any text confirming or denying that module publishing requires…; source: https://app.pulumi.com)
  • L218-225 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The example go-tfe program is run with the command go -C upload-module run . -org <your-org> -provider aws -version 0.1.0 -path ./modules/s3-bucket." → ➖ not-a-claim (evidence: This is the author's own example go-tfe program shipped alongside the blog post, invoked with the standard Go toolchain flag -C (run from directory) plus custom flags (-org, -provider, -version, -path) defined by that same exam…; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md L215-226)
  • L218 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi Cloud's Terraform registry API is wire-compatible with HCP Terraform's, which means the tools you already use for publishing — e.g., the [go-tfe](http…" → 🤷 unverifiable (framing: Source describes go-tfe as an HCP Terraform/Enterprise client; it makes no claim about Pulumi Cloud wire-compatibility, so the compatibility assertion is unsup…; evidence: The go-tfe repo page confirms it is "HCP Terraform/Enterprise API Client/SDK in Golang," which supports that go-tfe is a tool for interacting with HCP Terraform's API. However, the page itself says nothing about Pulumi Cloud's Terraform re…; source: https://github.com/hashicorp/go-tfe)
  • L218-225 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Go can be installed via instructions at https://go.dev/doc/install." → ✅ verified (evidence: The cited page at https://go.dev/doc/install is titled "Download and install" and provides step-by-step instructions for installing Go, matching the claim exactly.; source: https://go.dev/doc/install)
  • L231-232 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "After running the upload-module program, the CLI prints a confirmation of the form 'creating module veridian/s3-bucket/aws' and 'uploaded veridian/s3-bucket/aw…" → ➖ not-a-claim (evidence: The "upload-module" program is a custom go-tfe sample program written by the blog author for this walkthrough ("The project we've been working with includes a small go-tfe program that does exactly that"), not a Pulumi CLI command. The cla…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L235 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Published Terraform modules can be viewed in the Pulumi console under Platform → Private components, including their details, versions, usage instructions, and…" → ✅ verified (evidence: Docs page content/docs/idp/concepts/private-registry.md confirms the Pulumi Cloud console's Platform menu has a "Private components" tab ("This tab shows only the component packages published by your organization via `pulumi package publis…; source: repo:content/docs/idp/concepts/private-registry.md)

  • Refresh this review — comment @claude #update-review. Say what you fixed, or which finding you dispute and why; both work in the same mention.
  • Ask for anything else — comment @claude with no hashtag (questions, one-off fixes). Leaves this review untouched.

Important

Please don't hide, resolve, or delete this comment! It breaks things!

📖 How pre-merge review works — the full lifecycle, short-circuits, and escape hatches.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor
continued from previous comment
  • L242-248 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "A Terraform module hosted in Pulumi Cloud is referenced in main.tf using source = 'tf.pulumi.com/<your-org>/s3-bucket/aws' and a version field." → ✅ verified (evidence: Docs confirm the source format tf.pulumi.com/<namespace>/<name>/<system> [<version>] for consuming Pulumi Cloud-hosted Terraform modules, and the blog's own example (source = "tf.pulumi.com/<your-org>/s3-bucket/aws", `version = "0.1.0"…; source: pulumi/docs:content/docs/iac/guides/building-extending/using-existing-tools/use-terraform-module.md ("pulumi package add hcl module tf.pulumi.com/// []"))
  • L250-261 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "After updating a Terraform module source to point to the hosted Pulumi Cloud registry version, running terraform plan downloads the module and produces no ch…" → ✅ verified (evidence: The doc's own transcript shows terraform plan downloading the module from tf.pulumi.com and reporting "No changes. Your infrastructure matches the configuration." This matches standard Terraform behavior and is corroborated by pulumi/d…; source: pulumi/docs:content/docs/iac/comparisons/terraform-cloud.md)
  • L267 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi Cloud allows consuming a Terraform module from a Pulumi program written in a different language than the module's original implementation." → ✅ verified (evidence: The blog post's own walkthrough demonstrates this: the module is authored as a Terraform module (HCL, uploaded as veridian/s3-bucket/aws), then consumed from a TypeScript Pulumi program in the "Consume the module from a Pulumi program" s…; source: pulumi/docs:content/docs/iac/comparisons/terraform/_index.md and content/blog/terraform-to-pulumi-cloud-hands-on/index.md L265-273)
  • L269 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "This one uses untyped references, which trades a little safety for flexibility. Run pulumi up, and — since the bucket already exists — you'll see no changes.…" → ➖ not-a-claim (evidence: This text is a narrative description of the tutorial author's own hands-on walkthrough (running pulumi up in their own example scenario), not a falsifiable third-party assertion.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L272-273 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Creating a new TypeScript Pulumi project is done with the commands mkdir ../my-typescript-project && cd $_ followed by pulumi new typescript." → ✅ verified (evidence: Multiple Pulumi docs, workshops, and blog posts consistently use pulumi new typescript as the standard command to scaffold a new TypeScript Pulumi project (e.g., content/docs/iac/languages-sdks/javascript/_index.md: "$ pulumi new typescr…; source: gh search code --owner pulumi "pulumi new typescript")
  • L272 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Let's see how this looks with a TypeScript project. If you haven't already, install Pulumi, then run:" → ✅ verified (evidence: content/docs/install/_index.md exists at that exact path and is titled "Download & Install Pulumi", containing OS-specific install instructions (brew, install script, MSI, etc.), matching the link text "install Pulumi" pointing to /docs/in…; source: repo:content/docs/install/_index.md)
  • L273 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Maybe your team just prefers HCL. As of today, HCL is a first-class language in the Pulumi engine, right alongside TypeScript, Python, Go, C#, Java, and YAML —…" → 🤷 unverifiable (evidence: The cited URL is just the OpenTofu GitHub repo landing page, which only describes OpenTofu itself ("OpenTofu lets you declaratively manage your cloud infrastructure") — it contains no statement about Pulumi's HCL support or its compatibili…; source: https://github.com/opentofu/opentofu; intuition: "100% compatible, with no syntactical differences" is a strong absolute claim that a generic repo landing page cannot s…)
  • L279-280 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "A converted Terraform module package can be added to a Pulumi TypeScript project with the command pulumi package add s3-bucket-aws." → ✅ verified (evidence: pulumi/pulumi's internal architecture docs confirm pulumi package add is a real CLI subcommand that resolves a package descriptor and "generate[s] and link[s] in SDKs for any dependent packages" — consistent with the blog's usage `pulumi…; source: gh api repos/pulumi/pulumi/contents/docs/architecture/plugins.md (section "pulumi package add"))
  • L279 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Open the generated project. You'll find familiar .tf files and a Pulumi.yaml that sets runtime: hcl. There's no conversion step — the Pulumi CLI runs the…" → ✅ verified (evidence: pulumi/pulumi-hcl README confirms: "This plugin allows you to use familiar Terraform/HCL syntax while leveraging Pulumi's state management, secrets handling, and cloud platform. It parses HCL files and translates them to Pulumi resource re…; source: gh api repos/pulumi/pulumi-hcl/contents/README.md)
  • L279 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Maybe your team just prefers HCL. As of today, HCL is a first-class language in the Pulumi engine, right alongside TypeScript, Python, Go, C#, Java, and YAML —…" → 🤷 unverifiable (evidence: The cited URL is just the OpenTofu repo landing page ("OpenTofu lets you declaratively manage your cloud infrastructure") and contains no information about Pulumi's HCL compatibility claims or "100% OpenTofu compatible, no syntactical diff…; source: https://github.com/opentofu/opentofu; intuition: "100% compatible, with no syntactical differences" is a very strong, absolute claim about a product feature that the li…)
  • L281 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "So why run HCL on Pulumi rather than on Terraform or OpenTofu directly? You get the whole Pulumi ecosystem in a language your team already knows. Reach for a […" → ✅ verified (evidence: The linked hcl-language-reference page (pulumi/docs) states: "Prefix a source with the pulumi/ namespace (for example, source = \"pulumi/aws\") to consume a native Pulumi provider instead of a bridged Terraform one." This matches the b…; source: pulumi/docs:content/docs/iac/languages-sdks/hcl/hcl-language-reference.md)
  • L282 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Running pulumi package add s3-bucket-aws generates a local TypeScript SDK in the project at ./sdks." → ✅ verified (evidence: Multiple Pulumi docs/blog examples confirm pulumi package add generates a local SDK under ./sdks/<name> in the project, e.g. "Successfully generated a Nodejs SDK for the vpcmod package at /Users/anton/tmp/2025-06-23/blog/sdks/vpcmod" (…; source: gh search code --owner pulumi "pulumi package add sdks" (pulumi/docs blog examples))
  • L285-293 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The generated TypeScript SDK exposes a Module class instantiated as new bucket.Module('my-module', { bucketPrefix: 'my-new-bucket', tags: {} }) with bucke…" → ➖ not-a-claim (evidence: The code sample is the blog author's own worked tutorial example (converting a specific Terraform module via pulumi package add s3-bucket-aws), and it's internally consistent with the subsequent pulumi up` output in the same file showin…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L293 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Configure your AWS credentials locally as before — or alternatively, [use the ESC environment you created earlier](/docs/esc/concepts/environments/#using-envir…" → ✅ verified (evidence: The target page content/docs/esc/concepts/environments.md contains a "## Using environments with Pulumi IaC" heading (confirmed via code search), which produces the anchor #using-environments-with-pulumi-iac referenced in the claim; the sa…; source: gh search code --owner pulumi "Using environments with Pulumi IaC" (pulumi/docs:content/docs/esc/concepts/environments.md))
  • L295 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "An ESC environment created earlier in the walkthrough can be used with a Pulumi IaC program as documented at /docs/esc/concepts/environments/#using-environment…" → ✅ verified (evidence: The docs page content/docs/esc/concepts/environments.md contains a section "## Using environments with Pulumi IaC" (line 145) which states "Pulumi IaC has built-in support for ESC, letting you expose an environment's settings and secrets t…; source: repo:content/docs/esc/concepts/environments.md)
  • L298-314 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Running pulumi up for the TypeScript project deploys a stack containing an s3-bucket Module, a random Id resource, and an aws S3Bucket resource, creating 4 r…" → ✅ verified (evidence: The blog's own pulumi up output transcript shows exactly: pulumi:pulumi:Stack my-typescript-project-dev, s3-bucket:index:Module my-module, random:index:Id my-module-suffix, and aws:index:S3Bucket my-module-this — i.e., 4 created…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (lines 298-306))
  • L304 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Put it all together and the picture is straightforward: Pulumi is now fully interoperable with Terraform and the broader Terraform ecosystem. You can back your…" → ✅ verified (evidence: The companion announcement post confirms all three pillars as GA: "We are excited to announce the general availability of Pulumi Cloud as the backend to your Terraform state," "Pulumi programs, regardless of language, now support importing…; source: pulumi/docs:content/blog/bring-your-terraform-estate-into-the-agentic-era/index.md; pulumi/docs:content/docs/iac/comparisons/terraform/_index.md)
  • L308-309 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "And if you'd rather not stay in HCL, pulumi convert translates it into TypeScript, Python, Go, C#, Java, or Y…" → ✅ verified (evidence: CLI source lists: "Valid target languages: typescript, python, csharp, go, java, yaml" and the linked docs page at content/docs/iac/get-started/terraform/convert-hcl.md demonstrates `pulumi convert --from terraform --language {typescript,p…; source: gh api repos/pulumi/pulumi/contents/pkg/cmd/pulumi/convert/convert.go; content/docs/iac/get-started/terraform/convert-hcl.md)
  • L310 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "- The HCL language reference" → ✅ verified (framing: Linked page is the HCL overview landing page which itself links to the more detailed hcl-language-reference/ page; still a valid, topically accurate destinatio…; evidence: The page content/docs/iac/languages-sdks/hcl/_index.md exists at path /docs/iac/languages-sdks/hcl/ and covers Pulumi HCL (title: "Pulumi & HCL"), confirming the link target is valid and topically matches "The HCL language reference" descr…; source: gh api repos/pulumi/docs/contents/content/docs/iac/languages-sdks/hcl/_index.md)
  • L311 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "- Browse the templates to start a new project in minutes" → ✅ verified (evidence: The page at pulumi.com/templates/ exists and confirms: "Pulumi templates are the fastest way to deploy infrastructure to AWS, Azure, and Google Cloud." This matches the claim's description of templates to start a new project.; source: https://www.pulumi.com/templates/)
  • L313 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "If you get stuck or want to talk through your own estate, join us in the Community Slack or get in touch —…" → ✅ verified (evidence: The URL returns HTTP 200 and its content confirms it is the Pulumi Community Slack join page: "Join the Pulumi Community on Slack where you can ask questions or share ideas about infrastructure as code."; source: https://slack.pulumi.com/)
  • L316 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Put it all together and it comes to one thing: Pulumi is now fully interoperable with Terraform and the wider Terraform ecosystem. You can back your Terraform…" → ✅ verified (evidence: The claim is a summary of capabilities demonstrated step-by-step earlier in the same post: Terraform state backend support ("Pulumi Cloud can serve as a Terraform state backend"), module publishing/consuming via the private registry ("Pulu…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md; repo:content/docs/iac/get-started/terraform/terraform-state-backend.md; repo:content/docs/iac/languages-sdks/hcl/_index.md)
  • L316 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Having a language-specific, locally managed SDK provides benefits including typed inputs and outputs." → ✅ verified (evidence: Multiple official Pulumi docs pages describe this same benefit, e.g. content/docs/iac/comparisons/helm.md: "Pulumi programs are written in general-purpose languages, so authors get typed inputs and outputs, loops, conditionals, classes, ID…; source: gh search code --owner pulumi "typed inputs and outputs")
  • L318 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "In TypeScript, Terraform/HCL modules can be loaded at runtime using the @pulumi-labs/hcl module." → ✅ verified (evidence: pulumi/registry's package docs for hcl show the identical usage: import * as hcl from "@pulumi-labs/hcl";, confirming the @pulumi-labs/hcl npm module is the documented way to load Terraform/HCL modules at runtime in TypeScript, matchin…; source: gh search code "@pulumi-labs/hcl" -> pulumi/registry:themes/default/content/registry/packages/hcl/_index.md)
  • L321 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The @pulumi-labs/hcl package can be installed via npm install @pulumi-labs/hcl." → ✅ verified (evidence: The pulumi/registry repo's auto-generated package page for the hcl package (sourced from pulumi-labs/pulumi-hcl) shows the identical TypeScript import: import * as hcl from "@pulumi-labs/hcl"; used to instantiate the hcl.Module resou…; source: gh api repos/pulumi/registry/contents/themes/default/content/registry/packages/hcl/_index.md)
  • L325 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "We'd genuinely love for you to kick the tires on all of this and tell us what you think. Pulumi HCL, like the engine it runs on, is open source under the Apach…" → ✅ verified (evidence: The cited URL https://github.com/pulumi/pulumi-hcl/issues returns HTTP 200 and is the Issues page for the pulumi/pulumi-hcl repository, confirming it exists as a valid location to "open an issue" as the claim states.; source: https://github.com/pulumi/pulumi-hcl/issues)
  • L327-338 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The @pulumi-labs/hcl module exposes a Module class instantiated as new hcl.Module('my-module', { source, version, inputs }) with outputs accessed via my…" → 🌀 framing-drift (framing: shifted — source names the package @pulumi/hcl; claim names it @pulumi-labs/hcl. The API surface (Module class, source/version/inputs, .outputs) is otherwi…; evidence: The pulumi/pulumi-hcl registry docs confirm the exact API shape: import * as hcl from "@pulumi/hcl"; const vpc = new hcl.Module("vpc", { source: ..., version: ..., inputs: {...} }); ... vpc.outputs.apply(...)`. This matches the claime…; source: gh api repos/pulumi/pulumi-hcl/contents/registry/_index.md)
  • L341 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Using the @pulumi-labs/hcl runtime-loading approach trades type safety for flexibility because it uses untyped references." → ➖ not-a-claim (evidence: The claim is a direct paraphrase of the blog's own text: "Because this approach uses untyped references, you'll trade a little safety for flexibility." This is the author's own description of their product's (@pulumi-labs/hcl) design tra…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (line 341))
  • L341 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Loading Terraform modules at runtime via untyped references trades some type safety for flexibility." → ➖ not-a-claim (evidence: This is the blog author's own characterization of the tradeoff inherent in the code pattern shown just above (myModule.outputs — untyped access), consistent with the surrounding tutorial narrative: "Because this approach uses untyped re…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (L338-341))
  • L344 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Because this approach uses untyped references, you'll trade a little safety for flexibility. But either way, the modules you've already invested in can continu…" → ➖ not-a-claim (evidence: This is the PR author's own description of a design tradeoff in Pulumi's Terraform-module conversion approach (untyped .outputs references trading type safety for flexibility) — a first-party design statement about Pulumi's own feature,…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md)
  • L345 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "As of the date of this post, HCL is a first-class language in the Pulumi engine, alongside TypeScript, Python, Go, C#, Java, and YAML." → 🤷 unverifiable (evidence: The cited URL (opentofu/opentofu GitHub repo) has no relevance to the claim about HCL being a first-class Pulumi language — it does not mention Pulumi, HCL support in Pulumi's engine, or the list of Pulumi languages. Target mismatch: the s…; source: https://github.com/opentofu/opentofu; intuition: Claim's source_hint (opentofu/opentofu) is unrelated to the assertion; likely mis-attributed citation. Should be checke…)
  • L345 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The easiest way to get a feel for it is to create a new project from a template:" → ➖ not-a-claim (evidence: The sentence is an introductory transition phrase directing readers to an example, not a falsifiable assertion about a product, version, or fact.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md L345)
  • L347 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The easiest way to get a feel for it is to start from a template:" → ➖ not-a-claim (evidence: This is a subjective, non-falsifiable positioning/transition sentence written by the blog author to introduce their own recommended next step (using a template), not a checkable factual assertion.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md (line 347, author's own text))
  • L348 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "For as much flexibility as general-purpose languages offer, some times simply prefer HCL. So as of today, HCL is now a first-class language in the Pulumi engin…" → 🤷 unverifiable (evidence: The cited URL is just the OpenTofu GitHub repo landing page, which only describes OpenTofu itself ("OpenTofu lets you declaratively manage your cloud infrastructure") and says nothing about Pulumi HCL's compatibility with OpenTofu. The cla…; source: https://github.com/opentofu/opentofu)
  • L350-351 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "A new Pulumi HCL project can be started from a template using mkdir ../my-hcl-project && cd $_ followed by pulumi new aws-hcl." → ✅ verified (evidence: The pulumi/templates repo contains an aws-hcl template directory (aws-hcl/Pulumi.yaml, aws-hcl/main.tf) at the repo root, confirming pulumi new aws-hcl is a valid template name for starting a new Pulumi HCL project, consistent with the…; source: gh api repos/pulumi/templates/contents/aws-hcl)
  • L357-372 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The aws-hcl template's generated main.tf declares a required_providers block specifying aws = { source = 'pulumi/aws' }, an aws_s3_bucket resource, a…" → ✅ verified (evidence: The actual aws-hcl/main.tf template in pulumi/templates contains: terraform { required_providers { aws = { source = "pulumi/aws" } } }, a resource "aws_s3_bucket" "my-bucket" {}, and `output "bucket_name" { value = aws_s3_bucket.my-buc…; source: gh api repos/pulumi/templates/git/blobs/7ee2320e2a075b2b104497b150b9b8b9788b722b (aws-hcl/main.tf))
  • L359 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "As before, step through the prompts, then open the generated Pulumi project and main.tf:" → ➖ not-a-claim (evidence: This is an instructional/tutorial line describing the blog post's own step-by-step walkthrough (stepping through CLI prompts and opening generated files), not a falsifiable third-party assertion.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md (self-referential tutorial instruction))
  • L374-392 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Running pulumi up on the generated aws-hcl template deploys a stack containing an aws:s3:Bucket resource, creating 2 resources total." → ➖ not-a-claim (evidence: The blog post itself shows the exact pulumi up transcript: + pulumi:pulumi:Stack ... created and + aws:s3:Bucket my-bucket created, followed by Resources: + 2 created. This is the author's own worked example/output transcript from…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (L376-389))
  • L392 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "This template happens to use the bridged pulumi/aws provider, but you're free to pull in any others as well: [native Pulumi providers](/docs/iac/concepts/pro…" → ✅ verified (evidence: The linked page /docs/iac/concepts/providers/ exists and documents Pulumi provider types, stating: "Native providers are not bridged. They are generated from a cloud or service's API specification... The Azure Native and Kubernetes provide…; source: repo:content/docs/iac/concepts/providers/_index.md (pulumi/docs))
  • L394 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "The aws-hcl template uses the pulumi/aws provider." → ✅ verified (evidence: The actual aws-hcl template's main.tf in pulumi/templates repo contains: terraform { required_providers { aws = { source = "pulumi/aws" } } } — confirming the blog's claim that the aws-hcl template uses the pulumi/aws provider.; source: gh api repos/pulumi/templates/git/blobs/7ee2320e2a075b2b104497b150b9b8b9788b722b (aws-hcl/main.tf))
  • L394 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "When using a Terraform module directly in a Pulumi HCL program (not via a terraform backend block), the terraform > backend block is no longer needed." → ✅ verified (evidence: The blog's own walkthrough shows that when running the HCL program via pulumi up (Pulumi HCL engine, e.g. pulumi new aws-hcl), state and execution are managed by Pulumi directly — the terraform > backend block (used earlier only for…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (L343-424))
  • L394 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi's HCL support allows pulling in native Pulumi providers, any hashicorp/* Terraform provider, local modules, and modules published to a Pulumi Cloud re…" → ✅ verified (evidence: Official docs (content/docs/iac/languages-sdks/hcl/_index.md) confirm: "Prefix a source with pulumi/ ... to consume a native Pulumi provider" and "an unqualified source such as random (or a fully-qualified hashicorp/random) is looked…; source: repo:content/docs/iac/languages-sdks/hcl/_index.md; repo:content/blog/bring-your-terraform-estate-into-the-agentic-era/index.md)
  • L413-434 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Running pulumi up again with the module code in main.tf deploys a stack containing a components:index resource, a random:index:Id resource, and an aws:inde…" → ➖ not-a-claim (evidence: The claim is a restatement of the blog post's own shown CLI output at lines 420-431: + components:index:C619d883588c0366 s3-bucket, random:index:Id s3-bucket.suffix, aws:index:S3Bucket s3-bucket.this, and Resources: + 4 created. Th…; source: repo:content/blog/terraform-to-pulumi-cloud-hands-on/index.md (lines 420-431))
  • L436 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Cleaning up the example projects requires running both terraform destroy and pulumi destroy." → ➖ not-a-claim (evidence: The blog post itself instructs: "Don't forget to clean up both projects with a terraform destroy and pulumi destroy." This is the author's own tutorial instruction describing their own walkthrough's cleanup steps (since the tutorial cr…; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md:436)
  • L436 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "+ pulumi:pulumi:Stack my-hcl-project-dev created (10s)" → ➖ not-a-claim (evidence: This line is CLI/console output from a pulumi up run shown in a hands-on blog tutorial, illustrating the author's own demo session rather than asserting a checkable external fact.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md (console output block))
  • L437-439 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "+ ├─ random:index:Id s3-bucket.suffix created (0.22s)" → ➖ not-a-claim (evidence: This is a line from example Pulumi CLI output (pulumi up diff/progress display) shown in a blog walkthrough, not a falsifiable factual assertion. The specific resource name, path, and timing (0.22s) are illustrative sample output from th…; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md (PR's own CLI output example))
  • L440 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi lets users back Terraform state with Pulumi Cloud, publish and share Terraform modules, consume those modules from any Pulumi language, and write HCL th…" → ✅ verified (evidence: Independently corroborated across multiple Pulumi docs and the pulumi-hcl/pulumi-terraform-module repos: Pulumi Cloud "can serve as a Terraform state backend" (docs/iac/comparisons/terraform/_index.md), "If your organization publishes Terr…; source: repo:content/docs/iac/languages-sdks/hcl/_index.md; repo:content/docs/idp/concepts/terraform-modules.md; repo:content/docs/iac/comparisons/terraform/_index.md; gh search code --owner pulumi pulumi-terraform-module)
  • L442 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "bucket_arn : 'arn:aws:s3:::my-tf-project-bucket-f61cea35'" → ➖ not-a-claim (evidence: This is an example output value (a sample S3 bucket ARN with a randomly generated suffix) shown in a blog post's hands-on walkthrough, not a falsifiable factual assertion about Pulumi's product or behavior.; source: content/blog/terraform-to-pulumi-cloud-hands-on/index.md (example output in tutorial))
  • L442-446 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a docs page at /docs/iac/get-started/terraform/terraform-state-backend/ titled 'Store Terraform state in Pulumi Cloud'." → ✅ verified (evidence: The docs page content/docs/iac/get-started/terraform/terraform-state-backend.md exists at that URL path with front matter title: Store Terraform State in Pulumi Cloud and h1: "Store Terraform State in Pulumi Cloud", matching the claim…; source: repo:content/docs/iac/get-started/terraform/terraform-state-backend.md)
  • L445 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "* More HCL project templates to get going with a new project easily" → ✅ verified (evidence: The pulumi.com/templates page is a live page listing project templates across languages including HCL, e.g. "Alternatively, you can create and configure a new project with this template (helm-kubernetes-hcl) in Pulumi Cloud" and templates…; source: https://www.pulumi.com/templates/kubernetes-application/helm-chart/)
  • L447 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a templates page at /templates/ where users can browse templates to start a new project." → ✅ verified (evidence: content/templates/_index.md exists with title "Pulumi Templates" and description "Pulumi templates are starter projects for common cloud architectures on AWS, Azure, and Google Cloud...", confirming a templates page at /templates/ for brow…; source: repo:content/templates/_index.md)
  • L447 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "We'd love for you to kick the tires on all of this and let us know what you think. Pulumi HCL, like the engine it runs on, is open source under the Apache 2.0…" → ✅ verified (evidence: The cited URL https://github.com/pulumi/pulumi-hcl/issues returns HTTP 200 and is titled "Issues · pulumi/pulumi-hcl · GitHub", confirming the repo exists and has an issues page, consistent with the claim's invitation to "open an issue" th…; source: https://github.com/pulumi/pulumi-hcl/issues)
  • L449 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Issues for Pulumi HCL can be filed at https://github.com/pulumi/pulumi-hcl/issues." → ✅ verified (evidence: The cited URL https://github.com/pulumi/pulumi-hcl/issues returns HTTP 200 and is titled "Issues · pulumi/pulumi-hcl · GitHub", confirming the repository and its issues page exist as described.; source: https://github.com/pulumi/pulumi-hcl/issues)
  • L449 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a Community Slack accessible at https://slack.pulumi.com/." → ✅ verified (evidence: The pre-fetched page at https://slack.pulumi.com/ returns HTTP 200 and reads "Join the Pulumi Community on Slack where you can ask questions or share ideas about infrastructure as code," confirming the URL is a valid, accessible community…; source: https://slack.pulumi.com/)
  • L449 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "There is a sales contact form at /contact/?form=sales." → ✅ verified (evidence: Numerous other pages in pulumi/docs use the same link pattern, e.g. getting-support.md: "Contact sales to upgrade" and content/pricing/_index.md: "href: /contact/?form=sales", confirming /contact/?form=sales is the…; source: gh search code --owner pulumi "form=sales")
  • L449 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Pulumi HCL, like the Pulumi engine it runs on, is open source under the Apache 2.0 license." → ✅ verified (framing: Org-wide statement "Pulumi is proudly open source and uses the Apache 2.0 license" entails the narrower claim that the pulumi-hcl component (listed under the s…; evidence: The pulumi/pulumi engine repo confirms "Pulumi is open source under the Apache 2.0 license" and the pulumi-hcl repo appears listed under the same pulumi GitHub org, whose org page states "Pulumi is proudly open source and uses the Apache 2…; source: https://github.com/pulumi (org page) and https://github.com/pulumi/pulumi)
  • L215-232 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "creating module veridian/s3-bucket/aws" → 🚩 flagged (readthrough: prerequisite-inversion)
  • L211-213 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "Module publishing requires an Enterprise or Business Critical subscription, so you'll need an organization for this part" → 🚩 flagged (readthrough: missing-step)
  • L394-411 in content/blog/terraform-to-pulumi-cloud-hands-on/index.md "only without the terraform > backend block, as it's no longer needed" → 🚩 flagged (readthrough: missing-step)

📊 Editorial balance

Single-subject post; balance check N/A.

🚨 Outstanding in this PR

These must be resolved or refuted before merging.

  • [L18] content/blog/terraform-to-pulumi-cloud-hands-on/index.md — the post's very first link points at a page that doesn't exist. /releases/terraform-state-backend-modules-hcl/ isn't in the repo at this commit: content/releases/ contains only _index.md, agentic-infrastructure-era.md, and changelog/, and a repo-wide search for the slug returns nothing. A reader clicking "Today's big release" in the opening sentence gets a 404. Either land the release page in this PR (or confirm the companion PR that adds it merges first), or point at something that exists today:

    [Today's big release](/blog/bring-your-terraform-estate-into-the-agentic-era/) contains a whole new set of features designed for seamless interoperability with the Terraform and OpenTofu ecosystems, and there's a lot there — so much that it can be tough to get your head around all of it. But it generally falls into three major categories:
    
  • [L119] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"The Terraform state migration process to Pulumi Cloud is the same regardless of whether you're moving from S3, Azure, Google Cloud, HCP Terraform, or Terraform…" — ❌ contradicted. The sentence is at line 117 of the head file. /docs/iac/get-started/terraform/terraform-state-backend/ — the page this sentence links to for details — documents two different procedures: "Migrate from a standard backend (S3, Azure Blob, GCS, local)" is the single terraform init -migrate-state command shown here, while "Migrate from HCP Terraform (Terraform Cloud)" is a manual state export-and-push. A reader coming from HCP Terraform will follow the walkthrough's one command and find it doesn't apply to them. Narrow the claim to what the doc supports:

    Note that nothing about your deployed infrastructure has changed here; all we did was migrate your local state to Pulumi Cloud, and the same command works whether you're moving from a local backend, S3, Azure, or Google Cloud. (Moving from HCP Terraform or Terraform Enterprise takes an extra step — see [Store Terraform state in Pulumi Cloud](/docs/iac/get-started/terraform/terraform-state-backend/) for that path and for more detail on all of them.)
    

    (source: gh api repos/pulumi/docs/contents/content/docs/iac/get-started/terraform/terraform-state-backend.md)

  • [L211-213] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Module publishing requires an Enterprise or Business Critical subscription, so you'll need an organization for this part" — the post's stated prerequisites don't hold for the second half of the tour. Line 24 promises "all you'll need are a free Pulumi account and the ability to deploy an S3 bucket to AWS," but line 211 reveals a paid-tier (or trial) requirement only after the reader has already done the whole state migration. Say it up front so nobody gets stranded mid-walkthrough:

    To make this release a little easier to appreciate holistically, I've put together a quick end-to-end walkthrough that doesn't quite cover _everything_, but does cover the big stuff, and should give you a sense of how it all comes together. We'll start with a simple Terraform project that you'll deploy to AWS, and then one step at a time, bring it into Pulumi Cloud and kick the tires on each of these new features as we go. It'll take a bit, but all you'll need are a free Pulumi account, the ability to deploy an S3 bucket to AWS, and — for the module-publishing section — an organization on an Enterprise or Business Critical plan, which you can start as a free trial when you get there.
    

⚠️ Low-confidence

Review each and resolve as appropriate — these don't block the PR.

  • [L31-32] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"The starter project used in this walkthrough provisions a single Amazon S3 bucket." — 🤷 unverifiable. The cnunciato/simple-tf-template repo exists and is a template repo (that part checked out), but its contents couldn't be read to confirm what it provisions. Worth a glance from you: the terraform apply transcript a few lines down reports "2 added," so if the module also creates a random_id suffix, "provisions a single Amazon S3 bucket using a locally defined module" may read as under-counting to someone watching the output. Author question: does the template provision anything besides the bucket and its name suffix?

  • [L133] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"When you create a Terraform stack through the CLI, Pulumi Cloud provisions a linked ESC environment with the same name as the stack…" — 🤷 unverifiable. This is the load-bearing step for getting credentials onto the remote runner (head file line 149), and nothing in the public docs states that the linked environment is created automatically. Author question: is auto-creation the actual behavior, or does the reader need to create and link the environment themselves? If it's automatic, a sentence in /docs/iac/get-started/terraform/terraform-state-backend/ saying so would make this citable.

  • [L140-144] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"When running terraform apply against a Pulumi Cloud remote backend, the CLI prints 'Running apply in the remote backend. Output will stream here.' along with…" — 🤷 unverifiable, and expected: the run URL in the transcript (https://tf.pulumi.com/app/cnunciato/my-tf-project_dev/runs/run-8a635542-…) is a real run in your own org, so it isn't reachable by readers. That's fine for illustrative CLI output — flagging only so you can decide whether to placeholder the org segment the way the rest of the post does with <your-org>.

  • [L211] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Module publishing requires an Enterprise or Business Critical plan, so you'll need an organization with one of those for thi…" — 🤷 unverifiable. The linked pricing page couldn't be read deeply enough to confirm that module publishing is gated to those two tiers, and no docs page states the gate either. The tier claim appears four times in the post, so it's worth pinning down once. Author question: can you confirm the tier gate with product, and ideally cite a page that states it (a tiers: badge on the changelog entry or a line in /docs/idp/concepts/terraform-modules/ would do it)?

  • [L327-338] content/blog/terraform-to-pulumi-cloud-hands-on/index.md — *"The @pulumi-labs/hcl module exposes a Module class instantiated as new hcl.Module('my-module', { source, version, inputs }) with outputs accessed via my…"* — 🌀 framing-drift on the package name: the pulumi/pulumi-hclregistry docs showimport * as hcl from "@pulumi/hcl", while the post says npm install @pulumi-labs/hcl(lines 316–325). The API shape matches either way. Other evidence in this review points the other direction — thepulumi/registrypackage page forhcldoes use@pulumi-labs/hcl— so the two sources disagree rather than the post being wrong. **Author question:** which name is published on npm today? If it's@pulumi-labs/hcl, no change needed here; if the package has since moved to @pulumi/hcl`, the install command and the import both need updating.

  • [L215-232] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"creating module veridian/s3-bucket/aws" — the reader is told to run the upload command with -org <your-org>, but the confirmation output — and the Downloading tf.pulumi.com/veridian/s3-bucket/aws 0.1.0 line further down — shows a concrete org name, veridian, that the post never introduces. It breaks the substitution pattern the reader has been following since the backend block. Either swap the sample output to <your-org>, or add a half-sentence noting that veridian is the org name used in these examples.

Style findings

Found by pattern-based linting; Findings may be false positives.

  • line 18: [style] filler — Don't start a sentence with 'So '.
  • line 26: [style] wordiness — 'all of' is too wordy.
  • line 26: [style] em-dash density — Heavy em-dash use in this paragraph (more than 2). Dense em-dash usage is often associated with AI-drafted prose; consider substituting commas or periods where it doesn't change emphasis.
  • line 127: [style] difficulty qualifier — Avoid difficulty qualifier 'just' -- it judges difficulty for the reader (STYLE-GUIDE.md §Inclusive Language).
  • line 153: [style] substitution — Use 'select' instead of 'click' (STYLE-GUIDE.md).
  • line 155: [style] difficulty qualifier — Avoid difficulty qualifier 'simply' -- it judges difficulty for the reader (STYLE-GUIDE.md §Inclusive Language).
  • line 203: [style] substitution — Use 'select' instead of 'Click' (STYLE-GUIDE.md).
  • line 213: [style] difficulty qualifier — Avoid difficulty qualifier 'easily' -- it judges difficulty for the reader (STYLE-GUIDE.md §Inclusive Language).
  • line 215: [style] wordiness — 'obtain' is too wordy.
  • line 345: [style] difficulty qualifier — Avoid difficulty qualifier 'simply' -- it judges difficulty for the reader (STYLE-GUIDE.md §Inclusive Language).

📋 Triaged verifier findings

I double-checked these and realized they weren't real findings — click to expand

Most of these come from claim text that belongs to an earlier draft of the post, or from a citation that was checked against the wrong page.

  • [L147] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Remote execution is powered by Pulumi Deployments, which also supports VCS triggers…" — verdict: contradicted. Spurious: the quoted text is from an earlier draft. The head file (line 191) links to /docs/deployments/, which exists, and configures VCS under Management → Version Control rather than via a "Pulumi GitHub app."
  • [L152] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Remote execution is powered by Pulumi Deployments, which also supports VCS triggers…" — verdict: contradicted. Spurious: the check used /docs/esc/concepts/approvals/, which describes ESC-gated approvals for Pulumi deployments generally. For the Terraform path the post is describing, /docs/iac/get-started/terraform/terraform-remote-execution/ states plainly that "VCS-triggered applies pause after the plan completes and wait for manual approval," which is exactly the behavior shown in the post's confirm.png.
  • [L175] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"In the Pulumi Cloud console, navigate to Platform → Terraform Modules…" — verdict: contradicted. Spurious: stale claim text. The head file (line 233) already says Platform → Private components, which matches /docs/idp/concepts/private-registry/.
  • [L394-411] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"only without the terraform > backend block, as it's no longer needed"Spurious: flagged as a missing step, but the post doesn't actually ask the reader to reconstruct the file — the complete replacement main.tf contents follow immediately in the next code block.
  • [L42] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Every Terraform CLI command in this walkthrough has an equivalent OpenTofu (opentofu) command." — verdict: unverifiable. Mis-sourced: the citation followed was the AWS CLI environment-variables page linked in the same sentence, which has nothing to do with CLI parity between the two tools.
  • [L62] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Adding a backend block to main.tf pointing at Pulumi Cloud requires setting the organization field…" — verdict: unverifiable. Mis-sourced: the citation followed was the Pulumi Cloud signup page. The backend block itself is confirmed elsewhere in this review against /docs/iac/get-started/terraform/terraform-state-backend/, which shows the identical hostname/organization configuration.
  • [L103] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"In the Pulumi Cloud console, choose Stacks, and you'll see your new stack in the list…" — verdict: unverifiable. Mis-sourced: the quoted text (including the ⌘K search aside) isn't in the head file at all — it's from an earlier draft.
  • [L157] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Module publishing is an Enterprise or Business Critical capability, so you'll want an organization for this part. You can create one…" — verdict: framing-drift. Spurious: the framing comparison used a login-gated app page as the source. The link is a "create an organization" call to action and isn't the source of the tier claim; the tier claim itself is tracked under ⚠️ at L211.
  • [L162] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Module publishing is an Enterprise or Business Critical capability, so you'll want an organization for this part — separate from the personal account…" — verdict: unverifiable. Mis-sourced: same login-gated app page; duplicate of the tier claim tracked under ⚠️ at L211.
  • [L213] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Publishing Terraform modules to Pulumi Cloud's registry requires an Enterprise or Business Critical subscription." — verdict: unverifiable. Mis-sourced: same login-gated app page; duplicate of the tier claim tracked under ⚠️ at L211.
  • [L216] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Module publishing requires an Enterprise or Business Critical subscription, so you'll need an organization for this part — but you can easily [create one](htt…" — verdict: unverifiable. Mis-sourced: same login-gated app page; duplicate of the tier claim tracked under ⚠️ at L211.
  • [L213] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Pulumi Cloud's Terraform registry API is wire-compatible with HCP Terraform's…" — verdict: unverifiable. Mis-sourced: the citation followed was the hashicorp/go-tfe repo, which can only establish what go-tfe is. The wire-compatibility statement is confirmed elsewhere in this review against Pulumi's own docs, which say "point your existing go-tfe or hashicorp/tfe provider pipelines at tf.pulumi.com."
  • [L218] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Pulumi Cloud's Terraform registry API is wire-compatible with HCP Terraform's…" — verdict: unverifiable. Mis-sourced: duplicate of the above, same citation.
  • [L273] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Maybe your team just prefers HCL. As of today, HCL is a first-class language in the Pulumi engine…" — verdict: unverifiable. Mis-sourced: the citation followed was the OpenTofu repo landing page, and the "100% compatible, with no syntactical differences" wording the check reacted to isn't in the head file (line 343 makes the narrower first-class-language claim, which is confirmed elsewhere in this review against pulumi/pulumi-hcl).
  • [L279] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"Maybe your team just prefers HCL. As of today, HCL is a first-class language in the Pulumi engine…" — verdict: unverifiable. Mis-sourced: duplicate of the above, same citation and same stale wording.
  • [L345] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"As of the date of this post, HCL is a first-class language in the Pulumi engine, alongside TypeScript, Python, Go, C#, Java, and YAML." — verdict: unverifiable. Mis-sourced: the citation followed was the OpenTofu repo, which is unrelated to the assertion; the claim is confirmed elsewhere in this review against pulumi/pulumi-hcl.
  • [L348] content/blog/terraform-to-pulumi-cloud-hands-on/index.md"For as much flexibility as general-purpose languages offer, some times simply prefer HCL. So as of today, HCL is now a first-class language in the Pulumi engin…" — verdict: unverifiable. Mis-sourced: duplicate of the above, same citation.

  • Refresh this review — comment @claude #update-review. Say what you fixed, or which finding you dispute and why; both work in the same mention.
  • Ask for anything else — comment @claude with no hashtag (questions, one-off fixes). Leaves this review untouched.

Important

Please don't hide, resolve, or delete this comment! It breaks things!

📖 How pre-merge review works — the full lifecycle, short-circuits, and escape hatches.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

💡 Pre-existing issues in touched files (optional)

No pre-existing issues in touched files.

✅ Resolved since last review

No items resolved since the last review.

📜 Review history

  • 2026-08-04T16:05:10Z — First review of the new hands-on Terraform walkthrough: 3 blockers (broken /releases/… link in the opening line, an over-broad "process is identical" claim about HCP Terraform state migration, and a free-account promise the module section contradicts), plus 6 low-confidence items and 10 style nags; 16 verifier findings triaged as stale or mis-sourced. (fbc5df9)

  • Refresh this review — comment @claude #update-review. Say what you fixed, or which finding you dispute and why; both work in the same mention.
  • Ask for anything else — comment @claude with no hashtag (questions, one-off fixes). Leaves this review untouched.

Important

Please don't hide, resolve, or delete this comment! It breaks things!

📖 How pre-merge review works — the full lifecycle, short-circuits, and escape hatches.

@github-actions github-actions Bot added review:outstanding-issues Claude review completed; outstanding has author-actionable findings and removed review:in-progress Claude review is currently running labels Aug 4, 2026
Add mutual related_posts entries so the launch, engineering, and
walkthrough posts each surface the other two in their Related posts
block. Also fix a "sign into" -> "sign in to" typo in the walkthrough
and tidy the featured-slot comments in blog_home.yaml.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions github-actions Bot added review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention and removed review:outstanding-issues Claude review completed; outstanding has author-actionable findings labels Aug 4, 2026
@cnunciato
cnunciato merged commit b8cb2a9 into release/2026-08-04 Aug 4, 2026
8 checks passed
@cnunciato
cnunciato deleted the cnunciato/tf-support-blog-post branch August 4, 2026 16:28
cnunciato added a commit that referenced this pull request Aug 4, 2026
* Blog: "Emulating Terraform on Pulumi's Engine" (#20573)

* Draft 0 - half way done

* Update feature image for Terraform data model blog post

Co-Authored-By: Claude <noreply@anthropic.com>

* Draft 1: complete (mostly)

* links

* Fill in hook mapping table, permalinks, and conclusion

Fill the provisioner/condition-to-hook mapping table from the pulumi-hcl
source, and correct the replace_triggered_by bullet to match the code:
every element feeds replacementTrigger, and resource references also
contribute to replaceWith.

Replace the illustrative workspace.PackageDescriptor snippets with the
pulumirpc.PackageSpec requests that are actually sent, and link to the
request-construction code in pulumi-hcl and the latest-version
resolution code in the dynamic bridge.

Add the concluding section: thesis restated, known gaps, and a call to
action to file compatibility issues.

* Address review: fix SDK namespace, MLC link, and conclusion typo

Use the pulumi namespace in all module-consumption examples; the SDK
publishes under pulumi, not pulumi-labs. Point the multi-language
components link at its real path under guides/building-extending.
Fix a misspelling and missing serial comma in the conclusion.

* Bind the precondition hook to beforeUpdate as well

Match the TypeScript equivalence example to the mapping table:
preconditions run on both create and update.

---------

Co-authored-by: Jeff Merrick <jmerrick@pulumi.com>
Co-authored-by: Claude <noreply@anthropic.com>

* blog: add "Bring Your Terraform Estate Into the Agentic Era" launch post (#20569)

* blog: add "Bring Your Terraform Estate Into the Agentic Era" launch post

Staged for publication on 2026-08-04 at 9:00 AM Pacific. Announces the GA of
Pulumi Cloud as a Terraform state backend, HCL as a first-class Pulumi IaC
language, and native Terraform module support, along with the continued
HashiCorp transition offers.

Follows on from Joe Duffy's December post, "Pulumi for All Your IaC —
Including Terraform and HCL," and links back to it as the setup.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: render 1884x1256 rocket feature image

The shared placeholder copied by /new-blog-post is 942x628, which fails the
markdown linter's feature-image dimension check. Replace it with a rocket
template render (the launch/announcement template) at the required
1884x1256.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: add social copy for the Terraform launch post

Fills the blank twitter/linkedin/bluesky frontmatter fields with the copy
drafted by the social-review check. All three tee up the post without
delivering the announcement, and deliberately omit the "over 40% of users"
stat pending a freshness check before the Aug 4 publish date.

X 235/255, LinkedIn 692/2950, Bluesky 259/300.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: apply review feedback from @cnunciato

Copy edits for parallelism and clarity in the Terraform backend bullets,
plus:

- Reframe the interop claim as "Pulumi is now fully interoperable with
  Terraform and OpenTofu"
- Note that remote-by-default plans/applies follow HCP Terraform and
  Terraform Enterprise behavior
- Point the HCL link at the HCL language docs rather than the convert guide
- Add a "learn more" docs link at the end of each of the three capability
  sections
- Link "Get started with Pulumi free" to app.pulumi.com/signup

Two review questions are left for the author: whether to move the modules
section ahead of HCL, and whether to link out to Christian's forthcoming
getting-started post.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: reorder to backend, modules, then HCL

Per review feedback, the three capability sections now follow an adoption
progression: bring state to Pulumi Cloud, reuse the modules you already
have, then write HCL natively.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: drop Modular from the workshop customer list

Leaves BMW and Supabase as the named examples.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: scope remote-by-default to new Terraform stacks

Per the companion docs PR (#20570), new stacks created through the
Terraform or OpenTofu CLI default to remote execution; existing stacks
enable it with a stack tag.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: align LinkedIn copy with remote-execution scoping

Drops "existing" so the claim holds for both new stacks (remote by
default) and existing ones (remote via stack tag).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: address prose-lint warnings

- Drop the third em dash in the intro (Pulumi.EmDashDensity); the intro is
  the excerpt shown on the blog index
- Remove difficulty qualifiers "just like" and "easily"
  (Pulumi.Difficulty, STYLE-GUIDE.md Inclusive Language)
- Drop the weasel "very" from "a very clear ROI"

Keeps "it just works" — an idiom about the provider bridge, not a
judgment about the reader's effort. Remaining warnings are generic
write-good wordiness hits, left as-is.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* blog: update feature image for Terraform estate post

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Jeff Merrick <jmerrick@pulumi.com>

* Add walkthrough blog covering state backend, modules, and HCL (#20644)

* blog: add hands-on Terraform/HCL/Pulumi Cloud walkthrough (draft)

Companion walkthrough for the HCL Launch campaign (publishing 2026-08-04):
migrate Terraform state to the Pulumi Cloud backend, publish and consume a
Terraform module via the Pulumi Cloud registry, and write HCL that runs
natively on the Pulumi engine.

Draft: still needs 3 screenshots, a feature image, and social copy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* blog: add feature image for the Terraform/Pulumi Cloud walkthrough

Co-Authored-By: Claude <noreply@anthropic.com>

* blog: answer reader questions with brief inline notes and links

Completeness pass on the Terraform/HCL walkthrough:
- Link the launch announcement post from the intro.
- Migration: back up state first, reassure that only state location
  changes, and link out for S3/Azure/GCS/HCP/TFE source backends.
- Note audit policies (every stack) vs preventative policies (remote runs).
- Link the Terraform module registry concept page.
- Point HCL readers at `pulumi convert` for moving to a general-purpose
  language on their own schedule.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* blog: sharpen framing and fix doc links per author review

- Reframe the intro around the three buckets (state backend + remote
  execution, modules as cross-language Pulumi components, first-class
  HCL), lead with GA, and pitch it as a brisk end-to-end walkthrough
  doable with a free account and trial. Link the release page and the
  announcement post.
- Develop the "why HCL": native pulumi/ providers alongside bridged
  ones, cross-language component/module interop, and the superset point,
  linking Ian's engine deep-dive.
- Sharpen the "why a dynamic module" note.
- Warmer open-source (Apache 2.0) close inviting issues and feedback.
- Fix dead link /docs/idp/deployments/ -> /docs/deployments/, and soften
  "audit policies run on every stack" to "can run on any stack."

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* blog: apply docs-review fixes (acronyms, org context, product name)

- Expand HCL and Pulumi ESC on first mention.
- Note the module work happens in a separate org from the migrated
  personal account, to avoid org-context confusion.
- Capitalize the product name "Pulumi Policies".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* blog: feature the Terraform launch posts on the homepage

Pin the homepage featured slots for the Aug 4 launch: the "Bring Your
Terraform Estate Into the Agentic Era" announcement as the hero, followed
by the "Emulating Terraform on Pulumi's Engine" deep-dive and this
hands-on walkthrough. Slot 4 auto-fills.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Revisions

* blog: copyedit pass, fix ESC link, tighten deployments steps

- Fix dropped-word typos (consume, some teams, seen, a/an) and a
  broken relative ESC link (add leading slash).
- Add descriptive alt text to all four screenshots.
- Reword the HCL provider/module line (no "community-supported
  hashicorp/*"; don't conflate providers with modules).
- Tighten the VCS/Deployments walkthrough from four steps to three,
  keeping every action and the confirm screenshot.
- Normalize all shell command lines to a $ prompt for consistency.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Almost there

* blog: typo and grammar scrub

Fix dropped/incorrect words (a locally defined module, terraform CLI,
workspace name, paste into the prompt, copy your existing state, create a
new project), a stray comma, and a doubled phrase in the closing links.
Drop the contradictory "bridged" qualifier on the pulumi/aws provider and
fix the "community-supported" typo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* blog: cross-link the three Terraform launch posts as related

Add mutual related_posts entries so the launch, engineering, and
walkthrough posts each surface the other two in their Related posts
block. Also fix a "sign into" -> "sign in to" typo in the walkthrough
and tidy the featured-slot comments in blog_home.yaml.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Meta

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Jeff Merrick <jmerrick@pulumi.com>

* Add the August 2026 Terraform and HCL release page (#20617)

* Add the August 2026 Terraform and HCL release page

Adds /releases/terraform-and-hcl/, a smaller launch page covering the three
capabilities announced in the Terraform/HCL launch post: Pulumi Cloud as a
Terraform state backend, HCL as a first-class Pulumi language, and native
Terraform module support. Every card traces to that post; the page reuses the
existing releases layout, so it's frontmatter-only apart from the two partial
changes below. Dated 2026-08-04 to match the launch post, so it won't build
until then.

Extends layouts/partials/releases/hero-card.html with an optional
hero_image_max_height, which sizes hero art by height instead of width. The
May page's hero is square (427x433) while this one is wide (761x419), so a
shared max-width rendered the new art at roughly half the height. The heading
now also renders as raw HTML so a <br> can control where it wraps.

Fixes three layout issues in layouts/partials/releases/release-item.html that
affect every card on /releases/: the feature image was flush to the card's
left edge on mobile, images were vertically centered rather than sitting on
the card's bottom edge, and cards with differently-proportioned artwork came
out at different heights. The image column now holds a fixed 600/497 aspect,
so cards line up at any viewport width rather than at one fixed breakpoint.

Co-Authored-By: Claude <noreply@anthropic.com>

* Update the Terraform and HCL release feature image

Swaps in revised artwork for the /releases/ list card. Same 600x399 viewBox as
before, so the card layout is unaffected.

Co-Authored-By: Claude <noreply@anthropic.com>

* Rename the Terraform and HCL release page slug

Moves the page to /releases/terraform-state-backend-modules-hcl/, naming the
three shipped capabilities directly. No alias needed: the page is future-dated
and unmerged, so the old URL has never been live and nothing links to it.

Co-Authored-By: Claude <noreply@anthropic.com>

* Add the social card for the Terraform and HCL release page

Adds the hand-made 1200x628 card and points meta_image at it. Lives under
static/ rather than assets/fingerprinted/, since a non-blog meta_image resolves
as a raw path.

Co-Authored-By: Claude <noreply@anthropic.com>

* Reorder release sections (modules before HCL) and point homepage badge at the release page

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Add launch banner for the Terraform state, modules, and HCL release

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Swap access-control card for remote execution and refine release copy

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Finalize release page: module and HCL cards, copy fixes, badge, and banner

Adds module and HCL cards to the August 2026 release page, links the
newly-landed walkthrough post, and applies a copy/typo pass. Updates the
homepage badge and launch-banner text to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Refine release hero description copy

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Christian Nunciato <chris@nunciato.org>

* Use @pulumi/hcl and pulumi/pulumi-hcl as canonical HCL references

Update the Terraform-to-Pulumi-Cloud walkthrough to install and import
the @pulumi/hcl package (the labs-scoped @pulumi-labs/hcl has graduated to
the @pulumi scope), so it agrees with the engineering deep-dive post.

Also correct the docs-review verify-claims reference: Pulumi HCL now lives
under pulumi/pulumi-hcl, not pulumi-labs/pulumi-hcl. Point-in-time -labs
references in existing blog posts are left as-is.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Ian Wahbe <me@iwahbe.com>
Co-authored-by: Jeff Merrick <jmerrick@pulumi.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Daniel Perlovsky <dperlovsky@pulumi.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain:blog PR touches blog posts or customer stories needs-design review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants