Skip to content

Add retention GC and pin published Cellule for native storage - #37

Merged
forhappy merged 20 commits into
mainfrom
codex/storage-retention-native-packs
Oct 16, 2026
Merged

forhappy merged 20 commits into
mainfrom
codex/storage-retention-native-packs

Conversation

@forhappy

@forhappy forhappy commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Large imports retained excessive Cellule state, and full fetches reconstructed native packs as loose objects. This change integrates the current native catalog/publication implementation, keeps Git bodies in immutable authenticated packs, and adds bounded Cellule retention collection.

  • Collect superseded Cellule objects under confirmed maintenance drain, backup pins, grace/deletion bounds and a durable worker claim.
  • Reuse native pack/index pairs and immutable catalog/directory structures. Batch metadata in 512-object pages and bounded shards instead of authoritative body rows.
  • Follow renewed custody through metadata replay and final assembly, bound aggregate closure scratch separately, and retain verified pack completion across repeated fetches. Keep authorization, identity and fencing checks.
  • Pin all direct Cellule crates and the lockfile to published 0.2.0. Use repository schema 4 and canopy-pack-v2; breaking formats require a fresh prefix. Remove retired readers and handlers.

Verification imported full bat, Starship and libgit2 histories: 194,252 object bodies compared byte for byte, 501 refs and symbolic HEADs matched, and all mirrors passed git fsck --full. Refs APIs cover every ref; tree checks follow all pages of 12 selected paths; blob/history checks compare nine previews and 384 commit records. The complete checks pass again after GC and fresh-workspace restore.

Cellule GC deleted 1,664 eligible objects. The fresh prefix occupies 566.5 MiB after GC; native packs account for about 153 MiB. After verification and 11,474 warm API requests with zero errors, the observed prefix was 602.4 MiB. Commit-history p95 remains 3.1–4.3 seconds at concurrency four on the shared loopback fixture.

Validation: dependency-policy check, formatting, all-target Clippy with warnings denied, 896 ordinary Rust tests, 105 Python tests, release compilation and all nine isolated RustFS provider cases pass. Provider cases include a 595 MB native pack and exact Git/LFS bodies above 5 GiB after restore. The complete extended process profile passes, including restart/takeover, eight opposite-owner HTTPS repositories, interrupted maintenance, independently verified backup after source deletion, and bounded GC with retained backup pins.

The test fixes preserve default-stack coverage, create real cache hydration before crash recovery, forward current HTTPS peer traffic through the existing bounded stream proxy, and verify the actual native backup inventory. Rust source is unchanged by the Python fixture fixes. Source/binary identities, measurement methods, complete results and preserved failed attempts are in the qualification report.

Product-owned Git/LFS orphan collection remains a separate policy. Attribution is still unimplemented (422), outside the four API kinds qualified here. These runs do not establish large-team capacity.

Require fresh storage prefixes for repository schema 3 and the current compiled Cellule release. Remove legacy Git-body storage readers and keep release, format, identity, and fencing validation.
Preserve the modular workspace and native publication lifecycle while porting retention GC and published Cellule 0.2.0 pins. Require fresh canopy-pack-v2 storage with repository schema 4; remove retained Directory code admission.
@forhappy forhappy changed the title Reduce Git storage amplification and add Cellule retention GC Add retention GC and pin published Cellule for native storage Oct 14, 2026
Remove row-based body readers, chunk staging, old graph commands, and unhashed manifests. Keep native catalog verification and the current operation identities. Use the current repository schema in Directory fixtures and qualify foreign-object isolation and predecessor-manifest rejection.
Make the process fixture size explicit and retain the 1.1 MiB default. Correct historical coverage descriptions and document the current native root publication path.
@forhappy
forhappy marked this pull request as ready for review October 14, 2026 23:51
@forhappy
forhappy merged commit baaee11 into main Oct 16, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant