- commit
- 02be180016c8f7ed4fd05abf9960e3b61a2282d2
- parent
- 13cd5c22732a2c7c45791aee74586587ca489479
- author
- Dami <dami.etoile@gmail.com>
| M | docs/ | 5 | ++++ |
| M | docs/ | 40 | ++++++++++++++++++++++++++++++ |
@@ -54,6 +54,11 @@ Deleting a ref or expiring metadata does not reclaim immutable Git history;
5454 those bytes remain in file storage until the relay is deleted. See5555 [GRASP-01 Git hosting](22-grasp-01-git-hosting.md) for the full limits.5656 57+Git file usage includes transaction receipts and retained bookkeeping as58+well as packed files. It is not a fixed reservation per repository: the59+total grows with its history, including ref-only updates. The Health tab60+shows the combined file total, not a breakdown of these Git components.61+5762 ## Prices past the allowance5863 5964 | Measured | Price |@@ -158,6 +158,46 @@ lower CPU cost or a complete request-memory bound. Bulk initial checkpoint
158158 construction avoids writing intermediate receipt-index nodes; it removes159159 no stored data and does not start migration automatically.160160 161+The isolated checkpoint fixture separates physical storage from the objects162+referenced by the current format. Both workloads use one 214-byte Git pack,163+260 transactions and an explicit checkpoint after transaction 128. One keeps164+updating the same ref to the same commit; the other retains 259 new tags.165+These are local measurements with ntig 0.2.1, not production usage or a166+per-repository minimum.167+168+| Retained Git payload | One fixed ref | Growing tags |169+|---|---:|---:|170+| Pack | 214 bytes | 214 bytes |171+| Current root and manifest | 430 bytes | 16,888 bytes |172+| All 260 retry records and current receipt index | 136,165 bytes | 126,982 bytes |173+| Current-format total | 136,809 bytes | 144,084 bytes |174+| Superseded manifests | 42,900 bytes | 1,671,120 bytes |175+| Superseded receipt-index nodes | 332,722 bytes | 332,722 bytes |176+| Physical objects and reserved bytes | 512,431 bytes | 2,147,926 bytes |177+178+The ledger equals the paginated R2 inventory for every key and size in these179+quiet fixtures: there is no reservation slack. Each untouched fixture180+has no Git R2 keys; its first commit uses 631 bytes in three keys. SQLite181+allocation, provider operations and execution are separate quantities.182+The larger growing-tag total comes mainly from retained copies of earlier183+ref maps. Its current manifest is only 16,783 bytes. Fixed-ref transaction184+records are larger because their updates include an old object ID.185+186+All historical retry records remain required by the current retention187+contract. Current-format membership includes every pack in the manifest;188+it does not establish that every object inside those packs is reachable189+from today's refs. Superseded metadata is outside the latest root's190+dependency set, but older readers and in-flight publishers can still need191+it. This inventory supplies no online deletion authority. No collector or192+storage saving is deployed, and these bytes still count toward tenant file193+usage. Coordinated metadata collection is the larger target in this fixture;194+changing receipt retention would change retry semantics.195+196+`npm test -- test/object/grasp-checkpoint.test.ts --reporter=verbose --disableConsoleIntercept`197+reproduces the inventory, current-format traversal, all historical receipt198+lookups and unchanged root checks. The measurements apply to healthy,199+quiescent fixtures; ambiguous writes can still leave reservation slack.200+161201 `graspBusy`, `graspControls` and the job round's `working` flag fence work162202 within a live instance. Async handlers can interleave across awaits. Those163203 flags are admission controls, not persisted crash recovery or authority to