0.000026  2026-04-19 08:36:18-07:00 America/Los_Angeles

    - Split IPC::Manager::Client::SharedMem out into its own CPAN distribution (IPC-Manager-Client-SharedMem). The SharedMem module, its tests, the SysV configure-time probe, and the matching Makefile.PL / dist.ini shims no longer ship with IPC-Manager. Install IPC::Manager::Client::SharedMem separately if you need the SysV shared-memory protocol

0.000025  2026-04-19 06:33:45-07:00 America/Los_Angeles

    - Add optional $timeout argument to Service::Peer::ready(), Service::Handle::ready(), and the underlying Client::peer_active(). With no timeout the behavior is unchanged (one-shot check); with a timeout the call blocks until the peer becomes active or the timeout elapses. A timeout of 0 blocks indefinitely. Polls via IO::Select on the client's peer-change descriptor when available (inotify on FS-based protocols) and otherwise falls back to a 0.05s sleep-and-retry loop, replacing the 0.025s busy-wait in Service::State

0.000024  2026-04-18 14:57:47-07:00 America/Los_Angeles

    - Fix sync_request hang when a peer disappears mid-request: await_response now snapshots the peer at send time and croaks if the peer is fully removed from the bus before the response arrives. Suspend-capable protocols (those advertising suspend_supported) keep waiting across a clean suspend or a restart-under-a-new-pid because the response can still be delivered once the peer resumes — only full unregistration counts as "gone"
    - Add optional $timeout argument to sync_request() and await_response(); without it the behavior is unchanged (blocks indefinitely), with it the call croaks once the deadline elapses
    - Sweep orphaned Atomic::Pipe reassembly state when a peer leaves the bus: a new Client peer_left() hook (called from the service loop on peer-delta removal) lets AtomicPipe drop per-(pid, tid) parts/buffers entries belonging to dead peers instead of accumulating them forever

0.000023  2026-04-17 12:06:27-07:00 America/Los_Angeles

    - Strengthen SysV IPC configure-time probe: add concurrent-contention and rapid create/destroy phases to catch hosts where semop sporadically returns EINVAL only under load
    - Add kernel-limit probe that disables SharedMem when /proc/sys/kernel/sem or shmmni/shmmax are below workable minimums
    - Add persistence probe that disables SharedMem when an external reaper (systemd-logind RemoveIPC, ipcrm cronjob, cgroup IPC policy, etc.) destroys a freshly-created semaphore mid-probe
    - Detect systemd-logind RemoveIPC=yes without user linger and include it as a diagnostic hint in the install-time failure message

0.000022  2026-04-16 16:49:45-07:00 America/Los_Angeles

    - Reap children in the service loop via waitpid(-1, WNOHANG) so unrelated zombies are cleaned up
    - Add run_on_pid hook and on_pid service callback for reaped non-worker child processes
    - Add pids key to the watch() activity hash mapping reaped non-worker pid to exit value

0.000021  2026-04-16 07:18:10-07:00 America/Los_Angeles

    - Fill in missing Changes entries for 0.000020

0.000020  2026-04-16 01:09:03-07:00 America/Los_Angeles

    - Refactor Service::State to use Long::Jump instead of labelled redo
    - Disable SharedMem at install time when host SysV IPC is broken
    - Fix test_service_callbacks race waiting for on_peer_delta
    - Fix test_workers race where parent reads empty pid file

0.000019  2026-04-13 15:01:40-07:00 America/Los_Angeles

    - Add post_fork_hook to Role::Service and post_fork callback to Service for double-fork/daemonize support

0.000018  2026-04-12 02:20:35-07:00 America/Los_Angeles

    - Fix UnixSocket reads on FreeBSD: use recv() instead of diamond operator for SOCK_DGRAM sockets
    - Fix SharedMem semaphore EINVAL race: disconnect Handle client before Spawn destruction
    - Fix message ordering on systems with coarse Time::HiRes resolution
    - Add sort_messages to Client base class to centralize message sort logic

0.000017  2026-04-11 09:16:39-07:00 America/Los_Angeles

    - Fix on_general_message test race where file was observed before content was written

0.000016  2026-04-10 09:25:35-07:00 America/Los_Angeles

    - Fix Spawn shutdown race where fast services exit before wait() captures their PIDs

0.000015  2026-04-09 16:16:09-07:00 America/Los_Angeles

    - Use Cpanel::JSON::XS directly and lazily reinitialize to survive global destruction
    - Replace JSON::PP prereq with Cpanel::JSON::XS in dist.ini
    - Fix Spawn::wait() to waitpid child processes before destroying shared resources
    - Add debug flag to Spawn, reduce test suite noise

0.000014  2026-04-08 14:58:59-07:00 America/Los_Angeles

    - Refactor viable() into base-class wrapper around _viable() so it never throws
    - Fix DB tests failing to skip when DBI is too old
    - Fix DB viable() not detecting missing server binaries (initdb, mysqld, etc.)
    - Fix inotify tests failing when Linux::Inotify2 < 2.3 is installed
    - Enforce Atomic::Pipe minimum version 0.022 in viable check and tests
    - Add JSON::PP prereq, remove unused Sub::Util, fix IO::Select version in dist.ini
    - Add 180-second timeout with stack trace to integration tests

0.000013  2026-04-08 08:14:28-07:00 America/Los_Angeles

    - Fix SQLite DEFAULT FALSE incompatibility with older SQLite versions
    - Fix UnixSocket broadcast test race on FreeBSD and older Linux kernels

0.000012  2026-04-07 16:36:22-07:00 America/Los_Angeles

    - Fix JSONFile cache staleness detection when Linux::Inotify2 is absent
    - JSONFile now requires either Linux::Inotify2 or Digest::SHA (recommended dep)
    - Split inotify-affected tests into Inotify/NoInotify variants

0.000011  2026-04-05 14:10:41-07:00 America/Los_Angeles

    - Reintegrate DBI and UnixSocket clients back into this dist
    - Add JSONFile client
    - Add SharedMemory client, rename InMemory to LocalMemory
    - Add exec-services feature and refactor tests
    - Fix DBI clients: blob handling, viable() checks, message ordering, SQLite timestamps
    - Fix UnixSocket client: add version requirement and suspend_supported method
    - Fix error propagation when requests cause errors
    - Various bugfixes for hidden errors
    - Add unit and integration tests for DBI and UnixSocket clients
    - Add documentation
    - Require newer DBIx::QuickDB

0.000010  2026-04-01 16:34:06-07:00 America/Los_Angeles

    - Break DBI and UnixSocket clients into their own dists

0.000009  2026-03-30 11:07:14-07:00 America/Los_Angeles

    - Skip postgresql tests on systems without initdb

0.000008  2026-03-29 09:37:55-07:00 America/Los_Angeles

    - Remove leftover debugging

0.000007  2026-03-28 12:05:47-07:00 America/Los_Angeles

    - Fix issues with listed deps

0.000006  2026-03-26 19:18:54-07:00 America/Los_Angeles

    - Introduce 'Service' feature

0.000005  2026-02-23 19:54:20-08:00 America/Los_Angeles

    - Fix Linux::Inotify dep in test
    - Fix SQLite dep in test

0.000004  2026-02-23 10:49:55-08:00 America/Los_Angeles

    - Fix UnixSocket issues usually seen on BSD

0.000003  2026-02-19 20:41:21-08:00 America/Los_Angeles

    - Add IO::Select and handle capabilities where possible
    - Possibly fix UnixSocket

0.000002  2026-02-19 18:57:37-08:00 America/Los_Angeles

    - Attempt to add debugging for UnixSocket issues

0.000001  2025-12-31 20:40:44-08:00 America/Los_Angeles

    - Initial Release
