Desk feed door: account ids are lowercase D-format UUIDs (doc, fixtures, grammar test) #56

Merged
eureka merged 4 commits from eureka-substrate/desk-deciders-grammar into main 2026-11-11 17:44:46 +00:00
Owner

Heimdall's check (follow-up eureka-substrate:follow_up:chat-s6073-6073): what may deciders (and subject, answerer) carry on the desk door?

  • Bifrost sends only UserAccount.Id as lowercase D-format UUIDs (DeskEndpoints.cs ToString("D"); StartupConfigurationValidator.cs refuses any other decider). No Matrix id, email or handle.
  • Huginn's door reads these fields as Short (any 200 bytes): a probe on bf9a8a7 decoded subject: "meta@gamecult.org", deciders: ["@heimdall:gamecult.org"] without complaint. Refusing them is code, owed by cut-desk-feed-listing.r4 (AccountId = 36, uuid_text, the RequestId grammar).
  • This PR (spec, fixtures and test only): docs/desk-feed-door.md states the grammar and the gap, and that card.deciders echoes the ids (Bifrost must mask it as it masks answerer); the fixtures use synthetic UUIDs instead of "7"/"12"; the test every_account_id_in_the_fixtures_is_a_lowercase_d_format_uuid pins the grammar and rejects Matrix ids, emails, handles, uppercase and braced UUIDs.

Verification: cargo test -p huginn-mind --test desk_feed_fixtures (2 passed), clippy clean, independent python3 -I msgpack decode of every fixture ok.

🤖 Generated with Claude Code

Heimdall's check (follow-up `eureka-substrate:follow_up:chat-s6073-6073`): what may `deciders` (and `subject`, `answerer`) carry on the desk door? - Bifrost sends only `UserAccount.Id` as lowercase D-format UUIDs (`DeskEndpoints.cs` `ToString("D")`; `StartupConfigurationValidator.cs` refuses any other decider). No Matrix id, email or handle. - Huginn's door reads these fields as `Short` (any 200 bytes): a probe on bf9a8a7 decoded `subject: "meta@gamecult.org"`, `deciders: ["@heimdall:gamecult.org"]` without complaint. Refusing them is code, owed by `cut-desk-feed-listing.r4` (`AccountId = 36, uuid_text`, the `RequestId` grammar). - This PR (spec, fixtures and test only): `docs/desk-feed-door.md` states the grammar and the gap, and that `card.deciders` echoes the ids (Bifrost must mask it as it masks `answerer`); the fixtures use synthetic UUIDs instead of "7"/"12"; the test `every_account_id_in_the_fixtures_is_a_lowercase_d_format_uuid` pins the grammar and rejects Matrix ids, emails, handles, uppercase and braced UUIDs. Verification: `cargo test -p huginn-mind --test desk_feed_fixtures` (2 passed), clippy clean, independent `python3 -I` msgpack decode of every fixture ok. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
subject, deciders and answerer are Bifrost UserAccount ids (lowercase
D-format, as Bifrost's validator requires and as Huginn names
RequestId). The fixtures used "7"/"12"; they now carry synthetic UUIDs,
and a test pins the grammar and refuses Matrix ids, emails and handles.
The doc states that Huginn's door does not refuse other shapes yet (owed
by cut-desk-feed-listing.r4) and that card.deciders echoes the ids.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Persona's ruling (follow-up chat-mind-20261111T150417226Z-t167): a
reader is a decider when subject is in the call's deciders; any other
reader gets no decider or answerer ids, only counts, and Huginn does it
because the card is opaque to Bifrost. CultLib's closed card (deciders
minItems 1, no count) and non-null answerer cannot carry it yet, so the
doc names the proposal to Libby and the fixtures add clearly synthetic
card fragments and a proposed non-decider record, with a test that no
account id appears in a non-decider's bytes and a decider keeps them.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Soul on d08b888: CultLib main's card requires 16 keys, not 17. The
account-id grammar test now rejects 36 hex digits with no dash, a
37-character id and a dash off position. The reader-view test says it
pins mirror types only.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
eureka merged commit 79d954cad1 into main 2026-11-11 17:44:46 +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!56
No description provided.