Skip to content

[CONTENT SPRINT] FDA 21 CFR Part 11 Evidence Patterns with Pulumi#18955

Draft
sicarul wants to merge 6 commits into
masterfrom
blog/fda-21-cfr-part-11-compliance-with-pulumi
Draft

[CONTENT SPRINT] FDA 21 CFR Part 11 Evidence Patterns with Pulumi#18955
sicarul wants to merge 6 commits into
masterfrom
blog/fda-21-cfr-part-11-compliance-with-pulumi

Conversation

@sicarul
Copy link
Copy Markdown
Contributor

@sicarul sicarul commented May 13, 2026

Why this content is interesting

  • It maps regulated infrastructure work to evidence patterns without promising automatic compliance.
  • It is scheduled for 2026-07-16 as part of the content sprint's two-post-per-week cadence.

What we took into account

  • We considered electronic records, audit trails, IdP-backed access, Pulumi Policies, and reviewable infrastructure changes.
  • 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 clearer way to discuss FDA 21 CFR Part 11 controls with infrastructure and compliance stakeholders.
  • 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: FDA 21 CFR Part 11 Evidence Patterns with Pulumi
  • Meta description: Map FDA 21 CFR Part 11 expectations to Pulumi workflows for electronic records, audit trails, policy checks, and reviewable infrastructure 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
@sicarul sicarul requested a review from CamSoper May 13, 2026 20:46
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented May 13, 2026

Docs Review: FDA 21 CFR Part 11 Evidence Patterns with Pulumi

Thanks for the submission! The blog post itself is thoughtful and avoids overclaiming compliance, which is the right tone for a regulated-industry topic. However, this PR has a critical issue with files that should not be committed that needs to be resolved before this can merge, plus several smaller style fixes.


🚨 Blocking: Internal/sensitive files accidentally committed

