Repository navigation
feat(gs)!: replace bin/gs and bin/gs-official with one deterministic Go gs - #119
Conversation
One binary for every host. gs builds gentle-ai and engram itself from a pinned commit (GitHub main through gh, or the clean clone on workshop hosts), verifies the build (engram instance-id) and installs regular files in ~/.local/bin with an atomic rename. Every other sync step runs with GOBIN in a quarantine dir, so stray go installs can never replace them. The sync ends with the same checks as gs doctor.
gs sync rebuilds gs itself from the clean dotfiles clone on main; install.sh builds it; CI runs gofmt, go vet and go test. Docs move to docs/gs.md.
Fleet review (mimo)Lens: requirements. Second-line review of #119 against the acceptance criteria stated in the PR body and in odd/tasks/gs-go-binary.md (S1-S5): one deterministic Go binary in gs/ with sync/doctor and the ported worktree commands, installed by install.sh, covered by gofmt/vet/test in CI, documented in docs/gs.md, and the old scripts plus their tests removed. Verified from the diff: dispatch (gs/main.go) routes sync, doctor, pr, issue, new, review, base, run, ls, done, help and the plain launch; cmdSync pins gentle-ai/engram to one commit (gh api on consumer, clean clones on workshop), installs them as regular files through an atomic rename after verifying the build (engram instance-id), runs every other child with GOBIN in a quarantine dir, upgrades gentle-shell only when behind gentle-pi main, restarts the Engram service on change or stale process, pulls the dotfiles clone only when clean and on main and rebuilds gs from it, and ends with the shared checkHost/doctor report that prints INCOMPLETE and exits 1; gs doctor is read-only; bin/gs, bin/gs-official, scripts/test-gs-sync.sh, tests/gs_test.sh, tests/gs_official_test.py, docs/gs-official.md and docs/gs-sync.md are gone; install.sh builds gs atomically into ~/.local/bin/gs; CI runs gofmt/vet/test in gs/. No functional reference to the removed scripts survives in install.sh, zsh/, scripts/ or the workflow (grep of the head tree), and gofmt -l on gs/ is clean. No blocking finding: every criterion the diff can satisfy is satisfied, and the remaining items are precision/rollout questions rather than defects with a concrete failure sequence in the diff. Suggestion (5)
Question (1)
Verdict: ready to merge |
Post-merge QA (glm)Lens: requirements + adversarial. El gs en Go es determinista y reemplaza bin/gs y bin/gs-official en un solo binario; los tests cubren los caminos principales y la salida binaria. Sin hallazgos. No findings. Verdict: clean |
Post-merge QA (deepseek)Lens: evidence + test design. QA of the merge that landed: Suggestion (1)
Verdict: clean |
Why
Two different
gsscripts (bin/gs,bin/gs-official) disagreed on how~/.local/binshould look (symlinks vs regular files), and gentle-ai/gentle-shell couldgo installEngram v1 over ours. Hosts drifted and broke.What
One Go binary in
gs/, same on Mac, agent-dev and agent-gentle:gs sync: gentle-ai and engram built only by gs from a pinned commit (GitHub main viagh, or the clean clones on workshop), verified (engram instance-id), installed as regular files via atomic rename; every other step runs withGOBINin a quarantine dir;gentle-shell upgradeonly when behind main; Engram service restart on change; ends with thegs doctorchecks (INCOMPLETE + exit 1 on failure); rebuilds gs itself from the clean dotfiles clone on main.gs doctor: read-only host report.pr,issue,new,review,base,run,ls,done.install.shbuilds gs; CI runs gofmt/vet/test; docs indocs/gs.md. Old scripts and their tests removed.Tests
cd gs && go test ./...(offline, temp HOME, stubs). Real Mac run ofgs sync: pinned builds installed, Engram restarted, doctor checks ok.Feature log:
odd/tasks/gs-go-binary.md.🤖 Generated with Claude Code
https://claude.ai/code/session_01A9D7phtzRBjJGKsHtaiVWj