Skip to content

Fix internal links to old /docs/concepts/ URLs (redirect-hop cleanup) - #21072

Merged
workprentice[bot] merged 4 commits into
masterfrom
seo/fix-docs-concepts-internal-links-20260822
Aug 25, 2026
Merged

Fix internal links to old /docs/concepts/ URLs (redirect-hop cleanup)#21072
workprentice[bot] merged 4 commits into
masterfrom
seo/fix-docs-concepts-internal-links-20260822

Conversation

@workprentice

@workprentice workprentice Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

What

Fixes internal links that still point at the pre-restructure /docs/concepts/... URL space. Those URLs now 301 redirect (some via a double hop through a trailing-slash normalization) to their current homes under /docs/iac/concepts/..., /docs/esc/concepts/, or /docs/reference/glossary/.

Why

Internal links that force a redirect hop waste crawl budget, dilute link equity, and add avoidable latency for readers. /docs/iac/concepts/ is one of the highest-impression pages on the site per Search Console, so cleaning up the links that feed it (and its sibling pages) is a direct, low-risk technical-SEO win.

Scope

  • 79 files changed, 154 link occurrences across docs, tutorials, and blog content.
  • Covers both root-relative markdown links ([label](/docs/concepts/...)) and fully-qualified links (https://www.pulumi.com/docs/concepts/...).
  • Every target was resolved by following the live redirect chain to its final 200 destination before rewriting (not guessed), and anchors (#fragment) were preserved.
  • One file with the same pattern, content/blog/why-choose-pulumi-over-terraform/index.md, was deliberately left untouched because it already has open PRs (SEO: fix CTR + internal links for "agentic infrastructure" query #21062, fix(seo): correct unsourceable claims and stale enumerations across blog #21066) touching it; a follow-up board card will catch it once those land.

Verification

  • node ./scripts/lint/lint-markdown.js on all 79 changed files: 0 errors.
  • yarn prettier --check on all 79 changed files: all pass.
  • Every distinct old target path was fetched live and its full redirect chain followed to confirm a 200 final destination before use in the replacement map (30 distinct paths resolved).
  • git diff --numstat confirms 1:1 line replacement in every file (no unintended changes).

🧠 This PR was created by workprentice.

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.
@github-actions github-actions Bot added the review:triaging Claude Triage is currently classifying the PR label Aug 22, 2026
@workprentice

workprentice Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

@claude #new-review

@github-actions github-actions Bot added domain:docs PR touches technical docs domain:mixed PR touches more than one domain 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

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-08-24T22:18:40Z

Tip

Summary: 58a9840 takes all four style-edit regressions logged last round, using the suggested phrasing in each case — the usually hedge is back as "is often all you need" (and largely as "often happens"), iac-best-practices… L82 reads "stacks are lightweight, and creating or deleting one is quick", next-level-iac-pulumi-runtime-logic L293/L331 say "immediately before the program exits", and the pre-existing "such the current git SHA" typo is fixed. All five touched lines were read back against the working tree; the rewrites say what the originals said, and none of them re-introduces a flagged word. Outstanding stays empty and nothing blocks the merge. One correction to the mention's tally: the ⚠️ bucket had five non-link items, not four — the stack-readme / keep-your-secrets-secure-by-default partial-rename item is still open and is not a link-content finding, so 13 remain rather than 12. It's still a defensible decline (AGENTS.md treats /content/blog/ as historical); it just needs to be a decision rather than an oversight. The 12 unverifiable-claim items are unaffected by this push and carry forward as-is.

Review confidence:

Dimension Level Notes
mechanics HIGH All five lines 58a9840 touched were read back against the working tree; the diff is prose-only and introduces no new links, anchors, or code.
facts MEDIUM 16 claims remain unverifiable because the fetched page bodies were truncated to site navigation; the underlying pages do exist. Unchanged by this push.
coherence MEDIUM The four repaired sentences now scan cleanly, but stack-readme and keep-your-secrets-secure-by-default still mix "Pulumi Service" and "Pulumi Cloud".
cross-sibling consistency HIGH
Investigation log
  • Cross-sibling reads: 5 of 5 siblings
  • External claim verification: 118 of 158 claims verified (16 unverifiable, 10 contradicted, 2 framing-drift) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 113 Pass 1, 37 Pass 2 (verified 20, contradicted 2, unverifiable 15), 8 Pass 3 (verified 6, contradicted 0, unverifiable 2). Not re-run this round — 483d4d1 rewrites prose, not link targets, and no claim's cited source changed.
  • Cited-claim spot-checks: 37 of 37 cited claims fetched and compared
  • Frontmatter sweep: ran on body + meta_desc + social.{linkedin, twitter}
  • Rename sweep (this round): Pulumi Service re-grepped across six-things-about-pulumi-service, stack-readme, and keep-your-secrets-secure-by-default — unchanged by 58a9840
  • Style-edit readback (this round): all five lines 58a9840 touched diffed against 483d4d1 and read back in the working tree
  • 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 (single-subject, N/A)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
0 13 4 21

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

🔍 Verification trail

158 claims extracted · 118 verified · 16 unverifiable · 10 contradicted · 2 framing-drift · 6 detector findings
  • L140 in content/blog/advanced-aws-networking-part-1/index.md "You can improve a component's readability by placing its code in a separate file, in this case inspection.py." → ➖ not-a-claim (evidence: The text is the author's own stylistic advice about organizing example code ("You can also improve the component's readability by placing its code in a separate file (in this case, inspection.py)"), describing their own example repo's…; source: content/blog/advanced-aws-networking-part-1/index.md:140)
  • L140 in content/blog/advanced-aws-networking-part-1/index.md "Implementing the inspection VPC as a component resource enhances the readability of both the code and the output by grouping all resources that belong to the…" → ✅ verified (framing: Claim describes a specific use case (inspection VPC) of the general component resource benefit (grouping resources in CLI output) that the docs page covers…; evidence: The Component Resources docs page describes component resources as a way to group related resources under a single parent, improving organization of both code and CLI output such as pulumi up/pulumi preview display trees, which…; source: https://www.pulumi.com/docs/iac/concepts/components/)
  • L250 in content/blog/advanced-aws-networking-part-1/index.md "You need to create both sets of routes within an apply because of the need to access the raw values of each of the subnet ids." → 🌀 framing-drift (framing: The claim is a specific application (needing both sets of routes inside one apply due to needing raw subnet ids) of the general apply mechanism described…; evidence: The cited Pulumi docs page on Inputs & Outputs documents the apply method as the mechanism to access the underlying/raw value of an Output once it is resolved, which supports the claim's technical premise that raw values (e.g., subnet…; source: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/#apply)
  • L58 in content/blog/advanced-aws-networking-part-2/index.md "1. Defined your inspection VPC as a Pulumi component resource." → ✅ verified (evidence: Cited URL resolves (HTTP 200) to Pulumi's "Component Resources" docs page, which is the correct concept referenced by the claim (defining an inspection VPC as a Pulumi component resource). The page title and topic ("Component Resources |…; source: https://www.pulumi.com/docs/iac/concepts/components/)
  • L15 in content/blog/advanced-typescript-type-ftw/index.md "A core part of the Pulumi programming model is that we allow people to express complex" → ✅ verified (evidence: The linked page content/docs/iac/concepts/_index.md exists and describes Pulumi's programming model: "Pulumi programs, written in general-purpose programming languages, describe how your cloud infrastructure should be composed," directly…; source: repo:pulumi/docs content/docs/iac/concepts/_index.md)
  • L284 in content/blog/ai-slack-bot-adding-data-to-pinecone-using-s3-embedchain-and-pulumi-on-aws/index.md "If you're new to Pulumi, you might be wondering what's going on with the lambda_environment, why isn't app_bucket.id referenced directly, and what is…" → ✅ verified (evidence: The Inputs & Outputs concepts page confirms the All method page exists at this exact path and describes its function: "All allows you to access multiple outputs' plain values." This matches the…; source: repo:content/docs/iac/concepts/inputs-outputs/_index.md)
  • L120 in content/blog/announcing-infrastructure-as-code-with-java-and-pulumi/index.md "- General Pulumi overview (concepts and architecture)" → ✅ verified (evidence: The cited URL returns HTTP 200 and is titled "What is Pulumi? | Pulumi Docs", the general Pulumi concepts/architecture overview page, matching the link text and description in the blog post.; source: https://www.pulumi.com/docs/iac/concepts/)
  • L560 in content/blog/applying-attribute-based-access-controls-to-aws-lambda-functions/index.md "For the purposes of testing, we are now going to create a specific AWS Provider resource that we can…" → ✅ verified (evidence: The cited URL is Pulumi's official "Resource Providers" docs page (HTTP 200), which is the general concept page for creating explicit provider resources (e.g., AWS provider) that can be configured and passed IAM/assume-role details…; source: https://www.pulumi.com/docs/iac/concepts/providers/)
  • L104 in content/blog/architecture-as-code-kubernetes/index.md "Deploying modern applications is complex. Any one of the architectures we’ve examined -- virtual machines, microservices, serverless and Kubernetes …" → 🤷 unverifiable (evidence: The cited Medium URL returned HTTP 403 (Forbidden) with an empty body, so the supporting passage could not be retrieved. The claim text itself is a generic statement about deployment complexity rather than a specific factual assertion…; source: https://medium.com/@Joachim8675309/devops-concepts-pets-vs-cattle-2380b5aab313; intuition: 403 responses from Medium are often anti-bot blocks rather than true dead links; a manual browser fetch might…)
  • L105 in content/blog/architecture-as-code-serverless/index.md "To learn more about creating reusable components, read about Pulumi's programming model, which shows how to…" → ❌ contradicted (framing: The link targets an anchor (#components) on the resources page that no longer exists; the actual "Components" content lives at a distinct URL…; evidence: The current /docs/iac/concepts/resources/ page has no "components" section or anchor; components content was moved to a separate page (/docs/iac/concepts/components/). The resources page even carries a client-side redirect script mapping…; source: repo:content/docs/iac/concepts/resources/_index.md and repo:content/docs/iac/concepts/components/_index.md)
  • L26 in content/blog/automation-api-as-platform/index.md "We use an inline Pulumi program that doesn't require a separate package with index.ts and Pulumi.yaml files, although they can be authored in an…" → ✅ verified (evidence: Pulumi's own Automation API concept docs state: "Unlike traditional Pulumi programs, an inline program doesn't require a separate package on disk with its own file and Pulumi.yaml. Inline programs are functions that can be authored in…; source: repo:content/docs/iac/concepts/automation-api.md (Inline programs section))
  • L130 in content/blog/aws-serverless-analytics/index.md "The Pulumi stack outputs documentation is located at /docs/iac/concepts/stacks/#outputs." → ✅ verified (evidence: The stacks docs page (content/docs/iac/concepts/stacks/_index.md, retrieved via pulumi/docs repo) contains the heading "## Stack outputs {#outputs}" which matches the anchor /docs/iac/concepts/stacks/#outputs, and this anchor is used…; source: repo:content/docs/iac/concepts/stacks/_index.md)
  • L130 in content/blog/aws-serverless-analytics/index.md "Kinesis input streams can be exported as Pulumi stack outputs that can be referenced in other projects." → ✅ verified (evidence: The blog's own code sample exports the Kinesis stream names as stack outputs (export const impressionInputStream = impressionsInputStream.name;) and the accompanying text states "We export our Kinesis input streams as stack outputs…; source: content/blog/aws-serverless-analytics/index.md (lines 125-130); Pulumi stack outputs docs at /docs/iac/concepts/stacks/#outputs referenced inline)
  • L130 in content/blog/aws-serverless-analytics/index.md "The Pulumi serverless streaming input architecture implicitly creates an arrival-time partition scheme with the key 'inserted_at'." → 🤷 unverifiable (framing: The source explains generic partitioning concepts; it does not reference Pulumi's architecture or an 'inserted_at' key, so it cannot verify this specific…; evidence: The cited AWS Athena docs page explains general partitioning concepts (time-based partitioning, Hive vs non-Hive schemes) but says nothing about Pulumi's specific serverless streaming architecture or a key named 'inserted_at'. The claim…; source: https://docs.aws.amazon.com/athena/latest/ug/partitions.html)
  • L132 in content/blog/aws-serverless-analytics/index.md "This Pulumi component, though described imperatively, produces a declarative output in the form of a state file." → ✅ verified (evidence: Pulumi's architecture: programs are written imperatively in general-purpose languages, but the engine records the resulting desired resource graph declaratively in a state file, which per Pulumi docs/source (pkg/backend/diy/state.go…; source: repo:content/blog/aws-serverless-analytics/index.md L132; pulumi/pulumi changelog v0.15.2.md ("local backend...stores your deployment's state file locally, instead of on pulumi.com"))
  • L132 in content/blog/aws-serverless-analytics/index.md "The Pulumi state-and-backends documentation is located at /docs/iac/concepts/state-and-backends/." → ✅ verified (evidence: Numerous pages in pulumi/docs reference this exact path, e.g. content/docs/iac/concepts/_index.md: "State and backends — Learn how Pulumi stores state and manages concurrency," confirming the…; source: gh search code --repo pulumi/docs "state-and-backends")
  • L132 in content/blog/aws-serverless-analytics/index.md "A Pulumi state file can be managed locally, in an object store like S3, or by the Pulumi Service backend." → ✅ verified (evidence: Pulumi docs confirm: "Backend options include Pulumi Cloud... in addition to simple object storage in AWS S3... or a local filesystem" and describe DIY backends storing state in S3/Azure/GCS/local filesystem alongside the managed Pulumi…; source: repo:content/docs/iac/concepts/state-and-backends.md)
  • L132 in content/blog/aws-serverless-analytics/index.md "Running 'pulumi up' for this example creates 45 AWS resources and lists the stack outputs to the console." → 🤷 unverifiable (evidence: The claim restates the blog post's own text ("Running a 'pulumi up' shows that we've created 45 AWS resources, and lists our stack outputs to the console") which is illustrated by an accompanying screenshot (PulumiUpOutput.png) not…; source: repo:content/blog/aws-serverless-analytics/index.md (line 132))
  • L460 in content/blog/aws-serverless-analytics/index.md "The described workflow verifies that data ingested into Kinesis is read out the other end by Athena, using a shell script with stack outputs and a query in…" → ➖ not-a-claim (evidence: Line 460 reads: "Our workflow is to make a change, run a pulumi up, and then verify that data ingested into Kinesis is read out the other end by Athena. A simple shell script using stack outputs and…; source: repo:content/blog/aws-serverless-analytics/index.md)
  • L396 in content/blog/command-provider-ga/index.md "- The CopyFile resource is superseded by the new CopyToRemote resource. It can copy whole…" → 🤷 unverifiable (evidence: The pre-fetched body only contains generic GitHub page boilerplate (a modulepreload link tag) with no rendered PR content, so the claim that PR Typo #423 introduces CopyToRemote superseding CopyFile could not be confirmed from the fetched…; source: CopyFile: support assets, archives, and recursive copying pulumi-command#423)
  • L424 in content/blog/community-aws-iam-package/index.md "- If you’re interested in learning more about Pulumi concepts, try the Concepts page." → ✅ verified (evidence: content/docs/iac/concepts/_index.md exists, titled "Concepts" (h1: "What is Pulumi?"), and covers Pulumi concepts (projects, stacks, resources, config, etc.), matching the claim's description and link target /docs/iac/concepts/.; source: repo:content/docs/iac/concepts/_index.md)
  • L313 in content/blog/controlling-aws-costs-with-lambda-and-pulumi/index.md "take advantage of explicit provider configuration" → ❌ contradicted (evidence: The "Explicit provider configuration" section no longer exists on content/docs/iac/concepts/resources/_index.md. That page now only contains a client-side JS redirect map showing the anchor moved: `"#explicit-provider-configuration"…; source: repo:content/docs/iac/concepts/resources/_index.md and repo:content/docs/iac/concepts/providers/_index.md)
  • L65 in content/blog/create-eks-clusters-in-your-favorite-language/index.md "[resources]: https://www.pulumi.com/docs/iac/concepts/resources/" → ✅ verified (evidence: The cited URL resolves (HTTP 200) to the Pulumi Docs "Resources" concepts page, matching the link definition target exactly.; source: https://www.pulumi.com/docs/iac/concepts/resources/)
  • L50 in content/blog/crosswalk-for-aws-1-0/index.md "One of our guiding lights for Pulumi has always been to help organizations to scale up the complexity, capability, and richness of what they can build in the…" → 🤷 unverifiable (framing: The claim is an editorial/philosophical statement from the blog author, not a factual assertion the linked Components docs page is meant to prove or disprove.; evidence: The pre-fetched page (Component Resources docs) is generic navigation/marketing boilerplate with no content addressing the claim's specific narrative about Pulumi's guiding philosophy or scaling complexity on AWS. The claim text itself…; source: https://www.pulumi.com/docs/iac/concepts/components/)
  • L117 in content/blog/deploy-aws-static-website-with-angular-components/index.md "* If you’re interested in learning more about Pulumi concepts, try the Concepts page." → ✅ verified (evidence: content/docs/iac/concepts/_index.md exists with title "Concepts" (h1 "What is Pulumi?") at path /docs/iac/concepts/, matching the link text and href in the claim exactly.; source: repo:content/docs/iac/concepts/_index.md)
  • L202 in content/blog/deploy-aws-static-website-with-yaml/index.md "* If you’re interested in learning more about Pulumi concepts, try the Concepts page." → ✅ verified (evidence: The page at content/docs/iac/concepts/_index.md exists, titled "Concepts" ("What is Pulumi?"), and covers Pulumi concepts (projects, stacks, resources, config, etc.), matching the claim's description as a place to learn more about Pulumi…; source: repo:content/docs/iac/concepts/_index.md)
  • L30 in content/blog/dynamic-providers/index.md "Learn more about how Pulumi works here." → ✅ verified (evidence: The cited URL resolves (HTTP 200) to a live Pulumi Docs page titled "How Pulumi IaC Works | Pulumi Guides | Pulumi Docs", which matches the anchor text "Learn more about how Pulumi works here" linking to that guide.; source: https://www.pulumi.com/docs/iac/guides/basics/how-pulumi-works/)
  • L51 in content/blog/enhanced-search-intuitive-navigation-new-docs-experience/index.md "The Pulumi concept docs are where you can dive into Pulumi concepts. Learn how they work together and how to effectively use them to…" → ✅ verified (evidence: The page at content/docs/iac/concepts/_index.md exists with title "Concepts" (h1 "What is Pulumi?") and a "Concepts in depth" section linking to core concepts (Projects, Stacks, Resources, Config, etc.) explaining how Pulumi components…; source: repo:content/docs/iac/concepts/_index.md)
  • L21 in content/blog/faster-secrets-management/index.md "Pulumi now handles secrets more efficiently through optimized encryption and decryption processes…" → 🤷 unverifiable (evidence: The pre-fetched page is the general Pulumi Secrets Handling concepts doc; its truncated body is mostly nav/marketing chrome and does not mention 'optimized encryption/decryption processes' or reduced deployment times. No passage supports…; source: https://www.pulumi.com/docs/iac/concepts/secrets/; intuition: Claim asserts a specific performance improvement (optimized encryption/decryption reducing deployment times) that is…)
  • L29 in content/blog/full-access-to-helm-features-through-new-helm-release-resource-for-kubernetes/index.md "Pulumi's Helm Chart integration was implemented as a Component Resource which effectively extracts the…" → 🌀 framing-drift (framing: shifted — claim links to an in-page anchor #components on the resources page, but that content has since moved to a standalone…; evidence: The current Resources concepts page has no #components section anchor; "Components" content now lives on a separate page (/docs/iac/concepts/components/), linked only via a "Related topics" bullet…; source: repo:content/docs/iac/concepts/resources/_index.md)
  • L199 in content/blog/full-coverage-of-azure-resources-with-azure-native/index.md "You can also apply transformations to define your own naming schemas: see [this…" → ✅ verified (framing: Claim simply links to the docs page describing transformations as a mechanism to customize resource naming/properties, which the page's existence and topic…; evidence: The cited page (Pulumi Concepts: Resources) returned HTTP 200 and is the official docs page describing resource concepts, including a transformations section (anchor #transformations) matching the claim's link. The page content includes…; source: https://www.pulumi.com/docs/iac/concepts/resources/#transformations)
  • L91 in content/blog/functions-accept-outputs/index.md "string (see Inputs and Outputs)." → ✅ verified (evidence: The cited URL resolves (HTTP 200) to the Pulumi docs page titled "Inputs & Outputs | Pulumi Concepts | Pulumi Docs", matching the link text and topic referenced by the claim.; source: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/)
  • L58 in content/blog/go-sdk-road-to-2/index.md "Pulumi’s programming model is inherently asynchronous. Consider creating a new AWS SecurityGroup, and using it to provision an EC2…" → ✅ verified (evidence: The linked page /docs/iac/concepts/ describes Pulumi's programming model and includes the exact same illustrative example: "the following program shows how to create an AWS EC2 security group named web-sg with a single ingress rule and a…; source: repo:pulumi/docs content/docs/iac/concepts/_index.md)
  • L57 in content/blog/iac-best-practices-enabling-developer-stacks-git-branches/index.md "* Both of the project's stack-configuration files, Pulumi.dev.yaml and Pulumi.prod.yaml, are checked into version control. This is safe and considered…" → ✅ verified (framing: Claim links to the secrets docs as support for "even with secrets" being safe due to encryption; page is the canonical secrets-handling reference, entailing…; evidence: The cited page is Pulumi's official "Secrets Handling" concepts doc, which is the correct target for a link about secrets in config files; the fetched body confirms the page exists and covers secrets & configuration management…; source: https://www.pulumi.com/docs/iac/concepts/secrets/)
  • L82 in content/blog/iac-best-practices-understanding-code-organization-stacks/index.md "This use case---needing to have multiple, separate instances of the infrastructure and applications created by a single Pulumi program---is exactly what…" → ✅ verified (evidence: The cited URL (https://www.pulumi.com/docs/iac/concepts/stacks/) returns HTTP 200 and is the official Pulumi Concepts page on Stacks; page content confirms it is the canonical stacks documentation page, consistent with the claim that…; source: https://www.pulumi.com/docs/iac/concepts/stacks/)
  • L153 in content/blog/if-you-liked-ksonnet-youll-love-pulumi/index.md "overview of the programming model" → ✅ verified (evidence: content/docs/iac/concepts/_index.md exists at the /docs/iac/concepts/ path and titled "Concepts" / "What is Pulumi?", containing a "How does Pulumi work?" section describing the programming model (programs, resources, stacks, projects…; source: repo:content/docs/iac/concepts/_index.md)
  • L125 in content/blog/improving-kubernetes-management-with-pulumis-await-logic/index.md "overview of the programming model" → ✅ verified (evidence: The page at content/docs/iac/concepts/_index.md (served at /docs/iac/concepts/) is titled "Concepts" / "What is Pulumi?" and describes Pulumi's programming model: programs, resources, stacks, projects, SDK, CLI, and deployment engine …; source: repo:content/docs/iac/concepts/_index.md)
  • L85 in content/blog/infrastructure-testing-concepts/index.md "In cloud engineering, an infrastructure integration test uses infrastructure deployed in an [ephemeral environment](https://about.gitlab.com/blog/kubecon-na-20…" → 🤷 unverifiable (evidence: The cited URL returns HTTP 200 but the pre-fetched body is just page chrome/CSS boilerplate with no article text about ephemeral environments visible, so the supporting passage for the hyperlink's usage cannot be confirmed from the…; source: https://about.gitlab.com/blog/kubecon-na-2019-are-you-about-to-break-prod/)
  • L137 in content/blog/intro-to-step-functions/index.md "Finally, we need to update the state machine with a new workflow that includes our new function. The state machine takes three arguments, a name, an IAM…" → ➖ not-a-claim (evidence: This text is the blog author's own explanatory narrative describing their tutorial code (state machine setup with name, IAM role, and JSON workflow), not a falsifiable claim about a third-party fact or product behavior.; source: content/blog/intro-to-step-functions/index.md)
  • L165 in content/blog/jamstack-with-pulumi/index.md "1. Install dependencies for our Pulumi program." → ⚔️ mismatch (framing: shifted — anchor text promises instructions/context for "installing dependencies" but the target page covers general conceptual overview of how Pulumi works…; evidence: The linked page ("How Pulumi IaC Works") is a general conceptual guide explaining Pulumi's architecture and workflow, not a page about installing dependencies for a Pulumi program. The anchor text "Install dependencies" links to a page…; source: https://www.pulumi.com/docs/iac/guides/basics/how-pulumi-works/; intuition: Link text and destination topic appear mismatched — likely a broken or miscopied hyperlink target in the blog post.)
  • L20 in content/blog/keep-your-secrets-secure-by-default/index.md "Every Pulumi stack gets a unique encryption key." → ✅ verified (evidence: Pulumi docs state: "By default, the encryption method uses automatic, per-stack encryption keys provided by Pulumi Cloud" and "Pulumi Cloud automatically manages per-stack encryption keys on your behalf," and "the Pulumi CLI uses the…; source: repo:content/docs/iac/concepts/secrets/_index.md)
  • L20 in content/blog/keep-your-secrets-secure-by-default/index.md "If you use a self-managed backend like AWS S3 or Google Cloud Storage, secrets are protected by a passphrase that you choose when you start a new stack with…" → 🤷 unverifiable (evidence: The pre-fetched page body is only a truncated nav/header snippet from the Secrets Handling docs page and does not contain the specific passphrase/passphrase-provider content needed to confirm or deny the claim about self-managed backends…; source: https://www.pulumi.com/docs/iac/concepts/secrets/)
  • L27-28 in content/blog/keep-your-secrets-secure-by-default/index.md "The documentation page for explicitly marking resource outputs as secrets is located at https://www.pulumi.com/docs/iac/concepts/secrets/#explicitly-marking-re…" → ✅ verified (evidence: The URL returns HTTP 200 and resolves to the "Secrets Handling | Pulumi Concepts | Pulumi Docs" page; the pre-fetched body is truncated (nav/boilerplate only) and doesn't show the specific anchor section text, but the page exists and…; source: https://www.pulumi.com/docs/iac/concepts/secrets/#explicitly-marking-resource-outputs-as-secrets)
  • L34 in content/blog/keep-your-secrets-secure-by-default/index.md "The documentation page for initializing a stack with alternative encryption is located at https://www.pulumi.com/docs/iac/concepts/secrets/#initializing-a-stac…" → ✅ verified (evidence: The URL returns HTTP 200 and resolves to the Pulumi Docs "Secrets Handling | Pulumi Concepts" page, consistent with the claim's described location; the truncated body does not show the specific anchor section text but the page and anchor…; source: https://www.pulumi.com/docs/iac/concepts/secrets/#initializing-a-stack-with-alternative-encryption)
  • L34 in content/blog/keep-your-secrets-secure-by-default/index.md "Pulumi integrates with AWS Key Management System, Azure Key Vault, Google Cloud Key Management, and Hashicorp Vault to make it easy to protect secrets in the…" → ✅ verified (framing: Source confirms AWS KMS exists as a key management product; Pulumi's own documented secrets providers (not shown in this fetch) corroborate the integration…; evidence: The cited URL confirms AWS Key Management Service (KMS) is a real AWS product for encryption/key management, supporting the claim that Pulumi can integrate with it (note: the claim's name "Key Management System" is a slight misnomer for…; source: https://aws.amazon.com/kms/; intuition: Claim says "AWS Key Management System" but the actual product name is "AWS Key Management Service" (KMS) — minor…)
  • L40 in content/blog/keep-your-secrets-secure-by-default/index.md "Pulumi's secret storage documentation is located at https://www.pulumi.com/docs/iac/concepts/secrets/." → ✅ verified (evidence: The URL resolves with HTTP 200 to the "Secrets Handling | Pulumi Concepts | Pulumi Docs" page, confirming this is indeed Pulumi's secret storage documentation location.; source: https://www.pulumi.com/docs/iac/concepts/secrets/)
  • L52 in content/blog/kubernetes-yaml-v2/index.md "Pulumi autonaming is not supported for objects defined within the manifest (in the context of the ConfigGroup/ConfigFile resource discussed)." → ✅ verified (evidence: The pulumi-kubernetes yamlv2 provider code enforces contract.Requiref(obj.GetName() != "", "obj", "expected .metadata.name"), meaning objects parsed from a ConfigGroup/ConfigFile manifest must already have an explicit metadata.name …; source: gh search code --owner pulumi repo:pulumi/pulumi-kubernetes provider/pkg/provider/yaml/v2/yaml.go)
  • L52 in content/blog/kubernetes-yaml-v2/index.md "Pulumi autonaming is not supported within Kubernetes YAML v2 manifest resources, and documentation on autonaming is available at…" → ✅ verified (evidence: The linked page's "Physical Names and Auto-Naming" section (anchor #autonaming) documents Pulumi's autonaming feature generally: "Pulumi auto-names most resources by default, using the logical name and a random suffix to construct a…; source: gh search code -R pulumi/pulumi-kubernetes "must have a metadata.name" / provider/pkg/gen/_go-templates/yaml/yaml.tmpl; content/docs/iac/concepts/resources/names.md#autonaming)
  • L146 in content/blog/kubernetes-yaml-v2/index.md "The purpose of the resource prefix is to ensure the uniqueness of child resource names, as described in the Pulumi Resource Names documentation at…" → ✅ verified (evidence: The Pulumi Resource Names doc's #urns section states: "Resources constructed as children of a component resource must include the component resource's name as part of their names (e.g., as a prefix). This ensures uniqueness across…; source: repo:content/docs/iac/concepts/resources/names.md#urns)
  • L147 in content/blog/kubernetes-yaml-v2/index.md "Using the component name as a prefix is the best practice, and this is now the default behavior." → ✅ verified (evidence: The same doc's property tables state resourcePrefix "Defaults to the ConfigGroup name" / "Defaults to the ConfigFile name", confirming the component name is used as the default prefix, consistent with the claim that this is now the…; source: content/blog/kubernetes-yaml-v2/index.md (lines 48, 168); gh search pulumi/pulumi-kubernetes resourcePrefix usage)
  • L149 in content/blog/kubernetes-yaml-v2/index.md "The resource prefix is not applied to the Kubernetes object names." → ✅ verified (evidence: Pulumi-kubernetes SDK source confirms resourcePrefix only affects the Pulumi resource name/URN, not the Kubernetes object name: e.g. ConfigGroup.cs states "A prefix for the auto-generated resource names... Example: A resource created…; source: gh search code --owner pulumi resourcePrefix repo:pulumi/pulumi-kubernetes (sdk/dotnet/Yaml/V2/ConfigGroup.cs))
  • L147 in content/blog/managing-aws-credentials-on-cicd-part-2/index.md "Pulumi stack's configuration, and hard-code the specific set of projects and encrypted environment…" → ✅ verified (evidence: The URL https://www.pulumi.com/docs/iac/concepts/config/ resolves to content/docs/iac/concepts/config.md in pulumi/docs, the canonical page documenting Pulumi stack configuration, which matches the anchor text "Pulumi stack's…; source: gh api repos/pulumi/docs/contents/content/docs/iac/concepts/config.md)
  • L270 in content/blog/managing-aws-credentials-on-cicd-part-3/index.md "Pulumi supports encrypting sensitive configuration data, as documented at https://www.pulumi.com/docs/iac/concepts/config/#secrets." → ✅ verified (framing: Claim states Pulumi supports encrypting sensitive config data; source confirms this exactly, though the specific URL/anchor may have moved from…; evidence: (escalated from pass1) Pulumi's docs confirm: "Pulumi Cloud transmits and stores entire state files securely, but Pulumi also supports encrypting individual values as secrets for additional protection." The content now lives at…; source: https://www.pulumi.com/docs/iac/concepts/secrets/)
  • L271 in content/blog/managing-aws-credentials-on-cicd-part-3/index.md "You can encrypt a Pulumi configuration setting by adding the --secret flag." → ✅ verified (evidence: Pulumi changelog v2.14.0 confirms: config values set via pulumi config set --secret "that are used as inputs to providers are encrypted"; widely used across pulumi/examples READMEs (pulumi config set --secret <key> <value>) as the…; source: gh search code --owner pulumi "config set --secret" (pulumi/pulumi:changelog/v2.14.0.md, pulumi/examples READMEs))
  • L284 in content/blog/managing-aws-credentials-on-cicd-part-3/index.md "Pulumi keeps track of your cloud resources in a checkpoint file, documented at /docs/iac/concepts/state-and-backends/." → ✅ verified (evidence: The state-and-backends doc page (at content/docs/iac/concepts/state-and-backends.md, i.e. /docs/iac/concepts/state-and-backends/) has a "Checkpoints" section stating: "Pulumi state is usually stored in a transactional snapshot called a…; source: repo:content/docs/iac/concepts/state-and-backends.md)
  • L285 in content/blog/managing-aws-credentials-on-cicd-part-3/index.md "A Pulumi resource might have a 'password' output property that could contain sensitive information stored in the checkpoint file." → ✅ verified (evidence: Pulumi's own docs on additionalSecretOutputs use the identical example: "This example ensures that the password generated for a database resource is an encrypted secret" — i.e., a resource's "password" output property is the canonical…; source: repo:content/docs/iac/concepts/resources/options/additionalsecretoutputs.md)
  • L287-290 in content/blog/managing-aws-credentials-on-cicd-part-3/index.md "If a resource output is marked secret and encrypted in the checkpoint file, viewing the checkpoint file contents via pulumi stack export would not allow…" → ✅ verified (evidence: The blog text itself (which is the claim under review) states that additionalSecretOutputs marks a resource output as secret and encrypts it in the checkpoint file, so viewing via pulumi stack export would not recover the plaintext.…; source: Pulumi docs concept: additionalSecretOutputs resource option and pulumi stack export encrypting secret values in state (redirect target /docs/iac/concepts/resources/options/additionalsecretoutputs referenced in content/docs/iac/concepts/resources/_index.md))
  • L52-53 in content/blog/migrating-my-infrastructure-from-terraform-to-pulumi/index.md "Pulumi component resources, documented at https://www.pulumi.com/docs/iac/concepts/resources/#components, can be used to group resources into logical groups…" → ❌ contradicted (framing: claim cites resources page anchor #components, but that content/anchor lives at the separate /docs/iac/concepts/components/ page instead; evidence: The current docs site has no #components section on /docs/iac/concepts/resources/. That page only links out to a separate page, /docs/iac/concepts/components/ ("Components - Learn what a component resource is..."), which is where…; source: repo:content/docs/iac/concepts/resources/_index.md and repo:content/docs/iac/concepts/components/_index.md)
  • L53 in content/blog/migrating-my-infrastructure-from-terraform-to-pulumi/index.md "- Read Pulumi's own overview and naming docs…" → ✅ verified (evidence: The cited URL (https://www.pulumi.com/docs/iac/concepts/) resolves with HTTP 200 and is Pulumi's "What is Pulumi?" concepts overview page, matching the claim's description of it as Pulumi's "overview" docs. The claim is a…; source: https://www.pulumi.com/docs/iac/concepts/)
  • L132 in content/blog/migrating-my-infrastructure-from-terraform-to-pulumi/index.md "Pulumi's component resources, documented at https://www.pulumi.com/docs/iac/concepts/resources/#components, are 'logical components' that the user defines…" → ✅ verified (framing: Source: "logical grouping of Pulumi resources... encapsulates implementation details"; claim paraphrases as "logical components... defined by the user... to…; evidence: The linked docs page (resources/#components, which redirects to /docs/iac/concepts/components/) defines a component as "a logical grouping of Pulumi resources that is exposed as a single Pulumi resource," authored by users to encapsulate…; source: repo:content/docs/iac/concepts/components/_index.md and content/docs/iac/concepts/resources/_index.md)
  • L153 in content/blog/migrating-my-infrastructure-from-terraform-to-pulumi/index.md "Each resource in Pulumi has a globally unique URN, as documented at https://www.pulumi.com/docs/iac/concepts/resources/#urns." → ✅ verified (evidence: The docs page content/docs/iac/concepts/resources/names.md states: "Each resource is assigned a [Uniform Resource Name (URN)]... that uniquely identifies that resource globally." and "The URN must be globally unique." The cited URL's…; source: repo:content/docs/iac/concepts/resources/names.md)
  • L334 in content/blog/migrating-my-infrastructure-from-terraform-to-pulumi/index.md "The .apply method can be useful for troubleshooting when you need to access the particular value of an output." → ➖ not-a-claim (evidence: This is the blog author's own subjective tip/opinion about a personal workflow technique ("The .apply method can also be useful for troubleshooting when you need to access the particular value of an output"), not a falsifiable…; source: repo:content/blog/migrating-my-infrastructure-from-terraform-to-pulumi/index.md)
  • L334 in content/blog/migrating-my-infrastructure-from-terraform-to-pulumi/index.md "Pulumi's documentation for Inputs and Outputs is located at https://www.pulumi.com/docs/iac/concepts/inputs-outputs/." → ✅ verified (evidence: The URL https://www.pulumi.com/docs/iac/concepts/inputs-outputs/ returns HTTP 200 and its title is "Inputs & Outputs | Pulumi Concepts | Pulumi Docs", confirming this is indeed Pulumi's documentation page for Inputs and Outputs.; source: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/)
  • L101 in content/blog/mlops-huggingface-llm-aws-sagemaker-python/index.md "While creating a new project from the sagemaker-aws-python Pulumi template, you will be prompted for a [project](https://www.pulumi.com/docs/iac/concepts/pro…" → 🤷 unverifiable (evidence: The claim's text cites two links: projects concept page and stacks concept page. The pre-fetched content corresponds to the stacks page (https://www.pulumi.com/docs/iac/concepts/stacks/), but the source_hint and primary target of this…; source: https://www.pulumi.com/docs/iac/concepts/projects/)
  • L34 in content/blog/multicloud-with-kubernetes-and-pulumi/index.md "The Pulumi documentation page at https://www.pulumi.com/docs/iac/concepts/components/ describes a Component Resource as an abstraction on top of other Pulumi…" → 🤷 unverifiable (evidence: The pre-fetched page body is truncated to generic site navigation/header content and does not contain the actual definition of Component Resource, so I cannot confirm or deny the specific phrasing "abstraction on top of other Pulumi…; source: https://www.pulumi.com/docs/iac/concepts/components/; intuition: Component Resources are typically described as an abstraction composed of other resources (not specifically…)
  • L53 in content/blog/multicloud-with-kubernetes-and-pulumi/index.md "The Pulumi documentation page at https://www.pulumi.com/docs/iac/concepts/secrets/#using-configuration-and-secrets-in-code documents using configuration and…" → ✅ verified (evidence: The docs page content/docs/iac/concepts/secrets/_index.md contains the section "## Using configuration and secrets in code" (line 327), which matches the URL fragment #using-configuration-and-secrets-in-code and describes using…; source: repo:content/docs/iac/concepts/secrets/_index.md)
  • L352-355 in content/blog/next-level-iac-breakpoint-debugging/index.md "The Pulumi documentation page describing the apply function is located at https://www.pulumi.com/docs/iac/concepts/inputs-outputs/apply/." → ✅ verified (evidence: The repo's own markdown defines [apply-docs]: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/apply/, and the pulumi/docs repo confirms a real page exists at content/docs/iac/concepts/inputs-outputs/apply.md, matching that URL…; source: gh api repos/pulumi/docs/contents/content/docs/iac/concepts/inputs-outputs)
  • L180-187 in content/blog/next-level-iac-briding-the-declarative-gap/index.md "The Pulumi documentation page explaining the declarative and imperative approach is located at https://www.pulumi.com/docs/iac/guides/basics/how-pulumi-works/#…" → ❌ contradicted (framing: Claim asserts the anchor exists at the cited URL; the current page content shows no matching heading/anchor.; evidence: The current content/docs/iac/guides/basics/how-pulumi-works.md page has no "Declarative and imperative approach" heading/anchor — its sections are "Running a Pulumi program", "Resource operations", "Creation and deletion order"…; source: repo:content/docs/iac/guides/basics/how-pulumi-works.md)
  • L119 in content/blog/next-level-iac-pulumi-runtime-logic/index.md "Running processes synchronously means they complete before Pulumi starts registering resources, as documented at https://www.pulumi.com/docs/iac/guides/basics/…" → 🤷 unverifiable (evidence: The pre-fetched body is truncated to generic nav/header content and does not contain any passage describing synchronous process execution or resource registration ordering, so the specific claim cannot be confirmed against this fetch.; source: https://www.pulumi.com/docs/iac/guides/basics/how-pulumi-works/)
  • L293 in content/blog/next-level-iac-pulumi-runtime-logic/index.md "The function returns early for Pulumi previews so the cache isn't cleared if the site hasn't changed." → ✅ verified (evidence: The code sample shows if (pulumi.runtime.isDryRun()) { console.log("This is a Pulumi preview, so skipping cache invalidation."); return; } before the CloudFront invalidation logic, and the accompanying prose states "The function…; source: repo:content/blog/next-level-iac-pulumi-runtime-logic/index.md (lines 256-261, 293))
  • L293 in content/blog/next-level-iac-pulumi-runtime-logic/index.md "The code uses the AWS SDK for JavaScript to submit the invalidation request to CloudFront, naming it uniquely with a timestamp and logging the result to the…" → ➖ not-a-claim (evidence: This is a description of the blog author's own example code (a Pulumi program invoking the AWS SDK for JavaScript to create a CloudFront invalidation), not a third-party factual claim to verify against aws.amazon.com/sdk-for-javascript/.; source: content/blog/next-level-iac-pulumi-runtime-logic/index.md (author's own code description))
  • L293 in content/blog/next-level-iac-pulumi-runtime-logic/index.md "The call to process.on('beforeExit') registers a function to be invoked just before the program exits, using the resolved ID of the distribution." → ✅ verified (framing: Source describes the general beforeExit mechanism; claim describes a narrower, specific usage (with the distribution's resolved ID) that is a valid…; evidence: Node.js docs state: "The 'beforeExit' event is emitted when Node.js empties its event loop and has no additional work to schedule," and a listener registered on it runs before the process would otherwise exit — matching the claim that…; source: https://nodejs.org/api/process.html#event-beforeexit)
  • L331 in content/blog/next-level-iac-pulumi-runtime-logic/index.md "The function returns early for Pulumi previews so the cache isn't cleared if the site hasn't changed." → ➖ not-a-claim (evidence: The blog's own code sample shows if pulumi.runtime.is_dry_run(): ... return with the accompanying prose stating "The function returns early for Pulumi previews --- no sense clearing the cache if the site hasn't changed". This is the…; source: repo:content/blog/next-level-iac-pulumi-runtime-logic/index.md (lines 304-331))
  • L331 in content/blog/next-level-iac-pulumi-runtime-logic/index.md "The code uses Boto3 to submit the invalidation request to CloudFront, naming it uniquely with a timestamp and logging the result to the console." → ➖ not-a-claim (evidence: This is a description of the blog post's own example code/design (using Boto3 to invalidate CloudFront with a timestamp-based caller reference and console logging), not a checkable third-party factual assertion. The cited Boto3 docs…; source: content/blog/next-level-iac-pulumi-runtime-logic/index.md (author's own code walkthrough))
  • L331 in content/blog/next-level-iac-pulumi-runtime-logic/index.md "The call to atexit.register() registers a function to be invoked just before the program exits, using the resolved ID of the distribution." → ✅ verified (framing: Source: "Register func as a function to be executed at termination" / "automatically executed upon normal interpreter termination" — claim narrows this to…; evidence: Python docs state: "Register func as a function to be executed at termination," and functions "are automatically executed upon normal interpreter termination" (i.e., just before the program exits). The claim's mention of "the resolved ID…; source: https://docs.python.org/3/library/atexit.html)
  • L49 in content/blog/nx-monorepo/index.md "In this post, we'll show how you can build a seamless development workflow by integrating Pulumi code level abstractions, such as [Component…" → ✅ verified (evidence: The cited URL resolves (HTTP 200) to Pulumi's "Component Resources" docs page, confirming this is a real, live doc concept referenced correctly as "Component Resources" in the claim.; source: https://www.pulumi.com/docs/iac/concepts/components/)
  • L87 in content/blog/organizing-aws-accounts-with-pulumi/index.md "// https://www.pulumi.com/docs/iac/concepts/resources/options/protect/" → ✅ verified (evidence: The pulumi/docs repo contains content/docs/iac/concepts/resources/options/protect.md with title "protect | Resource Options", which renders at the URL /docs/iac/concepts/resources/options/protect/ referenced in the blog post's code comment.; source: gh search code --owner pulumi repo:pulumi/docs protect path:content/docs/iac/concepts/resources/options)
  • L78 in content/blog/p3-some-assembly-required/index.md "Pulumi documentation allows mapping teams to stacks to grant access at specific permission levels, as documented at https://www.pulumi.com/docs/pulumi-cloud/ac…" → ✅ verified (evidence: (escalated from pass1 after exhausting its 12-turn cap) The cited page confirms the substance of the claim: "Teams can be granted access to stacks, which grants all team members access to those stack based on the selected permission…; source: https://www.pulumi.com/docs/pulumi-cloud/access-management/teams/)
  • L82 in content/blog/p3-some-assembly-required/index.md "Deploying a Pulumi stack requires secrets such as cloud credentials and other configuration values that are provided to the deployment engine." → ✅ verified (framing: The claim is a general statement about deployment requiring secrets/config; the ESC docs page describes the broader ESC system that manages exactly this…; evidence: The ESC concepts page confirms environments are "collections of configuration values and secrets" consumed "from your applications, infrastructure, and CI/CD pipelines," and that ESC "eliminates duplicated secrets and configuration…; source: repo:content/docs/esc/concepts/_index.md)
  • L204 in content/blog/p3-some-assembly-required/index.md "In a custom internal developer platform, users can define their own Pulumi component resources and bake appropriate settings/configuration directly into the…" → ➖ not-a-claim (evidence: The claim is a near-verbatim restatement of the blog's own explanatory text: "However, in a custom internal developer platform you can define your own components, and bake appropriate settings/configuration directly into the underlying…; source: content/blog/p3-some-assembly-required/index.md:204)
  • L204 in content/blog/p3-some-assembly-required/index.md "In Pulumi, a component resource, as documented at https://www.pulumi.com/docs/iac/concepts/components/, is something that developers can import in their…" → 🤷 unverifiable (evidence: The pre-fetched page returned only navigation/header boilerplate (200 OK) with no body content addressing component resources' definition or the specific claim about importing/instantiating/modifying them; the truncated content doesn't…; source: https://www.pulumi.com/docs/iac/concepts/components/)
  • L206 in content/blog/p3-some-assembly-required/index.md "A multi-language component (MLC) lets a user author a component in their language of choice and then generate an SDK that surfaces that component into all of…" → ✅ verified (evidence: The blog itself and Pulumi's known MLC feature (component provider boilerplate repos for Python/TypeScript/Go, used to "Generate an SDK for the other languages") confirm that a Multi-Language Component lets an author write a component…; source: repo:content/blog/p3-some-assembly-required/index.md (L206, L210-214))
  • L206 in content/blog/p3-some-assembly-required/index.md "Pulumi supports writing components that can be consumed from Python, Go, and Node.js, among other languages." → ✅ verified (framing: Source says components are available in "all supported programming languages"; claim names a narrower subset (Python, Go, Node.js) plus "among other…; evidence: The pulumi-component-provider-py-boilerplate README (a Pulumi-maintained reference repo linked in the same blog section) states: "Pulumi component providers make component resources available to Pulumi code in all supported programming…; source: gh api repos/pulumi/pulumi-component-provider-py-boilerplate/contents/README.md)
  • L64 in content/blog/pulumi-3-0/index.md "Pulumi Packages are the core technology that enables cloud infrastructure resource provisioning to be defined once, and made available to users in all…" → ➖ not-a-claim (evidence: This is the blog author's own description of Pulumi's product/feature (Pulumi Packages and Components) at the Pulumi 3.0 launch, not a third-party factual assertion. Current docs corroborate the underlying concept: "A component resource…; source: repo:content/docs/iac/concepts/resources/_index.md)
  • L65 in content/blog/pulumi-and-localstack/index.md "The big thing to remember is that a Pulumi 'output' value [is not known until after the infrastructure has been fully provisioned](https://www.pulumi.com/docs/…" → 🤷 unverifiable (evidence: The pre-fetched page returned HTTP 200 but the truncated body only shows generic Pulumi site navigation/marketing content, not the actual Inputs & Outputs conceptual documentation text needed to confirm the specific claim about outputs…; source: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/)
  • L41 in content/blog/pulumi-loves-python/index.md "Pulumi has long supported creating and managing virtual environments using Python's builtin package manager pip." → ✅ verified (evidence: The pulumi/pulumi repo's sdk/python/toolchain/pip.go implements virtualenv creation/management via pip as the default Python toolchain, and the blog text itself (L41) states "Pulumi has long had support to create and manage virtual…; source: gh search code --owner pulumi "virtualenv" repo:pulumi/pulumi (sdk/python/toolchain/pip.go))
  • L41 in content/blog/pulumi-loves-python/index.md "Poetry allows users to declare dependencies in a simple and concise way and manage their virtual environment with ease." → ➖ not-a-claim (evidence: This is a general, non-falsifiable descriptive statement about Poetry's widely-known purpose (dependency declaration and virtual environment management) rather than a specific factual claim about Pulumi's product or behavior. Poetry's…; source: General knowledge of Poetry (python-poetry.org) purpose; not a Pulumi-specific claim.)
  • L41 in content/blog/pulumi-loves-python/index.md "Poetry is a popular Python dependency management tool that allows users to declare dependencies in a simple and concise way and manage their virtual…" → ✅ verified (evidence: Official Poetry docs state: "Poetry is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you," and it is widely described…; source: https://python-poetry.org/docs/)
  • L41 in content/blog/pulumi-loves-python/index.md "The latest release of Pulumi referenced at https://github.com/pulumi/pulumi/releases/tag/v3.121.0 adds support for Poetry as a Python dependency management…" → ✅ verified (evidence: Release notes for v3.121.0 include: "[sdk/python] Automatically convert requirements.txt to pyproject.toml when using Poetry" (PR Update pulumi_import.md #16346), confirming Poetry support was added in this release.; source: gh release view v3.121.0 -R pulumi/pulumi)
  • L43 in content/blog/pulumi-loves-python/index.md "To opt in to using Poetry for an existing Pulumi project, a user must set the toolchain runtime option (documented at…" → ✅ verified (evidence: The project-file docs list toolchain as a runtime option: "Toolchain to use for managing virtual environments, pip, poetry, or uv." confirming a user can set toolchain: poetry to opt into Poetry for the python runtime, then run…; source: repo:content/docs/iac/concepts/projects/project-file.md)
  • L43 in content/blog/pulumi-loves-python/index.md "If a user chooses to use Poetry when creating a new Pulumi project, the Pulumi CLI automatically creates a new Poetry project and installs the necessary…" → ✅ verified (framing: Source (changelog) confirms the feature generally; the project-file doc page documents the toolchain option that invokes it — claim is a faithful narrower…; evidence: Pulumi v3.120.0 changelog confirms: "[sdk/python] Support Poetry as Python toolchain" and "[sdk/python] Autoinstall dependencies using Poetry in GetRequiredPlugins", matching the blog's description that choosing Poetry causes the CLI to…; source: gh search code --owner pulumi "poetry" (pulumi/pulumi:changelog/v3.120.0.md: "Support Poetry as Python toolchain", "Autoinstall dependencies using Poetry in GetRequiredPlugins"))
  • L55 in content/blog/pulumi-loves-python/index.md "Pulumi Python SDKs include type hints compatible with type checkers such as MyPy and Pyright." → ✅ verified (evidence: Pulumi's Python SDK toolchain source (sdk/python/toolchain/toolchain.go) defines TypeCheckerMypy, and sdk/python/Makefile runs both mypy and pyright for type checking; the project file typechecker runtime option accepts mypy or…; source: gh search code --repo pulumi/pulumi mypy/pyright; sdk/python/toolchain/toolchain.go; sdk/python/Makefile)
  • L55 in content/blog/pulumi-loves-python/index.md "In the latest release of Pulumi, users can configure Pulumi to run their typechecker of choice as part of Pulumi operations and fail if there are type errors." → ✅ verified (evidence: Pulumi added a 'typechecker' runtime option for Python (PR Regen dev version pulumi@3.190.0-alpha.xf18d36d #15725 "Add 'typechecker' option to python runtime", released in changelog v3.113.0: "[sdk/python] Add 'typeChecker' runtime option to the Python language host"). It supports…; source: gh search prs --repo pulumi/pulumi typechecker; pulumi/pulumi changelog/v3.113.0.md)
  • L57 in content/blog/pulumi-loves-python/index.md "To enable automatic type checking, add the typechecker of your choice to your dependencies and set the typechecker runtime option (documented at…" → ✅ verified (evidence: The project-file docs (Runtime Options section) list: "typechecker | Only applies to the python runtime | Type checker library to use." and further state "This option can be set to mypy or pyright. ... If set, the given type…; source: repo:content/docs/iac/concepts/projects/project-file.md)
  • L136-140 in content/blog/pulumi-release-notes-85/index.md "Pulumi experimented with showing an extra option 'yes, using Update Plans' at the update prompt to get extra feedback from users, and that experiment is now…" → ✅ verified (evidence: Pulumi changelog v3.55.0 confirms: "[cli] Remove the [experimental] yes, using Update Plans prompt." This matches the blog's description that Pulumi experimented with the option to get user feedback and then removed it once the…; source: gh search code --owner pulumi "yes, using Update Plans" (pulumi/pulumi:changelog/v3.55.0.md))
  • L146 in content/blog/pulumi-release-notes-85/index.md "Pulumi SDKs ship helper serialization and deserialization functions that natively understand the type Output, streamlining the combination of JSON…" → 🤷 unverifiable (evidence: The pre-fetched body is truncated to generic site navigation/header content and does not include the specific section discussing JSON serialization/deserialization helper functions for Output. Cannot confirm or deny the specific claim…; source: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/)

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

Important

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

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

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor
continued from previous comment
  • L170 in content/blog/pulumi-release-notes-85/index.md "The Pulumi documentation page for Stacks (including Stack References) is located at https://www.pulumi.com/docs/iac/concepts/stacks/#stackreferences." → ✅ verified (evidence: The pulumi/docs repo contains content/docs/iac/concepts/stacks.md with a heading ## Stack references {#stackreferences}, which renders at the URL https://www.pulumi.com/docs/iac/concepts/stacks/#stackreferences — matching the claim…; source: gh search code --repo pulumi/docs "StackReferences" (content/docs/iac/concepts/stacks.md: "## Stack references {#stackreferences}"))
  • L172 in content/blog/pulumi-release-notes-85/index.md "Recent Pulumi SDKs shipped a method called StackReference.getOutputDetails." → ✅ verified (evidence: changelog/v3.55.0.md confirms: "[sdk/nodejs] Adds StackReference.getOutputDetails to retrieve outputs from StackReferences as plain objects." and the method is implemented in sdk/nodejs/stackReference.ts (`public async…; source: gh search code --owner pulumi getOutputDetails (pulumi/pulumi changelog/v3.55.0.md, sdk/nodejs/stackReference.ts))
  • L172 in content/blog/pulumi-release-notes-85/index.md "StackReference.getOutputDetails returns a plain object with two fields, value and secretValue, of which at most one is set depending on whether the stack…" → ✅ verified (evidence: Blog text and the pulumi/pulumi nodejs SDK implementation confirm: "This method returns a plain object with two fields: value and secretValue. At most one of these fields is set, depending on whether the stack reference output is a…; source: gh search code --owner pulumi getOutputDetails (pulumi/pulumi sdk/nodejs/stackReference.ts; pulumi/docs content/blog/pulumi-release-notes-85/index.md))
  • L48 in content/blog/pulumi-release-notes-m60/index.md "With updates to the Pulumi Packages schema and the Provider interface, it is now possible to make a component's methods available in all languages." → ✅ verified (evidence: GitHub issue Support methods for multi-language components pulumi#7072 ("Support methods for multi-language components", milestone 0.60, resolved/fixed) states: "Components often have methods that provide additional functionality associated with an instance of a component. We…; source: gh issue view 7072 -R pulumi/pulumi)
  • L54 in content/blog/pulumi-release-notes-m60/index.md "Now, depending on a Pulumi Component Package's component will always wait on all of that component's children, regardless of language." → ✅ verified (evidence: GitHub issue [sdk/nodejs] dependsOn of a multi-language component resource doesn't wait on the children of the component pulumi#7540 (linked in the same blog paragraph) documents that dependsOn on a multi-language component didn't wait on all the component's children in Node.js, "This is different than the Python and Go SDKs, and not…; source: gh issue view 7540 -R pulumi/pulumi)
  • L54 in content/blog/pulumi-release-notes-m60/index.md "Passing Inputs and Outputs to dependsOn can be especially useful in Kubernetes and Helm workflows where you need to depend on the output of a resource…" → ✅ verified (framing: Source confirms the general feature (Input/Output support in dependsOn across languages); the claim's Kubernetes/Helm illustration is a narrower, plausible…; evidence: GitHub issue Update Hugo modules #7542 (referenced in the post, part of the Pulumi 0.60 milestone) confirms the dependsOn cross-language inconsistency fix, and the release notes' own example demonstrates exactly the Kubernetes/Helm-style use case…; source: gh api repos/Consistently implement (and document) depends on a component across languages pulumi#7542; content/blog/pulumi-release-notes-m60/index.md)
  • L54 in content/blog/pulumi-release-notes-m60/index.md "The dependsOn option creates a list of explicit dependencies between resources, useful when you need to explicitly specify additional dependencies that…" → ✅ verified (evidence: The dependsOn docs page (now at /docs/iac/concepts/resources/options/dependson, redirected from the old #dependson anchor) states: "The dependsOn resource option creates a list of explicit dependencies between resources... you may need…; source: repo:content/docs/iac/concepts/resources/options/dependson.md)
  • L36 in content/blog/pulumi-release-notes-m64/index.md "Pulumi's dependsOn option enables you to write programs that deploy resources in a specific order. Previously…" → ✅ verified (evidence: The linked page content/docs/iac/concepts/resources/_index.md contains a client-side redirect mapping #dependson to /docs/iac/concepts/resources/options/dependson, which is the canonical dependsOn resource option page ("Resource…; source: repo:content/docs/iac/concepts/resources/_index.md and repo:content/docs/iac/concepts/resources/options/dependson.md)
  • L188 in content/blog/redis-cloud-provider/index.md "If you are unfamiliar with the call to apply(), you can learn more about why this is necessary in [Inputs and Outputs](https://www.pulumi.com/docs/iac/concep…" → ✅ verified (framing: The claim simply points readers to the docs page for background on apply(), which the page covers; the additional assertion ("creating resources within…; evidence: The cited URL (https://www.pulumi.com/docs/iac/concepts/inputs-outputs/#apply) returns HTTP 200 and is the Pulumi docs page on Inputs & Outputs, which documents the apply() method. The pre-fetched body is a generic page header/nav…; source: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/#apply)
  • L27 in content/blog/refactoring-iac/index.md "A similar situation occurs with component resources, i.e., a logical grouping of related resources such as…" → ❌ contradicted (evidence: The linked page content/docs/iac/concepts/resources/_index.md has no heading or anchor named "components" — it only briefly mentions ComponentResource in one bullet ("A component resource is a logical grouping of other resources...")…; source: repo:content/docs/iac/concepts/resources/_index.md)
  • L444 in content/blog/remediation-policies/index.md "Finally, Pulumi has always had transformations to perform in-memory…" → ✅ verified (evidence: The docs page content/docs/iac/concepts/resources/options/transformations.md (served at the cited URL) documents both per-resource transformations and "Stack Transformations," stating they "can also be applied in bulk to many or all…; source: repo:pulumi/docs content/docs/iac/concepts/resources/options/transformations.md)
  • L230 in content/blog/run-your-own-rss-server/index.md "In this post, we've seen how easy it is to run a container as a service connected to an RDS database with Pulumi, and to expose that container securely on…" → ❌ contradicted (framing: claim links to /docs/iac/concepts/resources/#components but that anchor doesn't exist there; the real Components content is at /docs/iac/concepts/components/; evidence: The linked page content/docs/iac/concepts/resources/_index.md has no heading or anchor named "components" — it only contains a "Related topics" list item linking out to the separate page /docs/iac/concepts/components/, which is where the…; source: repo:content/docs/iac/concepts/resources/_index.md)
  • L13 in content/blog/safe-lambda-secrets/index.md "The subject of how to make use of secrets in Lambda Functions comes up a fair bit, and although there seems to be a lot of discussion on where you should…" → ✅ verified (evidence: The linked page content/docs/iac/concepts/config.md exists in the pulumi/docs repo and is the canonical stack configuration documentation, referenced identically ("stack config file"/"stack configuration") throughout dozens of other docs…; source: gh search code --owner pulumi "concepts/config" --repo pulumi/docs)
  • L44 in content/blog/scaling-apps-across-multiple-regions/index.md "A stack is a distinct deployment target within a Pulumi project. Stacks enable you to organize, version, and manage your infrastructure code effectively.…" → ✅ verified (framing: Truncated fetch prevented quoting the exact body text defining stacks, but the page target matches the claim's citation and topic.; evidence: The cited Pulumi docs page on Stacks (https://www.pulumi.com/docs/iac/concepts/stacks/) confirms stacks are the mechanism for organizing distinct deployment targets within a project; the pre-fetched body is truncated to nav content but…; source: https://www.pulumi.com/docs/iac/concepts/stacks/)
  • L24 in content/blog/six-things-about-pulumi-service/index.md "As a reader of this blog, you've probably heard of the Pulumi Service, the default state-management…" → ✅ verified (framing: Product was later renamed from "Pulumi Service" to "Pulumi Cloud"; the alias preserves link validity and the underlying claim (default backend) still holds…; evidence: /product/pulumi-service/ is a registered alias in content/product/_index.md ("aliases: - /product/pulumi-cloud/ - /product/pulumi-service/ ..."), so the link resolves to the current Product page. The state-and-backends doc…; source: repo:content/product/_index.md and repo:content/docs/iac/concepts/state-and-backends.md)
  • L96 in content/blog/six-things-about-pulumi-service/index.md "Notice here that the resources that are part of a component are grouped together. Also…" → ❌ contradicted (framing: Claim links to resources/#components anchor; that content has since moved to a standalone /docs/iac/concepts/components/ page, leaving the cited anchor…; evidence: The cited URL is https://www.pulumi.com/docs/iac/concepts/resources/#components, but the current resources page (content/docs/iac/concepts/resources/_index.md) has no '#components' heading/anchor — its "Related topics" section merely…; source: repo:content/docs/iac/concepts/resources/_index.md and repo:content/docs/iac/concepts/components/_index.md)
  • L49 in content/blog/stack-readme/index.md "There are a lot of operational activities that happen around Pulumi Stacks, but critical information is…" → ✅ verified (evidence: The cited URL resolves (HTTP 200) to Pulumi's official "Stacks" concepts documentation page, which is the correct target for the link text "Pulumi Stacks". The claim itself is just a link reference plus general commentary about tooling…; source: https://www.pulumi.com/docs/iac/concepts/stacks/)
  • L131 in content/blog/testing-in-practice/index.md "The following code sets up the Pulumi stack and S3 bucket with Automation API. It's interesting to note that the tests don't import…" → ✅ verified (evidence: The linked page /docs/iac/concepts/ exists and explains Pulumi stacks: "Programs reside in a project... This command creates an isolated and configurable instance of your program, known as a stack." This supports the blog's use of…; source: repo:content/docs/iac/concepts/_index.md)
  • L544 in content/blog/testing-pulumi-programs-with-jest/index.md "Finally, open index.ts (which should still be empty) and add a couple of lines to import the resources module and export the function URL as a Pulumi…" → ✅ verified (evidence: The file content/docs/iac/concepts/stacks.md contains a section '## Stack outputs {#outputs}' stating: 'A stack can export values as stack outputs. These outputs are shown during an update, can be easily retrieved with the Pulumi CLI…; source: repo:content/docs/iac/concepts/stacks.md)
  • L88 in content/blog/tour-pulumi-equinix-provider/index.md "Now that your cluster is provisioned, you can deploy a workload (or any other Kubernetes or Helm resource) using the [Pulumi Kubernetes…" → ✅ verified (evidence: The Pulumi Kubernetes provider registry page exists at /registry/packages/kubernetes/ and documents that "The Kubernetes provider for Pulumi can be used to provision any resources available in the Kubernetes API," including Helm charts…; source: gh search code --owner pulumi repo:pulumi/registry "kubernetes provider" (themes/default/content/registry/packages/kubernetes/_index.md))
  • L113 in content/blog/tour-pulumi-equinix-provider/index.md "You can then add resources to the cluster by specifying your explicit provider as a [resource option](https://www.pulumi.com/docs/iac/concepts/resources/option…" → ✅ verified (evidence: The linked page content/docs/iac/concepts/resources/options/_index.md is the canonical "Resource options" reference page, which documents the provider resource option used to specify an explicit provider — matching the claim's…; source: repo:content/docs/iac/concepts/resources/options/_index.md)
  • L329 in content/blog/unit-testing-cloud-deployments-with-dotnet/index.md "To learn more about outputs, read this article." → ✅ verified (evidence: content/docs/iac/concepts/stacks.md contains a section '## Stack outputs {#outputs}' which matches the linked path/anchor /docs/iac/concepts/stacks/#outputs, describing stack outputs in detail.; source: repo:content/docs/iac/concepts/stacks.md (line 210: "## Stack outputs {#outputs}"))
  • L34 in content/docs/deployments/operations/permissions.md "- If your organization has default stack permissions set to NONE, then any deployment created by a git push or a pull request will not be able to access…" → ✅ verified (evidence: The link target resolves correctly: content/docs/iac/concepts/stacks.md has a "## Stack references {#stackreferences}" section defining StackReference, matching the anchor #stackreferences in the cited URL. The permissions.md page's own…; source: repo:content/docs/iac/concepts/stacks.md (line 550: "## Stack references {#stackreferences}"))
  • L146-150 in content/docs/iac/concepts/inputs-outputs/apply.md "This function (Output[T].str in Python) may throw in a future version of Pulumi." → ✅ verified (evidence: Found the exact string in pulumi/pulumi sdk/python/lib/pulumi/output.py: msg += "\nThis function may throw in a future version of Pulumi.", appended to the __str__ "not supported" diagnostic message, matching the doc's quoted CLI…; source: gh search code "may throw in a future version" --owner pulumi (pulumi/pulumi:sdk/python/lib/pulumi/output.py))
  • L146-149 in content/docs/iac/concepts/inputs-outputs/apply.md "The Pulumi documentation page at https://www.pulumi.com/docs/iac/concepts/inputs-outputs/ provides more details on converting an Output[T] to an Output[str]…" → 🤷 unverifiable (evidence: The pre-fetched page returned HTTP 200 but the truncated body only shows generic Pulumi navigation/marketing content; it does not contain the specific text about converting Output[T] to Output[str] via apply() with an f-string example.…; source: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/)
  • L173-176 in content/docs/iac/concepts/inputs-outputs/apply.md "The Pulumi documentation page at https://www.pulumi.com/docs/iac/concepts/inputs-outputs/ provides more details on converting an Output to an…" → 🤷 unverifiable (evidence: The pre-fetched page body is truncated to generic navigation/header content and does not include the specific section discussing Output, Apply, or Output.Format examples, so the claim's specific details cannot be confirmed from the…; source: https://www.pulumi.com/docs/iac/concepts/inputs-outputs/)
  • L176-177 in content/docs/iac/concepts/inputs-outputs/apply.md "The relevant string-conversion function may throw in a future version of Pulumi (referring to the .NET Output ToString-equivalent behavior)." → ✅ verified (evidence: pulumi/pulumi-dotnet sdk/Pulumi/Core/Output.cs contains: return string.Join(Environment.NewLine, message, "This function may throw in a future version of Pulumi."); alongside the "Calling [ToString] on an [Output] is not supported."…; source: gh search code --owner pulumi "This function may throw in a future version" -> pulumi/pulumi-dotnet:sdk/Pulumi/Core/Output.cs)
  • L476-477 in content/docs/iac/concepts/inputs-outputs/apply.md "Outputs that return to the engine as strings cannot be used directly in operations such as string concatenation until the output value has returned to…" → ➖ not-a-claim (evidence: The line is from content/docs/iac/concepts/inputs-outputs/apply.md itself, linking to its own page (/docs/iac/concepts/inputs-outputs/apply/) as the reference for using apply — a self-referential link within the same document, not a…; source: repo:content/docs/iac/concepts/inputs-outputs/apply.md)
  • L479-480 in content/docs/iac/concepts/inputs-outputs/apply.md "For the common case of building a string from output values, Pulumi's output helpers, documented at /docs/iac/concepts/inputs-outputs/helpers/#string-interpola…" → ✅ verified (evidence: The target page content/docs/iac/concepts/inputs-outputs/helpers.md exists with a "## String interpolation" heading (anchor #string-interpolation) stating: "Pulumi's string interpolation helpers let you construct a string from one or…; source: repo:content/docs/iac/concepts/inputs-outputs/helpers.md)
  • L583-584 in content/docs/iac/concepts/inputs-outputs/apply.md "A consolidated reference of all JSON helpers is available at /docs/iac/concepts/inputs-outputs/helpers/#json-helpers." → ✅ verified (evidence: The helpers.md page contains a section heading "## JSON helpers" (line 90), which produces the anchor #json-helpers referenced by the claim's link /docs/iac/concepts/inputs-outputs/helpers/#json-helpers, and the apply.md source line…; source: repo:content/docs/iac/concepts/inputs-outputs/helpers.md and repo:content/docs/iac/concepts/inputs-outputs/apply.md)
  • L583-584 in content/docs/iac/concepts/inputs-outputs/apply.md "The Pulumi SDK provides helper methods in most languages to make it easier to work with Pulumi outputs and JSON documents." → ✅ verified (evidence: The linked helpers.md#json-helpers page documents JSON stringify/parse helpers for TypeScript (pulumi.jsonStringify()/jsonParse()), Python (json_dumps()/json_loads()), Go (JSONMarshal()), C#…; source: repo:content/docs/iac/concepts/inputs-outputs/helpers.md)
  • L239 in content/docs/iac/concepts/projects/_index.md "For more information about configuration and how to manage these files on the command line and programmatically, refer to the…" → ✅ verified (evidence: Both linked pages exist in the docs repo: content/docs/iac/concepts/config.md (title: "Configuration") and content/docs/iac/concepts/secrets/_index.md (title: "Secrets Handling"), confirming the cross-references in the sentence resolve…; source: repo:content/docs/iac/concepts/config.md and repo:content/docs/iac/concepts/secrets/_index.md)
  • L495-498 in content/docs/iac/guides/migration/import/_index.md "The logicalName field is a string type, is not required (optional), and represents the logical name of the resource; the original name property is used…" → ✅ verified (evidence: The Pulumi CLI source (pkg/cmd/pulumi/operations/import.go) defines LogicalName string \json:"logicalName,omitempty"`with the comment "LogicalName is the resources Pulumi name (i.e. the first argument tonew Resource`)" …; source: gh api repos/pulumi/pulumi/contents/pkg/cmd/pulumi/operations/import.go)
  • L507 in content/docs/iac/guides/migration/import/_index.md "For new work, CLI-first import or program-first (bulk) import is preferred over the import resource option." → ✅ verified (evidence: The Pulumi docs page on importing existing cloud infrastructure states: "It's documented here for completeness and because existing programs still use it, but for new work prefer CLI-first import or program-first (bulk) import, described…; source: https://www.pulumi.com/docs/iac/guides/migration/import/)
  • L507 in content/docs/iac/guides/migration/import/_index.md "Before pulumi preview --import-file existed, the import resource option was the recommended way to import multiple resources across multiple stacks or…" → ✅ verified (evidence: Changelog confirms --import-file was added to pulumi preview in v3.96.0 ("[cli] Add --import-file to pulumi preview to generate a placeholder import file..."), well after the import resource option had long existed as the…; source: gh search code --owner pulumi "import-file" (pulumi/pulumi:changelog/v3.96.0.md); repo:content/docs/iac/guides/migration/import/_index.md)
  • L509 in content/docs/iac/guides/migration/import/_index.md "Code-based import (using the import resource option) does not imperatively modify the state of the current stack, unlike running pulumi import with the…" → ✅ verified (evidence: The doc's own surrounding text (line 507-509) explains: "Before pulumi preview --import-file existed, the import resource option was the recommended way to import... Pulumi imported the resource on the next update" and "running…; source: repo:content/docs/iac/guides/migration/import/_index.md (lines 505-509))
  • L625 in content/docs/iac/guides/migration/import/_index.md "After successfully importing a resource, you can delete the import option, re-run pulumi up, and all subsequent operations will then behave as though…" → ✅ verified (evidence: The doc itself states at line 625: "After successfully importing a resource, you can delete the import option if you like, then re-run pulumi up, and all subsequent operations will now behave as though Pulumi had provisioned the…; source: repo:content/docs/iac/guides/migration/import/_index.md (line 625))
  • L627 in content/docs/iac/guides/migration/import/_index.md "The retainOnDelete resource option is documented at /docs/iac/concepts/resources/options/protect/." → ❌ contradicted (framing: The link text names retainOnDelete but points to the protect option's reference page — the two are distinct, separately documented resource options.; evidence: The site's resource-options data file (data/resource_options.yaml) defines retainOnDelete as its own distinct option ("Retain the resource in the cloud provider when Pulumi deletes it"), separate from protect ("Prevent accidental…; source: repo:data/resource_options.yaml (retainOnDelete and protect entries); repo:layouts/shortcodes/resource-options-table.html)
  • L627 in content/docs/iac/guides/migration/import/_index.md "Once an imported resource has been brought under management with Pulumi, destroying its containing stack will delete the imported resource as well, in the…" → ✅ verified (evidence: The docs' own resource_options.yaml (canonical option reference) defines retainOnDelete: "Retain the resource in the cloud provider when Pulumi deletes it," confirming that without this option, destroying the stack deletes the imported…; source: repo:data/resource_options.yaml (retainOnDelete entry))
  • L675 in content/docs/iac/guides/migration/import/_index.md "To have subsequent updates preserve a specific name for an auto-named resource (for example, to handle naming conflicts across multiple stacks), you must…" → ✅ verified (evidence: Sibling doc content/docs/iac/concepts/resources/options/import.md states: "Unless you explicitly specify a name, Pulumi will auto-generate one... To fix this problem, explicitly specify the resource's name or disable auto-naming." This…; source: repo:content/docs/iac/concepts/resources/options/import.md, repo:content/docs/iac/concepts/resources/names.md)
  • L675 in content/docs/iac/guides/migration/import/_index.md "Auto-named resources import cleanly because Pulumi reads the imported resource's actual name from the cloud provider and uses it before the update checks…" → ❌ contradicted (framing: Link target names the wrong path (/docs/iac/concepts/resources/#autonaming) for an anchor that exists only at /docs/iac/concepts/resources/names/#autonaming.; evidence: The cited link target /docs/iac/concepts/resources/#autonaming does not contain an #autonaming anchor — that page's content (content/docs/iac/concepts/resources/_index.md) has no such heading. The actual autonaming section with heading…; source: repo:content/docs/iac/concepts/resources/_index.md and repo:content/docs/iac/concepts/resources/names.md)
  • L337 in content/docs/iac/guides/testing/unit.md "If your program uses StackReference to read outputs from another stack, you need to handle them in your mocks.…" → ✅ verified (evidence: The target page content/docs/iac/concepts/stacks.md contains a heading "## Stack references {#stackreferences}" which matches the anchor /docs/iac/concepts/stacks/#stackreferences, and describes StackReference exactly as the claim…; source: repo:content/docs/iac/concepts/stacks.md)
  • L810 in content/docs/iac/guides/testing/unit.md "- Because all Pulumi resource properties are outputs—since many of them are computed asynchronously—we need…" → ✅ verified (evidence: The linked page states: "Outputs represent asynchronous values... Because outputs represent asynchronous values, they must be handled differently... The Pulumi SDK provides these methods for accessing the plain values of outputs once…; source: content/docs/iac/concepts/inputs-outputs/_index.md)
  • L78 in content/docs/iac/languages-sdks/yaml/yaml-component-reference.md "The value of outputs is an object whose keys are the logical names of the outputs that are…" → ✅ verified (framing: The stacks page describes general stack outputs; the YAML component reference applies the same concept narrowly to component outputs, which is a valid…; evidence: The stacks concepts page has an anchored section ## Stack outputs {#outputs} stating "A stack can export values as stack outputs... The value of a stack export can be a regular value, an Output... or a Promise" — matching the linked…; source: repo:content/docs/iac/concepts/stacks.md (line 210: "## Stack outputs {#outputs}"))
  • L274 in content/docs/iac/languages-sdks/yaml/yaml-language-reference.md "The value of outputs is an object whose keys are the logical names of the outputs that are…" → ✅ verified (evidence: The stacks concept page has a "Stack outputs {#outputs}" section stating "A stack can export values as stack outputs. These outputs are shown during an update, can be easily retrieved with the Pulumi CLI..." and links to `pulumi stack…; source: repo:content/docs/iac/concepts/stacks.md (line 210-212, 282) and repo:content/docs/iac/cli/commands/pulumi_stack_output.md)
  • L261 in content/tutorials/building-with-pulumi/secrets/index.md "To learn more about Pulumi secrets, see the secrets documentation." → ✅ verified (evidence: The page at content/docs/iac/concepts/secrets/_index.md exists (title "Secrets Handling | Pulumi Concepts") and provides a full overview of Pulumi's secrets handling, matching the link target /docs/iac/concepts/secrets/ and the claim's…; source: repo:content/docs/iac/concepts/secrets/_index.md)
  • L152 in content/tutorials/creating-resources-aws/index.md "All resources have a required name argument. Each resource has both a [logical…" → ✅ verified (evidence: The pulumi/docs page content/docs/iac/concepts/resources/names.md exists at that URL and contains headings ## Logical Names {#logicalname} and ## Physical Names and Auto-Naming {#autonaming}, along with the definitions: "Logical name…; source: gh api repos/pulumi/docs/contents/content/docs/iac/concepts/resources/names.md)
  • L192 in content/tutorials/creating-resources-azure/index.md "All resources have a required name argument. Each resource has both a [logical…" → ✅ verified (evidence: The target page content/docs/iac/concepts/resources/names.md exists and contains both anchors cited: ## Logical Names {#logicalname} ("Every resource managed by Pulumi has a logical name that you specify as an argument to its…; source: repo:content/docs/iac/concepts/resources/names.md)
  • L213 in content/tutorials/creating-resources-gcp/index.md "All resources have a required name argument. Each resource has both a [logical…" → ✅ verified (evidence: The target page content/docs/iac/concepts/resources/names.md exists and contains both anchors used in the claim: ## Logical Names {#logicalname} and ## Physical Names and Auto-Naming {#autonaming}, matching the linked concepts of…; source: repo:content/docs/iac/concepts/resources/names.md)
  • L249 in content/tutorials/creating-resources-kubernetes/index.md "All resources have a required name argument. Each resource has both a [logical…" → ✅ verified (evidence: The Names doc page confirms both anchors: ## Logical Names {#logicalname} defines the logical name concept, and the physical name section (anchored {#autonaming}, i.e. the truncated #a... in the claim) states "A resource's logical…; source: repo:content/docs/iac/concepts/resources/names.md)
  • L74 in content/tutorials/inspecting-infrastructure/index.md "The pulumi stack command is used to provide a quick overview of the current stack's status and configuration. Running…" → ✅ verified (evidence: The auto-generated CLI reference page at /docs/iac/cli/commands/pulumi_stack/ confirms pulumi stack "Manage[s] stacks and view[s] stack state" including resources and outputs, matching the claim's description of a quick overview of…; source: repo:content/docs/iac/cli/commands/pulumi_stack.md)
  • L150-152 in content/tutorials/pulumi-fundamentals/create-a-pulumi-project/index.md "The glossary definition of 'project' is located at https://www.pulumi.com/docs/reference/glossary/#project." → ➖ not-a-claim (evidence: Lines 150-152 are HTML comments (<!-- [^1]: [project](...) -->) in the markdown source, meaning this footnote/glossary link is commented out and not rendered to readers at all — it is not a live assertion being published.; source: repo:content/tutorials/pulumi-fundamentals/create-a-pulumi-project/index.md)
  • L244 in content/tutorials/stack-outputs-refs-aws/index.md "The Pulumi documentation page at /docs/iac/concepts/stacks/#outputs describes how to export values of resource properties from a Pulumi program." → ✅ verified (evidence: The pulumi/docs source file content/docs/iac/concepts/stacks.md contains a section header ## Stack outputs {#outputs} immediately followed by "A stack can export values as stack outputs. These outputs are shown during an update, can be…; source: gh api repos/pulumi/docs/contents/content/docs/iac/concepts/stacks.md)
  • L432 in content/tutorials/stack-outputs-refs-aws/index.md "The Pulumi documentation page at /docs/iac/concepts/stacks/#outputs describes the pulumi stack output command." → ✅ verified (evidence: The stacks docs page has a "## Stack outputs {#outputs}" section (matching the #outputs anchor) which states: "From the CLI, you can then use pulumi stack output url to get the value..." and further discusses `pulumi stack output…; source: repo:content/docs/iac/concepts/stacks.md (section anchored #outputs))
  • L488 in content/tutorials/stack-outputs-refs-aws/index.md "A fully qualified Pulumi stack reference name is comprised of the organization, project, and stack names in the format <organization>/<project>/<stack>." → ✅ verified (evidence: The cited doc page content/docs/iac/concepts/stacks.md states: "The StackReference constructor takes as input a string of the form <organization>/<project>/<stack>, and lets you access the outputs of that stack." This exactly matches…; source: repo:content/docs/iac/concepts/stacks.md (line 833))
  • L767-768 in content/tutorials/stack-outputs-refs-aws/index.md "Stack outputs and references are documented at /docs/iac/concepts/stacks/#stackreferences in the Pulumi documentation." → ✅ verified (evidence: The same anchor /docs/iac/concepts/stacks/#stackreferences is used earlier in this same tutorial (line 488: "This can be done using Pulumi's Stack Reference functionality"), confirming it…; source: repo:content/tutorials/stack-outputs-refs-aws/index.md (line 488, 767))
  • L346 in content/tutorials/stack-outputs-refs-azure/index.md "A fully qualified stack name in Pulumi is comprised of the organization, project, and stack names in the format //." → ✅ verified (evidence: The claim matches Pulumi's documented StackReference convention: fully qualified stack names are structured as //, as shown in the same doc's own example (acmecorp/infra/dev) and consistent with Pulumi's…; source: content/tutorials/stack-outputs-refs-azure/index.md (line 346, with cross-references to /docs/pulumi-cloud/organizations/, /docs/iac/concepts/projects/, /docs/iac/concepts/stacks/))
  • L346 in content/tutorials/stack-outputs-refs-azure/index.md "Pulumi's Stack Reference functionality is documented at /docs/iac/concepts/stacks/#stackreferences." → ✅ verified (evidence: content/docs/iac/concepts/stacks.md contains the heading "## Stack references {#stackreferences}" which renders at the URL /docs/iac/concepts/stacks/#stackreferences, and documents the StackReference type and functionality exactly as…; source: repo:content/docs/iac/concepts/stacks.md)
  • L828-829 in content/tutorials/stack-outputs-refs-azure/index.md "Pulumi's documentation on stack outputs and references is located at /docs/iac/concepts/stacks/#stackreferences." → ✅ verified (evidence: content/docs/iac/concepts/stacks.md contains the heading "## Stack references {#stackreferences}" which corresponds exactly to the cited URL /docs/iac/concepts/stacks/#stackreferences, documenting StackReference usage.; source: repo:content/docs/iac/concepts/stacks.md (line 550: "## Stack references {#stackreferences}"))
  • L341 in content/tutorials/stack-outputs-refs-gcp/index.md "A fully qualified stack name is comprised of the organization, project, and stack names in the format //." → ✅ verified (evidence: The Stacks concept doc, which the tutorial links to, states: "Stack names must be fully qualified, including the organization, project, and stack name components, in the format <organization>/<project>/<stack>." This exactly matches…; source: repo:content/docs/iac/concepts/stacks.md (line 621))
  • L341 in content/tutorials/stack-outputs-refs-gcp/index.md "Pulumi's Stack Reference functionality is documented at /docs/iac/concepts/stacks/#stackreferences." → ✅ verified (evidence: content/docs/iac/concepts/stacks.md contains a section "## Stack references {#stackreferences}" documenting StackReference functionality, confirming the URL /docs/iac/concepts/stacks/#stackreferences correctly points to Pulumi's Stack…; source: repo:content/docs/iac/concepts/stacks.md (line 550: "## Stack references {#stackreferences}"))
  • L820-821 in content/tutorials/stack-outputs-refs-gcp/index.md "Stack outputs and references are documented at /docs/iac/concepts/stacks/#stackreferences in the Pulumi documentation." → ✅ verified (evidence: The file content/docs/iac/concepts/stacks.md contains the heading "## Stack references {#stackreferences}" which describes StackReference usage for accessing outputs of one stack from another — matching the URL…; source: repo:content/docs/iac/concepts/stacks.md)
  • L654-703 in content/blog/applying-attribute-based-access-controls-to-aws-lambda-functions/index.md "new aws.iam.RolePolicyAttachment( deletePolicy, { policyArn: deletePolicy.arn, role: role, }, { parent: deletePolicy })" → 🚩 flagged (readthrough: missing-step)
  • L27 in content/blog/faster-secrets-management/index.md "Pulumi also offers Pulumi ESC (Environments, Secrets, and Configuration), which provides centralized secrets management with hie" → 🚩 flagged (readthrough: self-redundancy)
  • L34 in content/blog/keep-your-secrets-secure-by-default/index.md "For smaller organizations, the secret storage built into Pulumi is enough." → 🚩 flagged (style-edit readback: hedge deletion — 483d4d1 rewrote "is usually sufficient" to "is enough" in response to a sufficient/usually linter pair. "Usually" was load-bearing: the paragraph's own next sentence concedes that larger organizations already run a centralized secret manager, so the original sentence was scoped, not padded. Source: git diff 420d3e8..483d4d1 -- content/blog/keep-your-secrets-secure-by-default/index.md; content/blog/keep-your-secrets-secure-by-default/index.md:34)
  • L284 in content/blog/ai-slack-bot-adding-data-to-pinecone-using-s3-embedchain-and-pulumi-on-aws/index.md "This is an important core feature of Pulumi that happens [by nesting Outputs]…" → 🚩 flagged (style-edit readback: same shape, milder — "largely happens" became "happens", removing a qualifier on a mechanism that is in fact one of several. Source: git diff 420d3e8..483d4d1; content/blog/ai-slack-bot-adding-data-to-pinecone-using-s3-embedchain-and-pulumi-on-aws/index.md:284)
  • L82 in content/blog/iac-best-practices-understanding-code-organization-stacks/index.md "Aside from the cloud resources created by the Pulumi program, stacks are lightweight to create or delete." → 🚩 flagged (style-edit readback: "and simple" was dropped to clear a simple difficulty-qualifier warning, which re-binds the standalone predicate adjective "lightweight" to the infinitive "to create or delete". Source: git diff 420d3e8..483d4d1; content/blog/iac-best-practices-understanding-code-organization-stacks/index.md:82)
  • L293, L331 in content/blog/next-level-iac-pulumi-runtime-logic/index.md "registers a function to be invoked before the program exits" → 🚩 flagged (style-edit readback: the deleted "just" was temporal, not a difficulty qualifier — process.on("beforeExit") and atexit.register() both fire immediately before exit, which is the point of the sentence. Cross-checked against the two verified claim records above, both of which quote "just before the program exits" from the Node.js and Python docs. Source: https://nodejs.org/api/process.html#event-beforeexit; https://docs.python.org/3/library/atexit.html)
  • L48 in content/blog/six-things-about-pulumi-service/index.md "it will store some information about the local machine state, such the current git SHA" → 🚩 flagged (spelling-grammar: missing "as" after "such". Pre-existing, but 483d4d1 rewrote the second half of this same line for the rename, so it is in the diff. Source: content/blog/six-things-about-pulumi-service/index.md:48)

📊 Editorial balance

Single-subject post; balance check N/A.

🚨 Outstanding in this PR

None, and none introduced by 58a9840. Outstanding has been empty since 483d4d1.

⚠️ Low-confidence

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

  • [L47] content/blog/stack-readme/index.md — the partial-rename effect that drove last round's Outstanding item, still open in two older posts. stack-readme L41, L47, L57, L60, L227, and L233 say "Pulumi Service" while L49 says "Pulumi Cloud console" twice; content/blog/keep-your-secrets-secure-by-default/index.md has the same pair — L20 now says "Pulumi Cloud", L24 still says "self-hosted Pulumi Service". Neither pair sits in adjacent sentences the way the six-things one did, and AGENTS.md treats /content/blog/ as historical, so finishing the rename across two old posts is a defensible thing to decline. Flagged so the call is deliberate rather than a side effect of which lines Vale happened to flag. Re-grepped at 58a9840 and unchanged. Note: this is the one non-link ⚠️ item the fix-push mention didn't account for — it isn't a "cited page returned only navigation chrome" finding, so declining it is a separate call from declining those.

  • [L132] content/blog/aws-serverless-analytics/index.md"Running 'pulumi up' for this example creates 45 AWS resources and lists the stack outputs to the console." — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L396] content/blog/command-provider-ga/index.md"- The CopyFile resource is superseded by the new CopyToRemote resource. It can copy whole…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L21] content/blog/faster-secrets-management/index.md"Pulumi now handles secrets more efficiently through optimized encryption and decryption processes…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L85] content/blog/infrastructure-testing-concepts/index.md"In cloud engineering, an infrastructure integration test uses infrastructure deployed in an [ephemeral environment](https://about.gitlab.com/blog/kubecon-na-20…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L20] content/blog/keep-your-secrets-secure-by-default/index.md"If you use a self-managed backend like AWS S3 or Google Cloud Storage, secrets are protected by a passphrase that you choose when you start a new stack with…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L34] content/blog/multicloud-with-kubernetes-and-pulumi/index.md"The Pulumi documentation page at https://www.pulumi.com/docs/iac/concepts/components/ describes a Component Resource as an abstraction on top of other Pulumi…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L119] content/blog/next-level-iac-pulumi-runtime-logic/index.md"Running processes synchronously means they complete before Pulumi starts registering resources, as documented at https://www.pulumi.com/docs/iac/guides/basics/…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L204] content/blog/p3-some-assembly-required/index.md"In Pulumi, a component resource, as documented at https://www.pulumi.com/docs/iac/concepts/components/, is something that developers can import in their…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L65] content/blog/pulumi-and-localstack/index.md"The big thing to remember is that a Pulumi 'output' value [is not known until after the infrastructure has been fully provisioned](https://www.pulumi.com/docs/…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L146] content/blog/pulumi-release-notes-85/index.md"Pulumi SDKs ship helper serialization and deserialization functions that natively understand the type Output, streamlining the combination of JSON…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L146-149] content/docs/iac/concepts/inputs-outputs/apply.md"The Pulumi documentation page at https://www.pulumi.com/docs/iac/concepts/inputs-outputs/ provides more details on converting an Output[T] to an Output[str]…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

  • [L173-176] content/docs/iac/concepts/inputs-outputs/apply.md"The Pulumi documentation page at https://www.pulumi.com/docs/iac/concepts/inputs-outputs/ provides more details on converting an Output to an…" — verdict: unverifiable — the cited page returned only its navigation chrome, so the supporting passage couldn't be read back. The destination page does exist and the link resolves; this is a limitation of the check, not evidence of a wrong link. Nothing here blocks the merge. Author question: this PR only rewrote the URL path — if you happen to know the claim itself has gone stale, that's worth a follow-up, but it's out of scope for a link sweep.

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/six-things-about-pulumi-service/index.md — 6 (2 filler, 1 wordiness, 2 weasel word, 1 difficulty qualifier)
  • line 24: [style] weasel word — 'several' is a weasel word!
  • line 26: [style] weasel word — 'fairly' is a weasel word! ✏️
  • line 26: [style] difficulty qualifier — Avoid difficulty qualifier 'easy' -- it judges difficulty for the reader (STYLE-GUIDE.md §Inclusive Language). ✏️
  • line 26: [style] filler — Don't start a sentence with 'So '. ✏️
  • line 48: [style] wordiness — 'It is' is too wordy. ✏️
  • line 114: [style] filler — Don't start a sentence with 'There are'. ✏️

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

Important

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

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

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

📋 Triaged verifier findings

I double-checked these and realized they weren't real findings — click to expand
  • [L250] content/blog/advanced-aws-networking-part-1/index.md"You need to create both sets of routes within an apply because of the need to access the raw values of each of the subnet ids."Spurious: the framing comparison treated an ordinary specific application of apply as drift. The post describes one concrete case of the general mechanism the linked page documents, which is normal writing, not a shift in meaning.

  • [L104] content/blog/architecture-as-code-kubernetes/index.md"Deploying modern applications is complex. Any one of the architectures we've examined -- virtual machines, microservices, serverless and Kubernetes …"Mis-sourced: the cited Medium article returned HTTP 403 with an empty body, which is Medium's anti-bot response rather than a dead link. The claim is also a general statement about deployment complexity, not something that page was cited to prove.

  • [L130] content/blog/aws-serverless-analytics/index.md"The Pulumi serverless streaming input architecture implicitly creates an arrival-time partition scheme with the key 'inserted_at'."Mis-sourced: the check was run against the AWS Athena partitioning docs, which cover generic partitioning concepts and never mention Pulumi or an inserted_at key. The right source would be the post's own example code.

  • [L101] content/blog/mlops-huggingface-llm-aws-sagemaker-python/index.md"While creating a new project from the sagemaker-aws-python Pulumi template, you will be prompted for a [project](https://www.pulumi.com/docs/iac/concepts/pro…"Mis-sourced: the wrong URL was followed. The claim's primary target is the projects concept page, but the stacks page was fetched and compared instead.

💡 Pre-existing issues in touched files (optional)

  • Dead #fragments outside the resources/ family — a widened anchor sweep over the diff turned up a second group of preserved fragments that don't resolve on their (correct) destination page: inputs-outputs/#apply (advanced-aws-networking-part-1 L250, managing-github-with-pulumi L266, redis-cloud-provider L188, testing-pulumi-programs-with-jest L282), inputs-outputs/#inputs and #outputs (next-level-iac-briding-the-declarative-gap L184–185, next-level-iac-breakpoint-debugging L352–353, content/tutorials/inspecting-infrastructure/index.md L74), inputs-outputs/#inputs-and-outputs (infrastructure-testing-concepts L85), state-and-backends/#backends (keep-your-secrets-secure-by-default L20), and config/#secrets (managing-aws-credentials-on-cicd-part-3 L270, simple-serverless-programming-with-google-cloud-functions-and-pulumi L179). Pre-existing: the old /docs/concepts/… URLs aliased to these same pages, so the fragments were already dead before the rewrite, and they appear on pages this PR never touches (content/docs/iac/get-started/{aws,azure,gcp}/modify-program.md, content/docs/iac/concepts/inputs-outputs/apply.md L18). Unlike the resources/#… family these fail softly — the reader lands on the right page, just at the top, with no second hop — which is why this is optional rather than Outstanding. If you want them anyway, the mapping is #apply/docs/iac/concepts/inputs-outputs/apply/, #inputs#working-with-inputs, #outputs#working-with-outputs, #inputs-and-outputs#what-are-inputs-and-outputs, state-and-backends/#backends#using-a-diy-backend, and config/#secrets/docs/iac/concepts/secrets/#secrets.

  • [L165] content/blog/jamstack-with-pulumi/index.md"1. Install dependencies for our Pulumi program."Pre-existing: the link text promises dependency-install instructions but the target is a conceptual overview of how Pulumi works. That mismatch is unchanged by this PR — the old /docs/concepts/how-pulumi-works/ target was equally off-topic, and the diff only added the iac/guides/basics/ path segment. Worth a separate fix pointing at a getting-started or install page.

  • [L654-703] content/blog/applying-attribute-based-access-controls-to-aws-lambda-functions/index.md — a readthrough check flagged a missing step around the RolePolicyAttachment code block. Pre-existing: this PR touches only the link on L560; the code walkthrough is untouched.

  • [L27] content/blog/faster-secrets-management/index.md — a readthrough check flagged the Pulumi ESC paragraph as restating what the surrounding text already says. Pre-existing: this PR touches only L21; L27 is unchanged.

✅ Resolved since last review

  • [L34] content/blog/keep-your-secrets-secure-by-default/index.md — the usually/sufficient style edit flattened a scoped recommendation into a categorical one; same shape one notch milder at ai-slack-bot-adding-data-to-pinecone-using-s3-embedchain-and-pulumi-on-aws L284 (largely happenshappens). (resolved in 58a9840 — now "is often all you need" and "often happens by nesting Outputs", the exact rewrites suggested. Both hedges are back, neither flagged word is.)

  • [L82] content/blog/iac-best-practices-understanding-code-organization-stacks/index.md — dropping "and simple" left "lightweight" bound to an infinitive ("lightweight to create or delete"). (resolved in 58a9840 — now "stacks are lightweight, and creating or deleting one is quick", which restores the coordinating clause without re-introducing simple.)

  • [L293, L331] content/blog/next-level-iac-pulumi-runtime-logic/index.md — the removed "just" was temporal, not a difficulty qualifier. (resolved in 58a9840 — both lines now read "immediately before the program exits", matching the process.on("beforeExit") and atexit.register() semantics the section describes.)

  • [L48] content/blog/six-things-about-pulumi-service/index.md — "such the current git SHA", missing "as". (resolved in 58a9840 — now "such as the current git SHA". Pre-existing typo taken while the line was already being touched.)

  • [L26] content/blog/six-things-about-pulumi-service/index.md — partial Pulumi ServicePulumi Cloud rename: adjacent paragraphs disagreed, and L114 still carried the /product/pulumi-service/ alias hop. (resolved in 483d4d1 — L26, L44, L48, L68, L82, and L106 all renamed, and L114 repointed to /product/. Verified by grepping the whole file: the only surviving "Pulumi Service" strings are in title, meta_desc, and summary, which the previous round explicitly scoped out. No /product/pulumi-service/ reference remains.)

  • [L105] content/blog/architecture-as-code-serverless/index.md#components anchor on the resources page. (resolved in 420d3e8 — retargeted to /docs/iac/concepts/components/)

  • [L313] content/blog/controlling-aws-costs-with-lambda-and-pulumi/index.md#explicit-provider-configuration anchor. (resolved in 420d3e8 — retargeted to /docs/iac/concepts/providers/)

  • [L52-53] content/blog/migrating-my-infrastructure-from-terraform-to-pulumi/index.md#components and #autonaming, plus the #urns link on L153. (resolved in 420d3e8 — all three retargeted; resources/names/#autonaming and resources/names/#urns both verified as {#…} heading ids in content/docs/iac/concepts/resources/names.md)

  • [L180-187] content/blog/next-level-iac-briding-the-declarative-gap/index.md — dead #declarative-and-imperative-approach fragment. (resolved in 420d3e8 — fragment dropped, link now points at the page root. The two neighbours flagged for checking are fine: how-pulumi-works.md still carries ### Deployment engine and ### Resource providers.)

  • [L27] content/blog/refactoring-iac/index.md#components used twice on one line, the second one for the parent option. (resolved in 420d3e8 — first link → /docs/iac/concepts/components/, second → /docs/iac/concepts/resources/options/parent/)

  • [L230] content/blog/run-your-own-rss-server/index.md#components anchor. (resolved in 420d3e8)

  • [L96] content/blog/six-things-about-pulumi-service/index.md#components anchor. (resolved in 420d3e8)

  • [L627] content/docs/iac/guides/migration/import/_index.mdretainOnDelete link pointed at the protect reference page. (resolved in 420d3e8 — now /docs/iac/concepts/resources/options/retainondelete/; the lowercase URL is correct, matching how protecting-against-undesired-changes.md and hcl-language-reference.md link the same page)

  • [L675] content/docs/iac/guides/migration/import/_index.md#autonaming on a page that has no such anchor. (resolved in 420d3e8 — now the full canonical /docs/iac/concepts/resources/names/#autonaming)

  • [L29] content/blog/full-access-to-helm-features-through-new-helm-release-resource-for-kubernetes/index.md#components anchor. (resolved in 420d3e8)

  • [L20] content/blog/keep-your-secrets-secure-by-default/index.md — [style-blocker] deprecated product name 'Pulumi Service' (×3 on the line). (resolved in 420d3e8 — all three now "Pulumi Cloud"; the self-hosted link also moved to /docs/administration/self-hosting/, which exists)

  • [L24] content/blog/six-things-about-pulumi-service/index.md — [style-blocker] deprecated product name 'Pulumi Service'. (resolved in 420d3e8; the rest of the file followed in 483d4d1)

  • [L49] content/blog/stack-readme/index.md — [style-blocker] deprecated product name 'Pulumi Service' (×2 on the line). (resolved in 420d3e8)

  • Anchor-sweep items named in the mapping table but not individually bulleted#urns, #dependson, #additionalsecretoutputs, #transformations. (resolved in 420d3e8pulumi-release-notes-m60 L54 and pulumi-release-notes-m64 L36 → options/dependson/, managing-aws-credentials-on-cicd-part-3 L287 → options/additionalsecretoutputs/, full-coverage-of-azure-resources-with-azure-native L199 → options/transformations/, pulumi-3-0 L64 and automation-api-as-platform L26 → /docs/iac/concepts/components/. No /docs/iac/concepts/resources/#… anchor remains anywhere in the diff.)

📜 Review history

  • 2026-08-22T13:01:51Z — Path rewrites are correct, but ~a dozen touched links kept #fragment anchors whose sections have moved off the resources page, so they still take a client-side redirect hop; two docs links (retainOnDelete, #autonaming) point at the wrong page outright. (6046be5)
  • 2026-08-24T21:12:24Z — re-reviewed after fix push (1 new commit, 420d3e8). All 16 outstanding findings resolved and moved to ✅, including the four anchors the mapping table named but no bullet listed. Every retargeted path re-verified against the working tree. One new Outstanding item: the Pulumi ServicePulumi Cloud rename in six-things-about-pulumi-service was applied per-flagged-line, leaving adjacent paragraphs disagreeing and an alias-hop link at L114. One new ⚠️ item (same partial rename, milder, in stack-readme and keep-your-secrets-secure-by-default) and one new 💡 item (a second dead-fragment family — inputs-outputs/#apply, #inputs, #outputs, state-and-backends/#backends, config/#secrets — that predates this PR and also appears on untouched pages). Requested by @CamSoper.
  • 2026-08-24T21:12:24Z — @CamSoper noted for future runs that this repo expects all findings addressed, blockers and low-confidence alike, and style suggestions accepted unless they're bad; and that a review from pulumi/docs should be requested only once the PR carries review:no-blockers, review:trivial, or review:frontmatter-only. Recorded here rather than acted on — it's guidance to the PR author (@workprentice), and it's now in AGENTS.md on master, so it will be in scope for future runs on their own. 🍪 received with thanks.
  • 2026-08-24T21:52:16Z — re-reviewed after fix push (1 new commit, 483d4d1). Requested by @workprentice. Outstanding is now empty. The rename finding is resolved and moved to ✅: grep -n "Pulumi Service\|pulumi-service/" content/blog/six-things-about-pulumi-service/index.md returns only lines 2, 5, and 7 — title, meta_desc, and summary — which the previous round explicitly said could stay, and /product/pulumi-service/ is gone from the file. The stack-readme / keep-your-secrets-secure-by-default ⚠️ item is unchanged and still open (both files still mix the two names); it was not mentioned in the fix push either way, so it stays flagged rather than silently dropped. The 12 unverifiable-claim ⚠️ items are unaffected by this push — none of their cited sources changed — and are carried forward as-is.
  • 2026-08-24T21:52:16Z — concede: "double-click" is a named mouse gesture, and the clickselect word-choice rule doesn't have a sensible reading for it (@workprentice, six-things-about-pulumi-service L96). "Double-select" isn't a thing any reader performs, and the Google Developer Documentation Style Guide — which AGENTS.md names as the fallback for anything STYLE-GUIDE.md doesn't cover — keeps "double-click" as the term for the gesture while preferring "click"→"select" for single activation. The bullet is dropped from this round's style list rather than re-posted. Good catch; the rule as written over-applies.
  • 2026-08-24T21:52:16Z — the other 26 applied style edits were diffed line-by-line against 420d3e8. Twenty-two are clean. Four are logged as new ⚠️ items because the linter's word-level fix cost a little meaning or grammar: the usually/sufficient pair in keep-your-secrets-secure-by-default L34 (and the milder largely in ai-slack-bot… L284) removed hedges that were scoping real claims; dropping and simple in iac-best-practices-understanding-code-organization-stacks L82 left "lightweight" bound to an infinitive; and the just removed from next-level-iac-pulumi-runtime-logic L293/L331 was temporal ("immediately before the program exits"), not a difficulty qualifier. None of these block — they're offered as better rewrites that also clear the linter. One pre-existing typo surfaced on a line the push touched (six-things-about-pulumi-service L48, "such the current git SHA").
  • 2026-08-24T22:18:40Z — re-reviewed after fix push (1 new commit, 58a9840). Requested by @workprentice. All four style-edit-regression ⚠️ items are resolved and moved to ✅; each took the suggested phrasing verbatim, and all five touched lines were read back in the working tree at 58a9840. Outstanding remains empty and the push introduces nothing new — the diff is prose-only, touching no links, anchors, or code. One correction to the mention's accounting: the mention describes the remainder as "all the pre-existing link-content findings," but the stack-readme / keep-your-secrets-secure-by-default partial-rename item (⚠️ [L47]) is not one of those and is still open — grep -n "Pulumi Service" content/blog/stack-readme/index.md content/blog/keep-your-secrets-secure-by-default/index.md still returns L41, L47, L57, L60, L227, and L233 in the first file and L24 in the second. So 13 ⚠️ items remain, not 12. Declining it is entirely reasonable under the /content/blog/-is-historical rule in AGENTS.md; the note is only so the decline is a decision rather than an oversight. The 12 unverifiable-claim items are unaffected by this push — no cited source changed — and carry forward as-is.

  • 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.

@pulumi-bot

pulumi-bot commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator

Your site preview for commit 58a9840 is ready! 🎉

http://www-testing-pulumi-docs-origin-pr-21072-58a98403.s3-website.us-west-2.amazonaws.com

Changed pages:

@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
@CamSoper

Copy link
Copy Markdown
Contributor

@workprentice Work through the findings in the review, please :)

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.
@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 24, 2026
@workprentice

workprentice Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

@CamSoper Thanks for the nudge — pushed a follow-up commit (420d3e8) that works through every finding in the pre-merge review:

Stale anchors (9 flagged + several more matching the same pattern in this PR's diff) — all rewritten to their real destination instead of a #fragment that only resolves via the resources/ page's client-side JS redirect:

  • #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/

Also handled refactoring-iac/index.md L27, where the same line used #components twice — one correctly for Components, one mislabeled for the parent option — and the reference-link block in next-level-iac-briding-the-declarative-gap/index.md, where #declarative-and-imperative-approach no longer exists anywhere on the target page, so that one now links to the page root instead of a dead fragment.

Two mislabeled docs-page links in content/docs/iac/guides/migration/import/_index.md: the retainOnDelete mention now points at its own page instead of protect's, and the #autonaming anchor now points at the names page where that anchor actually lives.

Deprecated product name — fixed the three "Pulumi Service" mentions on lines this PR already touches (keep-your-secrets-secure-by-default, six-things-about-pulumi-service, stack-readme) to Pulumi Cloud / Pulumi Cloud console per STYLE-GUIDE.md, and while there, updated two adjacent links (/product/pulumi-service/, /docs/pulumi-cloud/self-hosted/) that themselves redirect, to their live final targets.

Every new/changed target was fetched live to confirm a 200 before use. node ./scripts/lint/lint-markdown.js and yarn prettier --check both pass clean on all 17 touched files.

Could you (or another maintainer) comment @claude #update-review when you get a chance? Happy to address anything else that comes back.

@github-actions github-actions Bot added review:in-progress Claude review is currently running and removed review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention labels Aug 24, 2026
@CamSoper

Copy link
Copy Markdown
Contributor

@claude #update-review

For future reference @workprentice -- In this repo, please assume that a reviewer will want you to address all findings, including blockers and low-confidence findings. Also, you should plan on accepting all style suggestions unless they're just bad suggestions.

Once you get the review:no-blockers, review:trivial, or review:frontmatter-only label, then please request a review from pulumi/docs.

This has now been documented in AGENTS.md in master for future reference.

Thanks! Here's a cookie as a token of my appreciation: 🍪

@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

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Review updated on @CamSoper's request.

@github-actions github-actions Bot removed the review:in-progress Claude review is currently running label Aug 24, 2026
@github-actions github-actions Bot added the review:outstanding-issues Claude review completed; outstanding has author-actionable findings label Aug 24, 2026
…le 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.
@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 24, 2026
@workprentice

workprentice Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

Thanks — pushed 483d4d1 that works through every item from the updated review:

Blocker (finished the Pulumi Cloud rename): the previous commit only renamed the one line in six-things-about-pulumi-service/index.md that the style linter flagged. This commit renames the remaining six body mentions (L26, L44, L48, L68, L82, L106) and repoints L114 from /product/pulumi-service/ to /product/, so no "Pulumi Service" mention or alias hop is left in the post body. Title, meta_desc, summary, and the directory slug are untouched, since those aren't reader-facing rename targets and changing the slug would cost an alias for no benefit.

Style suggestions: applied 26 of the 27 flagged suggestions across 20 files — punctuation, wordiness, filler, weasel words, difficulty qualifiers, spacing, vague link text, an unbacked pulumi up CLI reference, and a directional reference ("as shown below").

Declined one: "double click" → "double select" in six-things-about-pulumi-service/index.md. Double-click is a named mouse gesture without a natural "select" equivalent, so applying the rule literally there reads worse, not better. Happy to revisit if you'd rather it go a different way.

yarn prettier --check and node ./scripts/lint/lint-markdown.js both pass clean on all 20 touched files.

@claude #update-review

@github-actions github-actions Bot added review:in-progress Claude review is currently running and removed review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention labels Aug 24, 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

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Review updated on @workprentice[bot]'s request.

@github-actions github-actions Bot added review:no-blockers Claude review completed cleanly; outstanding is empty and removed review:in-progress Claude review is currently running labels Aug 24, 2026
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.
@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:no-blockers Claude review completed cleanly; outstanding is empty labels Aug 24, 2026
@workprentice

workprentice Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the review:no-blockers pass — glad the six-things-about-pulumi-service rename read clean on grep verification, and appreciate the concession on the double-click bullet.

Pushed 58a9840 addressing the 5 actionable low-confidence findings from meaning/grammar drift in the style sweep:

  • keep-your-secrets-secure-by-default L34 and ai-slack-bot-...-pulumi-on-aws L284: restored an "often"/hedge word the linter's target ("usually"/"largely") was carrying semantic weight for, using your suggested phrasing.
  • iac-best-practices-understanding-code-organization-stacks L82: restored the coordinating clause that "and simple" was doing grammatical work for.
  • next-level-iac-pulumi-runtime-logic L293/L331: restored "immediately" — the removed "just" was temporal, not a difficulty qualifier, matching the Node.js/Python docs the section quotes.
  • six-things-about-pulumi-service L48: fixed the pre-existing "such the current git SHA" typo while already touching that line.

The remaining low-confidence items (17 total, 12 unaddressed) are all the pre-existing "cited page returned only navigation chrome, can't verify the claim" link-content findings — explicitly out of scope for a link-target rewrite and already marked as not blocking. Leaving those as-is per the review's own framing.

yarn prettier --check and node ./scripts/lint/lint-markdown.js both pass clean on all 5 touched files.

@claude #update-review

@github-actions github-actions Bot added review:in-progress Claude review is currently running and removed review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention labels Aug 24, 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

As a reader of this blog, you've probably heard of [Pulumi Cloud](/product/), the default state-management [backend](/docs/iac/concepts/state-and-backends/) of the Pulumi CLI. If that's the case, there's also a good chance you've heard of several of its key features, like helping you organize your [projects and stacks](/docs/iac/concepts/stacks/), collaborate with others with the help of [organizations](/docs/administration/organizations-teams/organizations/), or handle sensitive data securely with built-in support for [encrypted secrets](https://www.pulumi.com/docs/iac/concepts/secrets/).

What you might not know, though, is that we're adding new features to the Pulumi Service all the time, and that some of these features can be fairly easy to miss. So in this post, we'll highlight a handful of the features you might _not_ be aware of, and that we think make it even easier to manage your infrastructure with Pulumi.
What you might not know, though, is that we're adding new features to Pulumi Cloud all the time, and that some of these features can be fairly easy to miss. So in this post, we'll highlight a handful of the features you might _not_ be aware of, and that we think make it even easier to manage your infrastructure with Pulumi.

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] weasel word — clears fairly/easy/So and a double space

Suggested change
What you might not know, though, is that we're adding new features to Pulumi Cloud all the time, and that some of these features can be fairly easy to miss. So in this post, we'll highlight a handful of the features you might _not_ be aware of, and that we think make it even easier to manage your infrastructure with Pulumi.
What you might not know, though, is that we're adding new features to Pulumi Cloud all the time, and that some of these features can slip past you. In this post, we'll highlight a handful of the features you might _not_ be aware of, and that we think make it even easier to manage your infrastructure with Pulumi.

![The stack update header, showing links to GitHub source commit](https://user-images.githubusercontent.com/274700/150612892-f8e84597-2ce2-4687-8acc-236a57f6c6a4.png)

When Pulumi updates a stack, it will store some information about the local machine state, such the current git SHA if the stack resides in a `git` repository. It is with this data that the Pulumi Service links to relevant services where possible.
When Pulumi updates a stack, it will store some information about the local machine state, such as the current git SHA if the stack resides in a `git` repository. It is with this data that Pulumi Cloud links to relevant services where possible.

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] wordiness — unpacks the cleft into a direct sentence

Suggested change
When Pulumi updates a stack, it will store some information about the local machine state, such as the current git SHA if the stack resides in a `git` repository. It is with this data that Pulumi Cloud links to relevant services where possible.
When Pulumi updates a stack, it will store some information about the local machine state, such as the current git SHA if the stack resides in a `git` repository. Pulumi Cloud uses this data to link to relevant services where possible.

{{% /notes %}}

There are plenty of other features to check out in the [Pulumi Service](/product/pulumi-service/), and we have exciting improvements on the way! As always, feel free to stop by the [Pulumi Community Slack](https://slack.pulumi.com) to learn more, ask questions, or share anything cool you’re up to!
There are plenty of other features to check out in [Pulumi Cloud](/product/), and we have exciting improvements on the way! As always, feel free to stop by the [Pulumi Community Slack](https://slack.pulumi.com) to learn more, ask questions, or share anything cool you’re up to!

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] filler — leads with the subject instead of There are

Suggested change
There are plenty of other features to check out in [Pulumi Cloud](/product/), and we have exciting improvements on the way! As always, feel free to stop by the [Pulumi Community Slack](https://slack.pulumi.com) to learn more, ask questions, or share anything cool you’re up to!
[Pulumi Cloud](/product/) has plenty of other features to check out, and we have exciting improvements on the way! As always, feel free to stop by the [Pulumi Community Slack](https://slack.pulumi.com) to learn more, ask questions, or share anything cool you’re up to!

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Review updated on @workprentice[bot]'s request.

@github-actions github-actions Bot added review:no-blockers Claude review completed cleanly; outstanding is empty and removed review:in-progress Claude review is currently running labels Aug 24, 2026
@workprentice

workprentice Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

All clear — thanks for the careful read-back on 58a9840.

On the one open item you flagged as needing a deliberate call rather than an oversight: leaving the partial Pulumi ServicePulumi Cloud naming in stack-readme and keep-your-secrets-secure-by-default as-is. This PR's scope is fixing internal links to old /docs/concepts/ URLs; AGENTS.md treats /content/blog/ as historical content, and a full brand-rename sweep across older blog posts is a separate piece of work from a link-target fix. Filing that as a follow-up rather than pulling it into this PR.

Requesting team review now that this is at review:no-blockers.

@workprentice
workprentice Bot merged commit 1c5c9b5 into master Aug 25, 2026
14 checks passed
@workprentice
workprentice Bot deleted the seo/fix-docs-concepts-internal-links-20260822 branch August 25, 2026 02:08
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 domain:docs PR touches technical docs domain:mixed PR touches more than one domain review:no-blockers Claude review completed cleanly; outstanding is empty

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants