2026-08-18 00:05:57 +02:00
|
|
|
# Eve Browser + Headless Counter
|
|
|
|
|
|
|
|
|
|
This is the real-process continuation of `samples/eve-two-runtime`:
|
|
|
|
|
|
|
|
|
|
- one C# provider owns a durable `.cc` counter, the Eve surface, command
|
|
|
|
|
idempotency, and canonical receipts;
|
|
|
|
|
- one real Chromium page leases both documents through `cultmesh-browser` and
|
|
|
|
|
lowers the provider-owned Eve surface;
|
2026-08-18 03:34:59 +02:00
|
|
|
- one retained C# headless client discovers the provider through the same Odin
|
2026-08-18 03:49:33 +02:00
|
|
|
identity, observes the typed counter and canonical receipt ids, survives the
|
|
|
|
|
provider route replacement, and invokes through the generic CultMesh client
|
|
|
|
|
without application transport or reconnect code;
|
2026-08-18 00:34:44 +02:00
|
|
|
- one separate local Odin fixture answers the canonical CultMesh Verse catalog
|
|
|
|
|
over binary CultNet WebSocket messages;
|
2026-08-18 17:21:58 +02:00
|
|
|
- one wrong-authority provider is deliberately advertised on a better-priority
|
|
|
|
|
route, and both clients must ignore it because the route is bound to another
|
|
|
|
|
runtime;
|
2026-08-18 00:05:57 +02:00
|
|
|
- the browser and C# clients speak the same binary CultNet schema-v0 WebSocket
|
|
|
|
|
messages through the authenticated host adapter.
|
|
|
|
|
|
2026-08-18 05:59:11 +02:00
|
|
|
The provider registers typed commands through `CultNetOperationServer`.
|
|
|
|
|
Application code receives `CultNetOperationContext<TRequest>` and returns a
|
|
|
|
|
typed receipt; it does not parse base64, switch on wire envelopes, or construct
|
|
|
|
|
correlation responses. The counter's durable transaction still owns
|
2026-08-18 06:23:26 +02:00
|
|
|
idempotency and state mutation. The provider opens one public `CultMeshNode`;
|
|
|
|
|
it does not assemble a parallel CultCache/CultNet database host by hand.
|
2026-08-18 05:59:11 +02:00
|
|
|
|
2026-08-18 00:05:57 +02:00
|
|
|
Run the proof from the CultLib repository:
|
|
|
|
|
|
|
|
|
|
```powershell
|
2026-08-18 03:17:52 +02:00
|
|
|
pwsh -File ./scripts/verify-eve-getting-started.ps1
|
2026-08-18 00:05:57 +02:00
|
|
|
```
|
|
|
|
|
|
2026-08-18 03:17:52 +02:00
|
|
|
The wrapper first proves clean package consumption, then runs this real-process
|
|
|
|
|
checkpoint. Run `node scripts/verify-eve-browser-network.mjs --eve-root ../Eve`
|
|
|
|
|
directly only to diagnose the network layer. Browser discovery is portable:
|
|
|
|
|
`CHROME_PATH` wins when configured, then common Chrome/Chromium/Edge locations
|
|
|
|
|
and Playwright's installed Chromium are checked.
|
|
|
|
|
|
2026-08-18 03:49:33 +02:00
|
|
|
The verifier clicks the Eve button twice with one idempotency key and requires
|
|
|
|
|
one state transition. It then restarts the provider on a different physical
|
|
|
|
|
port, updates the local Odin fixture, and requires both retained clients to
|
|
|
|
|
rediscover and resubscribe. The C# client invokes the second command through
|
|
|
|
|
`CultMeshClient.InvokeAsync`; Chromium observes the resulting count and both
|
|
|
|
|
clients observe both canonical receipt ids.
|
2026-08-18 03:56:24 +02:00
|
|
|
The retained C# client then sends 10,000 typed no-op operations over the same
|
|
|
|
|
real WebSocket session. The gate records p99 latency, throughput, managed heap,
|
|
|
|
|
and private memory, and rejects more than 8 MiB of post-GC managed growth or a
|
|
|
|
|
250 ms p99. The no-op provider handler stores no receipt history, so persistence
|
|
|
|
|
growth cannot impersonate a client leak.
|
2026-08-18 00:34:44 +02:00
|
|
|
The fixture speaks the production Verse-catalog contract; a deployment smoke
|
|
|
|
|
against the full Odin daemon remains a separate infrastructure gate.
|
2026-08-18 02:18:56 +02:00
|
|
|
|
|
|
|
|
The `odin` fixture defaults to this sample's Verse, but its `--verse-id`,
|
|
|
|
|
`--verse-name`, `--authority-runtime-id`, `--transport-version`, and
|
|
|
|
|
`--rules-hash` arguments can advertise another real provider during a product
|
|
|
|
|
route-rotation witness. The provider endpoint remains data owned by Odin; the
|
|
|
|
|
consumer still connects only by stable Verse and provider identity.
|