diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-23 15:41:32 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-23 15:41:32 +0000 |
| commit | c54ce061d6d278cce8362d5af085808ca60c239b (patch) | |
| tree | ec967d6195d9f7ec4f061449596611afe3a0950f /grasp-audit/README.md | |
| parent | e0ad39a489b3398f8208713bf728db0cb11475b0 (diff) | |
| parent | 113928aa84894ea8f65c247d9987527e792b32a9 (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.md | 10 |
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 | ||