Skip to content

Rebrand /what-is/ as Pulumi Resources at /resources/ (existing article URLs preserved) - #20595

Open
CamSoper wants to merge 7 commits into
masterfrom
claude/seo-content-url-restructure-zef591
Open

Rebrand /what-is/ as Pulumi Resources at /resources/ (existing article URLs preserved)#20595
CamSoper wants to merge 7 commits into
masterfrom
claude/seo-content-url-restructure-zef591

Conversation

@CamSoper

@CamSoper CamSoper commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Proposed changes

Rebrands the SEO explainer section ("What Is…") as Pulumi Resources, with the section landing at /resources/, per SEO consultant guidance. Per that same guidance, no existing article URL changes — this is the load-bearing constraint of the PR, so reviewers: the per-page url: pins are intentional, not mistakes.

Retargeted from /learn/. The first version of this PR used /learn/; @cnunciato has plans for that URL, and Chris suggested /resources/. The bare /learn alias on the tutorials section — which the earlier version removed — is restored, so /learn redirects to Tutorials exactly as it does on master today.

Content

  • content/what-is/content/resources/ (git mv, history preserved). Every article gets a url: /what-is/<slug>/ front-matter pin, so it is served at its exact old URL with no redirect, and type: what-istype: resources. New articles added to the section get /resources/<slug>/ URLs by default.
  • The section landing moves to /resources/ (titled "Pulumi Resources") with aliases: [/what-is/] — the single deliberate redirect.
  • content/topics/why-is-python-so-popular.md retyped (it borrows the section layout).

