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:
parent
6d98b03471
commit
830a5d718f
6 changed files with 25 additions and 7 deletions
4
.github/workflows/cultmesh-portability.yml
vendored
4
.github/workflows/cultmesh-portability.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
5
.github/workflows/cultnet-interop.yml
vendored
5
.github/workflows/cultnet-interop.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ import {
|
|||
SingleFileMessagePackBackingStore,
|
||||
defineDocumentRegistry,
|
||||
defineDocumentType,
|
||||
} from "cultcache-ts";
|
||||
} from "@gamecult/cultcache-ts";
|
||||
|
||||
const itemDocument = defineDocumentType({
|
||||
type: "item",
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue