Refuse to reconstruct from an index that could not read the mirror - #405
Merged
Conversation
backfill picks its targets from the index -- "commits with no record". A commit whose record lives only in an unfetched note reads here as having none, so it is eligible for reconstruction, and writing then produces a second record for one decision: a Record-Id collision, or worse, no collision and two records the lifecycle fold cannot reconcile. The writing mode now refuses at exit 2 and names that outcome. The read-only modes still run, because they are how a user diagnoses this, but they say the counts of note trailers and of targets are both drawn from an index that could not see the mirror -- "0 note trailers" was reading as an absence when it is a gap. A dry run is not a write and is not refused. Fails closed on unfetched, diverged and shallow. This is the Phase 0 acceptance condition the autocapture plan names as its blocker, and the last of the four commands that reported over an unreadable mirror in silence. Record-Id: r-backfillclosed Limit: the guard reads the mirror state at invocation, so a fetch completing mid-run is not observed Ruled-out: Reporting without refusing | the report does not stop the duplicate, and this is the one command that can create one Ruled-out: Refusing the read-only modes too | they are how the state is diagnosed, and they cannot write Certainty: firm Blast: local Undo: easy Verified: reproduced on an unfetched clone -- write mode exits 2 naming the duplicate, read-only mode prints the caveat, dry run exits 0; reverting the source leaves two of the three new tests failing; backfill, notes-availability, index-db and cli pass at 47 and above; typecheck clean; bench:verify unchanged Unverified: whether diverged and shallow reach this path in practice -- only unfetched was reproduced end to end
CommitLore — record lintTrailers: clean — 1 commit in Active constraints for the paths this PR touchesLimits (87)
Ruled out (203)
Warnings (47)
Truncated: 19 lines omitted — the comment hit GitHub's 65000 character limit. Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
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.
Closes #403. The Phase 0 blocker named in the autocapture plan, and the last of four commands that reported over an unreadable mirror in silence.
backfillpicks targets from the index — commits with no record. A commit whose record lives only in an unfetched note reads here as having none, so it is eligible for reconstruction. Writing then produces a second record for one decision.0 note trailerswas reading as an absence when it is a gap.Fails closed on
unfetched,diverged,shallow.backfill,notes-availability,index-db,clibench:verify