H3 consumer type closure evidence (SPEC-002)
Generated by pnpm test:consumer:types at 2026-09-25T15:39:54.421Z, against baseline f95e566a4f8a3e595a83aa1c4e8b3c96ad17e8de.
This report is regenerated on every run. It does not overwrite
the SPEC-001 report; both are retained.
Scope. This experiment tests one hypothesis: whether explicit compiler libs and a closed set of
published type dependencies can qualify H3 v2 2.0.1-rc.32 for a strict Node-only consumer, without
suppressions, patched declarations, or foreign runtime globals. It makes no Angular, Analog, Nitro,
browser, Bun or Cloudflare Workers support claim; Bun/Workers type packages are installed here only
as diagnostic controls.
Versions
| Tool | Version |
|---|---|
| Node (actual) | v22.23.0 |
| pnpm | 10.30.1 |
| npm | 10.9.8 |
Per-case resolved h3/crossws/provider versions are reported in each case section below; the
fixed tuple targets are H3 2.0.1-rc.32, TypeScript 6.0.3, @types/node 22.20.3, srvx
1.0.5, rou3 0.9.2, crossws 0.4.12, @types/bun/bun-types 1.4.2,
@cloudflare/workers-types 5.20260917.1. SPEC-002 pins Node 22.23.0; report actual Node
drift from that pin honestly rather than treating it as a silent substitution — it is an execution
environment detail, not a dependency resolution the matrix controls.
Matrix cases A–D
Case A — historical control
Reproduce TS4113 (H3 HTTPError.isError) and TS2307 (crossws) without any Strata source access.
lib:ES2023, DOM, DOM.Iterable, esnext.decoratorstypes:node- Extra dependencies:
{} - Extra devDependencies:
{} - Activates foreign runtime ambient types: false
- Eligible under SPEC-002 promotion rules: false — Not eligible: 2 H3-only diagnostic(s), 2 packed-Strata diagnostic(s).
H3-only reproduction
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@(not installed),@types/bun@(not installed),bun-types@(not installed),@cloudflare/workers-types@(not installed) - Diagnostic origin counts:
h3: 2
| Code | Origin | Location | Message |
|---|---|---|---|
| TS4113 | h3 | node_modules/h3/dist/h3.d.mts:638:19 | This member cannot have an 'override' modifier because it is not declared in the base class 'Error'. |
| TS2307 | h3 | node_modules/h3/dist/index.d.mts:3:106 | Cannot find module 'crossws' or its corresponding type declarations. |
Packed Strata consumer
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@(not installed),@strata-sc/core@0.1.0,@strata-sc/h3@0.1.0 - Diagnostic origin counts:
h3: 2
| Code | Origin | Location | Message |
|---|---|---|---|
| TS4113 | h3 | node_modules/h3/dist/h3.d.mts:638:19 | This member cannot have an 'override' modifier because it is not declared in the base class 'Error'. |
| TS2307 | h3 | node_modules/h3/dist/index.d.mts:3:106 | Cannot find module 'crossws' or its corresponding type declarations. |
Case B — narrow lib
Prove TS4113 disappears with esnext.error while the independent crossws error remains.
lib:ES2023, DOM, DOM.Iterable, esnext.decorators, esnext.errortypes:node- Extra dependencies:
{} - Extra devDependencies:
{} - Activates foreign runtime ambient types: false
- Eligible under SPEC-002 promotion rules: false — Not eligible: 1 H3-only diagnostic(s), 1 packed-Strata diagnostic(s).
H3-only reproduction
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@(not installed),@types/bun@(not installed),bun-types@(not installed),@cloudflare/workers-types@(not installed) - Diagnostic origin counts:
h3: 1
| Code | Origin | Location | Message |
|---|---|---|---|
| TS2307 | h3 | node_modules/h3/dist/index.d.mts:3:106 | Cannot find module 'crossws' or its corresponding type declarations. |
Packed Strata consumer
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@(not installed),@strata-sc/core@0.1.0,@strata-sc/h3@0.1.0 - Diagnostic origin counts:
h3: 1
| Code | Origin | Location | Message |
|---|---|---|---|
| TS2307 | h3 | node_modules/h3/dist/index.d.mts:3:106 | Cannot find module 'crossws' or its corresponding type declarations. |
Case C — published peer
Test whether declaring crossws as an explicit peer alone closes the Node declaration graph.
lib:ES2023, DOM, DOM.Iterable, esnext.decorators, esnext.errortypes:node- Extra dependencies:
{"crossws":"0.4.12"} - Extra devDependencies:
{} - Activates foreign runtime ambient types: false
- Eligible under SPEC-002 promotion rules: false — Not eligible: 4 H3-only diagnostic(s), 4 packed-Strata diagnostic(s).
H3-only reproduction
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@0.4.12,@types/bun@(not installed),bun-types@(not installed),@cloudflare/workers-types@(not installed) - Diagnostic origin counts:
crossws->bun: 1crossws->cloudflare-workers: 3
| Code | Origin | Location | Message |
|---|---|---|---|
| TS2307 | crossws->bun | node_modules/crossws/dist/_chunks/bun.d.mts:2:59 | Cannot find module 'bun' or its corresponding type declarations. |
| TS2307 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:3:31 | Cannot find module 'cloudflare:workers' or its corresponding type declarations. |
| TS2307 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:4:21 | Cannot find module '@cloudflare/workers-types' or its corresponding type declarations. |
| TS2552 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:36:48 | Cannot find name 'DurableObjectState'. Did you mean 'WSDurableObjectStub'? |
Packed Strata consumer
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@0.4.12,@strata-sc/core@0.1.0,@strata-sc/h3@0.1.0 - Diagnostic origin counts:
crossws->bun: 1crossws->cloudflare-workers: 3
| Code | Origin | Location | Message |
|---|---|---|---|
| TS2307 | crossws->bun | node_modules/crossws/dist/_chunks/bun.d.mts:2:59 | Cannot find module 'bun' or its corresponding type declarations. |
| TS2307 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:3:31 | Cannot find module 'cloudflare:workers' or its corresponding type declarations. |
| TS2307 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:4:21 | Cannot find module '@cloudflare/workers-types' or its corresponding type declarations. |
| TS2552 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:36:48 | Cannot find name 'DurableObjectState'. Did you mean 'WSDurableObjectStub'? |
Case D-node-only — provider diagnostic — installed, Node-only types
Install Bun/Workers type providers without activating them, to see whether crossws's own module resolution (not types inclusion) already leaks them into the Node-only program.
lib:ES2023, DOM, DOM.Iterable, esnext.decorators, esnext.errortypes:node- Extra dependencies:
{"crossws":"0.4.12"} - Extra devDependencies:
{"@types/bun":"1.4.2","bun-types":"1.4.2","@cloudflare/workers-types":"5.20260917.1"} - Activates foreign runtime ambient types: false
- Eligible under SPEC-002 promotion rules: false — Not eligible: 6 H3-only diagnostic(s), 6 packed-Strata diagnostic(s).
H3-only reproduction
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@0.4.12,@types/bun@1.4.2,bun-types@1.4.2,@cloudflare/workers-types@5.20260917.1 - Diagnostic origin counts:
bun-types: 4crossws->cloudflare-workers: 2
| Code | Origin | Location | Message |
|---|---|---|---|
| TS2694 | bun-types | node_modules/bun-types/globals.d.ts:320:74 | Namespace '"node:util"' has no exported member 'TextEncoderEncodeIntoResult'. |
| TS2552 | bun-types | node_modules/bun-types/overrides.d.ts:352:47 | Cannot find name 'ConnectionOptions'. Did you mean 'BunConnectionOptions'? |
| TS2552 | bun-types | node_modules/bun-types/overrides.d.ts:390:67 | Cannot find name 'KeyObject'. Did you mean 'Object'? |
| TS2304 | bun-types | node_modules/bun-types/overrides.d.ts:394:88 | Cannot find name 'TLSSocket'. |
| TS2307 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:3:31 | Cannot find module 'cloudflare:workers' or its corresponding type declarations. |
| TS2552 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:36:48 | Cannot find name 'DurableObjectState'. Did you mean 'WSDurableObjectStub'? |
Packed Strata consumer
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@0.4.12,@strata-sc/core@0.1.0,@strata-sc/h3@0.1.0 - Diagnostic origin counts:
bun-types: 4crossws->cloudflare-workers: 2
| Code | Origin | Location | Message |
|---|---|---|---|
| TS2694 | bun-types | node_modules/bun-types/globals.d.ts:320:74 | Namespace '"node:util"' has no exported member 'TextEncoderEncodeIntoResult'. |
| TS2552 | bun-types | node_modules/bun-types/overrides.d.ts:352:47 | Cannot find name 'ConnectionOptions'. Did you mean 'BunConnectionOptions'? |
| TS2552 | bun-types | node_modules/bun-types/overrides.d.ts:390:67 | Cannot find name 'KeyObject'. Did you mean 'Object'? |
| TS2304 | bun-types | node_modules/bun-types/overrides.d.ts:394:88 | Cannot find name 'TLSSocket'. |
| TS2307 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:3:31 | Cannot find module 'cloudflare:workers' or its corresponding type declarations. |
| TS2552 | crossws->cloudflare-workers | node_modules/crossws/dist/_chunks/cloudflare.d.mts:36:48 | Cannot find name 'DurableObjectState'. Did you mean 'WSDurableObjectStub'? |
Case D-full-providers — provider diagnostic — Node + Bun + Workers types activated
Activate Bun and Workers ambient globals alongside Node/DOM. Ineligible for the Node contract by SPEC-002's stop rule even if it typechecked cleanly.
lib:ES2023, DOM, DOM.Iterable, esnext.decorators, esnext.errortypes:node, bun, @cloudflare/workers-types- Extra dependencies:
{"crossws":"0.4.12"} - Extra devDependencies:
{"@types/bun":"1.4.2","bun-types":"1.4.2","@cloudflare/workers-types":"5.20260917.1"} - Activates foreign runtime ambient types: true
- Eligible under SPEC-002 promotion rules: false — Disqualified: activates Bun/Workers ambient runtime types for a Node-only consumer (stop rule), independent of exit code.
H3-only reproduction
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@0.4.12,@types/bun@1.4.2,bun-types@1.4.2,@cloudflare/workers-types@5.20260917.1 - Diagnostic origin counts:
cloudflare-workers-types: 78other:node_modules/@types/node/buffer.buffer.d.ts: 1other:node_modules/@types/node/buffer.d.ts: 3other:node_modules/@types/node/globals.d.ts: 2bun-types: 10typescript-lib-conflict: 31
| Code | Origin | Location | Message |
|---|---|---|---|
| TS6200 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:17:1 | Definitions of the following identifiers conflict with those in another file: DOMException, console, BufferSource, CompileError, RuntimeError, ValueType, Global, ImportValue, ModuleImports, Imports, ExportValue, Exports, Instance, Memory, I… (truncated, full text in raw tsc output) |
| TS2403 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:17:13 | Subsequent variable declarations must have the same type. Variable 'onmessage' must be of type '((this: Window, ev: MessageEvent<any>) => any) | null', but here has type 'never'. |
| TS2508 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:79:50 | No base constructor has the specified number of type arguments. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:224:5 | Subsequent property declarations must have the same type. Property 'value' must be of type 'T', but here has type 'keyof ValueTypeMap'. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:397:12 | Type 'EventListenerOrEventListenerObject' is not generic. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:404:12 | Type 'EventListenerOrEventListenerObject' is not generic. |
| TS2451 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:486:15 | Cannot redeclare block-scoped variable 'Buffer'. |
| TS2451 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:487:15 | Cannot redeclare block-scoped variable 'process'. |
| TS2451 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:488:15 | Cannot redeclare block-scoped variable 'global'. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:571:3 | Subsequent property declarations must have the same type. Property 'transfer' must be of type 'Transferable[] | undefined', but here has type 'any[] | undefined'. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:977:3 | Type 'EventListener' is not generic. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:994:14 | Type 'EventListenerOrEventListenerObject' is not generic. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1004:14 | Type 'EventListenerOrEventListenerObject' is not generic. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1478:3 | All declarations of 'kty' must have identical modifiers. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1478:3 | Subsequent property declarations must have the same type. Property 'kty' must be of type 'string | undefined', but here has type 'string'. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1726:3 | Subsequent property declarations must have the same type. Property 'data' must be of type 'T | undefined', but here has type 'any'. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1729:3 | Subsequent property declarations must have the same type. Property 'source' must be of type 'MessageEventSource | null | undefined', but here has type 'MessagePort | undefined'. |
| TS2300 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1835:15 | Duplicate identifier 'HTMLRewriter'. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1861:3 | All declarations of 'tagName' must have identical modifiers. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1862:12 | Subsequent property declarations must have the same type. Property 'attributes' must be of type 'NamedNodeMap', but here has type 'IterableIterator<string[]>'. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1864:12 | Subsequent property declarations must have the same type. Property 'namespaceURI' must be of type 'string | null', but here has type 'string'. |
| TS2403 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2046:13 | Subsequent variable declarations must have the same type. Variable 'Response' must be of type '{ new (body?: BodyInit | null | undefined, init?: ResponseInit | undefined): Response; prototype: Response; error(): Response; json(data: any… (truncated, full text in raw tsc output) |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2070:3 | All declarations of 'status' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2076:3 | All declarations of 'statusText' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2082:3 | All declarations of 'headers' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2088:3 | All declarations of 'ok' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2094:3 | All declarations of 'redirected' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2100:3 | All declarations of 'url' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2108:3 | All declarations of 'type' must have identical modifiers. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2108:3 | Subsequent property declarations must have the same type. Property 'type' must be of type 'ResponseType', but here has type '"default" | "error"'. |
| TS2403 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2125:13 | Subsequent variable declarations must have the same type. Variable 'Request' must be of type '{ new (input: RequestInfo | URL, init?: RequestInit<CfProperties<unknown>> | undefined): Request<unknown, CfProperties<unknown>>; prototype: Re… (truncated, full text in raw tsc output) |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2128:12 | Type 'RequestInfo' is not generic. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2152:3 | All declarations of 'method' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2158:3 | All declarations of 'url' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2164:3 | All declarations of 'headers' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2170:3 | All declarations of 'redirect' must have identical modifiers. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2170:3 | Subsequent property declarations must have the same type. Property 'redirect' must be of type 'RequestRedirect', but here has type 'string'. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2177:3 | All declarations of 'signal' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2184:3 | All declarations of 'integrity' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2190:3 | All declarations of 'keepalive' must have identical modifiers. |
85 further diagnostic(s) omitted from this table; see the origin counts above for the complete distribution.
Packed Strata consumer
- Install exit: 0
tsc --noEmitexit: 2- Resolved versions:
h3@2.0.1-rc.32,crossws@0.4.12,@strata-sc/core@0.1.0,@strata-sc/h3@0.1.0 - Diagnostic origin counts:
cloudflare-workers-types: 78other:node_modules/@types/node/buffer.buffer.d.ts: 1other:node_modules/@types/node/buffer.d.ts: 3other:node_modules/@types/node/globals.d.ts: 2bun-types: 10typescript-lib-conflict: 31
| Code | Origin | Location | Message |
|---|---|---|---|
| TS6200 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:17:1 | Definitions of the following identifiers conflict with those in another file: DOMException, console, BufferSource, CompileError, RuntimeError, ValueType, Global, ImportValue, ModuleImports, Imports, ExportValue, Exports, Instance, Memory, I… (truncated, full text in raw tsc output) |
| TS2403 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:17:13 | Subsequent variable declarations must have the same type. Variable 'onmessage' must be of type '((this: Window, ev: MessageEvent<any>) => any) | null', but here has type 'never'. |
| TS2508 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:79:50 | No base constructor has the specified number of type arguments. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:224:5 | Subsequent property declarations must have the same type. Property 'value' must be of type 'T', but here has type 'keyof ValueTypeMap'. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:397:12 | Type 'EventListenerOrEventListenerObject' is not generic. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:404:12 | Type 'EventListenerOrEventListenerObject' is not generic. |
| TS2451 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:486:15 | Cannot redeclare block-scoped variable 'Buffer'. |
| TS2451 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:487:15 | Cannot redeclare block-scoped variable 'process'. |
| TS2451 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:488:15 | Cannot redeclare block-scoped variable 'global'. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:571:3 | Subsequent property declarations must have the same type. Property 'transfer' must be of type 'Transferable[] | undefined', but here has type 'any[] | undefined'. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:977:3 | Type 'EventListener' is not generic. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:994:14 | Type 'EventListenerOrEventListenerObject' is not generic. |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1004:14 | Type 'EventListenerOrEventListenerObject' is not generic. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1478:3 | All declarations of 'kty' must have identical modifiers. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1478:3 | Subsequent property declarations must have the same type. Property 'kty' must be of type 'string | undefined', but here has type 'string'. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1726:3 | Subsequent property declarations must have the same type. Property 'data' must be of type 'T | undefined', but here has type 'any'. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1729:3 | Subsequent property declarations must have the same type. Property 'source' must be of type 'MessageEventSource | null | undefined', but here has type 'MessagePort | undefined'. |
| TS2300 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1835:15 | Duplicate identifier 'HTMLRewriter'. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1861:3 | All declarations of 'tagName' must have identical modifiers. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1862:12 | Subsequent property declarations must have the same type. Property 'attributes' must be of type 'NamedNodeMap', but here has type 'IterableIterator<string[]>'. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:1864:12 | Subsequent property declarations must have the same type. Property 'namespaceURI' must be of type 'string | null', but here has type 'string'. |
| TS2403 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2046:13 | Subsequent variable declarations must have the same type. Variable 'Response' must be of type '{ new (body?: BodyInit | null | undefined, init?: ResponseInit | undefined): Response; prototype: Response; error(): Response; json(data: any… (truncated, full text in raw tsc output) |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2070:3 | All declarations of 'status' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2076:3 | All declarations of 'statusText' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2082:3 | All declarations of 'headers' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2088:3 | All declarations of 'ok' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2094:3 | All declarations of 'redirected' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2100:3 | All declarations of 'url' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2108:3 | All declarations of 'type' must have identical modifiers. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2108:3 | Subsequent property declarations must have the same type. Property 'type' must be of type 'ResponseType', but here has type '"default" | "error"'. |
| TS2403 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2125:13 | Subsequent variable declarations must have the same type. Variable 'Request' must be of type '{ new (input: RequestInfo | URL, init?: RequestInit<CfProperties<unknown>> | undefined): Request<unknown, CfProperties<unknown>>; prototype: Re… (truncated, full text in raw tsc output) |
| TS2315 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2128:12 | Type 'RequestInfo' is not generic. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2152:3 | All declarations of 'method' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2158:3 | All declarations of 'url' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2164:3 | All declarations of 'headers' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2170:3 | All declarations of 'redirect' must have identical modifiers. |
| TS2717 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2170:3 | Subsequent property declarations must have the same type. Property 'redirect' must be of type 'RequestRedirect', but here has type 'string'. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2177:3 | All declarations of 'signal' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2184:3 | All declarations of 'integrity' must have identical modifiers. |
| TS2687 | cloudflare-workers-types | node_modules/@cloudflare/workers-types/index.d.ts:2190:3 | All declarations of 'keepalive' must have identical modifiers. |
85 further diagnostic(s) omitted from this table; see the origin counts above for the complete distribution.
Negative ambient controls
Each row compiles a file that references only Bun and WebSocketPair (no H3, no Strata) under a
fixed lib/types set, to prove foreign-runtime-global availability is measured independently of
any H3 declaration diagnostic.
| Control | Bun unresolved (expected true for Node-only) | Workers unresolved (expected true for Node-only) |
|---|---|---|
| node-only | true | true |
| bun-workers-activated | false | false |
AC5 disposable self-tests
- Consumer-mismatch control: a deliberate consumer-authored type error was correctly detected
(code
TS2322, originconsumer-authored), proving the classifier attributes an ordinary consumer mistake distinctly from upstream-origin diagnostics. - Dependency-version-mismatch control: installing a disposable fixture with a nonexistent H3 version correctly failed closed.
Self-test integrity
All runner self-tests passed; the matrix evidence above is trustworthy.
Infrastructure failures
None.
Verdict
Verdict: upstream-blocked. No case satisfies SPEC-002's promotion rules.
Per SPEC-002's stop rules: B's esnext.error addition is a legitimate lib correction but insufficient
alone. C is eligible only if its entire declaration graph checks cleanly under Node-only types and the
negative ambient controls. D-node-only can only establish why the closure fails when providers are
installed but not activated. D-full-providers is never eligible for the Node contract even if clean,
because activating Bun/Workers ambient globals is itself disqualifying for a Node-only consumer claim —
and, per the diagnostics above, it does not typecheck cleanly regardless.
No packages under packages/ were changed by this experiment. No Changeset is included: this slice is
tooling/research/compatibility qualification, not a public API or behavior change.