The PR includes 20+ files that have nothing to do with the blog post and contain internal customer/sales data:

  • .sisyphus/ (18 files including boulder.json, plans/customer-blog-posts.md, notepads/, evidence/, run-continuation/) — agent-tool working directory with session IDs and absolute paths to a contributor's local machine (/Users/pabloseibelt/dev/docs/...).
  • new_content.md at the repo root — a customer-signal analysis that references named accounts (Moderna, Tivity Health, ZeroEyes, Dexcom, Numerix, KeyShot, Fenergo, Willis Towers Watson, Adyen, Moody's, Southern Cross Health, ŌURA), summarizes "~150+ accounts, last 6 months" of call transcripts, lists live resource counts by provider, and counts internal GitHub feature-request reactions.

This content is not appropriate for a public repository. Please:

  1. git rm -r .sisyphus/ new_content.md and force-push the branch.
  2. Add .sisyphus/ and new_content.md (or new_content.*) to a local .gitignore (or your global gitignore) so they don't slip into future PRs.
  3. Confirm that the same data hasn't already been pushed to a public fork's history.

Until those files are removed, the rest of the review below is moot — please don't merge.


Blog post content review (content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md)

Style guide violations

Heading case (STYLE-GUIDE.md / AGENTS.md): H2+ headings should be sentence case. Several H3 (and a couple of H2) headings use title case:

  • Line 44: ### 1. System Validation (11.10(a))System validation
  • Line 51: ### 2. Audit Trails (11.10(e))Audit trails
  • Line 62: ### 3. Record Protection and Retrieval (11.10(b) and (c))Record protection and retrieval
  • Line 69: ### 4. Authority Checks (11.10(g))Authority checks
  • Line 78: ## Configuring Audit Trails for Regulated WorkloadsConfiguring audit trails for regulated workloads
  • Line 170: ## Neo-Assisted Compliance and DocumentationNeo-assisted compliance and documentation
  • Line 174: ### Generating Validation DocumentationGenerating validation documentation
  • Line 180: ### Continuous Compliance and Drift DetectionContinuous compliance and drift detection
  • Line 184: ## Enforcing Audit Trail Controls with Pulumi PoliciesEnforcing audit trail controls with Pulumi Policies (keep "Pulumi Policies" as the product name)

Ordered list numbering (AGENTS.md): Every list item should begin with 1. to minimize diff noise. Lines 35–38 use 1. / 2. / 3. / 4.:

```suggestion

  1. Validation: Ensuring systems are accurate, reliable, and perform consistently.
  2. Audit Trails: Computer-generated, time-stamped records of all actions.
  3. Record Protection: Ensuring records are retained and can be retrieved throughout their retention period.
  4. Authority Checks: Ensuring only authorized individuals can access the system and perform actions.
    ```

Content issues

Redundant intro (lines 20–26): Four paragraphs before <!--more-->. Lines 24 and 26 both say "In this post…" and line 26 partially restates the disclaimer that already appears verbatim at line 218. Consider collapsing lines 24 and 26 into a single sentence and letting the closing disclaimer carry the "this isn't legal advice" framing.

Hedging / corporate phrasing:

  • Line 22: "compliance journey" — vague corporate phrasing; "compliance program" or "Part 11 controls" is more concrete.
  • Line 26: "will build a compliance evidence workflow" overpromises — the post illustrates two snippets rather than walking the reader through a build. Either soften ("will see how to structure") or add the missing steps.
  • Line 214 (conclusion): "can help build and manage infrastructure in alignment with" — stack of hedges. Tighten to a more direct statement.

Missing CTA: The conclusion ends on a disclaimer with no next step. Add a specific link — e.g., "Try Pulumi Policies for your CloudTrail baseline" — using {{< blog/cta-button >}} if appropriate.

Code examples

The TypeScript samples look syntactically valid. Two things to double-check before publication:

  • Line ~123 (second snippet): import { Trail } from \"@pulumi/aws/cloudtrail\"; — confirm this sub-path import works in CrossGuard policy packs at the @pulumi/aws version you're targeting; some folks use import * as aws from \"@pulumi/aws\"; ... validateResourceOfType(aws.cloudtrail.Trail, ...) to be safe.
  • Inside the policy callback, trail.isMultiRegionTrail and trail.enableLogFileValidation are optional boolean | undefined in the args type. The !trail.x check will flag undefined as a violation, which is probably what you want — but worth a sentence in the prose to make that explicit (e.g., "unset is treated as non-compliant").

Frontmatter / publishing readiness

  • tags: [compliance, neo, life-sciences] — the existing Neo post (content/blog/10-things-you-can-do-with-neo/) uses ai and platform-engineering rather than a neo tag. Consider aligning unless you're intentionally introducing neo as a new taxonomy.
  • Author pablo-seibelt resolves correctly (data/team/team/pablo-seibelt.toml).
  • Internal links checked: /docs/insights/policy/, /product/pulumi-cloud/, /product/neo/ all resolve in the current tree.
  • Title is 51 characters — under the 60-char limit. ✅
  • Meta description is 148 characters — under 160. ✅
  • <!--more--> is present at line 28. ✅
  • social: block has twitter, linkedin, bluesky. ✅

Publishing readiness checklist

  • social: block present
  • meta_image set — file present but PR description notes it's a placeholder; needs-design label is correct
  • meta_image uses current Pulumi logos — design pending
  • <!--more--> break present after intro
  • Author profile exists with avatar
  • All links resolve
  • Code examples have language specifiers
  • No animated GIFs as meta_image
  • Images have alt text — N/A so far (no inline screenshots); confirm when final feature image lands
  • Title ≤60 chars

If you want another pass after the cleanup and style fixes, mention @claude on the PR. Nice work on the substance — once the accidental files are out and the headings are normalized, this should be in good shape for the 2026-07-16 slot.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

Social Media Review

content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md

X — PASS

LinkedIn — PASS

Bluesky — PASS


Suggestions (advisory)

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

X

  • Second paragraph closes the curiosity gap — "Map Pulumi workflows to audit trails, policy checks, and reviewable infrastructure changes" tells the reader exactly what the article delivers; withhold the mapping so they still have something to find out
  • Missing pointer — post just ends; add a line that signals there's more in the article

LinkedIn

  • Second paragraph closes the curiosity gap — "This guide maps FDA 21 CFR Part 11 expectations to practical Pulumi workflows without claiming automatic compliance" summarizes the article's thesis outright; withhold the approach or the outcome
  • Missing pointer — post ends without any signal to click through to the article

Bluesky

  • Second paragraph closes the curiosity gap — "Map Pulumi workflows to audit trails, policy checks, and reviewable infra changes" delivers the article's promise before the reader opens it; withhold the specifics
  • Missing pointer — no line signals there's more to read

Updated for commit eacee25b2b54aba5ecc82df0c8adea97639be3bc (short: eacee25) at 2026-05-15 21:26 UTC.

@pulumi-bot
Copy link
Copy Markdown
Collaborator

pulumi-bot commented May 13, 2026

@sicarul sicarul force-pushed the blog/fda-21-cfr-part-11-compliance-with-pulumi branch from bf2e7c9 to d1b40c4 Compare May 13, 2026 21:02
@sicarul sicarul force-pushed the blog/fda-21-cfr-part-11-compliance-with-pulumi branch from d1b40c4 to cca1990 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 46s —— View job


Re-review: FDA 21 CFR Part 11 Evidence Patterns with Pulumi

Thanks for the cleanup — the PR diff is now clean (3 files only) and the social frontmatter is fixed. The earlier blockers are resolved. A few smaller items from the prior review still apply.

  • Confirmed .sisyphus/ and new_content.md are out of the PR diff
  • Re-checked social frontmatter (twitter / linkedin / bluesky)
  • Re-checked heading case
  • Re-checked ordered list numbering
  • Re-checked content issues (intro, hedging, CTA)
  • Re-checked code examples and frontmatter
  • Posted updated review

✅ Resolved from prior review

  • Accidental files removed. Branch is now a single clean commit (cca1990) on top of origin/master containing only the three blog files. 🎉
  • Social frontmatter fixed. twitter, linkedin, and bluesky each now have two paragraphs separated by a blank line, matching the social-review suggestions.

❗ Still outstanding from prior review

These items from the previous pass don't appear to have been applied. The first two are repo style-guide rules (AGENTS.md), not preferences:

1. Heading case — H2+ must be sentence case

Several H2 and H3 headings are still title case (content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md):

Line Current Should be
39 ## Understanding 21 CFR Part 11 in the Cloud ## Understanding 21 CFR Part 11 in the cloud
49 ## Mapping Pulumi to Part 11 Controls ## Mapping Pulumi to Part 11 controls
53 ### 1. System Validation (11.10(a)) ### 1. System validation (11.10(a))
60 ### 2. Audit Trails (11.10(e)) ### 2. Audit trails (11.10(e))
71 ### 3. Record Protection and Retrieval (11.10(b) and (c)) ### 3. Record protection and retrieval (11.10(b) and (c))
78 ### 4. Authority Checks (11.10(g)) ### 4. Authority checks (11.10(g))
87 ## Configuring Audit Trails for Regulated Workloads ## Configuring audit trails for regulated workloads
179 ## Neo-Assisted Compliance and Documentation ## Neo-assisted compliance and documentation
183 ### Generating Validation Documentation ### Generating validation documentation
189 ### Continuous Compliance and Drift Detection ### Continuous compliance and drift detection
193 ## Enforcing Audit Trail Controls with Pulumi Policies ## Enforcing audit trail controls with Pulumi Policies (keep Pulumi Policies — product name)

Fix this →

2. Ordered list numbering — every item should start with 1.

Lines 44–47 still use 1. / 2. / 3. / 4.. Per AGENTS.md, every item should begin with 1. to minimize diff noise when items are reordered:

1. **Validation**: Ensuring systems are accurate, reliable, and perform consistently.
1. **Audit Trails**: Computer-generated, time-stamped records of all actions.
1. **Record Protection**: Ensuring records are retained and can be retrieved throughout their retention period.
1. **Authority Checks**: Ensuring only authorized individuals can access the system and perform actions.

(Markdown will still render them as 1/2/3/4.) Sentence-case the labels too (**Audit trails**, **Record protection**, **Authority checks**) for consistency with the headings.

3. Redundant intro before ``

Lines 33 and 35 both open with "In this post…" and line 35 partially restates the closing disclaimer at line 227:

Line 33: "In this post, we will explore how Pulumi features map to Part 11 controls…"
Line 35: "…In this post, you will build a compliance evidence workflow for regulated workloads."

Suggested tightening — collapse to one sentence and let the closing disclaimer carry the "not legal advice" framing:

In this post, we will explore how Pulumi features map to Part 11 controls and how you can structure a compliance evidence workflow for your regulated workloads. Note that while Pulumi tools support compliance efforts, they do not provide automated certification or guarantee regulatory approval.

Also — "you will build a compliance evidence workflow" still overpromises. The post illustrates two snippets (audit-trail provisioning + a policy pack) rather than walking the reader through an end-to-end build. "Structure" or "see how to structure" is more accurate.

4. Missing CTA

The post ends on the disclaimer at line 227 with no next step for the reader. Consider adding a CTA before the disclaimer, e.g. a {{< blog/cta-button >}} pointing at /docs/insights/policy/ or /product/pulumi-cloud/.

5. Conclusion hedging (minor)

Line 225 still stacks hedges: "Pulumi provides tools that can help build and manage infrastructure in alignment with the high standards of FDA 21 CFR Part 11." Consider a more direct version that doesn't soften every clause, e.g. "Pulumi gives life sciences teams a way to define and review the infrastructure controls that underpin FDA 21 CFR Part 11 evidence — policies, audit trails, IdP-backed access, and reviewable state history."

Minor / nice-to-have (unchanged from prior review)

  • Tags (neo vs pulumi-neo): pulumi-neo is used 10× across the blog, neo is used 6× — both are in active use, so this is more of a taxonomy choice than a rule. The existing Neo intro post (10-things-you-can-do-with-neo/) uses ai + platform-engineering + pulumi-neo. If you want this post to surface alongside it under the same tag, swap neopulumi-neo.
  • Policy code import path (line 199): import { Trail } from "@pulumi/aws/cloudtrail"; — works for current @pulumi/aws, but the more idiomatic CrossGuard pattern is import * as aws from "@pulumi/aws"; validateResourceOfType(aws.cloudtrail.Trail, ...). Optional.
  • Policy semantics (line 207–215): if (!trail.isMultiRegionTrail) treats undefined as a violation, which is correct for this baseline — worth one sentence of prose making that explicit (e.g., "unset is treated as non-compliant"). Optional.

Publishing readiness

  • Accidental files removed
  • Social frontmatter formatted correctly
  • `` present
  • Author profile resolves
  • Internal links resolve
  • Title ≤60 chars, meta description ≤160 chars
  • Headings sentence-cased (style guide)
  • Ordered list normalized to 1. (style guide)
  • Intro tightened / overpromise softened
  • CTA added (optional but recommended)
  • Final meta_image from Design (tracked by needs-design label)

The big-ticket blockers from last time are out, so you're in much better shape. The remaining items are mostly style-guide compliance — once headings and the ordered list are normalized, this is essentially ready to wait on Design.
• Branch: blog/fda-21-cfr-part-11-compliance-with-pulumi

@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/fda-21-cfr-part-11-compliance-with-pulumi/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 1m 45s —— View job


Re-review: FDA 21 CFR Part 11 Evidence Patterns with Pulumi

  • Confirmed PR diff is clean (only the three blog files in commit cca1990)
  • Re-checked headings — not addressed
  • Re-checked ordered list numbering — not addressed
  • Re-checked intro / hedging / CTA — not addressed
  • Re-checked code examples and frontmatter
  • Posted updated review

✅ Confirmed from prior review

  • Branch is clean. Single commit cca1990 on top of origin/master, diff contains only index.md + feature.png + meta.png. The .sisyphus/ and new_content.md files are gone. 🎉
  • Social frontmatter looks correct. twitter, linkedin, bluesky each have two paragraphs separated by a blank line and rendered fine to the social-media-review bot (all three platforms PASS for commit cca1990).

❗ Still outstanding — same items as last pass

Apologies — you mentioned "actionable content feedback has been addressed," but the four content items called out in the last review look unchanged in index.md at cca1990. Verbatim diff against the previous review:

1. Heading case (style-guide rule — AGENTS.md: H2+ = sentence case)

All eleven flagged headings are still title case:

Line Current Should be
39 ## Understanding 21 CFR Part 11 in the Cloud ## Understanding 21 CFR Part 11 in the cloud
49 ## Mapping Pulumi to Part 11 Controls ## Mapping Pulumi to Part 11 controls
53 ### 1. System Validation (11.10(a)) ### 1. System validation (11.10(a))
60 ### 2. Audit Trails (11.10(e)) ### 2. Audit trails (11.10(e))
71 ### 3. Record Protection and Retrieval (11.10(b) and (c)) ### 3. Record protection and retrieval (11.10(b) and (c))
78 ### 4. Authority Checks (11.10(g)) ### 4. Authority checks (11.10(g))
87 ## Configuring Audit Trails for Regulated Workloads ## Configuring audit trails for regulated workloads
179 ## Neo-Assisted Compliance and Documentation ## Neo-assisted compliance and documentation
183 ### Generating Validation Documentation ### Generating validation documentation
189 ### Continuous Compliance and Drift Detection ### Continuous compliance and drift detection
193 ## Enforcing Audit Trail Controls with Pulumi Policies ## Enforcing audit trail controls with Pulumi Policies (keep Pulumi Policies as the product name)

Fix headings →

2. Ordered list numbering (style-guide rule — AGENTS.md: every item begins with 1.)

Lines 44–47 still use 1. / 2. / 3. / 4.. Per AGENTS.md, every item should begin with 1. to minimize diff noise:

1. **Validation**: Ensuring systems are accurate, reliable, and perform consistently.
1. **Audit trails**: Computer-generated, time-stamped records of all actions.
1. **Record protection**: Ensuring records are retained and can be retrieved throughout their retention period.
1. **Authority checks**: Ensuring only authorized individuals can access the system and perform actions.

(Markdown still renders 1/2/3/4. Labels also sentence-cased for consistency with the heading fix above.)

3. Redundant intro before ``

Lines 33 and 35 both open with "In this post…" and line 35 also restates the closing disclaimer at line 227. Suggested collapse:

In this post, we will explore how Pulumi features map to Part 11 controls and how you can structure a compliance evidence workflow for your regulated workloads. While the tools illustrated below support compliance efforts, they do not provide automated certification or guarantee regulatory approval — see the closing disclaimer for the full caveat.

"You will build a compliance evidence workflow" still overpromises — the post illustrates two snippets (CloudTrail provisioning + a policy pack) rather than walking the reader through an end-to-end build. "Structure" or "see how to structure" is more accurate.

4. Missing CTA

The post still ends on the disclaimer with no next step. Consider a {{< blog/cta-button >}} immediately before line 227 pointing to /docs/insights/policy/ or /product/pulumi-cloud/, e.g.:

{{< blog/cta-button url="/docs/insights/policy/" >}}

Fix the four content items →

Nice-to-have (unchanged, optional)

  • Tags: neopulumi-neo if you want this post to surface alongside 10-things-you-can-do-with-neo/ (which uses pulumi-neo).
  • Conclusion hedging (line 225): "Pulumi provides tools that can help build and manage infrastructure in alignment with…" is still a stack of hedges. A more direct version: "Pulumi gives life sciences teams a way to define and review the infrastructure controls that underpin FDA 21 CFR Part 11 evidence — policies, audit trails, IdP-backed access, and reviewable state history."
  • Policy import idiom (line 199): import { Trail } from "@pulumi/aws/cloudtrail"; works, but the canonical CrossGuard pattern is import * as aws from "@pulumi/aws"; validateResourceOfType(aws.cloudtrail.Trail, ...).
  • Policy semantics (lines 207–215): if (!trail.x) treats undefined as a violation, which is correct for this baseline — worth one sentence of prose to call that out for readers.

Publishing readiness

  • Accidental files removed
  • Social frontmatter formatted (and social-review bot PASS on all three platforms)
  • `` present
  • Author profile resolves (data/team/team/pablo-seibelt.toml)
  • Internal links resolve
  • Title 51 chars / meta_desc 148 chars
  • Headings sentence-cased (style-guide blocker)
  • Ordered list normalized to 1. (style-guide blocker)
  • Intro tightened / overpromise softened
  • CTA added
  • Final meta_image from Design (needs-design label)

The PR cleanup is excellent — branch is now in a state Design can pick up cleanly. But the two style-guide items (headings + ordered list) are repo rules per AGENTS.md and should land before merge, and the intro + CTA are still worth a pass for reader experience. Happy to re-review once those are in.
• Branch: blog/fda-21-cfr-part-11-compliance-with-pulumi

@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 cca19903. The branch has a single clean commit on current origin/master, and the PR diff is limited to content/blog/fda-21-cfr-part-11-compliance-with-pulumi/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 12s —— View job


Re-review: FDA 21 CFR Part 11 Evidence Patterns with Pulumi

  • Confirmed PR diff is clean (3 files, single commit cca1990)
  • Re-checked headings — not addressed
  • Re-checked ordered list numbering — not addressed
  • Re-checked intro / hedging / CTA — not addressed
  • Re-checked code examples and frontmatter
  • Posted updated review

✅ Confirmed clean

  • Branch is a single commit (cca1990) on top of origin/master; diff is index.md + feature.png + meta.png only. No accidental files.
  • social: block formatting is fine (twitter / linkedin / bluesky each have two paragraphs separated by a blank line). The social-media-review bot PASSed all three platforms on cca1990.

❗ Still not applied — same content items as the previous two passes

You've now said three times that content feedback was addressed, but index.md at cca1990 is byte-for-byte identical to the version reviewed in the previous pass — none of the four content items have been applied. Calling them out one more time:

1. Heading case (style-guide rule — AGENTS.md: H2+ = sentence case)

All eleven flagged headings are still title case:

Line Current Should be
39 ## Understanding 21 CFR Part 11 in the Cloud ## Understanding 21 CFR Part 11 in the cloud
49 ## Mapping Pulumi to Part 11 Controls ## Mapping Pulumi to Part 11 controls
53 ### 1. System Validation (11.10(a)) ### 1. System validation (11.10(a))
60 ### 2. Audit Trails (11.10(e)) ### 2. Audit trails (11.10(e))
71 ### 3. Record Protection and Retrieval (11.10(b) and (c)) ### 3. Record protection and retrieval (11.10(b) and (c))
78 ### 4. Authority Checks (11.10(g)) ### 4. Authority checks (11.10(g))
87 ## Configuring Audit Trails for Regulated Workloads ## Configuring audit trails for regulated workloads
179 ## Neo-Assisted Compliance and Documentation ## Neo-assisted compliance and documentation
183 ### Generating Validation Documentation ### Generating validation documentation
189 ### Continuous Compliance and Drift Detection ### Continuous compliance and drift detection
193 ## Enforcing Audit Trail Controls with Pulumi Policies ## Enforcing audit trail controls with Pulumi Policies (product name stays capitalized)

2. Ordered list numbering (style-guide rule — AGENTS.md: every item begins with 1.)

Lines 44–47 still use 1./2./3./4.:

1. **Validation**: Ensuring systems are accurate, reliable, and perform consistently.
1. **Audit trails**: Computer-generated, time-stamped records of all actions.
1. **Record protection**: Ensuring records are retained and can be retrieved throughout their retention period.
1. **Authority checks**: Ensuring only authorized individuals can access the system and perform actions.

Markdown still renders 1/2/3/4. Labels sentence-cased to match the heading fix.

3. Redundant intro (lines 33 + 35)

Both paragraphs open with "In this post…" and line 35 partially restates the closing disclaimer at line 227. Suggested collapse:

In this post, we will explore how Pulumi features map to Part 11 controls and how you can use Infrastructure as Code (IaC) to see how to structure a compliance evidence workflow for your regulated workloads. While the tools illustrated below support compliance efforts, they do not provide automated certification or guarantee regulatory approval — see the closing disclaimer for the full caveat.

"You will build a compliance evidence workflow" still overpromises — the post illustrates two snippets (CloudTrail provisioning + a policy pack) rather than walking the reader through an end-to-end build. Use "structure" or "see how to structure."

4. Missing CTA

The post still ends on the disclaimer at line 227 with no next step. Add a {{< blog/cta-button >}} before the disclaimer pointing at /docs/insights/policy/ or /product/pulumi-cloud/.

Fix all four items →

If something about my proposed wording isn't right — e.g., you want to keep the explicit "Note that while Pulumi tools support compliance efforts…" sentence in the intro — just say so and I can adjust. But the headings and the ordered-list normalization are style-guide rules in AGENTS.md, not preferences, and they need to land before merge.

Nice-to-have (still optional, unchanged)

  • Tags: neopulumi-neo if you want this post to surface alongside 10-things-you-can-do-with-neo/.
  • Conclusion hedging (line 225): "Pulumi provides tools that can help build and manage infrastructure in alignment with…" is still a stack of hedges. Optional but worth a pass.
  • Policy import idiom (line 199): import { Trail } from "@pulumi/aws/cloudtrail"; works, but the canonical CrossGuard pattern is import * as aws from "@pulumi/aws"; validateResourceOfType(aws.cloudtrail.Trail, ...).
  • Policy semantics (lines 207–215): if (!trail.x) treats undefined as a violation, which is correct — worth one sentence of prose calling that out for readers.

Publishing readiness

  • Accidental files removed
  • Social frontmatter formatted (and social-review bot PASS on all three platforms)
  • `` present
  • Author profile resolves (data/team/team/pablo-seibelt.toml)
  • Internal links resolve
  • Title 51 chars / meta_desc 148 chars
  • Headings sentence-cased (style-guide blocker)
  • Ordered list normalized to 1. (style-guide blocker)
  • Intro tightened / overpromise softened
  • CTA added
  • Final meta_image from Design (needs-design label)

If you'd like me to apply these four fixes directly to the branch, reply @claude please apply the heading / list / intro / CTA fixes and I'll push a commit. Otherwise this is ready to wait on Design as soon as those style-guide items land.

• Branch: blog/fda-21-cfr-part-11-compliance-with-pulumi

@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:27
@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 cca19903.

@pulumi-bot
Copy link
Copy Markdown
Collaborator

pulumi-bot commented May 14, 2026

Claude finished @sicarul's task in 54s —— View job


Re-review: FDA 21 CFR Part 11 Evidence Patterns with Pulumi

  • Confirmed PR diff is clean (3 files, head cca1990)
  • Re-checked headings — unchanged from prior review
  • Re-checked ordered list numbering — unchanged from prior review
  • Re-checked intro / hedging / CTA — unchanged from prior review
  • Re-checked code examples and frontmatter — unchanged
  • Noted draft status + needs-design label removal

Status

  • PR diff is clean — single commit cca1990 on origin/master, only index.md + feature.png + meta.png. ✅
  • Social frontmatter is fine and the social-media-review bot continues to PASS on all three platforms.
  • index.md at cca1990 is byte-for-byte identical to the version reviewed in the previous two passes. None of the four content items from prior reviews have been applied.
  • PR is now draft and needs-design has been removed — so this is parked rather than queued for merge, which is reasonable while the style-guide items and final design are pending.

Reading the state

The branch is in a good shape to sit in draft:

  • ✅ Cleanup done, no accidental files
  • ✅ Social bot PASS
  • ✅ Frontmatter / links / author / lengths all check out
  • ⏸️ Two style-guide rules from AGENTS.md (sentence-case H2/H3, 1.-only ordered list) still need to land before this can come out of draft
  • ⏸️ Two content polish items (intro tightening, CTA) — recommended, not blockers
  • ⏸️ Final meta_image from Design when needed

I won't repeat the full heading table a fourth time — line-by-line details are in the previous review. When you're ready to take this out of draft, the two style-guide items are the gating ones.

If you'd like me to apply the four fixes directly to the branch, reply @claude please apply the heading / list / intro / CTA fixes and I'll push a commit. Otherwise, happy to re-review whenever the next change lands.

• Branch: blog/fda-21-cfr-part-11-compliance-with-pulumi

@github-actions
Copy link
Copy Markdown
Contributor

🤖 @sicarul — pinned review cleared; regenerating from scratch.

@sicarul
Copy link
Copy Markdown
Contributor Author

sicarul commented May 18, 2026

@claude #new-review

@github-actions
Copy link
Copy Markdown
Contributor

🤖 @sicarul — pinned review cleared; regenerating from scratch.

@sicarul sicarul force-pushed the blog/fda-21-cfr-part-11-compliance-with-pulumi branch from eacee25 to 1561c04 Compare May 19, 2026 03:17
@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-19T04:10:00Z

Reviewing a draft; findings may change as you iterate.

Tip

Summary: This PR adds a new blog post (content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md) mapping FDA 21 CFR Part 11 control areas — validation, audit trails, record protection, authority checks — to Pulumi features and an AWS CloudTrail/S3/KMS example. The kind of wrongness that would block a reader's success here is misattributing a Part 11 subsection (a regulated-industry reader will treat section letters as load-bearing) or misrepresenting a Pulumi capability the reader builds their evidence story on. The previously contradicted §11.10(b)/(c) attribution (1 outstanding finding) was resolved in 67b4c05; the heading and prose now correctly separate §11.10(c) (protection/retrieval) from §11.10(b) (copies for inspection). 0 outstanding findings remain. The verifier hit a sustained 429 rate-limit window mid-run on the initial review, which is why a chunk of capability claims land as unverifiable — none are factual blockers but several are worth a spot-check before merge.

Review confidence:

Dimension Level Notes
mechanics HIGH
facts MEDIUM All contradicted findings resolved; verifier rate-limited on ~10 Pulumi-capability claims (not retried in-review).
code correctness HIGH
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 14 of 43 claims verified (21 unverifiable, 1 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 24 Pass 1, 0 Pass 2, 19 Pass 3 (verified 10, contradicted 1, unverifiable 8).
  • 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 (3 specialists: structural, existence, body-code-coverage); 0 findings
  • Editorial-balance pass: ran (single-subject, N/A)
  • Re-entrant sweep (67b4c05): re-verified [L71] — resolved; no duplicate occurrences in frontmatter or social copy.
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
0 19 0 1

🔍 Verification trail

43 claims extracted · 14 verified · 21 unverifiable · 1 contradicted
  • L3 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "date: 2026-07-16" → ➖ not-a-claim (evidence: The "date" field in a blog post front matter is metadata set by the PR author for their own content's publication date — it is not a falsifiable assertion about a third-party fact. It is a faithful description of the PR author's own design…; source: repo:content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md (front matter metadata))
  • L29 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "The FDA 21 CFR Part 11 regulation sets the standard for electronic records and electronic signatures, ensuring they are trustworthy, reliable, and equivalent t…" → ✅ verified (framing: strengthened — claim drops "generally" before "equivalent to paper records"; source's broader form ("generally equivalent") proves the claim as a subset, since…; evidence: The official eCFR text (21 CFR Part 11, §11.1(a)) states the regulations "set forth the criteria under which the agency considers electronic records, electronic signatures...to be trustworthy, reliable, and generally equivalent to paper re…; source: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11)
  • L41 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "FDA 21 CFR Part 11 applies to records in electronic form that are created, modified, maintained, archived, retrieved, or transmitted under any records requirem…" → ✅ verified (framing: strengthened — claim uses "agency" (lowercase, matching eCFR §11.1(b) exactly); FDA guidance page capitalizes "Agency" — both are authoritative and confirm the…; evidence: The FDA's official guidance document and eCFR both confirm this verbatim: "Part 11 applies to records in electronic form that are created, modified, maintained, archived, retrieved, or transmitted under any records requirements set forth i…; source: https://www.fda.gov/regulatory-information/search-fda-guidance-documents/part-11-electronic-records-electronic-signatures-scope-and-application; https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11)
  • L44-47 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "FDA 21 CFR Part 11 focuses on four key areas: (1) Validation — ensuring systems are accurate, reliable, and perform consistently; (2) Audit trails — computer-g…" → ✅ verified (framing: strengthened — the claim narrows the regulation's many provisions to "four key areas"; the actual regulation (§11.10) contains more requirements (e.g., electro…; evidence: Multiple authoritative sources confirm that FDA 21 CFR Part 11's key requirements include: (1) validation — ensuring systems are accurate, reliable, and perform consistently (§11.10(a)); (2) audit trails — "secure, computer-generated, time…; source: WebSearch ran query "FDA 21 CFR Part 11 key requirements validation audit trails record protection authority checks"; corroborated by https://www.certivo.io/blog/what-is-fda-21-cfr-part-11, https://envigilance.com/compliance/21-cfr-part-11/, and https://www.fda.gov/regulatory-information/search-fda-guidance-documents/part-11-electronic-records-electronic-signatures-scope-and-application)
  • L53 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "System validation is addressed under 21 CFR Part 11 section 11.10(a)." → ✅ verified (evidence: The eCFR and LII both confirm that 21 CFR § 11.10(a) reads: "Validation of systems to ensure accuracy, reliability, consistent intended performance, and the ability to discern invalid or altered records." System validation is explicitly ad…; source: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11/subpart-B/section-11.10)
  • L57 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Policies can enforce compliance rules across an entire organization, such as requiring that all S3 buckets have versioning and encryption enabled, or th…" → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L58 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi supports unit, property, and integration testing in familiar languages like TypeScript." → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L60 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Audit trails are addressed under 21 CFR Part 11 section 11.10(e)." → ✅ verified (evidence: The official eCFR text at 21 CFR § 11.10(e) reads: "Use of secure, computer-generated, time-stamped audit trails to independently record the date and time of operator entries and actions that create, modify, or delete electronic records."…; source: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11/subpart-B/section-11.10)
  • L62 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Part 11 requires a computer-generated, time-stamped audit trail that records the date and time of operator entries and actions that create, modify, or delete e…" → ✅ verified (framing: strengthened — claim narrows the full regulatory text ('secure, computer-generated, time-stamped audit trails to independently record…') by omitting 'secure' a…; evidence: eCFR §11.10(e) states: "Use of secure, computer-generated, time-stamped audit trails to independently record the date and time of operator entries and actions that create, modify, or delete electronic records." The claim accurately capture…; source: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11/subpart-B/section-11.10)
  • L64-67 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Cloud automatically maintains a comprehensive audit trail for infrastructure changes, recording every action taken in the Pulumi Cloud console or via th…" → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L66 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Every action taken in the Pulumi Cloud console or via the CLI is recorded, including who performed the action, what the action was, and when it occurred." → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L67 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Every pulumi up creates a new checkpoint in your stack's history, showing exactly what changed in each deployment." → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L69 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "AWS maps Part 11 controls to capabilities such as CloudTrail log file validation, CloudTrail encryption, CloudWatch Logs integration, and S3 data event logging." → ✅ verified (framing: strengthened — claim narrows the broader AWS Config conformance pack mapping to four specific capabilities; source's broader form proves the claim as a subset.; evidence: The AWS Config conformance pack for FDA Title 21 CFR Part 11 (awslabs/aws-config-rules on GitHub) explicitly includes rules for CLOUD_TRAIL_LOG_FILE_VALIDATION_ENABLED, CLOUD_TRAIL_ENCRYPTION_ENABLED, CLOUDTRAIL_S3_DATAEVENTS_ENABLED…; source: https://github.com/awslabs/aws-config-rules/blob/master/aws-config-conformance-packs/Operational-Best-Practices-for-FDA-21CFR-Part-11.yaml)
  • L71 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Record protection and retrieval are addressed under 21 CFR Part 11 sections 11.10(b) and (c)." → ❌ contradicted (resolved in 67b4c05 — see ✅ Resolved)
  • L73 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "21 CFR Part 11 requires that electronic records must be protected to enable their accurate and ready retrieval throughout the records retention period." → ✅ verified (framing: strengthened — claim rephrases §11.10(c) as "electronic records must be protected" (adding "electronic records must be"); source's text is "Protection of recor…; evidence: The eCFR (official source for 21 CFR Part 11, §11.10(c)) states verbatim: "Protection of records to enable their accurate and ready retrieval throughout the records retention period." The PR claim accurately paraphrases this requirement.; source: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11/subpart-B)
  • L75 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Cloud stores state files securely, with built-in versioning and history." → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L76 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "You can export your stack state at any time using pulumi stack export, providing a JSON representation of your infrastructure." → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L78 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Authority checks are addressed under 21 CFR Part 11 section 11.10(g)." → ✅ verified (evidence: The official eCFR (21 CFR § 11.10(g)) states: "Use of authority checks to ensure that only authorized individuals can use the system, electronically sign a record, access the operation or computer system input or output device, alter a rec…; source: https://www.ecfr.gov/current/title-21/chapter-I/subchapter-A/part-11/subpart-B/section-11.10)
  • L80 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "21 CFR Part 11 section 11.10(g) requires that access to the system must be limited to authorized individuals." → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697… (WebSearch dispatched but verification did not converge within the turn budget))
  • L82 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Cloud allows you to define granular permissions for users and teams via Role-Based Access Control (RBAC), ensuring that only authorized personnel can vi…" → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L83 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Cloud supports Single Sign-On (SSO) integration with identity providers like Okta or Azure AD, applying an organization's existing security policies and…" → 🤷 unverifiable (evidence: verify-claims.py errored on this claim: RuntimeError: HTTP 429: {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 2,000,000 input tokens per minute (org: 85d1a054-3697…)
  • L89 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "The AWS example in the post creates a versioned and encrypted S3 bucket for audit records, a CloudWatch Log Group for near real-time monitoring, and a multi-re…" → ✅ verified (evidence: The file at the "Configuring audit trails for regulated workloads" section states verbatim: "It creates a versioned and encrypted S3 bucket for audit records, a CloudWatch Log Group for near real-time monitoring, and a multi-region CloudTr…; source: repo:content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md)
  • L99 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "arn:aws:cloudtrail:${selectedRegion.name}:${identity.accountId}:trail/${trailName});" → ✅ verified (evidence: Multiple AWS official docs confirm the CloudTrail trail ARN format. From the AWS CloudTrail API Reference: "The format of a trail ARN is: arn:aws:cloudtrail:us-east-2:123456789012:trail/MyTrail" — matching the pattern `arn:aws:cloudtrail:$…; source: https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_Trail.html)
  • L101 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md — ➖ not-a-claim (code snippet; see Triaged)
  • L105 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md — ➖ not-a-claim (IAM policy version constant; see Triaged)
  • L110 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md — ➖ not-a-claim (templated ARN in code; see Triaged)
  • L151 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "The example code sets the CloudWatch Log Group retention to 365 days (logRetentionDays = 365)." → 🤷 unverifiable (evidence: The specific blog post file content at content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md L151 was not accessible via web search. While 365 is a valid CloudWatch Log Group retention value per Pulumi registry docs, the exact…; source: WebSearch ran query "pulumi.com blog fda-21-cfr-part-11-compliance-with-pulumi logRetentionDays"; top results didn't address the claim)
  • L156 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md — ➖ not-a-claim (IAM policy version constant; see Triaged)
  • L157 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md — ➖ not-a-claim (code snippet; see Triaged)
  • L181 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Neo, our AI-powered infrastructure agent…" → ✅ verified (framing: strengthened — the product page says "AI infrastructure agent"; the claim says "AI-powered infrastructure agent" — a minor paraphrase that is a subset of the s…; evidence: The /product/neo/ page confirms Neo is Pulumi's "AI infrastructure agent" that includes compliance checks and a full audit trail.; source: repo:content/product/neo.md)
  • L215 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md — ➖ not-a-claim (IAM policy version constant; see Triaged)
  • L227 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md — ✅ verified (CTA link /docs/insights/policy/ resolves; source: repo:content/docs/insights/policy/_index.md)
  • L257 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md → 🤷 unverifiable (verification did not converge within 8 turns)
  • L261 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Neo is described as an AI-powered infrastructure agent." → ➖ not-a-claim (duplicate of verified L181; see Triaged)
  • L261 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Neo can assist in maintaining and documenting compliance posture." → ✅ verified (source: repo:content/product/neo.md)
  • L271 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi's scheduled drift detection…" → 🤷 unverifiable (verification did not converge within 8 turns)
  • L304 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Unset values in Pulumi Policy checks for CloudTrail are treated as non-compliant…" → 🤷 unverifiable (verification did not converge within 8 turns)
  • L304 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi Policies can be combined to cover S3 versioning, S3 encryption, S3 public access blocks, object retention, and IAM access patterns…" → 🤷 unverifiable (verifier rate-limited; HTTP 429)
  • L308 in content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md "Pulumi supports infrastructure evidence workflows aligned with FDA 21 CFR Part 11 expectations…" → 🤷 unverifiable (verifier rate-limited; HTTP 429)

Claim verification reported errors — some verdicts may be incomplete; spot-check the affected claims in-review.

📊 Editorial balance

Single-subject post; balance check N/A.

The "Configuring audit trails for regulated workloads" section runs 155 lines (11.9× the section-length median) — this is a Tier 3 don't-flag exception: the section is the post's core code example for a single-subject technical walkthrough, and contracting the listing would reduce reader value. Vendor-mention pattern is also single-subject as expected for a Pulumi-authored post; no competitor steering or false-balance prompts in the FAQ-style "Neo prompt" block.

🚨 Outstanding in this PR

These must be resolved or refuted before merging.

No outstanding findings. Ready to merge once the draft is marked ready and any desired low-confidence spot-checks are addressed.

⚠️ Low-confidence

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

  • [L57] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi Policies can enforce compliance rules across an entire organization, such as requiring that all S3 buckets have versioning and encryption enabled, or that only approved instance types are used." — verdict: unverifiable (verifier rate-limited; HTTP 429). Author question: does Pulumi's Policy-as-Code product documentation explicitly support cross-org enforcement (vs. per-stack or per-project)? If yes, link the docs page so a regulated reader can build the citation chain.

  • [L58] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi supports unit, property, and integration testing in familiar languages like TypeScript." — verdict: unverifiable (verifier rate-limited; HTTP 429). Author question: confirm the three testing modes name-for-name — Pulumi docs typically list "unit, property, and integration" testing, but worth a one-line link to /docs/iac/concepts/testing/ so the claim is anchored.

  • [L64-67] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi Cloud automatically maintains a comprehensive audit trail for infrastructure changes…" — verdict: unverifiable (verifier rate-limited; HTTP 429). Author question: consider linking the Pulumi Cloud audit-log docs page (/docs/pulumi-cloud/admin/audit-logs/ or equivalent) for the reader's evidence chain.

  • [L66] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Every action taken in the Pulumi Cloud console or via the CLI is recorded, including who performed the action, what the action was, and when it occurred." — verdict: unverifiable (verifier rate-limited; HTTP 429). "Every action" is a strong claim — the Pulumi audit-log docs list the specific event types covered; consider softening to "every action covered by the audit log" or linking the event catalogue.

  • [L67] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Every pulumi up creates a new checkpoint in your stack's history, showing exactly what changed in each deployment." — verdict: unverifiable (verifier rate-limited; HTTP 429). Author question: this is consistent with how pulumi up works against the service, but a docs link for state/checkpoint history would let a Part 11 reader cite it.

  • [L75] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi Cloud stores state files securely, with built-in versioning and history." — verdict: unverifiable (verifier rate-limited; HTTP 429). Author question: spot-check against the state-management docs (/docs/iac/concepts/state-and-backends/) — the "securely" + "versioning" + "history" triple should be backed.

  • [L76] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"You can export your stack state at any time using pulumi stack export, providing a JSON representation of your infrastructure." — verdict: unverifiable (verifier rate-limited; HTTP 429). This is consistent with the pulumi stack export CLI behavior but worth a one-line cite to the CLI reference.

  • [L80] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"21 CFR Part 11 section 11.10(g) requires that access to the system must be limited to authorized individuals." — verdict: unverifiable (verifier rate-limited; HTTP 429). The eCFR text already verified at L78 supports this paraphrase (§11.10(g): "Use of authority checks to ensure that only authorized individuals can use the system…"), so this is low-risk but a citation to the same eCFR section the L78 line cites would tighten the chain.

  • [L82] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi Cloud allows you to define granular permissions for users and teams via Role-Based Access Control (RBAC), ensuring that only authorized personnel can view or modify specific stacks." — verdict: unverifiable (verifier rate-limited; HTTP 429). Author question: spot-check against the Pulumi Cloud RBAC / teams docs to confirm "granular" and stack-scoped wording.

  • [L83] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi Cloud supports Single Sign-On (SSO) integration with identity providers like Okta or Azure AD, applying an organization's existing security policies and multi-factor authentication (MFA) are applied to Pulumi." — verdict: unverifiable (verifier rate-limited; HTTP 429). Author question: confirm both Okta and Azure AD are currently named as supported IdPs in the SSO docs (the list may also include other providers worth mentioning, e.g., SAML/OIDC generic).

  • [L257] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"The post recommends matching logRetentionDays and S3 lifecycle rules to a validated records-retention schedule, and adding retention controls such as S3 Object Lock, MFA Delete where appropriate, and lifecycle transitions for archival storage." — verdict: unverifiable (verification did not converge). This is the post recommending controls (a self-reference), not an external claim — low risk; can be confirmed by re-reading the closing paragraph of the audit-trail example section.

  • [L271] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi's scheduled drift detection can automatically check your environment for changes made outside of Pulumi. When drift is detected, it can trigger an alert or a review workflow…" — verdict: unverifiable (verification did not converge). Author question: link the scheduled drift-detection docs page (/docs/pulumi-cloud/deployments/drift/ or equivalent) so the "scheduled" and "alert/review workflow" specifics are backed.

  • [L304] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Unset values are treated as non-compliant so new trails must explicitly enable validation, global-service events, and multi-region logging." — verdict: unverifiable (verification did not converge). This is describing the post's own policy snippet — the code at L286-299 does treat falsy values (!trail.isMultiRegionTrail, !trail.includeGlobalServiceEvents, !trail.enableLogFileValidation) as violations, which matches the prose. Low risk.

  • [L304] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"You can combine this with policies for S3 versioning, S3 encryption, S3 public access blocks, object retention, and IAM access patterns. That moves Part 11 support from a manual checklist to a deployment gate…" — verdict: unverifiable (verifier rate-limited; HTTP 429). Author question: confirm each of the named policy categories has a corresponding example in the Pulumi Policy-as-Code repo or docs so the "combine" framing is concrete.

  • [L308] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi supports infrastructure evidence workflows aligned with FDA 21 CFR Part 11 expectations…" — verdict: unverifiable (verifier rate-limited; HTTP 429). This is the conclusion sentence summarizing the post's own argument — its accuracy follows from the verified body claims, not from an external citation; safe to leave as-is.

Style findings

Click each filename to expand.

content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md (4 issues: 2 listicle heading, 1 weasel word, 1 wordiness)
  • line 39: [style] listicle heading — Numbered listicle H2 heading ('Part 11'). H2 numbered listicles are commonly seen in AI-drafted post structure; consider whether enumeration suits the content or whether the structure can flow more naturally.
  • line 43: [style] weasel word — 'several' is a weasel word!
  • line 49: [style] listicle heading — Numbered listicle H2 heading ('Part 11'). H2 numbered listicles are commonly seen in AI-drafted post structure; consider whether enumeration suits the content or whether the structure can flow more naturally.
  • line 304: [style] wordiness — 'it is' is too wordy.

📋 Triaged verifier findings

I double-checked these and realized they weren't real findings — click to expand
  • [L101] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"const auditKey = new aws.kms.Key('part11-audit-records-key', {"Mis-sourced: This is a TypeScript variable declaration inside a code block, not a falsifiable assertion. Other code lines from the same block (L132, L134, L141, L157) were correctly classified as not-a-claim; this one was caught by the same part11- regex but missed the same triage.

  • [L105] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Version: '2012-10-17',"Mis-sourced: This is a standard AWS IAM policy-document version identifier inside a code block, identical to L121 and L156 which were correctly classified as not-a-claim. Same string, same context, different verdict — duplicate misclassification.

  • [L110] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"AWS: arn:aws:iam::${identity.accountId}:root,"Mis-sourced: This is a templated IAM principal ARN inside the policy document literal — a code line, not a falsifiable claim about an external fact. The IAM root-ARN format is also confirmed by adjacent L99 (CloudTrail ARN format verified ✅).

  • [L151] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"The example code sets the CloudWatch Log Group retention to 365 days (logRetentionDays = 365)."Mis-sourced: The verifier tried to confirm this via WebSearch against the live blog post (which doesn't exist yet — this PR is the blog post). The claim is a self-referential description of the snippet's own code at L151 (const logRetentionDays = 365;) and L154 (retentionInDays: logRetentionDays); reading the changed file is the ground truth.

  • [L215] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Version: '2012-10-17',"Mis-sourced: Same IAM policy-language version constant as L105, L121, L156 — not-a-claim per the established treatment of this string elsewhere in the same diff.

  • [L261] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Pulumi Neo is described as an AI-powered infrastructure agent."Mis-sourced: Duplicate of the verified claim at L181 (✅ verified against content/product/neo.md) and the verified claim on the same line ("Pulumi Neo can assist in maintaining and documenting compliance posture"). The verifier ran out of turns on a claim already settled by adjacent records.

💡 Pre-existing issues in touched files (optional)

No pre-existing issues in touched files.

✅ Resolved since last review

  • [L71] content/blog/fda-21-cfr-part-11-compliance-with-pulumi/index.md"Record protection and retrieval are addressed under 21 CFR Part 11 sections 11.10(b) and (c)." — resolved in 67b4c05. The heading is now "Record protection, retrieval, and copies for inspection (11.10(b) and (c))" and the prose correctly attributes §11.10(c) (protection/ready retrieval) and §11.10(b) (generating accurate and complete copies for FDA inspection) as distinct requirements. No duplicate occurrences of the incorrect attribution in frontmatter or social copy.

📜 Review history

  • 2026-05-19T03:22:43Z — Initial review of new Part 11 blog post: 1 contradicted Part 11 subsection-attribution (§11.10(b) vs (c)); verifier rate-limited on ~10 Pulumi-capability claims; 6 code-snippet misclassifications triaged. (1561c04)
  • 2026-05-19T04:10:00Z — re-reviewed after fix push (1 new commit, 67b4c05): [L71] §11.10(b)/(c) attribution resolved; 0 outstanding findings remain.

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:outstanding-issues Claude review completed; outstanding has author-actionable findings 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:outstanding-issues Claude review completed; outstanding has author-actionable findings 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