Kida 0.10.0

Structured diagnostics, source attribution hardening, and release-readiness cleanup

Released 2026-05-30.

Kida 0.10.0 is a focused diagnostics release. It gives framework debug pages a structured error payload for undefined values, tightens source attribution across optimized and streaming render paths, and keeps the broader large-app roadmap out of this release until its public contracts are ready.

Added

  • Structured undefined diagnosticsUndefinedError.to_diagnostic()returns a surface-neutral payload with code, kind, location, source snippet, ordered hints, docs URL, metadata, template stack, and component stack.
  • HTML and Markdown diagnostic renderers — The diagnostic payload can render escaped HTML fragments/pages or GitHub-flavored Markdown without downstream frameworks parsing terminal-formatted exception strings.

Fixed

  • Optimized templates keep source locations — F-string coalescing preserves the template line marker used by undefined diagnostics, so optimized output still points at the source line users can edit.
  • Imported component slot failures point at caller source — Errors raised inside slot bodies passed to imported components now report the caller template as the primary diagnostic location while retaining component-stack context.
  • Streaming runtime errors match full render diagnostics — Generic Python exceptions raised during streaming are wrapped with template name and line information consistently with full render.

Upgrade Notes

  1. Framework debug pages should preferUndefinedError.to_diagnostic()over parsingstr(exc) or format_compact().
  2. If a test expected raw exceptions from async streaming, update it to assert TemplateRuntimeError and inspect __cause__for the original exception.
  3. If you maintain compiler AST snapshots, regenerate them for the coalescing line-marker contract.

Why this change

Kida's diagnostic strings are optimized for terminal output. Frameworks need the same facts as plain data so they can render their own debug UI safely. This release makes undefined errors inspectable without scraping styled terminal text, and it closes a few attribution gaps that made optimized or streaming renders harder to debug than full renders.