Read-support refs-v1; explain fetches a git-refs checkpoint on clone · Entire

Read-support refs-v1; explain fetches a git-refs checkpoint on clone

06ddcba·

Soph·2w ago·15 files·+63 added/-35 removed

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Sessions

291fe479c0a8View transcript

Changes

15

77 unmodified lines

78
79
80
81
81
82
83
84
9 unmodified lines

94
95
96
97
97
98
99
100

77 unmodified lines

t.Fatal(err)
    }
    if _, err := checkpointpolicy.WriteLocal(context.Background(), repo, plumbing.ZeroHash, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "branch-v1",
    }); err != nil {
        t.Fatal(err)
9 unmodified lines

if err == nil {
        t.Fatal("expected unsupported checkpoint policy error")
    }
    if !strings.Contains(err.Error(), `checkpoint_version "refs-v1"`) {
    if !strings.Contains(err.Error(), `checkpoint_version "refs-v2"`) {
        t.Fatalf("error = %v, want checkpoint policy version", err)
    }
    if _, refErr := repo.Reference(plumbing.NewBranchReferenceName(paths.MetadataBranchName), true); refErr == nil {

Mcmd/entire/cli/attach_test.go+2/-2

15 unmodified lines

16
17
18
19
19
20
21
22
23
23
24
25
26

15 unmodified lines

_, err := readCheckpointInfoFromStore(context.Background(), checkpointInfoPolicyStub{
        summary: &checkpoint.CheckpointSummary{
            CheckpointID:      cpID,
            CheckpointVersion: "refs-v1",
            CheckpointVersion: "refs-v2",
        },
    }, cpID);

require.EqualError(t, err, `checkpoint 111111111111 uses unsupported checkpoint_version "refs-v1": not read-supported by this Entire CLI`)
    require.EqualError(t, err, `checkpoint 111111111111 uses unsupported checkpoint_version "refs-v2": not read-supported by this Entire CLI`)
}

type checkpointInfoPolicyStub struct {

Mcmd/entire/cli/checkpoint_policy_read_test.go+2/-2

33 unmodified lines

34
35
36
37
37
38
39
40
9 unmodified lines

50
51
52
53
54
53
54
55
56
57

33 unmodified lines

wantErr string
    }{
    {name: "checkpoint version", args: []string{"--checkpoint-version", "branch-v2342"}, wantErr: `checkpoint_version "branch-v2342" is not supported by this Entire CLI`},
    {name: "minimum version", args: []string{"--checkpoint-min-version", "refs-v1"}, wantErr: `checkpoint_min_version "refs-v1" is not supported by this Entire CLI`},
    {name: "minimum version", args: []string{"--checkpoint-min-version", "refs-v2"}, wantErr: `checkpoint_min_version "refs-v2" is not supported by this Entire CLI`},
    }

for _, tt := range tests {
9 unmodified lines

func TestCheckpointPolicyCmd_RejectsDowngradeWithoutForce(t *testing.T) {
    dir, bareDir := setupCheckpointPolicyRepo(t)
    seedCheckpointPolicyForCommand(t, dir, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointMinVersion: "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "refs-v2",
    });
    pushCheckpointPolicyRefForCommandTest(t, dir, bareDir);

Mcmd/entire/cli/checkpoint_policy_test.go+3/-3

19 unmodified lines

20
21
22
23
24
23
24
25
26
27

19 unmodified lines

_ = repo.Close()
    })
    _, err = checkpointpolicy.WriteLocal(t.Context(), repo, plumbing.ZeroHash, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointMinVersion: "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "refs-v2",
    });
    require.NoError(t, err);

Mcmd/entire/cli/checkpoint_policy_warning_test.go+2/-2

71 unmodified lines

72
73
74
75
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

71 unmodified lines

CheckpointFamilyRefs:   1,
}

var branchV1Format = CheckpointFormat{Family: CheckpointFamilyBranch, Major: 1}
var (
    branchV1Format = CheckpointFormat{Family: CheckpointFamilyBranch, Major: 1}
    refsV1Format   = CheckpointFormat{Family: CheckpointFamilyRefs, Major: 1}
)

