Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions lib/hook-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,10 @@ hook::json_complete() {
# shell is exact where a version check would be a guess. Reading /dev/null hits
# EOF immediately, so a valid timeout produces no stderr at all. The probe is
# skipped for the default, which is known-good everywhere.
# Minimum 0.00001 s (10 µs): smaller positive values are a silent disable — the
# read returns before payload bytes arrive, same class as exact zero (#1883).
readonly HOOK_STDIN_READ_TIMEOUT_MIN_MICROS=10

hook::resolve_read_timeout() {
local t="${CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT:-2}"
if [[ "$t" != "2" ]]; then
Expand All @@ -569,6 +573,14 @@ hook::resolve_read_timeout() {
probe=$(read -r -t "$t" discard </dev/null 2>&1)
if ! [[ "$t" =~ ^[0-9]+(\.[0-9]+)?$ ]] || [[ "$t" =~ ^0+(\.0+)?$ ]] || [[ -n "$probe" ]]; then
t=2
elif [[ "$t" =~ ^([0-9]+)(\.([0-9]+))?$ ]]; then
local whole="${BASH_REMATCH[1]}" frac="${BASH_REMATCH[3]:-}"
frac="${frac}000000"
frac="${frac:0:6}"
local micros=$((10#$whole * 1000000 + 10#$frac))
Comment thread
kyle-sexton marked this conversation as resolved.
if ((micros < HOOK_STDIN_READ_TIMEOUT_MIN_MICROS)); then
t=2
fi
fi
fi
printf '%s' "$t"
Expand Down
32 changes: 32 additions & 0 deletions lib/hook-utils.test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,38 @@ for bs_bad in "abc" "0" "-1" "1e3" ""; do
rm -f "$bs_rc_file" "$bs_out_file" "$bs_err_file"
done

# Sub-minimum positive values are a silent disable — same class as exact zero (#1883).
for bs_submin in "0.0000001" "0.000001"; do
bs_rc_file="$(mktemp)"
bs_out_file="$(mktemp)"
bs_err_file="$(mktemp)"
printf '{"ok":true}' | {
CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT="$bs_submin" hook::buffer_stdin \
>"$bs_out_file" 2>"$bs_err_file"
echo "$?" >"$bs_rc_file"
}
bs_rc=$(cat "$bs_rc_file")
if [[ "$bs_rc" == "0" ]] && [[ "$(cat "$bs_out_file")" == '{"ok":true}' ]] &&
[[ ! -s "$bs_err_file" ]]; then
ok "buffer_stdin: sub-minimum stdin_read_timeout '$bs_submin' → default"
else
fail "buffer_stdin sub-minimum timeout '$bs_submin': rc=$bs_rc"
fi
rm -f "$bs_rc_file" "$bs_out_file" "$bs_err_file"
done
resolved=$(CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT=0.00001 hook::resolve_read_timeout)
if [[ "$resolved" == "0.00001" ]]; then
ok "resolve_read_timeout: floor value 0.00001 is honored"
else
fail "resolve_read_timeout floor: got '$resolved' (expected 0.00001)"
fi
resolved=$(CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT=0.0000001 hook::resolve_read_timeout)
if [[ "$resolved" == "2" ]]; then
ok "resolve_read_timeout: below-floor value degrades to default"
else
fail "resolve_read_timeout below floor: got '$resolved' (expected 2)"
fi

# A VALID non-default value must still be honored — the guard must not collapse
# every setting to the default. 0.5 s against a producer that holds the pipe until
# the verdict is in, so the stall cannot lose a race with EOF.
Expand Down
2 changes: 1 addition & 1 deletion plugins/actionlint/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "actionlint",
"version": "0.8.6",
"version": "0.8.7",
"description": "Lint GitHub Actions workflow files on edit via actionlint, surfacing findings as advisory context.",
"author": {
"name": "Melodic Software",
Expand Down
6 changes: 6 additions & 0 deletions plugins/actionlint/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
All notable changes to the `actionlint` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.8.7]

### Changed

- **Synced `hook-utils.sh`:** refuse sub-minimum `stdin_read_timeout` values (#1883).

## [0.8.6]

### Changed
Expand Down
12 changes: 12 additions & 0 deletions plugins/actionlint/hooks/hook-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,10 @@ hook::json_complete() {
# shell is exact where a version check would be a guess. Reading /dev/null hits
# EOF immediately, so a valid timeout produces no stderr at all. The probe is
# skipped for the default, which is known-good everywhere.
# Minimum 0.00001 s (10 µs): smaller positive values are a silent disable — the
# read returns before payload bytes arrive, same class as exact zero (#1883).
readonly HOOK_STDIN_READ_TIMEOUT_MIN_MICROS=10

hook::resolve_read_timeout() {
local t="${CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT:-2}"
if [[ "$t" != "2" ]]; then
Expand All @@ -569,6 +573,14 @@ hook::resolve_read_timeout() {
probe=$(read -r -t "$t" discard </dev/null 2>&1)
if ! [[ "$t" =~ ^[0-9]+(\.[0-9]+)?$ ]] || [[ "$t" =~ ^0+(\.0+)?$ ]] || [[ -n "$probe" ]]; then
t=2
elif [[ "$t" =~ ^([0-9]+)(\.([0-9]+))?$ ]]; then
local whole="${BASH_REMATCH[1]}" frac="${BASH_REMATCH[3]:-}"
frac="${frac}000000"
frac="${frac:0:6}"
local micros=$((10#$whole * 1000000 + 10#$frac))
if ((micros < HOOK_STDIN_READ_TIMEOUT_MIN_MICROS)); then
t=2
fi
fi
fi
printf '%s' "$t"
Expand Down
2 changes: 1 addition & 1 deletion plugins/autonomy/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "autonomy",
"version": "0.16.4",
"version": "0.16.5",
"description": "Governed autonomous agent operation: role-topology, binding-seam, wiring-vs-advisor, telemetry, return-accounting, trigger-dispatch, per-work-class guardrail-matrix, standing-routine-catalog, and design-only runner-charter contracts for climbing the AI-adoption ladder, plus a guided-setup skill that discovers an adopting org's state, writes its schema-versioned binding, wires standards-pinned OTLP emission with a zero-cost file-artifact default, wires human-attested return capture at the task boundary, wires signal adapters with one governed dispatch entrypoint, binds the five-class guardrail matrix to an org's isolation substrates with an in-boundary live-validation probe before recording each fail-closed binding, and stands up standing-routine-catalog classes as scheduled temporal signal adapters behind the one governed queue with free scheduling defaults wired as reviewable changes and each routine's work-class mapping homed on the security surface.",
"author": {
"name": "Melodic Software",
Expand Down
6 changes: 6 additions & 0 deletions plugins/autonomy/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
All notable changes to the `autonomy` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.16.5]

### Changed

- **Synced `hook-utils.sh`:** refuse sub-minimum `stdin_read_timeout` values (#1883).

Versions 0.1.0–0.7.0 predate this file (introduced with 0.7.1); their history lives in the
merged work-package PRs (#333, #343, #356, #372, #377, #600, #676).

Expand Down
12 changes: 12 additions & 0 deletions plugins/autonomy/hooks/hook-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,10 @@ hook::json_complete() {
# shell is exact where a version check would be a guess. Reading /dev/null hits
# EOF immediately, so a valid timeout produces no stderr at all. The probe is
# skipped for the default, which is known-good everywhere.
# Minimum 0.00001 s (10 µs): smaller positive values are a silent disable — the
# read returns before payload bytes arrive, same class as exact zero (#1883).
readonly HOOK_STDIN_READ_TIMEOUT_MIN_MICROS=10

hook::resolve_read_timeout() {
local t="${CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT:-2}"
if [[ "$t" != "2" ]]; then
Expand All @@ -569,6 +573,14 @@ hook::resolve_read_timeout() {
probe=$(read -r -t "$t" discard </dev/null 2>&1)
if ! [[ "$t" =~ ^[0-9]+(\.[0-9]+)?$ ]] || [[ "$t" =~ ^0+(\.0+)?$ ]] || [[ -n "$probe" ]]; then
t=2
elif [[ "$t" =~ ^([0-9]+)(\.([0-9]+))?$ ]]; then
local whole="${BASH_REMATCH[1]}" frac="${BASH_REMATCH[3]:-}"
frac="${frac}000000"
frac="${frac:0:6}"
local micros=$((10#$whole * 1000000 + 10#$frac))
if ((micros < HOOK_STDIN_READ_TIMEOUT_MIN_MICROS)); then
t=2
fi
fi
fi
printf '%s' "$t"
Expand Down
2 changes: 1 addition & 1 deletion plugins/bash-format/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "bash-format",
"version": "0.7.6",
"version": "0.7.7",
"description": "Auto-format and lint shell scripts on edit via shfmt + ShellCheck, using the consuming repo's own .editorconfig and .shellcheckrc.",
"author": {
"name": "Melodic Software",
Expand Down
6 changes: 6 additions & 0 deletions plugins/bash-format/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
All notable changes to the `bash-format` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.7.7]

### Changed

- **Synced `hook-utils.sh`:** refuse sub-minimum `stdin_read_timeout` values (#1883).

## [0.7.6]

### Changed
Expand Down
12 changes: 12 additions & 0 deletions plugins/bash-format/hooks/hook-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,10 @@ hook::json_complete() {
# shell is exact where a version check would be a guess. Reading /dev/null hits
# EOF immediately, so a valid timeout produces no stderr at all. The probe is
# skipped for the default, which is known-good everywhere.
# Minimum 0.00001 s (10 µs): smaller positive values are a silent disable — the
# read returns before payload bytes arrive, same class as exact zero (#1883).
readonly HOOK_STDIN_READ_TIMEOUT_MIN_MICROS=10

hook::resolve_read_timeout() {
local t="${CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT:-2}"
if [[ "$t" != "2" ]]; then
Expand All @@ -569,6 +573,14 @@ hook::resolve_read_timeout() {
probe=$(read -r -t "$t" discard </dev/null 2>&1)
if ! [[ "$t" =~ ^[0-9]+(\.[0-9]+)?$ ]] || [[ "$t" =~ ^0+(\.0+)?$ ]] || [[ -n "$probe" ]]; then
t=2
elif [[ "$t" =~ ^([0-9]+)(\.([0-9]+))?$ ]]; then
local whole="${BASH_REMATCH[1]}" frac="${BASH_REMATCH[3]:-}"
frac="${frac}000000"
frac="${frac:0:6}"
local micros=$((10#$whole * 1000000 + 10#$frac))
if ((micros < HOOK_STDIN_READ_TIMEOUT_MIN_MICROS)); then
t=2
fi
fi
fi
printf '%s' "$t"
Expand Down
2 changes: 1 addition & 1 deletion plugins/biome-format/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "biome-format",
"version": "0.6.6",
"version": "0.6.7",
"description": "Auto-format and lint JS/TS/JSX/JSON on edit via Biome, only when a biome.json governs the repo \u2014 using the consuming repo's own Biome config.",
"author": {
"name": "Melodic Software",
Expand Down
6 changes: 6 additions & 0 deletions plugins/biome-format/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
All notable changes to the `biome-format` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.6.7]

### Changed

- **Synced `hook-utils.sh`:** refuse sub-minimum `stdin_read_timeout` values (#1883).

## [0.6.6]

### Changed
Expand Down
12 changes: 12 additions & 0 deletions plugins/biome-format/hooks/hook-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,10 @@ hook::json_complete() {
# shell is exact where a version check would be a guess. Reading /dev/null hits
# EOF immediately, so a valid timeout produces no stderr at all. The probe is
# skipped for the default, which is known-good everywhere.
# Minimum 0.00001 s (10 µs): smaller positive values are a silent disable — the
# read returns before payload bytes arrive, same class as exact zero (#1883).
readonly HOOK_STDIN_READ_TIMEOUT_MIN_MICROS=10

hook::resolve_read_timeout() {
local t="${CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT:-2}"
if [[ "$t" != "2" ]]; then
Expand All @@ -569,6 +573,14 @@ hook::resolve_read_timeout() {
probe=$(read -r -t "$t" discard </dev/null 2>&1)
if ! [[ "$t" =~ ^[0-9]+(\.[0-9]+)?$ ]] || [[ "$t" =~ ^0+(\.0+)?$ ]] || [[ -n "$probe" ]]; then
t=2
elif [[ "$t" =~ ^([0-9]+)(\.([0-9]+))?$ ]]; then
local whole="${BASH_REMATCH[1]}" frac="${BASH_REMATCH[3]:-}"
frac="${frac}000000"
frac="${frac:0:6}"
local micros=$((10#$whole * 1000000 + 10#$frac))
if ((micros < HOOK_STDIN_READ_TIMEOUT_MIN_MICROS)); then
t=2
fi
fi
fi
printf '%s' "$t"
Expand Down
2 changes: 1 addition & 1 deletion plugins/claude-ops/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "claude-ops",
"version": "0.31.2",
"version": "0.31.3",
"description": "Claude Code operations toolkit. Ten skills: inventory (read-only enumeration of the complete invocable surface \u2014 every built-in CLI command with aliases and hidden/gated status, every bundled skill, and every component of every installed plugin across all marketplaces; reads the shipped binary because upstream publishes no built-in command list, and carries an integrity verdict so a drifted build reports counts as floors rather than silently short totals), audit-install-state (read-only audit of the machine-scope ~/.claude installation directory and ~/.claude.json \u2014 full inventory split into an authored surface and rolled-up bulk trees, product-managed retention vs genuinely unmanaged state, filename-scheme resolution before any process-liveness check, and deliberate/mid-experiment detection; reports, never deletes), audit-performance (read-only slowness-diagnostic capture run at the moment the machine or a session feels slow \u2014 CLI version, retention-sweep health including the silent unparsable-settings pause, a timed census walk of the install tree as a sweep-cost proxy, active-session and plugin-fleet counts, a process census, and a bundled known-performance-issues reference; separates the three documented suspects \u2014 accumulated state, version regression, component bloat \u2014 and routes remediation out; reports, never mutates), observability (read locally captured telemetry \u2014 OTEL store, collector, hook-event JSONL, ccusage \u2014 with trend reports and store pruning), known-issues (search known Claude product GitHub bugs, check service health, maintain a persistent tracked-issue registry), changelog (ingest Claude Code changelog entries and integrate them into the current repo), plugins (bring a machine's plugin fleet current on demand \u2014 marketplace refresh, effective-scope updates including in-repo project/local installs, new-plugin install per policy, scope-divergence detection and explicit convergence), morning-brief (read-only gh-based operator morning view \u2014 queue-label counts, merge-ready PRs, parked decisions with their RECOMMENDED lines, and loop-lane telemetry freshness), lanes (start/restart/stop/status loop lanes as named background Claude Code sessions seeded from canonical prompt files, with per-lane model/effort, a repo-pull + marketplace-refresh launch step, and a consume-restarts action \u2014 an OS-schedulable reader that relaunches stopped lanes whose telemetry carries a restart_request), and a re-runnable setup action that settles where the known-issues registry lives. Plus a family of seven advisory *-audit telemetry-emitter hooks (API errors, config changes, instruction loads, permission denials, pre-compaction, skill usage, tool failures) that emit the shared hook-telemetry envelope, and a reference sink that maps envelopes into the hook-events.jsonl the observability skill reads.",
"author": {
"name": "Melodic Software",
Expand Down
6 changes: 6 additions & 0 deletions plugins/claude-ops/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
All notable changes to the `claude-ops` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.31.3]

### Changed

- **Synced `hook-utils.sh`:** refuse sub-minimum `stdin_read_timeout` values (#1883).

## [0.31.2]

### Changed
Expand Down
12 changes: 12 additions & 0 deletions plugins/claude-ops/hooks/hook-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,10 @@ hook::json_complete() {
# shell is exact where a version check would be a guess. Reading /dev/null hits
# EOF immediately, so a valid timeout produces no stderr at all. The probe is
# skipped for the default, which is known-good everywhere.
# Minimum 0.00001 s (10 µs): smaller positive values are a silent disable — the
# read returns before payload bytes arrive, same class as exact zero (#1883).
readonly HOOK_STDIN_READ_TIMEOUT_MIN_MICROS=10

hook::resolve_read_timeout() {
local t="${CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT:-2}"
if [[ "$t" != "2" ]]; then
Expand All @@ -569,6 +573,14 @@ hook::resolve_read_timeout() {
probe=$(read -r -t "$t" discard </dev/null 2>&1)
if ! [[ "$t" =~ ^[0-9]+(\.[0-9]+)?$ ]] || [[ "$t" =~ ^0+(\.0+)?$ ]] || [[ -n "$probe" ]]; then
t=2
elif [[ "$t" =~ ^([0-9]+)(\.([0-9]+))?$ ]]; then
local whole="${BASH_REMATCH[1]}" frac="${BASH_REMATCH[3]:-}"
frac="${frac}000000"
frac="${frac:0:6}"
local micros=$((10#$whole * 1000000 + 10#$frac))
if ((micros < HOOK_STDIN_READ_TIMEOUT_MIN_MICROS)); then
t=2
fi
fi
fi
printf '%s' "$t"
Expand Down
2 changes: 1 addition & 1 deletion plugins/context-guard/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "context-guard",
"version": "0.7.4",
"version": "0.7.5",
"description": "Per-session context-window observability plus the first shipped consumer: a statusline wrapper tees each session's context_window fields to a per-session snapshot file, a zone resolver classifies usage into smart/acceptable/dumb bands (percentage bands plus window-class token bands, conservative-min combination, zones.json SSOT with shipped defaults), a reader contract fixes how consuming sessions interpret the snapshots, and zone-crossing hooks report once per transition into a worse zone across two channels \u2014 the continuation menu to the operator, who owns that choice, and to the model only the zone determination plus the counter-steer that a zone word is not a decay signal (advisory by default; an optional blocking mode gates new mutating work on a fresh dumb-zone snapshot with handoff-writing exempt), with a PostCompact hook persisting an evidence-degraded marker.",
"author": {
"name": "Melodic Software",
Expand Down
6 changes: 6 additions & 0 deletions plugins/context-guard/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to the `context-guard` plugin.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.7.5]

### Changed

- **Synced `hook-utils.sh`:** refuse sub-minimum `stdin_read_timeout` values (#1883).

## [0.7.4]

### Changed
Expand Down
12 changes: 12 additions & 0 deletions plugins/context-guard/hooks/hook-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,10 @@ hook::json_complete() {
# shell is exact where a version check would be a guess. Reading /dev/null hits
# EOF immediately, so a valid timeout produces no stderr at all. The probe is
# skipped for the default, which is known-good everywhere.
# Minimum 0.00001 s (10 µs): smaller positive values are a silent disable — the
# read returns before payload bytes arrive, same class as exact zero (#1883).
readonly HOOK_STDIN_READ_TIMEOUT_MIN_MICROS=10

hook::resolve_read_timeout() {
local t="${CLAUDE_PLUGIN_OPTION_STDIN_READ_TIMEOUT:-2}"
if [[ "$t" != "2" ]]; then
Expand All @@ -569,6 +573,14 @@ hook::resolve_read_timeout() {
probe=$(read -r -t "$t" discard </dev/null 2>&1)
if ! [[ "$t" =~ ^[0-9]+(\.[0-9]+)?$ ]] || [[ "$t" =~ ^0+(\.0+)?$ ]] || [[ -n "$probe" ]]; then
t=2
elif [[ "$t" =~ ^([0-9]+)(\.([0-9]+))?$ ]]; then
local whole="${BASH_REMATCH[1]}" frac="${BASH_REMATCH[3]:-}"
frac="${frac}000000"
frac="${frac:0:6}"
local micros=$((10#$whole * 1000000 + 10#$frac))
if ((micros < HOOK_STDIN_READ_TIMEOUT_MIN_MICROS)); then
t=2
fi
fi
fi
printf '%s' "$t"
Expand Down
2 changes: 1 addition & 1 deletion plugins/desktop-notification/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "desktop-notification",
"version": "0.6.6",
"version": "0.6.7",
"description": "Alert you when Claude Code needs input \u2014 an audible terminal bell, an OSC 9 terminal notification, and an OS-native toast (macOS/Linux) on permission and idle prompts.",
"author": {
"name": "Melodic Software",
Expand Down
6 changes: 6 additions & 0 deletions plugins/desktop-notification/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
All notable changes to the `desktop-notification` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.6.7]

### Changed

- **Synced `hook-utils.sh`:** refuse sub-minimum `stdin_read_timeout` values (#1883).

## [0.6.6]

### Changed
Expand Down
Loading
Loading