From 830a5d718f1216dbb220c6d494cc51f2f87bcd41 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 10 Sep 2026 13:29:34 +0200 Subject: [PATCH] Make the Eve onboarding checkpoint run against the contract that exists The portability workflow has been red since 2026-08-22. Three things, each hidden behind the one before it: - Eve started refusing to build a command intent for a surface that has not advertised a command boundary and receipt schema (Eve 4338a42, 2026-08-22). The two-runtime sample never advertised one. It now passes a provider advertisement with worldInteraction for its surface, which is the declaration the lowering was right to demand. - The sample and the package-closure script still imported "cultcache-ts"; the package became @gamecult/cultcache-ts on 2026-09-04 (8cb3b72) and CI never got far enough to say so. Two READMEs carried the same import. - The job pinned Eve to codex/eve-browser-host-isolation, a branch that was never merged and stopped moving on 2026-08-25. The sample is written against Eve main and passes there; the pin now says so. The interop workflow's Python step ran one test file by path; it now discovers the three split suites. scripts/verify-eve-two-runtime-sample.ps1 -EveRoot F:\Projects\Eve (Eve main ccc3ffe) -> browserCount 1, headlessCount 1, restartCount 1 Co-Authored-By: Claude Fable 5.1 --- .github/workflows/cultmesh-portability.yml | 4 +++- .github/workflows/cultnet-interop.yml | 5 ++++- packages/cultcache-ts/README.md | 2 +- packages/cultnet-ts/README.md | 2 +- samples/eve-two-runtime/sample.mjs | 15 ++++++++++++++- scripts/test-typescript-package-closure.mjs | 4 ++-- 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cultmesh-portability.yml b/.github/workflows/cultmesh-portability.yml index 4d93085a..ce361fc8 100644 --- a/.github/workflows/cultmesh-portability.yml +++ b/.github/workflows/cultmesh-portability.yml @@ -28,7 +28,9 @@ jobs: uses: actions/checkout@v4 with: repository: GameCult/Eve - ref: ${{ vars.EVE_INTEGRATION_REF || 'codex/eve-browser-host-isolation' }} + # Eve main is the contract this sample is written against; the codex + # branch this used to pin was never merged and stopped on 2026-08-25. + ref: ${{ vars.EVE_INTEGRATION_REF || 'main' }} path: Eve - name: Set up .NET diff --git a/.github/workflows/cultnet-interop.yml b/.github/workflows/cultnet-interop.yml index f7f2eefc..6876a76a 100644 --- a/.github/workflows/cultnet-interop.yml +++ b/.github/workflows/cultnet-interop.yml @@ -87,7 +87,10 @@ jobs: run: npm test --workspace packages/cultnet-ts - name: Verify Python RUDP reliability - run: python -m unittest packages/cultcache-py/tests/test_cultcache.py + run: | + python -m unittest discover -s packages/cultcache-py/tests + python -m unittest discover -s packages/cultnet-py/tests + python -m unittest discover -s packages/cultmesh-py/tests - name: Verify Rust RUDP reliability run: cargo test --manifest-path packages/cultnet-rs/Cargo.toml rudp diff --git a/packages/cultcache-ts/README.md b/packages/cultcache-ts/README.md index 064cc91b..4a696103 100644 --- a/packages/cultcache-ts/README.md +++ b/packages/cultcache-ts/README.md @@ -53,7 +53,7 @@ import { SingleFileMessagePackBackingStore, defineDocumentRegistry, defineDocumentType, -} from "cultcache-ts"; +} from "@gamecult/cultcache-ts"; const itemDocument = defineDocumentType({ type: "item", diff --git a/packages/cultnet-ts/README.md b/packages/cultnet-ts/README.md index 5ff66e7e..75e77b88 100644 --- a/packages/cultnet-ts/README.md +++ b/packages/cultnet-ts/README.md @@ -195,7 +195,7 @@ the helper path. ## Quick Example ```ts -import { CultCache, defineDocumentType } from "cultcache-ts"; +import { CultCache, defineDocumentType } from "@gamecult/cultcache-ts"; import { CultNetDocumentRegistry, createTcpFramedCultNetPeer, diff --git a/samples/eve-two-runtime/sample.mjs b/samples/eve-two-runtime/sample.mjs index e3269618..93ed1dc8 100644 --- a/samples/eve-two-runtime/sample.mjs +++ b/samples/eve-two-runtime/sample.mjs @@ -4,7 +4,7 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { JSDOM } from "jsdom"; import { z } from "zod"; -import { defineDocumentType } from "cultcache-ts"; +import { defineDocumentType } from "@gamecult/cultcache-ts"; import { CultMesh } from "cultmesh-ts"; import { parseEveCommandReceipt, @@ -172,6 +172,19 @@ let browserReceipt; renderEveSurface(await node.document(surfaceDocument, surfaceId).latest(), host, { activeSurfaceId: surfaceId, clientId: "browser-client", + // Eve refuses to build a command intent for a surface that has not + // advertised where its commands go and what comes back. The provider + // advertisement is that declaration; a lowering cannot infer it. + provider: { + providerId, + surfaces: [{ + surfaceId, + worldInteraction: { + commandBoundary: "sample.counter.commands", + receiptSchema: "gamecult.eve.command_receipt.v1", + }, + }], + }, commandSink: async intent => { browserReceipt = await increment.bind(browserVerse).invoke(intent.payload, { idempotencyKey: "browser-click-1", diff --git a/scripts/test-typescript-package-closure.mjs b/scripts/test-typescript-package-closure.mjs index e5648c9c..0ed79e59 100644 --- a/scripts/test-typescript-package-closure.mjs +++ b/scripts/test-typescript-package-closure.mjs @@ -58,7 +58,7 @@ try { writeFileSync(join(consumerRoot, "runtime-smoke.cjs"), ` const assert = require("node:assert/strict"); -const cache = require("cultcache-ts"); +const cache = require("@gamecult/cultcache-ts"); const net = require("cultnet-ts"); const mesh = require("cultmesh-ts"); assert.equal(typeof cache.defineDocumentType, "function"); @@ -81,7 +81,7 @@ assert.equal("putDocument" in CultMeshBrowserClient.prototype, false); execFileSync(process.execPath, ["browser-runtime-smoke.mjs"], { cwd: consumerRoot, stdio: "inherit" }); writeFileSync(join(consumerRoot, "types-smoke.ts"), ` -import { defineDocumentType } from "cultcache-ts"; +import { defineDocumentType } from "@gamecult/cultcache-ts"; import { CultNetPeer } from "cultnet-ts"; import { CultMesh,