upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/nostr/policy/announcement.rs6
2 files changed, 6 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 633ddbf..7a6498b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9 9
10### Fixed 10### Fixed
11 11
12- Replacement announcements (kind 30617) for a purgatory entry were being saved to the database immediately, bypassing the purgatory gate. When a second copy of the same announcement arrived (e.g. via sync from another relay) while the original was still in purgatory awaiting git data, the policy returned `Accept` instead of `AcceptPurgatory`, causing the event to be stored without the corresponding git data or state events ever arriving. The fix returns `AcceptPurgatory` for replacements of purgatory entries so the updated event is held in purgatory until git data arrives.
13
12- Repository identifiers containing characters that require percent-encoding in URLs (e.g. spaces, emoji) are now accepted and served correctly. NIP-01 places no restriction on `d` tag values and NIP-34 only recommends kebab-case without mandating it, so rejecting non-kebab identifiers was overly strict. Identifiers are stored verbatim on disk and percent-encoded when used in URLs, per the `nostr://` clone URL spec formalised in [NIP-34 PR #2312](https://github.com/nostr-protocol/nips/pull/2312) and the GRASP-01 HTTP path spec. The landing page clone URL now also correctly percent-encodes the identifier. 14- Repository identifiers containing characters that require percent-encoding in URLs (e.g. spaces, emoji) are now accepted and served correctly. NIP-01 places no restriction on `d` tag values and NIP-34 only recommends kebab-case without mandating it, so rejecting non-kebab identifiers was overly strict. Identifiers are stored verbatim on disk and percent-encoded when used in URLs, per the `nostr://` clone URL spec formalised in [NIP-34 PR #2312](https://github.com/nostr-protocol/nips/pull/2312) and the GRASP-01 HTTP path spec. The landing page clone URL now also correctly percent-encodes the identifier.
13 15
14### Changed 16### Changed
diff --git a/src/nostr/policy/announcement.rs b/src/nostr/policy/announcement.rs
index aba5181..b474fbb 100644
--- a/src/nostr/policy/announcement.rs
+++ b/src/nostr/policy/announcement.rs
@@ -137,8 +137,10 @@ impl AnnouncementPolicy {
137 "Replacement announcement (purgatory) - replacing purgatory entry" 137 "Replacement announcement (purgatory) - replacing purgatory entry"
138 ); 138 );
139 self.replace_purgatory_announcement(event, &announcement); 139 self.replace_purgatory_announcement(event, &announcement);
140 // Return Accept (not AcceptPurgatory) - this is a replacement, not new 140 // Return AcceptPurgatory - git data hasn't arrived yet so the
141 return validation_result; 141 // announcement must NOT be saved to the database. The purgatory
142 // entry has already been updated above with the newer event.
143 return AnnouncementResult::AcceptPurgatory;
142 } 144 }
143 145
144 // No existing announcement - route to purgatory 146 // No existing announcement - route to purgatory