Desk feed door: list/read wire contract and golden fixtures #55

Merged
eureka merged 4 commits from eureka-substrate/desk-feed-door-fixtures into main 2026-11-11 17:18:30 +00:00
Owner

The list/read half of the desk door for Bifrost's UnixSocketDeskDoor (Bifrost PR #67): the wire contract and golden bytes Heimdall can decode against.

  • docs/desk-feed-door.md: one peer-checked unix socket per Mind; frame (u32 BE length) + CultNet v0 message + base64 named-MessagePack payload; Forks/Fork requests and responses as on main; failure means 503 for the addressed Mind only; trust boundary (answerer ids and notes go raw to Bifrost's uid only, Bifrost masks); raised_at as CultLib ruled it (required key, RFC3339 or nil, outside options_hash, first admission); the planned listing gate (default not listed, desk_listing record, open questions named).
  • crates/huginn-mind/tests/fixtures/desk-feed/: 11 framed cases (4 requests, 7 responses incl. empty, counts-only, fork_unknown, fork_too_large, Refused Unavailable, operation failure, CultNet Error) plus a whole-record fragment, as .frame.bin/.hex and .payload.msgpack/.hex.
  • crates/huginn-mind/tests/desk_feed_fixtures.rs: writes the fixtures with Huginn's own encoders (HUGINN_WRITE_DESK_FIXTURES=1) and otherwise checks them byte for byte.

No card bytes in any fixture: they wait on CultLib's re-pinned card vectors for raised_at.

Verification: cargo test -p huginn-mind --test desk_feed_fixtures passes; clippy clean on the test; every .hex decoded independently with Python msgpack 1.0.3 under python3 -I (length prefix equals body length, envelope and payload decode, payload equals the base64-decoded envelope payload, .bin/.msgpack equal their hex).

Specs: eureka-substrate:cut_spec:cut-desk-feed-raised-at.r1, eureka-substrate:cut_spec:cut-desk-feed-listing.r1.

🤖 Generated with Claude Code

The list/read half of the desk door for Bifrost's `UnixSocketDeskDoor` (Bifrost PR #67): the wire contract and golden bytes Heimdall can decode against. - `docs/desk-feed-door.md`: one peer-checked unix socket per Mind; frame (u32 BE length) + CultNet v0 message + base64 named-MessagePack payload; `Forks`/`Fork` requests and responses as on main; failure means 503 for the addressed Mind only; trust boundary (answerer ids and notes go raw to Bifrost's uid only, Bifrost masks); `raised_at` as CultLib ruled it (required key, RFC3339 or nil, outside `options_hash`, first admission); the planned listing gate (default not listed, `desk_listing` record, open questions named). - `crates/huginn-mind/tests/fixtures/desk-feed/`: 11 framed cases (4 requests, 7 responses incl. empty, counts-only, fork_unknown, fork_too_large, Refused Unavailable, operation failure, CultNet Error) plus a whole-record fragment, as `.frame.bin/.hex` and `.payload.msgpack/.hex`. - `crates/huginn-mind/tests/desk_feed_fixtures.rs`: writes the fixtures with Huginn's own encoders (`HUGINN_WRITE_DESK_FIXTURES=1`) and otherwise checks them byte for byte. No card bytes in any fixture: they wait on CultLib's re-pinned card vectors for `raised_at`. Verification: `cargo test -p huginn-mind --test desk_feed_fixtures` passes; clippy clean on the test; every `.hex` decoded independently with Python `msgpack` 1.0.3 under `python3 -I` (length prefix equals body length, envelope and payload decode, payload equals the base64-decoded envelope payload, `.bin`/`.msgpack` equal their hex). Specs: `eureka-substrate:cut_spec:cut-desk-feed-raised-at.r1`, `eureka-substrate:cut_spec:cut-desk-feed-listing.r1`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
docs/desk-feed-door.md states the list and read wire already on main
(frame, CultNet envelope, named MessagePack payload), the per-Mind
peer-checked socket, 503 for the addressed Mind only, the raw-answerer
trust boundary (Bifrost masks), raised_at as ruled by CultLib (card
bytes not pinned until the re-pinned card vectors land) and the planned
listing gate (default not listed).

crates/huginn-mind/tests/desk_feed_fixtures.rs writes the fixtures with
Huginn's own encoders and checks them; HUGINN_WRITE_DESK_FIXTURES=1
rewrites. No card bytes in any fixture.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Soul pass on 66e6fe8: document and fixture the read form of
fork_too_large (live on main; CultLib limitation 13 is stale), the
ResponseTooLarge 503 and a unit-variant Refused; say that only operation
messages have sorted keys, what failure diagnostics and the schema
catalog reply are, where forks come from, and that the listing gate is
not live (no receiver on a Mind with private questions before
cut-desk-feed-listing). Fixtures use a held fork id, synthetic record.
.gitattributes keeps .bin/.msgpack binary and .hex LF.

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>
eureka merged commit 9dde93e5f5 into main 2026-11-11 17:18:30 +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/Huginn!55
No description provided.