fix(metadata): fence checkpoint restore references#406
Merged
Conversation
Signed-off-by: wchwawa <wch19961116@gmail.com>
Signed-off-by: wchwawa <wch19961116@gmail.com>
wchwawa
marked this pull request as ready for review
July 14, 2026 04:55
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.
Summary
This is PR1 of the LingTai
workbench_restorerollout. It hardens NoKV's checkpoint, recovery-log, object-reference, and fork-retention foundations; it intentionally does not expose the finalworkbench_restoreMCP tool yet.Recoveringgeneration that never served and published no recovery identity; require explicit failover after any generation reachedServingFUSE scope
No FUSE workflow or live gate is added.
nokv-fusechanges by seven added lines only: the legacy publish journal supplies GC epoch0, which the shared validation rejects fail-closed, and three test constructors provide the new required field.Compatibility and known limitations
Read + Seek, because a stale GC epoch must rewind and fully restage; non-seekable external callers need an adapterMetadataStoreimplementations must implement committed-request readback; the unsafe default was removedThese are deliberate safety/compatibility tradeoffs, not claims of behavior-preserving deployment across mixed versions.
Validation
Static and package gates:
cargo fmt --all -- --checkgit diff --checkbash -ncargo clippy --workspace --all-targets --all-features -- -D warningscargo test --workspacecargo test --workspace --all-features --exclude nokv-pythonThe macOS PyO3
extension-modulelink mode cannot produce an all-features Rust test binary because CPython symbols are intentionally unresolved in that mode. It is covered here by all-features clippy, the normal workspace test, the all-features Rust matrix excluding onlynokv-python, and the standalone Python tests.Live gates, all without FUSE:
Recoveringcrash -> TTL expiry -> epoch-2 FreshServing; a later Fresh owner is rejected after the shard has served--allow-missing-restore: overall passed; 8 A+B scenarios passed and the 3 scenarios requiring the not-yet-presentworkbench_restoretool were explicitly skippedThe PR that introduces
workbench_restoremust rerun that reference harness with--require-alland zero skips.Validation base:
1dd1184470d6acc5269e698f8cf8de9a990eb3bae54c27688140da6d11dec887647dc972aadaab64