From 03a344da203d007a8c37e09ba92d3b7087905523 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 30 Sep 2026 18:08:38 +0200 Subject: [PATCH] CultMesh TS: a catalog's value type is never inferred from a value 43ed9396's type test caught it: TypeScript inferred the catalog value type from a written value or an expected result through the conditional's false branch, so replace and submitPrediction accepted any value and an annotated collection read took the annotation as its type. The false branch is now NoInfer, so only a definition or an explicit type argument decides it. Co-Authored-By: Claude Opus 5.5 --- packages/cultmesh-ts/src/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/cultmesh-ts/src/index.ts b/packages/cultmesh-ts/src/index.ts index a4cec535..3bc5a37b 100644 --- a/packages/cultmesh-ts/src/index.ts +++ b/packages/cultmesh-ts/src/index.ts @@ -204,11 +204,12 @@ export type CultMeshCollectionWatcher = ( /** * The value type a catalog lookup yields. An explicit type argument wins; otherwise a CultCache document definition - * names its own value type, and a bare schema descriptor yields `unknown`. + * names its own value type, and a bare schema descriptor yields `unknown`. The value type is never inferred from a + * value or an expected result, so a wrong value is an error rather than a new type. */ export type CultMeshCatalogValue = [TDocument] extends [never] ? TSchema extends AnyCultCacheDocumentDefinition ? CultCacheDocumentValue : unknown - : TDocument; + : NoInfer; export interface CultMeshDocumentSchemaDescriptor { readonly type?: string;