Skip to content

Refresh what-is-pulumi for AEO: answer-first def, FAQ schema, entity table, SoftwareApplication opt-in - #20752

Open
workprentice[bot] wants to merge 2 commits into
masterfrom
seo/what-is-pulumi-entity-refresh
Open

Refresh what-is-pulumi for AEO: answer-first def, FAQ schema, entity table, SoftwareApplication opt-in#20752
workprentice[bot] wants to merge 2 commits into
masterfrom
seo/what-is-pulumi-entity-refresh

Conversation

@workprentice

@workprentice workprentice Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Refreshes /what-is/what-is-pulumi/ for AEO/entity clarity and closes a real SoftwareApplication schema gap. This is the primary deliverable for the "REFRESH: /what-is/what-is-pulumi + audit thin what-is pillars" board card.

The card's premise was factually wrong — corrected here

The originating card claimed the /what-is/ section fell -27.1% WoW while /what-is/what-is-pulumi itself grew +25% WoW. Pulling the real Google Search Console numbers (property sc-domain:pulumi.com, data through 2026-08-05):

  • Section WoW (7/30-8/5 vs 7/23-7/29): clicks 126 → 116 = -7.9% (not -27.1%). Impressions +3.4%.
  • /what-is/what-is-pulumi/ WoW: clicks 5 → 2 = -60% (not +25%). Impressions -10.8%.
  • 28-day totals for the page: 16 clicks, 4,148 impressions, 0.39% CTR, avg position 5.53.

The real story is not a ranking problem, it's a CTR collapse at strong positions across the whole section — most /what-is/ pages sit at positions 5-20 with CTRs of 0.06%-0.3%, well below what those positions should earn. The headline data point: the query "what is pulumi" shows 478 impressions, 1 click, 0.21% CTR, at average position 1.94. Near-#1 and essentially no clicks — the answer is being consumed on the SERP (AI Overview / snippet) rather than clicked. That's the exact condition AEO content structure is meant to address: if the answer gets extracted anyway, make Pulumi's own canonical definition the thing that gets extracted.

GSC also surfaces several LLM/agent-shaped queries hitting this exact URL ("evaluate the software development applications company pulumi on multi-cloud infrastructure management", "can pulumi's platform integrate with multiple cloud providers like aws, azure, and google cloud simultaneously?", etc.), all at 0 clicks — direct evidence AI systems already treat this URL as the Pulumi entity page. Those verbatim query shapes are the source for the new FAQ questions below.

Separately, Profound (AI citation tracking) shows pulumi.com is the #1 cited domain in "Infrastructure as Code" (9.96% citation share) but /what-is/what-is-pulumi/ does not appear among cited URLs at all — comparison pages carry the section's AI-citation load while the canonical brand-entity page earns zero. That's the gap this PR targets.

Content changes (content/what-is/what-is-pulumi.md)

  1. Answer-first definition, 56 words, now the first paragraph. Previously the page opened with a ~60-word marketing preamble and buried the actual definition in paragraph two. The new first sentence names the entity and binds it to its category: "Pulumi is an open source infrastructure as code platform that lets you define, deploy, and manage cloud infrastructure using general-purpose programming languages..."
  2. New "Pulumi at a glance" supporting-entity table (5 rows: Pulumi, Languages, Cloud providers, Pulumi Cloud, Competitors) — tables parse more reliably for AI extraction than prose, per the SEO/GEO strategy.
  3. New FAQ section, 7 questions, sourced from the real GSC query shapes above ("What is Pulumi used for?", "What languages does Pulumi support?", "Is Pulumi open source?", "How is Pulumi different from Terraform?", "Can Pulumi manage AWS, Azure, and Google Cloud at the same time?", "Is Pulumi free?", "What is Pulumi Cloud?"). ## /### ? headings auto-qualify what-is pages for FAQPage schema with no template change required.
  4. meta_desc rewritten to lead with the answer instead of "Discover what Pulumi is..." filler, targeting the 0.21%-CTR-at-position-1.94 problem.
  5. Byline switched to authors: ["pulumi-content-team"].
  6. Added software_application_schema: true front matter flag (see template change below).
  7. Added a "Pulumi vs. Terraform" link to the closing Learn More section, reinforcing the entity cluster around the two most-cited comparison assets.
  8. Language list already included HCL; left as-is (also being handled by the separate site-wide language-list sweep card).

Template change (layouts/partials/schema/graph-builder.html)

/what-is/what-is-pulumi/ is the one page whose entire job is defining the Pulumi product entity, but the SoftwareApplication schema node was gated to .IsHome only — every non-home URL (including this one) carried Organization + WebSite + Article + Breadcrumb but no SoftwareApplication.

