@thebassclef/lite 1.9.1 → 1.9.2

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.
@@ -0,0 +1,168 @@
1
+ #!/bin/bash
2
+ # tier: upstream
3
+ # fixtures: mock-git-repos-inline
4
+ # Tier 0 test for adopter message channel (bassclef-upstream#1926).
5
+ #
6
+ # Per @luminary alan-cooper Sam+Louis persona + @luminary donald-norman signifier
7
+ # + @luminary linus-torvalds adopter contract.
8
+ #
9
+ # Source under test: .claude/hooks/session-reflection.d/01-adopter-message-channel.sh
10
+ #
11
+ # test-list (per .claude/rules/test-list-discipline.md — RED first, GREEN as they land):
12
+ #
13
+ # Fragment exists + executable
14
+ # [ ] T00: fragment exists at expected path and is executable
15
+ #
16
+ # Fresh install gate — all 3 files absent → banner fires
17
+ # [ ] T01: fresh install (no whereami, no substrate.config, no .claude/settings) → welcome text
18
+ #
19
+ # Onboarded gate — any of the 3 files present → silent
20
+ # [ ] T02: whereami.md present → silent
21
+ # [ ] T03: substrate.config.md present → silent
22
+ # [ ] T04: .claude/settings.json present → silent
23
+ # [ ] T08: bassclef itself (all 3 files present) → silent (Torvalds T1 fold)
24
+ #
25
+ # Override
26
+ # [ ] T05: SKIP_ADOPTER_MESSAGES=1 → silent (bypass on fresh install)
27
+ #
28
+ # Message body (Cooper C2 fold)
29
+ # [ ] T06: welcome text contains "Welcome to bassclef"
30
+ # [ ] T07: welcome text contains "/onboard-repo"
31
+
32
+ set -u
33
+
34
+ REPO_ROOT="$(cd "$(dirname "$0")/../../../.." && pwd)"
35
+ HOOK="${REPO_ROOT}/.claude/hooks/session-reflection.d/01-adopter-message-channel.sh"
36
+ PASS=0
37
+ FAIL=0
38
+ FAILED_TESTS=()
39
+
40
+ assert() {
41
+ local name="$1"
42
+ local ok="$2"
43
+ local why="$3"
44
+ if [ "$ok" = "1" ]; then
45
+ PASS=$((PASS + 1))
46
+ echo " PASS: $name"
47
+ else
48
+ FAIL=$((FAIL + 1))
49
+ FAILED_TESTS+=("$name — $why")
50
+ echo " FAIL: $name — $why"
51
+ fi
52
+ }
53
+
54
+ TMPROOT="$(mktemp -d -t adopter-message-channel.XXXXXX)"
55
+ cleanup() { rm -rf "$TMPROOT"; }
56
+ trap cleanup EXIT
57
+
58
+ # --- T00: fragment exists + executable ---
59
+ if [ -x "$HOOK" ]; then
60
+ assert "T00: fragment exists + executable" 1 ""
61
+ else
62
+ assert "T00: fragment exists + executable" 0 "not found or not executable: $HOOK"
63
+ echo ""
64
+ echo "=== Results ==="
65
+ echo "PASS: $PASS"
66
+ echo "FAIL: $FAIL"
67
+ exit 1
68
+ fi
69
+
70
+ # --- Fixture builder ---
71
+ run_hook_in() {
72
+ local tmpdir="$1"
73
+ (cd "$tmpdir" && bash "$HOOK" 2>&1)
74
+ }
75
+
76
+ # --- T01: fresh install (no state files) → welcome text ---
77
+ SC_FRESH="$TMPROOT/fresh"
78
+ mkdir -p "$SC_FRESH"
79
+ OUT_T01=$(run_hook_in "$SC_FRESH")
80
+ if echo "$OUT_T01" | grep -qE "Welcome to bassclef"; then
81
+ assert "T01: fresh install emits welcome text" 1 ""
82
+ else
83
+ assert "T01: fresh install emits welcome text" 0 "no welcome text in: $OUT_T01"
84
+ fi
85
+
86
+ # --- T02: whereami.md present → silent ---
87
+ SC_WHEREAMI="$TMPROOT/whereami-present"
88
+ mkdir -p "$SC_WHEREAMI/docs"
89
+ echo "---" > "$SC_WHEREAMI/docs/whereami.md"
90
+ OUT_T02=$(run_hook_in "$SC_WHEREAMI")
91
+ if [ -z "$OUT_T02" ]; then
92
+ assert "T02: whereami.md present → silent" 1 ""
93
+ else
94
+ assert "T02: whereami.md present → silent" 0 "unexpected output: $OUT_T02"
95
+ fi
96
+
97
+ # --- T03: substrate.config.md present → silent ---
98
+ SC_CONFIG="$TMPROOT/config-present"
99
+ mkdir -p "$SC_CONFIG"
100
+ echo "---" > "$SC_CONFIG/substrate.config.md"
101
+ OUT_T03=$(run_hook_in "$SC_CONFIG")
102
+ if [ -z "$OUT_T03" ]; then
103
+ assert "T03: substrate.config.md present → silent" 1 ""
104
+ else
105
+ assert "T03: substrate.config.md present → silent" 0 "unexpected output: $OUT_T03"
106
+ fi
107
+
108
+ # --- T04: .claude/settings.json present → silent ---
109
+ SC_SETTINGS="$TMPROOT/settings-present"
110
+ mkdir -p "$SC_SETTINGS/.claude"
111
+ echo '{}' > "$SC_SETTINGS/.claude/settings.json"
112
+ OUT_T04=$(run_hook_in "$SC_SETTINGS")
113
+ if [ -z "$OUT_T04" ]; then
114
+ assert "T04: .claude/settings.json present → silent" 1 ""
115
+ else
116
+ assert "T04: .claude/settings.json present → silent" 0 "unexpected output: $OUT_T04"
117
+ fi
118
+
119
+ # --- T05: SKIP_ADOPTER_MESSAGES=1 bypass on fresh install ---
120
+ SC_SKIP="$TMPROOT/skip"
121
+ mkdir -p "$SC_SKIP"
122
+ OUT_T05=$(SKIP_ADOPTER_MESSAGES=1 run_hook_in "$SC_SKIP")
123
+ if [ -z "$OUT_T05" ] || echo "$OUT_T05" | grep -qE "SKIP_ADOPTER_MESSAGES"; then
124
+ assert "T05: SKIP_ADOPTER_MESSAGES=1 bypasses" 1 ""
125
+ else
126
+ assert "T05: SKIP_ADOPTER_MESSAGES=1 bypasses" 0 "banner fired: $OUT_T05"
127
+ fi
128
+
129
+ # --- T06: welcome text contains "Welcome to bassclef" ---
130
+ if echo "$OUT_T01" | grep -qE "Welcome to bassclef"; then
131
+ assert "T06: welcome contains 'Welcome to bassclef'" 1 ""
132
+ else
133
+ assert "T06: welcome contains 'Welcome to bassclef'" 0 "missing in: $OUT_T01"
134
+ fi
135
+
136
+ # --- T07: welcome text contains "/onboard-repo" ---
137
+ if echo "$OUT_T01" | grep -qE "/onboard-repo"; then
138
+ assert "T07: welcome contains '/onboard-repo'" 1 ""
139
+ else
140
+ assert "T07: welcome contains '/onboard-repo'" 0 "missing in: $OUT_T01"
141
+ fi
142
+
143
+ # --- T08: bassclef itself (all 3 files present) → silent ---
144
+ SC_BASSCLEF="$TMPROOT/bassclef"
145
+ mkdir -p "$SC_BASSCLEF/docs" "$SC_BASSCLEF/.claude"
146
+ echo "---" > "$SC_BASSCLEF/docs/whereami.md"
147
+ echo "---" > "$SC_BASSCLEF/substrate.config.md"
148
+ echo '{}' > "$SC_BASSCLEF/.claude/settings.json"
149
+ OUT_T08=$(run_hook_in "$SC_BASSCLEF")
150
+ if [ -z "$OUT_T08" ]; then
151
+ assert "T08: bassclef itself (all 3 present) → silent" 1 ""
152
+ else
153
+ assert "T08: bassclef itself (all 3 present) → silent" 0 "unexpected: $OUT_T08"
154
+ fi
155
+
156
+ # --- Summary ---
157
+ echo ""
158
+ echo "=== Results ==="
159
+ echo "PASS: $PASS"
160
+ echo "FAIL: $FAIL"
161
+ if [ "$FAIL" -gt 0 ]; then
162
+ echo ""
163
+ echo "Failed tests:"
164
+ for t in "${FAILED_TESTS[@]}"; do
165
+ echo " - $t"
166
+ done
167
+ exit 1
168
+ fi
@@ -1,7 +1,7 @@
1
1
  {
2
- "version": "v1.5.1",
3
- "marker_tag": "release-2026-09-24-c4fa9e65",
4
- "release_date": "2026-09-24T16:59:30Z",
5
- "release_sha": "c4fa9e65",
6
- "release_tag": "release-2026-09-24-c4fa9e65"
2
+ "version": "v1.5.2",
3
+ "marker_tag": "release-2026-09-24-4dc71e87",
4
+ "release_date": "2026-09-24T21:29:57Z",
5
+ "release_sha": "4dc71e87",
6
+ "release_tag": "release-2026-09-24-4dc71e87"
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tier": "lite",
3
3
  "manifest_version": "1.11.1",
4
- "generated_at": "2026-09-24T15:21:28Z",
4
+ "generated_at": "2026-09-24T21:01:31Z",
5
5
  "entries": [
6
6
  {
7
7
  "slug": "029-release-pipeline",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thebassclef/lite",
3
- "version": "1.9.1",
3
+ "version": "1.9.2",
4
4
  "description": "Bassclef CLI — install and upgrade bassclef in your project with two commands.",
5
5
  "keywords": [
6
6
  "bassclef",
@@ -8,7 +8,7 @@
8
8
  "cli",
9
9
  "scaffolding"
10
10
  ],
11
- "homepage": "https://github.com/sunj-labs/bassclef-cli",
11
+ "homepage": "https://docs.bassclef.dev",
12
12
  "repository": {
13
13
  "type": "git",
14
14
  "url": "git+https://github.com/sunj-labs/bassclef-cli.git"