Find related issues across a YouTrack instance using self-hosted Ollama embeddings + local structural signals.
Project description
Related Issue Finder (yt-issue-reviewer)
A run-on-demand CLI that helps a team lead find related issues across a YouTrack instance — probable duplicates, issues about the same feature/root cause, and issues with overlapping subject matter worded differently — so they can be merged, recognized, and consolidated.
📖 Documentation: https://yt-issue-reviewer.readthedocs.io/
Privacy & boundaries (non-negotiable)
- Read-only against YouTrack. This tool never links, merges, tags, or closes issues.
- Self-hosted Ollama only for embeddings and optional labels. Issue content never leaves infrastructure you control; there is no third-party hosted-AI fallback.
- All YouTrack access goes through the
youtrack_clipackage (theytCLI).
How it works
- Ingest issues via
ytand cache them locally in SQLite (Datasette-friendly). - Embed title+description via Ollama, caching vectors on
(issue_id, content_hash, model)so unchanged issues are never re-embedded. - Score relatedness = weighted blend of semantic cosine similarity + local structural signals (shared tags, reporter overlap, temporal proximity).
- Group high-scoring pairs into ranked groups (existing YouTrack links excluded).
- Report ranked groups with human-readable evidence; optionally add a flag-gated, generated one-line label per group.
Quickstart
uv sync
uv run yt-issue-reviewer doctor --ollama-host http://<host>:11434
uv run yt-issue-reviewer analyze --project PROJ --state open --min-score 0.6 --db ./yir.db
uv run yt-issue-reviewer show --db ./yir.db # re-display a stored run, offline
datasette ./yir.db # browse results externally
Prerequisites: uv, an authenticated youtrack-cli, and a
reachable self-hosted Ollama with nomic-embed-text pulled. Full walkthrough in the
quickstart.
Documentation
Full docs are hosted at https://yt-issue-reviewer.readthedocs.io/.
| Doc | What it covers |
|---|---|
| Installation | Prerequisites and install |
| Quickstart | Zero → first analysis |
| CLI reference | Every command, flag, and exit code |
| Configuration | Env vars + config.toml with defaults |
| Architecture | The hybrid scoring pipeline |
| Privacy & security | What leaves your infra (nothing) |
| Releasing | Tag-driven PyPI release process |
| Contributing | The just check gate and PR workflow |
The Markdown/RST sources live in docs/; the full spec, plan, and contracts live
under specs/001-related-issue-finder/.
Development
just --list # all developer recipes
just check # the exact CI gate: ruff, ruff format, ty, pytest, zizmor
See CONTRIBUTING.md. Licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yt_issue_reviewer-0.2.0.tar.gz.
File metadata
- Download URL: yt_issue_reviewer-0.2.0.tar.gz
- Upload date:
- Size: 225.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de785fad6393594c14a922ff345a8e3d5d6241d14ee050e70e5228fb674e317e
|
|
| MD5 |
4322df33fb84612e4b643704ef2bf997
|
|
| BLAKE2b-256 |
eafb507ad431f4baf85e422d76e6c1b426c1b1928ccffb5c986b727934dd0ddf
|
Provenance
The following attestation bundles were made for yt_issue_reviewer-0.2.0.tar.gz:
Publisher:
release.yml on ryancheley/yt-issue-reviewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yt_issue_reviewer-0.2.0.tar.gz -
Subject digest:
de785fad6393594c14a922ff345a8e3d5d6241d14ee050e70e5228fb674e317e - Sigstore transparency entry: 2086081048
- Sigstore integration time:
-
Permalink:
ryancheley/yt-issue-reviewer@d578c18f73e757676c622c3430fd69c08e75f00d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/ryancheley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d578c18f73e757676c622c3430fd69c08e75f00d -
Trigger Event:
push
-
Statement type:
File details
Details for the file yt_issue_reviewer-0.2.0-py3-none-any.whl.
File metadata
- Download URL: yt_issue_reviewer-0.2.0-py3-none-any.whl
- Upload date:
- Size: 30.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b29bbcda3bbcfea336610327a81275ba7c7ab22e42f66f5fc8793c0d3bbc82f4
|
|
| MD5 |
88333f14a215bd152bec78d06d79cd67
|
|
| BLAKE2b-256 |
6a1b7c0cf3560bd3d07dde5739b97fbea065dd40b6227fb26647fe783339d295
|
Provenance
The following attestation bundles were made for yt_issue_reviewer-0.2.0-py3-none-any.whl:
Publisher:
release.yml on ryancheley/yt-issue-reviewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yt_issue_reviewer-0.2.0-py3-none-any.whl -
Subject digest:
b29bbcda3bbcfea336610327a81275ba7c7ab22e42f66f5fc8793c0d3bbc82f4 - Sigstore transparency entry: 2086081499
- Sigstore integration time:
-
Permalink:
ryancheley/yt-issue-reviewer@d578c18f73e757676c622c3430fd69c08e75f00d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/ryancheley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d578c18f73e757676c622c3430fd69c08e75f00d -
Trigger Event:
push
-
Statement type: