All notable changes to this project are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

0.1.0

Initial release.

Added

  • CodeStory.tell/1 and CodeStory.tell/2 in block form — wrap a call (CodeStory.tell(fn -> process_order(params) end)) to print its trace and get the wrapped call's own result back. Tracing is cleaned up automatically, so no stop/0 is needed, and the wrapper never breaks the code it wraps: if tracing cannot start or the trace cannot be displayed, the function still runs and still returns its result.
  • CodeStory.tell/0, CodeStory.tell/1, and CodeStory.stop/0 in manual form — bracket a region by hand when a single entry call will not express it, printing a nested call tree of user-defined function calls with named arguments and return values.
  • CodeStory.narrate/2 — run a function while tracing and get back {result, tree} as data, without printing.
  • CodeStory.to_encodable/2 — convert a call tree into a JSON-ready, dependency-free plain-data structure.
  • :detail option with three levels — :outline, :short_story (default), and :novel — controlling how much of each value is shown.
  • :fold_repeats (default true) — collapses consecutive sibling calls to the same function into a single ×N node.
  • :auto_boundary (default true) — treats Ecto repos as boundary modules, hiding their internal plumbing while keeping the call itself visible.
  • :depth — caps how many levels the rendered trace nests.
  • :output — write the trace to :terminal (default), :file, or :both.
  • :show_args — show argument names alongside values (default true).