v0.3.0
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/shareInchains (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 → collectis 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 -- ariadneFull Changelog: v0.2.0...v0.3.0
🤖 Generated with Claude Code