diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-17 11:43:40 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-17 11:43:40 +0000 |
| commit | cad58fccae7ed84bb033e56de0f1323b714a854d (patch) | |
| tree | 9635381a3a8c35d8e4f83f2686304874b1523433 /src/nostr/policy | |
| parent | efbbcc49ae8e8f598a24c939b35ad9cda0541663 (diff) | |
docs: clarify why fetch_repository_data excludes purgatory
Add comments explaining that PR event processing (both incoming and
purgatory) should only use database announcements, not purgatory ones.
This is intentional because:
- Incoming PR events should only be accepted for validated announcements
- Purgatory PR events should only be released when announcement is promoted
- This prevents accepting PR events for announcements that fail validation
Differs from state event processing which uses fetch_repository_data_with_purgatory
because state events check authorization without releasing from purgatory.
Diffstat (limited to 'src/nostr/policy')
| -rw-r--r-- | src/nostr/policy/pr_event.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/nostr/policy/pr_event.rs b/src/nostr/policy/pr_event.rs index 00e09c3..072e445 100644 --- a/src/nostr/policy/pr_event.rs +++ b/src/nostr/policy/pr_event.rs | |||
| @@ -127,6 +127,10 @@ impl PrEventPolicy { | |||
| 127 | .ok_or_else(|| anyhow::anyhow!("No identifier in PR event"))?; | 127 | .ok_or_else(|| anyhow::anyhow!("No identifier in PR event"))?; |
| 128 | 128 | ||
| 129 | // Fetch repository data | 129 | // Fetch repository data |
| 130 | // NOTE: Only fetch from database, NOT purgatory. Incoming PR events should | ||
| 131 | // only be accepted for announcements that have been promoted (validated). | ||
| 132 | // If the announcement is still in purgatory, the PR event should also go | ||
| 133 | // to purgatory and wait for the announcement to be promoted. | ||
| 130 | let db_repo_data = fetch_repository_data(&self.ctx.database, &identifier).await?; | 134 | let db_repo_data = fetch_repository_data(&self.ctx.database, &identifier).await?; |
| 131 | 135 | ||
| 132 | // Extract owner pubkey from source repo path | 136 | // Extract owner pubkey from source repo path |
| @@ -203,6 +207,10 @@ impl PrEventPolicy { | |||
| 203 | let identifier = parts[2]; | 207 | let identifier = parts[2]; |
| 204 | 208 | ||
| 205 | // 2. Fetch repo data | 209 | // 2. Fetch repo data |
| 210 | // NOTE: Only fetch from database, NOT purgatory. Incoming PR events should | ||
| 211 | // only be accepted for announcements that have been promoted (validated). | ||
| 212 | // If the announcement is still in purgatory, the PR event should also go | ||
| 213 | // to purgatory and wait for the announcement to be promoted. | ||
| 206 | let db_repo_data = fetch_repository_data(&self.ctx.database, identifier).await?; | 214 | let db_repo_data = fetch_repository_data(&self.ctx.database, identifier).await?; |
| 207 | 215 | ||
| 208 | // 3. Extract list of maintainers from "a 30617:<maintainer>:<identifier>" tags | 216 | // 3. Extract list of maintainers from "a 30617:<maintainer>:<identifier>" tags |