Skip to content

Releases: MikhailHal/ariadne

v0.3.1

Choose a tag to compare

@MikhailHal MikhailHal released this 20 Jul 09:52

Patch release.

  • Correct version reporting — the server announced itself as 0.1.0 to MCP clients regardless of the release it came from. The version is now generated from the build, so it cannot drift again.
  • Container imagesghcr.io/mikhailhal/ariadne is now published on every release. The image carries the MCP Registry ownership label and bundles git, so a mounted project can be analyzed directly:
docker run -i --rm -v /path/to/project:/workspace ghcr.io/mikhailhal/ariadne:0.3.1
# then pass /workspace as project_path

No analysis behavior changed since 0.3.0.

Install

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

Full Changelog: v0.3.0...v0.3.1

🤖 Generated with Claude Code

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

v0.2.0

Choose a tag to compare

@MikhailHal MikhailHal released this 20 Jul 07:18

Android-ready release: ariadne now handles real Android app source layouts and the call-graph gaps that made it miss tests in idiomatic Kotlin.

What's new

Android variant source sets — source sets are discovered by enumerating src/<sourceSet>/{kotlin,java} instead of assuming main/test, so debug, demo, testDebug, and other variant/flavor sets are analyzed without configuration. androidTest* is excluded (instrumented tests are out of scope for unit-test selection). Verified on Now in Android: the app module now scans debug/prod/benchmark/testDemo alongside main.

Engine updates (sazanami 0.2.3):

  • Callable references (::fn) now produce call-graph edges. The idiomatic .map(Type::mapper) chain no longer hides dependencies — on Now in Android, changing PopulatedNewsResource.asExternalModel went from 1 detected test to 14, including 11 repository tests reachable only through .map(::).
  • Editing a test now selects that test. Previously a changed test function returned "no affected tests" because the reverse traversal only inspected callers, and tests have none.
  • Property- and constructor-aware call graph (initializers, delegates, accessors, stored lambdas, init blocks) from 0.2.x.

⚠️ Speed over Completeness

ariadne prioritizes fast feedback for the agent inner loop. No affected-test-selection tool can trace every path (reflection, DI, data-flow indirection) — 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

Or download ariadne-0.2.0-all.jar below (JDK 21+): java -jar ariadne-0.2.0-all.jar

Full Changelog: v0.1.0...v0.2.0

🤖 Generated with Claude Code

v0.1.0

Choose a tag to compare

@MikhailHal MikhailHal released this 15 Jul 15:34

First release of ariadne — an MCP server that gives AI agents affected-test selection for Kotlin projects, powered by sazanami.

Highlights

  • get_affected_tests tool: runs git diff internally (uncommitted changes included) and returns the FQNs of tests affected by your changes
  • Function-level static analysis via Kotlin Analysis API — call graph covers functions, properties (initializers, delegates, accessors, stored lambdas), and constructors/init blocks
  • Convention-based multi-module discovery (settings.gradle includes, project dependencies with transitive closure)
  • Validated on Now in Android: 18/18 recall audit across all layers, ~4s end-to-end on 34 modules
  • Trust-first responses: explicit notes for unanalyzed changes (build scripts, resources), explicit errors for git failures, 120s analysis timeout

⚠️ Speed over Completeness

ariadne prioritizes fast feedback for the agent inner loop. No affected-test-selection tool can trace every path (reflection, DI, data-flow indirection) — always keep the full test suite in CI as the final line of defense. See the README for details.

Install

brew install mikhailhal/tap/ariadne
claude mcp add ariadne -- ariadne

Or download ariadne-0.1.0-all.jar below (JDK 21+): java -jar ariadne-0.1.0-all.jar

🤖 Generated with Claude Code