Documentationv0.2.0

Urmare / Quick start

Quick start

Install the command, select a repository, and analyze one change source.

On this page
01Install
02Analyze
Install and analyze working-tree changes
uv tool install urmare
urmare impact --changed

Commands are verified against Urmare 0.2.0. Repository paths in later examples are illustrative.

Getting started

Installation

Install the platform-specific binary wheel from PyPI as an isolated tool, or into an active virtual environment.

Choose one installation command
uv tool install urmare
pipx install urmare
pip install urmare
Ephemeral invocation

Run Urmare without a persistent tool installation.

Run with uvx
uvx urmare impact --changed

Repository

Select the repository

Run inside the repository, or place the global --rootoption before the command. An explicit root is authoritative.

Explicit repository root
urmare --root path/to/repository graph

Git-aware commands discover the containing Git repository when--root is omitted.

Impact

Choose a change source

01

Explicit files

Pass one or more repository-relative Python files.

One changed file
urmare impact src/payments/service.py
Multiple changed files
urmare impact src/payments/service.py src/payments/models.py
02

Working-tree changes

Compare staged, unstaged, and untracked non-ignored Python changes to HEAD.

Current working tree
urmare impact --changed
03

Git base

Include committed changes since the merge base withHEAD, plus current working-tree changes.

Changes since a merge base
urmare impact --git-diff origin/main

Results

Use the result

01

Affected tests

Print one canonical pytest file path per line.

Tests for working-tree changes
urmare tests --affected --changed
Tests for one changed file
urmare tests --affected src/payments/service.py
02

Explanations

Return a deterministic shortest dependency path with static import evidence for every hop.

Explain one dependency path
urmare why src/payments/service.py tests/test_service.py
03

JSON output

Add --json for schema-versioned deterministic output. Failures leave stdout empty.

Impact JSON
urmare impact --changed --json
Illustrative schema-version-1 shape
{
  "schema_version": 1,
  "changed": ["src/payments/service.py"],
  "directly_affected": ["src/api/checkout.py"],
  "transitively_affected": [],
  "affected_tests": ["tests/test_service.py"],
  "attributions": [
    {
      "affected": "tests/test_service.py",
      "caused_by": ["src/payments/service.py"]
    }
  ]
}

Reference

Current limitations

  • Static import and from … import relationships only.
  • File-level modules and test selection; no individual test-function selection.
  • No dynamic-import, re-export, symbol, call, type, fixture, runtime, or framework graph.
  • No dependency-upgrade or external package-index analysis.
  • Discovery and in-memory graph allocation run on every command; safe parsed imports and resolution results can be reused.
Configuration changes widen validation

A root pyproject.toml change can redefine the analysis boundary. Git-aware impact then requires full validation rather than fabricating a selective result.

Complete reference

Continue in the repository

The canonical documentation covers graph inspection, configuration, caching, the full JSON contract, exit codes, releases, and benchmark methodology.