GRASP-06: Alternative pull request hosting
Purpose: to accept PRs and PR Updates targeting any repository without requiring an accepted git repository announcement for the target repository.
This enables contributors to submit PRs when the repository's own GRASP servers are unreachable, are applying SPAM or curation policy that rejects the contribution, or are otherwise unable to accept the push — without forcing contributors to create a fork repository announcement.
Git Smart HTTP Service
MUST serve an unauthenticated git smart http service at /prs/<npub>/<percent-encoded-identifier>.git for any valid npub and identifier.
MUST respond to upload-pack requests for any well-formed path as if serving an empty bare repository until at least one refs/nostr/<event-id> has been accepted for that path.
MUST accept pushes to refs/nostr/<event-id>. MUST reject pushes to any other ref namespace. MAY reject based on size, SPAM prevention, allowlists, pre-payment, PoW, or similar policy.
The server SHOULD delete and MAY garbage-collect refs/nostr/<event-id> refs if no matching PR or PR Update event is accepted by the relay within 20 minutes, and SHOULD garbage-collect the repository if it contains no refs.
Event Acceptance
MUST accept PRs and PR Updates that would otherwise be rejected under GRASP-01 for not referencing an accepted repository announcement, provided the event:
- has an
atag referencing a git repository announcement of the form30617:<pubkey>:<identifier>, AND - has a
clonetag naming this service's/prs/<signer-npub>/<identifier>.gitendpoint.
All other GRASP-01 event acceptance rules apply unchanged.