Summary
curl -fsSL https://codegraff.com/install-graff.sh | sh hangs forever for a fresh install. After working around the hang, the script reports success but no binary is actually installed. Two separate bugs.
Environment: macOS (darwin-arm64), zsh.
Bug 1 — infinite self-recursion (the hang)
https://codegraff.com/install-graff.sh serves the installer itself. In the "graff companion suite" step the script runs:
# line ~175
if curl -fsSL https://codegraff.com/install-graff.sh | sh >/dev/null 2>&1; then
That URL is this same script. The guard above it (command -v muonry && command -v zigpatch) fails on a fresh machine because those tools aren't installed yet, so every invocation re-enters the same branch and re-runs itself — forever, silently (>/dev/null 2>&1). Result: the installer never returns.
Workaround: HARNESS_NO_GRAFF=1 sh install-graff.sh skips the block and the install completes.
Fix: the companion-suite step should fetch the companion installer (muonry/zigrep/zigpatch suite), not re-curl install-graff.sh. As written it can never make muonry/zigpatch present, so it can only recurse.
Bug 2 — wrong tarball layout, nothing gets installed
Even with the hang bypassed, the prebuilt-release path fails:
install: /var/folders/.../tmp.XXXX/graff-aarch64-macos/graff: No such file or directory
│ download ✓ (prebuilt release)
│ install ✓
installed → /Users/<me>/bin/graff
fetch_release extracts the tarball and calls (line ~108):
place_bin "$tmpd/$stem-$target/$stem" # expects graff-aarch64-macos/graff
But the actual release asset graff-aarch64-macos.tar.gz extracts flat:
$ tar -tzf graff-aarch64-macos.tar.gz
graff
README.md
LICENSE
There is no graff-aarch64-macos/ subdirectory, so install gets a nonexistent path and fails. The failure is swallowed (the codesign/|| true flow continues) and the script still prints installed ✓ — a false success.
Fix options: either (a) package the tarball with the expected graff-<target>/graff subdirectory, or (b) change place_bin to use the flat path ($tmpd/$stem), or locate the binary after extraction rather than assuming the layout. Whichever is chosen, fetch_release should also verify the binary exists before reporting download ✓, so a failed extract doesn't print a false success.
Repro
curl -fsSL https://codegraff.com/install-graff.sh | sh # hangs forever
# vs
HARNESS_NO_GRAFF=1 sh install-graff.sh # no hang, but no binary installed
Manual install that does work
curl -fsSL https://github.com/justrach/codegraff/releases/latest/download/graff-aarch64-macos.tar.gz -o graff.tar.gz
tar -xzf graff.tar.gz
install -m 0755 graff "$HOME/bin/graff"
codesign -s - --force "$HOME/bin/graff" # macOS
$HOME/bin/graff --version # -> simple-harness 0.0.1
Summary
curl -fsSL https://codegraff.com/install-graff.sh | shhangs forever for a fresh install. After working around the hang, the script reports success but no binary is actually installed. Two separate bugs.Environment: macOS (darwin-arm64), zsh.
Bug 1 — infinite self-recursion (the hang)
https://codegraff.com/install-graff.shserves the installer itself. In the "graff companion suite" step the script runs:That URL is this same script. The guard above it (
command -v muonry && command -v zigpatch) fails on a fresh machine because those tools aren't installed yet, so every invocation re-enters the same branch and re-runs itself — forever, silently (>/dev/null 2>&1). Result: the installer never returns.Workaround:
HARNESS_NO_GRAFF=1 sh install-graff.shskips the block and the install completes.Fix: the companion-suite step should fetch the companion installer (muonry/zigrep/zigpatch suite), not re-curl
install-graff.sh. As written it can never makemuonry/zigpatchpresent, so it can only recurse.Bug 2 — wrong tarball layout, nothing gets installed
Even with the hang bypassed, the prebuilt-release path fails:
fetch_releaseextracts the tarball and calls (line ~108):But the actual release asset
graff-aarch64-macos.tar.gzextracts flat:There is no
graff-aarch64-macos/subdirectory, soinstallgets a nonexistent path and fails. The failure is swallowed (the codesign/|| trueflow continues) and the script still printsinstalled ✓— a false success.Fix options: either (a) package the tarball with the expected
graff-<target>/graffsubdirectory, or (b) changeplace_binto use the flat path ($tmpd/$stem), or locate the binary after extraction rather than assuming the layout. Whichever is chosen,fetch_releaseshould also verify the binary exists before reportingdownload ✓, so a failed extract doesn't print a false success.Repro
Manual install that does work