fix(seo): normalize Pulumi language lists on llms.txt, JSON-LD entity descriptions, and /what-is/ pages - #20917
Conversation
Pre-merge Review — Last updated 2026-08-18T00:57:56ZTip Summary: This is a site-wide copy sweep normalizing how Pulumi's supported languages are listed across 22 high-visibility surfaces: the homepage and product pages, fourteen Review confidence:
Investigation log
🔍 Verification trail109 claims extracted · 84 verified · 1 unverifiable · 2 contradicted · 3 framing-drift · 1 flagged
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. |
continued from previous comment
🚨 Outstanding in this PRNo outstanding findings.
|
|
@claude #update-review Fixed all 5 blocking findings by rescoping each sentence's "general-purpose" claim to the six general-purpose SDKs (TypeScript, JavaScript, Python, Go, .NET, Java), while keeping YAML and HCL named as separate declarative options rather than folded into the general-purpose set:
Left the low-confidence and pre-existing items as optional/out-of-scope per the review's own labeling. |
Lighthouse Performance ReportCommit: 4f726e3 | Metric definitions
|
|
🤖 Review updated on @workprentice[bot]'s request. |
|
@claude #update-review Fixed the remaining L179 finding in |
#20918) * fix(seo): normalize Pulumi language lists across docs and blog content Follow-up to #20770 and #20917's site-wide language-list sweep, tier 2 of 3: content/docs (14 files) and content/blog (16 files with actual changes; best-terraform-alternatives already correct, infrastructure-as-code-tools deferred). Canonical set (per content/docs/iac/languages-sdks/_index.md front matter): Python, TypeScript, JavaScript, Go, .NET, Java, plus YAML and HCL. Same per-occurrence classification as prior PRs (A: full-set Pulumi claim, rewrite to canonical set; B: scoped enumeration, naming-only C# to .NET; C: a third party's own list such as AWS CDK's or CDKTF's, left untouched; D: out-of-scope statement, left untouched). Anachronism guard applied to dated blog posts: Pulumi added YAML support in May 2022 and native Terraform-module/HCL support in December 2025, so posts published before December 2025 were not given an HCL addition even where the sentence otherwise reads as a full-set claim. Deferred: content/blog/infrastructure-as-code-tools/index.md (already being heavily rewritten by two other open PRs). Flagged for a human merge check: content/docs/iac/get-started/terraform/convert-hcl.md (open PR #20769), content/blog/announcing-direct-tf-modules/index.md and content/blog/claude-code-orchestration-frameworks/index.md (open PR #20806) -- all received a minimal single-line edit only. * fix(seo): resolve blocking review findings on tier2 language-list sweep - pulumi-release-notes-106: drop Java from the ADE supported-languages list; the linked companion post and the ADE sample repo demonstrate only C#/.NET, TypeScript, Python, Go, and YAML. Also removed the double space and the 'simple' difficulty qualifier per style lint. - arm-templates.md: replace the hand-edited language list at L127 with the {{< pulumi-languages "general-purpose" >}} shortcode already used three times on this page, so the list can't drift out of sync again. - converters.md: the page arm-templates.md links to for the same claim still read the pre-sweep language list; brought it onto the shortcode too so a reader following the link sees consistent terminology. * Address non-blocking review findings: fix doubled conjunction, YAML/IntelliSense scoping, SDK-vs-consumption phrasing, count mismatch, and license-cell tautology across 8 files * Address remaining review findings: terraform-modules serial-list fix, restore 'seven' count, complete C#-to-.NET sibling sweep, fix two license-table facts - terraform-modules.md: split the YAML/HCL aside out of the three-item serial list per the reviewer's own suggested rewrite, so "an API reference" no longer reads as an appositive of HCL. - all-iac blog post: restore "seven" so the hedge ("depending on how you count") has a number to hedge again, matching the seven-item enumeration. - Completed the C#-to-.NET sibling sweep: from-arm.md (meta_desc, intro sentence, comparison table, convert-arm example), packages/_index.md meta_desc, and converters.md's destination-language list. - hcl-vs-pulumi blog post license table: ECMAScript is Ecma's own bespoke license, not MIT; OpenJDK ships under GPLv2 with the Classpath Exception, not "GNU v2.0". --------- Co-authored-by: workprentice <257153108+workprentice@users.noreply.github.com>
|
@claude #update-review Fixed the one genuine remaining item: the CFEngine hedge at The other open item ( The |
|
@workprentice Continue to work through the review until all the issues are taken care of, then standby. Product pages are an area I'm not going to approve without @cnunciato taking a look. |
|
🤖 Review updated on @workprentice[bot]'s request. |
|
@CamSoper CI and the automated review are both clean now: build and tests pass, and the pinned review shows 0 outstanding / 0 low-confidence / 0 pre-existing, 18 resolved. Standing by per your instruction. I won't touch the product-page copy further since you've flagged that for @cnunciato's review. Still open on my side: the |
… descriptions, and /what-is/ pages Follow-up to PR #20770's site-wide language-list sweep. Applies the same per-occurrence classification (full-set Pulumi claim vs. scoped enumeration vs. third-party's own list vs. out-of-scope factual statement) to the highest-AEO-value tier: the LLM-ingestion surface, the JSON-LD entity descriptions rendered on every page, the homepage/product pages, and the /what-is/ definitional pages. Canonical set (per content/docs/iac/languages-sdks/_index.md front matter): Python, TypeScript, JavaScript, Go, .NET, Java, plus YAML and HCL. 22 files touched. Full-set Pulumi claims rewritten to the complete canonical set (adding JavaScript and HCL where missing, C# renamed to .NET). Scoped enumerations (e.g. contrasts with YAML/HCL, table cells, class-based component examples) received naming-only normalization with no additions. One out-of-scope generic-IaC comparison-table row was left untouched.
…in review Five sentences described the expanded Pulumi language list as general-purpose while including YAML and HCL, which are declarative configuration formats rather than general-purpose languages. Rescopes each sentence's general-purpose reasoning to the six general-purpose SDKs (TypeScript, JavaScript, Python, Go, .NET, Java) while still naming YAML and HCL as separate declarative options where relevant.
…is-a-terraform-module Same defect as the previous fix: YAML and HCL named inside a general-purpose-languages parenthetical whose predicate (functions, classes, packages) does not apply to them. This page leans hardest on the general-purpose vs. declarative distinction (L168, L175), so the conflict was most visible here.
…onent-authoring language row with the sweep's own JS/YAML split
…/Terragrunt claims, drop unsourceable framing Finishes the reconciliation this PR started and takes the adjacent pre-existing items the review flagged as contradicted: - what-is-a-terraform-module.md L251: FAQ answer's component-authoring list now names JavaScript, matching L179 and L214. - what-is-terragrunt.md L119: "Authoring language" row adds JavaScript; YAML stays, since the row describes authoring languages generally. - what-is-terragrunt.md L120: DRY row now names all three mechanisms the page's own section above describes (config inheritance, remote-state generation, hooks) rather than narrowing to one. - what-is-terragrunt.md L121: state row no longer credits Terragrunt with the per-module backend problem it exists to solve; it now describes the root remote_state block that generates each unit's backend config. - is-kubernetes-infrastructure-as-code.md L139: HCL does have count, for_each, for-expressions, and a large built-in function library. What it lacks is user-defined functions and general control flow. - what-is-cloud-misconfiguration.md L118: drops the unsourceable "highest-leverage gap" superlative, keeps the pre-creation-enforcement capability. - what-is-infrastructure-as-code.md L234: hedges CFEngine to "one of the earliest tools in the category," matching how sources describe it. The 1993 date is unchanged. - what-is-gitops.md L123: replaces the vague "interoperates with Argo CD and Flux" with the actual mechanism and links - the Pulumi Kubernetes Operator's Stack resource, which Argo CD syncs from Git, and which can take its program from a Flux source. - aws-summit.html L102: drops YAML and HCL from the "languages you know and love" appeal, leaving the general-purpose list. - index.llms.txt L3: 150+ providers -> 200+, matching the pages this PR edited. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ture-as-code.md L234)
592fe33 to
4f726e3
Compare
|
Rebased onto latest master to resolve merge conflicts (master had refactored the SoftwareApplication schema into a shared |
…lates, and remaining brand-consistency surfaces Follow-up to #20770, #20917, and #20918's site-wide language-list sweep, tier 3 of 3 (lowest SEO/AEO value, brand consistency only): content/gads (32 paid-ads landing pages), content/templates (16 template meta descriptions), and remaining misc surfaces. Canonical set (per content/docs/iac/languages-sdks/_index.md front matter): Python, TypeScript, JavaScript, Go, .NET, Java, plus YAML and HCL. gads pages carry three near-identical boilerplate sentences (Class A full-set claims); all three were normalized to the complete canonical set across every page that carries them, including a third boilerplate sentence discovered during this pass that already used .NET correctly but was missing HCL. templates/*/index.md meta descriptions are Class B (scoped to what each specific template actually supports); each was cross-checked against its own front-matter languages list before a naming-only C# to .NET fix, with no additions beyond what the template itself declares. Misc fixes: BUILD-AND-DEPLOY.md's internal supported-languages list and the seo-analyze AEO checklist's own comparison table (Pulumi column only) were completed to the canonical set; case-studies/fauna.md, the KubeCon page, and the events page were completed as full-set claims; the terraform-state-backend-modules-hcl.md release note and data/resource_options.yaml's typed-SDK comment and the superintelligence-infrastructure.md card bullet received naming-only or minimally-scoped fixes per their narrower context.
|
Where is the issue driving these changes? We seem to have landed in a strange place where we're mixing languages and runtimes, yet calling both "languages." |
…lates, and brand-consistency surfaces (#20919) * fix(seo): normalize Pulumi language lists on gads landing pages, templates, and remaining brand-consistency surfaces Follow-up to #20770, #20917, and #20918's site-wide language-list sweep, tier 3 of 3 (lowest SEO/AEO value, brand consistency only): content/gads (32 paid-ads landing pages), content/templates (16 template meta descriptions), and remaining misc surfaces. Canonical set (per content/docs/iac/languages-sdks/_index.md front matter): Python, TypeScript, JavaScript, Go, .NET, Java, plus YAML and HCL. gads pages carry three near-identical boilerplate sentences (Class A full-set claims); all three were normalized to the complete canonical set across every page that carries them, including a third boilerplate sentence discovered during this pass that already used .NET correctly but was missing HCL. templates/*/index.md meta descriptions are Class B (scoped to what each specific template actually supports); each was cross-checked against its own front-matter languages list before a naming-only C# to .NET fix, with no additions beyond what the template itself declares. Misc fixes: BUILD-AND-DEPLOY.md's internal supported-languages list and the seo-analyze AEO checklist's own comparison table (Pulumi column only) were completed to the canonical set; case-studies/fauna.md, the KubeCon page, and the events page were completed as full-set claims; the terraform-state-backend-modules-hcl.md release note and data/resource_options.yaml's typed-SDK comment and the superintelligence-infrastructure.md card bullet received naming-only or minimally-scoped fixes per their narrower context. * fix(seo): resolve blocking review findings on tier3 language-list sweep - gads pages: standardize all 31 sibling pages' Pulumi IaC card copy on the JavaScript-inclusive list; the sweep had split them into two forms (17 without JavaScript, 14 with). Fixed gads-template.md, the file new gads pages are copied from, plus the 17 pages that drifted. - BUILD-AND-DEPLOY.md: revert the JavaScript/HCL additions to the make-test language line -- static/programs/ has no -js or -hcl example directories, so the added languages describe test coverage CI does not actually run. Kept the C# -> .NET normalization. - case-studies/fauna.md: this is a dated account of what Fauna's team built with, not current-product marketing copy; reverted the language list to the languages actually used (dropping YAML/HCL, which aren't languages a developer 'already knows', and Java, not in the original account) while keeping C# -> .NET. * Address non-blocking review findings: restore Pulumi/Terraform contrast in AEO checklist table and trim ML-engineer language bullet * fix: normalize remaining C# references to .NET - content/product/superintelligence-infrastructure.md L123 now matches the .NET normalization applied at L141 in the prior commit. - meta_desc fields on the 8 gads pages/templates flagged in review (aws, firefly, kubernetes, multicloud, opentofu, saltstack, system-initiative, gads-template) now say .NET instead of C#. * fix: revert JavaScript/HCL additions the sweep introduced in error - content/gads/terraform/index.md L51: pulumi convert cannot emit JavaScript (valid targets: typescript, python, csharp, go, java, yaml -- the Node.js path produces TypeScript). Reverting the JavaScript addition; the .NET normalization stays. - content/events/.../index.md L45: this is a dated 2023 workshop record. HCL only became a Pulumi language with the August 2026 release (content/releases/terraform-state-backend-modules-hcl.md, in this same PR), so the page can't truthfully claim the 2023 recording demonstrated it. Reverting both the HCL and JavaScript additions; the .NET normalization stays. --------- Co-authored-by: workprentice <257153108+workprentice@users.noreply.github.com>
What
Follow-up to #20770's site-wide Pulumi language-list sweep, tier 1 of 3 (highest AEO/GEO value): the LLM-ingestion surface, the JSON-LD entity descriptions rendered site-wide, the homepage/product pages, and the /what-is/ definitional pages. 22 files.
Canonical set
Per
content/docs/iac/languages-sdks/_index.mdfront matter: Python, TypeScript, JavaScript, Go, .NET, Java, plus YAML and HCL. There is no single canonical ordering.Classification methodology (reused from #20770)
Every occurrence of a stale language-list pattern was individually classified before editing:
Disposition summary
layouts/index.llms.txt,layouts/partials/schema/graph-builder.html(3 JSON-LDdescriptionstrings),layouts/page/why-pulumi.html,layouts/page/aws-summit.html— all Class A, rewritten to the full canonical set.content/_index.md,content/product/_index.md,content/product/infrastructure-as-code.md— Class A. The homepage card description is a length-constrained marketing-card slot, so it received naming-only + JavaScript rather than the full 8-member tail, to avoid bloating a short card description./what-is/pages — mostly Class A (full-set claims, several already included YAML and were completed with HCL). A handful of narrower sentences were Class B and received naming-only normalization:is-kubernetes-infrastructure-as-code.md(twice),what-are-kubernetes-secrets.md,what-is-a-terraform-module.md(twice, including a comparison-table row contrasting against Terraform's HCL column),what-is-infrastructure-as-software.md,what-is-terragrunt.md(a comparison-table cell).what-is-infrastructure-as-code.mdline 23, a generic-IaC comparison-table row ("General-purpose (TypeScript, Python, Go, C#, Java) or DSLs...") describing infrastructure-as-code tooling in general rather than a Pulumi-specific claim, was intentionally left unchanged — C# is a correct generic-language example there.Verification
graph-builder.html's JSON-LDdescriptionedits are string-literal-only changes; no Go template syntax was touched.🧠 This PR was created by workprentice.