test OPF metadata recovery path · Entire
test OPF metadata recovery path
b68e063→main·
peyton-alt·1mo ago·1 file·+59 added/-0 removed
Sessions
693efb86041fView transcript
[?
Address OPF Review Feedback and TestingCodex·GPT-5.5·3 steps](/content/gh/entireio/cli/session/019ed7c0-d406-7743-bc93-5b4c4efc5c45#timeline-693efb86041f/index.html)
Changes
1
cmd/entire/cli/strategy
Mmetadata_reconcile_test.go+59
12 unmodified lines
13
14
15
16
17
18
19
678 unmodified lines
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
12 unmodified lines
"github.com/entireio/cli/cmd/entire/cli/checkpoint"
"github.com/entireio/cli/cmd/entire/cli/paths"
"github.com/entireio/cli/cmd/entire/cli/testutil"
"github.com/entireio/cli/cmd/entire/cli/trailers"
"github.com/go-git/go-git/v6"
"github.com/go-git/go-git/v6/plumbing"
678 unmodified lines
}
// Not parallel: uses process-global OPF config.
func TestReconcileDisconnected_PreservesOPFAppliedCommit(t *testing.T) {
configureFakeOPF(t, &fakeOPFForRewrite{})
repo, opfOriginalTip := setupV1Repo(t)
opfTip, err := RewriteUnpushedV1WithOPF(context.Background(), repo, "origin")
require.NoError(t, err)
require.NotEqual(t, opfOriginalTip, opfTip, "OPF rewrite should replace the local v1 tip")
opfCommit, err := repo.CommitObject(opfTip)
require.NoError(t, err)
require.True(t, trailers.HasOPFApplied(opfCommit.Message), "rewritten commit must carry OPF trailer before recovery")
assertNoOPFSentinel(t, opfCommit)
remoteTip := makeOrphanCommit(t, repo, emptyTreeHash(t, repo), nil, "remote metadata\n")
require.NoError(t, repo.Storer.SetReference(plumbing.NewHashReference(metadataOriginRemoteRef(), remoteTip)))
err = ReconcileDisconnectedMetadataRef(context.Background(), repo, metadataLocalRef(), metadataOriginRemoteRef(), io.Discard)
require.NoError(t, err)
localRef, err := repo.Reference(metadataLocalRef(), true)
require.NoError(t, err)
require.NotEqual(t, opfTip, localRef.Hash(), "recovery should create a re-parented cherry-pick commit")
recoveredCommit, err := repo.CommitObject(localRef.Hash())
require.NoError(t, err)
require.Len(t, recoveredCommit.ParentHashes, 1)
require.Equal(t, remoteTip, recoveredCommit.ParentHashes[0])
require.True(t, trailers.HasOPFApplied(recoveredCommit.Message), "recovery must preserve OPF trailer")
assertNoOPFSentinel(t, recoveredCommit)
}
func assertNoOPFSentinel(t *testing.T, commit *object.Commit) {
t.Helper()
tree, err := commit.Tree()
require.NoError(t, err)
redactedFiles := 0
require.NoError(t, tree.Files().ForEach(func(f *object.File) error {
if !strings.HasSuffix(f.Name, ".jsonl") && !strings.HasSuffix(f.Name, ".txt") {
return nil
}
content, err := f.Contents()
if err != nil {
return err
}
if strings.Contains(content, "PERSONABC") {
t.Errorf("%s still contains OPF sentinel after recovery", f.Name)
}
if strings.Contains(content, "[REDACTED_PERSON]") {
redactedFiles++
}
return nil
}))
require.Positive(t, redactedFiles, "expected at least one OPF-redacted metadata blob")
}
// TestCollectCommitChain_DepthLimit verifies that collectCommitChain returns an error
// when the commit chain exceeds MaxCommitTraversalDepth without reaching a root commit.
func TestCollectCommitChain_DepthLimit(t *testing.T) {