var (
    readFormats = map[CheckpointFormat]bool{
        branchV1Format: true,
        refsV1Format:   true,
    }

writeFormats = map[CheckpointFormat]bool{
        branchV1Format: true,
        refsV1Format:   true,
    }
)

Mcmd/entire/cli/checkpointpolicy/format.go+6/-1

51 unmodified lines

52
53
54
55
56
55
56
57
58
59
60

51 unmodified lines

require.True(t, checkpointpolicy.CanWrite(branchV1))
    require.Equal(t, checkpoint.CheckpointVersionBranchV1, branchV1.String())

require.False(t, checkpointpolicy.CanRead(refsV1))
    require.False(t, checkpointpolicy.CanWrite(refsV1))
    // refs-v1 is the git-refs store format: read- and write-supported.
    require.True(t, checkpointpolicy.CanRead(refsV1))
    require.True(t, checkpointpolicy.CanWrite(refsV1))
    require.Negative(t, checkpointpolicy.Compare(branchV1, refsV1))

require.False(t, checkpointpolicy.CanRead(unknownV1))

Mcmd/entire/cli/checkpointpolicy/format_test.go+3/-2

24 unmodified lines

25
26
27
28
28
29
30
31

24 unmodified lines

{name: "default", policy: checkpointpolicy.DefaultPolicy()},
    {name: "unknown current", policy: checkpointpolicy.Policy{CheckpointVersion: "future-v1", CheckpointMinVersion: "branch-v1"}, wantErr: `checkpoint_version "future-v1" is not supported by this Entire CLI`},
    {name: "unsupported current", policy: checkpointpolicy.Policy{CheckpointVersion: "branch-v2342", CheckpointMinVersion: "branch-v1"}, wantErr: `checkpoint_version "branch-v2342" is not supported by this Entire CLI`},
    {name: "unsupported minimum", policy: checkpointpolicy.Policy{CheckpointVersion: "branch-v1", CheckpointMinVersion: "refs-v1"}, wantErr: `checkpoint_min_version "refs-v1" is not supported by this Entire CLI`},
    {name: "unsupported minimum", policy: checkpointpolicy.Policy{CheckpointVersion: "branch-v1", CheckpointMinVersion: "refs-v2"}, wantErr: `checkpoint_min_version "refs-v2" is not supported by this Entire CLI`},
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {

Mcmd/entire/cli/checkpointpolicy/policy_test.go+1/-1

70 unmodified lines

71
72
73
74
75
74
75
76
77
78
53 unmodified lines

132
133
134
135
136
135
136
137
138
139

70 unmodified lines

require.NoError(t, err)

remoteHash, err := checkpointpolicy.WriteLocal(t.Context(), remoteRepo, baseHash, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointMinVersion: "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "refs-v2",
    })
    require.NoError(t, err)
    pushPolicyRefWithGit(t, remoteDir, bareDir)
53 unmodified lines

secondDir, secondRepo := initPolicyRepoWithDir(t)
    _, err = checkpointpolicy.WriteLocal(t.Context(), secondRepo, plumbing.ZeroHash, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointMinVersion: "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "refs-v2",
    })
    require.NoError(t, err)

Mcmd/entire/cli/checkpointpolicy/remote_test.go+4/-4

66 unmodified lines

67
68
69
70
71
70
71
72
73
74

66 unmodified lines

t.Parallel()
    repo := initPolicyRepo(t)
    policy := checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointMinVersion: "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "refs-v2",
    }
    data, err := json.Marshal(policy)
    require.NoError(t, err)

Mcmd/entire/cli/checkpointpolicy/store_test.go+2/-2

11 unmodified lines

12
13
14
15
16
15
16
17
18
19
14 unmodified lines

34
35
36
37
38
37
38
39
40
41
53 unmodified lines

95
96
97
98
99
98
99
100
101
102

11 unmodified lines

func TestUpdateRejectsDowngradeFromRemoteWithoutForce(t *testing.T) {
    remoteDir, remoteRepo, bareDir := initPolicyRemoteFixture(t)
    _, err := checkpointpolicy.WriteLocal(t.Context(), remoteRepo, plumbing.ZeroHash, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointMinVersion: "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "refs-v2",
    })
    require.NoError(t, err)
    pushPolicyRefWithGit(t, remoteDir, bareDir)
