# Milo 0.2.2

URL: /milo-cli/releases/0.2.2/
Section: releases
Description: Pipeline observability, dispatch refactor, performance improvements, and sharp edge fixes.

---

> For a complete page index, fetch /milo-cli/llms.txt.

Patch release adding pipeline observability, refactoring command dispatch internals, improving performance, and fixing a batch of sharp edges.

## Added

- **Pipeline observability** — `PhaseLog` dataclass with `@@PHASE_LOG` action and ring-buffer reducer for per-phase stdout/stderr capture (opt-in via `Pipeline(capture_output=True)`). New `phase_detail()` and `pipeline_detail()` kida macros for interactive TUI with cursor navigation, log scrolling, and auto-follow. `PipelineViewState` + `make_detail_reducer()` for Elm-style keyboard-driven expand/collapse interaction. `milo://pipeline/timeline` MCP resource exposes phase execution timeline as structured JSON. Gateway `--status` now shows real CLI metrics and pipeline state.

## Changed

- **kida-templates 0.5.0** — Correctness fix for variable bindings inside unrolled for-loops (affects form, select, pipeline, and component templates) and faster template compilation from cached `str.join` and filter folding.
- **Dispatch performance** — Replaced SHA256 with builtin hash and deferred recording append outside the lock. Fixed `get_env()` singleton cache (122us to 125ns). Bulk task accounting for Batch effects.
- **Command dispatch refactor** — Shared builtin-mode handling, command resolution, hook execution, middleware execution, generator consumption, and output writing across `run()`, `call()`, and `call_raw()` without changing the public API.

## Fixed

- **`call()` / `call_raw()` error handling** — Re-raise exceptions instead of calling `sys.exit(1)`, restoring the pre-refactor behavior for programmatic invocations.
- **Sharp edges (batch 1)** — Fix 7 Python 2 `except A, B:` syntax errors, replace silent exception swallowing with warnings/logging, add atomic file writes, guard unhandled template lookups, and add `raise_on_error` to `Config.validate()`.
- **Sharp edges (batch 2)** — Warn on silent template/config fallbacks, validate PhasePolicy and pipeline dependencies eagerly, fix exit code on aborted confirmations (130 instead of 0), suppress `display_result=False` across all output formats, tighten Context injection type check, return `default` from `confirm()` in dry-run mode, add `fail_fast` option to hook invocation and parallel pipelines.
- **Sharp edges (batch 3)** — Additional syntax errors, silent failures, and strict API fixes.
