entire status reports "Checkpoints sync to: origin" when the git hooks are not installed
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 5.1k
- Forks
- 475
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 178
Description
What happened?
entire status reports ● Enabled and Checkpoints sync to: origin when Entire's git hooks are not installed at all. entire doctor on the same repo correctly reports Git hooks: NOT INSTALLED. status is the command people actually run, so the one surface a user checks reports health while capture is off.
Reproduced on the released 0.10.4 binary. I let lefthook remove the hooks (lefthook install -f, the same thing lefthook's npm postinstall runs, see #2263; #1349 is the config-edit trigger), confirmed Entire's wrapper was gone from .git/hooks/pre-push, then ran both commands:
$ entire status
● Enabled · branch main
Agents · Claude Code
Checkpoints sync to: origin
$ entire doctor
✓ Metadata branches: OK (no remote-tracking metadata ref found)
Git hooks: NOT INSTALLED
Commits in this repository are not captured as checkpoints.
Fix: reinstall the managed git hooks (any non-Entire hook is backed up).
Run `entire doctor --force` to apply it.
✓ Claude Code hook config: OK
Nothing is enabled in the sense that matters: no hook will run, so no checkpoint will be captured and none will be pushed. In a repo with pending checkpoints the line goes further and promises "N checkpoints not yet on origin — they sync with your next git push origin", which cannot happen.
In the source, strategy.CheckGitHookState is what doctor uses (checkGitHooks in cmd/entire/cli/doctor.go). It appears zero times in cmd/entire/cli/status.go at v0.10.3, v0.10.4 and current main. status.go does already render agent hook-config drift (! <agent> hooks out of date), so the shape exists; it never consults the git-hook state that doctor uses two files away.
Steps to reproduce
- Fresh repo with a
lefthook.ymldeclaring apre-pushcommand;git commit lefthook install, thenentire enable; confirm.git/hooks/pre-pushcontains theEntire CLI hooksmarkerlefthook install -f(or delete.git/hooks/pre-pushby hand; the cause does not matter)entire status→● Enabled … Checkpoints sync to: originentire doctor→Git hooks: NOT INSTALLED
Scripted, re-runnable: repro-status-blind.sh. Happy to paste it.
Entire CLI version
Entire CLI 0.10.4 (Go 1.26.6, darwin/arm64)
OS and architecture
macOS 26.6.2 (Darwin 25.6.0) arm64
Agent
Claude Code
Additional context
Why this is worth separating from #1349. #1349 is about hook ownership: who wins the file, and how to stop the fight. This is about the diagnostic being wrong afterwards, whatever caused it. Any cause has the same effect: a manual rm, a core.hooksPath change, a fresh clone before entire enable, a teammate's tooling. That doctor already has this check is the reason I think status is worth its own issue: the project has already decided the signal is worth surfacing, and status is simply the surface that did not get it.
Suggested fix. status.go calls strategy.CheckGitHookState(ctx) and renders a line for GitHooksAbsent / GitHooksOutdated, pointing at entire doctor. Read-only; the fix stays in doctor.
Two judgement calls I would want your steer on before writing it:
- Suppress the sync line, or add a warning beside it? Suppressing removes a false statement; warning keeps the information for someone mid-diagnosis. I lean warning.
GitHooksAbsentin a repo that never opted in.checkGitHooksdeliberately stays silent unlesssettings.IsSetUpAny, so a diagnostic never nags a repo that did not ask.statusonly prints this block when enabled, so the same guard probably applies for free; worth confirming rather than assuming.
Related: #1349 (how the hooks go missing), #1965 (a different silent-capture failure: hooks present but no session recorded).
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in cmd/entire/cli/status.go and compare its enabled-status rendering with checkGitHooks in cmd/entire/cli/doctor.go, which uses strategy.CheckGitHookState(ctx). Reproduce the missing-hook case with entire status and entire doctor. Done means status no longer presents healthy checkpoint syncing when hooks are absent or outdated, while retaining the setup guard and directing users to entire doctor.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- git, go
- Domain
- cli, devtools
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 74/100