CultLib/packages
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens d180e0787c cultmesh-rs: a put's sink may answer later; the ack waits for the answer
The raw document sink gets a reply handle, CultMeshRudpPutReply, with
accept() and refuse(reason). It can be answered now or later, from any
thread; dropping it unanswered refuses the put ("the put was not
answered"). A closure sink answers at once, and its server sends the
same datagrams as before (pinned by the byte test landed before this).

A put's transport acknowledgement is its answer (Q5-A): while any put a
session sent is unanswered, the server sends that session nothing new.
No end-of-poll ack, no Pong, no reply to a repeated Connect, no snapshot
response. Every packet built now carries ack fields covering every
received sequence, so each of these would acknowledge the put. Resends
of packets built earlier still go. One function, acknowledgement_withheld,
decides it.

Answers go through a channel and are handled at the start of each poll,
and again as a session's waiting messages are served. An accepted answer
that leaves the session with no unanswered put releases one ack. A
refusal ends the session with put-serve's fixed refusal and goodbye,
acknowledging nothing, and is returned as that poll's rejection. Acks
are cumulative, so a later put's answer never leaves before an earlier
one's.

A session's delivered messages are handled in order. A put is offered to
the sink at once, even behind a pending put, so pipelined puts can share
one write. A snapshot request waits for every earlier put's answer. A put
that arrives behind such a request is unanswered too, so the request's
response is built when its turn comes and held until that put is
answered.

Held puts are bounded by the existing session and byte limits (Q5-B).
Every session removal goes through remove_session, which forgets the
session's pending puts, so their answers are discarded and cannot reach
a later generation of the same address and connection id.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 00:05:39 +02:00
..
cultcache-py cultcache-py: a record refusal names only a string key; pin link writes for R3 2026-09-30 19:54:51 +02:00
cultcache-rs cultcache-rs: the document canary uses a value serde would quote 2026-09-30 20:35:47 +02:00
cultcache-ts cultcache-ts: a record refusal names only a string key; pin link writes for R3 2026-09-30 19:54:51 +02:00
cultmath CultMath: Phacelle port moves into MPL-2.0 files; prune cut pinned by boundary points 2026-09-30 00:34:27 +02:00
cultmesh-browser Raise the TypeScript packages' Node floor to 20 2026-09-29 01:21:18 +02:00
cultmesh-kotlin cultmesh-kotlin: the bind self-test observes a wildcard, not its family 2026-09-30 13:52:26 +02:00
cultmesh-py cultmesh-py: a refusal acknowledges nothing and names its own send failure; TCP handling refuses instead of dying; the daemon checks its port 2026-09-30 23:04:07 +02:00
cultmesh-rs cultmesh-rs: a put's sink may answer later; the ack waits for the answer 2026-10-01 00:05:39 +02:00
cultmesh-ts cultmesh-ts: a snapshot refusal carries fixed text and acknowledges nothing 2026-09-30 23:06:03 +02:00
cultnet-py cultnet-py: an unsendable goodbye names the failure by a fixed code 2026-09-30 23:04:07 +02:00
cultnet-rs cultnet-rs, cultmesh-rs: an unsendable goodbye names the failure by a fixed code 2026-09-30 23:01:33 +02:00
cultnet-ts Merge origin/main (ack Cut D) into hands/cultmesh-put-serve-bound 2026-09-30 20:49:55 +02:00