# Run e2e against a configurable checkpoint backend + git-refs CI

`3f418b7`·

Soph·2w ago·16 files·+459 added/-61 removed

\- settings: LoadCheckpointsConfig honors ENTIRE_CHECKPOINTS_PRIMARY (+ comma-separated ENTIRE_CHECKPOINTS_MIRRORS), env-wins-over-file, matching the other ENTIRE_* overrides. Backend selection only.
\- e2e: make the harness backend-aware (e2e/testutil/backend.go: checkpointStoreMode, CheckpointState advance digest, checkpointBlobSpec/checkpointRefName/checkpointShard). Advance detection, metadata reads, CheckpointIDs, push, and artifact capture route through it; the v1-branch-specific alternate-object sync test skips under git-refs. AssertCheckpointIDFormat keeps the production Validate (hex or ULID).
\- e2e TestMain maps E2E_CHECKPOINT_STORE (git-branch default, or git-refs) to the ENTIRE_CHECKPOINTS_PRIMARY override so every spawned binary/hook uses it.
\- CI: e2e-checkpoint-store workflow with a checkpoint_store input; e2e/README doc.

## Sessions

d9646529ed6eView transcript

## Changes

16

- .github/workflows

- Ae2e-checkpoint-store.yml+170

- cmd/entire/cli/settings

- Mcheckpoints.go+39

- Mcheckpoints_test.go+38

- e2e

- MREADME.md+1

- tests

- Malternates_test.go+3

- Mattach_test.go+1/-1

- Medge_cases_test.go+2/-2

- Mexplain_test.go+1/-2

- Mmain_test.go+8

- Mresume_remote_test.go+4/-6

- Mrewind_test.go+1/-1

- Msession_lifecycle_test.go+3/-3

- testutil

- Martifacts.go+16/-6

- Massertions.go+33/-22

- Abackend.go+94

- Mrepo.go+45/-18

\n1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

name: E2E Checkpoint Store

on:
  workflow_dispatch:
    inputs:
      agent:
        description: "Agent to run"
        required: true
        default: "vogon"
        type: choice
        options:
          - vogon
          - claude-code
          - opencode
          - gemini-cli
          - factoryai-droid
          - cursor-cli
          - copilot-cli
          - roger-roger
          - codex
      checkpoint_store:
        description: "Checkpoint storage backend to run the suite against"
        required: true
        default: "git-refs"
        type: choice
        options:
          - git-branch
          - git-refs

jobs:
  e2e-checkpoint-store:
    if: inputs.agent != 'copilot-cli'
    runs-on: ubuntu-latest
    timeout-minutes: 40
    permissions:
      actions: read
      contents: read

steps:
      - name: Checkout repository
        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
        with:
          ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Install system dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y gnome-keyring tmux
          echo 'somecredstorepass' | gnome-keyring-daemon --unlock

- name: Setup mise
        uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4

- name: Build entire CLI
        run: go build -o /usr/local/bin/entire ./cmd/entire

- name: Build vogon binary
        if: inputs.agent == 'vogon'
        run: go build -o /usr/local/bin/vogon ./e2e/vogon

- name: Install agent CLI
        if: inputs.agent != 'vogon'
        run: |
          case "${{ inputs.agent }}" in
            claude-code) curl -fsSL https://claude.ai/install.sh | bash ;; 
            opencode)    curl -fsSL https://opencode.ai/install | bash ;; 
            gemini-cli)  npm install -g @google/gemini-cli ;; 
            codex)       npm install -g @openai/codex ;; 
            cursor-cli)  curl https://cursor.com/install -fsS | bash ;; 
            factoryai-droid) curl -fsSL https://app.factory.ai/cli | sh ;; 
            copilot-cli)  npm install -g @github/copilot  ;; 
            roger-roger) ;; # installed by mise (see mise.toml)
          esac
          echo "$HOME/.local/bin" >> $GITHUB_PATH

- name: Verify roger-roger agent
        if: inputs.agent == 'roger-roger'
        run: |
          set -euo pipefail
          echo "Verifying roger-roger binaries on PATH..."
          command -v roger-roger
          command -v entire-agent-roger-roger

- name: Bootstrap agent
        if: inputs.agent != 'roger-roger' && inputs.agent != 'vogon'
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
        run: go run ./e2e/bootstrap ${{ inputs.agent }}

- name: E2E Checkpoint Store
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          E2E_CODEX_MODEL: ${{ inputs.agent == 'codex' && 'gpt-5.1-codex-mini' || '' }}
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
          E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts
          E2E_ENTIRE_BIN: /usr/local/bin/entire
          E2E_CHECKPOINT_STORE: ${{ inputs.checkpoint_store }}
        run: |
          mkdir -p "$E2E_ARTIFACT_DIR"
          mise run test:e2e --agent ${{ inputs.agent }}

- name: Upload artifacts
        if: always()
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
        with:
          name: e2e-checkpoint-store-${{ inputs.agent }}-${{ inputs.checkpoint_store }}
          path: e2e-artifacts/
          retention-days: 7

e2e-checkpoint-store-copilot:
    if: inputs.agent == 'copilot-cli'
    runs-on: ubuntu-latest
    timeout-minutes: 40
    permissions:
      actions: read
      contents: read
      copilot-requests: write

- name: Setup mise
        uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4

- name: Build entire CLI
        run: go build -o /usr/local/bin/entire ./cmd/entire

- name: Install agent CLI
        run: |
          npm install -g @github/copilot
          echo "$HOME/.local/bin" >> $GITHUB_PATH

- name: Bootstrap agent
        env:
          COPILOT_GITHUB_TOKEN: ${{ github.token }}
        run: go run ./e2e/bootstrap ${{ inputs.agent }}

- name: E2E Checkpoint Store
        env:
          COPILOT_GITHUB_TOKEN: ${{ github.token }}
          E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts
          E2E_ENTIRE_BIN: /usr/local/bin/entire
          E2E_CHECKPOINT_STORE: ${{ inputs.checkpoint_store }}
        run: |
          mkdir -p "$E2E_ARTIFACT_DIR"
          mise run test:e2e --agent ${{ inputs.agent }}

- A.github/workflows/e2e-checkpoint-store.yml+170

\n\n\n\n
