All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.4.2 (2026-05-27)

Bug Fixes

  • cmd: redirect child stdin to /dev/null (74d663c)

Documentation

  • ex_doc: use README as package docs landing page (1e7d086)

0.4.1 (2026-05-27)

Refactor

  • bench: collapse telemetry handlers via record/3 (a39cc29)
  • cmd: expose decode_message/6 to cover the :DOWN branch (337410c)
  • config: extract validate_with/4 and memoize global keys (20d5ae0)
  • doctor: fold shim existence and mode into one File.stat (18e7374)
  • doctor: reuse Installer.managed?/1 and hook_names/0 (dfa93e9)
  • hooks/shell: drive expand/2 from a token table (102dbda)
  • mix/bench: route stage through Schema; derive table from @cols (302f620)
  • mix/run: drop unreachable print_failure catch-all (379d571)
  • schema: add parse_stage/1 for kebab-or-snake input (be8bdd0)

0.4.0 (2026-05-27)

Features

  • doctor: flag managed shims missing the executable bit (958d800)

Bug Fixes

  • cmd: return {msg, 127} for missing executables (61a6690)
  • hooks/test: scope :related with no matches no longer runs full suite (091b4b7)
  • mix/run: validate stage against Schema before atom conversion (8e4e7d0)
  • runner: honor fail_fast on parallel stage runs (831c6a2)

Performance

  • runner: precompile glob patterns once per hook (0fba30c)

Refactor

  • cmd: monitor the port to avoid wedging on detached stdio (5cd5f0c)
  • git: handle pre-push delete refs explicitly (f8b4b54)
  • hook: centralize merge_defaults helper (7b07fd8)
  • hooks/test: hoist map_to_test regexes to module attrs (5aeed59)
  • hooks: extract Helpers.to_result/1 for Cmd.run results (cebef86)
  • installer: truncate backup timestamp via DateTime.truncate (fd4c2ab)
  • runner: collapse serial result-ordering to single reverse (172530a)
  • runner: move config-error rendering to the mix task (ff40ace)

0.3.0 (2026-05-26)

Features

  • add mix git_hoox.bench for per-hook timing percentiles (3b4e7db)
  • emit telemetry around stages and hooks (578d69d)
  • shell: support {push_files} template token (1bc2add)
  • stream hook stdout live via GitHoox.Cmd (1438fcb)
  • telemetry: fire :hook :exception on timeout and crash (e51f2e2)

Bug Fixes

  • stop parallel hooks interleaving each other's stdout (8613f5c)
  • stop Shell hook running with empty token substitution (b82328f)

Refactor

  • drop unreachable error clauses in install + run tasks (c222e4f)

Documentation

  • shell: drop ex_doc reference to private invoke fn (f17f03c)

0.2.0 (2026-05-26)

Features

  • add mix git_hoox.doctor for setup diagnostics (5969d70)
  • add mix git_hoox.list to print resolved hook config (20ecd8a)
  • add workflow_dispatch pre-release workflow (fed34f8)
  • ci: support next-version prerelease channel (edd0ce1)
  • extract Glob module with StreamData property tests (c901d82)
  • validate hook-specific opts via opts_schema/0 callback (e33aa39)

Bug Fixes

  • ci: make prerelease atomic and trigger publish workflow (23bb0c9)
  • default Format glob to match nested files (d7334c3)

Documentation

  • add examples/ directory with sample custom hooks (e85b662)
  • link examples/ to GitHub to fix mix docs warning (8ccb436)

0.1.0 (2026-05-21)

Features

  • dispatch files per stage and enforce hook timeouts (d646a03)
  • forward :env opt to hook subprocesses (3c5b442)
  • initial version with hooks, runner, installer, and CI (22c259b)
  • scaffold a starter .git_hoox.exs via install --scaffold (d64f8b7)

Bug Fixes

  • ci: read version from mix.exs without booting mix (02428fb)
  • clear dialyzer warnings on uninstall path (30ee293)

Refactor

  • address credo --strict findings (b0e381e)

Documentation

  • add CLAUDE.md with commands and architecture overview (faa3157)
  • add GitHub funding metadata (971bcb5)
  • fix mix docs --warnings-as-errors (406ee8e)