From c9b24d2295d5e4c8f4331e6dcb70234297b742cf Mon Sep 17 00:00:00 2001 From: genisis0x Date: Thu, 14 May 2026 14:14:27 +0530 Subject: [PATCH] fix(gbrain-install): skip postinstall on Windows MSYS/MINGW + post-install probe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-picked from #1487 by genisis0x and extended with the post-install subcommand probe per T6 / codex review #19. `bun install` in $INSTALL_DIR fails on Windows MSYS/MINGW/Cygwin shells because gbrain's native postinstall script mis-parses path arguments and aborts with a non-zero exit, breaking gstack-gbrain-install for Windows users running git-bash/MSYS2. The package installs cleanly without scripts. This commit: - Adds Windows shell detection via `uname -s` matching MINGW*/MSYS*/CYGWIN*/Windows_NT (#1487's case statement already covers all four — codex review #18 confirmed MINGW* is included). Windows paths get `bun install --ignore-scripts`; macOS and Linux unchanged. - Adds a post-install probe of `gbrain sources --help`. `gbrain --version` already runs (D19 PATH-shadowing validation), but version success doesn't prove the subcommand surface is reachable — and `--ignore-scripts` may have skipped artifacts that subcommands need. Probe failure logs a clear warning (with Windows-specific remediation pointing at re-running `bun install` outside MSYS) but does NOT exit non-zero; users may still get value from gbrain even if the probe fails transiently. Refs #1271 Co-Authored-By: Claude --- bin/gstack-gbrain-install | 41 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/bin/gstack-gbrain-install b/bin/gstack-gbrain-install index c247ff2df..d9c30396b 100755 --- a/bin/gstack-gbrain-install +++ b/bin/gstack-gbrain-install @@ -131,9 +131,24 @@ if $DRY_RUN; then fi # --- install + link --- +# On Windows MSYS/Cygwin shells, bun's postinstall scripts (notably gbrain's +# native-bindings setup) fail to parse path arguments correctly and abort +# `bun install` with a non-zero exit. The package itself installs fine +# without scripts, so detect Windows and pass --ignore-scripts there. The +# `bun link` step below is unaffected. +IS_WINDOWS=0 +case "$(uname -s)" in + MINGW*|MSYS*|CYGWIN*|Windows_NT) IS_WINDOWS=1 ;; +esac + if ! $VALIDATE_ONLY; then - log "running bun install in $INSTALL_DIR" - ( cd "$INSTALL_DIR" && bun install --silent ) + if [ "$IS_WINDOWS" -eq 1 ]; then + log "running bun install --ignore-scripts in $INSTALL_DIR (Windows shell detected)" + ( cd "$INSTALL_DIR" && bun install --silent --ignore-scripts ) + else + log "running bun install in $INSTALL_DIR" + ( cd "$INSTALL_DIR" && bun install --silent ) + fi log "running bun link in $INSTALL_DIR" ( cd "$INSTALL_DIR" && bun link --silent ) fi @@ -179,5 +194,27 @@ if [ "$actual_norm" != "$expected_norm" ]; then fi log "installed gbrain $actual_version from $INSTALL_DIR" + +# v1.40.0.0 post-install validation (T6 / codex review #19): --ignore-scripts +# may skip artifacts gbrain needs at runtime, especially on Windows +# MSYS/MINGW where we DID pass --ignore-scripts. `gbrain --version` above +# already confirmed the binary runs; this second probe checks that the +# subcommand surface is reachable (`sources` is the entry point the sync +# stage hits first). If the probe fails, we warn but don't exit non-zero — +# the user may still be able to use other commands. +if ! gbrain sources --help >/dev/null 2>&1; then + echo "" >&2 + echo "gstack-gbrain-install: WARNING — gbrain installed but 'gbrain sources --help' did not exit 0." >&2 + if [ "$IS_WINDOWS" -eq 1 ]; then + echo " Windows shells skip bun postinstall scripts; some gbrain features may need native build tools." >&2 + echo " If /sync-gbrain fails to find subcommands, install gbrain from a non-MSYS shell," >&2 + echo " or run: cd $INSTALL_DIR && bun install (without --ignore-scripts)" >&2 + else + echo " This may be a transient gbrain CLI issue or a missing native dependency." >&2 + echo " If /sync-gbrain fails, re-run: cd $INSTALL_DIR && bun install" >&2 + fi + echo "" >&2 +fi + echo "" echo "Next: gbrain init --pglite (or run /setup-gbrain for the full setup flow)"