@thebassclef/lite 1.5.1 → 1.7.0
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/README.md +1 -1
- package/dist/cli.cjs +237 -3
- package/dist/cli.js +238 -4
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/bassclef-orientation.md +27 -0
- package/dist/lite/.claude/hooks/session-reflection.d/70-recent-strategic-artifacts.sh +4 -2
- package/dist/lite/.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh +4 -2
- package/dist/lite/.claude/hooks/session-reflection.d/80-workflow-staleness.sh +3 -1
- package/dist/lite/.claude/hooks/session-reflection.d/81-hook-manifest-staleness.sh +21 -0
- package/dist/lite/.claude/hooks/session-reflection.d/95-settings-hook-verify.sh +14 -11
- package/dist/lite/.claude/hooks/session-reflection.sh +23 -14
- package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +25 -6
- package/dist/lite/.claude/settings.json +5 -1
- package/dist/lite/.claude/skills/longrun/SKILL.md +23 -6
- package/dist/lite/bassclef-version.json +7 -0
- package/dist/lite/gitignore +8 -0
- package/dist/lite/lib/mechanism-fidelity.sh +34 -4
- package/dist/lite/lib/source-graph-walker.sh +29 -2
- package/dist/lite/presence/cli/bassclef-statusline.dispatcher.sh +78 -0
- package/dist/lite/presence/cli/bassclef-statusline.sh +78 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +41 -0
- package/dist/lite/standards/lite-manifest.json +22 -14
- package/dist/lite/standards/session-start-banner-discipline.md +99 -0
- package/package.json +3 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"tier": "lite",
|
|
3
|
-
"manifest_version": "1.9.
|
|
4
|
-
"generated_at": "2026-09-
|
|
3
|
+
"manifest_version": "1.9.11",
|
|
4
|
+
"generated_at": "2026-09-22T06:14:43Z",
|
|
5
5
|
"entries": [
|
|
6
6
|
{
|
|
7
7
|
"slug": "029-release-pipeline",
|
|
@@ -216,7 +216,7 @@
|
|
|
216
216
|
"type": "hook",
|
|
217
217
|
"path": ".claude/hooks/session-reflection.d/70-recent-strategic-artifacts.sh",
|
|
218
218
|
"tier": "lite",
|
|
219
|
-
"content_hash": "sha256:
|
|
219
|
+
"content_hash": "sha256:3b5d8edc239d19f3b8d42dde3302a7bbd122d8ddfd5378643bec6414e4a8a3c2",
|
|
220
220
|
"description": "Recent Strategic Artifacts — session-start branch of artifact-ingestion gate."
|
|
221
221
|
},
|
|
222
222
|
{
|
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
"type": "hook",
|
|
233
233
|
"path": ".claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh",
|
|
234
234
|
"tier": "lite",
|
|
235
|
-
"content_hash": "sha256:
|
|
235
|
+
"content_hash": "sha256:fa72927b90d4f6f57733249f41f2353f930b84c18003c53f7a15c98eb8045e45",
|
|
236
236
|
"description": "Hook heartbeat check — reads standards/hook-cadence.json, calls"
|
|
237
237
|
},
|
|
238
238
|
{
|
|
@@ -240,7 +240,7 @@
|
|
|
240
240
|
"type": "hook",
|
|
241
241
|
"path": ".claude/hooks/session-reflection.d/80-workflow-staleness.sh",
|
|
242
242
|
"tier": "lite",
|
|
243
|
-
"content_hash": "sha256:
|
|
243
|
+
"content_hash": "sha256:c8eb12402268851aa7a6fee69ac3a2e370c64ea67dcf78795067fb321cacc2a3",
|
|
244
244
|
"description": "Workflow-staleness — surfaces silent bassclef workflow failures at"
|
|
245
245
|
},
|
|
246
246
|
{
|
|
@@ -248,7 +248,7 @@
|
|
|
248
248
|
"type": "hook",
|
|
249
249
|
"path": ".claude/hooks/session-reflection.d/81-hook-manifest-staleness.sh",
|
|
250
250
|
"tier": "lite",
|
|
251
|
-
"content_hash": "sha256:
|
|
251
|
+
"content_hash": "sha256:f4db0541d27a06e3f94ba557e7c8a39e747601b8ca9fd7af7313891b69548afd",
|
|
252
252
|
"description": "Hook manifest staleness — flags standards/hook-cadence.json when it"
|
|
253
253
|
},
|
|
254
254
|
{
|
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
"type": "hook",
|
|
281
281
|
"path": ".claude/hooks/session-reflection.d/95-settings-hook-verify.sh",
|
|
282
282
|
"tier": "lite",
|
|
283
|
-
"content_hash": "sha256:
|
|
283
|
+
"content_hash": "sha256:5f2a66f82c947105029074da84428fa7c6d591c88200fd9b7e957f37138d09a6",
|
|
284
284
|
"description": "Settings hook path verifier — fires at every SessionStart via"
|
|
285
285
|
},
|
|
286
286
|
{
|
|
@@ -592,7 +592,7 @@
|
|
|
592
592
|
"type": "hook",
|
|
593
593
|
"path": ".claude/hooks/session-reflection.sh",
|
|
594
594
|
"tier": "lite",
|
|
595
|
-
"content_hash": "sha256:
|
|
595
|
+
"content_hash": "sha256:5d06b68d7503922cd3f5143ed2d83ec4e12c5d8e6f16822efcf2c702f49ed5b9",
|
|
596
596
|
"description": "Session Start hook coordinator. Injects reflection prompt and iterates"
|
|
597
597
|
},
|
|
598
598
|
{
|
|
@@ -824,7 +824,7 @@
|
|
|
824
824
|
"type": "lib",
|
|
825
825
|
"path": "lib/mechanism-fidelity.sh",
|
|
826
826
|
"tier": "lite",
|
|
827
|
-
"content_hash": "sha256:
|
|
827
|
+
"content_hash": "sha256:8afeac2e42bd7fb281cda9be94395e272092857f8a8e431350b8c8673578bcf5",
|
|
828
828
|
"description": "lib/mechanism-fidelity.sh — shared scanner for the mechanism-fidelity"
|
|
829
829
|
},
|
|
830
830
|
{
|
|
@@ -880,7 +880,7 @@
|
|
|
880
880
|
"type": "lib",
|
|
881
881
|
"path": "lib/source-graph-walker.sh",
|
|
882
882
|
"tier": "lite",
|
|
883
|
-
"content_hash": "sha256:
|
|
883
|
+
"content_hash": "sha256:350a3356243a2e7943e9f02d9272db58488ee72abac515e56c7690d665b1a0fd",
|
|
884
884
|
"description": "lib/source-graph-walker.sh — walks source-graph closure from a seed hook"
|
|
885
885
|
},
|
|
886
886
|
{
|
|
@@ -1326,7 +1326,7 @@
|
|
|
1326
1326
|
"type": "root-doc",
|
|
1327
1327
|
"path": ".claude/bassclef-orientation.md",
|
|
1328
1328
|
"tier": "lite",
|
|
1329
|
-
"content_hash": "sha256:
|
|
1329
|
+
"content_hash": "sha256:657e68fe29c52aaf9dd54ff752cf6f69498543484e4a764db89ba9837c0d9436"
|
|
1330
1330
|
},
|
|
1331
1331
|
{
|
|
1332
1332
|
"slug": "claude-lite",
|
|
@@ -1629,7 +1629,7 @@
|
|
|
1629
1629
|
"type": "rule",
|
|
1630
1630
|
"path": ".claude/rules/longrun-prep-plan-doc-compression.md",
|
|
1631
1631
|
"tier": "lite",
|
|
1632
|
-
"content_hash": "sha256:
|
|
1632
|
+
"content_hash": "sha256:c2c661c14988b3b0469c357fdda5600d9a4e9f237087c5b348c263d9a0e6c862",
|
|
1633
1633
|
"description": "When a plan doc at docs/next-session-plan-*.md (modified within 48 hours) carries a ## Recommended session sequence (or equivalent) section, /longrun prep MUST skip the full Steps…"
|
|
1634
1634
|
},
|
|
1635
1635
|
{
|
|
@@ -2572,7 +2572,7 @@
|
|
|
2572
2572
|
"type": "skill",
|
|
2573
2573
|
"path": ".claude/skills/longrun/SKILL.md",
|
|
2574
2574
|
"tier": "lite",
|
|
2575
|
-
"content_hash": "sha256:
|
|
2575
|
+
"content_hash": "sha256:1ab5a98d5ea805249761e092c7c8c8523eb3cd7ce53e6d89790d01e767a3df4b",
|
|
2576
2576
|
"description": "Run a long autonomous session that paces itself. Prepares scope. Checkpoints at phase boundaries. Closes with session log and retrospective. Three modes: prep, checkpoint, closeout.",
|
|
2577
2577
|
"composes_with": [
|
|
2578
2578
|
"value-prop",
|
|
@@ -3737,7 +3737,7 @@
|
|
|
3737
3737
|
"type": "standard",
|
|
3738
3738
|
"path": "standards/lite-manifest-schema-changes.md",
|
|
3739
3739
|
"tier": "lite",
|
|
3740
|
-
"content_hash": "sha256:
|
|
3740
|
+
"content_hash": "sha256:17f5c69efd97240348b6f74d35b200400c2817f7e303eb288b027fbb2bb38991",
|
|
3741
3741
|
"description": "Chronological ledger of every lite-manifest schema change. Adopters read this before sync to know what shifted."
|
|
3742
3742
|
},
|
|
3743
3743
|
{
|
|
@@ -3972,6 +3972,14 @@
|
|
|
3972
3972
|
"content_hash": "sha256:eb3ef832175ed745c412ca42f9ad854d0a298b828e647706547dcded15e2e32a",
|
|
3973
3973
|
"description": "The session-board is a session-level coordinator artifact for multi-bet longrun sessions."
|
|
3974
3974
|
},
|
|
3975
|
+
{
|
|
3976
|
+
"slug": "session-start-banner-discipline",
|
|
3977
|
+
"type": "standard",
|
|
3978
|
+
"path": "standards/session-start-banner-discipline.md",
|
|
3979
|
+
"tier": "lite",
|
|
3980
|
+
"content_hash": "sha256:444a6f20be6bd175dabb06b8aedb527b9c93525786df0386fd785d1821451a4e",
|
|
3981
|
+
"description": "Four-level banner palette for session-start checks. Per Norman signifier + Cooper Sam persona consult. Match glyph to state."
|
|
3982
|
+
},
|
|
3975
3983
|
{
|
|
3976
3984
|
"slug": "sibling-validation-checklist",
|
|
3977
3985
|
"type": "standard",
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: Four-level banner palette for session-start checks. Per Norman signifier + Cooper Sam persona consult. Match glyph to state.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Session-start banner discipline
|
|
7
|
+
|
|
8
|
+
Session-start checks in `.claude/hooks/session-reflection.d/` emit banners that adopters read before any tool call runs. The banner shape trains the reader's expectation. A 🛑 emoji for an advisory check reads to a first-run adopter as "you broke something." That is a signifier mismatch (Norman) and a Cooper Sam-persona failure at the magic-demo boundary.
|
|
9
|
+
|
|
10
|
+
This standard names a four-level palette. Each check picks the level that matches its own state.
|
|
11
|
+
|
|
12
|
+
## The four levels
|
|
13
|
+
|
|
14
|
+
| Level | Glyph | Text label | When to use |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| BLOCK | 🛑 | BLOCKED | The session cannot safely proceed with substantive work. Real defect. Missing prerequisite. Active drift that will corrupt state. |
|
|
17
|
+
| ADVISORY | ⚠ | ADVISORY | Context worth reading. Session may proceed. The operator is informed; they choose whether to act now or later. |
|
|
18
|
+
| INFO | ℹ | INFO | State report. No action needed. Fires only when the reader benefits from knowing the state. |
|
|
19
|
+
| silent-on-clean | — | — | Check runs but reports nothing when state is nominal. Fires only on non-nominal state (which routes to one of the three above). |
|
|
20
|
+
|
|
21
|
+
Every check picks exactly one level. Ambiguous cases default to silent-on-clean.
|
|
22
|
+
|
|
23
|
+
## How to pick
|
|
24
|
+
|
|
25
|
+
Ask two questions in order.
|
|
26
|
+
|
|
27
|
+
1. **Does this check indicate the session cannot safely proceed?** If yes, BLOCK. Cannot-proceed means: writing code now will corrupt state, or will ship a broken change, or will silently defeat a safety mechanism. Missing bassclef-sync template drift. Failing pre-commit gate. Schema validation error. These block.
|
|
28
|
+
2. **Does the reader gain value from knowing about this now?** If yes, ADVISORY or INFO. ADVISORY when the reader may want to act (read the artifact, address the drift). INFO when it is pure state (last save time, current branch). If no, silent-on-clean.
|
|
29
|
+
|
|
30
|
+
Default to silent-on-clean when in doubt. Every advisory or info banner spends the reader's attention. Spend it on things they benefit from.
|
|
31
|
+
|
|
32
|
+
## Signifier discipline (Norman)
|
|
33
|
+
|
|
34
|
+
The glyph is a signifier — a perceivable cue that suggests state. The signifier fit is:
|
|
35
|
+
|
|
36
|
+
- 🛑 signals "stop; something is wrong." Use only when something is wrong.
|
|
37
|
+
- ⚠ signals "look here; think." Use for context worth reading that does not block.
|
|
38
|
+
- ℹ signals "state report." Use when the state itself is the payload.
|
|
39
|
+
|
|
40
|
+
Pairing glyph with text label (BLOCKED / ADVISORY / INFO) protects screen readers, CI log parsers, and readers who read faster than they see. The text is the primary signifier; the glyph is data-ink that reinforces the level.
|
|
41
|
+
|
|
42
|
+
## Sam persona discipline (Cooper)
|
|
43
|
+
|
|
44
|
+
Sam is a cold-adopter running bassclef for the first time. Sam's mental model: nothing about bassclef yet. Sam sees 🛑 and thinks "I broke the install." That is a persona failure.
|
|
45
|
+
|
|
46
|
+
Slice D applies the four-level palette so Sam's first-run reads context, not brokenness. Cure applies at every session-reflection.d fragment where the check is advisory. Fragments that indicate a real block keep 🛑.
|
|
47
|
+
|
|
48
|
+
**First-run adopter special case.** On the very first session (no prior state on disk), even advisory checks should default to silent-on-clean. A first-run adopter has no context to act on. Fire an ADVISORY only when the state is genuinely worth surfacing. The mechanism: check `LAST_SAVE_FILE` existence or session-timing marker count; skip advisory output on first-run unless the check is critical.
|
|
49
|
+
|
|
50
|
+
## Data-ink ratio (Tufte)
|
|
51
|
+
|
|
52
|
+
Each glyph maps 1:1 to a severity level. The glyph carries information the reader uses to prioritize. That is data-ink, not decoration. Emoji as decoration (a 🎉 at the head of a section) is chartjunk. Emoji as severity mark (🛑 for BLOCK, ⚠ for ADVISORY) is data-ink.
|
|
53
|
+
|
|
54
|
+
## Aggregate roll-up (session-end)
|
|
55
|
+
|
|
56
|
+
When session-start emits multiple banners, the reader benefits from a one-line summary at the end.
|
|
57
|
+
|
|
58
|
+
Format: `Session-start: N advisory, M info, K blocked.`
|
|
59
|
+
|
|
60
|
+
The roll-up prints only when count > 0 on any level. Fires from the last session-reflection.d fragment (name-sorted last). This slice ships the standard; the roll-up mechanism ships as follow-on.
|
|
61
|
+
|
|
62
|
+
## API — blocked_banner (session-reflection.sh)
|
|
63
|
+
|
|
64
|
+
The existing `blocked_banner` function in `.claude/hooks/session-reflection.sh` accepts a second argument for severity:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
blocked_banner "message body" blocking # 🛑 BLOCKED (default)
|
|
68
|
+
blocked_banner "message body" advisory # ⚠ ADVISORY
|
|
69
|
+
blocked_banner "message body" info # ℹ INFO
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Callers that pass one argument keep the historical shape (blocking). The 27 pre-existing sites are untouched.
|
|
73
|
+
|
|
74
|
+
Silent-on-clean checks skip the `blocked_banner` call entirely on nominal state.
|
|
75
|
+
|
|
76
|
+
## Migration path
|
|
77
|
+
|
|
78
|
+
This slice migrates three advisory-class fragments as exemplars:
|
|
79
|
+
|
|
80
|
+
- `.claude/hooks/session-reflection.d/70-recent-strategic-artifacts.sh`
|
|
81
|
+
- `.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh`
|
|
82
|
+
- `.claude/hooks/session-reflection.d/80-workflow-staleness.sh`
|
|
83
|
+
|
|
84
|
+
Remaining fragments migrate under a follow-on ticket. Each PR migrates one or a small set. The pattern is: pick the level per the two questions above, change the `blocked_banner "$MSG"` to `blocked_banner "$MSG" advisory` (or `info`), update the fragment's docstring to name the level.
|
|
85
|
+
|
|
86
|
+
## Composes with
|
|
87
|
+
|
|
88
|
+
- `.claude/rules/blocked-items.md` — BLOCK protocol; still fires at the blocking level
|
|
89
|
+
- `.claude/rules/artifact-ingestion.md` §"Session-start branch" — the 70-recent-strategic-artifacts fragment is advisory per this standard
|
|
90
|
+
- `.claude/rules/bassclef-hook-drift-blocker.md` — a real drift is BLOCK; a stale check is ADVISORY
|
|
91
|
+
- `@luminary donald-norman` — signifier fit
|
|
92
|
+
- `@luminary alan-cooper` — Sam persona at first-run
|
|
93
|
+
- `@luminary edward-tufte` — data-ink ratio for glyph-as-data
|
|
94
|
+
|
|
95
|
+
## Refs
|
|
96
|
+
|
|
97
|
+
- #1704 — the original consult ask (banner tone reads as broken to Sam)
|
|
98
|
+
- `.claude/hooks/session-reflection.sh` L84 — `blocked_banner` function
|
|
99
|
+
- `docs/canvases/2026-07-19-bassclef-lite.md` — Sam persona anchor for lite tier
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thebassclef/lite",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Bassclef CLI — install and upgrade bassclef in your project with two commands.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bassclef",
|
|
@@ -65,7 +65,8 @@
|
|
|
65
65
|
"typecheck": "tsc --noEmit",
|
|
66
66
|
"bump": "node scripts/bump-version.mjs",
|
|
67
67
|
"harness:npm-install": "vitest run --config vitest.harness.config.ts",
|
|
68
|
-
"prepublishOnly": "node scripts/prepublish-bundle-substrate.mjs"
|
|
68
|
+
"prepublishOnly": "node scripts/prepublish-bundle-substrate.mjs",
|
|
69
|
+
"install-hooks": "node scripts/install-git-hooks.mjs"
|
|
69
70
|
},
|
|
70
71
|
"devDependencies": {
|
|
71
72
|
"@types/node": "^20.14.0",
|