Fix: hoisted the shared SoftwareApplication fields into a $softwareCore dict above the .IsHome branch (mirroring the repo's existing $orgDescription/$orgSameAs pattern), then:

  • Homepage: $software := merge $softwareCore (dict "offers" ...)verified byte-identical to the pre-change output.
  • Non-home pages: emit $softwareCore (plus url and programmingLanguage, which do not touch the homepage node) only when .Params.software_application_schema is set. Deliberately excludes offers/pricing — pricing stays homepage-and-/pricing/-only, to avoid the kind of price-garbling risk seen in prior schema work.
  • Set the flag on content/what-is/what-is-pulumi.md only this cycle; not fanned out further.

Verification

The full repo's hugo build fails locally on an unrelated asset-pipeline issue (compiled css/bundle.css/css/marketing.css and icon sprites aren't committed to the repo and are presumably produced by a separate CI/build step). Rather than skip verification, built a minimal isolated Hugo harness containing verbatim copies of layouts/partials/schema/** and its actual dependencies, plus the real data/team/team/*.toml, data/what_is_sections.yml, and the real content files, and rendered them directly. Confirmed:

  • Homepage SoftwareApplication JSON-LD is byte-identical before/after.
  • /what-is/what-is-pulumi/ now emits SoftwareApplication (no offers) plus FAQPage with all 7 questions parsed correctly.
  • An unrelated what-is page without the opt-in flag (what-is-devops) still emits no SoftwareApplication — the gate isn't leaking.
  • No two @graph nodes share an @id on any rendered page. I went in suspecting a #main-content collision between the Article and FAQPage nodes (faq-entity.html line 6 defaults @id to #main-content), but graph-builder.html already overwrites it via merge $faqPage (dict "@id" "#faq") before appending to the graph — that defect does not exist; no fix was needed or made.

Also verified (no change needed): all 8 Organization.sameAs links resolve correctly — GitHub, X/Twitter, YouTube, Wikidata, and Wikipedia all return 200 (the Wikipedia article for Pulumi genuinely exists, pageid 74821952); LinkedIn (429) and Crunchbase (403) are anti-bot rate-limiting, not defects.

Interaction with #20595

#20595 (open, unmerged) proposes moving content/what-is/*.mdcontent/resources/*.md via git mv, with each article's URL pinned via a frontmatter url: field so live URLs don't change, and type: what-istype: resources. This PR does not touch that migration and is designed to be rename-safe regardless of merge order: the new software_application_schema flag lives in frontmatter (travels through a clean git mv), and the new schema gate keys off not .IsHome, not .Type or a content path, so it isn't affected by #20595's type/path rename. If #20595 merges first, this content edit should carry across via git's rename detection at merge/rebase time; if this merges first, #20595's git mv should carry it forward untouched.


🧠 This PR was created by workprentice.

…table, SoftwareApplication opt-in

Rewrites content/what-is/what-is-pulumi.md so the canonical Pulumi entity page leads
with a 40-60 word answer-first definition naming the entity and category (Pulumi ->
infrastructure as code platform) in the first sentence, adds a 5-row supporting-entity
table, adds a Frequently Asked Questions section sourced from the actual GSC query
shapes hitting this URL (which auto-qualifies for FAQPage schema, no template change
needed), rewrites meta_desc to lead with the answer instead of marketing copy, switches
the byline to the pulumi-content-team, and opts the page into a new
software_application_schema front-matter flag.

Also fixes a real schema gap in layouts/partials/schema/graph-builder.html: the
SoftwareApplication node for the Pulumi Platform entity was only ever emitted on the
homepage, so the one page whose entire job is defining that entity (this one) carried
no SoftwareApplication markup at all. Hoists the shared fields into $softwareCore
(mirroring the existing $orgDescription/$orgSameAs pattern) and gates a non-home
emission on the new front-matter flag, deliberately excluding pricing/offers (which
stay homepage-only) to avoid the kind of price-garbling risk flagged in prior schema
work. Verified with a minimal isolated Hugo harness (the full repo's asset pipeline
fails to build outside CI) that: homepage SoftwareApplication JSON-LD is byte-identical
to before; what-is-pulumi now emits SoftwareApplication with 7 correct FAQ questions;
an unrelated what-is page with no opt-in flag still emits no SoftwareApplication; and
no two @graph nodes share an @id (the FAQPage/Article collision suspected going in
does not actually exist in current code).

Also verified (no change needed): Organization schema sameAs links all resolve
correctly (GitHub, X/Twitter, YouTube, Wikidata, Wikipedia all 200; LinkedIn and
Crunchbase 403/429 from anti-bot, not a defect).

Interacts with #20595 (open, unmerged): that PR git-mv's content/what-is/*.md to
content/resources/*.md and pins each article's URL via frontmatter so it does not
change. The new software_application_schema flag lives in frontmatter (travels through
a git mv) and the new else-branch gate keys off `not .IsHome`, which #20595 does not
touch, so this change is rename-safe regardless of merge order.
@workprentice

workprentice Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

@claude #new-review

@github-actions github-actions Bot added review:triaging Claude Triage is currently classifying the PR domain:docs PR touches technical docs domain:mixed PR touches more than one domain domain:infra PR touches workflows, scripts, infra, Makefile, or build config review:in-progress Claude review is currently running and removed review:triaging Claude Triage is currently classifying the PR labels Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-08-07T12:30:38Z

Tip

Summary: This PR rewrites the opening of the /what-is/what-is-pulumi/ explainer for answer-engine optimization — an answer-first definition paragraph, a "Pulumi at a glance" entity table, a seven-question FAQ section, and a new software_application_schema: true frontmatter flag — plus a layouts/partials/schema/graph-builder.html refactor that extracts the homepage's SoftwareApplication fields into a shared $softwareCore dict so an opted-in non-home page can emit the same product node without pricing offers. Because this page is the canonical "what is Pulumi" answer that search snippets and AI assistants quote back verbatim, the wrongness that matters most is a crisp-sounding sentence that misstates a product fact: which languages are general-purpose, how many providers Pulumi supports, and which Pulumi Cloud edition a capability actually ships in. Passes run: fact verification of the claims in the new prose and the JSON-LD strings, a frontmatter sweep, a temporal-recency spot-check, and a read of data/pulumi_pricing.yaml for the edition claims in the new FAQ. Three items need fixing before merge, all in newly added text.

Review confidence:

Dimension Level Notes
mechanics MEDIUM The Hugo preflight was skipped as "content-only," so the graph-builder.html change wasn't build-verified here — the full build runs in build-and-deploy.yml. Template logic reviewed by reading.
facts HIGH
pricing/editions HIGH Edition claims checked against data/pulumi_pricing.yaml.
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 26 of 36 claims verified (0 unverifiable, 1 contradicted, 2 framing-drift) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 26 Pass 1, 0 Pass 2, 10 Pass 3 (verified 8, contradicted 1, unverifiable 1).
  • Cited-claim spot-checks: not run (no cited claims)
  • Frontmatter sweep: ran on body
  • 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: not run (not under content/blog/)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
3 3 0 0

🔍 Verification trail

36 claims extracted · 26 verified · 0 unverifiable · 1 contradicted · 2 framing-drift
  • L4 in content/what-is/what-is-pulumi.md "Pulumi is an open source infrastructure as code platform for defining, deploying, and managing cloud infrastructure with TypeScript, Python, Go, C#, Java, YAML…" (also L11) → ✅ verified (evidence: The official Pulumi docs page content/docs/iac/languages-sdks/_index.md lists "Supported languages" as Node.js (TypeScript/JavaScript), Python, Go, .NET (C#), Java, Pulumi YAML, and HCL — matching exactly the language list in the claim, an…; source: repo:content/docs/iac/languages-sdks/_index.md)
  • L11 in content/what-is/what-is-pulumi.md "Pulumi is an open source infrastructure as code platform that lets you define, deploy, and manage cloud infrastructure using general-purpose programming langua…" → ❌ contradicted (evidence: Line 11 claims YAML is one of the "general-purpose programming languages," but YAML and HCL are declarative/markup formats, not general-purpose languages — this is confirmed by the same document's own later text (line 87): "general-purpose…; source: repo:content/what-is/what-is-pulumi.md (lines 11, 20, 87); intuition: YAML and HCL are declarative/DSL formats, not general-purpose programming languages — the claim's own document contradi…)
  • L11 in content/what-is/what-is-pulumi.md "Pulumi pairs with Pulumi Cloud for state, secrets, policy, and AI-assisted operations." → ✅ verified (evidence: Pulumi's own product overview page confirms Pulumi Cloud provides state/secrets (Pulumi ESC: "Pulumi ESC brings secrets and configuration from every major vault and cloud provider into a single interface"), policy ("Enforce security and co…; source: repo:content/product/_index.md)
  • L11 in content/what-is/what-is-pulumi.md "Pulumi provisions resources across AWS, Azure, Google Cloud, Kubernetes, and 180+ providers." (also L21) → ✅ verified (evidence: A recent Pulumi blog post states: "Pulumi programs run directly against a deployment engine that supports more than 180 providers in total, covering AWS, Azure, Google Cloud, Kubernetes, and a long tail of SaaS and on-prem targets," matchi…; source: https://www.pulumi.com/blog/best-terraform-alternatives/)
  • L13 in content/what-is/what-is-pulumi.md "Pulumi Cloud adds collaboration, governance, and AI-assisted workflows on top of Pulumi through one platform." → ✅ verified (evidence: The same page's "Pulumi at a glance" table describes Pulumi Cloud as: "Managed platform layer | State backend, secrets and configuration via Pulumi ESC, policy as code, Pulumi Insights, and Neo (Pulumi's AI infrastructure agent)" — confirm…; source: content/what-is/what-is-pulumi.md; content/pricing/_index.md)
  • L13 in content/what-is/what-is-pulumi.md "Pulumi treats infrastructure as software, letting teams write real programs with loops, functions, tests, and packages that generate and manage cloud resources…" → ✅ verified (evidence: Pulumi's own official pages confirm this positioning: their site states developers can use "standard programming constructs like loops, conditionals, and functions" including "package managers, testing frameworks, and development tools," w…; source: https://www.pulumi.com/what-is/what-is-pulumi/ and https://www.pulumi.com/what-is/what-is-infrastructure-as-software/)
  • L19 in content/what-is/what-is-pulumi.md "Pulumi is an infrastructure as code platform that defines, deploys, and manages cloud infrastructure as real code." → ➖ not-a-claim (evidence: This is Pulumi's standard self-description of its own product ("Pulumi is an open source infrastructure as code platform that lets you define, deploy, and manage cloud infrastructure...") restated in a summary table row within the same pag…; source: repo:content/what-is/what-is-pulumi.md)
  • L20 in content/what-is/what-is-pulumi.md "Pulumi supports TypeScript, Python, Go, C#, Java, YAML, and HCL as languages, described as general-purpose languages plus a declarative option, with full IDE,…" → ✅ verified (evidence: The table row in the same file reads: "Languages | TypeScript, Python, Go, C#, Java, YAML, HCL | General-purpose languages plus a declarative option, with full IDE, test, and package support" — matching the claim verbatim, and consistent w…; source: repo:content/what-is/what-is-pulumi.md)
  • L21 in content/what-is/what-is-pulumi.md "Pulumi supports cloud providers including AWS, Azure, Google Cloud, Kubernetes, and 180+ other providers, with one consistent programming model across every pr…" → ✅ verified (framing: Source says "more than 180 providers"; claim says "180+ other providers" alongside AWS/Azure/GCP/Kubernetes — consistent, though current live page for the exac…; evidence: Pulumi's own blog states its deployment engine "supports more than 180 providers in total, covering AWS, Azure, Google Cloud, Kubernetes, and a long tail of SaaS and on-prem targets," matching the claim's figure and named providers, though…; source: https://www.pulumi.com/blog/best-terraform-alternatives/)
  • L22 in content/what-is/what-is-pulumi.md "Pulumi Cloud is a managed platform layer providing a state backend, secrets and configuration via Pulumi ESC, policy as code, Pulumi Insights, and Neo, describ…" → ✅ verified (evidence: pulumi/docs content/product/neo.md front matter title is "Pulumi Neo - Your AI Infrastructure Agent", and the Pulumi pricing page (content/pricing/_index.md) confirms Pulumi Cloud bundles ESC secrets/config, Pulumi Insights (workflow minut…; source: gh api repos/pulumi/docs/contents/content/product/neo.md; repo:content/pricing/_index.md)
  • L23 in content/what-is/what-is-pulumi.md "Pulumi's competitors include Terraform, OpenTofu, AWS CloudFormation, AWS CDK, and Crossplane." (also L211-213) → ✅ verified (framing: Source lists a broader set (including Bicep) as comparison tools; claim's narrower list of five is a subset fully entailed by the source.; evidence: Pulumi's own blog on IaC alternatives explicitly names these tools as points of comparison: "Compare the best infrastructure as code tools of 2026: Terraform, OpenTofu, AWS CDK, CloudFormation, Bicep, Crossplane, and Pulumi, side by side."…; source: https://www.pulumi.com/blog/best-terraform-alternatives/)
  • L23 in content/what-is/what-is-pulumi.md "Pulumi differs from its competitors by using general-purpose languages instead of a DSL or fixed templates." → ✅ verified (framing: Source specifically contrasts Pulumi vs Terraform's HCL; claim generalizes to "competitors" broadly (also DSLs like CloudFormation templates), which is a reaso…; evidence: Pulumi's own comparison docs state: "The core difference is how much choice you get: Pulumi runs programs written in general-purpose languages (Python, TypeScript, Go, .NET, and Java), as well as YAML and HCL, while HashiCorp Terraform use…; source: https://www.pulumi.com/docs/iac/comparisons/terraform/)
  • L27 in content/what-is/what-is-pulumi.md "Managing cloud infrastructure has historically meant clicking through web consoles, writing brittle scripts, or learning a tool-specific templating language." → ➖ not-a-claim (evidence: This is a subjective positioning/marketing statement characterizing the general history of infrastructure management approaches (web consoles, scripts, templating languages), not a falsifiable factual assertion with specific data to verify.; source: content/what-is/what-is-pulumi.md L27 (self-descriptive positioning text))
  • L201 in content/what-is/what-is-pulumi.md "Pulumi is used to define, deploy, and manage cloud infrastructure as code, provisioning resources like virtual machines, databases, Kubernetes clusters, and se…" (also L217) → ✅ verified (evidence: The pulumi/registry repo's packages directory (themes/default/data/registry/packages) lists hundreds of provider packages (the first page alone, filtered to names starting with "a", already exceeds a dozen entries), consistent with Pulumi'…; source: gh api repos/pulumi/registry/contents/themes/default/data/registry/packages)
  • L205 in content/what-is/what-is-pulumi.md "Because Pulumi programs are real code, they get full IDE support, static typing, automated testing, and package management, capabilities that templating langua…" → ✅ verified (evidence: Pulumi's official "Infrastructure as Software" page makes the identical comparative claim: "The everyday capabilities that come for free with IaS are the ones DSL-based IaC has to either approximate, regenerate, or hand off to external too…; source: https://www.pulumi.com/what-is/what-is-infrastructure-as-software/)
  • L205 in content/what-is/what-is-pulumi.md "Pulumi supports general-purpose programming languages: TypeScript/JavaScript, Python, Go, C#, and Java, plus YAML and HCL for teams that prefer a declarative f…" → ✅ verified (evidence: Pulumi officially supports SDKs for TypeScript/JavaScript, Python, Go, C#, and Java, plus declarative YAML and native HCL support (via Pulumi IaC/HCL), matching the claim's list exactly.; source: repo:content/what-is/what-is-pulumi.md (L205) and general Pulumi language support (docs.pulumi.com/languages))
  • L209 in content/what-is/what-is-pulumi.md "Pulumi's core SDK and providers are open source under the Apache 2.0 license." → ✅ verified (evidence: Pulumi's official docs and GitHub repo confirm: "The Pulumi CLI and SDKs are open source under the Apache 2.0 license" and providers/policy SDKs are likewise Apache 2.0 licensed, e.g. "Pulumi is open source under the Apache 2.0 license, su…; source: https://www.pulumi.com/docs/iac/comparisons/terraform/ ; https://github.com/pulumi/pulumi)
  • L209 in content/what-is/what-is-pulumi.md "Pulumi Cloud is the optional managed backend for state, secrets, and policy, and offers a free tier for individuals plus paid Team and Enterprise plans for org…" (also L221) → ✅ verified (evidence: Pulumi's own pricing FAQ confirms: "You're not required to use Pulumi Cloud. You can use any cloud or on-premises storage to build and run your own backend" (optional), "Pulumi Cloud is free to use, now and forever, for individuals," and "…; source: content/pricing/_index.md)
  • L209 in content/what-is/what-is-pulumi.md "Pulumi Cloud offers a free tier for individuals plus paid Team and Enterprise plans for organizations that need collaboration and governance at scale." → ✅ verified (evidence: pricing page confirms: "Pulumi Cloud is free to use, now and forever, for individuals" and describes Team Edition "designed for teams to collaborate on shared infrastructure projects" and Enterprise Edition offering "more sophisticated org…; source: repo:content/pricing/_index.md)
  • L209 in content/what-is/what-is-pulumi.md "Pulumi's CLI and language SDKs are free to use." → ✅ verified (evidence: Pulumi's pricing FAQ states: "Pulumi's Infrastructure as Code CLI and SDK are an open-source project that is supported by an active community" and confirms free usage independent of Pulumi Cloud, consistent with the claim that the CLI and…; source: repo:content/pricing/_index.md (lines 115-124))
  • L213 in content/what-is/what-is-pulumi.md "Pulumi has native HCL support and a Terraform state backend, allowing it to work directly with existing HCL configurations." → ✅ verified (evidence: Pulumi docs and blog confirm both features: "Pulumi HCL aims to run valid Terraform configurations without changes" and "Pulumi Cloud can serve as a Terraform state backend, letting you store and manage Terraform state alongside your Pulum…; source: https://www.pulumi.com/docs/iac/comparisons/terraform/ and https://www.pulumi.com/blog/terraform-state-backend-pulumi-cloud/)
  • L217 in content/what-is/what-is-pulumi.md "A single Pulumi program can define resources across multiple clouds using one consistent language and one deployment engine, with no separate tools or state st…" → ✅ verified (evidence: The same doc describes Pulumi's architecture: "The Pulumi SDK provides language-specific libraries...for cloud resources across 200+ providers" combined with a single "deployment engine" that "maintains a detailed record of your infrastruc…; source: repo:content/what-is/what-is-pulumi.md (lines 47, 49, 115-121))
  • L217 in content/what-is/what-is-pulumi.md "Pulumi provides native providers for AWS, Azure, and Google Cloud, along with Kubernetes and 180+ other providers." → 🌀 framing-drift (framing: shifted — claim implies AWS/Azure/GCP/K8s are "native" alongside "180+ other providers" as if all in one uniform native+bridged count, while source language se…; evidence: Pulumi's own current what-is-pulumi page states the registry provides "access to over 200 cloud and SaaS providers," and a recent 2026 blog post says Pulumi "supports more than 180 providers in total, covering AWS, Azure, Google Cloud, Kub…; source: https://www.pulumi.com/what-is/what-is-pulumi/ and https://www.pulumi.com/blog/best-terraform-alternatives/)
  • L221 in content/what-is/what-is-pulumi.md "Pulumi Cloud is the managed platform for state, secrets, and team collaboration, and includes a free Individual tier." → ✅ verified (evidence: Pricing page confirms: "Pulumi Cloud is a managed service for the open source CLI and SDK. It tracks your infrastructure's state... It also manages secrets, supports SAML SSO... and much more" and "Pulumi Cloud is free to use, now and fore…; source: repo:content/pricing/_index.md)
  • L221 in content/what-is/what-is-pulumi.md "Pulumi Cloud's Team and Enterprise plans add role-based access, policy enforcement, and premium support for organizations running infrastructure at scale." → 🌀 framing-drift (framing: overclaim — source ties RBAC to "Enterprise Edition" and premium support to "Enterprise and Business Critical editions"; claim broadens both to "Team and Enter…; evidence: Pulumi's pricing page attributes RBAC/advanced policy controls specifically to the Enterprise Edition ("The Enterprise Edition offers more sophisticated organization management facilities, including RBAC for advanced policy controls") and…; source: content/pricing/_index.md)
  • L221 in content/what-is/what-is-pulumi.md "Pulumi's CLI, SDKs, and providers are free and open source." → ✅ verified (evidence: pulumi/pulumi repo (CLI/engine/SDKs) is licensed under Apache License 2.0, and provider repos (e.g. pulumi-aws, pulumi-azure-native) are similarly Apache-2.0 licensed and publicly hosted/free to use, consistent with the claim that Pulumi's…; source: gh api repos/pulumi/pulumi --jq .license.name)
  • L225 in content/what-is/what-is-pulumi.md "Pulumi Cloud is the managed platform layer that sits on top of Pulumi's open source engine, providing state storage, Pulumi ESC for secrets and configuration,…" → ✅ verified (evidence: The same document's "Pulumi at a glance" table (line 22) independently states: "Pulumi Cloud | Managed platform layer | State backend, secrets and configuration via Pulumi ESC, policy as code, Pulumi Insights, and Neo (Pulumi's AI infrastr…; source: repo:content/what-is/what-is-pulumi.md (line 22); gh search code --owner pulumi "Neo AI infrastructure agent")
  • L225 in content/what-is/what-is-pulumi.md "Pulumi Cloud provides state storage, Pulumi ESC for secrets and configuration, policy as code, Pulumi Insights for cloud estate visibility, and Neo, described…" → ✅ verified (evidence: Line 225 of the file itself states: "Pulumi Cloud is the managed platform layer... It provides state storage, Pulumi ESC for secrets and configuration, policy as code, Pulumi Insights for cloud estate visibility, and Neo, an AI infrastruct…; source: pulumi/docs:content/product/neo.md (via gh search code); repo:content/what-is/what-is-pulumi.md L225)
  • L235 in content/what-is/what-is-pulumi.md "Pulumi maintains a comparison page contrasting Pulumi with Terraform at /docs/iac/comparisons/terraform/." → ✅ verified (evidence: The file content/docs/iac/comparisons/terraform/_index.md exists (title_tag: "Pulumi vs. Terraform", h1: "Pulumi vs. Terraform") and renders at /docs/iac/comparisons/terraform/, containing a detailed feature-by-feature comparison between P…; source: repo:content/docs/iac/comparisons/terraform/_index.md)
  • L173 in layouts/partials/schema/graph-builder.html "explainer page like /what-is/what-is-pulumi/ never has to carry (or risk" → ➖ not-a-claim (evidence: This is a code comment in the PR author's own template explaining why pricing/offers data is deliberately excluded from the shared SoftwareApplication schema core, using /what-is/what-is-pulumi/ as an illustrative example of a non-home exp…; source: repo:layouts/partials/schema/graph-builder.html (lines 165-393))
  • L182 in layouts/partials/schema/graph-builder.html "'@id' 'https://www.pulumi.com/#pulumi-platform'" → ➖ not-a-claim (evidence: This is a schema.org @id identifier fragment (https://www.pulumi.com/#pulumi-platform) used internally by the graph-builder partial to link JSON-LD nodes together, as authored in this same file: `"@type" "SoftwareApplication" "@id" "ht…; source: repo:layouts/partials/schema/graph-builder.html)
  • L190 in layouts/partials/schema/graph-builder.html "'downloadUrl' 'https://get.pulumi.com/'" → ✅ verified (evidence: pulumi/pulumi's own README instructs curl -fsSL https://get.pulumi.com/ | sh, and multiple SDK download scripts (npm/lib/download.js, sdk/go/auto/cmd.go, sdk/nodejs/automation/cmd.ts) reference https://get.pulumi.com/install.sh|.ps1, con…; source: gh search code --owner pulumi "get.pulumi.com" (pulumi/pulumi README.md, npm/lib/download.js))
  • L191-192 in layouts/partials/schema/graph-builder.html "'releaseNotes' 'https://www.pulumi.com/docs/reference/changelog/'" → ✅ verified (evidence: The JSON-LD releaseNotes field points to https://www.pulumi.com/docs/reference/changelog/, which matches an alias path (- /docs/reference/changelog/) found in content/docs/install/versions.md in the same repo, confirming this is a…; source: repo:pulumi/docs content/docs/install/versions.md (alias: /docs/reference/changelog/))
  • L194-195 in layouts/partials/schema/graph-builder.html "'maintainer' (dict '@id' 'https://www.pulumi.com/#organization')" → ➖ not-a-claim (evidence: The @id "https://www.pulumi.com/#organization" is a schema.org JSON-LD internal graph reference, defined in the same file (e.g. line 204: "@id" "https://www.pulumi.com/#organization" for the Organization node) and reused by creator/`…; source: repo:layouts/partials/schema/graph-builder.html)
  • L386 in layouts/partials/schema/graph-builder.html "defining the Pulumi product entity (e.g. /what-is/what-is-pulumi/). Gated" → ➖ not-a-claim (evidence: This is a code comment in the PR author's own template explaining a front-matter-based gating design ("Gated on a front-matter flag rather than .Type or a content path so it survives PR Rebrand /what-is/ as Pulumi Resources at /resources/ (existing article URLs preserved) #20595's content/what-is -> content/resources rename"…; source: repo:layouts/partials/schema/graph-builder.html)
  • L289 in layouts/partials/schema/graph-builder.html "comment: "url and programmingLanguage were newly added to $softwareCore"" → ❌ contradicted (evidence: $softwareCore (L179-195) contains neither url nor programmingLanguage; both are added only in the non-home merge at L395-397. The comment block at L174-178 states the opposite — "Fields that are new (url, programmingLanguage) are added only on the opted-in non-home path further below, not here." Both comments are new in this PR; source: repo:layouts/partials/schema/graph-builder.html L174-178, L179-195, L289, L395-397)
  • L4 in content/what-is/what-is-pulumi.md "meta_desc length (166 characters)" → 🤷 unverifiable (evidence: the new meta_desc is 166 characters; search result snippets are commonly truncated around 155-160, so the trailing "YAML, or HCL" is at risk of being cut. Exact truncation is engine- and query-dependent, so this is a judgment call rather than a hard limit; source: repo:content/what-is/what-is-pulumi.md L3-4)
  • L395 in layouts/partials/schema/graph-builder.html "'url' 'https://www.pulumi.com/'" → ➖ not-a-claim (evidence: This is a hardcoded schema.org JSON-LD "url" field pointing to the site's own root domain in a layout partial used for structured data generation, not a factual assertion about a third party.; source: layouts/partials/schema/graph-builder.html)

🚨 Outstanding in this PR

These must be resolved or refuted before merging.

  • [L11] content/what-is/what-is-pulumi.md"Pulumi is an open source infrastructure as code platform that lets you define, deploy, and manage cloud infrastructure using general-purpose programming langua…" — verdict: contradicted; evidence: Line 11 claims YAML is one of the "general-purpose programming languages," but YAML and HCL are declarative/markup formats, not general-purpose languages — this is confirmed by the same document's own later text (line 87): "general-purpose…; source: repo:content/what-is/what-is-pulumi.md (lines 11, 20, 87); intuition: YAML and HCL are declarative/DSL formats, not general-purpose programming languages — the claim's own document contradi…

    The opening sentence puts YAML inside the general-purpose run and strands HCL after the dash, so it reads as "YAML is a general-purpose programming language." Line 87 of this same page gets the grouping right ("general-purpose languages like TypeScript, Python, Go, C#, and Java, alongside YAML and HCL"), and so does the new FAQ at L205. This is the page's answer-first sentence — the one most likely to be lifted whole into a search snippet or an AI answer — so it's worth matching the grouping the rest of the page already uses:

    Pulumi is an open source infrastructure as code platform that lets you define, deploy, and manage cloud infrastructure using general-purpose programming languages — TypeScript, Python, Go, C#, and Java — plus YAML and HCL for teams that prefer a declarative format. It provisions resources across AWS, Azure, Google Cloud, Kubernetes, and 180+ providers, and pairs with Pulumi Cloud for state, secrets, policy, and AI-assisted operations.
    

    The same grouping shows up in the new meta_desc (L4, "with TypeScript, Python, Go, C#, Java, YAML, or HCL") and in the entity table's Languages row (L20) — those two are fine as written, because neither calls the list "general-purpose."

  • [L221] content/what-is/what-is-pulumi.md"Pulumi Cloud's Team and Enterprise plans add role-based access, policy enforcement, and premium support for organizations running infrastructure at scale." — verdict: framing-drift; framing: overclaim — source ties RBAC to "Enterprise Edition" and premium support to "Enterprise and Business Critical editions"; claim broadens both to "Team and Enter…; evidence: Pulumi's pricing page attributes RBAC/advanced policy controls specifically to the Enterprise Edition ("The Enterprise Edition offers more sophisticated organization management facilities, including RBAC for advanced policy controls") and…; source: content/pricing/_index.md

    Promoted from ⚠️ because this one misleads about what a reader gets for money. data/pulumi_pricing.yaml — the source of truth for the /pricing/ table and the docs availability callouts — has rbac at available_from: enterprise, so the Team edition does not include role-based access control. Attaching RBAC to "Team and Enterprise" in an FAQ answer built to be quoted verbatim tells a prospective buyer the Team edition ships a capability it doesn't. Grouping Team with Enterprise also drops Business Critical, which is a real edition above both.

    Pulumi's CLI, SDKs, and providers are free and open source. Pulumi Cloud, the managed platform for state, secrets, and team collaboration, is free for individuals; the Team edition adds collaboration for organizations, and the Enterprise and Business Critical editions add role-based access control, advanced policy enforcement, and premium support for infrastructure at scale.
    
  • [L289] layouts/partials/schema/graph-builder.html — the new comment above the homepage merge says "url and programmingLanguage were newly added to $softwareCore; merge below preserves every field the homepage previously emitted" — but neither field is in $softwareCore (L179-195); both are added only in the non-home merge at L395-397. The comment block at L174-178 says the opposite, correctly: "Fields that are new (url, programmingLanguage) are added only on the opted-in non-home path further below, not here." Since the whole point of these comments is to let the next maintainer trust that the homepage node is unchanged, the contradiction undercuts the refactor it documents. Both comments are new here, so it's a one-line fix:

         pages. `url` and `programmingLanguage` are NOT in $softwareCore — they are
    

    …with the following line adjusted to finish the sentence (e.g. "added only on the non-home path below; the merge here preserves every field the homepage previously emitted."). The generated JSON-LD is correct as written; only the comment is wrong.

⚠️ Low-confidence

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

  • [L209] content/what-is/what-is-pulumi.md"Pulumi Cloud, the optional managed backend for state, secrets, and policy, offers a free tier for individuals plus paid Team and Enterprise plans…" — the answer is right, but the vocabulary isn't the product's. Pulumi sells editions (Individual, Team, Enterprise, Business Critical) — not "plans" or "tiers," and there is no edition called "Free." Since this is FAQ copy written to be quoted verbatim, the wrong noun propagates. Suggested rewrite for the second sentence:

    Yes. Pulumi's core SDK and providers are open source under the Apache 2.0 license, and the CLI and language SDKs are free to use. Pulumi Cloud, the optional managed backend for state, secrets, and policy, is free for individuals, with paid Team, Enterprise, and Business Critical editions for organizations that need collaboration and governance at scale.
    

    Same substitution applies to "a free Individual tier" at L221.

  • [L217] content/what-is/what-is-pulumi.md"Pulumi provides native providers for AWS, Azure, and Google Cloud, along with Kubernetes and 180+ other providers." — verdict: framing-drift; framing: shifted — claim implies AWS/Azure/GCP/K8s are "native" alongside "180+ other providers" as if all in one uniform native+bridged count, while source language se…; evidence: Pulumi's own current what-is-pulumi page states the registry provides "access to over 200 cloud and SaaS providers," and a recent 2026 blog post says Pulumi "supports more than 180 providers in total, covering AWS, Azure, Google Cloud, Kub…; source: https://www.pulumi.com/what-is/what-is-pulumi/ and https://www.pulumi.com/blog/best-terraform-alternatives/

    Worth resolving as a page-internal inconsistency rather than as a sourcing question: the new text says "180+ providers" in four places (L11, L21, L201, L217) while L47 — untouched by this PR — says "strongly-typed bindings for cloud resources across 200+ providers." A reader who reaches L47 sees the page quote two different numbers for the same thing. The SoftwareApplication description in graph-builder.html (L184) is a third number, "150+ providers," and this PR is what first surfaces that string on this page. Pick one figure and use it in all three places; if 180+ is deliberately the conservative "native + bridged, verified" count and 200+ is the registry total, say which is which at first use so the two numbers read as different measurements rather than a contradiction.

    The native framing is a smaller point: the current phrasing groups AWS/Azure/Google Cloud/Kubernetes as "native" and everything else as "other," which slightly overstates how uniform that boundary is. "Pulumi provides providers for AWS, Azure, and Google Cloud — including native providers with same-day API coverage — along with Kubernetes and 180+ others" keeps the distinction without flattening it.

  • [L4] content/what-is/what-is-pulumi.md — the new meta_desc is 166 characters, so the trailing "YAML, or HCL" is likely to be truncated in search snippets. Trimming to the general-purpose five keeps the whole description intact and matches the L11 rewrite above:

        Pulumi is an open source infrastructure as code platform for defining, deploying, and managing cloud infrastructure with TypeScript, Python, Go, C#, Java, or YAML.
    

    Judgment call — truncation length varies by engine and query, so treat this as optional polish.

💡 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-07T12:30:38Z — First review — 3 blockers (YAML listed as a general-purpose language in the answer-first sentence; RBAC attributed to the Team edition when it starts at Enterprise; a new graph-builder.html comment contradicting the block above it) and 3 low-confidence notes (180+/200+/150+ provider-count inconsistency, edition-vocabulary in the FAQ, meta_desc length). (8ced368)

  • 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 7, 2026
@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 8, 2026
@pulumi-bot

Copy link
Copy Markdown
Collaborator

@pulumi-bot

Copy link
Copy Markdown
Collaborator

Lighthouse Performance Report

Commit: e4c80f4 | Metric definitions

Page Device Score FCP LCP TBT CLS SI
Homepage Mobile 🔴 42 6.1s 12.5s 733ms 0.024 6.1s
Homepage Desktop 🟢 93 0.7s 1.2s 162ms 0.015 0.9s
Install Pulumi Mobile 🟡 59 6.1s 15.1s 126ms 0.027 6.1s
Install Pulumi Desktop 🟢 91 1.1s 1.7s 0ms 0.016 1.1s
AWS Get Started Mobile 🔴 49 5.3s 8.6s 16ms 0.260 5.3s
AWS Get Started Desktop 🟡 85 1.1s 2.4s 0ms 0.042 1.1s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain:docs PR touches technical docs domain:infra PR touches workflows, scripts, infra, Makefile, or build config domain:mixed PR touches more than one domain 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.

2 participants