Bytes after the value: a payload is one MessagePack value (C#) #125

Merged
libby merged 7 commits from hands/bytes-after-cs into main 2026-11-12 04:01:36 +00:00
Member

cultlib-gaps:follow_up:bytes-after-fix-s2-and-land, spec cultlib-gaps:cut_spec:cut-bytes-after-cs.r1, ruling cultlib-gaps:ruling:trailing-bytes-refuse: a document payload is exactly one MessagePack value; bytes after it are refused on read and on write, naming the type and the count and never walking the tail. No manifest exemption. A CDN manifest is a record payload and follows the rule (cultnet-ts decodeManifest too). Vectors: tests/vectors/union-parity/bytes-after-* for the TS, Python and Rust leaf cuts (cut-bytes-after-{ts,py,rs}).

Also: CultMeshProviderSessionWire.DecodeCommandDocument refuses a tail (raw record payload); DecodePayload and DecodeConnectEvidence are not record payloads and stay out of the ruling (open Low wire-siblings-tolerant). The codec path CreateCodec(registry).DecodeDocument<T> is pinned by a test. The dead fallback binding in ToRawRecord is deleted.

Semver: Breaking in unity/org.gamecult.cultlib/CHANGELOG.md (payloads that used to read now throw); cultnet-ts changelog notes the decodeManifest change.

Soul: verdicts cut-bytes-after-cs.s1 to .s3 (s2 blocked on the unpinned codec path; s3 has no blockers, four Lows). Caching 1352, Mesh 361, Networking 834 passed (4 skipped each). cultnet-ts content tests pass; 6 cultnet-ts tests fail in the Mind's sandbox on esbuild EACCES and a missing koffi, pre-existing.

🤖 Generated with Claude Code

`cultlib-gaps:follow_up:bytes-after-fix-s2-and-land`, spec `cultlib-gaps:cut_spec:cut-bytes-after-cs.r1`, ruling `cultlib-gaps:ruling:trailing-bytes-refuse`: a document payload is exactly one MessagePack value; bytes after it are refused on read and on write, naming the type and the count and never walking the tail. No manifest exemption. A CDN manifest is a record payload and follows the rule (cultnet-ts `decodeManifest` too). Vectors: `tests/vectors/union-parity/bytes-after-*` for the TS, Python and Rust leaf cuts (`cut-bytes-after-{ts,py,rs}`). Also: `CultMeshProviderSessionWire.DecodeCommandDocument` refuses a tail (raw record payload); `DecodePayload` and `DecodeConnectEvidence` are not record payloads and stay out of the ruling (open Low `wire-siblings-tolerant`). The codec path `CreateCodec(registry).DecodeDocument<T>` is pinned by a test. The dead fallback binding in `ToRawRecord` is deleted. Semver: Breaking in `unity/org.gamecult.cultlib/CHANGELOG.md` (payloads that used to read now throw); cultnet-ts changelog notes the `decodeManifest` change. Soul: verdicts `cut-bytes-after-cs.s1` to `.s3` (s2 blocked on the unpinned codec path; s3 has no blockers, four Lows). Caching 1352, Mesh 361, Networking 834 passed (4 skipped each). cultnet-ts content tests pass; 6 cultnet-ts tests fail in the Mind's sandbox on esbuild EACCES and a missing koffi, pre-existing. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Pin the one-byte tail of a provider command document
All checks were successful
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Successful in 21m44s
02344c6546
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
libby merged commit 5e10909fe9 into main 2026-11-12 04:01:36 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/CultLib!125
No description provided.