Desk door: emit CultLib d3025d3c reader shapes (PR A of cut-desk-feed-raised-at.r3 + cut-desk-feed-listing.r8) #62

Merged
eureka merged 2 commits from eureka-substrate/desk-door-shapes into main 2026-11-11 21:24:36 +00:00
Owner

Everything that makes Huginn's desk door emit the pinned CultLib d3025d3c shapes.

  • Card: 18 keys (DE 00 12): raised_at (RFC3339 UTC string or nil; first admission, import source time wins, unparseable import time is nil) and decider_count (1..64) right after deciders.
  • Record: header 86, answerer_count fifth (distinct answerers over all stored answers, refusals included).
  • ForkDeskAnswer.answerer is a required nullable key; nil only in a non-decider's view.
  • Reads take the call's subject: a subject in the call's deciders sees the ids; anyone else gets deciders empty, answerers nil and the counts. No account id in a non-decider's bytes (byte-search test).
  • Card decoder refuses a count outside 1..64 or a non-empty deciders of another length.
  • All 14 vendored CultLib vectors decode and re-encode byte for byte; vectors/fork-card-vectors.json re-vendored at d3025d3c.
  • Entry-bearing golden fixtures for both views; desk request/response schemas regenerated; docs updated.

Not in this PR (PR B): the listing gate (desk_listing kind) and the account-id grammar at decode.

🤖 Generated with Claude Code

Everything that makes Huginn's desk door emit the pinned CultLib d3025d3c shapes. - Card: 18 keys (`DE 00 12`): `raised_at` (RFC3339 UTC string or nil; first admission, import source time wins, unparseable import time is nil) and `decider_count` (1..64) right after `deciders`. - Record: header `86`, `answerer_count` fifth (distinct answerers over all stored answers, refusals included). - `ForkDeskAnswer.answerer` is a required nullable key; nil only in a non-decider's view. - Reads take the call's `subject`: a subject in the call's deciders sees the ids; anyone else gets `deciders` empty, answerers nil and the counts. No account id in a non-decider's bytes (byte-search test). - Card decoder refuses a count outside 1..64 or a non-empty `deciders` of another length. - All 14 vendored CultLib vectors decode and re-encode byte for byte; `vectors/fork-card-vectors.json` re-vendored at d3025d3c. - Entry-bearing golden fixtures for both views; desk request/response schemas regenerated; docs updated. Not in this PR (PR B): the listing gate (`desk_listing` kind) and the account-id grammar at decode. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The card gains raised_at (the question's first admission, UTC, nil when unknown; an import's
source time wins) and decider_count (1..64) right after deciders: 18 keys, DE 00 12. The record
gains answerer_count (distinct answerers over every stored answer, refusals included) fifth:
header 86. ForkDeskAnswer.answerer is a required nullable key. The reads now take the call's
subject: a subject in the call's deciders is a decider and is told the ids; any other reader gets
deciders empty, answerer nil and the counts. The card decoder refuses a count outside 1..64 or a
non-empty deciders of another length.

Huginn's types decode and re-encode all 14 vendored CultLib vectors byte for byte (replaces
huginn_types_do_not_yet_carry_the_pinned_shapes); vectors/fork-card-vectors.json re-vendored at
d3025d3c; entry-bearing golden fixtures for both views; desk request/response schemas regenerated;
docs/desk-feed-door.md describes the built shapes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
eureka force-pushed eureka-substrate/desk-door-shapes from f9405463e5 to 7620875596 2026-11-11 21:16:53 +00:00 Compare
eureka merged commit dcae9c5c2c into main 2026-11-11 21:24: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/Huginn!62
No description provided.