14 unmodified lines

func TestUpdateAllowsDowngradeWithForce(t *testing.T) {
    remoteDir, remoteRepo, bareDir := initPolicyRemoteFixture(t)
    remoteHash, err := checkpointpolicy.WriteLocal(t.Context(), remoteRepo, plumbing.ZeroHash, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointMinVersion: "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "refs-v2",
    })
    require.NoError(t, err)
    pushPolicyRefWithGit(t, remoteDir, bareDir)
53 unmodified lines

require.NoError(t, err)

remoteHash, err := checkpointpolicy.WriteLocal(t.Context(), remoteRepo, baseHash, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointMinVersion: "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "refs-v2",
    })
    require.NoError(t, err)
    pushPolicyRefWithGit(t, remoteDir, bareDir)

Mcmd/entire/cli/checkpointpolicy/update_test.go+6/-6

13 unmodified lines

14
15
16
17
17
18
19
20
6 unmodified lines

27
28
29
30
30
31
32
33

13 unmodified lines

require.False(t, checkpointpolicy.RequiresUpgrade(checkpointpolicy.DefaultPolicy()))
    require.True(t, checkpointpolicy.RequiresUpgrade(checkpointpolicy.Policy{
        CheckpointVersion:    checkpoint.CheckpointVersionBranchV1,
        CheckpointMinVersion: "refs-v1",
        CheckpointMinVersion: "refs-v2",
    }))
    require.True(t, checkpointpolicy.RequiresUpgrade(checkpointpolicy.Policy{
        CheckpointVersion:    checkpoint.CheckpointVersionBranchV1,
6 unmodified lines

require.False(t, checkpointpolicy.UnsupportedWrite(checkpointpolicy.DefaultPolicy()))
    require.True(t, checkpointpolicy.UnsupportedWrite(checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: checkpoint.CheckpointVersionBranchV1,
    }))
    require.True(t, checkpointpolicy.UnsupportedWrite(checkpointpolicy.Policy{

Mcmd/entire/cli/checkpointpolicy/warning_test.go+2/-2

11 unmodified lines

12
13
14
15
16
17
18
181 unmodified lines

200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226

11 unmodified lines

"github.com/entireio/cli/cmd/entire/cli/checkpoint"
    "github.com/entireio/cli/cmd/entire/cli/checkpoint/id"
    "github.com/entireio/cli/cmd/entire/cli/checkpointpolicy"
    "github.com/entireio/cli/cmd/entire/cli/settings"
    "github.com/entireio/cli/cmd/entire/cli/strategy"
    "github.com/entireio/cli/cmd/entire/cli/trailers"
)
181 unmodified lines

return matches, lookup

// git-refs primary: there is no single metadata branch to fetch — each
    // checkpoint is its own ref. When the prefix is a full checkpoint ID (the
    // Entire-Checkpoint commit trailer always is), fetch that one ref directly,
    // then re-list. Falls through to the v1-branch fetch below otherwise.
    if cpCfg, _ := settings.LoadCheckpointsConfig(ctx); checkpoint.PrimaryIsRefs(cpCfg) { //nolint:errcheck // fail-soft: bad config surfaces via Open elsewhere
        if cid, err := id.NewCheckpointID(prefix); err == nil {
            stop := startSpinner(errW, "Fetching checkpoint from remote")
            fetchErr := FetchCheckpointRef(ctx, checkpoint.RefName(cid))
            stop(false)
            if fetchErr == nil {
                if fresh, freshErr := newExplainCheckpointLookup(ctx); freshErr == nil {
                    if m := matchCheckpointPrefix(fresh, prefix); len(m) > 0 {
                        return m, fresh
                    }
                    _ = fresh.Close()
                }
            }
        }
        return nil, lookup
    }

stop := startSpinner(errW, "Fetching checkpoint metadata from remote")
    _, v1Repo, v1Err := getMetadataTree(ctx)
    if v1Repo != nil {

Mcmd/entire/cli/explain_export.go+22

96 unmodified lines

97
98
99
100
100
101
102
103
56 unmodified lines

160
161
162
163
163
164
165
166
145 unmodified lines

312
313
314
315
315
316
317
318

96 unmodified lines

require.NoError(t, err)
    var summary checkpoint.CheckpointSummary
    require.NoError(t, json.Unmarshal([]byte(content), &summary))
    summary.CheckpointVersion = "refs-v1"
    summary.CheckpointVersion = "refs-v2"
    metadataJSON, err := json.Marshal(summary)
    require.NoError(t, err)
    metadataHash, err := checkpoint.CreateBlobFromContent(repo, metadataJSON)
56 unmodified lines

json:         true,
    sessionIndex: -1,
    })
    require.ErrorContains(t, err, `checkpoint aaaabbbbcccc uses unsupported checkpoint_version "refs-v1"`)
    require.ErrorContains(t, err, `checkpoint aaaabbbbcccc uses unsupported checkpoint_version "refs-v2"`)
    require.Empty(t, stdout.String())
}

145 unmodified lines

var stdout, stderr bytes.Buffer
    err := runExplainExport(context.Background(), &stdout, &stderr, tt.opts)
    require.ErrorContains(t, err, `checkpoint abcd11112222 uses unsupported checkpoint_version "refs-v1"`)
    require.ErrorContains(t, err, `checkpoint abcd11112222 uses unsupported checkpoint_version "refs-v2"`)
    require.Empty(t, stdout.String())
    })
}
}

