TS write-receipt client against the real Rust and C# receipt servers (interop harness) #67
Loading…
Reference in a new issue
No description provided.
Delete branch "libby/write-receipt-ts-interop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stacked on #64. Runs the merged TypeScript write-receipt client against the two real receipt servers over loopback, as child processes on ephemeral ports, and keeps the harness in the repo.
packages/cultmesh-ts/test/interop/write-receipt-interop.test.ts(npm run test:interopinpackages/cultmesh-ts): one scenario set, run against each server; outcomes are read fromWriteTracker(admitted, refused, unconfirmed) and the server's own stdout facts say what was committed. The blank-field cases are driven bywrite-receipt-vectors.jsonblankFields.packages/cultmesh-rs/examples/receipt_interop_server.rs, the productionCultMeshRudpDocumentServerwith a recording sink. Reached over RUDP byCultMesh.createRudpPeer; three further tests drive the real one-shot writerpublishRudpDocumentOnce(admitted, refused, no-hello).receipt-serveandreceipt-relaymodes in the existingGameCult.Networking.InteropPeer(no new project).CultNetDatabaseServerspeaks LiteNetLib only and TypeScript has no LiteNetLib client, so the relay moves bytes (length-prefixed CultNet frames, which isCultNetPeer's own stream framing) and decodes nothing; the TS side decodes with the real decoder. No TS RUDP client path reaches the C# server.Results (50 pass, 1 todo, 3 runs, no flakes): every scenario passes against both servers except one.
Finding: the Rust RUDP document server refuses every delete (
write_not_authorized: the server does not take deletes, error.v1 carrying the delete's id); the sink port has no delete. The spec has a delete admitted and receipted like a put (Server rules 1 to 3), and the C# server does. The scenario is atodofor the Rust arm, so it stays visible and does not fail the suite. Not fixed here (a server change); follow-up admitted.Not proven here: that the receipt is sent after the commit (server facts and wire are separate channels, so only "applied exactly once, eventually" is asserted); shard-forwarded writes; the limit_reached bounds; the unreliable-channel refusal.
Build budget: cargo
-j1, one example target in cultmesh-rs (linux, built on the host that runs it); one existing dotnet project, no new target. SetRECEIPT_INTEROP_PREBUILT=1to skip the two builds (MSBuild cannot start under a tight address-space cap).🤖 Generated with Claude Code
3b1b7697) into libby/write-receipt-ts-interop 4b5f343a44