upleb.uk

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

summaryrefslogtreecommitdiff
path: root/grasp-audit/README.md
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2026-02-23 15:41:32 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2026-02-23 15:41:32 +0000
commitc54ce061d6d278cce8362d5af085808ca60c239b (patch)
treeec967d6195d9f7ec4f061449596611afe3a0950f /grasp-audit/README.md
parente0ad39a489b3398f8208713bf728db0cb11475b0 (diff)
parent113928aa84894ea8f65c247d9987527e792b32a9 (diff)
feat: announcement purgatory
Extends purgatory to hold repository announcements until git data arrives, preventing empty repositories from being served to clients. When an announcement is received, a bare repo is created immediately and the announcement is held in purgatory. It is only promoted and served once a git push confirms real content exists. If no push arrives before expiry, the bare repo is deleted and the announcement is silently discarded. Key behaviours: - Soft expiry: announcements are hidden from clients but kept alive while git pushes are in progress, reviving on successful push - Expiry is extended when a matching state event or git push is observed - NIP-09 deletion events remove announcements from purgatory - Purgatory state (announcements, state events, PR events, expired set) is persisted to disk on graceful shutdown and restored on startup, with elapsed downtime subtracted from expiry deadlines - Purgatory announcements drive StateOnly sync in the sync system so state events are fetched from listed relays before promotion - SyncLevel added to RepoSyncIndex to distinguish purgatory repos (StateOnly) from promoted repos (Full L2+L3 sync)
Diffstat (limited to 'grasp-audit/README.md')
-rw-r--r--grasp-audit/README.md10
1 files changed, 5 insertions, 5 deletions
diff --git a/grasp-audit/README.md b/grasp-audit/README.md
index 4d2401f..936f10f 100644
--- a/grasp-audit/README.md
+++ b/grasp-audit/README.md
@@ -245,7 +245,7 @@ pub async fn test_something(client: &AuditClient) -> TestResult {
245 let ctx = TestContext::new(client); 245 let ctx = TestContext::new(client);
246 246
247 // 2. Prerequisites (cached per-TestContext) 247 // 2. Prerequisites (cached per-TestContext)
248 let repo = ctx.get_fixture(FixtureKind::ValidRepo).await?; 248 let repo = ctx.get_fixture(FixtureKind::ValidRepoSent).await?;
249 249
250 // 3. Test-specific event 250 // 3. Test-specific event
251 let my_event = client.create_issue(&repo, "Title", "Content", vec![])?; 251 let my_event = client.create_issue(&repo, "Title", "Content", vec![])?;
@@ -298,10 +298,10 @@ Fixtures use deterministic commit hashes for reproducible testing:
298 298
299| Constant | Hash | Used By | 299| Constant | Hash | Used By |
300| ------------------------------------------------ | ------------------------------------------ | ------------------------------------------------ | 300| ------------------------------------------------ | ------------------------------------------ | ------------------------------------------------ |
301| `DETERMINISTIC_COMMIT_HASH` | `64ea71d79a57a7acb334cd9651f8aec067c0ce5d` | Owner fixtures (RepoState, OwnerStateDataPushed) | 301| `DETERMINISTIC_COMMIT_HASH` | `d6e4b26ccf9c268d18d60e6d09804313cc850821` | Owner fixtures (RepoState, OwnerStateDataPushed) |
302| `MAINTAINER_DETERMINISTIC_COMMIT_HASH` | `1c2d472c9b71ed51968a66500281a3c4a6840464` | MaintainerStateDataPushed | 302| `MAINTAINER_DETERMINISTIC_COMMIT_HASH` | `d26703c007eff6d17fee3bb70ce8be5d1427d0e7` | MaintainerStateDataPushed |
303| `RECURSIVE_MAINTAINER_DETERMINISTIC_COMMIT_HASH` | `05939b82de66fbdb9c077d0a64fc68522f3cb8e0` | RecursiveMaintainerStateDataPushed | 303| `RECURSIVE_MAINTAINER_DETERMINISTIC_COMMIT_HASH` | `54a2b4b3cbc3373ad1438b8ffad1681d12bc6c4a` | RecursiveMaintainerStateDataPushed |
304| `PR_TEST_COMMIT_HASH` | `5d40fb1555a0c28bf4d650515a73aaa54d4d9bfb` | PR fixtures (PREvent, PREventGenerated) | 304| `PR_TEST_COMMIT_HASH` | `5a51b30e4615b572dcd5b9e487861b58605a5c21` | PR fixtures (PREvent, PREventGenerated) |
305 305
306#### Fixture Dependencies 306#### Fixture Dependencies
307 307