From 0408768d35cf4546834f28b64792514307beb23b Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 14 Sep 2026 00:27:19 +0200 Subject: [PATCH] Give the counter sample integer MessagePack keys CounterState in samples/eve-browser-network used string [Key]s, which the registry rejects at registration, so the provider threw on open. Keys are now 0 counterId, 1 count, 2 receipts. The payload becomes a MessagePack array, so the browser lowerer reads count positionally instead of by field name. The getting-started chapter carried the same string-key shape and is corrected to match. BenchItem needed nothing: a5d1be6 already marked it [MessagePackObject]; the earlier scan rejection came from a stale benchmark build. After rebuilding, both types register. No .cc stores exist under samples. Co-Authored-By: Claude Opus 5 --- samples/eve-browser-network/Program.cs | 6 +++--- samples/eve-browser-network/browser/main.ts | 10 +++++++--- .../docs/getting-started/01-persist-typed-state.md | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/samples/eve-browser-network/Program.cs b/samples/eve-browser-network/Program.cs index 68f72e05..c26d654b 100644 --- a/samples/eve-browser-network/Program.cs +++ b/samples/eve-browser-network/Program.cs @@ -467,9 +467,9 @@ sealed class Args [MessagePackObject] public sealed class CounterState { - [Key("counterId")] public string CounterId { get; set; } = ""; - [Key("count")] public int Count { get; set; } - [Key("receipts")] public Dictionary Receipts { get; set; } = new(StringComparer.Ordinal); + [Key(0)] public string CounterId { get; set; } = ""; + [Key(1)] public int Count { get; set; } + [Key(2)] public Dictionary Receipts { get; set; } = new(StringComparer.Ordinal); public static CounterState Initial(string counterId) => new() { CounterId = counterId }; } diff --git a/samples/eve-browser-network/browser/main.ts b/samples/eve-browser-network/browser/main.ts index b04ee5c8..fac4cc43 100644 --- a/samples/eve-browser-network/browser/main.ts +++ b/samples/eve-browser-network/browser/main.ts @@ -7,6 +7,10 @@ import { decodeCultNetPayload, } from "cultmesh-browser"; +// CounterState is an integer-keyed MessagePack object: [counterId, count, receipts]. +const counterCount = (record: Parameters[0]) => + decodeCultNetPayload<[string, number, unknown]>(record)[1]; + declare global { interface Window { __sampleReady?: boolean; @@ -83,17 +87,17 @@ try { stateBindingResolver: async binding => { if (binding.pointerId !== "sample.counter.count") return undefined; return { - latest: async () => decodeCultNetPayload<{ count: number }>(counter.current!).count, + latest: async () => counterCount(counter.current!), watch: callback => counter.watch(record => { if (!record) return; - const count = decodeCultNetPayload<{ count: number }>(record).count; + const count = counterCount(record); window.__sampleCount = count; callback(count); }), }; }, }); - window.__sampleCount = decodeCultNetPayload<{ count: number }>(counter.current!).count; + window.__sampleCount = counterCount(counter.current!); window.__sampleReady = true; } catch (error) { const details = error instanceof AggregateError diff --git a/src/GameCult.Mesh/docs/getting-started/01-persist-typed-state.md b/src/GameCult.Mesh/docs/getting-started/01-persist-typed-state.md index 7520d67f..f7924ec8 100644 --- a/src/GameCult.Mesh/docs/getting-started/01-persist-typed-state.md +++ b/src/GameCult.Mesh/docs/getting-started/01-persist-typed-state.md @@ -15,8 +15,8 @@ using MessagePack; [MessagePackObject] public sealed class CounterState { - [Key("counterId")] public string CounterId { get; set; } = ""; - [Key("count")] public int Count { get; set; } + [Key(0)] public string CounterId { get; set; } = ""; + [Key(1)] public int Count { get; set; } } ```