Milo 0.2.2

Pipeline observability, dispatch refactor, performance improvements, and sharp edge fixes.

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

Added

  • Pipeline observabilityPhaseLog 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 --statusnow 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 cachedstr.joinand filter folding.
  • Dispatch performance — Replaced SHA256 with builtin hash and deferred recording append outside the lock. Fixedget_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 acrossrun(), 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 2except 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), suppressdisplay_result=False across all output formats, tighten Context injection type check, return default from confirm() in dry-run mode, add fail_fastoption to hook invocation and parallel pipelines.
  • Sharp edges (batch 3) — Additional syntax errors, silent failures, and strict API fixes.