-
Notifications
You must be signed in to change notification settings - Fork 279
Only first commit per session gets Entire-Checkpoint trailer; subsequent commits silently skipped #784
Description
Summary
When using entire configure --agent claude-code with the manual-commit strategy, only the first commit per turn gets the Entire-Checkpoint trailer. Subsequent commits within the same turn, and all commits in later turns, are silently skipped — no trailer is added, no checkpoint is created, and no error is logged.
This breaks the documented "Multiple checkpoints, single session" workflow described at https://docs.entire.io/web/sessions:
"A developer might have a single session running in a terminal while creating multiple commits throughout that session and thereby creating multiple checkpoints. Entire will match up these checkpoints to the single session."
Environment
- Entire CLI: 0.5.1 (d46fdc2)
- OS: Linux (Manjaro)
- Agent: claude-code
- Strategy: manual-commit
- Git hooks path:
.husky/_(viacore.hooksPath)
Observed behavior
Prompt-by-prompt breakdown
-
Prompt 1 — generated a single commit
7917a85. ✅ Linked to session with checkpoint1754c2af9609. -
Prompt 2 — generated 3 commits while Claude Code was working:
0dd88fa✅ Linked to session with checkpoint07386117e61f(first commit of this turn)abb3213❌ NoEntire-Checkpointtrailere1f6802❌ NoEntire-Checkpointtrailer
-
Prompt 3 (same session, new turn) — generated 1 commit:
482a585❌ NoEntire-Checkpointtrailer
Pattern: Only the first commit ever made in a turn gets linked. After the post-commit hook runs for that first commit, all subsequent commits in the session are orphaned.
Dashboard view
Only 2 out of 5 commits show the "Claude Code" badge and checkpoint:
| # | Commit | Message | Linked? |
|---|---|---|---|
| 5 | 482a585 |
chore: clean up dependencies... | ❌ No trailer |
| 4 | e1f6802 |
feat: integrate Openfort + Viem... | ❌ No trailer |
| 3 | abb3213 |
refactor: remove Particle Network... | ❌ No trailer |
| 2 | 0dd88fa |
style: format entire codebase... | ✅ checkpoint 07386117e61f |
| 1 | 7917a85 |
docs: add v0.1.0 status report... | ✅ checkpoint 1754c2af9609 |
Root cause (from .entire/logs/entire.log)
The post-commit hook deletes the shadow branch after condensing the session. When the next commit happens, prepare-commit-msg cannot find the shadow branch, and silently produces no trailer.
Sequence from the log:
# Prompt 1, commit 1 (7917a85) — works
prepare-commit-msg: agent commit trailer added (checkpoint: 1754c2af9609)
session condensed
shadow branch deleted ← shadow branch gone
# Prompt 2, commit 1 (0dd88fa) — works (shadow branch recreated between turns)
prepare-commit-msg: agent commit trailer added (checkpoint: 07386117e61f)
session condensed
sessionHasNewContent: no shadow branch, checking live transcript
shadow branch deleted ← shadow branch gone again
# Prompt 2, commits 2-3 (abb3213, e1f6802) — NO prepare-commit-msg log entries at all
# The hook runs but entire silently exits without adding a trailer
# At turn-end, entire notices HEAD moved:
updated session base commit (HEAD changed during session), new_base: e1f6802
# Prompt 3, commit 1 (482a585) — also not linked
# No prepare-commit-msg log entry, shadow branch not available
The key gap: between 23:39:00 (shadow branch entire/7917a85-e3b0c4 deleted after commit 0dd88fa) and 23:47:42 (turn-end), two more commits were made with zero prepare-commit-msg activity in the log. The hook script pipes stderr to /dev/null (2>/dev/null || true), so any errors from entire hooks git prepare-commit-msg are silently swallowed.
No workaround available
We checked the available CLI commands (entire clean, entire reset, entire doctor) — none of them address this issue:
entire clean— only removes orphaned data, doesn't recreate shadow branchesentire reset— deletes shadow branch + session state, would make it worseentire doctor— fixes stuck sessions, not the shadow branch lifecycle
Even a "one commit per prompt" workflow doesn't reliably work — Prompt 3's single commit (482a585) also failed to get linked.
Expected behavior
Every commit made during an active session should receive the Entire-Checkpoint trailer, as documented. The shadow branch should either:
- Not be deleted until the session ends (not after each commit), or
- Be recreated before returning from the post-commit hook, so it's available for the next commit's
prepare-commit-msg, or prepare-commit-msgshould not depend on the shadow branch existing to decide whether to add the trailer — it should be sufficient that an active session exists for the worktree.
Steps to reproduce
entire configure --agent claude-codein any repo- Start a Claude Code session
- Make 3+ commits in the same session (either in one turn or across turns)
- Only the first commit gets the
Entire-Checkpointtrailer - Dashboard shows subsequent commits without the Claude Code badge