From 1d6e1364407bfab9fb5dfb8a2fe3f45794cbaf41 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 30 Sep 2026 22:53:42 +0200 Subject: [PATCH] Error-contract map: put-serve Soul merge-verdict notes (ENOSPC label, detail keys, new code) Co-Authored-By: Claude Opus 5.5 --- docs/cultnet-error-contract-cut.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/cultnet-error-contract-cut.md b/docs/cultnet-error-contract-cut.md index 5673d1d4..ca43b5fe 100644 --- a/docs/cultnet-error-contract-cut.md +++ b/docs/cultnet-error-contract-cut.md @@ -24,6 +24,13 @@ Found by the put-serve Hands (batch 3, `38000efa`, 2026-09-30); they belong to t - **New Rust refusal frame.** The put-serve branch adds a Rust refusal frame, `cultnet.error.v0` carrying the reason text with no code and no details, sent before the goodbye and acknowledging nothing. Cut 1 gives it a code. +- Found by the put-serve Soul (merge verdict, 2026-09-30): + - A store `OSError(ENOSPC)` in Python is refused as `malformed_document_put`, with the text "Raw put document could + not be stored." That is a server fault reported as the peer's fault. + - Over RUDP, Python's `document_unservable` details add `fragmentCount` and `maxFragmentCount`, and send + `maxSnapshotBytes: null` when it is unbounded. The map specifies `{responseBytes, maxSnapshotBytes}`. + - `response_unqueueable` (Python, P3) is a new code outside the closed list. + - A TS peer cannot tell "stored, receipt lost" from "refused" (put-serve Soul F4, pass 3). Map branch: `main`.