fix(session): clear adopted review metadata · Entire

fix(session): clear adopted review metadata

4f4a780→main·

peyton-alt·3w ago·2 files·+60 added/-2

Sessions

b95acc5a8b76View transcript

[?
Adopt Active Sessions Across Repos and WorktreesCodex·GPT-5.5·1 step](/content/gh/entireio/cli/session/019ef6af-f809-76d3-8c95-7d7f0bc0c5ef#timeline-b95acc5a8b76/index.html)

Changes

2

418 unmodified lines

419
420
421
422
422
423
424
425
426
427
428
429
430
431
432
433
434
435
11 unmodified lines

447
448
449
445
450
451
452

418 unmodified lines

adopted.CLIVersion = versioninfo.Version
    adopted.TranscriptPath = source.TranscriptPath
    adopted.BaseCommit = head.Hash().String()
    adopted.AttributionBaseCommit = head.Hash().String()
    adopted.RealignAttributionBase(head.Hash().String())
    adopted.WorktreePath = worktreeRoot
    adopted.WorktreeID = worktreeID
    adopted.Branch = branch
    adopted.LastInteractionTime = &now
    adopted.Phase = session.PhaseActive
    adopted.Kind = ""
    adopted.ReviewSkills = nil
    adopted.ReviewPrompt = ""
    adopted.InvestigateRunID = ""
    adopted.InvestigateTopic = ""
    adopted.EndedAt = nil
    adopted.FilesTouched = filesTouched

11 unmodified lines

adopted.LastCheckpointCommitHash = ""

adopted.FullyCondensed = false
    adopted.DivergenceNoticeShown = false
    adopted.UntrackedFilesAtStart = nil
    adopted.PromptAttributions = nil
    adopted.PendingPromptAttribution = nil

Mcmd/entire/cli/session_adopt.go+6/-2

743 unmodified lines

744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803

743 unmodified lines

}
}

func TestSessionAdopt_ClearsReviewAndInvestigateMetadata(t *testing.T) {
    for _, tc := range []struct {
        name string
        kind session.Kind
    } {
        {name: "review", kind: session.KindAgentReview},
        {name: "investigate", kind: session.KindAgentInvestigate},
    } {
        t.Run(tc.name, func(t *testing.T) {
            targetRepo := setupAdoptRepo(t)
            testutil.WriteFile(t, targetRepo, "feature.txt", "agent change\n")
            t.Chdir(targetRepo)

adopted, _, err := buildAdoptedSessionState(context.Background(), &session.State {
                SessionID:         "test-adopt-kind-" + tc.name,
                AgentType:         agent.AgentTypeClaudeCode,
                StartedAt:         time.Now().Add(-5 * time.Minute),
                Phase:             session.PhaseActive,
                Kind:              tc.kind,
                ReviewSkills:      []string{ "/review"},
                ReviewPrompt:      "review this branch",
                InvestigateRunID:  "abcdef012345",
                InvestigateTopic:  "Why is adoption misclassified?",
                BaseCommit:        "source-head",
                WorktreePath:      "/source/repo",
                LastCheckpointID:  id.MustCheckpointID("abc123def456"),
                TurnCheckpointIDs: []string{"abc123def456"},
                PromptWindowBase:  3,
                SessionTurnCount:  7,
                AttachedManually:  true,
            })
            if err != nil {
                t.Fatalf("buildAdoptedSessionState failed: %v", err)
            }

if adopted.Kind != "" {
                t.Fatalf("Kind = %q, want empty normal session kind", adopted.Kind)
            }
            if len(adopted.ReviewSkills) != 0 {
                t.Fatalf("ReviewSkills = %v, want empty", adopted.ReviewSkills)
            }
            if adopted.ReviewPrompt != "" {
                t.Fatalf("ReviewPrompt = %q, want empty", adopted.ReviewPrompt)
            }
            if adopted.InvestigateRunID != "" {
                t.Fatalf("InvestigateRunID = %q, want empty", adopted.InvestigateRunID)
            }
            if adopted.InvestigateTopic != "" {
                t.Fatalf("InvestigateTopic = %q, want empty", adopted.InvestigateTopic)
            }
        })
    }
}

func TestSessionAdopt_CloneSourceStateDoesNotShareMutableFields(t *testing.T) {
    lastInteraction := time.Now().Add(-1 * time.Minute)
    endedAt := time.Now()