bassclef
What's new

Releases

What each bassclef release changed for adopters. Newest first.

Scan the table to answer "worth bumping?" Read the sections below for the release-by-release detail. Same source. Two views. Categories drive both.

VersionAdopter impactHeadlineWorth bumping?
v1.6.62026-09-28Saferetire compounding-axis compat shim symlinksYes
v1.6.52026-09-28Safecold-adopter timeout fix + /onboard-repo jargon cureYes
v1.6.42026-09-28Safestatusline hang fix + /longrun scope class taxonomyYes
v1.4.02026-09-22SafeThree cold-install fixes for the first five minutesYes
v1.0.02026-09-20Migration stepsMAJOR — cleaner adopter installDepends
v0.45.02026-09-18SafeSeven fixes surfaced by bassclef-cli sessionsYes

v1.6.6

Cures the context-bloat class named in bassclef-upstream#1989. Symlinks left behind by an earlier rename got double-counted by the harness at session start, inflating the loaded rule set for every adopter.

Full release notes on GitHub ↗.

v1.6.5

Two Q1 defects from peer defect hunt (bassclef-web + bassclef-cli) ship. Cold-adopter `/temperance` now completes under 120s. Docs.bassclef.dev shows plain descriptions on `/onboard-repo` where jargon used to bounce Sam and Louis.

Full release notes on GitHub ↗.

v1.6.4

Two fixes ship. The statusline pointer no longer hangs on TTY-attached invocation or self-loop. The adopter sync writes a state file the reader can consume. The `/longrun` skill adds a scope class taxonomy so per-ticket discipline scales with change class.

Full release notes on GitHub ↗.

v1.4.0

Three fixes for problems adopters hit in the first five minutes of a cold install. Each one fires only under the failing shape. Adopters not hitting the bug see no change.

Fresh install

  • Cold installs no longer show a false BLOCKED banner. The check for stale hooks used a directory to know how old the install was. But that directory only gets created after one hook fires. So a four-minute-old install with one hook fired reported six of seven critical hooks as "never fired." First-run adopters saw a scary red banner. The check now uses the oldest marker file to date the install, and waits 24 hours before flagging silent hooks. Set `FRESH_INSTALL_GRACE_SECONDS` to change the wait. Sources bassclef-upstream#1895.
  • Dispatcher stops complaining when bassclef is already on disk. The dispatcher used to try four ways to fetch bassclef code — peer directory, GitHub API, S3, git clone. None of them worked when the source repo was private. Every session showed "couldn't find bassclef substrate." Adopters read that as a broken install. The dispatcher now checks first whether `.claude/hooks/`, `.claude/rules/`, and `.claude/skills/` already have content. If they do, it exits quietly. Set `BASSCLEF_DISPATCHER_STRICT=1` if you want the old strict behavior for debugging. Sources bassclef-upstream#1849.

CLI + install shell

  • install.sh writes the right hook path. install.sh wrote a settings file pointing at `$HOME/.claude/hooks/bassclef-sync.sh`. But the hook file itself landed at the project directory, not at $HOME. The path in settings pointed nowhere, and the dispatcher never fired on cold install. install.sh now writes `$CLAUDE_PROJECT_DIR/.claude/hooks/bassclef-sync.sh` — matching where the hook file actually lives. Sources bassclef-upstream#1902.

Migration

If your `settings.json` has the old `$HOME` path, it still works today. Re-running install.sh will not add duplicates. To use the new path, open `.claude/settings.json` and change `$HOME/.claude/hooks/bassclef-sync.sh` to `$CLAUDE_PROJECT_DIR/.claude/hooks/bassclef-sync.sh`. Fresh installs get the right path automatically.

Why these are safe

Every fix fires only when the bug fires. Adopters who never hit the failure see no change. The grace window and the "already on disk" check are additive. The install-path change only affects fresh installs.

Full release notes on GitHub ↗.

v1.0.0

MAJOR release. The manifest that ships to adopters is now clearer about which files belong to the operator and which belong to the adopter. Three operator-only files no longer land in the lite bundle. 33 empty hook entries dropped out of the adopter settings template. 30 hardcoded operator paths were replaced with variables. `/onboard-repo` gained a top-up mode for existing repos.

Full release notes on GitHub ↗.

v0.45.0

Seven fixes surfaced by bassclef-cli sessions, plus one release pipeline fix. Each one fires only under the failing shape. Adopters not hitting the bug see no change.

Fresh install

  • Cold repos no longer show the red BLOCKED banner. A truly cold repo used to hit the red BLOCKED banner on first session. A new library, `lib/fresh-install-check.sh`, notices when the repo has no commits and no active session lock. The banner still fires when `docs/whereami.md` or a goal doc exists — that means you have already started work. Sources bassclef-cli#102.
  • Cold repos skip the "session crashed" banner. A cold repo no longer shows "ABRUPT STOP DETECTED" on first session. `bassclef init` skips the crash-recovery banner for a session that never existed. Sources bassclef-cli#108.

Substrate integrity

  • The CLI finds bassclef on disk in the right order. A new library, `lib/bassclef-dir-resolver.sh`, walks four candidate paths in order — peer checkout, `$HOME/bassclef`, bundled copy, and $CWD fallback. The old resolver was two lines and lost the bundled path. Sources bassclef-cli#105.
  • Hook wiring diff ignores the guard wrapper. The diff that compares your hook wiring against the shipped shape used to flag adopters who wrapped their hook lines with `[ -f "path" ] && ` and ` || true`. The diff now strips that prefix and suffix before comparing. Adopters using the guarded shape no longer see phantom "missing" reports. The empty banner is also suppressed when the missing list has zero entries. Sources bassclef-upstream#1742.

CLI + install shell

  • Clone failures name the real cause. A new library, `lib/clone-failure-classifier.sh`, reads the `git clone` error and picks one of four causes — auth, visibility, network, unknown. Each cause gets its own hint. Before this change, every failure banner said "Set up GitHub auth" — even when the real cause was a private repo you cannot see. The auth hint now reads: `Optional: set up GitHub auth to unlock full-tier sync — run: gh auth login`. Sources bassclef-cli#106.

Session start

  • textstat warning fires once per session, not per prompt. The textstat fallback warning used to fire once per prompt. It now fires once per session. `plain-english-steering.sh` writes a per-session marker under `$HOME/.claude/state/sessions/<id>/textstat-warned` so it does not repeat. Sources bassclef-cli#107.

Release pipeline

  • Drift check fires on more paths. The lite-manifest drift check now runs when files change under `lib/**` or when `scripts/build-adopter-tree.sh` changes. The old trigger missed edits to lib files that ship at lite.

Session-start signals restored at operator install

Two session-start signals used to go silent at operator install. `session-reflection.d/80-hook-heartbeat-check.sh` now checks the bundled `standards/` path first and falls back to `$BASSCLEF_DIR/standards/`. `session-reflection.d/81-hook-manifest-staleness.sh` uses the same fallback. Before this fix, both returned silently at operator install (where `$BASSCLEF_DIR` is `$HOME`, which has no `standards/`). Adopters never saw the stale-hook warning. Both hooks now declare `# install-class: dual`.

Release pipeline

The release PR body now auto-populates from `docs/release-notes/v<SEMVER>.md` via a new helper, `lib/build-release-pr-body.sh`. Sources bassclef-upstream#1614. `session-reflection.sh` creates `.claude/` before writing the session lock, so adopters in repos without a pre-existing `.claude/` no longer hit "No such file or directory" on session start. Sources bassclef-upstream#1730.

New hook at lite

`session-reflection.d/91-npm-version-drift.sh` is a new hook at lite tier. It warns when your installed `@thebassclef/lite` version drifts from what the pinned bassclef version expects.

Why these are safe

Every fix fires only when the bug fires. All seven cures use the pattern "check bundled path first" (ADR-056 D3). The two Phase A hooks both declare `# install-class: dual` (ADR-058). Adopters who never hit the failure see no change (ADR-031).

Full release notes on GitHub ↗.

© 2025–2026 Sunjay Pandey·Privacy·Apache-2.0 code