[CONTENT SPRINT] Close the CVE-to-AMI Loop with Pulumi and Neo#18967
[CONTENT SPRINT] Close the CVE-to-AMI Loop with Pulumi and Neo#18967sicarul wants to merge 1 commit into
Conversation
Social Media Reviewcontent/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.mdX — PASSLinkedIn — PASSBluesky — PASSSuggestions (advisory)These are stylistic notes — they don't block the post. X
Bluesky
Updated for commit |
Docs review —
|
|
Your site preview for commit 0a4aa70 is ready! 🎉 http://www-testing-pulumi-docs-origin-pr-18967-0a4aa707.s3-website.us-west-2.amazonaws.com |
Lighthouse Performance ReportCommit: 336b9c5 | Metric definitions
|
336b9c5 to
a7ec4e2
Compare
a7ec4e2 to
a38a072
Compare
|
@claude please review again. I rewrote this branch history to a single clean commit on current |
|
Claude finished @sicarul's task in 1m 41s —— View job Docs re-review —
|
| Previous concern | Status |
|---|---|
.sisyphus/ agent artifacts |
Removed — PR now contains only the 3 blog files |
new_content.md planning doc (internal customer signals) |
Removed |
theme/stencil/yarn.lock unrelated change |
Reverted |
| Social copy single-paragraph FAIL (X / LinkedIn / Bluesky) | All three blocks now have 2 paragraphs with a blank line, using YAML | literal scalars — should pass the next social-media-review run |
Style: easy to start in LinkedIn copy |
Replaced with quick to start ✓ |
Casing: Pulumi Review Stacks |
Section now reads "Review stacks and canary deployments" and the body uses "Pulumi previews" — phrase is gone ✓ |
| Branch history | Confirmed single clean commit (a38a072) on top of current master |
Optional polish — still applicable
A few of the previous content notes weren't addressed; flagging them again in case you want to take them before publish on 2026-05-26. None are blockers.
-
index.md:31— hedge wordoften(STYLE-GUIDE.md flags hedging language):Traditional approaches involve manual spreadsheets or disconnected scanning tools that lack the context of your infrastructure code. Pulumi changes this by integrating security directly into the deployment lifecycle. By combining [Pulumi Insights](/docs/insights/), [Neo](/product/neo/), and [Pulumi Policies](/docs/insights/policy/), you can create a closed-loop system for AMI refreshes. -
index.md:48andindex.md:54— Insights query operatormodified:<2026-04-13. I checkedcontent/docs/insights/discovery/search.md:125-128again; the documented operators formodified:are exact (modified:2023-03-31), range (modified:[2023-01-01 to 2023-03-31]), and>=. The strict-less-than form (<without=) isn't listed. If you've verified it works in Pulumi Cloud, no change needed — otherwise switch to the documented range form:(type:aws:ec2/launchTemplate:LaunchTemplate OR type:aws:ec2/instance:Instance) modified:[* to 2026-04-13]and similarly for the property-search example on line 54.
-
index.md:43— "Pulumi Cloud search" link. Currently links to/product/pulumi-cloud/, but the feature being demonstrated in the next two code blocks is Resource Search. Linking to/docs/insights/discovery/search/lands readers on the syntax page they need to understand the queries that follow. -
index.md:168-170— generic conclusion. "Security is a continuous process, not a destination" doesn't give the reader a next step. Consider closing with a concrete pointer, e.g. a{{< blog/cta-button >}}to the Pulumi Insights or Neo getting-started page, or a "Try this with your own AMIs by…" line.
Publishing-readiness checklist (unchanged from last pass, all still ✓ except the design item)
-
social:block present and now multi-paragraph for X / LinkedIn / Bluesky -
meta_imageset (meta.png) - `` break present (line 35)
- Author
pablo-seibeltexists indata/team/team/ - Title 45 chars (≤60), meta description 140 chars (50–160)
- All internal links resolve
- Code blocks have language specifiers
- No em dashes
-
needs-design— meta image / feature image still flagged in the PR description as potentially placeholder; resolve before 2026-05-26
Summary
PR scope is clean and the social formatting fix should unblock the social-media-review bot on its next run. The four remaining items above are nice-to-haves rather than blockers — your call on which (if any) to take.
- Verify the PR scope is now blog-only
- Check that previous review feedback was applied
- Re-run publishing-readiness checklist on the post
- Post the updated review
• Branch:blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo
|
@claude please review again. Branch history is now a single clean commit on current origin/master. The PR diff contains only content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md plus feature.png and meta.png. Social-review is passing, and actionable content feedback has been addressed. |
|
Claude finished @sicarul's task in 2m 6s —— View job Docs re-review —
|
| Item | Status |
|---|---|
| PR scope | Diff is exactly 3 files: content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/{index.md,feature.png,meta.png} ✓ |
| Branch history | Single commit a38a072 on top of current master ✓ |
| Social copy formatting | twitter, linkedin, bluesky all now use YAML | literal scalars with a blank line between paragraphs (lines 15–26) ✓ |
| Style: "easy" → "quick" | index.md:20 now reads "quick to start and hard to close" ✓ |
| Casing: "Pulumi Review Stacks" | Section is now "Review stacks and canary deployments" (index.md:156); body uses "Pulumi previews" ✓ |
📝 Remaining items — your call, not blockers
You stated these aren't actionable on your side; flagging them here only so the next reader has the trail.
index.md:31— hedge wordoften— STYLE-GUIDE.md flags hedging language. Easy drop: "Traditional approaches often involve" → "Traditional approaches involve".index.md:48andindex.md:54—modified:<2026-04-13— the documented Insightsmodified:operators (content/docs/insights/discovery/search.md:125–128) are exact, range, and>=. Strict<isn't shown. If you've confirmed it works against live Pulumi Cloud, fine to ship as-is; otherwise the documented range form ismodified:[* to 2026-04-13].index.md:43— "Pulumi Cloud" link — currently/product/pulumi-cloud/. The two code blocks that follow are Resource Search syntax, so linking directly to/docs/insights/discovery/search/lands readers on the relevant page.index.md:170— generic conclusion — "Security is a continuous process, not a destination" doesn't give a next step. A{{< blog/cta-button >}}to Insights or Neo getting-started, or a concrete "try this with your own AMIs" pointer, would close the loop the post itself argues for.
⚠️ One small new flag
index.md:26 (Bluesky) — the second paragraph reads Learn more in the post. That's a generic pointer the social-media-review bot flagged in its advisory notes on the previous run, and it's likely to be flagged again on subsequent passes. Not blocking, but if you want to neutralize the bot's suggestions in one shot, consider naming the concrete reader takeaway, e.g. "See the policy pack and CI snippets that gate the deploy." (X and LinkedIn already do this — only Bluesky's CTA is currently generic.)
Publishing-readiness checklist
-
social:block:twitter,linkedin,blueskyall present, multi-paragraph -
meta_image: meta.pngset (138 KB) andfeature_image: feature.pngset (27 KB) — both non-empty - `` break present (
index.md:35) - Author
pablo-seibeltexists indata/team/team/pablo-seibelt.toml - Title 45 chars (≤60), meta description 140 chars (50–160)
- Internal links resolve (
/docs/insights/,/product/neo/,/docs/insights/policy/,/product/pulumi-cloud/) - Code blocks have language specifiers (
text,typescript,bash) - No em dashes detected
-
needs-design: PR description still flags the meta/feature images as potential placeholders — confirm with Design before the 2026-05-26 publish date
Summary
PR scope is clean, social formatting fix should green-light the social-media-review bot, and the post itself reads well end-to-end. Ready to ship once needs-design is resolved — the remaining content notes are stylistic preferences, not blockers.
- Verify PR scope (3 files only)
- Confirm single clean commit on
master - Re-check social frontmatter formatting
- Re-check style-guide items
- Re-check technical-accuracy items
- Run publishing-readiness checklist
- Post the updated review
• Branch:blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo
|
@claude please review again. This request is after the latest pushed head commit |
|
Claude finished @sicarul's task in 1m 43s —— View job Docs re-review —
|
| Check | Result |
|---|---|
| PR scope vs. parent | Exactly 3 files added: content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/{index.md,feature.png,meta.png} — 170 lines added, 0 removed ✓ |
| Branch history | Single commit a38a072 on top of master ✓ |
| Author | data/team/team/pablo-seibelt.toml exists; avatar at static/images/team/pablo-seibelt.jpg ✓ |
| Images | feature.png 942×628 (27 KB), meta.png 1200×628 (138 KB) — both non-empty ✓ |
| Social copy formatting | twitter, linkedin, bluesky all use YAML ` |
| Title / meta length | Title 45 chars (≤60), meta description 140 chars (50–160) ✓ |
| Markdown hygiene | Code blocks tagged (text, typescript, bash); `` break at line 35; no em dashes ✓ |
| Internal links | /docs/insights/, /product/neo/, /docs/insights/policy/, /product/pulumi-cloud/ all resolve ✓ |
📝 Optional polish — acknowledged as not taken
You've stated these aren't actionable on your side. Recording once more so the trail is clear for whoever publishes on 2026-05-26.
index.md:31— hedge wordoften.index.md:48&index.md:54—modified:<2026-04-13(strict<not in the documented Insights search syntax atcontent/docs/insights/discovery/search.md:125–128).index.md:43— "Pulumi Cloud" link points to/product/pulumi-cloud/rather than the Resource Search docs the code blocks demonstrate (/docs/insights/discovery/search/).index.md:170— generic conclusion ("Security is a continuous process, not a destination"), no concrete next-step CTA.index.md:26(Bluesky) —Learn more in the post.is a generic pointer the social-media-review bot has flagged advisorily; X and LinkedIn already have specific CTAs.
Publishing-readiness checklist
-
social:block:twitter,linkedin,blueskyall present, multi-paragraph -
meta_image: meta.png(138 KB) andfeature_image: feature.png(27 KB) — both non-empty - `` break present (
index.md:35) - Author
pablo-seibeltexists and has an avatar - Title ≤60 chars, meta description 50–160 chars
- Internal links resolve
- Code blocks have language specifiers
- No em dashes
-
needs-design— PR description still flagsfeature.png/meta.pngas potential placeholders; confirm with Design before 2026-05-26
Summary
PR scope is clean, content reads well, social formatting is correct, and previously-flagged blockers are all resolved. Ready to ship once needs-design is signed off. The remaining items above are stylistic preferences you've already declined — your call to keep them as-is.
- Verify PR scope (3 files only) against
origin/master - Re-read
index.mdand confirm previously resolved items still resolved - Re-check the remaining optional polish items for current status
- Run publishing-readiness checklist
- Post the updated review
• Branch:blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo
a38a072 to
487164c
Compare
|
@claude please review again. This PR is now marked as draft, the needs-design label has been removed, and the latest pushed head is |
|
Claude finished @sicarul's task in 2m 8s —— View job Docs re-review —
|
| Check | Result |
|---|---|
PR scope vs. origin/master |
Exactly 3 files added: content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/{index.md,feature.png,meta.png} — 170 lines added, 0 removed ✓ |
| Branch history | Single commit 487164c rebased onto current master ✓ |
| Author | data/team/team/pablo-seibelt.toml + static/images/team/pablo-seibelt.jpg exist ✓ |
| Images | feature.png 942×628 (27 KB), meta.png 1200×628 (138 KB) — both non-empty ✓ |
| Social copy formatting | twitter, linkedin, bluesky all use YAML | literal scalars with blank line between paragraphs (lines 15–26) ✓ |
| Title / meta length | Title 45 chars (≤60), meta description 140 chars (50–160) ✓ |
| Markdown hygiene | Code blocks tagged (text, typescript, bash); `` break at line 35; no em dashes ✓ |
| Internal links | /docs/insights/, /product/neo/, /docs/insights/policy/ all resolve ✓ |
🆕 Improvements since pass 3
- Insights queries (
index.md:48andindex.md:54) now usemodified:<now-30d. I want to retract my previous technical-accuracy flag: the<operator IS documented (content/docs/insights/discovery/search.md:263— "Thecreatedandmodifiedfields can be queried for a range of values with>,>=,<,<=, and[a to b]."), and thenow-30drelative-date form appears as a worked example atcontent/docs/insights/discovery/get-started/using-resource-explorer.md:39. The queries in the post are valid and match docs precedent. Apologies for the false alarm on previous passes. index.md:43— "Pulumi Cloud" link now points to/docs/insights/(was/product/pulumi-cloud/). Still not the Resource Search syntax page itself, but the Insights landing page is a defensible target for a paragraph that introduces the feature.
📝 Remaining optional polish — your call
These are unchanged from previous passes; recording one more time for the trail. None are blockers.
index.md:31— hedge wordoften— STYLE-GUIDE.md flags hedging. Trivial drop: "Traditional approaches often involve" → "Traditional approaches involve".index.md:43— link text vs. target — link reads "Pulumi Cloud" but goes to/docs/insights/. Either rewrite the link text ("Pulumi Insights search") or retarget to/docs/insights/discovery/search/so the link surface matches the destination.index.md:170— generic conclusion — "Security is a continuous process, not a destination" doesn't give a next step. A{{< blog/cta-button >}}to Insights or Neo getting-started, or a "try this with your own AMIs" pointer, would close the loop the post itself argues for.index.md:26(Bluesky) —Learn more in the post.is the only generic CTA among the three social blocks (X and LinkedIn already name specific takeaways). The social-media-review bot has advisorily flagged it on prior passes.
Publishing-readiness checklist
-
social:block:twitter,linkedin,blueskyall present, multi-paragraph -
meta_image: meta.png(138 KB) andfeature_image: feature.png(27 KB) — both non-empty - `` break present (
index.md:35) - Author
pablo-seibeltexists and has an avatar - Title ≤60 chars, meta description 50–160 chars
- Internal links resolve
- Code blocks have language specifiers
- No em dashes
- Insights query syntax matches documented forms
-
needs-designlabel removed (confirmed by PR state) - PR is currently in draft — flip to ready-for-review before publish on 2026-05-26
Summary
PR is content-ready. With needs-design removed and the technical-accuracy concern retracted, the only remaining gate is moving the PR out of draft when you're ready to merge. The four optional polish items above are stylistic preferences — your call.
- Verify PR scope (3 files only) against
origin/master - Confirm branch history and HEAD
487164c7 - Re-read
index.mdand re-check previously raised items - Re-verify Insights query syntax against docs
- Re-check publishing-readiness (note new draft + label state)
- Post the updated review
• Branch:blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo
487164c to
0a4aa70
Compare
|
@claude please review the latest pushed changes, including the generated blog feature and meta images. |
|
Claude finished @sicarul's task in 2m 21s —— View job Docs re-review —
|
| Check | Result |
|---|---|
| PR scope vs. parent | Exactly 3 files added: content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/{index.md,feature.png,meta.png} — 170 lines added, 0 removed ✓ |
| Branch history | Single commit 0a4aa70 rebased onto current master lineage ✓ |
| Author | data/team/team/pablo-seibelt.toml + static/images/team/pablo-seibelt.jpg exist ✓ |
| Social copy formatting | twitter, linkedin, bluesky all use YAML | literal scalars with blank line between paragraphs (lines 15–26) ✓ |
| Title / meta length | Title 45 chars (≤60), meta description 140 chars (50–160) ✓ |
| Markdown hygiene | Code blocks tagged (text, typescript, bash); `` break at line 35; no em dashes ✓ |
| Internal links | /docs/insights/, /product/neo/, /docs/insights/policy/ all resolve ✓ |
| Insights query syntax | modified:<now-30d valid — < operator documented at content/docs/insights/discovery/search.md:263; now-Nd form documented at content/docs/insights/discovery/get-started/using-resource-explorer.md:39 ✓ |
🆕 What changed since pass 4
The feature and meta images were regenerated and are now full-resolution, properly composited assets — they look like the real product, not placeholders:
| Image | Dimensions | Size | Notes |
|---|---|---|---|
feature.png |
1884 × 1256 (was 942 × 628) | 263 KB (was 27 KB) | "Neo" feature template — dark purple background with the Neo mascot (duck-with-goggles in a frame) and circuit-line motif. On-brand and topical for a Pulumi + Neo post. |
meta.png |
1200 × 628 | 241 KB (was 138 KB) | OpenGraph card with the post title ("Close the CVE-to-AMI Loop with Pulumi and Neo") set in white sans-serif, Pulumi logo bottom-left, Neo mascot right side. Title fits cleanly in four lines with good contrast. |
This resolves the needs-design concern from earlier passes — the images are no longer flagged as placeholders.
📝 Optional polish — unchanged from pass 4, your call
These are stylistic preferences, not blockers. Recording one more time for the trail:
index.md:31— hedge wordoften— STYLE-GUIDE.md flags hedging. Easy drop: "Traditional approaches often involve" → "Traditional approaches involve".index.md:43— link text vs. target — link text reads "Pulumi Cloud" but goes to/docs/insights/. Either rewrite the link text (e.g., "Pulumi Insights search") or retarget to/docs/insights/discovery/search/so the link surface matches the destination.index.md:170— generic conclusion — "Security is a continuous process, not a destination" doesn't give a next step. A{{< blog/cta-button >}}to Insights or Neo getting-started, or a "try this with your own AMIs" pointer, would close the loop the post itself argues for.index.md:26(Bluesky) —Learn more in the post.— only generic CTA among the three social blocks (X and LinkedIn already name specific takeaways). The social-media-review bot has advisorily flagged it on prior passes.
Publishing-readiness checklist
-
social:block:twitter,linkedin,blueskyall present, multi-paragraph -
meta_image: meta.png(241 KB, 1200×628) andfeature_image: feature.png(263 KB, 1884×1256) — both real generated images - `` break present (
index.md:35) - Author
pablo-seibeltexists with avatar - Title ≤60 chars, meta description 50–160 chars
- Internal links resolve
- Code blocks have language specifiers
- No em dashes
- Insights query syntax matches documented forms
-
needs-designlabel removed and images are no longer placeholders - PR is currently in draft — flip to ready-for-review before publish on 2026-05-26
Summary
PR is content- and design-ready. The only remaining gate is moving the PR out of draft when you're ready to merge. The four optional polish items above are stylistic preferences — your call.
- Verify PR scope (3 files only) and HEAD commit
- Inspect
feature.pngandmeta.png(dimensions, file size, visual content) - Re-read
index.mdand re-check previously raised items - Run publishing-readiness checklist
- Post the updated review
• Branch:blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo
Why this content is interesting
What we took into account
Why it is useful to an end user
Design need
needs-designbecause the post needs a final meta image before publication.feature.pngandmeta.pngfiles are placeholders unless Design chooses to reuse or adapt them.Metadata
🤖 Generated with OpenCode