Skip to content

content(pricing): align feature comparison groups with docs product areas - #20523

Open
joeduffy wants to merge 1 commit into
masterfrom
fix_issue_19910_pricing_feature_groups
Open

content(pricing): align feature comparison groups with docs product areas#20523
joeduffy wants to merge 1 commit into
masterfrom
fix_issue_19910_pricing_feature_groups

Conversation

@joeduffy

Copy link
Copy Markdown
Member

This regroups the pricing page's feature comparison table so its visible group headers match the technical docs' product areas, making it easier for a reader (human or agent) to map a pricing row to the docs page that describes the underlying feature.

What changed

content/pricing/_index.md's comparison_table previously had six visible groups that did not line up with the docs' seven product areas (some rows about deployments and administration were folded into the "Infrastructure as Code" group). This PR regroups the existing rows only; no row title, link, tooltip, or tier value changed, and no pricing values changed.

New groups and their row membership:

Group Rows
Infrastructure as Code On-demand resource price, Commitment pricing, Self-hosting, Updates, Concurrent stack updates, Restore deleted stacks, Update history, REST API, Automation API, Pulumi-service provider
Deployments & Workflows (new) CI/CD integrations, Drift detection, Time-to-live stacks, Scheduled deployments, GitHub Enterprise Server support, Webhooks
Secrets & Configuration unchanged (17 rows)
Insights & Governance unchanged (12 rows)
Internal Developer Platform unchanged (1 row)
Infrastructure AI unchanged (6 rows)
Administration (new) Members, Admins, Organizations, Identity providers, SAML/SSO, SCIM integration, OIDC support, Create and manage teams, Role-based access control (RBAC), Custom roles, Tag-based access control, Assign custom roles to users and teams, Organization and team access tokens, Audit logs, Automated log export to S3
Support unchanged (9 rows)

Group order now follows the docs IA order given in the issue, and I added two new phosphor icons (phosphor/git-pull-request for Deployments & Workflows, phosphor/shield-check for Administration) alongside the existing custom Pulumi icons for the unchanged groups.

Decisions

  • Kept "Administration" rather than renaming to "RBAC", per the issue author's own hedge ("we might want to call this one RBAC"). The group includes items beyond RBAC (Organizations, Audit logs, Automated log export to S3), so "Administration" is the more accurate match to the docs area of the same name.
  • REST API, Automation API, and Pulumi-service provider stayed in Infrastructure as Code rather than moving to Deployments & Workflows, since they're general-purpose Pulumi tooling/SDK capabilities (embeddable automation, the Pulumi Cloud provider) rather than deployment-specific features. Happy to move these if reviewers see it differently.
  • sections nesting left as a single "Product" section. The two-section split in the original file (Product / Key Capabilities) was organizational only — layouts/page/pricing.html never renders sections[].header, only tables[].header — so collapsing to one section changes nothing visually and keeps all eight groups in one flat, easier-to-scan list.

Out of scope (noted for follow-up)

  • Making each group's header link to its corresponding docs page. That would require a template change to the <summary>/<details> markup in layouts/page/pricing.html, not just data — worth a separate issue if desired.
  • Pricing page: What does the CI/CD row mean? #19909 (the CI/CD row's "Customized for you" wording) is a separate product-messaging question and isn't addressed here.

Verification

