crewforth 3.0.1-rc.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,7 +5,7 @@ Crewforth was named Claude Starter Kit until 3.0.0.
5
5
  Notable changes to this project are recorded here. Format follows [Keep a Changelog](https://keepachangelog.com/en/),
6
6
  versioning follows [SemVer](https://semver.org/).
7
7
 
8
- ## [Unreleased] — 3.0.1
8
+ ## [3.0.1] — 2026-10-01
9
9
 
10
10
  ### Security
11
11
 
@@ -31,13 +31,17 @@ versioning follows [SemVer](https://semver.org/).
31
31
  but its bash redirections become PowerShell ones (`2>/dev/null` writes to a path), it exits 0, and no gate runs: a
32
32
  `git push --force` went through. Every hook Crewforth writes — both editions and the Studio panel's gate — now
33
33
  names its shell (`"shell": "bash"`). Claude Code reads the field from 2.1.81; earlier versions ignore it and load
34
- the file as before.
34
+ the file as before. **What this does not fix:** when Claude Code finds no Git Bash at all, each hook now fails with a
35
+ visible error ("requires bash but Git Bash was not found") instead of silently, but the gates still do not run.
36
+ Doctor names the cause and the exact `CLAUDE_CODE_GIT_BASH_PATH` to set; with it set, the hooks run under bash again.
35
37
  - On Windows, doctor now says when Claude Code cannot find Git Bash, looking where Claude Code itself looks
36
38
  (`CLAUDE_CODE_GIT_BASH_PATH`, the default Git folders, then git on PATH). With none found, it reports that the
37
39
  hooks run under PowerShell and the gates do not run, and counts it in the verdict. A per-user Git install
38
40
  (`%LOCALAPPDATA%\Programs\Git`), which Claude Code does not look in, is reported the same way with the exact path
39
41
  to set in `CLAUDE_CODE_GIT_BASH_PATH`. A Git Bash reachable only through PATH is a warning.
40
42
  The plugin edition's `/crew-doctor` runs the same check (one script in both editions).
43
+ A `CLAUDE_CODE_GIT_BASH_PATH` that names `git-bash.exe` — Git Bash's launcher, which Claude Code refuses — is called
44
+ that, with the `bin\bash.exe` beside it to use instead, when one exists there.
41
45
 
42
46
  ### Fixed
43
47
 
@@ -32,6 +32,7 @@ _mt(){ local s="$1"; shift
32
32
  case "$s" in
33
33
  'fix: ') s='çözüm: ' ;;
34
34
  'Git Bash lookup not checked (no cygpath in this shell)') s='Git Bash araması denetlenmedi (bu kabukta cygpath yok)' ;;
35
+ "CLAUDE_CODE_GIT_BASH_PATH (%s) is Git Bash's launcher, not bash — Claude Code ignores it; point it to %s") s="CLAUDE_CODE_GIT_BASH_PATH (%s) Git Bash'in başlatıcısı, bash değil — Claude Code onu yok sayıyor; %s yolunu gösterecek şekilde ayarlayın" ;;
35
36
  'CLAUDE_CODE_GIT_BASH_PATH (%s) is not a bash that exists — Claude Code ignores it') s='CLAUDE_CODE_GIT_BASH_PATH (%s) var olan bir bash değil — Claude Code onu yok sayıyor' ;;
36
37
  'Claude Code finds Git Bash (%s) — hooks run under bash') s="Claude Code Git Bash'i buluyor (%s) — hook'lar bash altında koşuyor" ;;
37
38
  'Claude Code finds Git Bash only through git on PATH (%s) — started without it on PATH, its hooks run under PowerShell and the gates do not run; set CLAUDE_CODE_GIT_BASH_PATH to that path') s="Claude Code Git Bash'i yalnız PATH'teki git üzerinden buluyor (%s) — PATH'te o yokken başlarsa hook'lar PowerShell altında koşar ve kapılar çalışmaz; CLAUDE_CODE_GIT_BASH_PATH'i bu yola ayarlayın" ;;
@@ -64,7 +65,17 @@ case "$(uname -s 2>/dev/null)" in MINGW*|MSYS*|CYGWIN*)
64
65
  if [ -n "$_gbv" ]; then
65
66
  _gbn="${_gbv##*[\\/]}"; _gbn="$(printf '%s' "$_gbn" | tr '[:upper:]' '[:lower:]')"
66
67
  case "$_gbn" in bash.exe|sh.exe|bash|sh) _gbx "$_gbv" && _gbf="$_gbv" ;; esac
67
- [ -n "$_gbf" ] || warn "CLAUDE_CODE_GIT_BASH_PATH (%s) is not a bash that exists — Claude Code ignores it" "$_gbv"
68
+ # The field case (RC-2, c1): the variable named git-bash.exe, Git Bash's LAUNCHER (a window, not a shell), and
69
+ # Claude Code refused it. Its bash sits in bin\ next to it; that path is checked here before it is suggested.
70
+ _gbq=""
71
+ if [ -z "$_gbf" ] && [ "$_gbn" = git-bash.exe ]; then
72
+ _gbq="${_gbv%[\\/]*}"'\bin\bash.exe'; _gbx "$_gbq" || _gbq=""
73
+ fi
74
+ if [ -n "$_gbq" ]; then
75
+ warn "CLAUDE_CODE_GIT_BASH_PATH (%s) is Git Bash's launcher, not bash — Claude Code ignores it; point it to %s" "$_gbv" "$_gbq"
76
+ elif [ -z "$_gbf" ]; then
77
+ warn "CLAUDE_CODE_GIT_BASH_PATH (%s) is not a bash that exists — Claude Code ignores it" "$_gbv"
78
+ fi
68
79
  fi
69
80
  if [ -z "$_gbf" ]; then
70
81
  for _gbc in 'C:\Program Files\Git\bin\bash.exe' 'C:\Program Files (x86)\Git\bin\bash.exe'; do
@@ -5847,6 +5847,23 @@ GBCP
5847
5847
  case "$_gbx" in *"installed for this user only"*) fail "doctor named a per-user Git Bash that does not exist — the path must be measured" ;;
5848
5848
  *"cannot find Git Bash"*) pass "doctor: no per-user Git either → names no path it did not find" ;;
5849
5849
  *) fail "doctor: an absent per-user Git gave neither answer" ;; esac
5850
+ # The field case (RC-2, c1): the variable named git-bash.exe, the LAUNCHER. Doctor names it as such, with the bash
5851
+ # next to it that exists; a launcher with no bash beside it gets the plain line, never a guessed path.
5852
+ : > "$GBF/c/Users/u/AppData/Local/Programs/Git/git-bash.exe"
5853
+ _gbl1="$(gbdoc env LOCALAPPDATA='C:\Users\u\AppData\Local' CLAUDE_CODE_GIT_BASH_PATH='C:\Users\u\AppData\Local\Programs\Git\git-bash.exe')"
5854
+ case "$_gbl1" in *"is Git Bash's launcher, not bash"*"point it to C:\\Users\\u\\AppData\\Local\\Programs\\Git\\bin\\bash.exe"*"installed for this user only"*)
5855
+ pass "doctor: CLAUDE_CODE_GIT_BASH_PATH naming git-bash.exe → called the launcher, with the bash beside it that exists" ;;
5856
+ *) fail "doctor did not name git-bash.exe as the launcher with its bin\\bash.exe: $(printf '%s' "$_gbl1" | grep -i 'git bash' | tr '\n' '|')" ;; esac
5857
+ mkdir -p "$GBF/c/Other/Git"; : > "$GBF/c/Other/Git/git-bash.exe"
5858
+ _gbl2="$(gbdoc env CLAUDE_CODE_GIT_BASH_PATH='C:\Other\Git\git-bash.exe')"
5859
+ case "$_gbl2" in *"launcher"*) fail "doctor suggested a bin\\bash.exe that does not exist next to the launcher" ;;
5860
+ *"CLAUDE_CODE_GIT_BASH_PATH (C:\\Other\\Git\\git-bash.exe) is not a bash that exists"*) pass "doctor: a launcher with no bash beside it → the plain line, no guessed path" ;;
5861
+ *) fail "doctor: a lone launcher gave neither line" ;; esac
5862
+ : > "$DTMP/gbmissl"
5863
+ ( cd "$DTMP" && env -u CLAUDE_CODE_GIT_BASH_PATH -u LOCALAPPDATA GBC="$GBF" PATH="$GBF/bin:$PATH" CREW_LANG=tr CREW_I18N_MISS="$DTMP/gbmissl" \
5864
+ CLAUDE_CODE_GIT_BASH_PATH='C:\Users\u\AppData\Local\Programs\Git\git-bash.exe' bash .claude/eval/lib/git-bash.sh >/dev/null 2>&1 )
5865
+ [ -s "$DTMP/gbmissl" ] && fail "the launcher line prints English under CREW_LANG=tr: $(tr '\n' '|' < "$DTMP/gbmissl")" \
5866
+ || pass "the launcher line speaks Turkish"
5850
5867
  mkdir -p "$GBF/c/Program Files/Git/bin"; : > "$GBF/c/Program Files/Git/bin/bash.exe"
5851
5868
  _gb4="$(gbdoc)"
5852
5869
  case "$_gb4" in *"finds Git Bash (C:\\Program Files\\Git\\bin\\bash.exe)"*) pass "doctor: Git Bash in its default folder → found" ;;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "crewforth",
3
- "version": "3.0.1-rc.2",
4
- "description": "Crewforth — your engineering crew for Claude Code: agents, skills and tool-level gates, in any stack.",
3
+ "version": "3.0.1",
4
+ "description": "Crewforth \u2014 your engineering crew for Claude Code: agents, skills and tool-level gates, in any stack.",
5
5
  "bin": {
6
6
  "crewforth": "bin/cli.js"
7
7
  },
@@ -15,8 +15,7 @@
15
15
  "kit/",
16
16
  "VERSION",
17
17
  "LICENSE",
18
- "README.md",
19
- "CHANGELOG.md"
18
+ "README.md", "CHANGELOG.md"
20
19
  ],
21
20
  "engines": {
22
21
  "node": ">=20"
@@ -43,7 +42,7 @@
43
42
  "code-review",
44
43
  "git-hooks"
45
44
  ],
46
- "author": "Barış Yerlikaya",
45
+ "author": "Bar\u0131\u015f Yerlikaya",
47
46
  "repository": {
48
47
  "type": "git",
49
48
  "url": "git+https://github.com/Crewforth/crewforth.git"