Skip to content

v0.3.0

Choose a tag to compare

@MikhailHal MikhailHal released this 20 Jul 08:56

Documentation and regression-coverage release: ariadne's behavior on UDF architectures (Flux/MVI, stateIn/shareIn) is now measured and pinned, and the README states exactly which test styles are covered.

What's new

UDF architectures are characterized (sazanami#38) — dependency-free fixtures now pin what the engine detects:

  • stateIn / shareIn chains (map, onEach, flatMapLatest, combine) — fully covered with exact selection; changing a source selects only the properties that consume it
  • Flux dispatch wired in init { dispatcher.collect { ... } } — covered conservatively (dispatch → collect is never a call edge, but the collect lambda attributes to the constructor, which constructing tests reach)
  • Handler maps built from callable references — covered
  • Subscriptions started by a DI container or lifecycle owner instead of the test — not covered, now pinned as a known gap

Selection rate measured across Now in Android — every unit-test class was checked by changing a function in the class it tests:

Test style Selected
Plain unit tests 13 / 13 valid targets
Robolectric / Compose screenshot tests 12 / 12
Framework-dispatched callbacks (lint Detector) 0 / 2

Robolectric is not a barrier — those tests call the composable themselves, so the call exists in the source. The rule that matters: if the framework calls your code instead of your test calling it, ariadne cannot connect them.

No engine behavior changed since 0.2.0; the fat JAR is byte-identical.

⚠️ Speed over Completeness

ariadne prioritizes fast feedback for the agent inner loop — always keep the full test suite in CI as the final line of defense.

Install

brew install mikhailhal/tap/ariadne   # or: brew upgrade ariadne
claude mcp add ariadne -- ariadne

Full Changelog: v0.2.0...v0.3.0

🤖 Generated with Claude Code