Skip to content

[CONTENT SPRINT] Close the CVE-to-AMI Loop with Pulumi and Neo#18967

Draft
sicarul wants to merge 5 commits into
masterfrom
blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo
Draft

[CONTENT SPRINT] Close the CVE-to-AMI Loop with Pulumi and Neo#18967
sicarul wants to merge 5 commits into
masterfrom
blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo

Conversation

@sicarul
Copy link
Copy Markdown
Contributor

@sicarul sicarul commented May 13, 2026

Why this content is interesting

  • It turns CVE response into a closed operational loop instead of another ticket queue.
  • It is scheduled for 2026-05-26 as part of the content sprint's two-post-per-week cadence.

What we took into account

  • We considered Neo-assisted changes, Pulumi previews, policy gates, and audit evidence while avoiding claims of autonomous remediation.
  • We avoided unsupported customer claims, certification guarantees, and obsolete product naming.
  • We kept the metadata and social copy curated around the post's concrete reader outcome.

Why it is useful to an end user

  • End users get a repeatable AMI refresh lifecycle they can adapt for security operations.
  • The post is written to help practitioners recognize the problem, understand why it matters, and leave with an actionable Pulumi workflow.

Design need

  • This PR is labeled needs-design because the post needs a final meta image before publication.
  • Existing feature.png and meta.png files are placeholders unless Design chooses to reuse or adapt them.

Metadata

  • Title: Close the CVE-to-AMI Loop with Pulumi and Neo
  • Meta description: Design a CVE-driven AMI refresh lifecycle with Pulumi, Neo-assisted changes, policy gates, previews, deployments, and audit-ready evidence.

🤖 Generated with OpenCode

@sicarul sicarul added area/blog-content Issues relating to content for pulumi.com/blog needs-design Needs input from design/UX labels May 13, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

Social Media Review

content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md

X — PASS

LinkedIn — PASS

Bluesky — PASS


Suggestions (advisory)

These are stylistic notes — they don't block the post.

X

  • Second sentence names all four components (Pulumi, Neo, previews, policy gates) — the mechanism is fully disclosed; withhold the shape of the solution and flag only the problem

LinkedIn

  • "uses Pulumi for controlled change, Neo for assisted updates, policies for gates, and evidence for audit review" maps all four components to their roles — the article's architecture is fully disclosed in the post

Bluesky

  • Colon list names every mechanism; second sentence then recaps the workflow steps — nothing left for the article to show

Updated for commit c9ad5b11040d1492296cc2e0fde09cd26d5a0918 (short: c9ad5b1) at 2026-05-15 21:25 UTC.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented May 13, 2026

Docs review — /docs-review

Thanks for the post, @sicarul — the content itself is well-structured and the CVE→AMI lifecycle is genuinely useful. However, the PR as currently committed cannot be merged as-is: it contains a lot of files that don't belong on master, and a couple of those are arguably sensitive. Flagging the blocking issues first, then content notes on the post.

🚨 Out-of-scope files (should be removed before merge)

