Strata architecture and SDDMenu
On this page

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

ToolVersion
Node (actual)v22.23.0
pnpm10.30.1
npm10.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.decorators
  • types: 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 --noEmit exit: 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
CodeOriginLocationMessage
TS4113h3node_modules/h3/dist/h3.d.mts:638:19This member cannot have an 'override' modifier because it is not declared in the base class 'Error'.
TS2307h3node_modules/h3/dist/index.d.mts:3:106Cannot find module 'crossws' or its corresponding type declarations.

Packed Strata consumer

  • Install exit: 0
  • tsc --noEmit exit: 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
CodeOriginLocationMessage
TS4113h3node_modules/h3/dist/h3.d.mts:638:19This member cannot have an 'override' modifier because it is not declared in the base class 'Error'.
TS2307h3node_modules/h3/dist/index.d.mts:3:106Cannot 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.error
  • types: 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 --noEmit exit: 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
CodeOriginLocationMessage
TS2307h3node_modules/h3/dist/index.d.mts:3:106Cannot find module 'crossws' or its corresponding type declarations.

Packed Strata consumer

  • Install exit: 0
  • tsc --noEmit exit: 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
CodeOriginLocationMessage
TS2307h3node_modules/h3/dist/index.d.mts:3:106Cannot 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.error
  • types: 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 --noEmit exit: 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: 1
    • crossws->cloudflare-workers: 3
CodeOriginLocationMessage
TS2307crossws->bunnode_modules/crossws/dist/_chunks/bun.d.mts:2:59Cannot find module 'bun' or its corresponding type declarations.
TS2307crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:3:31Cannot find module 'cloudflare:workers' or its corresponding type declarations.
TS2307crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:4:21Cannot find module '@cloudflare/workers-types' or its corresponding type declarations.
TS2552crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:36:48Cannot find name 'DurableObjectState'. Did you mean 'WSDurableObjectStub'?

Packed Strata consumer

  • Install exit: 0
  • tsc --noEmit exit: 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: 1
    • crossws->cloudflare-workers: 3
CodeOriginLocationMessage
TS2307crossws->bunnode_modules/crossws/dist/_chunks/bun.d.mts:2:59Cannot find module 'bun' or its corresponding type declarations.
TS2307crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:3:31Cannot find module 'cloudflare:workers' or its corresponding type declarations.
TS2307crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:4:21Cannot find module '@cloudflare/workers-types' or its corresponding type declarations.
TS2552crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:36:48Cannot 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.error
  • types: 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 --noEmit exit: 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: 4
    • crossws->cloudflare-workers: 2
CodeOriginLocationMessage
TS2694bun-typesnode_modules/bun-types/globals.d.ts:320:74Namespace '"node:util"' has no exported member 'TextEncoderEncodeIntoResult'.
TS2552bun-typesnode_modules/bun-types/overrides.d.ts:352:47Cannot find name 'ConnectionOptions'. Did you mean 'BunConnectionOptions'?
TS2552bun-typesnode_modules/bun-types/overrides.d.ts:390:67Cannot find name 'KeyObject'. Did you mean 'Object'?
TS2304bun-typesnode_modules/bun-types/overrides.d.ts:394:88Cannot find name 'TLSSocket'.
TS2307crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:3:31Cannot find module 'cloudflare:workers' or its corresponding type declarations.
TS2552crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:36:48Cannot find name 'DurableObjectState'. Did you mean 'WSDurableObjectStub'?

Packed Strata consumer

  • Install exit: 0
  • tsc --noEmit exit: 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: 4
    • crossws->cloudflare-workers: 2
CodeOriginLocationMessage
TS2694bun-typesnode_modules/bun-types/globals.d.ts:320:74Namespace '"node:util"' has no exported member 'TextEncoderEncodeIntoResult'.
TS2552bun-typesnode_modules/bun-types/overrides.d.ts:352:47Cannot find name 'ConnectionOptions'. Did you mean 'BunConnectionOptions'?
TS2552bun-typesnode_modules/bun-types/overrides.d.ts:390:67Cannot find name 'KeyObject'. Did you mean 'Object'?
TS2304bun-typesnode_modules/bun-types/overrides.d.ts:394:88Cannot find name 'TLSSocket'.
TS2307crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:3:31Cannot find module 'cloudflare:workers' or its corresponding type declarations.
TS2552crossws->cloudflare-workersnode_modules/crossws/dist/_chunks/cloudflare.d.mts:36:48Cannot 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.error
  • types: 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 --noEmit exit: 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: 78
    • other:node_modules/@types/node/buffer.buffer.d.ts: 1
    • other:node_modules/@types/node/buffer.d.ts: 3
    • other:node_modules/@types/node/globals.d.ts: 2
    • bun-types: 10
    • typescript-lib-conflict: 31
CodeOriginLocationMessage
TS6200cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:17:1Definitions 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)
TS2403cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:17:13Subsequent 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'.
TS2508cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:79:50No base constructor has the specified number of type arguments.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:224:5Subsequent property declarations must have the same type. Property 'value' must be of type 'T', but here has type 'keyof ValueTypeMap'.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:397:12Type 'EventListenerOrEventListenerObject' is not generic.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:404:12Type 'EventListenerOrEventListenerObject' is not generic.
TS2451cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:486:15Cannot redeclare block-scoped variable 'Buffer'.
TS2451cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:487:15Cannot redeclare block-scoped variable 'process'.
TS2451cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:488:15Cannot redeclare block-scoped variable 'global'.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:571:3Subsequent property declarations must have the same type. Property 'transfer' must be of type 'Transferable[] | undefined', but here has type 'any[] | undefined'.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:977:3Type 'EventListener' is not generic.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:994:14Type 'EventListenerOrEventListenerObject' is not generic.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1004:14Type 'EventListenerOrEventListenerObject' is not generic.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1478:3All declarations of 'kty' must have identical modifiers.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1478:3Subsequent property declarations must have the same type. Property 'kty' must be of type 'string | undefined', but here has type 'string'.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1726:3Subsequent property declarations must have the same type. Property 'data' must be of type 'T | undefined', but here has type 'any'.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1729:3Subsequent property declarations must have the same type. Property 'source' must be of type 'MessageEventSource | null | undefined', but here has type 'MessagePort | undefined'.
TS2300cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1835:15Duplicate identifier 'HTMLRewriter'.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1861:3All declarations of 'tagName' must have identical modifiers.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1862:12Subsequent property declarations must have the same type. Property 'attributes' must be of type 'NamedNodeMap', but here has type 'IterableIterator<string[]>'.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1864:12Subsequent property declarations must have the same type. Property 'namespaceURI' must be of type 'string | null', but here has type 'string'.
TS2403cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2046:13Subsequent 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)
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2070:3All declarations of 'status' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2076:3All declarations of 'statusText' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2082:3All declarations of 'headers' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2088:3All declarations of 'ok' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2094:3All declarations of 'redirected' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2100:3All declarations of 'url' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2108:3All declarations of 'type' must have identical modifiers.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2108:3Subsequent property declarations must have the same type. Property 'type' must be of type 'ResponseType', but here has type '"default" | "error"'.
TS2403cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2125:13Subsequent 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)
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2128:12Type 'RequestInfo' is not generic.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2152:3All declarations of 'method' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2158:3All declarations of 'url' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2164:3All declarations of 'headers' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2170:3All declarations of 'redirect' must have identical modifiers.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2170:3Subsequent property declarations must have the same type. Property 'redirect' must be of type 'RequestRedirect', but here has type 'string'.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2177:3All declarations of 'signal' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2184:3All declarations of 'integrity' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2190:3All 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 --noEmit exit: 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: 78
    • other:node_modules/@types/node/buffer.buffer.d.ts: 1
    • other:node_modules/@types/node/buffer.d.ts: 3
    • other:node_modules/@types/node/globals.d.ts: 2
    • bun-types: 10
    • typescript-lib-conflict: 31
CodeOriginLocationMessage
TS6200cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:17:1Definitions 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)
TS2403cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:17:13Subsequent 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'.
TS2508cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:79:50No base constructor has the specified number of type arguments.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:224:5Subsequent property declarations must have the same type. Property 'value' must be of type 'T', but here has type 'keyof ValueTypeMap'.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:397:12Type 'EventListenerOrEventListenerObject' is not generic.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:404:12Type 'EventListenerOrEventListenerObject' is not generic.
TS2451cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:486:15Cannot redeclare block-scoped variable 'Buffer'.
TS2451cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:487:15Cannot redeclare block-scoped variable 'process'.
TS2451cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:488:15Cannot redeclare block-scoped variable 'global'.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:571:3Subsequent property declarations must have the same type. Property 'transfer' must be of type 'Transferable[] | undefined', but here has type 'any[] | undefined'.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:977:3Type 'EventListener' is not generic.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:994:14Type 'EventListenerOrEventListenerObject' is not generic.
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1004:14Type 'EventListenerOrEventListenerObject' is not generic.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1478:3All declarations of 'kty' must have identical modifiers.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1478:3Subsequent property declarations must have the same type. Property 'kty' must be of type 'string | undefined', but here has type 'string'.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1726:3Subsequent property declarations must have the same type. Property 'data' must be of type 'T | undefined', but here has type 'any'.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1729:3Subsequent property declarations must have the same type. Property 'source' must be of type 'MessageEventSource | null | undefined', but here has type 'MessagePort | undefined'.
TS2300cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1835:15Duplicate identifier 'HTMLRewriter'.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1861:3All declarations of 'tagName' must have identical modifiers.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1862:12Subsequent property declarations must have the same type. Property 'attributes' must be of type 'NamedNodeMap', but here has type 'IterableIterator<string[]>'.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:1864:12Subsequent property declarations must have the same type. Property 'namespaceURI' must be of type 'string | null', but here has type 'string'.
TS2403cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2046:13Subsequent 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)
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2070:3All declarations of 'status' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2076:3All declarations of 'statusText' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2082:3All declarations of 'headers' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2088:3All declarations of 'ok' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2094:3All declarations of 'redirected' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2100:3All declarations of 'url' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2108:3All declarations of 'type' must have identical modifiers.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2108:3Subsequent property declarations must have the same type. Property 'type' must be of type 'ResponseType', but here has type '"default" | "error"'.
TS2403cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2125:13Subsequent 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)
TS2315cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2128:12Type 'RequestInfo' is not generic.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2152:3All declarations of 'method' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2158:3All declarations of 'url' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2164:3All declarations of 'headers' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2170:3All declarations of 'redirect' must have identical modifiers.
TS2717cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2170:3Subsequent property declarations must have the same type. Property 'redirect' must be of type 'RequestRedirect', but here has type 'string'.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2177:3All declarations of 'signal' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2184:3All declarations of 'integrity' must have identical modifiers.
TS2687cloudflare-workers-typesnode_modules/@cloudflare/workers-types/index.d.ts:2190:3All 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.

ControlBun unresolved (expected true for Node-only)Workers unresolved (expected true for Node-only)
node-onlytruetrue
bun-workers-activatedfalsefalse

AC5 disposable self-tests

  • Consumer-mismatch control: a deliberate consumer-authored type error was correctly detected (code TS2322, origin consumer-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.

Source: docs/research/consumer-type-closure.md

Generated by Entwine · Markdown remains the source of truth.