drop checkpoint_version from checkpoint metadata · Entire

drop checkpoint_version from checkpoint metadata

e4ca450→main·

pfleidi·2w ago·15 files·+32 added/-302 removed

Remove the checkpoint_version stamp from checkpoint metadata.json. It was a pure label: backend selection comes from settings topology, and nothing dispatched on the stored value. Existing checkpoints are handled by an external migration.

The checkpoint policy subsystem is untouched — its checkpoint_version field remains a checkpoint-data write guard (attach now calls the shared ensureCheckpointPolicyAllowsCheckpointData gate like explain and import), it just no longer feeds a stamp into new summaries.

Sessions

e2a3a0318080View transcript

Changes

15

12 unmodified lines

13
14
15
16
17
18
19
20
21

12 unmodified lines

// CheckpointVersionBranchV1 identifies the branch-backed checkpoint metadata format.
const CheckpointVersionBranchV1 = "branch-v1"

// CheckpointVersionRefsV1 identifies the per-checkpoint-ref checkpoint metadata
// format (one ref per checkpoint at refs/entire/checkpoints/<shard>/<id>). The
// value follows the <family>-v<major> convention (cf. branch-v1) so
// checkpointpolicy.ParseFormat parses it.
const CheckpointVersionRefsV1 = "refs-v1"

Mapi/checkpoint/errors.go-6

25 unmodified lines

26 27 28 29 30 31 29 30 31 413 unmodified lines

445 446 447 451 448 449 450

25 unmodified lines

// Strategy is the name of the strategy that created this checkpoint Strategy string

// CheckpointVersion is the checkpoint metadata format for new root summaries. CheckpointVersion string

// Branch is the branch name where the checkpoint was created (empty if detached HEAD) Branch string

413 unmodified lines

//nolint:revive // Named CheckpointSummary to avoid conflict with existing Summary struct type CheckpointSummary struct { CLIVersion string json:"cli_version,omitempty" CheckpointVersion string json:"checkpoint_version,omitempty" CheckpointID id.CheckpointID json:"checkpoint_id" Strategy string json:"strategy" Branch string json:"branch,omitempty" }

Mapi/checkpoint/metadata.go-4

254 unmodified lines

255
256
257
258
259
258
259
260
261
88 unmodified lines

350
351
352
354
355
356
357
358
359
360
361
362
363
364
365
353
354
355
356
357
358
359
360
361
362
363
364
365
366

254 unmodified lines

return nil
    }

checkpointVersion, err := checkpointVersionForNewCheckpoint(ctx, repo)
    if err != nil {
    if err := ensureCheckpointPolicyAllowsCheckpointData(ctx, repo); err != nil {
        return err
    }

88 unmodified lines

}

writeOpts := cpkg.WriteOptions{
        CheckpointID:      checkpointID,
        SessionID:         sessionID,
        Strategy:          strategy.StrategyNameManualCommit,
        CheckpointVersion: checkpointVersion,
        Transcript:        redactedTranscript,
        Prompts:           attachPrompts(meta),
        CheckpointsCount:  attachStepCount(meta.TurnCount),
        AuthorName:        author.Name,
        AuthorEmail:       author.Email,
        Agent:             ag.type(),
        Model:             meta.Model,
        TokenUsage:        tokenUsage,
        CheckpointID:     checkpointID,
        SessionID:        sessionID,
        Strategy:         strategy.StrategyNameManualCommit,
        Transcript:       redactedTranscript,
        Prompts:          attachPrompts(meta),
        CheckpointsCount: attachStepCount(meta.TurnCount),
        AuthorName:       author.Name,
        AuthorEmail:      author.Email,
        Agent:            ag.type(),
        Model:            meta.Model,
        TokenUsage:       tokenUsage,
    }
    if opts.Review {
        writeOpts.Kind = string(session.KindAgentReview)
``

Mcmd/entire/cli/attach.go+12/-14

53 unmodified lines

54 55 56 57 58 59 57 58 59

53 unmodified lines

// CheckpointVersionBranchV1 identifies the branch-backed checkpoint metadata format. const CheckpointVersionBranchV1 = apicheckpoint.CheckpointVersionBranchV1

// CheckpointVersionRefsV1 identifies the per-checkpoint-ref checkpoint metadata format. const CheckpointVersionRefsV1 = apicheckpoint.CheckpointVersionRefsV1

// Sentinel errors (re-exported so errors.Is keeps working across packages). var ( ErrCheckpointNotFound = apicheckpoint.ErrCheckpointNotFound )


Mcmd/entire/cli/checkpoint/aliases.go-3

89 unmodified lines

90 91 92 93 94 95 96 97 93 94 95 96 115 unmodified lines

212 213 214 219 220 221 215 216 217 218 219 7 unmodified lines

227 228 229 235 230 231 232 233 331 unmodified lines

565 566 567 573 568 569 570 571 82 unmodified lines

654 655 656 662 657 658 659 660 99 unmodified lines

760 761 762 768 763 764 765 766 10 unmodified lines

777 778 779 785 780 781 782 12 unmodified lines

795 796 797 804 798 799 800 152 unmodified lines

953 954 955 963 964 965 966 967 956 957 958 959 381 unmodified lines

1341 1342 1343 1355 1344 1345 1346 1347

89 unmodified lines

if err != nil { return err } checkpointVersion := CheckpointVersionBranchV1 if opts.CheckpointVersion != "" { checkpointVersion = opts.CheckpointVersion } checkpointSubtree, taskMetadataPath, err := s.applySessionWrite(ctx, opts, existing, opts.CheckpointID.Path()+"/", checkpointVersion) checkpointSubtree, taskMetadataPath, err := s.applySessionWrite(ctx, opts, existing, opts.CheckpointID.Path()+"/") if err != nil { return err }

115 unmodified lines

// applySessionWrite applies a Session write to a checkpoint's current subtree and // returns the new checkpoint subtree hash plus the task metadata path (for the // commit trailer). It is backing-independent: the v1-branch store passes the // sharded basePath and the per-checkpoint-ref store passes "". checkpointVersion // is stamped into a freshly written root summary. func (s *treeWriter) applySessionWrite(ctx context.Context, opts WriteOptions, existing *object.Tree, basePath, checkpointVersion string) (plumbing.Hash, string, error) { // sharded basePath and the per-checkpoint-ref store passes "". func (s *treeWriter) applySessionWrite(ctx context.Context, opts WriteOptions, existing *object.Tree, basePath string) (plumbing.Hash, string, error) { entries, err := s.flattenExisting(existing, basePath) if err != nil { return plumbing.ZeroHash, "", err }

if err := s.writeStandardCheckpointEntries(ctx, opts, basePath, entries, checkpointVersion); err != nil { if err := s.writeStandardCheckpointEntries(ctx, opts, basePath, entries); err != nil { return plumbing.ZeroHash, "", err } } }

// writeStandardCheckpointEntries writes the checkpoint entries to the storage with the given options.

// ... (truncated for brevity)