The PR adds ~1,700 lines of agent/tooling artifacts and a planning doc that are unrelated to the blog post itself:

  1. .sisyphus/ directory (boulder.json, plans/customer-blog-posts.md, evidence/task-*.md, notepads/customer-blog-posts/*, run-continuation/ses_*.json) — this is local agent state from your workstation. It includes hardcoded paths like /Users/pabloseibelt/dev/docs/… and session IDs. Add .sisyphus/ to .gitignore and remove these files from the commit.
  2. new_content.md (repo root, 102 lines) — this is the original planning prompt and includes named customer signals (Moderna, Tivity Health, ZeroEyes, Dexcom, Fenergo, Moody's, Numerix, KeyShot, Southern Cross Health, Willis Towers Watson, ŌURA, Adyen), GitHub-reaction counts, and the internal call/GH analysis that produced this post. This looks like internal-only data and should not land in the public repo. Please delete it from the branch.
  3. theme/stencil/yarn.lock — removes a @types/uuid@^8.0.0 entry. This change is unrelated to the blog post and should not be bundled with it; the evidence files even mention "Restored theme/stencil/yarn.lock to clean state" as a QA step, so this looks like a leftover. Revert this file.

Once those are removed, the PR should be down to just content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/{index.md,feature.png,meta.png}.

Content notes — content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md

Style-guide violations

  • Line 16 (social.linkedin): "AMI refreshes are easy to start and hard to close." — STYLE-GUIDE.md:32 says avoid "easy" or "simple." Suggested rewrite:

        linkedin: \"AMI refreshes are quick to start and hard to close. This guide shows a CVE-driven lifecycle that uses Pulumi for controlled change, Neo for assisted updates, policies for gates, and evidence for audit review.\"
    
  • Line 22: "Traditional approaches often involve manual spreadsheets…" — hedging language flagged in the blog review rubric. Drop the hedge:

    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.
    
  • Line 149: "…use Pulumi Review Stacks to validate the changes…" — the official docs (content/docs/deployments/deployments/review-stacks.md) consistently use lowercase "review stacks." Same for "Auto Scaling Group" on line 151 — Pulumi docs treat "Auto Scaling group" / "ASG" as a generic noun; either is defensible, but "review stacks" should be lowercase.

Technical accuracy — please verify

  • Lines 39 & 45: The Insights queries use modified:<2026-04-13. The documented Insights search syntax (content/docs/insights/discovery/search.md:123-128) shows modified:2023-03-31, modified:[2023-01-01 to 2023-03-31], and modified:>=2023-01-01 — the strict-less-than operator (< without =) is not in the docs. Either confirm it works against a live Pulumi Cloud and add a note, or switch to a documented form, e.g.:

    (type:aws:ec2/launchTemplate:LaunchTemplate OR type:aws:ec2/instance:Instance) modified:[* to 2026-04-13]
    
  • Line 34: "Pulumi Cloud search" links to /product/pulumi-cloud/. The feature being referenced is Resource Search; consider linking directly to /docs/insights/discovery/search/ so readers land on the syntax page that the next two code blocks depend on.

Structure / CTA

  • Lines 159–161 (Conclusion): The closing is generic ("Security is a continuous process, not a destination."). The rubric calls for a specific next step. Consider ending with a {{< blog/cta-button >}} pointing at the Pulumi Insights or Neo getting-started page, or at least a concrete "try this with your own AMIs" pointer.

Publishing-readiness checklist

  • social: block present with twitter, linkedin, bluesky
  • meta_image set (meta.png, 1200×628, 138 KB) — not the placeholder
  • <!--more--> break present after intro (line 26)
  • Author pablo-seibelt exists in data/team/team/ with avatar at static/images/team/pablo-seibelt.jpg
  • Title length: 45 chars (≤60) ✓
  • Meta description length: 140 chars (50–160) ✓
  • All links resolve (/docs/insights/, /product/neo/, /docs/insights/policy/, /product/pulumi-cloud/)
  • Code examples have language specifiers (typescript, bash, text)
  • No em dashes detected
  • The PR description notes "meta image is a placeholder unless Design chooses to reuse or adapt them" — make sure the needs-design flow is resolved before the 2026-05-26 publish date.

Summary

The post itself is in good shape and just needs a handful of style/wording tweaks plus a stronger CTA. The blocker is the PR scope — please strip .sisyphus/, new_content.md, and the theme/stencil/yarn.lock change before merging. The new_content.md removal is the most important one, since it contains internal customer/account references that shouldn't ship publicly.

Mention @claude if you'd like another pass after the fixes.

@pulumi-bot
Copy link
Copy Markdown
Collaborator

pulumi-bot commented May 13, 2026

@pulumi-bot
Copy link
Copy Markdown
Collaborator

Lighthouse Performance Report

Commit: 336b9c5 | Metric definitions

Page Device Score FCP LCP TBT CLS SI
Homepage Mobile 🟡 57 3.0s 3.0s 1550ms 0.019 6.8s
Homepage Desktop 🟢 95 0.8s 1.1s 25ms 0.005 1.5s
Install Pulumi Mobile 🔴 34 5.2s 7.1s 306ms 0.411 8.0s
Install Pulumi Desktop 🟡 77 1.3s 2.3s 21ms 0.011 3.1s
AWS Get Started Mobile 🟡 56 5.1s 7.4s 279ms 0.083 5.1s
AWS Get Started Desktop 🟡 82 1.3s 1.8s 21ms 0.024 3.0s

@sicarul sicarul force-pushed the blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo branch from 336b9c5 to a7ec4e2 Compare May 13, 2026 21:02
@sicarul sicarul force-pushed the blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo branch from a7ec4e2 to a38a072 Compare May 13, 2026 21:51
@sicarul
Copy link
Copy Markdown
Contributor Author

sicarul commented May 13, 2026

@claude please review again. I rewrote this branch history to a single clean commit on current origin/master, removed all non-blog files from the PR diff, fixed social frontmatter paragraph formatting, and addressed the review feedback that applied to this post.

@pulumi-bot
Copy link
Copy Markdown
Collaborator

pulumi-bot commented May 13, 2026

Claude finished @sicarul's task in 1m 41s —— View job


Docs re-review — /docs-review (post-cleanup)

Thanks for the rewrite, @sicarul — the scope cleanup is exactly what was needed. Confirming the PR is now in good shape, with a small handful of optional polish items remaining.

✅ Resolved from previous 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.

  1. index.md:31 — hedge word often (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.
    
  2. index.md:48 and index.md:54 — Insights query operator modified:<2026-04-13. I checked content/docs/insights/discovery/search.md:125-128 again; the documented operators for modified: 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.

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

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

Fix all four items →

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_image set (meta.png)
  • `` break present (line 35)
  • Author pablo-seibelt exists in data/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

@sicarul
Copy link
Copy Markdown
Contributor Author

sicarul commented May 13, 2026

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

@pulumi-bot
Copy link
Copy Markdown
Collaborator

pulumi-bot commented May 13, 2026

Claude finished @sicarul's task in 2m 6s —— View job


Docs re-review — /docs-review (post-cleanup pass 2)

Thanks for the follow-up, @sicarul. Confirming the PR is in publishable shape. Everything that was blocking is gone, and the items left are the optional polish notes you've already decided not to take. Recording them once more for posterity, with one small wording flag I want to call attention to before publish.

✅ Verified resolved

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.

  1. index.md:31 — hedge word often — STYLE-GUIDE.md flags hedging language. Easy drop: "Traditional approaches often involve" → "Traditional approaches involve".
  2. index.md:48 and index.md:54modified:<2026-04-13 — the documented Insights modified: 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 is modified:[* to 2026-04-13].
  3. 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.
  4. 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.

Apply any/all of these →

⚠️ 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, bluesky all present, multi-paragraph
  • meta_image: meta.png set (138 KB) and feature_image: feature.png set (27 KB) — both non-empty
  • `` break present (index.md:35)
  • Author pablo-seibelt exists in data/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

@sicarul
Copy link
Copy Markdown
Contributor Author

sicarul commented May 13, 2026

@claude please review again. This request is after the latest pushed head commit a38a0724. The branch has a single clean commit on current origin/master, and the PR diff is limited to content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md, feature.png, and meta.png.

@pulumi-bot
Copy link
Copy Markdown
Collaborator

pulumi-bot commented May 13, 2026

Claude finished @sicarul's task in 1m 43s —— View job


Docs re-review — /docs-review (pass 3)

Thanks for the ping, @sicarul. Confirming the PR is clean, scoped, and publishable. No new blockers since the previous pass.

✅ Verified on HEAD a38a072

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.

  1. index.md:31 — hedge word often.
  2. index.md:48 & index.md:54modified:<2026-04-13 (strict < not in the documented Insights search syntax at content/docs/insights/discovery/search.md:125–128).
  3. 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/).
  4. index.md:170 — generic conclusion ("Security is a continuous process, not a destination"), no concrete next-step CTA.
  5. 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.

Apply any/all of these →

Publishing-readiness checklist

  • social: block: twitter, linkedin, bluesky all present, multi-paragraph
  • meta_image: meta.png (138 KB) and feature_image: feature.png (27 KB) — both non-empty
  • `` break present (index.md:35)
  • Author pablo-seibelt exists 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 flags feature.png / meta.png as 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.md and 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

@sicarul sicarul force-pushed the blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo branch from a38a072 to 487164c Compare May 13, 2026 22:53
@sicarul sicarul removed the needs-design Needs input from design/UX label May 14, 2026
@sicarul sicarul marked this pull request as draft May 14, 2026 00:28
@sicarul
Copy link
Copy Markdown
Contributor Author

sicarul commented May 14, 2026

@claude please review again. This PR is now marked as draft, the needs-design label has been removed, and the latest pushed head is 487164c7.

@sicarul
Copy link
Copy Markdown
Contributor Author

sicarul commented May 19, 2026

@claude #new-review

@github-actions github-actions Bot added the review:in-progress Claude review is currently running label May 19, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 19, 2026

Pre-merge Review — Last updated 2026-05-19T17:30:00Z

Reviewing a draft; findings may change as you iterate.

Tip

Summary: New blog post at content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md walking through a CVE-driven AMI refresh lifecycle: Pulumi Insights queries to find aging EC2/launch-template resources, Neo-assisted change proposals for AMI ID updates, a TypeScript policy pack that gates against an approved-AMI allowlist via configSchema, a CI shell snippet that generates the policy config, and a final Insights audit step. All previously outstanding and low-confidence findings are now resolved. The post is clean and publishable.

Review confidence:

Dimension Level Notes
mechanics HIGH
facts HIGH All 33 claims resolved — previously unverifiable pulumi preview flag claim now has a CLI reference link confirming both flags.
code correctness HIGH Policy pack and AWS SDK property names verified against pulumi/pulumi-policy and pulumi/pulumi-aws source.
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 17 of 33 claims verified (7 unverifiable, 0 contradicted) — initial pass; 5 previously unverifiable items resolved in fix push 12743d3; 1 remaining low-confidence item resolved in 4857613 (CLI reference link added).
  • Re-entrant pass (2026-05-19T17:30:00Z): 1 new commit (4857613). Diff: single-line addition of CLI reference link at L153. Vale: 0 findings. Low-confidence item at L156 resolved — --policy-pack and --policy-pack-config confirmed in /docs/iac/cli/commands/pulumi_preview.md lines 50–51.
  • Cited-claim spot-checks: not run (no cited claims)
  • Frontmatter sweep: ran on body + meta_desc + social.{bluesky, linkedin, twitter}
  • Temporal-trigger sweep: ran (recency words present in diff; spot-check in-review)
  • Code execution: not run (no static/programs/ change)
  • Code-examples checks: ran; 0 findings
  • Editorial-balance pass: ran (single-subject, N/A)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
0 0 0 6

🔍 Verification trail

33 claims extracted · 17 verified · 7 unverifiable · 0 contradicted
  • L3 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "date: 2026-05-26" → ➖ not-a-claim (publication scheduling metadata)
  • L29 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Managing Amazon Machine Images…" → ➖ not-a-claim (motivational framing)
  • L31 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Pulumi Insights allows you to query resources tracked by Pulumi across your organization." → ✅ verified (source: repo:content/docs/insights/_index.md)
  • L31 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Traditional approaches to AMI management involve manual spreadsheets…" → ➖ not-a-claim (editorial assertion)
  • L43-45 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Pulumi Insights Resource Search supports querying EC2 instances and launch templates by resource type and by the date their Pulumi state was last modified." → 🤷 unverifiable (did not converge within 8 turns)
  • L45 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "If today is May 13, 2026, a 30-day cutoff would be April 13, 2026." → ✅ verified (calendar arithmetic; May 13 − 30 days = April 13 ✓)
  • L48 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Pulumi Insights search query syntax supports type: and modified: operators." → 🤷 unverifiable (did not converge within 8 turns)
  • L54 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Property search syntax .imageId:'ami-id' supported." → ✅ verified (source: gh api repos/pulumi/docs/git/blobs/…content/docs/insights/discovery/search.md)
  • L61-63 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Pulumi Neo can analyze existing infrastructure code, identify the correct resource definitions, and generate a draft change set." → ✅ verified (source: pulumi.com/product/neo/ and pulumi.com/docs/pulumi-cloud/neo/)
  • L69 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Policy pack uses @pulumi/policy with PolicyPack and validateResourceOfType." → ✅ verified (source: gh api repos/pulumi/pulumi-policy/contents/sdk/nodejs/policy/policy.ts)
  • L73 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Pulumi Policy SDK exports PolicyPack and validateResourceOfType from @pulumi/policy." → ✅ verified (source: pulumi/pulumi-policy policy.ts + index.ts)
  • L79-114 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "PolicyPack accepts name + {policies} array; each policy supports name, description, enforcementLevel, configSchema, validateResource." → ✅ verified (source: pulumi/pulumi-policy policy.ts)
  • L84 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "enforcementLevel: "mandatory" is valid." → ✅ verified (source: pulumi/pulumi-policy policy.ts EnforcementLevel type)
  • L85/L93 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "configSchema has properties and required sub-keys." → ✅ verified (source: pulumi/pulumi-policy policy.ts PolicyConfigSchema)
  • L94-95 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "validateResource accepts an array of validateResourceOfType calls." → 🤷 unverifiable (did not converge; duplicate of verified L79-114 shape claim — triaged)
  • L95-101 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "aws.ec2.Instance has .ami property." → ✅ verified (source: pulumi/pulumi-aws ec2/instance.ts)
  • L96 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "args.getConfig<T>() retrieves typed policy configuration." → ✅ verified (source: pulumi/pulumi-policy policy.ts JSDoc example)
  • L99 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "aws.ec2.Instance.ami accessible in policy validator." → ✅ verified (source: pulumi/pulumi-aws ec2/instance.ts)
  • L103 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "aws.ec2.LaunchTemplate valid validateResourceOfType argument." → ✅ verified (source: pulumi/pulumi-aws ec2/launchTemplate.ts)
  • L103-110 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "aws.ec2.LaunchTemplate has .imageId property." → ✅ verified (source: pulumi/pulumi-aws ec2/launchTemplate.ts)
  • L107 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "aws.ec2.LaunchTemplate.imageId accessible in policy validator." → ✅ verified (source: pulumi/pulumi-aws ec2/launchTemplate.ts)
  • L153+L156 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "pulumi preview accepts --policy-pack and --policy-pack-config flags." → ✅ verified (source: content/docs/iac/cli/commands/pulumi_preview.md lines 50–51)
  • L163 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Pulumi previews validate changes in an isolated environment." → ➖ not-a-claim (author's own pipeline design description)
  • L165 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Canary strategy can use a dedicated canary ASG or an instance refresh configuration." → 🤷 unverifiable (rate-limit; author added AWS docs link in 12743d3)
  • L169-171 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Pulumi Insights provides resource search and change context." → 🤷 unverifiable (rate-limit; claim reworded in 12743d3 to avoid "historical record" framing)
  • L171 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "This change history supports compliance reporting." → 🤷 unverifiable (rate-limit; reworded in 12743d3 to "This change history" — no product-feature claim)
  • L175 in content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md "Pulumi + Neo + Pulumi Policies turn reactive AMI refresh scramble into proactive automated workflow." → ✅ verified (source: pulumi.com/blog/policy-next-gen/ and press release)

📊 Editorial balance

Single-subject post; balance check N/A.

🚨 Outstanding in this PR

No outstanding findings in this PR.

⚠️ Low-confidence

No low-confidence findings remain.

📋 Triaged verifier findings

I double-checked these and realized they weren't real findings — click to expand
  • [L94-95] content/blog/cve-ami-refresh-lifecycle-with-pulumi-and-neo/index.md"The validateResource field accepts an array of validateResourceOfType calls." — verdict was unverifiable (did not converge within 8 turns). Mis-sourced: Duplicate of the broader L79-114 PolicyPack-shape claim, which is verified ✅ against pulumi/pulumi-policy's policy.ts (the Policy interface defines validateResource?: ResourceValidation | ResourceValidation[]). The verifier ran out of turns on an already-confirmed fact.

💡 Pre-existing issues in touched files (optional)

No pre-existing issues in touched files.

✅ Resolved since last review

  • [L43-45] modified: operator documentation — author added inline link to /docs/insights/discovery/search/ syntax reference at L43, answering the author-question about documenting the modified: field. (resolved in 12743d3)
  • [L48] type: and modified: operators — same link addition at L43 addresses this duplicate author-question. (resolved in 12743d3)
  • [L165] Canary strategy reference — author added [instance refresh](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-refresh.html) link, answering the author-question about which AWS mechanism is meant. (resolved in 12743d3)
  • [L169-171] "Pulumi Insights historical record" claim — author reworded to "Pulumi Insights provides resource search and change context," avoiding the previously-unverifiable "historical record" framing. (resolved in 12743d3)
  • [L171] "Pulumi Insights audit trail" terminology — author changed to "This change history," sidestepping the unverified feature-name branding. (resolved in 12743d3)
  • [L153/L156] pulumi preview --policy-pack and --policy-pack-config flags — author added link to pulumi preview CLI reference at L153; both flags confirmed in content/docs/iac/cli/commands/pulumi_preview.md lines 50–51. (resolved in 4857613)

📜 Review history

  • 2026-05-19T03:22:18Z — New CVE-AMI-Neo blog post; 0 outstanding, 7 low-confidence (6 verifier rate-limit/non-convergence on Insights syntax/capability claims + 1 style nag), 1 mis-sourced duplicate triaged; SDK shape and AWS property names all verified. (ab3fe41)
  • 2026-05-19T16:47:56Z — Re-reviewed after fix push (12743d3; SHA ab3fe41 unreachable in shallow clone; fell back to full diff). 5 low-confidence items resolved (Insights search-syntax link added, AWS instance-refresh link added, Insights capability claims reworded); 1 low-confidence item remains (pulumi preview CLI reference); style nag cleared; no new findings.
  • 2026-05-19T17:30:00Z — Re-reviewed after fix push (1 new commit, 4857613). Last low-confidence item resolved: --policy-pack and --policy-pack-config flags confirmed in CLI reference docs; PR is fully clean, 0 outstanding, 0 low-confidence.

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

@github-actions
Copy link
Copy Markdown
Contributor

🤖 Review regenerated on @sicarul'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 May 19, 2026
@github-actions github-actions Bot added review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention and removed review:no-blockers Claude review completed cleanly; outstanding is empty labels May 19, 2026
@sicarul
Copy link
Copy Markdown
Contributor Author

sicarul commented May 19, 2026

@claude #update-review

@github-actions github-actions Bot added review:in-progress Claude review is currently running and removed review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention labels May 19, 2026
@github-actions
Copy link
Copy Markdown
Contributor

🤖 Review updated on @sicarul'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 May 19, 2026
@github-actions github-actions Bot added review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention and removed review:no-blockers Claude review completed cleanly; outstanding is empty labels May 19, 2026
@sicarul
Copy link
Copy Markdown
Contributor Author

sicarul commented May 19, 2026

@claude #update-review

@github-actions github-actions Bot added review:in-progress Claude review is currently running and removed review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention labels May 19, 2026
@github-actions
Copy link
Copy Markdown
Contributor

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

Labels

area/blog-content Issues relating to content for pulumi.com/blog review:no-blockers Claude review completed cleanly; outstanding is empty

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants