Desk door: listing gate and account-id grammar at decode (PR B of cut-desk-feed-listing.r8; stacked on #62) #63
Open
eureka
wants to merge 3 commits from
eureka-substrate/desk-listing-gate into main
pull from: eureka-substrate/desk-listing-gate
merge into: GameCult:main
GameCult:main
GameCult:eureka/basis-follow-up
GameCult:hands/eureka-body-persona-turn-imagination-line
GameCult:eureka/persona-save-attachment
GameCult:hands/eureka-body-flush-keeps-unseen-revision
GameCult:hands/eureka-body-usage-per-turn
GameCult:eureka-substrate/desk-door-shapes
GameCult:gamecult-chat/chat-ingest-core
GameCult:eureka-substrate/desk-feed-raised-at
GameCult:gamecult-chat/chat-window
GameCult:gamecult-chat/chat-search
GameCult:eureka-substrate/desk-counts-shape
GameCult:eureka-substrate/desk-deciders-grammar
GameCult:eureka-substrate/desk-feed-door-fixtures
GameCult:chat/reply-link-v4
GameCult:chat/map-joined-rooms
GameCult:gamecult-chat/source-query-texts
GameCult:docs/chat-retrieval-lookup-not-memory
GameCult:eureka-body/self-run-redact-url-userinfo
GameCult:hands/eureka-body-steward-rulings
GameCult:eureka-substrate/pending-tail-gaps
GameCult:hands/eureka-body-persona-mind-role
GameCult:hands/eureka-body-stream-projector-kit
GameCult:eureka-substrate/session-from-env
GameCult:eureka-substrate/persona-room-tail
GameCult:eureka-substrate/address-only-wake
GameCult:eureka-substrate/revendor-de8a062a
GameCult:eureka-substrate/read-cap-boundary
GameCult:eureka-substrate/read-fork-too-large
GameCult:eureka-substrate/fork-too-large
GameCult:eureka-substrate/desk-door-reads-r2
GameCult:eureka-substrate/open-direct-lows
GameCult:eureka-substrate/desk-answer-door
GameCult:eureka-substrate/desk-wire-envelope
GameCult:eureka-body/open-direct-pin-wording
GameCult:eureka-substrate/desk-wire-s2-lows
GameCult:eureka/persona-open-direct
GameCult:eureka-substrate/desk-wire
GameCult:eureka-substrate/desk-digest-retracted
GameCult:eureka-substrate/desk-answer-record
GameCult:eureka/prose-index-map
GameCult:eureka/chat-read-receipt
GameCult:eureka/self-run-full-result
GameCult:eureka/sources-skip-noise
GameCult:eureka/refusal-names-the-closure
GameCult:eureka/import-inert-resolutions
GameCult:hands/eureka-body-follow-ups-oldest-first
GameCult:hands/eureka-body-brief-done-means-landed
GameCult:eureka/import-resume-tolerates-window-writes
GameCult:eureka/import-foreign-cite-as-of-source
GameCult:hands/eureka-body-import-history-order
GameCult:hands/eureka-body-every-turn-asks-her-work
GameCult:hands/eureka-body-campaign-import-verb
GameCult:hands/eureka-body-campaign-move-mind-side
GameCult:hands/eureka-body-sleep-turn-one-mind
GameCult:eureka/heartbeat-no-self-launch
GameCult:eureka/chat-image-read-bound
GameCult:eureka/chat-image-consumer
GameCult:eureka-substrate/huginn-recall-dispatch
GameCult:eureka-substrate/huginn-admit-hold
GameCult:eureka-substrate/huginn-cli-json-persona
GameCult:eureka-body/release-reply-path
GameCult:hands/eureka-body-self-reply-conversation
GameCult:hands/eureka-body-stream-thoughts
GameCult:hands/eureka-body-self-session-resume
GameCult:hands/eureka-body-project-name-addresses-steward
GameCult:hands/eureka-body-persona-hears-her-self
GameCult:eureka/chat-retrieval-map-status
GameCult:eureka/chat-retrieval-map
GameCult:eureka/cross-mind-campaign-readability
GameCult:hands/eureka-body-typed-research
GameCult:release/wake-brake-960ed62
GameCult:hands/eureka-body-machine-and-keepers
GameCult:eureka-body/plan-read-honest
GameCult:eureka-body/optimistic-send-organ
GameCult:hands/eureka-substrate-mind-read-floor
GameCult:hands/eureka-body-first-line-you
GameCult:hands/eureka-body-wear-facts
GameCult:hands/eureka-body-repo-activity
GameCult:hands/eureka-body-tell-delta
GameCult:hands/eureka-body-embed-outage
GameCult:hands/eureka-body-refusal-loop
GameCult:hands/eureka-body-flush-shown-fixes
GameCult:hands/eureka-body-turn-core-instruction
GameCult:hands/eureka-body-flush-shown
GameCult:eureka-body/persona-session
GameCult:eureka-body/self-session-live-successor
GameCult:eureka-body/tempo-pid-sim
GameCult:eureka-body/self-session-live
GameCult:eureka-body/persona-memory-write
GameCult:eureka-body/live-session-sequence
GameCult:eureka-body/persona-goals-in-turn
GameCult:eureka-body/minds-wake-each-other
GameCult:eureka-body/persistent-session-map
GameCult:eureka-body/tempo-abstention
GameCult:eureka-body/self-run-result-in-rationale
GameCult:eureka-body/heartbeat-joint-lever
GameCult:eureka-body/self-run-scrub-knob
GameCult:eureka-body/source-search
GameCult:eureka-body/source-search-index-safety
GameCult:eureka-body/persistent-session-prior-art
GameCult:eureka-body/self-run-start-brief
GameCult:eureka-body/source-index-research
GameCult:eureka-body/persona-memory-voice-note
GameCult:eureka-body/self-run-closes-run
GameCult:eureka-body/self-run-permission-mode
GameCult:eureka-body/persona-addressees
GameCult:eureka-body/persona-reput-index
GameCult:eureka-body/heartbeat-research
GameCult:eureka-substrate/readback-gate
GameCult:eureka-substrate/semantic-members-scores
GameCult:eureka-body/mind-self-run
GameCult:eureka-substrate/campaign-repos
GameCult:readme-front-door
GameCult:eureka-body/mind-body-riders
GameCult:eureka-body/mind-wake
GameCult:eureka-body/mind-unit-gate
GameCult:eureka-body/brake-stop
GameCult:eureka-body/mind-launch
GameCult:eureka-substrate/huginn-persona-state
GameCult:eureka-substrate/huginn-cli
GameCult:eureka-substrate/clippy-pin
GameCult:eureka-substrate/leaf-read-anchors
GameCult:eureka-substrate/huginn-admission-rules
GameCult:eureka-substrate/huginn-pin-and-refusals
GameCult:eureka/memory-organ
GameCult:hands/cut13b
GameCult:hands/cut13a
GameCult:hands/cut11a
GameCult:hands/bp3
GameCult:hands/rs3
GameCult:hands/bp2
GameCult:codex/windows-atomic-replace-retry
2026-11-11
docs: published schemas type nullable answerer/raised_at as plain string
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Desk door: the answer path honors the listing gate (a hidden fork answers fork_unknown, stores nothing)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Desk door: the listing gate and the account-id grammar at decode
A non-decider reads a fork only while the Mind's desk_listing for it is in force; a decider sees every showable fork. Counts, pages and cursors are over the visible set; a hidden fork reads as a missing one (same bytes). New kind desk_listing (epiphany.pipeline.desk_listing.v2, key <campaign>:desk_listing:<question-label>; unlist = Withdrawn resolution, relist = withdraw that), new citation role Listed (ALL is 27), admitted on the Admit door only (the desk door refuses one). subject and every deciders entry are AccountId (lowercase D-format UUID) at decode, refused as payload-not-a-request naming the field and never the value; the stored desk_answer.answerer is an AccountId. The longest kind name is now desk_listing, so the resolution local bound is 112. Tests move to account ids (fixtures::account); refused-request fixtures and their failure frames; all published schemas, the golden envelopes and the catalog index regenerated. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>