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 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-09-10 13:29:34 +02:00
commit 830a5d718f
6 changed files with 25 additions and 7 deletions

View file

@ -28,7 +28,9 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
repository: GameCult/Eve 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 path: Eve
- name: Set up .NET - name: Set up .NET

View file

@ -87,7 +87,10 @@ jobs:
run: npm test --workspace packages/cultnet-ts run: npm test --workspace packages/cultnet-ts
- name: Verify Python RUDP reliability - 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 - name: Verify Rust RUDP reliability
run: cargo test --manifest-path packages/cultnet-rs/Cargo.toml rudp run: cargo test --manifest-path packages/cultnet-rs/Cargo.toml rudp

View file

@ -53,7 +53,7 @@ import {
SingleFileMessagePackBackingStore, SingleFileMessagePackBackingStore,
defineDocumentRegistry, defineDocumentRegistry,
defineDocumentType, defineDocumentType,
} from "cultcache-ts"; } from "@gamecult/cultcache-ts";
const itemDocument = defineDocumentType({ const itemDocument = defineDocumentType({
type: "item", type: "item",

View file

@ -195,7 +195,7 @@ the helper path.
## Quick Example ## Quick Example
```ts ```ts
import { CultCache, defineDocumentType } from "cultcache-ts"; import { CultCache, defineDocumentType } from "@gamecult/cultcache-ts";
import { import {
CultNetDocumentRegistry, CultNetDocumentRegistry,
createTcpFramedCultNetPeer, createTcpFramedCultNetPeer,

View file

@ -4,7 +4,7 @@ import { tmpdir } from "node:os";
import { join } from "node:path"; import { join } from "node:path";
import { JSDOM } from "jsdom"; import { JSDOM } from "jsdom";
import { z } from "zod"; import { z } from "zod";
import { defineDocumentType } from "cultcache-ts"; import { defineDocumentType } from "@gamecult/cultcache-ts";
import { CultMesh } from "cultmesh-ts"; import { CultMesh } from "cultmesh-ts";
import { import {
parseEveCommandReceipt, parseEveCommandReceipt,
@ -172,6 +172,19 @@ let browserReceipt;
renderEveSurface(await node.document(surfaceDocument, surfaceId).latest(), host, { renderEveSurface(await node.document(surfaceDocument, surfaceId).latest(), host, {
activeSurfaceId: surfaceId, activeSurfaceId: surfaceId,
clientId: "browser-client", 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 => { commandSink: async intent => {
browserReceipt = await increment.bind(browserVerse).invoke(intent.payload, { browserReceipt = await increment.bind(browserVerse).invoke(intent.payload, {
idempotencyKey: "browser-click-1", idempotencyKey: "browser-click-1",

View file

@ -58,7 +58,7 @@ try {
writeFileSync(join(consumerRoot, "runtime-smoke.cjs"), ` writeFileSync(join(consumerRoot, "runtime-smoke.cjs"), `
const assert = require("node:assert/strict"); const assert = require("node:assert/strict");
const cache = require("cultcache-ts"); const cache = require("@gamecult/cultcache-ts");
const net = require("cultnet-ts"); const net = require("cultnet-ts");
const mesh = require("cultmesh-ts"); const mesh = require("cultmesh-ts");
assert.equal(typeof cache.defineDocumentType, "function"); 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" }); execFileSync(process.execPath, ["browser-runtime-smoke.mjs"], { cwd: consumerRoot, stdio: "inherit" });
writeFileSync(join(consumerRoot, "types-smoke.ts"), ` writeFileSync(join(consumerRoot, "types-smoke.ts"), `
import { defineDocumentType } from "cultcache-ts"; import { defineDocumentType } from "@gamecult/cultcache-ts";
import { CultNetPeer } from "cultnet-ts"; import { CultNetPeer } from "cultnet-ts";
import { import {
CultMesh, CultMesh,