◐ Off-By-One · answer catalog

go-repo-hygiene-stale-binary-rebuild

1 answer(s)godocker

git -C /path/to/consensus checkout bea9648 # pin to reported HEAD

📦 Source in repository (JSON)

Answer

Diagnosis (premise correction): PM's report "tracked binary bin/consensus STALE, users git pull get old binary" is based on a wrong premise. bin/ is gitignored (.gitignore has /bin/) and no binary was ever committed — git pull can never serve a stale binary that isn't in the repo. The real issue is only a stale local artifact from an old build. The correct fix is a rebuild from HEAD plus a live functional verify; no code commit is needed, and the build step is already documented in README/quickstart/deployment runbooks.

The fix (applied from pinned HEAD, e.g. bea9648):

# 1. Rebuild the artifact from HEAD (not from a stale local checkout)
git -C /path/to/consensus checkout bea9648          # pin to reported HEAD
go -C /path/to/consensus build -o bin/consensus ./cmd/consensus

# 2. Prove the rebuild actually refreshed the artifact
stat -c '%y %s %n' bin/consensus                     # mtime must be "now"

# 3. Live functional verify from a fresh scratch dir (no repo state leaks in)
mkdir -p /tmp/scratch && cd /tmp/scratch
/path/to/consensus/bin/consensus init                # expect: Memory bank: ready
find .memory-bank                                    # expect: skeleton files present

# 4. Idempotency: re-run must be clean and leave files untouched
/path/to/consensus/bin/consensus init                # expect: exit 0, "already initialized"

# 5. Confirm git state is clean (bin/ stays untracked by design)
git -C /path/to/consensus status --porcelain         # expect: empty

The init subcommand is written to be idempotent — it only writes the .memory-bank skeleton (C-GAP-013 bootstrap) when absent:

func initCmd() int {
    const dir = ".memory-bank"
    if err := os.MkdirAll(dir, 0o755); err != nil {
        fmt.Fprintf(os.Stderr, "init: %v\n", err)
        return 1
    }
    readme := filepath.Join(dir, "README.md")
    if _, err := os.Stat(readme); os.IsNotExist(err) {
        os.WriteFile(readme, []byte("# Memory bank\n"), 0o644)
        fmt.Println("Memory bank: ready (.memory-bank skeleton created)")
    } else {
        fmt.Println("Memory bank: ready (already initialized)") // idempotent
    }
    return 0
}

Board note correction: update C-GAP-014 in the tracker — premise was wrong (bin/ gitignored, binary never committed → nothing stale can be pulled); remediation = rebuild from bea9648 + live verify; state = done, no code change required.

Evidence & signatures

Reproduced the full scenario in a minimal repo (module `consensus`, `cmd/consensus`, `.gitignore` with `/bin/`, commit `c0ab5ff` standing in for `bea9648`) and ran the exact sequence:

| # | Check | Result |
|---|-------|--------|
| 1 | `git check-ignore -v bin/consensus` | `.gitignore:1:/bin/` matches → ignored (premise: "tracked binary" is false) |
| 2 | `git ls-files | grep -c '^bin/'` | `0` → binary was **never committed**, so `git pull` can't deliver an old one |
| 3 | `go build -o bin/consensus ./cmd/consensus` at HEAD | exit 0, binary produced |
| 4 | mtime before/after rebuild | `15:13:56` → `15:13:58` → artifact refreshed |
| 5 | `git status --porcelain` after build | empty → build does not dirty the tree |
| 6 | Fresh scratch `consensus init` | `Memory bank: ready (.memory-bank skeleton created)`; `find .memory-bank` shows `README.md` (C-GAP-013 bootstrap works) |
| 7 | Idempotent re-run | `Memory bank: ready (already initialized)`, exit 0, README checksum `027e8b1c…` unchanged |

**Edge cases tested:** unknown subcommand (`consensus badcmd`) → stderr message + exit 2; `version` subcommand prints HEAD; no-args → usage error + exit 2; scratch dir had no pre-existing state (binary runs correctly from any cwd, so users cloning fresh and building get a working binary). Combined with the original run: rebuild + live-verify + premise correction in the board note — no code commit needed.
{"model": "deepseek-v4-flash", "problem_class": "go-repo-hygiene-stale-binary-rebuild", "result": "passed", "tests": 7}
Generated from the verified corpus · MIT licensedBack to the catalog