Repository navigation
Conversation
Pin exact staging owners through remote publication. Preserve committed recipes before rolling back interrupted native index intents, and reject uncommitted protected finalize states before releasing local payloads.
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.
Capsule push uploads and publishes selected pointers but does not retire their local staging owners. It also bypasses native-add intent recovery. A pointer committed before an interrupted native add can lose its local payload when the current Git index is restored to the prior state.
This change holds an exact staging snapshot through publication, retires captured owners only after confirmed remote commit, and preserves original leases on rejection, cancellation or failure. Sibling readers defer reclamation to maintenance. Native recovery checks local refs/reflogs before rolling back an old index state and creates canonical history ownership first. Git can return exit zero while omitting missing reflog tips, so recovery also requires a diagnostic-free walk before accepting absence. Protected finalize responses with coordinator metadata must attest Committed or Materialized before authorizing retirement.
Stacked on #570; draft while final CLI/large-file qualification remains pending. No merges requested.
Evidence and ownership
Is this the best fix? Ownership belongs in the existing staging machinery, while callers establish Git acceptance and remote commit. The guard and recovery use those boundaries instead of adding another staging format or payload store. Added implementation surface covers cancellation cleanup and history preservation; tests account for most of the growth. No dependency, lockfile or storage-format changes.
Validation
git push --force origin main: the remote rejects it withstale info. This remains an unresolved correctness gate; no successful final-source full canary is claimed.e244d527e28b724df204e70abd4207141cba0ae52cbe271e7e7b891f611f4077. This is predecessor evidence, not validation of this PR's final binary.Remaining gates
Final-source CLI/RustFS smoke, complete 10-GiB entropy/repeated/zero crossover and cold reconstruction, representative S3 cold/warm performance, and broad CI/cross-platform validation remain required before readiness. The architecture gate fails at its retired pack-install expectation:
crab/src/read/mod.rs: pack object layout must delegate to crab-storage. Its baseline is not changed here.The two requested large-file push audit Markdown/JSON files are excluded.
The eight stale
double_must_useexpectations introduced by #208, absent on origin/main, are removed in follow-up #573. That exact source passes strict staging/auth all-targets client-feature Clippy with-D warningsand no lint exceptions. The runtime worktree remains frozen.Current-source local release proof (7abb53e): optimized minimal-feature build passes in 20m12s, binary SHA256
42a1aefb20f2aad9dbeac8a5c3839f7b64aaf099acc5b2a7c449381e46ca6d4b. Selected real RustFS smoke passes 73 commands and 55 checks: native add/push, Git-clean/helper push, fresh reconstruction and exact staging retirement, plus missing/corrupt canonical root refusal. This is selected-surface proof, not a successful complete canary. The real 10-GiB Git-first repeated-content/four-version run is active against this same frozen binary; no completed result is claimed yet. Force-push admission and visibility are addressed by draft follow-up #575, whose full CI remains pending.