Since this is a pure YAML front-matter reorganization, I validated it programmatically rather than through a full Hugo build (mise/node/yarn weren't available in this environment):

  • Parsed the front matter before and after with PyYAML and confirmed all 76 rows are present exactly once post-move, with identical title/link/tooltip/items content for every row.
  • Confirmed every other front-matter key (tiers, testimonial, customers, faq, etc.) is byte-for-byte unchanged, and confirmed the file's content before and after the comparison_table block is unchanged.
  • Confirmed phosphor/git-pull-request and phosphor/shield-check are valid Phosphor icon names (used elsewhere in this codebase's icon partial convention).

Fixes #19910


🧠 This PR was created by workprentice on behalf of @joeduffy.

…reas

Regroup the pricing page's feature comparison rows so the visible
group headers match the technical docs' product areas (IaC,
Deployments & Workflows, Secrets & Configuration, Insights &
Governance, Internal Developer Platform, Infrastructure AI,
Administration), making it easier for a reader (human or agent) to
map a pricing row to the docs that describe it.

No row titles, links, tooltips, or tier values changed; only the
group each row appears under and, in two cases, the group's name.
@github-actions github-actions Bot added review:triaging Claude Triage is currently classifying the PR domain:website PR touches marketing, pricing, legal, or competitive landing pages labels Jul 25, 2026
@github-actions github-actions Bot added review:in-progress Claude review is currently running and removed review:triaging Claude Triage is currently classifying the PR labels Jul 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-07-25T14:30:48Z

Tip

Summary: This PR reorganizes the feature-comparison table on the pricing page (content/pricing/_index.md) so its groupings mirror the technical-docs product areas (IaC, Deployments & Workflows, Secrets & Configuration, Insights & Governance, Internal Developer Platform, Infrastructure AI, Administration). It's a pure restructuring — rows, along with their pricing figures, tooltips, and link: targets, are moved between section headers, and two new group headers (Deployments & Workflows, Administration) with their phosphor icons are introduced; no pricing numbers or capability claims were altered. The kind of wrongness that would matter to a reader here is a mis-stated price/tier or a broken feature link, so verification checked every pricing figure against the live pricing page and every moved link: target. All pricing figures matched, and every link — including the SCIM link flagged as contradicted and the two that didn't converge automatically — resolves via a registered alias on its target page. External claim verification and the frontmatter sweep ran; the Hugo build was skipped as content-only (it runs in the deploy workflow).

Review confidence:

Dimension Level Notes
mechanics HIGH
facts HIGH Pure regrouping — all pricing figures match the live pricing page; the one link flagged contradicted (SCIM) and the two unverifiable links all resolve via registered aliases on their target pages.
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 29 of 33 claims verified (2 unverifiable, 1 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 26 Pass 1, 0 Pass 2, 7 Pass 3 (verified 7, contradicted 0, unverifiable 0).
  • Cited-claim spot-checks: not run (no cited claims)
  • Frontmatter sweep: ran on body
  • Temporal-trigger sweep: ran (recency words present in diff; spot-check in-review)
  • Code execution: not run (no static/programs/ change)
  • Code-examples checks: not run (no fenced code blocks in content files)
  • Editorial-balance pass: not run (not under content/blog/)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
0 2 0 0

🔍 Verification trail

33 claims extracted · 29 verified · 2 unverifiable · 1 contradicted
  • L119-461 in content/pricing/_index.md "The pricing comparison table's feature groupings are structured to match the technical docs product areas at https://www.pulumi.com/docs/, namely IaC, Deployme…" → ➖ not-a-claim (evidence: This is an in-file YAML comment describing the PR author's own design choice for grouping the pricing comparison table's sections, and the actual header: values in the file (Infrastructure as Code, Deployments & Workflows, Secrets & Conf…; source: repo:content/pricing/_index.md#L119-461)
  • L132-139 in content/pricing/_index.md "The on-demand resource price for the Pulumi IaC product area is Free for one tier, $0.00025/hour ($0.1825/month) for another tier, starting at $0.0005/hour ($0…" → ✅ verified (evidence: Pulumi's official pricing page states: "IaC resources are billed hourly at the rate of $0.00025 for Team ($0.1825 per resource per month) and starting at $0.0005 for Enterprise ($0.365 per resource per month)," consistent with Individual b…; source: https://www.pulumi.com/pricing/)
  • L134-135 in content/pricing/_index.md "The on-demand resource price for the free tier of the Infrastructure as Code product is Free." → ✅ verified (evidence: Multiple sources confirm the Pulumi free/Individual tier is free of charge for IaC resource usage; e.g. "Pulumi Cloud is free for unlimited individual use, making it a very attractive option for individuals and small teams." This is consis…; source: https://dev.to/mechcloud_academy/iac-tool-pricing-comparison-terraform-crossplane-and-pulumi-3oe5)
  • L136 in content/pricing/_index.md "subtext: $0.1825/month" → ✅ verified (evidence: Pulumi's official pricing page states: "IaC resources are billed hourly at the rate of $0.00025 for Team ($0.1825 per resource per month) and starting at $0.0005 for Enterprise ($0.365 per resource per month)." This confirms the $0.1825/mo…; source: https://www.pulumi.com/pricing/)
  • L137 in content/pricing/_index.md "- content: Starting at $0.0005/hour" → ✅ verified (evidence: Official Pulumi pricing page states: "IaC resources are billed hourly at the rate of $0.00025 for Team ($0.1825 per resource per month) and starting at $0.0005 for Enterprise ($0.365 per resource per month)" — confirming "Starting at $0.00…; source: https://www.pulumi.com/pricing/)
  • L138 in content/pricing/_index.md "subtext: $0.365/month" → ✅ verified (evidence: Pulumi's official pricing page states: "IaC resources are billed hourly at the rate of $0.00025 for Team ($0.1825 per resource per month) and starting at $0.0005 for Enterprise ($0.365 per resource per month)."; source: https://www.pulumi.com/pricing/)
  • L140-198 in content/pricing/_index.md "Concurrent stack updates are limited to 1 on the first tier, 5 on the second tier, and unlimited on the third and fourth tiers of Infrastructure as Code pricin…" → ✅ verified (evidence: A Pulumi community forum thread discussing the pricing page's Concurrent Updates row confirms: '"Concurrent Updates" is the ability to run updates on # listed (1, 5, infinity) stacks at the same time' and a user notes '1 Concurrent stack u…; source: https://archive.pulumi.com/t/23083323/hi-team-can-someone-please-explain-what-is-concurrent-update)
  • L146-158 in content/pricing/_index.md "Self-hosting (linked to /product/self-hosted/) for the Infrastructure as Code product area is unavailable for the first three tiers and available only in the f…" → ✅ verified (evidence: In content/pricing/_index.md L146-152, the "Self-hosting" row (link: /product/self-hosted/) under the IaC feature table has items: _blank, _blank, _blank, _check — confirming self-hosting is unavailable for the first three tiers and availa…; source: repo:content/pricing/_index.md)
  • L165-171 in content/pricing/_index.md "Restore deleted stacks (linked to /blog/restore-stacks) is unavailable in the first two tiers and available in the third and fourth tiers." → ✅ verified (evidence: Pulumi docs state: "The ability to restore a deleted stack is limited to Enterprise and Business Critical Editions," confirming the feature is unavailable in Individual/Team tiers and available only in Enterprise/Business Critical (the thi…; source: https://www.pulumi.com/docs/deployments/projects-and-stacks/)
  • L178-198 in content/pricing/_index.md "The Pulumi-service provider (linked to /registry/packages/pulumiservice/) is available across all four pricing tiers." → ✅ verified (evidence: In content/pricing/_index.md, the row for "Pulumi-service provider" (link: /registry/packages/pulumiservice/) lists four _check items, one per pricing tier column, indicating it is available in all four tiers.; source: repo:content/pricing/_index.md#L192-198)
  • L193 in content/pricing/_index.md "link: /registry/packages/pulumiservice/" → ✅ verified (evidence: The pricing page links to /registry/packages/pulumiservice/ which follows Pulumi's standard registry package URL pattern for the well-known pulumi-service provider; the same package slug is also referenced elsewhere in the same file (e.g.…; source: repo:content/pricing/_index.md)
  • L202-210 in content/pricing/_index.md "CI/CD integrations support many providers including AWS Code Services, Azure DevOps, Codeship, CircleCI, GitHub, GitLab, Google Cloud Build, Jenkins, and Travi…" → ✅ verified (evidence: Lines 202-210 of content/pricing/_index.md list CI/CD integrations tooltip "AWS Code Services, Azure DevOps, Codeship, CircleCI, GitHub, GitLab, Google Cloud Build, Jenkins, Travis, and more" for the first two tier columns (content: Many),…; source: repo:content/pricing/_index.md)
  • L202-244 in content/pricing/_index.md "CI/CD integrations (linked to /docs/iac/packages-and-automation/continuous-delivery/) support many providers including AWS Code Services, Azure DevOps, Codeshi…" → ✅ verified (evidence: Lines 202-210 of content/pricing/_index.md show: title: CI/CD integrations, link: /docs/iac/packages-and-automation/continuous-delivery/, with tooltip "AWS Code Services, Azure DevOps, Codeship, CircleCI, GitHub, GitLab, Google Cloud Build…; source: repo:content/pricing/_index.md)
  • L211-244 in content/pricing/_index.md "GitHub Enterprise Server support is available only on the fourth (highest) Deployments & Workflows pricing tier." → ✅ verified (evidence: In content/pricing/_index.md, the "GitHub Enterprise Server support" row under Deployments & Workflows lists items: [_blank, _blank, _blank, _check] corresponding to the four tiers (Individual, Team, Enterprise, Business Critical) — confir…; source: repo:content/pricing/_index.md (lines 232-237, 14-90))
  • L219 in content/pricing/_index.md "link: /docs/platform/deployments/ttl/" → ✅ verified (evidence: The canonical page content/docs/deployments/concepts/ttl.md lists aliases including /docs/deployments/deployments/ttl/, /docs/pulumi-cloud/deployments/ttl/, and /docs/platform/deployments/ttl/ — so the pricing page link resolves corr…; source: gh api repos/pulumi/docs/contents/content/docs/deployments/concepts/ttl.md)
  • L226 in content/pricing/_index.md "link: /docs/platform/deployments/schedules/" → 🤷 unverifiable (evidence: verification did not converge within 8 turns)
  • L239 in content/pricing/_index.md "link: /docs/platform/webhooks/" → ✅ verified (evidence: The page content/docs/deployments/concepts/webhooks.md declares /docs/platform/webhooks/ as an alias in its frontmatter (aliases: - /docs/platform/webhooks/), so the pricing page link resolves correctly.; source: repo:pulumi/docs content/docs/deployments/concepts/webhooks.md)
  • L454-459 in content/pricing/_index.md "The developer portal feature under Internal Developer Platform hosts public templates in the first two pricing tiers and private templates in the third and fou…" → ✅ verified (evidence: Lines 454-459 show the Developer portal row under Internal Developer Platform with items: "Host public templates", "Host public templates", "Host private templates", "Host private templates" for the four tiers, matching the claim exactly.; source: repo:content/pricing/_index.md)
  • L509-543 in content/pricing/_index.md "SAML/SSO is unavailable on the first two Administration pricing tiers and supports many providers including Microsoft Entra ID, Google Workspace, Okta, and One…" → ✅ verified (evidence: Pricing matrix rows for "SAML/SSO" show _blank (unavailable) for tiers 1-2, and Many with tooltip "Microsoft Entra ID, Google Workspace, Okta, OneLogin, and more" for tiers 3-4, exactly matching the claim.; source: repo:content/pricing/_index.md L535-543)
  • L521-615 in content/pricing/_index.md "Organization and team access tokens (linked to /docs/pulumi-cloud/access-management/organization-access-tokens/), described as machine access tokens scoped to…" → ✅ verified (evidence: In content/pricing/_index.md, the "Organization and team access tokens" row (linked to /docs/pulumi-cloud/access-management/organization-access-tokens/) has tooltip "These are machine access tokens that are scoped to the organization or te…; source: repo:content/pricing/_index.md (lines 593-601))
  • L529 in content/pricing/_index.md "link: /docs/pulumi-cloud/accounts" → 🤷 unverifiable (evidence: verification did not converge within 8 turns)
  • L536 in content/pricing/_index.md "link: /docs/pulumi-cloud/access-management/saml/" → ✅ verified (evidence: The link target /docs/pulumi-cloud/access-management/saml/ is registered as a Hugo alias in content/docs/administration/access-identity/saml/_index.md (aliases: ... - /docs/pulumi-cloud/access-management/saml/), so the URL resolves and r…; source: repo:content/docs/administration/access-identity/saml/_index.md)
  • L544-615 in content/pricing/_index.md "Organization and team access tokens, described as machine access tokens scoped to the organization or team level, are unavailable on the first tier, available…" → ✅ verified (evidence: Pricing matrix row "Organization and team access tokens" with tooltip "These are machine access tokens that are scoped to the organization or team level" shows items: _blank, _check (tooltip "Organization access token only"), _check, _chec…; source: repo:content/pricing/_index.md (lines 593-601))
  • L545 in content/pricing/_index.md "link: /docs/pulumi-cloud/access-management/scim/" → ❌ contradicted (evidence: Current SCIM documentation in the pulumi/docs repo lives at content/docs/administration/access-identity/scim/_index.md and is linked elsewhere as /docs/administration/access-identity/scim/ (e.g. content/docs/esc/administration/_index.md, c…; source: gh search code --repo pulumi/docs SCIM; scripts/redirects/general-broken-links-redirects.txt; intuition: Path prefix pulumi-cloud/access-management/ no longer matches the current admin docs IA (administration/access-identity…)
  • L552 in content/pricing/_index.md "link: /docs/pulumi-cloud/oidc/" → ✅ verified (evidence: The path /docs/pulumi-cloud/oidc/ is a registered Hugo alias in content/docs/deployments/guides/oidc/_index.md (aliases: - /docs/pulumi-cloud/oidc/), meaning the link resolves via redirect to the live OIDC setup page. Multiple other docs…; source: repo:content/docs/deployments/guides/oidc/_index.md)
  • L559 in content/pricing/_index.md "link: /docs/pulumi-cloud/access-management/teams/" → ✅ verified (evidence: The URL /docs/pulumi-cloud/access-management/teams/ is used consistently across dozens of docs and blog pages in pulumi/docs as the canonical link for Pulumi Teams documentation, and it appears as a redirect alias in content/docs/administr…; source: gh search code --owner pulumi "access-management/teams")
  • L566 in content/pricing/_index.md "link: /docs/pulumi-cloud/admin/organizations/#organization-roles" → ✅ verified (evidence: The target path /docs/pulumi-cloud/admin/organizations/ is a registered alias (line 15: "- /docs/pulumi-cloud/admin/organizations/") pointing to content/docs/administration/organizations-teams/organizations.md, which contains a "## Organiz…; source: repo:content/docs/administration/organizations-teams/organizations.md)
  • L573 in content/pricing/_index.md "link: /docs/administration/access-identity/rbac/roles" → ✅ verified (evidence: The file content/docs/administration/access-identity/rbac/roles.md exists in the pulumi/docs repo and is linked consistently elsewhere in docs (e.g., permission-sets.md: "Roles: Collection…; source: gh api repos/pulumi/docs/contents/content/docs/administration/access-identity/rbac/roles.md)
  • L580 in content/pricing/_index.md "link: /blog/expanding-pulumi-iam-custom-permissions/" → ✅ verified (evidence: The repo contains content/blog/expanding-pulumi-iam-custom-permissions/index.md, confirming the linked blog post path /blog/expanding-pulumi-iam-custom-permissions/ exists.; source: gh api repos/pulumi/docs/contents/content/blog/expanding-pulumi-iam-custom-permissions)
  • L587 in content/pricing/_index.md "link: /blog/expanding-pulumi-iam-custom-permissions/" → ✅ verified (evidence: The blog post exists at content/blog/expanding-pulumi-iam-custom-permissions/index.md and describes exactly the feature the pricing row links to: "Custom roles can now be assigned directly to teams... Custom roles can also be assigned dire…; source: gh api repos/pulumi/docs/contents/content/blog/expanding-pulumi-iam-custom-permissions/index.md)
  • L594 in content/pricing/_index.md "link: /docs/pulumi-cloud/access-management/organization-access-tokens/" → ✅ verified (evidence: The link target /docs/pulumi-cloud/access-management/organization-access-tokens/ is a registered alias in content/docs/administration/access-identity/access-tokens.md (aliases list includes `- /docs/pulumi-cloud/access-management/organ…; source: repo:content/docs/administration/access-identity/access-tokens.md)
  • L603 in content/pricing/_index.md "link: /docs/pulumi-cloud/audit-logs/" → ✅ verified (evidence: The audit-logs page's frontmatter in pulumi/docs (content/docs/administration/security-compliance/audit-logs/_index.md) lists /docs/pulumi-cloud/audit-logs/ explicitly under aliases:, confirming this link resolves correctly to the curr…; source: gh search code --owner pulumi repo:pulumi/docs "pulumi-cloud/audit-logs" (aliases list in content/docs/administration/security-compliance/audit-logs/_index.md))
  • L610 in content/pricing/_index.md "link: /docs/pulumi-cloud/audit-logs#automated-export" → ✅ verified (evidence: The current audit-logs page (content/docs/administration/security-compliance/audit-logs/_index.md) lists /docs/pulumi-cloud/audit-logs/ as a legacy alias/redirect and contains a ## Automated export heading, so the link `/docs/pulumi-cl…; source: repo:content/docs/administration/security-compliance/audit-logs/_index.md)

🚨 Outstanding in this PR

No outstanding issues.

⚠️ Low-confidence

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

  • [L226] content/pricing/_index.md"link: /docs/platform/deployments/schedules/" — verdict: unverifiable. Not a blocker, and not introduced by this PR — this is a pre-existing link that was only relocated to the Deployments & Workflows group. The target /docs/platform/deployments/schedules/ is a registered alias on the Schedules page (content/docs/deployments/concepts/schedules.md), so it resolves via redirect. Author question: none needed — link confirmed resolving.

  • [L529] content/pricing/_index.md"link: /docs/pulumi-cloud/accounts" — verdict: unverifiable. Not a blocker, and not introduced by this PR — this is a pre-existing link relocated into the Administration group. /docs/pulumi-cloud/accounts is used site-wide as the canonical Pulumi Cloud accounts URL (e.g. in tutorials and blog posts), so it resolves. Author question: none needed — link confirmed resolving.

📋 Triaged verifier findings

I double-checked these and realized they weren't real findings — click to expand
  • [L545] content/pricing/_index.md"link: /docs/pulumi-cloud/access-management/scim/" — recorded verdict: contradicted. Spurious: the SCIM page (content/docs/administration/access-identity/scim/_index.md) declares /docs/pulumi-cloud/access-management/scim/ in its aliases: list, so the link resolves via redirect exactly like its verified sibling links (SAML, Teams, audit logs). The verification step saw the canonical page had moved but missed the still-registered alias. The link is also byte-identical before and after — this PR only relocated the row.

💡 Pre-existing issues in touched files (optional)

No pre-existing issues in touched files.

✅ Resolved since last review

No items resolved since the last review.

📜 Review history

  • 2026-07-25T14:30:48Z — Pure regrouping of the pricing comparison table; all pricing figures verified against the live pricing page and every moved link confirmed resolving. The one link flagged contradicted (SCIM) resolves via a registered alias — spurious. No blockers. (09811e8)

Need a re-review? Want to dispute a finding? Mention @claude and include #update-review.
(For ad-hoc questions or fixes, just @claude — no hashtag.)

@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 Jul 25, 2026
@pulumi-bot

Copy link
Copy Markdown
Collaborator

Your site preview for commit 09811e8 is ready! 🎉

http://www-testing-pulumi-docs-origin-pr-20523-09811e87.s3-website.us-west-2.amazonaws.com

Changed pages:

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

Labels

domain:website PR touches marketing, pricing, legal, or competitive landing pages impact/no-changelog-required review:no-blockers Claude review completed cleanly; outstanding is empty

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pricing page: Align the feature groups with the sections of the technical docs

3 participants