Mcmd/entire/cli/explain_export_test.go+3/-3

1009 unmodified lines

1010
1011
1012
1013
1013
1014
1015
1016
109 unmodified lines

1126
1127
1128
1129
1129
1130
1131
1132
11 unmodified lines

1144
1145
1146
1147
1147
1148
1149
1150

1009 unmodified lines

defer lookup.Close()

_, _, err = loadCheckpointForExplain(context.Background(), lookup, cpID)
    require.ErrorContains(t, err, `checkpoint bbbbccccdddd uses unsupported checkpoint_version "refs-v1"`)
    require.ErrorContains(t, err, `checkpoint bbbbccccdddd uses unsupported checkpoint_version "refs-v2"`)

// Not parallel: uses t.Chdir() and package-level var stubs.
109 unmodified lines

func TestGenerateCheckpointSummaryRejectsUnsupportedCheckpointWritePolicy(t *testing.T) {
    fixture := setupGenerateSummaryFixture(t)
    _, err := checkpointpolicy.WriteLocal(fixture.ctx, fixture.repo, plumbing.ZeroHash, checkpointpolicy.Policy{
        CheckpointVersion:    "refs-v1",
        CheckpointVersion:    "refs-v2",
        CheckpointMinVersion: "branch-v1",
    })
    require.NoError(t, err)
11 unmodified lines

false,
    0,
)
    require.ErrorContains(t, err, `checkpoint_version "refs-v1"`)
    require.ErrorContains(t, err, `checkpoint_version "refs-v2"`)

v1After, refErr := fixture.repo.Reference(plumbing.NewBranchReferenceName(paths.MetadataBranchName), true)
    require.NoError(t, refErr)
}

Mcmd/entire/cli/explain_test.go+3/-3

640 unmodified lines

641
642
643
644
644
645
646
647
22 unmodified lines

670
671
672
673
673
674
675
676

640 unmodified lines

newID := id.MustCheckpointID("ccc333ddd444")
    reader := &resumeCheckpointInfoReaderStub{
        summaries: map[id.CheckpointID]*checkpoint.CheckpointSummary{
            unsupportedID: {CheckpointVersion: "refs-v1"},
            unsupportedID: {CheckpointVersion: "refs-v2"},
            newID:         {Sessions: []checkpoint.SessionFilePaths{{Metadata: "new"}}},
        },
        metadata: map[id.CheckpointID][]checkpoint.Metadata{
22 unmodified lines

unsupportedID := id.MustCheckpointID("aaa111bbb222")
    reader := &resumeCheckpointInfoReaderStub{
        summaries: map[id.CheckpointID]*checkpoint.CheckpointSummary{
            unsupportedID: {CheckpointVersion: "refs-v1"},
            unsupportedID: {CheckpointVersion: "refs-v2"},
        },
    }

Mcmd/entire/cli/resume_test.go+2/-2