Skip to content

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.frames and spinner.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_named is set. Minimum herdr version is 0.9.2.
  • Plugin manifest and pure label and icon logic (#4):
  • Icon presets ask, symbols, emoji, nerd and custom.
  • A leading icon of any preset is stripped before a new one is added.
  • Per-state icons overrides, separator and include_auto_named in config.json.
  • An invalid config.json keeps 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_named defaults to false.
  • Control actions (#6):
  • Actions toggle, off, refresh and cycle-preset; bin/ctl.js also has start, stop, on and status.
  • Singleton pidfile lock.
  • off and SIGTERM restore the tab names; a startup hook starts the daemon and strips stale icons.
  • cycle-preset writes preset into config.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.