Skip to content

fix(seo): correct unsourceable claims and stale enumerations across blog - #21066

Open
workprentice[bot] wants to merge 1 commit into
masterfrom
workprentice/blog-prose-accuracy-followup
Open

fix(seo): correct unsourceable claims and stale enumerations across blog#21066
workprentice[bot] wants to merge 1 commit into
masterfrom
workprentice/blog-prose-accuracy-followup

Conversation

@workprentice

@workprentice workprentice Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Eight prose-accuracy fixes on blog posts, verified individually rather than as a blanket find/replace.

Fixed

  1. claude-code-orchestration-frameworks — the intro claimed all three frameworks "now work across Cursor, Codex, Windsurf, Gemini CLI, and more," but the post's own body contradicts this (Superpowers' list omits Windsurf; GSTACK's list omits Gemini CLI). Rewrote to name only the shared core (Claude Code, Cursor, Codex) and point to each framework's own further list.
  2. incident-response-as-code-pagerduty-pulumi — "the resource coverage is identical" to the upstream Terraform provider isn't a claim either side publishes. Softened to "closely tracks the upstream provider."
  3. why-choose-pulumi-over-terraform — reworded the HCL-support paragraph to match what the HCL language page actually documents (existing .tf files run largely unchanged on the same engine), rather than an unverified claim about mixed-authoring teams sharing components.
  4. why-switch-to-pulumi — the Neo paragraph enumerated "Python, TypeScript, Go, .NET, or Java," but Neo's own product page only advertises code generation in "TypeScript, Python, Go, and more." Dropped the enumeration in favor of a link to the canonical language-sdks list.
  5. announcing-7-0-of-the-pulumi-aws-provider — "full surface area of the upstream Terraform AWS Provider" has no sourced parity statement backing it. Softened to "resource surface."
  6. aws-cdk-vs-pulumi-why-sst-switched — normalized a stale C# reference to .NET in a CTA card enumerating the full supported-language set.
  7. azure-container-apps (2 spots) — normalized stale C# references to .NET.
  8. build-publish-containers-iac — dropped the "each supported Pulumi language" completeness framing, since the post demonstrates code examples in exactly five languages (Python, JavaScript, TypeScript, Go, C#), not all eight in the current language-sdks list. Kept the five it actually demonstrates and renamed the C# prose mention to .NET; the ```csharp fence tags are untouched since they correctly label real C# source.

Deliberately left untouched

  • content/blog/all-iac-including-terraform-and-hcl/index.md ("we work with thousands of customers") — this is Pulumi's own first-party statement about its business scale, in a dated leadership announcement post. Softening a company's published claim about its own customer base isn't a copy-editing call this PR should make unilaterally; flagging it to the human as a business-claim question instead.

Housekeeping

Added or refreshed updated/lastmod front matter on every post whose body text changed, per the existing repo convention (131+ posts already carry updated:), without touching original date: values. Verified: no meta_desc over the 160-char lint limit across the 8 touched files, and named post authors are unchanged.


🧠 This PR was created by workprentice.

Eight prose-accuracy fixes on blog posts, verified individually rather
than as a blanket find/replace:

- claude-code-orchestration-frameworks: the intro claimed all three
  frameworks "now work across Cursor, Codex, Windsurf, Gemini CLI, and
  more" -- the post's own body contradicts this (Superpowers' list
  omits Windsurf, GSTACK's list omits Gemini CLI). Rewrote to name only
  the shared core (Claude Code, Cursor, Codex) and point to each
  framework's own further list rather than asserting a shared one that
  does not hold up against the post's own tables.
- incident-response-as-code-pagerduty-pulumi: "the resource coverage
  is identical" to the upstream Terraform provider is not a claim
  either side publishes; softened to "closely tracks the upstream
  provider."
- why-choose-pulumi-over-terraform: reworded the HCL-support paragraph
  to describe what /docs/iac/languages-sdks/hcl/ actually documents
  (existing .tf files run largely unchanged on the same engine) rather
  than an unverified claim about mixed-authoring teams sharing
  components.
- why-switch-to-pulumi: the Neo paragraph enumerated "Python,
  TypeScript, Go, .NET, or Java" but Neo's own product page only
  advertises code generation in "TypeScript, Python, Go, and more" --
  dropped the enumeration in favor of a link to the canonical
  language-sdks list.
- announcing-7-0-of-the-pulumi-aws-provider: "full surface area of the
  upstream Terraform AWS Provider" has no sourced parity statement;
  softened to "resource surface."
- aws-cdk-vs-pulumi-why-sst-switched, azure-container-apps (x2),
  build-publish-containers-iac: normalized stale C# references to
  .NET, and for build-publish-containers-iac dropped the "each
  supported Pulumi language" completeness framing since the post
  demonstrates exactly five languages (Python, JavaScript, TypeScript,
  Go, C#/.NET), not all eight in the current language-sdks list --
  code fences left as `csharp` since they label real C# source.

Left `all-iac-including-terraform-and-hcl` ("we work with thousands
of customers") untouched: it's Pulumi's own first-party statement
about its business in a dated leadership post, and softening a
company's published claim about its own scale is a business-claim
question for a human, not a copy-editing call for this PR.

Added or refreshed `updated`/`lastmod` front matter on every post
whose body text changed, per repo convention (131+ posts already
carry `updated:`), without touching original `date:` values.

---

🧠 *This PR was created by [workprentice](https://github.com/workprentice).*
@github-actions github-actions Bot added review:triaging Claude Triage is currently classifying the PR domain:blog PR touches blog posts or customer stories review:in-progress Claude review is currently running and removed review:triaging Claude Triage is currently classifying the PR labels Aug 22, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Optional style suggestions from the pre-merge review — apply or dismiss; none of them block.


Generated by Claude Code

* Optionally, consumes the resulting image URL from a containerized task definition in Kubernetes, Amazon ECS, or any other container orchestrator

All told, this will be just a few dozen lines of code. This article demonstrates doing this in AWS, Azure, Google Cloud, DigitalOcean, and Docker Hub, and offers code examples in each supported Pulumi language, namely Python, JavaScript, TypeScript, Go, and C#. These steps will work for any application that has a `Dockerfile` and is buildable by Docker. In principle, similar steps could be applied if you prefer to build your container image using different means, such as Buildpack.
All told, this will be just a few dozen lines of code. This article demonstrates doing this in AWS, Azure, Google Cloud, DigitalOcean, and Docker Hub, and offers code examples in Python, JavaScript, TypeScript, Go, and .NET. These steps will work for any application that has a `Dockerfile` and is buildable by Docker. In principle, similar steps could be applied if you prefer to build your container image using different means, such as Buildpack.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[style] difficulty qualifier — Drops minimizer; line count claim unchanged

Suggested change
All told, this will be just a few dozen lines of code. This article demonstrates doing this in AWS, Azure, Google Cloud, DigitalOcean, and Docker Hub, and offers code examples in Python, JavaScript, TypeScript, Go, and .NET. These steps will work for any application that has a `Dockerfile` and is buildable by Docker. In principle, similar steps could be applied if you prefer to build your container image using different means, such as Buildpack.
All told, this will be a few dozen lines of code. This article demonstrates doing this in AWS, Azure, Google Cloud, DigitalOcean, and Docker Hub, and offers code examples in Python, JavaScript, TypeScript, Go, and .NET. These steps will work for any application that has a `Dockerfile` and is buildable by Docker. In principle, similar steps could be applied if you prefer to build your container image using different means, such as Buildpack.

Azure Container Apps enable you to build applications in your favorite language with any dependencies and tools, package them as a container image, and deploy them in seconds. Container Apps abstract away infrastructure management by automatically scaling up and down to zero and only charging for the exact resources you use.

This post shows how to use Pulumi to build a container image and publish it as an Azure Container App. Pulumi makes it easy to create artifacts and provision and manage cloud infrastructure on any cloud using familiar programming languages, including C#, TypeScript, Python, and Go. Docker images, ACR registries, container environments, and Apps can be managed within the same infrastructure definition.
This post shows how to use Pulumi to build a container image and publish it as an Azure Container App. Pulumi makes it easy to create artifacts and provision and manage cloud infrastructure on any cloud using familiar programming languages, including .NET, TypeScript, Python, and Go. Docker images, ACR registries, container environments, and Apps can be managed within the same infrastructure definition.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[style] difficulty qualifier — Replaces 'makes it easy' without changing meaning

Suggested change
This post shows how to use Pulumi to build a container image and publish it as an Azure Container App. Pulumi makes it easy to create artifacts and provision and manage cloud infrastructure on any cloud using familiar programming languages, including .NET, TypeScript, Python, and Go. Docker images, ACR registries, container environments, and Apps can be managed within the same infrastructure definition.
This post shows how to use Pulumi to build a container image and publish it as an Azure Container App. Pulumi lets you create artifacts and provision and manage cloud infrastructure on any cloud using familiar programming languages, including .NET, TypeScript, Python, and Go. Docker images, ACR registries, container environments, and Apps can be managed within the same infrastructure definition.

@github-actions

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-08-22T00:40:45Z

Tip

Summary: A prose-accuracy sweep across eight existing blog posts: it softens two overstated claims ("full surface area" → "resource surface" for the AWS provider; "resource coverage is identical" → "closely tracks the upstream provider" for PagerDuty), replaces a stale enumeration of agent integrations in the coding-frameworks post with a narrower, defensible one, and normalizes language lists to Pulumi's current naming (C#.NET, adding JavaScript/Java where the list was incomplete). Revision dates are stamped on each touched post. The kind of wrongness that would hurt a reader here is a newly introduced inaccuracy or an under-corrected claim — a language list that now omits a supported language, or a hedge that still promises more than the source supports. Verification covered the eight edited spans plus the surrounding claims: the language enumerations and the HCL/engine claims check out against the Pulumi registry, docs, and the pulumi-hcl README, and the AWS 7.0 release notes back the reworded provider sentence. One repo-convention problem survives: why-choose-pulumi-over-terraform bumps lastmod where this site's reader-visible field is updated. Passes run: claim extraction + external verification, cited-link spot-checks, frontmatter and social-copy sweep, temporal-recency sweep, editorial balance, and prose linting.

Review confidence:

Dimension Level Notes
mechanics HIGH
facts MEDIUM Two reworded claims (the PagerDuty provider's origin story, the three-framework framing) rest on sources that don't state them; both are pre-existing, not introduced here.
coherence HIGH
editorial balance HIGH
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 12 of 33 claims verified (4 unverifiable, 0 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 20 Pass 1, 5 Pass 2 (verified 2, contradicted 0, unverifiable 3), 8 Pass 3 (verified 0, contradicted 0, unverifiable 8).
  • Cited-claim spot-checks: 5 of 5 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: not run (no fenced code blocks in content files)
  • Editorial-balance pass: ran (1 H2 sections, 0 flags fired)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
1 3 1 0

✏️ 2 one-click style suggestions are posted inline — apply them from the Files changed tab, individually or with Add suggestion to batch.

🔍 Verification trail

33 claims extracted · 12 verified · 4 unverifiable · 0 contradicted · 2 detector findings
  • L5 in content/blog/announcing-7-0-of-the-pulumi-aws-provider/index.md "updated: 2026-08-22" → ➖ not-a-claim (evidence: This is a frontmatter 'updated' timestamp field, not a falsifiable factual assertion; it coincides with today's date (2026-08-22) and is standard blog metadata rather than content to verify.; source: content/blog/announcing-7-0-of-the-pulumi-aws-provider/index.md)
  • L5 in content/blog/announcing-7-0-of-the-pulumi-aws-provider/index.md "This blog post about the Pulumi AWS Provider 7.0 release was updated on 2026-08-22." → 🤷 unverifiable (evidence: The file's frontmatter literally sets updated: 2026-08-22, so the claim accurately transcribes the metadata in the reviewed file. However, this is a future date relative to the present, and there is no independent source to confirm…; source: repo:content/blog/announcing-7-0-of-the-pulumi-aws-provider/index.md (frontmatter: updated: 2026-08-22); intuition: Future-dated "updated" field (2026-08-22) relative to a 2025-08-05 publish date is suspicious — likely a placeholder…)
  • L18 in content/blog/announcing-7-0-of-the-pulumi-aws-provider/index.md "The Pulumi AWS provider offers access to the resource surface of the upstream Terraform AWS Provider in Pulumi projects in all supported languages, including…" → ✅ verified (evidence: The registry page confirms the AWS provider supports "typescript, python, go, csharp, java, or yaml" as languages, matching the claim's list of TypeScript, Python, Go, .NET, Java, and YAML (csharp = .NET).; source: https://www.pulumi.com/registry/packages/aws/)
  • L20 in content/blog/announcing-7-0-of-the-pulumi-aws-provider/index.md "The Pulumi AWS provider 7.0 release brings fixes and improvements to the provider, including several breaking changes as part of the major version release." → ✅ verified (evidence: The v7.0.0 release notes list numerous fixes, removed dangling schema refs, removed deprecated things, and upgrade to terraform-provider-aws v6 major version, plus a dedicated "v6-v7 upgrade guide" for migration—consistent with…; source: gh release view v7.0.0 -R pulumi/pulumi-aws)
  • L11 in content/blog/aws-cdk-vs-pulumi-why-sst-switched/index.md "updated: 2026-08-22" → ➖ not-a-claim (evidence: This is a front-matter 'updated' date field, which is metadata about when the file was last edited, not a falsifiable factual assertion.; source: content/blog/aws-cdk-vs-pulumi-why-sst-switched/index.md)
  • L11 in content/blog/aws-cdk-vs-pulumi-why-sst-switched/index.md "This blog post was last updated on 2026-08-22." → ➖ not-a-claim (evidence: The "updated: 2026-08-22" value is front-matter metadata set by the PR author describing their own publishing/update pipeline for this blog post, not a third-party-attributed factual assertion that can be independently verified.…; source: repo:content/blog/aws-cdk-vs-pulumi-why-sst-switched/index.md)
  • L159 in content/blog/aws-cdk-vs-pulumi-why-sst-switched/index.md "Pulumi allows deploying infrastructure defined via its supported languages across AWS, Azure, Google Cloud, and on-premises environments from one consistent…" → ✅ verified (evidence: Pulumi ships official providers for AWS, Azure, and Google Cloud, plus on-premises platforms such as vSphere and OpenStack (pulumi/pulumi-vsphere, pulumi/pulumi-openstack), all deployable via the same Pulumi CLI/SDK workflow across its…; source: gh search code --owner pulumi (pulumi-vsphere, pulumi-openstack repos))
  • L4 in content/blog/azure-container-apps/index.md "updated: 2026-08-22" → ➖ not-a-claim (evidence: This is a front-matter "updated" date metadata field authored by the PR itself, not a falsifiable third-party factual assertion.; source: content/blog/azure-container-apps/index.md)
  • L4 in content/blog/azure-container-apps/index.md "This blog post about deploying Azure Container Apps with Docker and Pulumi was last updated on 2026-08-22." → ➖ not-a-claim (evidence: The frontmatter of content/blog/azure-container-apps/index.md literally contains updated: 2026-08-22, so the claim is a faithful restatement of the PR's own metadata field, not an independently falsifiable factual assertion. There is…; source: repo:content/blog/azure-container-apps/index.md; intuition: The updated date 2026-08-22 is future-dated relative to the current time, which is suspicious for a 'last updated'…)
  • L78 in content/blog/azure-container-apps/index.md "In the Azure Container Apps example, Pulumi supports writing the infrastructure code in TypeScript, JavaScript, Python, Go, and .NET." → ✅ verified (evidence: The post itself lists code choosers and example links for TypeScript, C# (.NET), Python, and Go, matching line 78's text: "we will use TypeScript however you could also use JavaScript, Python, Go, and .NET." Example repo links confirm…; source: repo:content/blog/azure-container-apps/index.md)
  • L492 in content/blog/azure-container-apps/index.md "Pulumi makes it easy to create artifacts and provision and manage cloud infrastructure on any cloud using familiar programming languages, including .NET…" → ✅ verified (evidence: Pulumi's core value proposition is defining and provisioning cloud infrastructure using general-purpose programming languages including .NET (C#), TypeScript/JavaScript, Python, and Go — this is Pulumi's foundational, well-documented…; source: repo:content/blog/azure-container-apps/index.md (author's own description of Pulumi's product, consistent with Pulumi's documented language support))
  • L9 in content/blog/build-publish-containers-iac/index.md "updated: 2026-08-22" → ➖ not-a-claim (evidence: This is a front-matter 'updated' date field for the blog post itself, which is metadata describing the PR author's own content, not a falsifiable third-party assertion.; source: content/blog/build-publish-containers-iac/index.md)
  • L9 in content/blog/build-publish-containers-iac/index.md "This blog post 'Build and Publish Docker Containers with Pulumi' was updated on 2026-08-22." → ➖ not-a-claim (evidence: The file's front matter literally contains updated: 2026-08-22, which is what the claim restates verbatim. This is git/frontmatter metadata describing the PR author's own edit to the file, not an independently falsifiable assertion …; source: repo:content/blog/build-publish-containers-iac/index.md; intuition: The updated date (2026-08-22) is in the future relative to a normal review timeline, which is suspicious for a…)
  • L25 in content/blog/build-publish-containers-iac/index.md "The steps described in the article will work for any application that has a Dockerfile and is buildable by Docker." → ➖ not-a-claim (evidence: The claim is a verbatim restatement of the article's own text: "These steps will work for any application that has a Dockerfile and is buildable by Docker." This is the author's own generalization about the scope/applicability of their…; source: content/blog/build-publish-containers-iac/index.md L25)
  • L25 in content/blog/build-publish-containers-iac/index.md "This article demonstrates building and publishing container images on AWS, Azure, Google Cloud, DigitalOcean, and Docker Hub." → ➖ not-a-claim (evidence: The article itself states "This article demonstrates doing this in AWS, Azure, Google Cloud, DigitalOcean, and Docker Hub" and the cloud chooser shortcode lists exactly aws,azure,gcp,digitalocean,docker, matching the claim. This is a…; source: repo:content/blog/build-publish-containers-iac/index.md)
  • L25 in content/blog/build-publish-containers-iac/index.md "This article offers code examples in Python, JavaScript, TypeScript, Go, and .NET." → ✅ verified (evidence: The article's own chooser shortcodes list language "javascript,typescript,python,go,csharp" throughout, and code blocks are shown for javascript, typescript, python, go, and csharp (.NET) — matching the claim's language list exactly.…; source: repo:content/blog/build-publish-containers-iac/index.md)
  • L25 in content/blog/build-publish-containers-iac/index.md "Similar steps to those described could in principle be applied if building a container image using different means, such as Buildpack." → ➖ not-a-claim (evidence: The source text itself reads: "In principle, similar steps could be applied if you prefer to build your container image using different means, such as Buildpack." This is a hedged, speculative statement of the author's own…; source: repo:content/blog/build-publish-containers-iac/index.md)
  • L25 in content/blog/build-publish-containers-iac/index.md "The total code required for this task is just a few dozen lines." → ➖ not-a-claim (evidence: This is a subjective characterization of the author's own code example within the same blog post, not a falsifiable third-party fact requiring external verification.; source: content/blog/build-publish-containers-iac/index.md)
  • L5 in content/blog/claude-code-orchestration-frameworks/index.md "updated: 2026-08-22" → ➖ not-a-claim (evidence: This is a front-matter metadata field recording the blog post's update date, which matches today's date (2026-08-22). It is not a falsifiable factual assertion, just PR/content metadata.; source: content/blog/claude-code-orchestration-frameworks/index.md)
  • L5 in content/blog/claude-code-orchestration-frameworks/index.md "This blog post was updated on 2026-08-22." → ➖ not-a-claim (evidence: Frontmatter of the file itself declares date: 2026-04-13 and updated: 2026-08-22, matching the claim exactly. This is the PR author's own metadata restating itself, not an independently checkable third-party assertion — and both…; source: repo:content/blog/claude-code-orchestration-frameworks/index.md)
  • L38 in content/blog/claude-code-orchestration-frameworks/index.md "GSTACK adds role-based governance." → ✅ verified (framing: README doesn't use the literal phrase "role-based governance" but describes exactly that mechanism (23 specialist roles, each with its own…; evidence: GSTACK's README describes it as turning Claude Code into "a virtual engineering team — a CEO who rethinks the product, an eng manager who locks architecture, a designer... a reviewer... a QA lead... a security officer... and a release…; source: gh api repos/garrytan/gstack/readme)
  • L38 in content/blog/claude-code-orchestration-frameworks/index.md "Three community frameworks (Superpowers, GSD, and GSTACK) have emerged that fix specific ways AI coding agents break down on real projects." → 🤷 unverifiable (framing: Source confirms existence of one of the three named frameworks only; the claim's characterization of all three and their shared purpose is not addressed by…; evidence: The pre-fetched GitHub page only confirms Superpowers exists as "An agentic skills framework & software development methodology" repo by obra; it does not address or corroborate the broader claim that three named frameworks (Superpowers…; source: https://github.com/obra/superpowers)
  • L40 in content/blog/claude-code-orchestration-frameworks/index.md "Pulumi uses general-purpose programming languages to define infrastructure, including TypeScript, JavaScript, Python, Go, .NET, and Java." → ✅ verified (framing: Claim lists a subset (TypeScript, JavaScript, Python, Go, .NET, Java) of the full supported language list (which also includes YAML and HCL…; evidence: Pulumi's official Languages & SDKs docs page states: "Pulumi supports TypeScript, JavaScript, Python, Go, .NET, Java, YAML, and HCL. Each language is equally capable and supports the full surface area of all Pulumi Registry providers,"…; source: repo:content/docs/iac/languages-sdks/_index.md)
  • L4 in content/blog/incident-response-as-code-pagerduty-pulumi/index.md "updated: 2026-08-22" → ➖ not-a-claim (evidence: This is a frontmatter 'updated' date field for the blog post itself, not a falsifiable external claim; it coincides with the current date (2026-08-22), consistent with the post being published/updated today.; source: content/blog/incident-response-as-code-pagerduty-pulumi/index.md)
  • L4 in content/blog/incident-response-as-code-pagerduty-pulumi/index.md "This blog post about incident response as code with PagerDuty and Pulumi was updated on 2026-08-22." → ➖ not-a-claim (evidence: The blog post's own frontmatter sets date: 2026-07-20 and updated: 2026-08-22; this is the author's own self-reported publish/update metadata for their own post, not a third-party checkable assertion. It is future-dated relative to…; source: repo:content/blog/incident-response-as-code-pagerduty-pulumi/index.md (frontmatter))
  • L59 in content/blog/incident-response-as-code-pagerduty-pulumi/index.md "PagerDuty's official Terraform provider started life as a community project by Alexander Hellbom before PagerDuty adopted it." → 🤷 unverifiable (evidence: The pre-fetched Pulumi Registry page for the PagerDuty provider only shows provider version/publisher metadata (v4.35.0, published by Pulumi, source repo pulumi/pulumi-pagerduty) and contains no history about the Terraform provider's…; source: https://www.pulumi.com/registry/packages/pagerduty/; intuition: Claim cites the Pulumi Registry page as source but that page has no historical/attribution content about the…)
  • L4 in content/blog/why-choose-pulumi-over-terraform/index.md "lastmod: 2026-08-22" → ➖ not-a-claim (evidence: This is a frontmatter lastmod date field set to the publish/update date of the blog post itself, which matches today's date (2026-08-22). It is metadata about the PR's own content, not a falsifiable external assertion.; source: content/blog/why-choose-pulumi-over-terraform/index.md (frontmatter))
  • L4 in content/blog/why-choose-pulumi-over-terraform/index.md "The blog post 'Why Choose Pulumi Over Terraform?' was last modified on 2026-08-22." → ➖ not-a-claim (evidence: The file's own frontmatter contains lastmod: 2026-08-22, which is exactly what the claim restates. This is a metadata field in the PR's own file, not a third-party or externally checkable assertion.; source: repo:content/blog/why-choose-pulumi-over-terraform/index.md (frontmatter line 4))
  • L4 in content/blog/why-choose-pulumi-over-terraform/index.md "lastmod: 2026-08-22" → ⚔️ mismatch (evidence: This post records its revision date in lastmod, but on this site the reader-visible revision field is updatedlayouts/blog/single.html renders .Params.updated as the "Updated " line, while lastmod only feeds the sitemap and is already derived from git via enableGitInfo: true. The bump is therefore invisible to readers.; source: repo:AGENTS.md §"Dates: updated vs lastmod")
  • L60 in content/blog/why-choose-pulumi-over-terraform/index.md "Pulumi lets infrastructure teams use the features of whichever supported programming language they choose, such as classes, functions, types, loops, package…" → ✅ verified (framing: Source lists loops, functions, classes, package management as core language features Pulumi lets you use; claim adds "types, linters, and test frameworks"…; evidence: The pulumi/pulumi README states: "Skip the YAML, and use standard language features like loops, functions, classes, and package management that you already know and love." This directly corroborates the claim that Pulumi lets teams use…; source: gh api repos/pulumi/pulumi/contents/README.md)
  • L62 in content/blog/why-choose-pulumi-over-terraform/index.md "Pulumi HCL projects are backed by the same deployment engine as every other Pulumi language." → ✅ verified (framing: Source describes HCL plugin translating to "Pulumi resource registrations at runtime" via the standard language-plugin architecture shared by all Pulumi…; evidence: The pulumi-hcl README states: "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," and requires the standard…; source: gh api repos/pulumi/pulumi-hcl/contents/README.md)
  • L62 in content/blog/why-choose-pulumi-over-terraform/index.md "Pulumi supports HCL natively as one of its supported languages, alongside Python, TypeScript, JavaScript, Go, .NET, Java, and YAML." → ✅ verified (evidence: The cited page's header states "Full support for Terraform state, cross-language modules, and HCL as a first-class language" and lists Pulumi's supported languages as "Node.js, Python, Go, .NET, Java, and YAML" plus HCL, corroborating…; source: https://www.pulumi.com/docs/iac/languages-sdks/hcl/)
  • L326-333 in content/blog/why-switch-to-pulumi/index.md "Pulumi's Neo is an infrastructure engineer that works inside your existing workflow: it proposes changes, runs previews, responds to failures, and opens pull…" → ✅ verified (framing: Official page describes broader capability set (cost optimization, compliance checks, code generation); claim describes a narrower subset (propose changes…; evidence: Pulumi's official Neo product page describes Neo as "your AI infrastructure agent" that "provisions, governs, and optimizes your cloud infrastructure," handles "debug & diagnose" (responds to failures), offers "approval workflows" (runs…; source: repo:content/product/neo.md)
  • L330-335 in content/blog/why-switch-to-pulumi/index.md "Because Pulumi infrastructure is defined in a general-purpose programming language, Pulumi Neo can read, reason about, test, and ship that infrastructure the…" → 🤷 unverifiable (evidence: The pre-fetched page is a general landing page for Pulumi Languages & SDKs (lists supported languages: Node.js, Python, Go, .NET, Java, YAML) and mentions Neo only in passing as "AI infrastructure agent." It contains no statement about…; source: https://www.pulumi.com/docs/iac/languages-sdks/; intuition: The claim is a broad marketing-style assertion about Neo's capabilities relative to general AI coding agents; the…)
  • L76-81 in content/blog/aws-cdk-vs-pulumi-why-sst-switched/index.md "The Beginnings of SST" → 🚩 flagged (readthrough: orphaned-structure)
  • L158-160 in content/blog/aws-cdk-vs-pulumi-why-sst-switched/index.md "Define your infrastructure in TypeScript, JavaScript, Python, Go, .NET, or Java, and deploy it across AWS, Azure, Google Cloud, and on-premises environments fro" → 🚩 flagged (readthrough: self-redundancy)

📊 Editorial balance

Section depth, mention distribution, recommendation steering
  • Section depth: 1 H2 sections (mean 413 lines, median 413, std 0.0). No section-depth outliers (≥3× median).
  • Vendor / entity mentions (across the changed spans): Pulumi: 14 · Terraform: 4 · AWS: 4 · Azure: 5 · Google Cloud: 3 · Docker: 4 · DigitalOcean: 2 · PagerDuty: 3 · Claude Code: 2 · Cursor: 2 · Codex: 2. Competitor and third-party mentions are factual or enumerative (upstream provider attribution, cloud-target lists, agent-compatibility lists); no disparagement and no steering language. The coding-frameworks edit reduces third-party name-dropping rather than adding it, and the remaining Cursor/Codex mentions are symmetric.
  • FAQ steering: no FAQ section in any changed span.

🚨 Outstanding in this PR

These must be resolved or refuted before merging.

  • [L4] content/blog/why-choose-pulumi-over-terraform/index.md — the revision date is stamped on lastmod, but readers never see that field. Every other post in this PR correctly uses updated:; this one is the outlier. layouts/blog/single.html renders .Params.updated as the visible "Updated <date>" line beside the publish date, whereas lastmod only feeds the sitemap and schema.org dateModified — and the site already derives that from the commit date (enableGitInfo: true). So the bump you made here is invisible on the page and redundant with git. The pre-existing lastmod: 2026-06-05 had the same problem; since you're touching the line anyway, switch the field:

    updated: 2026-08-22
    

⚠️ Low-confidence

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

  • [L38] content/blog/claude-code-orchestration-frameworks/index.md"All three started with Claude Code and have since added support for Cursor and Codex, though each has its own further list of supported agents beyond that shared core." — 🤷 unverifiable. This rewrite is a clear improvement on the enumeration it replaces ("Cursor, Codex, Windsurf, Gemini CLI, and more" was the kind of list that rots), and the "shared core" framing is the right shape. But the narrowed claim still asserts something about all three projects that no single source states, so it can rot the same way — just more slowly. Author question: can you confirm from each project's README that Cursor and Codex are supported by all three today? If any one of them supports only a subset, the sentence needs to name which. If you'd rather not re-verify three READMEs on every edit, the durable version drops the enumeration entirely: "All three started with Claude Code and have since expanded to other agents; check each project's README for its current list."

  • [L59] content/blog/incident-response-as-code-pagerduty-pulumi/index.md"PagerDuty's official Terraform provider started life as a community project by Alexander Hellbom before PagerDuty adopted it." — 🤷 unverifiable. This PR correctly fixes the second half of this sentence ("resource coverage is identical" → "closely tracks the upstream provider"), which was the overstatement worth catching. The attribution in the parenthetical is pre-existing and untouched, but it's now the only unsourced assertion left in a sentence you've already revised. The cited link goes to the Pulumi Registry page, which carries no provider history. Author question: is there a source for the Hellbom attribution (an early terraform-provider-pagerduty commit history, a PagerDuty blog post)? If so, link it; if it's recollection, either drop the parenthetical or soften it to "which began as a community project before PagerDuty adopted it." Naming a specific individual is the part that needs a citation.

  • [L330-335] content/blog/why-switch-to-pulumi/index.md"Because that infrastructure is defined in a general-purpose programming language rather than a bespoke configuration language, Neo can read, reason about, test, and ship it the same way an AI coding agent already handles the rest of your codebase." — 🤷 unverifiable. Replacing the hardcoded language list with a link is the right call and fixes the staleness this PR is targeting. The residual issue is the link target: /docs/iac/languages-sdks/ is a supported-languages index and says nothing about Neo, so a reader who follows it to check the "Neo can read, reason about, test, and ship" part lands somewhere that doesn't address it. That's low-stakes — the link plausibly reads as backing only the "general-purpose programming language" phrase it's attached to — but if you want the Neo capability claim anchored, /product/neo/ is the page that actually describes it.

Style suggestions

Optional polish from pattern-based linting — never blocking, not counted above. Take the ones that read better and ignore the rest. ✏️ marks one you can apply from the Files changed tab — use Add suggestion to batch on each, then Commit suggestions to take several in a single commit.

content/blog/azure-container-apps/index.md — 1 (1 difficulty qualifier)
  • line 492: [style] difficulty qualifier — Avoid difficulty qualifier 'easy' -- it judges difficulty for the reader (STYLE-GUIDE.md §Inclusive Language). ✏️
content/blog/build-publish-containers-iac/index.md — 1 (1 difficulty qualifier)
  • line 25: [style] difficulty qualifier — Avoid difficulty qualifier 'just' -- it judges difficulty for the reader (STYLE-GUIDE.md §Inclusive Language). ✏️
content/blog/incident-response-as-code-pagerduty-pulumi/index.md — 2 (2 wordiness)
  • line 59: [style] wordiness — 'all of' is too wordy.
  • line 59: [style] wordiness — 'It is' is too wordy.
content/blog/why-choose-pulumi-over-terraform/index.md — 1 (1 weasel word)
  • line 62: [style] weasel word — 'largely' is a weasel word!

💡 Pre-existing issues in touched files (optional)

  • [L76-81] content/blog/aws-cdk-vs-pulumi-why-sst-switched/index.mdPre-existing: the block of links into /blog/from-cdk-pulumi-evolution-of-sst/ (starting with "The Beginnings of SST") reads as an orphaned structure — a run of deep-anchor references with no surrounding sentence framing what the reader is meant to do with them. This PR doesn't touch those lines (its edits to this file are the frontmatter date and the CTA card at L159), so it's out of scope here; worth a look next time the post is revised.

✅ Resolved since last review

No items resolved since the last review.

📜 Review history

  • 2026-08-22T00:40:45Z — Corrections verify clean; one blocker: why-choose-pulumi-over-terraform bumps lastmod where the reader-visible field is updated. Three unsourced claims flagged for author confirmation. (aef2942)

  • 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 22, 2026
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 review:outstanding-issues Claude review completed; outstanding has author-actionable findings

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants