processmanager 0.6.0

manage process lifecycles, graceful shutdown and process faults
Documentation
# Changelog

All notable changes to this project will be documented in this file.
This project adheres to [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
and its version numbers follow [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [0.6.0] – 2026-04-07

### Added
- GitHub Actions workflow for CI (`build`, `clippy`, `fmt`, full test-matrix,
  feature power-set).
- `CHANGELOG.md` with Keep-a-Changelog layout.
- Optional `tracing` span around every child process (requires `tracing` feature).
- Cached vector of child `ProcessControlHandler`s for allocation-free broadcast.
- Architecture diagram (Mermaid) in `README.md`.
- `Custom(Box<dyn Any>)` variant to `RuntimeControlMessage` for future
  extensibility.
- **Fluent `ProcessManagerBuilder`** allowing compile-time safe setup and
  configuration.
- `.name("…")` builder method and internal plumbing for custom supervisor
  names.
- `AGENTS.md` contribution policy with mandatory issue-linked branch naming
  scheme (`<type>/<issue-id>-<short-kebab-description>`).
- `AGENTS.md` PR title convention (no coding-agent/tool tags) and mandatory
  `git pull --ff-only origin main` before branch creation (`#32`).
- Regression test coverage for runtime coordination contracts now explicitly
  includes the `add()` pre-start panic behavior (`#28`).
- `RunnableWithContext`, `RuntimeContext`, and
  `with_runtime_context(...)` so runnables can consume runtime
  control/ticker context without carrying a `RuntimeGuard` field (`#21`).
- New `axum` example showing how to run a web server under `ProcessManager`
  with graceful shutdown and reload handling (`#11`).
- Release process documentation and release issue template for standardized
  versioned publish workflows (`#47`).

### Changed
- `process_handle()` now returns `Arc<dyn ProcessControlHandler>` (cheap cloning,
  no double boxing).
- Default `process_name()` no longer allocates; returns `Cow<'static, str>`.
- `ProcessManager` constructors **deprecated** in favour of the new builder;
  `new()`, `manual_cleanup()` and `auto_cleanup()` now issue warnings.
- Busy-wait loops in `RuntimeGuard` replaced with `Notify`-based signalling.
- Child panic handling now caught with `catch_unwind`, ensuring supervisor
  never hangs.
- All examples, doctests and integration tests migrated to the builder API
  (no more deprecation warnings in user-facing code).
- Internal channels refactored to remove extra locks (use of `OnceCell`).
- `ProcessManagerBuilder::shutdown_grace_period(...)` now allows configuring
  shutdown grace timeout instead of relying on a fixed 30s value (`#17`).
- `ProcessManager::add` docs now match runtime behavior: calling `add` before
  startup panics and `insert` must be used during setup (`#26`).
- CI now executes `simple`, `dynamic_add`, and `restart_supervisor` examples
  with bounded runtimes to catch regressions in sample programs (`#37`).
- CI now also executes the `runtime_context` example to keep the
  context-based runnable API covered (`#21`).
- CI now executes the `axum` example to keep web-framework integration sample
  code validated (`#11`).
- Added tag-driven `Release` workflow to validate, publish to crates.io, and
  create GitHub releases from changelog sections (`#47`).
- Added `RestartSupervisor` with configurable exponential backoff to
  automatically restart failed child runnables (`#19`).

### Fixed
- Active-child counter accuracy under edge conditions (spawn panics).
- Numerous doc examples updated for new APIs.
- Runtime control messages sent before ticker initialization are now retained
  and delivered once the ticker is created (`#24`).
- `ProcessManager` shutdown now waits for child task termination before
  returning; children are aborted after grace timeout (`#23`).
- `ProcessManager` reload fanout now dispatches in parallel, matching documented
  behavior (`#25`).
- `RuntimeHandle` now supports forwarding arbitrary control messages, including
  `RuntimeControlMessage::Custom(...)`, via `control(...)` and `custom(...)`
  helpers (`#20`).
- `RuntimeControlMessage::Custom(...)` is now clone-safe and no longer panics
  when cloned (`#27`).
- `RuntimeGuard` now supports reliable restart cycles (`start, shutdown, start`)
  by retrying control-message delivery across ticker generations (`#18`).

### Removed
- Unused aliases and imports producing compiler warnings.

---

## [0.4.1] – 2024-04-19
Removed dependency to `async_trait`.