Fix latent @id mismatches in unwired product-entities.html / related-content.html - #21071
Fix latent @id mismatches in unwired product-entities.html / related-content.html#21071workprentice[bot] wants to merge 1 commit into
Conversation
…content.html Both partials are confirmed unwired dead code (grep-verified: never called from graph-builder.html or any collector), so this changes zero rendered output today. Fixing the dangling @id references now so whoever eventually wires these into graph-builder.html does not inherit pre-existing reference-integrity bugs. product-entities.html: - The 4x isPartOf reference to the Pulumi Platform SoftwareApplication node used "https://www.pulumi.com/product/#pulumi-platform", but that node is only ever defined at the homepage root, "https://www.pulumi.com/#pulumi-platform" (graph-builder.html). This was the audit finding (PR #20908). - Sister bugs in the same file, same defect class: the CLI, Cloud, ESC, and Insights entries used made-up @ids (#pulumi-cli, #software) that no collector anywhere defines. Every product page's real main entity id is the relative "#main-content" emitted by product-entity.html, so these now point at "<product page>#main-content" instead. - The ESC and Insights entries also used the pre-redirect URLs /product/esc/ and /product/pulumi-insights/, which are now 301 aliases onto /product/secrets-management/ and /product/insights-governance/ respectively. Updated both the @id and url fields to the canonical pages. related-content.html: - Docs/tutorial cross-links used "#article", "#software", and "#course" @id fragments that no collector defines; the real main entity id on every page is "#main-content". - The tutorial-to-docs links pointed at /docs/clouds/{cloud}/get-started/, which now redirect (301) to /docs/iac/get-started/{cloud}/. - The doc-to-tutorial links declared @type "Course", but no collector in the pipeline ever emits Course; rendering the real tutorial pages through an isolated Hugo harness confirms they emit TechArticle. The Article stubs for cloud docs were also updated to TechArticle to match how article-entity.html actually types docs pages. Verified with an isolated Hugo harness that copies the real layouts/partials and content trees and renders schema/graph-builder.html for every affected page: rendered output (all 80 pages) is byte-identical before and after this change, confirming zero live-render impact, and every @id this change introduces matches a node the harness actually emits on the real page. --- 🧠 This PR was created by workprentice (https://github.com/workprentice).
Pre-merge Review — Last updated 2026-08-22T12:57:59ZTip Summary: This is an infrastructure change to two JSON-LD schema partials — Review confidence:
Investigation log
🔍 Verification trail23 claims extracted · 8 verified · 0 unverifiable · 0 contradicted
🚨 Outstanding in this PRNo outstanding findings in this PR.
|
|
Your site preview for commit 8f5fa6d is ready! 🎉 http://www-testing-pulumi-docs-origin-pr-21071-8f5fa6dd.s3-website.us-west-2.amazonaws.com |
Lighthouse Performance ReportCommit: 8f5fa6d | Metric definitions
|
This closes out the two latent JSON-LD @id mismatches identified in the 2026-08-15 audit (PR #20908) for
layouts/partials/schema/utils/product-entities.htmlandlayouts/partials/schema/utils/related-content.html. Both partials are confirmed unwired dead code today (grep-verified: nothing callsproduct-entities.htmlorrelated-content.htmlfromgraph-builder.htmlor any collector), so this changes zero live rendered output. The fix exists so whoever eventually wires either partial in doesn't inherit a pre-existing dangling reference.What was dangling and what it now resolves to
product-entities.html:isPartOfreference to the Pulumi Platform node usedhttps://www.pulumi.com/product/#pulumi-platform. The real node (graph-builder.html) only ever exists at the homepage root,https://www.pulumi.com/#pulumi-platform. This is the audit's original finding.#pulumi-cli,#software) that no collector defines anywhere in the pipeline. Every product page's real main-entity id is the relative#main-contentemitted byproduct-entity.html, so each now points at<that product page>#main-content./product/esc/and/product/pulumi-insights/, both now 301 aliases onto/product/secrets-management/and/product/insights-governance/. Updated both@idandurl.related-content.html:#articleand#softwarefragments no collector defines; the real id is#main-content./docs/clouds/{cloud}/get-started/, which now redirect (301) to/docs/iac/get-started/{cloud}/.@type: Course, which nothing in the pipeline ever emits. Rendering the real tutorial pages through an isolated Hugo harness shows they emitTechArticle. Updated the type and the#course/#articlefragments to match, and updated the parallelArticlestubs for the cloud docs pages toTechArticleto match howarticle-entity.htmlactually types docs pages.Why beyond the ticket
The ticket only called out the 4x
#pulumi-platformcase inproduct-entities.html. The other issues are the same defect class in the same two files (dangling @id references to nodes that don't exist, or stale pre-redirect URLs), so I fixed the whole set in one pass rather than leaving a partial fix that would need a second PR to finish.How this was verified
Live pulumi.com fetches from this environment return 404 (bot-blocked), so I built an isolated Hugo harness: copied the real
layouts/partialsandcontenttrees fromorigin/masterinto a minimal site, renderedschema/graph-builder.htmlfor the homepage, every affected product page,/docs/get-started/, all four/docs/iac/get-started/{cloud}/pages, and all four/tutorials/creating-resources-{cloud}/pages, and parsed the actual@id/@typepairs each page emits. Every@idthis PR introduces matches a node the harness confirmed exists. I then rendered the full 80-page harness output before and after this change and diffed it: byte-identical, confirming the partials remain fully unwired and this PR has zero effect on shipped HTML.🧠 This PR was created by workprentice.