Skip to content

fix(relay): stop panicking the ingest worker on reactions to project events - #5294

Open
Chessing234 wants to merge 1 commit into
block:mainfrom
Chessing234:fix/relay-reaction-project-root-panic-4936
Open

fix(relay): stop panicking the ingest worker on reactions to project events#5294
Chessing234 wants to merge 1 commit into
block:mainfrom
Chessing234:fix/relay-reaction-project-root-panic-4936

Conversation

@Chessing234

@Chessing234 Chessing234 commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

A NIP-25 reaction whose target is a project root or project comment (kind
1621 issue, 1618 PR, or a kind-1 comment on one) carries no h tag, so
channel_id is None on the reaction write path. The conformance-trace
emission asserted a channel was always present:

channel: channel_label(channel_id.expect("reaction path has channel")),

so the worker panicked at ingest.rs:2824. The row was inserted before the
panic, so the client saw a failed request for a persisted event and retried,
and the duplicate branch carried the same expect, head-of-line blocking a
durable publish queue forever.

Mirror the message write's three-way split at the same seam:
(Some, true) -> WriteInsert, (Some, false) -> WriteDuplicate, (None, _)
-> WriteInsertGlobal. The conformance vocabulary already models channel-less
writes; only the reaction path was missing it.

Closes #4936

@Chessing234
Chessing234 requested a review from a team as a code owner August 8, 2026 06:07
…events

A NIP-25 reaction whose target is a project root or project comment (kind
1621 issue, 1618 PR, or a kind-1 comment on one) carries no h tag, so
channel_id is None on the reaction write path. The conformance-trace
emission asserted a channel was always present:

    channel: channel_label(channel_id.expect("reaction path has channel")),

so the worker panicked at ingest.rs:2824. The row was inserted before the
panic, so the client saw a failed request for a persisted event and retried,
and the duplicate branch carried the same expect, head-of-line blocking a
durable publish queue forever.

Mirror the message write's three-way split at the same seam:
(Some, true) -> WriteInsert, (Some, false) -> WriteDuplicate, (None, _)
-> WriteInsertGlobal. The conformance vocabulary already models channel-less
writes; only the reaction path was missing it.

Closes block#4936

Signed-off-by: Taksh <takshkothari09@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

relay: a reaction on a project root (issue/PR) panics the ingest worker

1 participant