Repository navigation
Conversation
Keep published readiness dependencies after refs move. Resolve physical index retention from its own authenticated descriptor without treating old inventory as current authority. Retain regressions for ref movement and readiness replacement. Replacement lifetime remains an explicit draft release gate.
Publish a separate authenticated lifetime chain before readiness CAS. Retain original Git source ranges with cold index pages until explicit history pruning retires their generation. Prune lifetime roots only after history CAS commits, retry cleanup after partial success, and preserve current readiness. Keep foreground readiness reads unchanged. Refs #591
Captured visibility and catalog pages can live in runs without Git members. Retain every captured capsule pointer instead of only the physical pack-source directory. The metadata regression uses a real ref-only run and retains its source-path assertion. No dependency contract or assertion is weakened.
Keep immutable capture roots in the v2 control namespace and scan derived index bodies through one bounded ownership filter. Report seven actual LIST streams without changing the existing assertions. Cover lookalike metadata directories and recorded LIST prefixes. Move the captured view through readiness attachment instead of cloning its metadata.
This was referenced Oct 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A reader opened before ref movement or a browse-index rebuild can lose its cold index pages and original pack/visibility sources during GC. Replacement readiness currently drops the old dependency roots, even though the captured reader still addresses those immutable bytes.
This change separates query readiness from storage lifetime. Browse maintenance authenticates and CAS-publishes an immutable capture before advertising readiness. Repository GC follows retained captures, including original checkpoints and ref-only capsule runs, alongside graph, path-state and physical-index pages. Explicit history pruning trims superseded captures only after the authoritative history transition succeeds; an unchanged capture does not append another record.
Stacked on #587 (
codex/catalog-current-integration,6fab757a397). Current head:1fd3251d794. No merge requested.Changes
v2/browse-retentionandv2/browse-roots/. Existing version-3 browse readiness is unchanged; no release tag contains this browse-readiness protocol.Validation
At
703f02a4a8e, source hashes unchanged throughout:The example-only follow-up at
1fd3251d794also passes a release build and strict example Clippy. Production sources are byte-identical to the tested703f02a4a8e; the source comparison is retained with the qualification evidence.The earlier draft's readiness-replacement failure is fixed by retained capture ownership. Earlier failed runs remain in local evidence; assertions were not waived.
Commands (use a checkout-specific target on the mounted workspace volume):
Remaining release gates
This remains draft. Official
703f02a4a8eand1fd3251d794installations completed with unchanged source hashes. The first raw RustFS reader-coherence smoke passed, but independent lifecycle acceptance rejects it: the source objects were aged past one hour while the command used the default 24-hour grace period. It does not prove protection from eligible collection. The raw report is preserved; no lifecycle success is claimed from it.The separate ref-only lifecycle case now passes 61 checks at
1fd3251d794. A fresh captured view stayed cold while 532 real pushes rolled its aged visibility-only source out of active coverage, replacement readiness was published, and repository GC persisted its root transition. No checkpoint history masked retention. Cold old blob identity, directory attribution and path history remained correct; measured reads wrote nothing and drained backend operations.The task-owned local overlay was atomically configured with the existing
gc_grace_period_secs = 3600setting before the final 66 pushes. Its hash and value remained unchanged through GC, and all target provider timestamps preceded the effective one-hour cutoff. The matching source's local config merge/GC call chain was audited; the command had no override or force flag. Independent acceptance records this configuration proof alongside the original raw report. This stronger case covers ref movement, readiness replacement and an obsolete ref-only source; it does not validate explicit pruning, publication faults, catalog-only sessions or the final combined stack.Earlier probe setup failures are also preserved: path admission compared a resolved volume path with an unresolved symlink; full repository construction warmed graph pages during normal tip validation. The revised capture protocol delays construction until after GC and preserves the zero-decoded-pages assertion.
Retained-chain fsck is implemented separately in #594 with focused tests; its provider-backed qualification remains open. Fault/cancellation/concurrent-publication qualification, catalog-only captured-session lifetime, history/resource scaling and broad CI remain open. This PR does not complete the whole indexing/staging initiative or claim final combined 10 GiB qualification. The ongoing older-component large-file matrix is separate evidence.
Review evidence
ensure; repository GCsweep_capsule_objects; explicitprune_historybrowse_indexes::ensure->retain_browse_indexes-> verified immutable write -> conditional lifetime head -> readiness CASCapsuleRepositoryView::git_repository_from_storeand normal physical-index loading retain captured inventory/visibility checksIs this the best fix? A separate lifetime authority addresses replacement and source ownership without making a stale readiness record authorize new reads or adding foreground history scans. It adds a persistent codec, CAS lifecycle and pruning boundary, which account for the production LOC growth; final release acceptance still depends on the open gates above.
No configuration, dependency or lockfile changes. The two requested large-file audit reports and user-owned advisor plan are excluded. Add-classifier cache I/O is isolated in #592.