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 +6 -2
- package/kit/eval/lib/git-bash.sh +12 -1
- package/kit/eval/smoke-test.sh +17 -0
- package/package.json +4 -5
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
|
-
## [
|
|
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
|
|
package/kit/eval/lib/git-bash.sh
CHANGED
|
@@ -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
|
-
|
|
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
|
package/kit/eval/smoke-test.sh
CHANGED
|
@@ -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
|
|
4
|
-
"description": "Crewforth
|
|
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": "
|
|
45
|
+
"author": "Bar\u0131\u015f Yerlikaya",
|
|
47
46
|
"repository": {
|
|
48
47
|
"type": "git",
|
|
49
48
|
"url": "git+https://github.com/Crewforth/crewforth.git"
|