clone

a self-hosted multitenant nostr relay with sites, file storage, git hosting, and inbox and outbox delivery

describe history cursors, repair budgets and empty upload checks

Dami committed 37fa4e4
commit
37fa4e4299b6d4b1b1339dbf3652df7dce783b0d
parent
efc0c4439bc2070f5cd7a788d2a8d0468a39e62f
author
Dami <dami.etoile@gmail.com>
2 files changed, +8 -4
Mdocs/files-and-private-repositories.md4++--
Mdocs/git-collaboration.md8++++++--
M docs/files-and-private-repositories.md +2 -2
@@ -26,7 +26,7 @@ Cancel stops the current upload. Retry reuses the selected files while the page
2626 2727 Encrypted file uploads use [draft BUD-14](https://github.com/hzrd149/blossom/pull/102) when the server advertises it. Cancel and retry keep the encrypted bytes and key in memory while the page stays open. Closing or reloading the page loses that local state. The uploader falls back to BUD-13 when multipart support is unavailable.2828 29-Other clients can send binary chunks to `PATCH /<sha256>` with `Upload-Type`, `Upload-Length`, `Upload-Offset` and `Content-Length`. Chunks may overlap or arrive out of order. A partial upload stays unavailable for download until its complete hash is verified. Blossom proofs name the final hash; NIP-98 proofs bind each chunk's request body.29+Other clients can send binary chunks to `PATCH /<sha256>` with `Upload-Type`, `Upload-Length`, `Upload-Offset` and `Content-Length`. Chunks may overlap or arrive out of order. A partial upload stays unavailable for download until its complete hash is verified. Other uploads can proceed during verification. Blossom proofs name the final hash; NIP-98 proofs bind each chunk's request body.3030 3131 Partial uploads reserve the complete file size against the uploader's allowance. Reservations expire after 60 seconds of inactivity. Incomplete uploads can survive a server restart within that window. The draft provides no server endpoint for discovering received offsets, so clients must track their own progress.3232
@@ -49,7 +49,7 @@ This example limits each stored blob to 100 MiB and allows 1 GiB of claimed stor
4949 5050 Each uploader pays the full size of every file they claim, even when another uploader already stores identical bytes. Repeated uploads by the same user count once. Removing an uploader's claim releases their allowance; shared content remains while another claim exists. An owner can remove the stored file for everyone.5151 52-Clients can check an upload with [BUD-06](https://github.com/hzrd149/blossom/blob/master/buds/06.md) `HEAD /upload`. The result is advisory; the upload itself checks the current limits. File descriptors include the optional Nostr metadata field defined by [BUD-08](https://github.com/hzrd149/blossom/blob/master/buds/08.md). A [BUD-13](https://github.com/hzrd149/blossom/pull/100) remote upload may name up to eight `url` sources.52+Clients can check an upload with [BUD-06](https://github.com/hzrd149/blossom/blob/master/buds/06.md) `HEAD /upload`, including empty files with `X-Content-Length: 0`. The result is advisory; the upload itself checks the current limits. File descriptors include the optional Nostr metadata field defined by [BUD-08](https://github.com/hzrd149/blossom/blob/master/buds/08.md). A [BUD-13](https://github.com/hzrd149/blossom/pull/100) remote upload may name up to eight `url` sources.5353 5454 ## Private Git hosting5555
M docs/git-collaboration.md +6 -2
@@ -20,9 +20,13 @@ Enable `features.grasp` and `features.grasp02` to synchronize repository announc
2020 2121 Enable `features.grasp03` as well to discover participant outboxes from their NIP-65 relay lists and kind 10317 GRASP lists. Profile and relay-list events are cached locally. New discussion participants are included in subsequent discovery passes.2222 23-Synchronization runs on a schedule. A repository that synchronizes successfully is checked again after 55 minutes. One that fails is retried after five minutes. A pass that runs out of time keeps its progress and continues from the next relay or participant on the following pass. Live subscriptions and outbox discovery are limited so a busy repository does not open unbounded connections.23+Synchronization runs on a schedule. A repository that synchronizes completely is checked again after 55 minutes. One with more history to fetch continues after five minutes, and one that fails is retried after five minutes. A pass that runs out of time keeps its progress and continues from the next relay or participant on the following pass. Live subscriptions and outbox discovery are limited so a busy repository does not open unbounded connections.2424 25-History responses are limited to 10,000 events per filter. A history that reaches that limit is reported as incomplete instead of silently claiming success, and larger histories are not yet guaranteed to converge.25+History responses are limited to 10,000 events per filter. When local history exceeds that limit, synchronization refreshes up to 256 recent events and resumes older history from a saved cursor. A cursor advances only after its events are stored or rejected by policy; a storage failure keeps the window for the next attempt. Interrupted queries retain received events for the next attempt. Large histories remain marked incomplete; slow peers and large groups of events with the same timestamp can prevent older history from converging.26+27+Peers that do not support NIP-77 use paginated queries for four hours before another compatibility probe. Private peer authorization is checked on every connection.28+29+Pull request repair limits ancestry depth to 128 commits per tip and allows 256 MiB of transfer traffic across its sources and updates. Fetched objects are checked in temporary storage before the pull request refs become visible. A tip must have complete ancestry, using objects already hosted when available. Repairs that exceed these limits leave the pull request unavailable until the required objects are hosted through another route, such as an authorized Git push.2630 2731 ## Private repositories2832