# Changelog
## Unreleased
## v0.1.0-beta.7 - 2026-06-28
- Added TOML structured config support through `toml/2`, including deterministic rendering and public-path drift comparison.
- Added `mix host_kit.clean` for explicit, inspectable release-retention cleanup from existing release metadata.
- Recorded release metadata from `release/2` and `otp_release` declarations for cleanup planning.
## v0.1.0-beta.6 - 2026-06-23
- Added command monitor execution with `monitor :command, exec: ...`, reusing the same command shapes as command resources.
- Added `mix/2`, `elixir/1,2`, and `eval/1,2` command-line builders for first-class BEAM CLI commands, with DSL defaults from the `:bin` convention root.
- Added quoted `.exs` file resources via `exs PATH do ... end`, with strict `unquote(value(...))` and `unquote(secret(...))` placeholders.
- Added `otp_release` support for ReleaseKit artifact builds and typed ReleaseKit v2 manifests.
- Added service-scoped `plan`, `audit`, and `apply` selection with `--service`.
- Made symlink ownership unmanaged by default unless `owner:` or `group:` is explicit.
- Triggered readiness checks from dependency changes while keeping healthy readiness converged.
## v0.1.0-beta.5 - 2026-06-16
- Added structured, JSON Patch-backed plan diffs for `dotenv/2`, `ini/2`, `yaml/2`, and template assign metadata, with human-readable public changes and separate redacted paths/assigns in plan output/artifacts.
- Added provider-neutral endpoint projection for HTTP monitor metadata and a thin Gatus provider DSL that emits ordinary structured YAML config resources, including `gatus_monitor_endpoints/1` for rendering previously declared monitors.
- Added `release/2`, a small service DSL helper that emits plain version-directory and current-symlink resources for binary release layouts.
- Added down-plan coverage summaries to generated down plans and `mix host_kit.down` output.
- Added typed systemd timer schedule helpers: `daily`, `weekly`, `monthly`, `jitter`, `repeat_after`, and `after_boot`.
- Fixed local `--sudo` apply writes so root-owned directories/files use sudo-aware local runner operations.
## v0.1.0-beta.4 - 2026-06-15
- Added `mix host_kit.read`, `mix host_kit.audit`, and `mix host_kit.facts` wrappers for runtime introspection APIs.
- Expanded `HostKit.Facts.collect/2` to return structured users, systemd failed units, and listening ports.
- Added `dotenv PATH do ... end` as the format-style explicit env-file DSL, plus redacted env-file secrets via `secret KEY, env: :redacted`, file/command secret sources, and richer safe public-value config diff output.
- Added `argv/2` for structured command-line construction with configurable CLI option styles.
- Normalized `daemon`/`job`/`schedule` unit names so suffixless names get `.service`/`.timer` and atom names use the configured unit prefix.
## v0.1.0-beta.3 - 2026-06-15
- Replaced service-scoped `root_path/2` with unified `path/2`; conventional service roots are scoped by service context, while custom/global roots remain root-relative.
- Removed the separate service path override directive; use `service :name, path: "slug"` and shared `HostKit.Naming` helpers for path/identity normalization.
- Centralized generated recipe/provider names in `HostKit.Naming`, including readiness names, ingress route names, workspace unit/user names, Elixir release names, and command/resource names.
- Added first-class EEx template resources via `template PATH, from: ..., assigns: ...`; templates are inspectable resources, render to managed files during read/apply, and reject secret assigns until redacted template diffs exist.
- Added structured config file resources via `ini/2` and `yaml/2`, including an INI block DSL with `section`/`set`, `ymlr` scalar rendering, `yaml_elixir` YAML public-path reads, secret-aware INI key/YAML path comparison for redacted values, and explicit rejection of redacted config rendering.
- Added `symlink PATH, to: TARGET` resources with local/remote read support, apply support, rollback deletion, and documentation.
- Added `target_host` for selecting a nested instance host when an instance has multiple connection endpoints.
- Documented instance backend authoring callbacks and clarified instance down-plan ordering.
- Added semantic tests for persistent/ephemeral instance rollback behavior and nested content target selection.
- Added `HostKit.Project.read/2`, `HostKit.Project.audit/2`, and `HostKit.Facts.collect/2` for runtime read/audit/introspection workflows.
- Added README and Livebook examples for structured config resources and redacted generated secrets.
## v0.1.0-beta.2 - 2026-06-14
- Added generic `instance` DSL for lifecycle-managed compute boundaries with backend selection, nested host endpoints, nested services/resources, and target-scoped content planning.
- Added Incus instance backend support for launch/start/delete, proxy port exposure, readiness checks, and demo SSH bootstrap.
- Added backend-neutral `mix host_kit.instance status|ensure|destroy INSTANCE [config.exs]` for declared instance lifecycle.
- Added declarative backend options on `backend`, including block form with `option`, without leaking backend-specific flags into generic `plan`/`apply`.
- Added instance lifecycle apply events for launch, port exposure, readiness, and SSH bootstrap progress.
- Reworked Livebook demo VM helper to use HostKit instance lifecycle and expose both Caddy and Phoenix demo ports.
- Polished Phoenix Livebook to match the explicit Target / Declare / Plan / Deploy / Verify flow with Kino summaries and no hidden apply/verify checkboxes.
- Added SSH connection retry policy via `ssh retry: ...` with apply progress events for retry start/success/exhaustion.
- Added negative-path coverage for failed initial SSH connection and mid-apply transport failure handling.
- Improved plan/read-error formatting and compact Inspect output for plans, changes, and common resources.
## v0.1.0-beta.1
- Included Livebook demos and internal architecture guide in Hex package docs.
## v0.1.0-beta.0
Initial beta release.
- Added HostKit host-based CLI targeting with `mix host_kit.plan --host NAME config.exs` and `mix host_kit.apply --host NAME ...`.
- Added host SSH DSL settings, including environment-backed control-plane secrets via `secret_env/1`.
- Added inspectable plan/apply artifacts and package lock workflow.
- Added Repology-backed semantic package resolution with cache/rate-limit support.
- Added Incus integration helper for Linux-native remote bootstrap tests.
- Added `mise` bootstrap resources for BEAM tool installation.