Compare commits

..

2 commits

Author SHA1 Message Date
d2b8550d7f Merge pull request 'fix(nostr): log publish skips at WARNING instead of silently' (#54) from fix/publish-skip-logging into main
Some checks failed
lint.yml / Merge pull request 'fix(nostr): log publish skips at WARNING instead of silently' (#54) from fix/publish-skip-logging into main (push) Failing after 0s
Reviewed-on: #54
2026-09-26 21:37:03 +00:00
165787d134 fix(nostr): log publish skips at WARNING instead of silently
Some checks failed
lint.yml / fix(nostr): log publish skips at WARNING instead of silently (pull_request) Failing after 0s
Both paths that decline to publish a NIP-52 calendar event were
invisible at the INFO level instances actually run at: the
`signer is None` branch returned bare with no log at any level, and
the missing-client branch logged at debug.

A skipped publish leaves the relay serving whatever inventory it last
saw, so the public ticket count stops tracking the DB with nothing to
indicate it. That has now been found twice, both times only because a
human noticed a wrong number on a public page — #35 on aio-demo, and
on cfaun where an event drifted for 14 days and produced no log line
at all, success or failure.

Both messages name the event id and whether it was a publish or a
delete, so a skip can be tied to a specific event without correlating
timestamps by hand.

Refs #51
2026-09-26 23:34:47 +02:00
2 changed files with 21 additions and 4 deletions

View file

@ -32,9 +32,19 @@ async def publish_or_delete_nostr_event(event: Event, *, delete: bool = False) -
if signer is None: if signer is None:
# Wallet missing, account missing, unclassified row, or # Wallet missing, account missing, unclassified row, or
# ClientSideOnlySigner account (server can't sign for them). # ClientSideOnlySigner account (server can't sign for them).
# Soft-fail: skip the publish silently. The user can still # Soft-fail: the HTTP / payment flow that triggered this must
# publish kind-31922/31923 events client-side once we have # not break. The user can still publish kind-31922/31923
# that path. # events client-side once we have that path.
#
# Logged at WARNING, not debug: skipping the publish means the
# relay keeps serving whatever inventory it last saw, so the
# public ticket count silently stops tracking the DB. That has
# twice been discovered only by a human noticing a wrong number
# on a public page (aiolabs/events#35, #51).
logger.warning(
f"[EVENTS] No signer for wallet {event.wallet}, skipping "
f"NIP-52 {'delete' if delete else 'publish'} for event {event.id}"
)
return return
nostr_event = await publish_event_to_nostr( nostr_event = await publish_event_to_nostr(

View file

@ -172,7 +172,14 @@ async def publish_event_to_nostr(
Returns the published NostrEvent for metadata storage, or None on failure. Returns the published NostrEvent for metadata storage, or None on failure.
""" """
if not nostr_client: if not nostr_client:
logger.debug("[EVENTS] No NostrClient available, skipping publish") # WARNING, not debug: with no client the event is never queued, so
# the relay keeps serving stale inventory and nothing downstream
# can tell. At debug this skip is invisible at the INFO level
# instances actually run at (aiolabs/events#35, #51).
logger.warning(
"[EVENTS] No NostrClient, skipping NIP-52 "
f"{'delete' if delete else 'publish'} for event {event.id}"
)
return None return None
try: try: