fix: harden session adopt review cases · Entire

fix: harden session adopt review cases

Sessions

Changes

1
2
3
4
5
6
7
105 unmodified lines
package cli

import (
    "bytes"
    "context"
    "errors"
    "fmt"
)

func isRecentAdoptCandidate(state *session.State) bool {
    if state == nil || state.Phase == session.PhaseEnded || state.FullyCondensed {
        return false
    }
    lastSeen := sessionLastSeen(state)
    return time.Since(lastSeen) <= adoptRecentWindow
}

func isAdoptableSourceSession(state *session.State) bool {
    return state != nil &&
        state.Phase != session.PhaseEnded &&
        state.EndedAt == nil &&
        !state.FullyCondensed
}

func sessionLastSeen(state *session.State) time.Time {
    if state.LastInteractionTime != nil {
        return *state.LastInteractionTime
    }

return time.Time{}
}
func TestSessionAdopt_IdleSourceSurvivesPrepareCommitMsgTrailer(t *testing.T) {
    sourceRepo := setupAdoptRepo(t)
    targetRepo := setupAdoptRepo(t)

sessionID := "test-adopt-idle-source"
    targetRelPath := "src/idle.go"
    targetAbsPath := filepath.Join(targetRepo, targetRelPath)
    transcriptPath := filepath.Join(sourceRepo, ".claude", sessionID+".jsonl")
    if err := os.MkdirAll(filepath.Dir(transcriptPath), 0o750); err != nil {
        t.Fatal(err)
    }
    transcript := `{"type":"human","message":{"content":"write idle.go"}}`
    if err := os.WriteFile(transcriptPath, []byte(transcript), 0o600); err != nil {
        t.Fatal(err)
    }

lastInteraction := time.Now().Add(-1 * time.Minute)
    sourceStore := session.NewStateStoreWithDir(filepath.Join(sourceRepo, ".git", session.SessionStateDirName))
    if err := sourceStore.Save(context.Background(), &session.State{
        SessionID:             sessionID,
        AgentType:             agent.AgentTypeClaudeCode,
        StartedAt:             time.Now().Add(-5 * time.Minute),
        LastInteractionTime:   &lastInteraction,
        Phase:                 session.PhaseIdle,
        BaseCommit:            testutil.GetHeadHash(t, sourceRepo),
        AttributionBaseCommit: testutil.GetHeadHash(t, sourceRepo),
        WorktreePath:          sourceRepo,
    }); err != nil {
        t.Fatal(err)
    }
    
    // Further testing logic here...
}