From 6ed0ff75af5ecd8daa6e563a8fd3a97180e7b7b3 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 16 Sep 2026 20:21:27 +0200 Subject: [PATCH] Run both halves of the realtime frame parity in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The codec's byte parity rests on two vector files written from opposite sides: `realtime-frame-vectors.json` by the C# reference and decoded by TypeScript, and `realtime-frame-vectors.ts-written.json` by the TypeScript codec and decoded by C#. Neither half ran in CI. The TypeScript suite ran nowhere — cultmesh-ts was not in any job — and the C# test ran nowhere either, because `cultnet-interop.yml` is windows-latest and main-only and does not filter for it. A codec that agreed only with itself would have gone green on every push, which is the exact failure the two-file scheme exists to prevent. Both now run in the `reactive-and-resource-lifetime` job beside the authority steps, on windows-latest and ubuntu-latest, for main, codex/** and pull requests. That job was already the one place the TypeScript side of CultMesh gets exercised on Linux at all. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/cultmesh-portability.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/cultmesh-portability.yml b/.github/workflows/cultmesh-portability.yml index 9f088e95..520a4836 100644 --- a/.github/workflows/cultmesh-portability.yml +++ b/.github/workflows/cultmesh-portability.yml @@ -109,6 +109,15 @@ jobs: - name: Verify the browser client against the shared TypeScript verifier run: npm run test --workspace packages/cultmesh-browser + # The realtime frame codec. Its byte parity rests on two vector files, + # contracts/cultmesh/realtime-frame-vectors.json written by the C# + # reference and decoded by this step, and realtime-frame-vectors.ts-written.json + # written by this codec and decoded by the C# step below. Neither half ran + # in CI on any OS until these two steps existed, so a codec that agreed + # only with itself would have gone green. + - name: Verify the realtime frame codec with the TypeScript codec + run: npm run test --workspace packages/cultmesh-ts + # Both directions of the CultMesh authority vectors: the C#-written # file (contracts/cultmesh/authority-route-vectors.json) and the # TypeScript-signed file (authority-route-vectors.ts-signed.json) are @@ -120,3 +129,12 @@ jobs: dotnet test tests/GameCult.Mesh.Tests/GameCult.Mesh.Tests.csproj --filter FullyQualifiedName~AuthorityProof --logger "console;verbosity=minimal" + + # The other half of the frame parity: the C# reference decodes and + # re-encodes the vector file the TypeScript codec wrote. A fixture + # authored on one side alone would only agree with itself. + - name: Verify the realtime frame vectors with the C# reference + run: >- + dotnet test tests/GameCult.Mesh.Tests/GameCult.Mesh.Tests.csproj + --filter FullyQualifiedName~RealtimeWireProtocol + --logger "console;verbosity=minimal"