entireio / entireio/cli

entire status reports "Checkpoints sync to: origin" when the git hooks are not installed

Open
#2,264 1 comment 0 reactions 0 assignees View on GitHub

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
  1. Fresh repo with a lefthook.yml declaring a pre-push command; git commit
  2. lefthook install, then entire enable; confirm .git/hooks/pre-push contains the Entire CLI hooks marker
  3. lefthook install -f (or delete .git/hooks/pre-push by hand; the cause does not matter)
  4. entire status● Enabled … Checkpoints sync to: origin
  5. entire doctorGit 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:

  1. 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.
  2. GitHooksAbsent in a repo that never opted in. checkGitHooks deliberately stays silent unless settings.IsSetUpAny, so a diagnostic never nags a repo that did not ask. status only 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.