fix(seo): correct unsourceable claims and stale enumerations across blog - #21066
fix(seo): correct unsourceable claims and stale enumerations across blog#21066workprentice[bot] wants to merge 1 commit into
Conversation
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).*
There was a problem hiding this comment.
🧹 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. |
There was a problem hiding this comment.
[style] difficulty qualifier — Drops minimizer; line count claim unchanged
| 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. |
There was a problem hiding this comment.
[style] difficulty qualifier — Replaces 'makes it easy' without changing meaning
| 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. |
Pre-merge Review — Last updated 2026-08-22T00:40:45ZTip 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 ( Review confidence:
Investigation log
✏️ 2 one-click style suggestions are posted inline — apply them from the Files changed tab, individually or with Add suggestion to batch. 🔍 Verification trail33 claims extracted · 12 verified · 4 unverifiable · 0 contradicted · 2 detector findings
📊 Editorial balanceSection depth, mention distribution, recommendation steering
🚨 Outstanding in this PRThese must be resolved or refuted before merging.
|
…#21072) * Fix internal links to old /docs/concepts/ URLs (redirect-hop cleanup) Several docs, blog, and tutorial pages still link to the pre-restructure /docs/concepts/... URLs, which now 301 (some via a double hop) to their current /docs/iac/concepts/..., /docs/esc/concepts/, or /docs/reference/glossary/ locations. Updated 79 files (154 link occurrences, both root-relative markdown links and fully-qualified https://www.pulumi.com/... links) to point directly at the final destination, verified live against the current redirect map. Every fragment (#anchor) and the handful of double-hop cases (missing trailing slash -> slash -> new path) were preserved/collapsed correctly. One additional file with the same pattern (content/blog/why-choose-pulumi-over-terraform/index.md) was intentionally left untouched because it already has open PRs (#21062, #21066) touching it today; filed a follow-up board card to catch it separately. * Address pre-merge review: fix stale anchors and mislabeled links Follow-up to the automated review of the /docs/concepts/ redirect-hop cleanup. The path rewrites were correct, but several rewritten links kept a #fragment whose section had moved off the destination page entirely, adding back a second (client-side JS) redirect hop -- exactly what this PR set out to remove: - #components -> /docs/iac/concepts/components/ - #autonaming -> /docs/iac/concepts/resources/names/#autonaming - #urns -> /docs/iac/concepts/resources/names/#urns - #dependson -> /docs/iac/concepts/resources/options/dependson/ - #explicit-provider-configuration -> /docs/iac/concepts/providers/ - #additionalsecretoutputs -> /docs/iac/concepts/resources/options/additionalsecretoutputs/ - #transformations -> /docs/iac/concepts/resources/options/transformations/ Applied across all lines in this PR's diff carrying these anchors (verified each target live), including a couple the review didn't individually cite but that matched the same pattern. Also fixed two mislabeled docs-page links flagged by review in content/docs/iac/guides/migration/import/_index.md: a `retainOnDelete` mention that pointed at the unrelated `protect` option's page (now points at its own retainOnDelete page), and a `#autonaming` anchor pointing at the wrong page (now the names page). Fixed three "Pulumi Service" (deprecated product name) mentions on lines this PR already touches, per STYLE-GUIDE.md: keep-your-secrets-secure-by-default, six-things-about-pulumi-service, and stack-readme now say Pulumi Cloud / Pulumi Cloud console, and the six-things and keep-your-secrets posts' own links to the old /product/pulumi-service/ and /docs/pulumi-cloud/self-hosted/ URLs (which themselves redirect) now point directly at their live targets. Verified: node ./scripts/lint/lint-markdown.js and yarn prettier --check on all 17 touched files, 0 errors; every new/changed anchor and link target fetched live to confirm a 200 response before use. * Address second pre-merge review pass: finish Pulumi Cloud rename, style suggestions - Finish the Pulumi Service -> Pulumi Cloud rename in six-things-about-pulumi-service/index.md (blocker): the prior commit only updated the one line the style linter flagged, leaving six more mentions and one /product/pulumi-service/ alias hop in the same post. - Apply 26 of 27 flagged style suggestions across 20 files: punctuation, wordiness, filler, weasel words, difficulty qualifiers, spacing, vague link text, an unbacked CLI command, and a directional reference. - Decline one word-choice suggestion (double click -> double select) in six-things-about-pulumi-service/index.md as not a real improvement; double-click is a named UI gesture with no natural select equivalent. Verified: yarn prettier --check and node ./scripts/lint/lint-markdown.js both pass clean on all touched files. * Fix low-confidence style-edit regressions flagged in third review pass The 483d4d1 style sweep dropped meaning or grammar in five spots while clearing linter flags on adjacent words: - keep-your-secrets-secure-by-default L34: restore the "often" hedge ("is enough" -> "is often all you need") so the claim isn't stronger than the original and isn't contradicted by the next sentence. - ai-slack-bot-...-pulumi-on-aws L284: same shape, milder -- restore "often" before "happens" for the same reason. - iac-best-practices-understanding-code-organization-stacks L82: restore the coordinating clause the linter's target word was carrying ("lightweight to create or delete" -> "lightweight, and creating or deleting one is quick"). - next-level-iac-pulumi-runtime-logic L293, L331: restore "immediately" before "before the program exits" -- the removed "just" was temporal, not a difficulty qualifier, and matches the Node.js/Python docs this section quotes. - six-things-about-pulumi-service L48: fix a pre-existing "such the current git SHA" typo (missing "as") while already touching this line for the Pulumi Cloud rename. Verified: yarn prettier --check and node ./scripts/lint/lint-markdown.js both pass clean on all 5 touched files. --------- Co-authored-by: workprentice <257153108+workprentice@users.noreply.github.com>
Fixes the outstanding finding from the pre-merge review: - content/docs/iac/guides/clouds/aws/eks.md:307 -- a two-line markdown link the earlier single-line grep missed; repoints to the canonical /docs/iac/concepts/resources/options/transforms/. - scripts/search/rank.js:80 -- the search-ranking boost for concepts pages checked the retired /docs/concepts/ prefix, so it silently fell through to the generic docs score (860) instead of 890. - theme/src/ts/redirects.ts -- "#outputs-and-strings" now lands on the section anchor (#using-string-interpolation) instead of the top of the page, matching the other 33 entries' precision and the stub page's own redirect_to target. content/blog/why-choose-pulumi-over-terraform/index.md's three absolute-URL survivors are intentionally left out of this PR: that file already has two open PRs against it (#21062, #21066) and is tracked separately.
…nt/blog Part of #20958. Lowercases 130 mid-sentence, generic-concept occurrences of 'Infrastructure as Code' / 'Infrastructure-as-Code' across 65 blog posts, flagged by the Pulumi.Overcapitalization Vale rule shipped in PR #20983. Deliberately left capitalized (2 occurrences, genuine proper-noun exceptions): - announcing-speaker-lineup-pulumiup-2023/index.md: a talk title ('Using Monorepos to Level-up your Infrastructure as Code...'). - platform-engineering-pillars-1/index.md: a quoted article title ('Platform Engineering: Recommended Practices for Infrastructure as Code'). Excluded from this sweep because an open PR is concurrently editing the same file (left for the author of that PR / a follow-up): - infrastructure-as-code-tools/index.md (PR #21065) - walkthrough-of-adopting-infrastructure-as-code/index.md (PR #21095) - aws-cdk-vs-pulumi-why-sst-switched/index.md (PR #21066)
* Fix internal links to old /docs/concepts/ URLs missed by #21072 PR #21072 rewrote 79 files of content/ links from old /docs/concepts/* to their current /docs/iac/concepts/*, /docs/esc/concepts/*, and /docs/reference/glossary/* destinations, but its sweep covered content/ markdown links only. Three files outside that scope still pointed at old dead-hop paths: - layouts/migrate/terraform.html: a template href, not a content link - assets/openapi/tag-intros/stacks.md: OpenAPI docs intro fragment - content/docs/iac/concepts/resources/_index.md: a client-side JS hash-redirect map (5 of its 22 entries still pointed at the old paths, doing the same job the map exists for but landing on another redirect hop instead of the final page) Each old path was verified against its live redirect chain before rewriting, confirming the new destination resolves 200 directly: - /docs/concepts/vs/terraform -> /docs/iac/comparisons/terraform/ - /docs/concepts/stack/ -> /docs/iac/concepts/stacks/ - /docs/concepts/resources/components -> /docs/iac/concepts/components/ - /docs/concepts/resources/names -> /docs/iac/concepts/resources/names/ - /docs/concepts/resources/get -> /docs/iac/concepts/functions/get-functions/ The #urns and #autonaming anchors were confirmed present on the new resources/names/ page. content/blog/why-choose-pulumi-over-terraform/index.md is intentionally left untouched here; it is still blocked by open PRs #21062 and #21066 and is tracked separately. node ./scripts/lint/lint-markdown.js and ./scripts/prettier.sh --check both pass on the changed files (the one markdown-lint finding on assets/openapi/tag-intros/stacks.md is a pre-existing missing-heading warning on master, unrelated to this change). --- 🧠 *This PR was created by [workprentice](https://github.com/workprentice).* * Complete redirect-hop cleanup: TS redirect maps, toc.ts, and remaining stale content links PR #21138 fixed 3 non-content/ surfaces (an asset, the resources hash-redirect map, and a layout template) but left several sibling defects of the same class: - theme/src/ts/redirects.ts: a client-side hash-redirect map for the old /docs/intro/concepts/programming-model/ page pointed all 34 entries at dead /docs/concepts/* hops. Rewrote every entry to its live /docs/iac/concepts/* (or /docs/iac/concepts/inputs-outputs/*, /docs/iac/concepts/providers/*, etc.) destination, verified 200 with no further hop. - theme/src/ts/toc.ts: the left-nav active-state map still keyed off the old /docs/concepts/ path. - content/docs/iac/concepts/resources/_index.md: the hash-redirect map added by #21138 itself was missing trailing slashes on 16 of its 28 targets, each of which 302-redirects to the slashed form -- the same dead-hop defect this whole cleanup exists to remove. Added trailing slashes throughout. - Six remaining content files (archetypes template, two blog posts, the insights search reference-link footnotes, and the k8s operator integration page) still linked to old /docs/concepts/* paths; rewrote to their current /docs/iac/concepts/* destinations. Every new destination verified live against https://www.pulumi.com with redirects disabled: all return 200 directly. A further stale link was found in static-prebuilt/ ESC SDK reference HTML, but those files are generated from pulumi/esc's own SDK docstrings at build time, so fixing them here would be overwritten on next regeneration -- tracked separately for a pulumi/esc-side fix. * Fold in the 3 review-flagged /docs/concepts/ survivors Fixes the outstanding finding from the pre-merge review: - content/docs/iac/guides/clouds/aws/eks.md:307 -- a two-line markdown link the earlier single-line grep missed; repoints to the canonical /docs/iac/concepts/resources/options/transforms/. - scripts/search/rank.js:80 -- the search-ranking boost for concepts pages checked the retired /docs/concepts/ prefix, so it silently fell through to the generic docs score (860) instead of 890. - theme/src/ts/redirects.ts -- "#outputs-and-strings" now lands on the section anchor (#using-string-interpolation) instead of the top of the page, matching the other 33 entries' precision and the stub page's own redirect_to target. content/blog/why-choose-pulumi-over-terraform/index.md's three absolute-URL survivors are intentionally left out of this PR: that file already has two open PRs against it (#21062, #21066) and is tracked separately. * Fix crawler-facing meta refresh to skip the /docs/concepts redirect hop The two retired-URL stub pages (programming-model.md and programming-model-previous.md) still pointed their meta refresh at /docs/concepts, which now resolves as a 302-then-301 chain before landing on /docs/iac/concepts/. Point the refresh straight at the final destination instead, matching the visible prose link directly beneath it. Re-swept current master for the same defect class: the other three instances found (assets/openapi/tag-intros/stacks.md and the theme/src/ts/redirects.ts anchor map) are already fixed by this PR's earlier commits. * Remove dead /docs/using-pulumi/ ranking branch from search rank.js Review flagged this as a sibling of the /docs/concepts/ prefix defect this PR fixes: content/docs/using-pulumi no longer exists, and every remaining /docs/using-pulumi/... occurrence under content/docs/ is an `aliases:` entry (a historical redirect source), not a page's own `url:`. No indexed page's href ever starts with /docs/using-pulumi/, so the branch never fired -- pages that used to live there now score 860 or 870 via fallthrough, same as any other docs page. The content that used to live under /docs/using-pulumi/ moved to three different trees (iac/, insights/policy/, administration/) with no single successor prefix, so there's no one replacement string to substitute -- removing the dead branch is the honest fix rather than repointing it. --------- Co-authored-by: workprentice <257153108+workprentice@users.noreply.github.com>
Eight prose-accuracy fixes on blog posts, verified individually rather than as a blanket find/replace.
Fixed
.tffiles run largely unchanged on the same engine), rather than an unverified claim about mixed-authoring teams sharing components.```csharpfence 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/lastmodfront matter on every post whose body text changed, per the existing repo convention (131+ posts already carryupdated:), without touching originaldate:values. Verified: nometa_descover the 160-char lint limit across the 8 touched files, and named post authors are unchanged.🧠 This PR was created by workprentice.