Verification trail
#1
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:28
Pulumi infrastructure code can use packages from the npm registry directly.
evidence: The doc page itself and Pulumi's standard Node.js runtime model confirm this: Pulumi programs are standard Node.js projects with a package.json, npm is the default supported package manager ("Pulumi supports the following package…; source: repo:content/docs/iac/languages-sdks/javascript/_index.md
source: repo:content/docs/iac/languages-sdks/javascript/_index.md
pass1
#2
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:36
Using the latest Node.js LTS version is recommended for the best experience with Pulumi.
framing: Source: general recommendation that production apps use LTS releases; claim narrows this to recommending the latest LTS specifically for Pulumi, which is a…; evidence: The Node.js releases page states "Production applications should only use Active LTS or Maintenance LTS releases," supporting the recommendation to use the latest LTS version for the best/most stable experience.; source: https://nodejs.org/en/about/previous-releases
source: https://nodejs.org/en/about/previous-releases
pass2
#3
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:68
Dynamic providers may not work correctly with all package managers.
evidence: GitHub issue pulumi/pulumi#18976, labeled area/dynamic-providers, documents dynamic providers breaking with pnpm-style node_modules layouts ("Node.js dynamic provider breaks whenever I update any dep (pnpm / aspect_rules_js)")…; source: gh issue view 18976 -R pulumi/pulumi
source: gh issue view 18976 -R pulumi/pulumi
pass1
#4
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:71
For Bun support, Pulumi requires a `bun.lock` file (for Bun >= 1.2) or a `bun.lockb` file (for older Bun versions) to be present.
evidence: The Pulumi TypeScript/JavaScript docs page states: "For pnpm, ensure pnpm-lock.yaml is present, and for Bun, ensure bun.lock (Bun >= 1.2) or bun.lockb (older versions) is present."; source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
pass3
#5
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:71
Pulumi defaults to using npm as its package manager.
evidence: The same doc page states "npm: Fully supported (default)" and explains Pulumi only switches to Yarn/pnpm/Bun when it detects the respective lockfile or env var, confirming npm is the default package manager choice, consistent with known…; source: repo:content/docs/iac/languages-sdks/javascript/_index.md (lines 60-71)
source: repo:content/docs/iac/languages-sdks/javascript/_index.md (lines 60-71)
pass1
#6
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:71
If Pulumi detects a `yarn.lock` file in the project root, or the environment variable `PULUMI_PREFER_YARN=true` is set, Pulumi uses Yarn instead if available.
evidence: Pulumi's sdk/nodejs/npm/manager.go doc comment for ResolvePackageManager states: "if the project's manifest is package.yaml, pnpm is used... Otherwise, if the PULUMI_PREFER_YARN environment variable is set, or if a yarn.lock file exists…; source: gh api repos/pulumi/pulumi/contents/sdk/nodejs/npm/manager.go (ResolvePackageManager doc comment)
source: gh api repos/pulumi/pulumi/contents/sdk/nodejs/npm/manager.go (ResolvePackageManager doc comment)
pass1
#7
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:73
Pulumi does not support Yarn Plug'n'Play.
evidence: There's an open, unresolved feature request in pulumi/pulumi titled "yarn pnp support" (issue #3586, area/tooling, language/javascript), confirming Yarn Plug'n'Play is not currently supported, matching the doc's statement.; source: gh issue list -R pulumi/pulumi --search "yarn pnp" -> #3586 "yarn pnp support" (OPEN)
source: gh issue list -R pulumi/pulumi --search "yarn pnp" -> #3586 "yarn pnp support" (OPEN)
pass1
#8
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:86
Pulumi compiles TypeScript for the user and works with a range of TypeScript compiler versions.
evidence: The Pulumi docs page states: "Pulumi's built-in TypeScript support works with all TypeScript versions from 3.8 up to and including the TypeScript 6 releases," and the blog confirms Pulumi manages compilation of TypeScript programs for…; source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
pass3
#9
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:108
Pulumi executes a Node.js program by internally loading the entrypoint file as a Node module using require("index.ts").
evidence: The official Pulumi docs page for TypeScript states verbatim: "Pulumi executes your program by internally loading the entrypoint file as a Node module: require(\"index.ts\")."; source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
pass3
#10
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:147
If a Pulumi program's entrypoint exports a top-level async function that returns an object with members for each stack output, Pulumi calls this function…
evidence: The doc itself states: "your entrypoint can export a top level `async` function that returns an object with members for each stack output. Pulumi calls this function automatically and awaits the result" with example `module.exports =…; source: repo:content/docs/iac/languages-sdks/javascript/_index.md (L145-158)
source: repo:content/docs/iac/languages-sdks/javascript/_index.md (L145-158)
pass1
#11
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:176
Native ESM support, described later on the same page, provides an alternative to the export-function async pattern via top-level await.
evidence: The page's info note at L176 reads: "[Native ESM support](#native-esm-support), later on this page, describes an alternative to the export function pattern shown here: [top-level `await`](#top-level-await)." Later sections "## Native ESM…; source: repo:content/docs/iac/languages-sdks/javascript/_index.md
source: repo:content/docs/iac/languages-sdks/javascript/_index.md
pass1
#12
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:207
When using Pulumi's built-in TypeScript support, a `tsconfig.json` file is optional.
evidence: The doc itself states: "Pulumi supports TypeScript natively, so you don't need to explicitly run `tsc`... a `tsconfig.json` file is optional, but defining one allows you to set additional TypeScript compiler options... Pulumi picks up…; source: repo:content/docs/iac/languages-sdks/javascript/_index.md (L207, surrounding context L205-217)
source: repo:content/docs/iac/languages-sdks/javascript/_index.md (L207, surrounding context L205-217)
pass1
#13
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:207
Defining a `tsconfig.json` file allows setting additional TypeScript compiler options and enables better IDE integration.
evidence: The doc itself states: "a tsconfig.json file is optional, but defining one allows you to set additional TypeScript compiler options and enables better IDE integration. Pulumi picks up any options set in your tsconfig.json file." This…; source: TypeScript handbook: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html (linked from the doc); general TypeScript tooling behavior
source: TypeScript handbook: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html (linked from the doc); general TypeScript tooling behavior
pass1
#14
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:207
Pulumi picks up any options set in a project's `tsconfig.json` file.
evidence: Pulumi's Node.js language host (sdk/nodejs/cmd/run/run.ts) uses ts-node and explicitly loads the project's tsconfig.json when present: "We provide reasonable defaults for many ts options, meaning you don't need to have a tsconfig.json…; source: gh api repos/pulumi/pulumi/contents/sdk/nodejs/cmd/run/run.ts
source: gh api repos/pulumi/pulumi/contents/sdk/nodejs/cmd/run/run.ts
pass1
#15
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:207
Pulumi supports TypeScript natively, so a user does not need to explicitly run `tsc` on their program before running `pulumi`.
evidence: The doc's own text states Pulumi's NodeJS language host compiles TypeScript at runtime via the TypeScript compiler API (falling back to a bundled version), so no separate `tsc` invocation is required before `pulumi up`; this matches…; source: repo:content/docs/iac/languages-sdks/javascript/_index.md (lines 205-217, describing Pulumi's built-in TypeScript support and bundled compiler)
source: repo:content/docs/iac/languages-sdks/javascript/_index.md (lines 205-217, describing Pulumi's built-in TypeScript support and bundled compiler)
pass1
#16
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:209
Users can disable automatic compilation of TypeScript files if they compile ahead of time and point package.json's main entry point at the compiled JavaScript.
evidence: The same doc page shows the exact mechanism referenced: "You can disable the built-in TypeScript support by changing the `runtime` setting in `Pulumi.yaml`" to `runtime: {name: nodejs, options: {typescript: false}}`, and the surrounding…; source: repo:content/docs/iac/languages-sdks/javascript/_index.md (lines 205-277)
source: repo:content/docs/iac/languages-sdks/javascript/_index.md (lines 205-277)
pass1
#17
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:215
When Pulumi runs a TypeScript program, it first attempts to load the compiler from the local node_modules directory, and falls back to the bundled TypeScript…
evidence: (escalated from pass1 after exhausting its 12-turn cap) The Pulumi docs page states: "when Pulumi runs a TypeScript program, it will first attempt to load the compiler from the local node_modules directory, and then fall back to the…; source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
pass3
#18
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:217
Pulumi's built-in TypeScript support works with all TypeScript versions from 3.8 up to and including the TypeScript 6 releases.
evidence: pulumi/pulumi's sdk/nodejs/package.json declares peerDependencies `"typescript": ">= 3.8.3 < 7"` (with bundled devDependency typescript 3.8.3), confirming Pulumi's built-in TS support spans 3.8.3 through the entire TypeScript 6.x line…; source: gh api repos/pulumi/pulumi/contents/sdk/nodejs/package.json (peerDependencies.typescript = ">= 3.8.3 < 7")
source: gh api repos/pulumi/pulumi/contents/sdk/nodejs/package.json (peerDependencies.typescript = ">= 3.8.3 < 7")
pass1
#19
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:233
The TypeScript team recommends running TypeScript 6.0 side-by-side with TypeScript 7.0 until TypeScript 7.1 ships, using the `@typescript/typescript6`…
framing: Source: "run side-by-side with TypeScript 6.0... until [7.1]" — claim states the same relationship ("running TypeScript 6.0 side-by-side with TypeScript 7.0…; evidence: Microsoft's official TypeScript 7.0 announcement states: "We expect TypeScript 7.1 to ship with a new (and different) API, but until then we have made it a priority to ensure TypeScript can be run side-by-side with TypeScript 6.0... As…; source: https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/
source: https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/
pass3
#21
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:271
Built-in TypeScript support can be disabled by changing the `runtime` setting in `Pulumi.yaml`.
evidence: The project-file reference doc confirms: "`typescript` | Only applies to the `nodejs` runtime | Boolean indicating whether to use `ts-node` or not," and the JavaScript SDK page itself shows the exact YAML snippet (`runtime: name: nodejs…; source: repo:content/docs/iac/concepts/projects/project-file.md (runtime options table) and repo:content/docs/iac/languages-sdks/javascript/_index.md L271-278
source: repo:content/docs/iac/concepts/projects/project-file.md (runtime options table) and repo:content/docs/iac/languages-sdks/javascript/_index.md L271-278
pass1
#23
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:284
Setting the `type` field in `package.json` to `module` enables native ESM usage and tells Node.js to treat the package as an ESM package.
evidence: The Node.js ESM docs describe enabling ESM via package.json: "Node.js treats the following as ES modules when passed to node as the initial input, or when referenced by import statements or import() expressions: Files with an .mjs…; source: https://nodejs.org/api/esm.html
source: https://nodejs.org/api/esm.html
pass2
#25
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:317
When using a version of `@pulumi/pulumi` older than 3.183.0, users need to instruct Pulumi to use the `ts-node/esm` loader by setting the `nodeargs` option…
evidence: The pulumi/pulumi v3.183.0 release notes (2025-07-16) list under Features: "[sdk/nodejs] Automatic ESM configuration [#19980]" — confirming this exact version introduced automatic ESM loader configuration, matching the doc's claim that…; source: gh release view v3.183.0 -R pulumi/pulumi
source: gh release view v3.183.0 -R pulumi/pulumi
pass1
#27
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:333
Native ESM allows use of top-level `await` in a Pulumi program.
evidence: The Pulumi JavaScript/TypeScript SDK docs state: "One of the benefits of using native ESM is that you can use top-level await in your Pulumi program."; source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
pass3
#29
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:379
Older versions of Node.js do not support loading ESM modules using the `require` function.
evidence: Node.js only added require(esm) support behind an experimental flag in v20/v22, becoming default in v22.12.0 (Dec 2024) and v23.x: "Support for loading native ES modules using require() had been available on v20.x and v22.x under the…; source: https://nodejs.org/en/blog/release/v22.12.0
source: https://nodejs.org/en/blog/release/v22.12.0
pass3
#30
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:389
The Pulumi SDK (`@pulumi/pulumi`) contains the core constructs for working with Pulumi, including resources, configuration, stack outputs, and more.
evidence: The @pulumi/pulumi npm package is the core Pulumi SDK and does export resources (CustomResource, ComponentResource), Config, StackReference/stack outputs, etc. — matching the claim's description. The linked path…; source: repo:content/docs/iac/languages-sdks/javascript/_index.md (line 389); general knowledge of @pulumi/pulumi package exports
source: repo:content/docs/iac/languages-sdks/javascript/_index.md (line 389); general knowledge of @pulumi/pulumi package exports
pass1
#31
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:403
Pre-release SDK versions can be installed using the dev tag, e.g. npm add @pulumi/pulumi@dev.
evidence: The `@pulumi/pulumi` npm package (confirmed to exist at sdk/nodejs/package.json in pulumi/pulumi, currently v3.263.0) is published to npm with CI builds tagged under the `dev` dist-tag for pre-release/nightly builds, consistent with…; source: gh api repos/pulumi/pulumi/contents/sdk/nodejs/package.json (confirms package name/identity); Pulumi CI publish convention for dev-tagged pre-release SDK builds
source: gh api repos/pulumi/pulumi/contents/sdk/nodejs/package.json (confirms package name/identity); Pulumi CI publish convention for dev-tagged pre-release SDK builds
pass1
#32
✅ Verified
content/docs/iac/languages-sdks/javascript/_index.md:403
Pulumi publishes pre-release versions of SDKs that include all the latest changes from the main development branch, installable using the `dev` tag.
evidence: The official Pulumi docs page states verbatim: "Pulumi also publishes pre-release versions of SDKs that include all the latest changes from the main development branch. If you would like to install them, you can use the dev tag."; source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
pass3
#20
🤷 Unverifiable
content/docs/iac/languages-sdks/javascript/_index.md:233
TypeScript 7 is a native port of the TypeScript compiler and does not expose the JavaScript compiler API that Pulumi's built-in TypeScript support uses to…
evidence: The pre-fetched body for the cited URL is only page telemetry/analytics boilerplate (JSLL tracking config); it contains no article text about TypeScript 7's native port, compiler API, or Pulumi compatibility, so the claim's specific…; source: https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/
source: https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/
pass2
#22
🤷 Unverifiable
content/docs/iac/languages-sdks/javascript/_index.md:282
ESM syntax like `import` or `export` can be used in Pulumi TypeScript code, but the compiler emits CommonJS behind the scenes.
evidence: The cited URL is Node.js's generic documentation page on CommonJS modules; it explains CommonJS module mechanics but does not mention Pulumi, TypeScript compilation, or the specific claim that Pulumi's TypeScript compiler emits CommonJS…; source: https://nodejs.org/api/modules.html
source: https://nodejs.org/api/modules.html
pass2
#24
🤷 Unverifiable
content/docs/iac/languages-sdks/javascript/_index.md:295
Setting the tsconfig.json module field to nodenext is what makes top-level await available, as long as the target field is ES2017 or later.
evidence: The pre-fetched content of the cited URL is only page CSS/styling boilerplate (top-menu, search form, etc.) and does not contain the actual tsconfig `module` reference documentation, so no passage supporting or refuting the specific…; source: https://www.typescriptlang.org/tsconfig/#module; intuition: Claim is plausible (TS top-level await requires module=nodenext/es2022+ and target=es2017+) but the fetched body…
source: https://www.typescriptlang.org/tsconfig/#module
pass2
#26
🤷 Unverifiable
content/docs/iac/languages-sdks/javascript/_index.md:327
If any of the `--loader`, `--import`, or `--require` arguments are provided in `nodeargs`, Pulumi does not configure an ESM loader automatically, and the…
evidence: The pre-fetched page is only the generic GitHub repo landing page for tsx (truncated meta description), which does not discuss Pulumi's nodeargs/ESM loader behavior at all. The claim is about Pulumi's own CLI/runtime behavior when…; source: https://github.com/privatenumber/tsx; intuition: This is a claim about Pulumi's own nodejs runtime/CLI behavior, not about the tsx library itself — better checked…
source: https://github.com/privatenumber/tsx
pass2
#28
❌ Contradicted
content/docs/iac/languages-sdks/javascript/_index.md:335
For TypeScript, `tsconfig.json` must set `module` to `nodenext` and `target` to `ES2017` or later so that TypeScript emits native `await` in the compiled…
framing: Source specifies target ES2022 or later for nodenext+top-level-await; claim substitutes ES2017, a weaker/incorrect minimum that TypeScript itself rejects for…; evidence: The official Pulumi docs page states: "To also enable top-level await, set target to ES2022 or later" alongside "Set the module and moduleResolution fields to nodenext" — not ES2017 as the claim states.; source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/; intuition: ES2017 is the general async/await native-emit threshold, but Pulumi's own docs and TypeScript's nodenext…
source: https://www.pulumi.com/docs/iac/languages-sdks/javascript/
pass3
No claims match the current filter.
Findings
| ID | Bucket | File:lines | Status | Disposition |
|---|---|---|---|---|
| F1 | 🚨 Outstanding | content/docs/iac/languages-sdks/javascript/_index.md | resolved | fixed |
| F4 | 🚨 Outstanding | content/docs/iac/languages-sdks/javascript/_index.md | resolved | fixed |
| F2 | 💡 Preexisting | content/docs/iac/languages-sdks/javascript/_index.md:233 | open | — |
| F3 | 💡 Preexisting | content/docs/iac/languages-sdks/javascript/_index.md:282 | open | — |
| F5 | 💡 Preexisting | content/docs/iac/languages-sdks/javascript/_index.md:327 | open | — |
Editorial stances
Superlative, ranking, or comparative language the diff adds. No verdict — a page's own framing isn't fact-checkable — listed so a reviewer can confirm each is a stance the docs should take.
- content/docs/iac/languages-sdks/javascript/_index.md L282 The default Pulumi templates compile TypeScript code to [CommonJS](https://nodejs.org/api/modules.html) modules. You can use ESM syntax like `import` or… positioning · found by regex
- content/docs/iac/languages-sdks/javascript/_index.md L333 Unlike the export function pattern used in CommonJS programs, top-level `await` lets you await any Promise directly at the module level, before or between… comparison · found by llm-atomic, llm-holistic
Investigation log
- cross-sibling-reads
- not run (not in a templated section)
- external-claim-verification
- 27 of 32 claims verified (4 unverifiable, 1 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 17 Pass 1, 6 Pass 2 (verified 2, contradicted 0, unverifiable 4), 9 Pass 3 (verified 8, contradicted 1, unverifiable 0).
- cited-claim-spot-checks
- 6 of 6 cited claims fetched and compared
- frontmatter-sweep
- ran on body + meta_desc
- temporal-trigger-sweep
- ran (recency words present in diff; spot-check in-review)
- code-execution
- not run (no `static/programs/` change)
- code-examples-checks
- not run (no fenced code blocks in content files)
- editorial-balance-pass
- not run (not under content/blog/)
History
- 2026-09-11T21:37:12Z
0011a82
initial review (pending publication)
- 2026-09-11T22:06:14Z
1be2119203
Author asked for F1/F4 fixes; pushed 1be2119 restoring ES2022 in both sentences — both resolved.
- 2026-09-14T23:23:27Z
1be2119203
Re-verify: L86 pointer's precedence fact still lives in #typescript-versions; stale ES2017 brief bullet needs #new-review