Type/layout rename (what-isresources)

  • layouts/what-is/layouts/resources/, layouts/partials/what-is/layouts/partials/resources/, data/what_is_sections.ymldata/resource_sections.yml.
  • .Type comparisons updated in the schema partials (breadcrumb, main-entity, FAQ graph-builder); breadcrumb crumb is now "Resources" → /resources/.
  • Filter UI contract renamed: theme/src/ts/what-is-list.tsresources-list.ts, data-what-is-filterdata-resources-filter (template + TS + SCSS kept in sync). Analytics data-track slugs keep their existing what-is-* names for reporting continuity.
  • scripts/generate-meta-images.mjs section registry, layouts/index.llms.txt section entry, and the why-pulumi relref (content-path based) updated.
  • Markdown content negotiation (Serve markdown for the homepage, /what-is/, /product/, and /pricing/ #20593) carried over: the landing keeps the outputs/cascade front matter, and the CloudFront allowlist in infrastructure/cloudfrontFunctions.ts covers /resources/ alongside the still-live pinned /what-is/ article paths (BUILD-AND-DEPLOY.md updated to match).
  • Agent docs/path gates point at content/resources/; internal-link URL matchers deliberately keep what-is because the pinned article URLs remain live.

Verified with make build: all 63 pinned articles render as full pages (no meta-refresh) at their old /what-is/<slug>/ URLs and stay in the sitemap; /resources/ renders the landing with rows linking to the pinned URLs; /what-is/ emits the alias redirect to /resources/; /learn still redirects to Tutorials; /resources/index.md and the per-article .md artifacts are emitted; JSON-LD breadcrumbs point at /resources/. make lint passes.

@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from 17747a4 to cba5c9a Compare July 30, 2026 21:15
@pulumi-bot

pulumi-bot commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Your site preview for commit da9c50b is ready! 🎉

http://www-testing-pulumi-docs-origin-pr-20595-da9c50b9.s3-website.us-west-2.amazonaws.com

Changed pages:

@pulumi-bot

pulumi-bot commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Lighthouse Performance Report

Commit: da9c50b | Metric definitions

Page Device Score FCP LCP TBT CLS SI
Homepage Mobile 🔴 47 3.2s 3.7s 1880ms 0.099 7.3s
Homepage Desktop 🟡 79 0.8s 1.5s 245ms 0.033 2.8s
Install Pulumi Mobile 🟡 56 6.0s 9.8s 96ms 0.053 8.4s
Install Pulumi Desktop 🟡 72 1.5s 2.1s 0ms 0.153 3.1s
AWS Get Started Mobile 🔴 44 5.9s 9.2s 46ms 0.263 8.3s
AWS Get Started Desktop 🟡 84 1.4s 2.0s 0ms 0.049 1.7s

@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from cba5c9a to 8b52c7a Compare July 30, 2026 22:29
@CamSoper
CamSoper marked this pull request as ready for review July 30, 2026 23:16
@CamSoper

Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts in this pull request

Copilot AI commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

@copilot resolve the merge conflicts in this pull request

Merge conflicts resolved in commit f5091ca.

The only conflict was content/what-is/_index.md — my branch deleted it (moved to content/learn/), while master added outputs/cascade frontmatter to it for markdown content negotiation (#20593). Resolution:

  1. Applied the outputs: [HTML, markdown] and cascade frontmatter to content/learn/_index.md so the Pulumi Learn landing and its child articles emit markdown artifacts.
  2. Updated the CloudFront function's eligible-prefix allowlist to include /learn/ alongside /what-is/, so Accept: text/markdown requests and .md-suffix URLs work for the new section landing.

@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from f5091ca to 762a6de Compare July 30, 2026 23:26

Copy link
Copy Markdown
Contributor Author

Heads up: the branch was force-pushed with a rebase onto current master (762a6de), which supersedes Copilot's merge commit f5091ca. Both resolutions were functionally the same; the rebase additionally carries the /learn/ markdown-negotiation change as its own commit (CloudFront allowlist + BUILD-AND-DEPLOY.md docs) and was verified locally with make build — pinned /what-is/<slug>/ pages emit both full HTML and index.md artifacts, /learn/index.md exists, and /what-is/ redirects to /learn/.


Generated by Claude Code

Copilot AI 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.

Pull request overview

Rebrands the “What Is…” explainer section as Pulumi Learn by moving content and templates to /learn/ while preserving existing explainer article URLs under /what-is/<slug>/ via per-page url: frontmatter pins.

Changes:

  • Migrates explainer content, layouts, data, and client-side filter UI from what-islearn, and updates schema/SEO-related helpers accordingly.
  • Introduces a new /learn/ landing page (with an alias redirect from /what-is/) and frees /learn from the Tutorials section alias.
  • Updates internal references (meta-image generation, llms.txt index, marketing relrefs) to point at the new Learn section structure.

Reviewed changes

Copilot reviewed 100 out of 101 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
theme/src/ts/main.ts Switches the bootstrapped filter module import from what-is-list to learn-list.
theme/src/ts/learn-list.ts Implements the Learn landing-page filter behavior and updates DOM contract selectors.
theme/src/scss/_blog.scss Updates active-pill styling selector to [data-learn-filter].
scripts/meta-images/render.mjs Updates template comment to reflect “learn” usage.
scripts/generate-meta-images.mjs Renames the “title” section registry from what-is to learn and updates docs/comments.
layouts/partials/schema/graph-builder.html Gates FAQ schema on .Type == "learn" instead of "what-is".
layouts/partials/schema/collectors/main-entity.html Treats learn pages as Article/CollectionPage (replacing what-is).
layouts/partials/schema/collectors/breadcrumb-entity.html Updates breadcrumb JSON-LD logic and section partial reference for learn.
layouts/partials/schema/collectors/article-entity.html Updates schema comment to reference learn pages.
layouts/partials/meta-image-url.html Updates docs/comments to reflect learn section in generated meta-image pathing.
layouts/partials/learn/section-for-page.html New/renamed helper to map a learn page to its curated section from data/learn_sections.yml.
layouts/partials/learn/row.html New/renamed partial to render a single Learn explainer row.
layouts/page/why-pulumi.html Updates relref to the moved explainer content path under /learn/.
layouts/learn/single.html New/renamed single-page layout for learn explainers (breadcrumb now “Learn”).
layouts/learn/list.html New/renamed landing-page template, including the section filter UI and grouped rows.
layouts/index.llms.txt Renames the llms.txt index entry from “What is…” to “Pulumi Learn” and points at /learn/.
layouts/case-studies/single.html Updates comment referencing the learn pages.
data/learn_sections.yml Renames/ports the curated section grouping data file from what-is to learn.
content/what-is/_index.md Removes the old section landing frontmatter (section landing now lives at /learn/).
content/tutorials/_index.md Removes the legacy /learn alias so /learn/ can serve Pulumi Learn.
content/topics/why-is-python-so-popular.md Retypes the page to learn to use the learn layout.
content/learn/_index.md Adds the new Pulumi Learn section landing page with aliases: [/what-is/].
content/learn/what-is-yaml.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-terragrunt.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-terraform-state.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-soc-2.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-serverless.md Retypes to learn, pins URL to /what-is/.../, and updates an embedded image link path.
content/learn/what-is-secrets-management.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-pulumi.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-policy-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-platform-engineering.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-infrastructure-drift.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-infrastructure-as-software.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-infrastructure-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-immutable-infrastructure.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-hitrust.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-hipaa.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-hashicorp-vault.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-google-cloud-secret-manager.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-gitops.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-devops.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-devops-automation.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-configuration-management.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-cloud-security.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-cloud-misconfiguration.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-cloud-infrastructure-autoscaling.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-ci-cd.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-azure-key-vault.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-aws-secrets-manager.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-an-internal-developer-platform.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-agentic-infrastructure.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-a-terraform-module.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-a-github-action-secret.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-a-cloudflare-secret.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-is-a-circleci-secret.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-are-kubernetes-secrets.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-are-docker-secrets.md Retypes to learn and pins URL to /what-is/.../.
content/learn/what-are-docker-configs.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-sts-get-caller-identity-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-s3-sync-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-s3-ls-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-s3-cp-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-lambda-list-functions-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-iam-list-users-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-ec2-stop-instances-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-ec2-start-instances-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-ec2-describe-instances-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-dynamodb-list-tables-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/run-aws-cloudwatch-get-metric-data-with-dynamic-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-unable-to-locate-credentials.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-list-buckets-signature-does-not-match.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-list-buckets-invalid-client-token-id.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-list-buckets-invalid-access-key-id.md Retypes to learn and pins URL to /what-is/.../.
content/learn/resolve-list-buckets-expired-token.md Retypes to learn and pins URL to /what-is/.../.
content/learn/python-for-devops.md Retypes to learn and pins URL to /what-is/.../.
content/learn/mcp-for-infrastructure-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/javascript-and-infrastructure-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/is-kubernetes-infrastructure-as-code.md Retypes to learn and pins URL to /what-is/.../.
content/learn/infrastructure-as-code-for-kubernetes.md Retypes to learn and pins URL to /what-is/.../.
content/learn/infrastructure-as-code-for-devops.md Retypes to learn and pins URL to /what-is/.../.
content/learn/guide-to-automating-file-expiration-in-aws-s3.md Retypes to learn and pins URL to /what-is/.../.
content/learn/database-comparison-cosmos-db-vs-dynamodb.md Retypes to learn and pins URL to /what-is/.../.
content/learn/cosmos-db-vs-mongodb-know-the-differences.md Retypes to learn and pins URL to /what-is/.../.
content/learn/amazon-dynamodb-vs-google-cloud-bigtable.md Retypes to learn and pins URL to /what-is/.../.
AGENTS.md Updates repo guidance to replace “what-is” references with “learn”.
.github/workflows/claude-update.yml Updates prose-file path filters to remove content/what-is/.
.github/workflows/claude-triage.yml Updates prose-file path filters to remove content/what-is/.
.github/workflows/claude-code-review.yml Updates prose-file path filters to remove content/what-is/.
.github/labels-pr-review.md Updates docs-domain label definition to remove content/what-is/.
.claude/commands/seo-analyze/SKILL.md Updates SEO analyze skill text/examples from what-is to learn.
.claude/commands/pr-review/scripts/should-fact-check.sh Updates content-path trigger logic to remove what-is.
.claude/commands/new-doc/references/meta-images.md Updates meta-image coverage docs from what-is to learn.
.claude/commands/docs-review/scripts/validate-pinned.py Updates prose-path documentation comment to remove what-is.
.claude/commands/docs-review/scripts/triage-classify.py Updates domain routing to remove content/what-is/.
.claude/commands/docs-review/scripts/extract-urls-and-fetch.py Updates prose-path filter regex/docs to remove what-is.
.claude/commands/docs-review/references/website.md Updates scope description to remove what-is.
.claude/commands/docs-review/references/domain-routing.md Updates domain routing table to remove content/what-is/**.
.claude/commands/docs-review/references/docs.md Updates docs-review criteria text from what-is to learn.
Comments suppressed due to low confidence (2)

content/learn/what-is-serverless.md:88

  • The page links to an image at /learn/serverless-resources.png, but the only matching asset in the repo is content/learn/serverless-resources.png. Hugo only serves files from static/ by default (see config/_default/config.yml mounts), so this absolute URL will likely 404 in production.
    layouts/learn/list.html:85
  • The filter UI is described (and implemented in learn-list.ts) as progressive enhancement over real anchor links, but the "All" pill is a . Without JS, it won’t provide the same link behavior as the other pills, and it contradicts the stated no-JS/crawler fallback.

Comment thread theme/src/scss/_blog.scss Outdated
Comment on lines +38 to +42
@@ -39,7 +39,7 @@
// blog-list.ts) and the /what-is/ section filter pill (moved by what-is-list.ts).
// Styled to match the mockup's selected pill.
[data-blog-filter] .is-active,
[data-what-is-filter] .is-active,
[data-learn-filter] .is-active,
@CamSoper

CamSoper commented Jul 31, 2026

Copy link
Copy Markdown
Contributor Author

Flipping back to draft, @cnunciato already has plans for /learn. Chris suggests /resources.

@CamSoper
CamSoper marked this pull request as draft July 31, 2026 18:42
claude added 6 commits August 5, 2026 22:19
…e URLs

Move content/what-is/ to content/learn/ and retype pages what-is -> learn.
Every existing article keeps its /what-is/<slug>/ URL via a per-page url:
pin (no redirects), per SEO guidance. The section landing moves to /learn/
with an alias from /what-is/. The bare /learn alias on the tutorials
section (legacy Learn Pulumi redirect) is removed to free the URL; the
/learn/<path>/ sub-aliases remain intact.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
…ages

Rename layouts/what-is -> layouts/learn, partials/what-is -> partials/learn,
data/what_is_sections.yml -> learn_sections.yml, and the filter UI contract
(what-is-list.ts -> learn-list.ts, data-what-is-filter -> data-learn-filter).
Update .Type comparisons in the schema partials, the breadcrumb landing URL
and label, the why-pulumi relref content path, the llms.txt section entry,
and the generate-meta-images section registry. Analytics data-track slugs
keep their existing what-is-* names for reporting continuity.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
content/what-is/ no longer exists, so drop it from content-path filters and
review-skill references. Internal-link URL matchers keep what-is because the
pinned article URLs remain live.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
Master's #20593 enabled markdown artifacts for /what-is/; carry the
outputs/cascade front matter onto the relocated Pulumi Learn landing and
add /learn/ to the CloudFront allowlist. Pinned articles keep emitting
under /what-is/, which stays allowlisted; the bare /what-is/ landing is
now an alias with no artifact.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
/learn/ is spoken for, so the explainer section lands at /resources/ as
Pulumi Resources: content/learn -> content/resources, type learn ->
resources, layouts/partials/data/theme renamed to match, and the
CloudFront markdown allowlist, meta-image registry, llms.txt entry, and
schema breadcrumbs repointed. The bare /learn alias on the tutorials
section is restored, since this branch no longer needs that URL.

Existing article URLs are untouched — every page keeps its
/what-is/<slug>/ pin, and /what-is/ still aliases to the section landing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
@CamSoper
CamSoper force-pushed the claude/seo-content-url-restructure-zef591 branch from dda08c3 to e225342 Compare August 5, 2026 22:32
@CamSoper CamSoper changed the title Rebrand /what-is/ as Pulumi Learn at /learn/ (existing article URLs preserved) Rebrand /what-is/ as Pulumi Resources at /resources/ (existing article URLs preserved) Aug 5, 2026
@CamSoper
CamSoper marked this pull request as ready for review August 5, 2026 22:40
@CamSoper
CamSoper requested a review from cnunciato August 5, 2026 22:40
@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 domain:docs PR touches technical docs domain:mixed PR touches more than one domain domain:infra PR touches workflows, scripts, infra, Makefile, or build config review:in-progress Claude review is currently running and removed review:triaging Claude Triage is currently classifying the PR labels Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-08-05T23:08:51Z

Tip

Summary: This is a fix-response follow-up on the /what-is//resources/ rebrand (full PR scope in the review history below). Commit da9c50b9 fixes both 🚨 Outstanding blockers — the /resources alias collision between the new section landing and content/events/_index.md, and the CloudFront markdown-negotiation allowlist's now-artifact-less rewrite of the bare /what-is/ landing — plus all three ⚠️ Low-confidence formatting/comment fixes (the stale learn schema comment, the lost indentation in layouts/resources/single.html, and the incomplete Vale path list in claude-update.yml), and resolves the one disputed item (data-track="what-is-filter-*" analytics ids) with an inline comment confirming the historical ids are kept deliberately for analytics continuity. All five diffs were checked by hand against the prior finding text and match the suggested patches exactly. This commit introduces no new prose or frontmatter, so no new claims were extracted.

Review confidence:

Dimension Level Notes
mechanics MEDIUM Both structural fixes (alias removal, CloudFront prefix exclusion) verified by hand against the diff and the CloudFront handler's own eligibility logic; the Hugo build preflight still hasn't run in-review (this round's diff is infra/template-only, so it wouldn't retrigger it either) — author reports make build/make lint pass locally and a manual pass on the deployed preview, unverified independently here.
facts MEDIUM Unchanged from the prior review — no new claims in this commit. Five "contradicted" verdicts are artifacts of the branch's intermediate /learn/ state, triaged below.
coherence HIGH
links MEDIUM Alias collision fix confirmed via a repo-wide sweep for other - /resources alias declarations (none found); no full crawl of inbound /what-is/ links across the blog archive was performed.
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 39 of 90 claims verified (1 unverifiable, 5 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 82 Pass 1, 0 Pass 2, 8 Pass 3 (verified 3, contradicted 0, unverifiable 5).
  • Cited-claim spot-checks: not run (no cited claims)
  • Frontmatter sweep: ran on body + meta_desc
  • 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 0 1 6

🔍 Verification trail

90 claims extracted · 39 verified · 1 unverifiable · 5 contradicted · 2 detector findings
  • L67 in .claude/commands/docs-review/references/docs.md "- Quotable definition for learn explainers and concept pages. The opening 1–2 sentences should answer 'what is X' as a standalone definition that could be…" → ➖ not-a-claim (evidence: This is a prescriptive style/editorial guideline in Pulumi's own internal docs-review command reference, describing the author's own review criteria for explainer content rather than a falsifiable factual assertion.; source: .claude/commands/docs-review/references/docs.md (line 67, PR's own authored guidance))
  • L14 in .claude/commands/docs-review/references/domain-routing.md "| 3 | docs-review:references:docs | content/docs/**, content/learn/**, content/tutorials/** |" → ➖ not-a-claim (evidence: This is a row in an internal routing table within the PR author's own Claude Code slash-command tooling (.claude/commands/docs-review/references/domain-routing.md), mapping content path globs to review domains. It describes the author's ow…; source: .claude/commands/docs-review/references/domain-routing.md)
  • L2 in .claude/commands/seo-analyze/SKILL.md "description: Analyze content for search engine and AI discoverability. Use when writing new blog posts, documentation, or learn explainer pages, or when review…" → ➖ not-a-claim (evidence: This is a description of the author's own internal tool/skill (a .claude/commands SKILL.md file) describing its own intended usage — not a falsifiable third-party assertion.; source: repo:.claude/commands/seo-analyze/SKILL.md)
  • L13 in .github/labels-pr-review.md "| domain:docs | 0e8a16 | PR touches technical docs (content/docs/, content/learn/, content/tutorials/). |" → ❌ contradicted (evidence: (escalated from pass3) The actual table row in .github/labels-pr-review.md reads: "domain:docs | 0e8a16 | PR touches technical docs (content/docs/, content/resources/, content/tutorials/)." — the claim substitutes `content/learn/…; source: repo:.github/labels-pr-review.md)
  • L64 in AGENTS.md "- Meta images: meta_image is optional for docs, tutorials, case-studies, learn, migrate, partner, topics, events, and blog pages. Leave…" → ❌ contradicted (evidence: AGENTS.md L64 actually reads: "meta_image is optional for docs, tutorials, case-studies, resources, migrate, partner, topics, events, and blog pages" — the list includes resources, not learn. There is no "learn" section anywhere in scripts…; source: repo:AGENTS.md (L64), repo:scripts/generate-meta-images.mjs; intuition: The claim's section list doesn't match the source file's actual wording — "learn" appears nowhere in AGENTS.md or the g…)
  • L99 in AGENTS.md "- Docs (content/docs/, content/learn/, content/tutorials/): community-centric and balanced. Third-party coding agents (Claude Code, Codex, Cursor, Gi…" → ✅ verified (evidence: The page content/docs/ai/skills/index.md exists in pulumi/docs and describes "Pulumi Agent Skills are knowledge packages that teach AI coding assistants domain-specific Pulumi workflows" — matching the link target /docs/ai/skills/ used in…; source: gh search code --owner pulumi repo:pulumi/docs "content/docs/ai/skills/index.md")
  • L868 in BUILD-AND-DEPLOY.md "The same negotiation covers the marketing front door: the homepage, /learn/ (including pinned /what-is/ article URLs), /product/, and /pricing/ emit i…" → ❌ contradicted (framing: shifted — source names the path /resources/, claim asserts /learn/for the same sentence/anchor; evidence: The actual BUILD-AND-DEPLOY.md line 868 reads: "The same negotiation covers the marketing front door: the homepage,/resources/(including pinned/what-is/article URLs),/product/, and /pricing/emitindex.md` artifacts..." — the…; source: repo:BUILD-AND-DEPLOY.md (line 868))
  • L7 in content/learn/amazon-dynamodb-vs-google-cloud-bigtable.md "url: /what-is/amazon-dynamodb-vs-google-cloud-bigtable/" → ✅ verified (evidence: The page exists in pulumi/docs at content/what-is/amazon-dynamodb-vs-google-cloud-bigtable.md with front matter type: what-is, and is listed under the "Comparisons" section of data/what_is_sections.yml as slug `amazon-dynamodb-vs-google-…; source: gh api repos/pulumi/docs/contents/content/what-is/amazon-dynamodb-vs-google-cloud-bigtable.md and data/what_is_sections.yml)
  • L7 in content/learn/cosmos-db-vs-mongodb-know-the-differences.md "url: /what-is/cosmos-db-vs-mongodb-know-the-differences/" → ➖ not-a-claim (evidence: This is a front-matter url field defining the page's own slug/path, not a factual assertion requiring verification.; source: content/learn/cosmos-db-vs-mongodb-know-the-differences.md)
  • L7 in content/learn/database-comparison-cosmos-db-vs-dynamodb.md "url: /what-is/database-comparison-cosmos-db-vs-dynamodb/" → ✅ verified (evidence: The file content/what-is/database-comparison-cosmos-db-vs-dynamodb.md exists in pulumi/docs with type: what-is, and other content links to it as /what-is/database-comparison-cosmos-db-vs-dynamodb/ (e.g. "See also [Cosmos DB vs DynamoDB, Kn…; source: gh api repos/pulumi/docs/contents/content/what-is/database-comparison-cosmos-db-vs-dynamodb.md; gh search code --owner pulumi database-comparison-cosmos-db-vs-dynamodb)
  • L7 in content/learn/guide-to-automating-file-expiration-in-aws-s3.md "url: /what-is/guide-to-automating-file-expiration-in-aws-s3/" → ➖ not-a-claim (evidence: This is a frontmatter url field specifying the page's own URL path, not a falsifiable factual assertion — it's metadata describing where the page itself will be served.; source: content/learn/guide-to-automating-file-expiration-in-aws-s3.md)
  • L6 in content/learn/infrastructure-as-code-for-devops.md "url: /what-is/infrastructure-as-code-for-devops/" → ➖ not-a-claim (evidence: The url: front-matter field is a self-referential path assignment matching the page's own content location (content/what-is/infrastructure-as-code-for-devops.md on pulumi/docs, confirmed via GitHub contents API), consistent with the si…; source: gh api repos/pulumi/docs/contents/content/what-is/infrastructure-as-code-for-devops.md)
  • L6 in content/learn/infrastructure-as-code-for-kubernetes.md "url: /what-is/infrastructure-as-code-for-kubernetes/" → ➖ not-a-claim (evidence: The line is a frontmatter url: field (a routing/alias path), not a factual assertion. The target path /what-is/infrastructure-as-code-for-kubernetes/ is confirmed as the real, live content path referenced consistently by multiple sibli…; source: gh search code --owner pulumi infrastructure-as-code-for-kubernetes)
  • L6 in content/learn/is-kubernetes-infrastructure-as-code.md "url: /what-is/is-kubernetes-infrastructure-as-code/" → ➖ not-a-claim (evidence: This is the page's own frontmatter url: field declaring its own URL path (/what-is/is-kubernetes-infrastructure-as-code/), matching the actual repo file content/what-is/is-kubernetes-infrastructure-as-code.md. It's self-referential r…; source: repo:content/what-is/is-kubernetes-infrastructure-as-code.md)
  • L6 in content/learn/javascript-and-infrastructure-as-code.md "url: /what-is/javascript-and-infrastructure-as-code/" → ✅ verified (evidence: The file content/what-is/javascript-and-infrastructure-as-code.md exists on the pulumi/docs master branch (confirmed via GitHub API), matching the Hugo content-section pattern where files under content/what-is/.md render at /what-is/…; source: gh api repos/pulumi/docs/contents/content/what-is/javascript-and-infrastructure-as-code.md)
  • L5 in content/learn/mcp-for-infrastructure-as-code.md "url: /what-is/mcp-for-infrastructure-as-code/" → ✅ verified (evidence: The target page exists in the pulumi/docs repo at content/what-is/mcp-for-infrastructure-as-code.md (type: what-is), and is listed as slug "mcp-for-infrastructure-as-code" under the Guides section in data/what_is_sections.yml, confirming t…; source: gh api repos/pulumi/docs/contents/content/what-is/mcp-for-infrastructure-as-code.md; gh api repos/pulumi/docs/contents/data/what_is_sections.yml)
  • L6 in content/learn/python-for-devops.md "url: /what-is/python-for-devops/" → ✅ verified (framing: URL path matches the real content file's directory (what-is/) and type field (type: what-is), even though the claim's cited source file (content/learn/...) doe…; evidence: The content file lives at content/what-is/python-for-devops.md in pulumi/docs (confirmed via GitHub API) with front matter type: what-is, consistent with the URL path /what-is/python-for-devops/. The claim's stated file path (content/lea…; source: gh api repos/pulumi/docs/contents/content/what-is/python-for-devops.md)
  • L7 in content/learn/resolve-list-buckets-expired-token.md "url: /what-is/resolve-list-buckets-expired-token/" → ➖ not-a-claim (evidence: This is a frontmatter url: field defining the page's own canonical slug, not a falsifiable factual assertion. The slug resolve-list-buckets-expired-token is also referenced in data/what_is_sections.yml, confirming it's a self-consist…; source: repo:data/what_is_sections.yml)
  • L7 in content/learn/resolve-list-buckets-invalid-access-key-id.md "url: /what-is/resolve-list-buckets-invalid-access-key-id/" → ➖ not-a-claim (evidence: This is a frontmatter url: field defining the page's own route/permalink, not a falsifiable assertion. The slug matches the corresponding entry in data/what_is_sections.yml ("resolve-list-buckets-invalid-access-key-id"), confirming it's…; source: repo:data/what_is_sections.yml (via gh search code))
  • L7 in content/learn/resolve-list-buckets-invalid-client-token-id.md "url: /what-is/resolve-list-buckets-invalid-client-token-id/" → ➖ not-a-claim (evidence: The url field is front-matter metadata defining the page's own path/slug, not a falsifiable assertion. The slug resolve-list-buckets-invalid-client-token-id is registered in data/what_is_sections.yml, consistent with this being the pag…; source: gh search code --owner pulumi resolve-list-buckets-invalid-client-token-id (pulumi/docs:data/what_is_sections.yml))
  • L7 in content/learn/resolve-list-buckets-signature-does-not-match.md "url: /what-is/resolve-list-buckets-signature-does-not-match/" → ➖ not-a-claim (evidence: (escalated from pass1 after exhausting its 12-turn cap) This is a frontmatter 'url' field specifying the page's own URL slug/path, not a falsifiable factual assertion. It is metadata describing the document's own location, not a claim abou…; source: content/learn/resolve-list-buckets-signature-does-not-match.md)
  • L7 in content/learn/resolve-unable-to-locate-credentials.md "url: /what-is/resolve-unable-to-locate-credentials/" → ➖ not-a-claim (evidence: This is a frontmatter url: field defining the page's own routing path, not a falsifiable assertion. The slug is corroborated as a registered entry in pulumi/docs data/what_is_sections.yml: "- resolve-unable-to-locate-credentials".; source: gh search code --owner pulumi resolve-unable-to-locate-credentials)
  • L7 in content/learn/run-aws-cloudwatch-get-metric-data-with-dynamic-credentials.md "url: /what-is/run-aws-cloudwatch-get-metric-data-with-dynamic-credentials/" → ✅ verified (evidence: data/what_is_sections.yml lists run-aws-cloudwatch-get-metric-data-with-dynamic-credentials under the troubleshooting section, alongside sibling slugs like run-aws-s3-ls-with-dynamic-credentials; these troubleshooting pages are docum…; source: gh api repos/pulumi/docs/contents/data/what_is_sections.yml)
  • L7 in content/learn/run-aws-dynamodb-list-tables-with-dynamic-credentials.md "url: /what-is/run-aws-dynamodb-list-tables-with-dynamic-credentials/" → ➖ not-a-claim (evidence: This is a frontmatter url alias field defining the page's own route path, not a falsifiable assertion; confirmed the corresponding entry exists in pulumi/docs data/what_is_sections.yml.; source: gh search code --owner pulumi "run-aws-dynamodb-list-tables-with-dynamic-credentials")
  • L7 in content/learn/run-aws-ec2-describe-instances-with-dynamic-credentials.md "url: /what-is/run-aws-ec2-describe-instances-with-dynamic-credentials/" → ✅ verified (evidence: The page content/what-is/run-aws-ec2-describe-instances-with-dynamic-credentials.md exists in pulumi/docs at content/what-is/, and data/what_is_sections.yml lists this slug under the "Troubleshooting & CLI recipes" section, whose comment s…; source: gh api repos/pulumi/docs/contents/content/what-is/run-aws-ec2-describe-instances-with-dynamic-credentials.md and data/what_is_sections.yml)
  • L7 in content/learn/run-aws-ec2-start-instances-with-dynamic-credentials.md "url: /what-is/run-aws-ec2-start-instances-with-dynamic-credentials/" → ✅ verified (evidence: The slug run-aws-ec2-start-instances-with-dynamic-credentials is registered in data/what_is_sections.yml's troubleshooting/CLI-recipe section, which drives the /what-is/ card list, and sibling pages of the same "run-aws-*-with-dynami…; source: gh api repos/pulumi/docs/contents/data/what_is_sections.yml; gh api repos/pulumi/docs/contents/content/what-is/run-aws-s3-ls-with-dynamic-credentials.md)
  • L7 in content/learn/run-aws-ec2-stop-instances-with-dynamic-credentials.md "url: /what-is/run-aws-ec2-stop-instances-with-dynamic-credentials/" → ➖ not-a-claim (evidence: This is a front-matter url field specifying the page's own canonical/alias path, not a falsifiable factual assertion. The slug run-aws-ec2-stop-instances-with-dynamic-credentials is confirmed present in the site's `data/what_is_section…; source: repo:data/what_is_sections.yml (via gh search code))
  • L7 in content/learn/run-aws-iam-list-users-with-dynamic-credentials.md "url: /what-is/run-aws-iam-list-users-with-dynamic-credentials/" → ➖ not-a-claim (evidence: The line is a Hugo front-matter url field defining the page's own permalink path, not a falsifiable factual assertion. The slug is consistent with the corresponding entry in data/what_is_sections.yml.; source: gh search code --owner pulumi "run-aws-iam-list-users-with-dynamic-credentials" -> pulumi/docs:data/what_is_sections.yml)
  • L7 in content/learn/run-aws-lambda-list-functions-with-dynamic-credentials.md "url: /what-is/run-aws-lambda-list-functions-with-dynamic-credentials/" → ✅ verified (evidence: The file lives at content/what-is/run-aws-lambda-list-functions-with-dynamic-credentials.md (confirmed via GitHub search of pulumi/docs) with front matter type: what-is, consistent with the claimed url front matter `/what-is/run-aws-lamb…; source: gh search code --owner pulumi filename:run-aws-lambda-list-functions-with-dynamic-credentials.md; repos/pulumi/docs/contents/content/what-is/run-aws-lambda-list-functions-with-dynamic-credentials.md)
  • L7 in content/learn/run-aws-s3-cp-with-dynamic-credentials.md "url: /what-is/run-aws-s3-cp-with-dynamic-credentials/" → ✅ verified (evidence: The pulumi/docs data file data/what_is_sections.yml lists the slug "run-aws-s3-cp-with-dynamic-credentials" under the troubleshooting section, with an explicit code comment: "these are CLI recipes and error-resolution snippets that live un…; source: gh api repos/pulumi/docs/contents/data/what_is_sections.yml)
  • L7 in content/learn/run-aws-s3-ls-with-dynamic-credentials.md "url: /what-is/run-aws-s3-ls-with-dynamic-credentials/" → ➖ not-a-claim (evidence: This is a front-matter url field defining the page's own URL/alias path, not a factual assertion about a third party or product behavior.; source: content/learn/run-aws-s3-ls-with-dynamic-credentials.md)
  • L7 in content/learn/run-aws-s3-sync-with-dynamic-credentials.md "url: /what-is/run-aws-s3-sync-with-dynamic-credentials/" → ➖ not-a-claim (evidence: This is a frontmatter url field defining the page's own route path, not a factual assertion about a third party or product behavior.; source: content/learn/run-aws-s3-sync-with-dynamic-credentials.md (frontmatter))
  • L7 in content/learn/run-aws-sts-get-caller-identity-with-dynamic-credentials.md "url: /what-is/run-aws-sts-get-caller-identity-with-dynamic-credentials/" → ✅ verified (evidence: data/what_is_sections.yml (pulumi/docs) lists the slug "run-aws-sts-get-caller-identity-with-dynamic-credentials" under the troubleshooting section, whose header comment explains these pages "live under /what-is/ for URL reasons but aren't…; source: gh api repos/pulumi/docs/contents/data/what_is_sections.yml)
  • L7 in content/learn/what-are-docker-configs.md "url: /what-is/what-are-docker-configs/" → ✅ verified (evidence: The source file content/what-is/what-are-docker-configs.md exists in pulumi/docs, is listed in data/what_is_sections.yml under 'what-are-docker-configs', and has front matter 'type: what-is', confirming the page is served at the /what-is/w…; source: gh api repos/pulumi/docs/contents/content/what-is/what-are-docker-configs.md; gh search code --owner pulumi what-are-docker-configs)
  • L7 in content/learn/what-are-docker-secrets.md "url: /what-is/what-are-docker-secrets/" → ✅ verified (evidence: The file lives at content/what-is/what-are-docker-secrets.md with front matter type: what-is and slug what-are-docker-secrets, and sibling pages already reference it via the URL /what-is/what-are-docker-secrets/ (e.g. what-are-docker…; source: gh search code --owner pulumi "what-are-docker-secrets"; repos/pulumi/docs/contents/content/what-is/what-are-docker-secrets.md)
  • L7 in content/learn/what-are-kubernetes-secrets.md "url: /what-is/what-are-kubernetes-secrets/" → ➖ not-a-claim (evidence: The line is a front-matter url: field declaring the page's own slug, not a falsifiable assertion. Other docs pages (e.g. content/what-is/what-is-secrets-management.md, infrastructure-as-code-for-kubernetes.md) and data/what_is_sections.y…; source: gh search code --owner pulumi "what-are-kubernetes-secrets")
  • L7 in content/learn/what-is-a-circleci-secret.md "url: /what-is/what-is-a-circleci-secret/" → ✅ verified (evidence: The page exists at content/what-is/what-is-a-circleci-secret.md on pulumi/docs master with front matter type: what-is, which per the site's URL convention renders at /what-is/<slug>/, i.e. /what-is/what-is-a-circleci-secret/, match…; source: gh api repos/pulumi/docs/contents/content/what-is/what-is-a-circleci-secret.md)
  • L7 in content/learn/what-is-a-cloudflare-secret.md "url: /what-is/what-is-a-cloudflare-secret/" → ➖ not-a-claim (evidence: The url: /what-is/what-is-a-cloudflare-secret/ line is Hugo front-matter defining this page's own permalink/slug — a routing configuration value set by the PR author for their own new page, not a falsifiable factual assertion about an ex…; source: repo:content/learn/what-is-a-cloudflare-secret.md (front matter, PR-authored))
  • L7 in content/learn/what-is-a-github-action-secret.md "url: /what-is/what-is-a-github-action-secret/" → ➖ not-a-claim (evidence: This is a Hugo front-matter url: field mirroring the file's own path under content/what-is/what-is-a-github-action-secret.md. The file exists in the pulumi/docs repo at that exact path with type: what-is front matter, consistent with…; source: gh api repos/pulumi/docs/contents/content/what-is/what-is-a-github-action-secret.md)
  • L5 in content/learn/what-is-a-terraform-module.md "url: /what-is/what-is-a-terraform-module/" → ➖ not-a-claim (evidence: This is front-matter URL metadata for the page itself, not a falsifiable factual assertion. The corresponding page exists at pulumi/docs content/what-is/what-is-a-terraform-module.md and sibling pages (what-is-terragrunt.md, what-is-terraf…; source: gh search code --owner pulumi "what-is-a-terraform-module"; repos/pulumi/docs/contents/content/what-is/what-is-a-terraform-module.md)
  • L5 in content/learn/what-is-agentic-infrastructure.md "url: /what-is/what-is-agentic-infrastructure/" → ➖ not-a-claim (evidence: This is a front-matter url: field defining the page's own permalink slug, not a falsifiable assertion. Multiple sibling pages in the repo (content/docs/ai/skills/index.md, content/what-is/what-is-policy-as-code.md, etc.) link to this exa…; source: gh search code --owner pulumi "what-is-agentic-infrastructure")
  • L7 in content/learn/what-is-an-internal-developer-platform.md "url: /what-is/what-is-an-internal-developer-platform/" → 🤝 matches (evidence: The pulumi/docs repo contains content/what-is/what-is-an-internal-developer-platform.md (type: what-is), and other pages such as content/what-is/what-is-infrastructure-drift.md link to it via the exact path /what-is/what-is-an-internal-dev…; source: gh api repos/pulumi/docs/contents/content/what-is/what-is-an-internal-developer-platform.md; gh search code --owner pulumi what-is-an-internal-developer-platform)
  • L7 in content/learn/what-is-aws-secrets-manager.md "url: /what-is/what-is-aws-secrets-manager/" → ➖ not-a-claim (evidence: This is a front-matter url slug field defining the page's own route, not a factual assertion to verify.; source: content/learn/what-is-aws-secrets-manager.md)
  • L7 in content/learn/what-is-azure-key-vault.md "url: /what-is/what-is-azure-key-vault/" → ✅ verified (evidence: The live file content/what-is/what-is-azure-key-vault.md exists in pulumi/docs (type: what-is, no hardcoded url: field — Hugo derives it from type+slug), and other pages already cross-link to it exactly at that path: "**[Azure Key Vault](/…; source: gh_query: repos/pulumi/docs/contents/content/what-is/what-is-azure-key-vault.md and what-is-secrets-management.md)
  • L6 in content/learn/what-is-ci-cd.md "url: /what-is/what-is-ci-cd/" → ✅ verified (evidence: The file content/what-is/what-is-ci-cd.md exists in pulumi/docs with front matter type: what-is, and multiple sibling pages (what-is-gitops.md, what-is-devops.md, what-is-platform-engineering.md, etc.) consistently link to it as `/what-i…; source: gh api repos/pulumi/docs/contents/content/what-is/what-is-ci-cd.md; gh search code --owner pulumi "what-is-ci-cd")
  • L6 in content/learn/what-is-cloud-infrastructure-autoscaling.md "url: /what-is/what-is-cloud-infrastructure-autoscaling/" → ✅ verified (evidence: The slug what-is-cloud-infrastructure-autoscaling is already referenced with the exact URL /what-is/what-is-cloud-infrastructure-autoscaling/ from other live content files (e.g. content/blog/deploy-a-function-app-with-keda/index.md:…; source: gh search code --owner pulumi "what-is-cloud-infrastructure-autoscaling")
  • L5 in content/learn/what-is-cloud-misconfiguration.md "url: /what-is/what-is-cloud-misconfiguration/" → ➖ not-a-claim (evidence: This is a frontmatter url: field defining the page's own route, not a falsifiable assertion. Sibling pages (e.g. what-is-cloud-security.md, what-is-policy-as-code.md) link to this exact path /what-is/what-is-cloud-misconfiguration/, co…; source: gh search code --owner pulumi "what-is-cloud-misconfiguration")
  • L5 in content/learn/what-is-cloud-security.md "url: /what-is/what-is-cloud-security/" → ➖ not-a-claim (evidence: This is a front-matter url field defining the page's own slug, not a factual assertion about an external source.; source: content/learn/what-is-cloud-security.md)
  • L7 in content/learn/what-is-configuration-management.md "url: /what-is/what-is-configuration-management/" → ✅ verified (evidence: The page content/what-is/what-is-configuration-management.md exists in pulumi/docs (type: what-is) and is linked consistently across many sibling pages as /what-is/what-is-configuration-management/ (e.g. what-is-devops.md: "[What is Con…; source: gh search code --owner pulumi what-is-configuration-management; gh api repos/pulumi/docs/contents/content/what-is/what-is-configuration-management.md)
  • L7 in content/learn/what-is-devops-automation.md "url: /what-is/what-is-devops-automation/" → ✅ verified (evidence: The page lives at pulumi/docs content/what-is/what-is-devops-automation.md (type: what-is), and other docs link to it precisely at that path: "pulumi/docs:content/what-is/what-is-devops.md: * [What is DevOps Automation?](/what-is/what-is-d…; source: gh search code --owner pulumi "what-is-devops-automation"; gh api repos/pulumi/docs/contents/content/what-is/what-is-devops-automation.md)
  • L5 in content/learn/what-is-devops.md "url: /what-is/what-is-devops/" → ✅ verified (evidence: The file content/what-is/what-is-devops.md exists in pulumi/docs with type: what-is, and is linked consistently across many sibling pages (what-is-gitops.md, what-is-ci-cd.md, what-is-pulumi.md, etc.) using the exact URL /what-is/what-is-d…; source: gh search code --owner pulumi "what-is-devops" (pulumi/docs); gh api repos/pulumi/docs/contents/content/what-is/what-is-devops.md)
  • L5 in content/learn/what-is-gitops.md "url: /what-is/what-is-gitops/" → ✅ verified (evidence: The page (found at content/what-is/what-is-gitops.md in pulumi/docs, with frontmatter type: what-is) is consistently referenced by sibling pages as /what-is/what-is-gitops/ (e.g. what-is-ci-cd.md: "see [GitOps](/what-is/what-is-gitops/…; source: gh search code --owner pulumi what-is-gitops; repos/pulumi/docs/contents/content/what-is/what-is-gitops.md)
  • L7 in content/learn/what-is-google-cloud-secret-manager.md "url: /what-is/what-is-google-cloud-secret-manager/" → ✅ verified (evidence: The page lives at content/what-is/what-is-google-cloud-secret-manager.md, and Hugo's path-based routing plus the data/what_is_sections.yml entry - what-is-google-cloud-secret-manager and cross-references from sibling pages (e.g. "Googl…; source: gh api repos/pulumi/docs/contents/content/what-is/what-is-google-cloud-secret-manager.md; gh search code repo:pulumi/docs "what-is-google-cloud-secret-manager")
  • L7 in content/learn/what-is-hashicorp-vault.md "url: /what-is/what-is-hashicorp-vault/" → ➖ not-a-claim (evidence: The line is a frontmatter url: field declaring the page's own canonical path, not a falsifiable assertion about external facts.; source: content/learn/what-is-hashicorp-vault.md)
  • L5 in content/learn/what-is-hipaa.md "url: /what-is/what-is-hipaa/" → ➖ not-a-claim (evidence: This is a frontmatter url: field defining the page's own slug, not a falsifiable assertion. Sibling pages (what-is-soc-2.md, what-is-hitrust.md, what-is-cloud-security.md) all link to this exact path /what-is/what-is-hipaa/, confirming…; source: gh search code --owner pulumi "what-is-hipaa" (pulumi/docs repo))
  • L5 in content/learn/what-is-hitrust.md "url: /what-is/what-is-hitrust/" → ✅ verified (evidence: The file content/what-is/what-is-hitrust.md exists in pulumi/docs with front matter type: what-is, and multiple sibling pages (what-is-hipaa.md, what-is-soc-2.md, what-is-cloud-security.md) link to it consistently as `/what-is/what-is-hi…; source: gh search code --owner pulumi "what-is-hitrust" (pulumi/docs content/what-is/what-is-hipaa.md, what-is-soc-2.md, what-is-cloud-security.md))
  • L5 in content/learn/what-is-immutable-infrastructure.md "url: /what-is/what-is-immutable-infrastructure/" → ✅ verified (evidence: data/what_is_sections.yml (pulumi/docs) lists what-is-immutable-infrastructure as a slug, and its header comments state: "Drives the grouped card layout on /what-is/ ... A slug is the page's filename without .md" — confirming pages wit…; source: gh api repos/pulumi/docs/contents/data/what_is_sections.yml)
  • L6 in content/learn/what-is-infrastructure-as-code.md "url: /what-is/what-is-infrastructure-as-code/" → ➖ not-a-claim (evidence: The line is a front-matter url: field specifying the page's URL path, which is metadata/configuration rather than a factual assertion to verify.; source: content/learn/what-is-infrastructure-as-code.md)
  • L6 in content/learn/what-is-infrastructure-as-software.md "url: /what-is/what-is-infrastructure-as-software/" → ➖ not-a-claim (evidence: This is a front-matter url: field (URL alias), not a falsifiable assertion. The path /what-is/what-is-infrastructure-as-software/ is confirmed as the canonical, widely-referenced URL for this content across the pulumi/docs repo (e.g. l…; source: gh search code --owner pulumi "what-is-infrastructure-as-software")
  • L5 in content/learn/what-is-infrastructure-drift.md "url: /what-is/what-is-infrastructure-drift/" → ➖ not-a-claim (evidence: This is a front-matter url: slug field, not a falsifiable assertion. The slug /what-is/what-is-infrastructure-drift/ matches the URL pattern used consistently across many sibling pages in the repo (e.g. content/what-is/what-is-terragru…; source: gh search code --owner pulumi "what-is-infrastructure-drift")
  • L7 in content/learn/what-is-platform-engineering.md "url: /what-is/what-is-platform-engineering/" → ✅ verified (evidence: The page lives at content/what-is/what-is-platform-engineering.md (type: what-is) in pulumi/docs, and is consistently linked across dozens of sibling pages as /what-is/what-is-platform-engineering/ (e.g. what-is-devops.md: "[Platform eng…; source: gh search code --owner pulumi "what-is-platform-engineering"; gh api repos/pulumi/docs/contents/content/what-is/what-is-platform-engineering.md)
  • L5 in content/learn/what-is-policy-as-code.md "url: /what-is/what-is-policy-as-code/" → ➖ not-a-claim (evidence: The line is a frontmatter url: field defining the page's own routing slug, not an assertion about external facts.; source: content/learn/what-is-policy-as-code.md)
  • L6 in content/learn/what-is-pulumi.md "url: /what-is/what-is-pulumi/" → ➖ not-a-claim (evidence: This is the url: frontmatter field of the page itself, defining its own permalink path (/what-is/what-is-pulumi/) — a self-referential metadata value, not a falsifiable assertion about a third party.; source: content/learn/what-is-pulumi.md frontmatter)
  • L6 in content/learn/what-is-secrets-management.md "url: /what-is/what-is-secrets-management/" → ➖ not-a-claim (evidence: This is a front-matter url: field defining the page's own slug, not a falsifiable factual assertion. The slug /what-is/what-is-secrets-management/ is corroborated as the canonical, widely-referenced path across many sibling docs/blog p…; source: gh search code --owner pulumi "what-is-secrets-management" (multiple cross-references to /what-is/what-is-secrets-management/))
  • L6 in content/learn/what-is-serverless.md "url: /what-is/what-is-serverless/" → ✅ verified (evidence: The file content/what-is/what-is-serverless.md exists in pulumi/docs (type: what-is), and a sibling page content/what-is/what-is-cloud-infrastructure-autoscaling.md links to it with the exact text "[What is Serverless?](/what-is/what-is-se…; source: gh search code --owner pulumi "what-is-serverless" (pulumi/docs); gh api repos/pulumi/docs/contents/content/what-is/what-is-serverless.md)
  • L88 in content/learn/what-is-serverless.md "serverless-resources" → ➖ not-a-claim (evidence: This is an image embed reference (asset path), not a falsifiable factual assertion. A related file exists in pulumi/docs at content/what-is/what-is-serverless.md referencing /what-is/serverless-resources.png, indicating this may be a renam…; source: gh search code --owner pulumi serverless-resources.png)
  • L5 in content/learn/what-is-soc-2.md "url: /what-is/what-is-soc-2/" → ✅ verified (evidence: The page content/what-is/what-is-soc-2.md exists in pulumi/docs and is referenced consistently across the site (e.g., content/what-is/what-is-hipaa.md, what-is-hitrust.md, what-is-cloud-security.md, what-is-secrets-management.md, and data/…; source: gh search code --owner pulumi "what-is-soc-2"; repos/pulumi/docs/contents/content/what-is/what-is-soc-2.md)
  • L5 in content/learn/what-is-terraform-state.md "url: /what-is/what-is-terraform-state/" → ➖ not-a-claim (evidence: This is a frontmatter url field defining the page's own slug/route, not a factual assertion about a third party — it is metadata, not a checkable claim.; source: content/learn/what-is-terraform-state.md)
  • L5 in content/learn/what-is-terragrunt.md "url: /what-is/what-is-terragrunt/" → ➖ not-a-claim (evidence: This is a frontmatter url: field declaring the page's own slug path, not a falsifiable assertion. Sibling pages (what-is-terraform-state.md, what-is-a-terraform-module.md) link to this exact path /what-is/what-is-terragrunt/, confirmin…; source: gh search code --owner pulumi "what-is-terragrunt")
  • L7 in content/learn/what-is-yaml.md "url: /what-is/what-is-yaml/" → ➖ not-a-claim (evidence: The actual file lives at content/what-is/what-is-yaml.md (type: what-is) in pulumi/docs; Hugo's default routing for that content path yields the URL /what-is/what-is-yaml/, matching the claimed url. This is a front-matter/path-derived URL…; source: gh api repos/pulumi/docs/contents/content/what-is/what-is-yaml.md; gh api repos/pulumi/docs/contents/data/what_is_sections.yml)
  • L3 in content/resources/is-kubernetes-infrastructure-as-code.md "Kubernetes's reconciliation loop stops at the cluster boundary." → ✅ verified (evidence: Kubernetes' control plane (controllers/operators) only watches and reconciles objects registered in its own API server (Deployments, Services, etc.); it has no built-in mechanism to reconcile cloud infrastructure like VPCs, IAM roles, or t…; source: https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/ (cited in same doc); general Kubernetes controller architecture (client-go informers/controllers scoped to cluster API))
  • L3 in content/resources/is-kubernetes-infrastructure-as-code.md "Kubernetes reconciles YAML in a manner similar to infrastructure as code (IaC)." → ➖ not-a-claim (evidence: This line is the article's own thesis statement/framing device (a nuanced conceptual comparison, "reconciles YAML in a manner similar to IaC"), elaborated at length in the body text with citations to Kubernetes docs on declarative config a…; source: content/resources/is-kubernetes-infrastructure-as-code.md)
  • L3 in content/resources/is-kubernetes-infrastructure-as-code.md "Pulumi extends the reconciliation-loop model to the infrastructure underneath the Kubernetes cluster." → ➖ not-a-claim (evidence: This is an analogical/positioning statement describing Pulumi's own design philosophy (extending declarative reconciliation to cloud infrastructure beyond what Kubernetes reconciles), not a specific falsifiable technical assertion about a…; source: content/resources/is-kubernetes-infrastructure-as-code.md)
  • L3 in content/resources/javascript-and-infrastructure-as-code.md "TypeScript or JavaScript can be used to define cloud infrastructure as code using real types, npm packages, IDE tooling, and Jest tests for VPCs and clusters." → ✅ verified (evidence: Pulumi supports TypeScript/JavaScript as first-class IaC languages with real typed SDKs (e.g. @pulumi/aws), npm package distribution, standard IDE tooling, and documented Jest-based unit testing via pulumi.runtime.setMocks (shown in-page…; source: content/resources/javascript-and-infrastructure-as-code.md (self-consistent with Pulumi's documented TypeScript SDK + unit testing guide reference))
  • L3 in content/resources/python-for-devops.md "Python is the lingua franca of DevOps and MLOps automation." → ➖ not-a-claim (evidence: This is a subjective marketing/positioning statement ("lingua franca") rather than a falsifiable factual claim; it expresses the resource page's own framing of Python's popularity in DevOps/MLOps, not a checkable statistic or third-party a…; source: content/resources/python-for-devops.md (self-description, not independently checkable))
  • L6 in content/resources/resolve-list-buckets-invalid-access-key-id.md "This document is categorized as a 'resources' type page (previously categorized as 'learn')." → 🤷 unverifiable (evidence: Current frontmatter confirms type: resources for this page, consistent with the claim's first half. However, the assertion that it was "previously categorized as 'learn'" is a historical/diff claim that cannot be confirmed from the file'…; source: repo:content/resources/resolve-list-buckets-invalid-access-key-id.md)
  • L5 in content/resources/resolve-unable-to-locate-credentials.md "Pulumi ESC and dynamic credentials can be used to run commands like the AWS ListBuckets command in a more secure and seamless way." → ✅ verified (framing: Article uses aws s3 ls as its worked example rather than literally "ListBuckets", but S3 ls calls the ListBuckets/ListObjects API, so the claim is an entai…; evidence: The article describes exactly this: "Pulumi ESC offers a solution... By enabling the management of dynamic credentials from AWS using OIDC, Pulumi ESC simplifies and secures your AWS CLI operations," demonstrated via `pulumi env run ... aw…; source: content/resources/resolve-unable-to-locate-credentials.md)
  • L5-6 in content/resources/what-is-serverless.md "This content page is categorized under the 'resources' content type (URL path /what-is/what-is-serverless/) rather than 'learn'." → ✅ verified (evidence: Frontmatter of content/resources/what-is-serverless.md reads: type: resources and url: /what-is/what-is-serverless/, confirming the page is categorized under 'resources' with that URL path, not 'learn'.; source: repo:content/resources/what-is-serverless.md)
  • L86 in content/resources/what-is-serverless.md "Serverless functions should be stateless, which encourages scalability and fault tolerance since every serverless function call should be able to function on i…" → ✅ verified (evidence: This is a well-established, widely-documented characteristic of serverless computing (e.g., AWS Lambda and Azure Functions docs both describe functions as stateless/ephemeral, with statelessness enabling horizontal scaling and fault tolera…; source: General serverless computing architecture knowledge (AWS Lambda / Azure Functions execution model documentation))
  • L86 in content/resources/what-is-serverless.md "The recommended practice for managing data that needs to persist beyond the span of one serverless function execution is to store it externally in reliable dat…" → ✅ verified (evidence: This is a well-established serverless computing best practice: since serverless functions are stateless and ephemeral, persistent state must be stored externally (e.g., S3/object storage, DynamoDB, RDS, or other databases) rather than rely…; source: General serverless architecture best practices (AWS Lambda docs, Azure Functions docs consensus on statelessness))
  • L88 in content/resources/what-is-serverless.md "The serverless-resources image referenced in the 'Embrace statelessness' section is located at /resources/serverless-resources.png." → ➖ not-a-claim (evidence: (escalated from pass3) Line 88 of the file itself contains ![serverless-resources](/resources/serverless-resources.png) — this is simply a restatement of the image path present in the reviewed file, not an independently falsifiable claim…; source: repo:content/resources/what-is-serverless.md line 88)
  • L90 in content/resources/what-is-serverless.md "In a stateless protocol like HTTP, each request from a client to a server is treated independently, with no connection or context maintained between requests." → ✅ verified (evidence: HTTP is a well-documented stateless protocol; per RFC 7230 and standard networking references, each HTTP request is processed independently by the server with no retained context from prior requests (statefulness requires mechanisms like c…; source: General networking knowledge / RFC 7230 (HTTP/1.1 Message Syntax and Routing) — HTTP defined as a stateless request-response protocol)
  • L90 in content/resources/what-is-serverless.md "HTTP's stateless request model aligns well with the design philosophy of serverless computing, where each function execution is isolated and stateless." → ✅ verified (evidence: The claim is a well-established technical characterization of serverless computing, and is verbatim identical to text already published on Pulumi's own "What is Serverless?" page: "This aligns well with the design philosophy of serverless…; source: https://www.pulumi.com/what-is/what-is-serverless/)
  • L90 in content/resources/what-is-serverless.md "Serverless applications maintain a clear separation between function logic and stateful data management while guaranteeing data durability, consistency, and ad…" → ➖ not-a-claim (evidence: This is a general architectural best-practice explanation in an educational resource article ("Embrace statelessness... store it externally in reliable data storage systems... maintain the clear separation between function logic and statef…; source: repo:content/resources/what-is-serverless.md)
  • L90 in content/resources/what-is-serverless.md "The stateless nature of HTTP is an important aspect that makes serverless computing a good fit for many HTTP-based use cases." → ✅ verified (evidence: The claim is a verbatim sentence from Pulumi's own published "What is Serverless?" page: "The stateless nature of HTTP is an important aspect that makes serverless computing a good fit for many HTTP-based use cases." This is a widely accep…; source: https://www.pulumi.com/what-is/what-is-serverless/)
  • L82 in layouts/index.llms.txt "- Pulumi Resources: Explainer pages for cloud infrastructure concepts (e.g., infrastructure as code, Kubernetes, serverles…" → ✅ verified (evidence: content/resources/_index.md exists with title "Pulumi Resources" and meta_desc "Plain-English explainers of infrastructure as code, DevOps, CI/CD, Kubernetes, platform engineering, and other cloud engineering concepts" — matching the claim…; source: repo:content/resources/_index.md)
  • L11 in layouts/page/why-pulumi.html "By leveraging familiar programming languages for <a href='{{ relref . '/learn/what-is-infrastructure-as-code' }}'>infrastructure as code, Pulumi makes you" → ❌ contradicted (evidence: The linked path in the claim, /learn/what-is-infrastructure-as-code, does not exist. The actual repo file at layouts/page/why-pulumi.html currently links to {{ relref . "/resources/what-is-infrastructure-as-code" }}, and the canonical…; source: repo:layouts/page/why-pulumi.html; gh search code --owner pulumi "what-is-infrastructure-as-code")
  • L9 in layouts/partials/learn/section-for-page.html "url deep link to the filtered overview (/learn/#)" → ❌ contradicted (evidence: The file layouts/partials/learn/section-for-page.html does not exist in pulumi/docs. The actual, structurally identical file is layouts/partials/what-is/section-for-page.html, whose comment reads: "url deep link to the filtered over…; source: gh api repos/pulumi/docs/contents/layouts/partials/what-is/section-for-page.html (master branch))
  • L25 in layouts/partials/learn/section-for-page.html "{{ return dict 'title' $title 'id' $id 'url' (printf '/learn/#%s' $id) }}" → ➖ not-a-claim (evidence: (escalated from pass1 after exhausting its 12-turn cap) This is a line of Go template code from the PR's own file (layouts/partials/learn/section-for-page.html) constructing a URL anchor fragment for internal use; it is not a falsifiable f…; source: repo:layouts/partials/learn/section-for-page.html)
  • L24 in layouts/partials/schema/collectors/breadcrumb-entity.html "'item' 'https://www.pulumi.com/resources/'" → ➖ not-a-claim (evidence: This is a Hugo template partial defining the site's own JSON-LD breadcrumb structure. Line 24 sets the "item" URL to "https://www.pulumi.com/resources/" for the Resources section breadcrumb — a self-referential site-architecture value the…; source: repo:layouts/partials/schema/collectors/breadcrumb-entity.html)
  • L1 in content/resources/_index.md "frontmatter URL ? collides with ?" → 🚩 flagged (frontmatter: url-collision)
  • L1 in content/what-is/_index.md "frontmatter URL ? collides with ?" → 🚩 flagged (frontmatter: url-collision)
  • L72 in infrastructure/cloudfrontFunctions.ts "the /what-is/ prefix stays in the markdown-negotiation allowlist even though the bare /what-is/ landing is now only an alias redirect with no index.md artifact" → ⚔️ mismatch (evidence: the function's own added comment at lines 58–62 states the bare landing "is an alias redirect with no artifact" and warns that "rewriting a path with no artifact would turn a valid HTML page into a 404 for markdown-accepting clients", but the uri.indexOf('/what-is/') === 0 test at line 72 still matches the bare /what-is/ URI; source: repo:infrastructure/cloudfrontFunctions.ts@e225342 lines 58-62, 72, 85-93)
  • L80 in layouts/partials/schema/collectors/main-entity.html "comment reads 'Single learn pages get Article schema' after the section was renamed to resources" → 🤷 unverifiable (evidence: line 80 of the head-branch file reads Single learn pages get Article schema (with dateModified, timeRequired). while the surrounding branch and the adjacent line both say /resources/; whether learn was left deliberately is a question for the author; source: repo:layouts/partials/schema/collectors/main-entity.html@e225342 line 80)
  • L17 in layouts/resources/single.html "the $section := partial \"resources/section-for-page.html\" line lost its 8-space indentation" → 🤷 unverifiable (evidence: line 17 of the head-branch file begins at column 0 while every sibling line in the same <div> is indented 8 spaces; source: repo:layouts/resources/single.html@e225342 line 17)
  • L342 in .github/workflows/claude-update.yml "the Vale step's comment dropped content/what-is without substituting content/resources, so it no longer lists the paths the grep below it matches" → 🤷 unverifiable (evidence: lines 342-344 read content/docs, content/blog, / content/tutorials) so the / refreshed review reflects... while the grep at line 359 matches content/(docs|blog|tutorials|resources)/; source: repo:.github/workflows/claude-update.yml@e225342 lines 342-344, 359)
  • L85 in layouts/resources/list.html "the filter pills keep data-track=\"what-is-filter-*\" analytics ids while the filter-bar attribute was renamed to data-resources-filter" → 🤷 unverifiable (evidence: lines 84-91 of the head-branch file render data-track="what-is-filter-all" and data-track="what-is-filter-{{ .id }}" under a <nav data-resources-filter>; whether the old ids were kept for analytics continuity is a question for the author; source: repo:layouts/resources/list.html@e225342 lines 84-91)

  • 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 5, 2026

Copy link
Copy Markdown
Contributor

🚨 Outstanding in this PR

No outstanding findings — both blockers from the prior review are fixed; see ✅ Resolved below.

⚠️ Low-confidence

No low-confidence findings remain — the three formatting/comment fixes and the one disputed item are all resolved; see ✅ Resolved below.

📋 Triaged verifier findings

I double-checked these and realized they weren't real findings — click to expand

Five of these six share one root cause: the verification step read this branch as a commit series rather than as its net diff. The branch's first five commits rebranded the section to /learn/, and the final commit (e225342, "Retarget the rebrand from /learn/ to /resources/") changed it to /resources/. Claims were extracted from the intermediate /learn/ state and then checked against the merged result, so each one reports the correct final text as a contradiction of an intermediate line that no longer exists.

  • [L13] .github/labels-pr-review.md"| domain:docs | 0e8a16 | PR touches technical docs (content/docs/, content/learn/, content/tutorials/). |"Spurious: the claim text is the intermediate /learn/ wording; the merged file says content/resources/, which is what the verification step found and reported as the contradiction. The final state is correct.

  • [L64] AGENTS.md"meta_image is optional for docs, tutorials, case-studies, learn, migrate, partner, topics, events, and blog pages"Spurious: same intermediate-commit artifact. The merged line lists resources, matching titleSection("resources", false) in scripts/generate-meta-images.mjs.

  • [L868] BUILD-AND-DEPLOY.md"the homepage, /learn/ (including pinned /what-is/ article URLs), /product/, and /pricing/ emit index.md artifacts"Spurious: same intermediate-commit artifact; the merged sentence names /resources/, which agrees with the CloudFront function's allowlist.

  • [L11] layouts/page/why-pulumi.html"{{ relref . '/learn/what-is-infrastructure-as-code' }}"Spurious: same intermediate-commit artifact. The merged file calls relref on /resources/what-is-infrastructure-as-code, which resolves to the moved page.

  • [L9] layouts/partials/learn/section-for-page.html"url deep link to the filtered overview (/learn/#)"Spurious: the file path itself is from the intermediate commit. The partial landed at layouts/partials/resources/section-for-page.html, and its comment and printf both say /resources/#%s.

  • [L6] content/resources/resolve-list-buckets-invalid-access-key-id.md"This document is categorized as a 'resources' type page (previously categorized as 'learn')."Mis-sourced: this isn't page content at all — it's a description of the frontmatter change itself, picked up from the same intermediate /learn/ state. The page's actual prior type was what-is.

💡 Pre-existing issues in touched files (optional)

  • [L1] content/what-is/_index.md"frontmatter URL ? collides with ?"Pre-existing: this is the PR-internal rename, not a live clash. The frontmatter check compared the deleted content/what-is/_index.md against its replacement content/resources/_index.md, which declares /what-is/ as an alias precisely so the old landing URL keeps resolving. The collision is the intended handoff.

✅ Resolved since last review

  • [L1] content/resources/_index.md / content/events/_index.md — the /resources alias collision is fixed: content/events/_index.md dropped the - /resources alias entry, so the new /resources/ section landing no longer competes with the events page for that URL. A repo-wide sweep found no other page declaring /resources as an alias (resolved in da9c50b9).

  • [L72] infrastructure/cloudfrontFunctions.ts — the CloudFront markdown-negotiation allowlist now excludes the bare /what-is/ landing (uri.indexOf('/what-is/') === 0 && uri !== '/what-is/'), matching the suggested fix exactly. Checked against the handler's own eligibility/rewrite logic: /what-is/ is no longer rewritten (avoiding the 404), while /what-is/<slug>/, /resources/, and /resources/ article URLs are still correctly rewritten for Accept: text/markdown clients (resolved in da9c50b9).

  • [L80] layouts/partials/schema/collectors/main-entity.html — the stale learn comment now reads resources, matching the surrounding branch and the adjacent line (resolved in da9c50b9).

  • [L17] layouts/resources/single.html — the $section assignment's indentation is restored to match every sibling line in the same <div> (resolved in da9c50b9).

  • [L342] .github/workflows/claude-update.yml — the Vale step's comment now lists content/resources alongside content/docs, content/blog, and content/tutorials, matching the four paths the grep on line 359 actually filters on (resolved in da9c50b9).

  • [L85] layouts/resources/list.html — concede: the author confirms data-track="what-is-filter-*" is intentional, not an oversight — the historical event ids are kept so analytics stays comparable across the rebrand, while the DOM contract (data-resources-filter, resources-list.ts) was renamed separately for consistency. A one-line comment above the <nav> now documents the reasoning inline (resolved in da9c50b9).

📜 Review history

  • 2026-08-05T22:49:12Z — Two blockers: the new /resources/ landing collides with an existing /resources alias on the events page, and the CloudFront markdown allowlist still rewrites the now-artifact-less /what-is/ landing; five "contradicted" claims triaged as artifacts of the branch's intermediate /learn/ naming. (e225342)
  • 2026-08-05T23:08:51Z — Re-reviewed after fix push (1 new commit, da9c50b9): both 🚨 Outstanding blockers and all three ⚠️ Low-confidence formatting/comment fixes resolved; conceded the data-track analytics-id dispute (author confirms the ids are intentional, now documented inline). 🚨 Outstanding and ⚠️ Low-confidence are both empty.

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

Important

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

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

@github-actions github-actions Bot added review:outstanding-issues Claude review completed; outstanding has author-actionable findings and removed review:in-progress Claude review is currently running labels Aug 5, 2026
…otiation

- content/events/_index.md claimed /resources as an alias (added when the
  migration hub was removed in #20247), which competed with the new section
  landing for the same output path. Drop it; /resources now belongs to the
  explainer section, and /webinar and /webinars still redirect to /events/.
- The CloudFront markdown allowlist matched the bare /what-is/ landing on a
  plain prefix test, so an Accept: text/markdown request would rewrite to
  /what-is/index.md — an artifact that no longer exists now that the landing
  is only an alias. Exclude the bare landing; pinned /what-is/<slug>/ paths
  still negotiate normally.
- Fix a stale 'learn' comment in the schema collector, restore indentation
  lost in layouts/resources/single.html, refresh the Vale path list comment,
  and note that the filter's what-is-* data-track ids are kept deliberately.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxdvcXL9p6GrBM6YnHdSP1
@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 5, 2026

CamSoper commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

@claude #update-review

Both blockers were real and are fixed in da9c50b9, along with the three cosmetic notes. One item disputed.

Fixed

  • /resources alias collision — confirmed: content/events/_index.md L27 declared - /resources (added by Remove migration hub #20247 when the migration hub was removed). Alias dropped. Worth noting for reviewers: /resources was itself a legacy resources-hub URL that got parked on /events/, so pointing it at the explainer directory is arguably closer to its original meaning than the events redirect was. /webinar and /webinars still redirect to /events/ — verified in the build.

  • CloudFront bare-landing rewrite — confirmed, and it was a genuine new 404: public/what-is/index.md is not emitted once the landing becomes an alias, while the prefix test matched /what-is/. Applied the suggested exclusion and exercised the handler directly:

    request (Accept: text/markdown) rewritten to
    /what-is/ /what-is/ (untouched — correct)
    /what-is/what-is-devops/ /what-is/what-is-devops/index.md
    /resources/ /resources/index.md
    /docs/install/ /docs/install/
  • Stale learn comment in main-entity.html, the indentation layouts/resources/single.html lost during a rebase conflict resolution, and the Vale path-list comment in claude-update.yml — all corrected.

Disputed / clarified

  • data-track="what-is-filter-*" — intentional, not an oversight: keeping the historical event ids means the rebrand doesn't sever analytics continuity, whereas the DOM contract had to be renamed to stay consistent with resources-list.ts. I've added a comment above the <nav> saying so, per your suggestion.

On the confidence notes: your read of the /learn/ intermediate-state artifacts is right — the five "contradicted" claims are all from commits superseded by e225342. Also flagging that the build preflight classifying this as content-only is worth treating as a real gap for this PR specifically, since it renames layout directories and a data file. make build and make lint pass locally, and I verified on the deployed preview that all pinned /what-is/<slug>/ URLs serve full pages with no meta-refresh, /what-is/ redirects to /resources/, and /learn still redirects to /tutorials/.


Generated by Claude Code

@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 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

🤖 Review updated on @CamSoper'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 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge domain:docs PR touches technical docs domain:infra PR touches workflows, scripts, infra, Makefile, or build config domain:mixed PR touches more than one domain domain:website PR touches marketing, pricing, legal, or competitive landing pages review:no-blockers Claude review completed cleanly; outstanding is empty

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants