Changelog¶
All notable changes to this project are documented here. The format follows Keep a Changelog, and the project uses semantic versioning.
0.2.0 — 2026-11-01¶
The professional-repo release: CI, a herdr smoke test and weekly canary, a docs site, tag-driven releases and demo media, plus the on/off fix and an optional spinner.
Added¶
- Optional working spinner:
spinner.enabled(off by default),spinner.framesandspinner.interval_ms(at least 1000 ms). One timer drives every working tab; each frame is a tab rename (#9). - CI on every push to main and every PR: node --test on Node 18, 20 and 22 on Linux and macOS, plus a version-consistency check (scripts/check-version.js) (#18).
- herdr smoke test in CI against the minimum and the latest herdr (scripts/smoke.sh, smoke.yml) and a weekly canary that opens a herdr-compat issue when the latest herdr breaks cowbell (#19).
- Release workflow: pushing a vX.Y.Z tag verifies the versions, runs the tests and publishes a GitHub release with that version's CHANGELOG section as the notes (#22).
- Docs site at https://dvoraj75.github.io/herdr-cowbell/ built with mkdocs-material and deployed from main; the ci.yml docs job builds it with --strict on every PR (#21).
- Short README front page (badges, hero GIF, pitch, install, quickstart, links to the docs) and community files: CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, SUPPORT, issue forms and a PR template (#24).
Fixed¶
- Cowbell: on/off now starts cowbell when no daemon runs, whatever the saved setting says; the first press after install shows icons instead of switching off (#23).
0.1.0 — 2026-10-30¶
First release.
Added¶
- Sandbox spike (#3): the herdr facts the design depends on were verified against a sandbox server. Decided there that auto-named tabs are left alone unless
include_auto_namedis set. Minimum herdr version is 0.9.2. - Plugin manifest and pure label and icon logic (#4):
- Icon presets
ask,symbols,emoji,nerdandcustom. - A leading icon of any preset is stripped before a new one is added.
- Per-state
iconsoverrides,separatorandinclude_auto_namedinconfig.json. - An invalid
config.jsonkeeps the last good config (defaults if there is none). - Socket client and daemon (#5):
- Two event subscriptions and a full resync.
- 100 ms debounce, and suppression of cowbell's own rename events.
- Done clears when the tab has been seen.
- Reconnect backoff from 0.5 s to 30 s; the daemon exits after 120 s without a server.
- Atomic
state.json. - Auto-named tabs detected by 1-based position;
include_auto_nameddefaults to false. - Control actions (#6):
- Actions
toggle,off,refreshandcycle-preset;bin/ctl.jsalso hasstart,stop,onandstatus. - Singleton pidfile lock.
offand SIGTERM restore the tab names; a startup hook starts the daemon and strips stale icons.cycle-presetwritespresetintoconfig.json.- Edge-case hardening (#7):
- The startup hook replaces an old daemon.
- Rename-fight cool-down: a tab that another plugin keeps renaming is left alone for 60 s, doubling per repeat up to 15 min.
- A 60 s heartbeat self-check restores the tab names and exits when the plugin is disabled or removed.
Known limitations¶
See Known limitations in the docs. The spinner options are validated but have no effect in this release.