rigsolve
Finds torch, CUDA, and native-extension combinations supported by sourced evidence — and explains every constraint.
ImportError: libcudart.so.11.0: cannot open shared object file: No such file or directory
$ rigsolve check
[FAIL] torch was built for CUDA 12.4, but flash-attn expects CUDA 11
This commonly surfaces as a missing libcudart.so.11 error.
fix: re-resolve torch and the extension on one CUDA line
rigsolve inspects a broken environment without importing torch, applies a provenance-bearing compatibility matrix, and emits an ordered repair or install plan. It does not install anything unless you add --execute.
[!IMPORTANT] The bundled
2026.08.15matrix contains 114 facts, all tier 0 (derived). It proves that upstream artifacts or documented build axes exist; it does not prove those combinations install, import, or run. There are currently no tier-3 claims. The matrix includes one narrowly scopedknown_brokenfact for the flash-attn2.8.3.post1automatic filename edge. Runrigsolve matrix statsto inspect the data shipped with your version.
Why this exists
Python package resolvers understand requirements and wheel tags. GPU environments add compatibility axes that are often outside package metadata: the NVIDIA driver floor, CUDA runtime line, GPU architecture, the torch build an extension targets, C++ ABI mode, and sometimes glibc. A perfectly valid pip install can therefore end in a loader error, an undefined symbol, or a wheel with no kernel for the installed GPU.
rigsolve models those axes directly and keeps the evidence attached:
flowchart LR
A["machine profile\ndriver · GPU · Python · glibc"] --> S["constraint solver"]
M["compatibility matrix\nfacts · provenance · tier"] --> S
W["requested packages and pins"] --> S
S --> P["reviewable install plan"]
S --> E["cited conflict explanation"]
The name is literal: a rig is the workstation, server, container, or future target; solve is the constraint problem that connects it to compatible artifacts.
The architecture guide traces detection, matrix validation, constraint search, diagnosis, and plan emission.
Install
rigsolve requires Python 3.10 or newer. The supported target data is currently focused on Linux x86_64 and NVIDIA CUDA stacks.
No PyPI distribution or GitHub release has been published yet. Until the first tagged release, install the current source from main:
git clone https://github.com/satwiksps/rigsolve.git
cd rigsolve
python -m pip install -e .
Contributors can install the quality and test tools with:
python -m pip install -e ".[dev]"
The source checkout is the authoritative unreleased installation path. Maintainers should follow the release and deployment runbook before adding a tag; a tag is rejected unless it points to main, matches the package version, and passes the complete release gate.
Website
The project landing site lives in site/. It uses Next.js, TypeScript, and Tailwind CSS. Run it locally with cd site, npm ci, and npm run dev. For Vercel, import this repository, set the project Root Directory to site, and keep the auto-detected Next.js build settings. See site/README.md for website-specific development and deployment notes.
Quick start
Inspect the current machine. Detection tolerates missing nvidia-smi, missing CUDA toolkit, and missing or broken torch installations:
rigsolve detect
rigsolve doctor
Ask for a plan for a real or hypothetical target:
rigsolve solve \
--want 'flash-attn==2.8.3' \
--target 'RTX 4090,driver=580.65,python=3.12,linux'
With the bundled seed, that currently emits a reviewable shell plan like this (digest line omitted because it identifies the exact data snapshot):
# Generated by rigsolve; review before running.
# WARNING: tier 0 is derived from upstream artifacts or documentation only; it does not prove install, import, or kernel execution
# WARNING: flash-attn's wheel filename does not establish GPU kernel coverage for sm_89
python -m pip install --index-url https://download.pytorch.org/whl/cu126 torch==2.9.0
python -m pip install 'https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.3/flash_attn-2.8.3%2Bcu12torch2.9cxx11abiTRUE-cp312-cp312-linux_x86_64.whl#sha256=4e2f9e39313266b1544b68138b15b91ee6221eccf14f7902b7c6620351340810'
The output is a proposal, not a guarantee: its weakest evidence is tier 0. Review it, then run it yourself or repeat the solve with --execute when you intentionally want rigsolve to install it. Execution is limited to pip output for the detected machine; hypothetical --target and --python overrides remain plan-only.
Explain whether a set of pins can coexist:
rigsolve why 'flash-attn==2.8.3' \
--target 'RTX 4090,driver=580.65,python=3.12,linux'
# A solution exists (weakest evidence tier 0): torch==2.9.0, flash-attn==2.8.3
Diagnose first and request a minimal-change repair plan second:
rigsolve check
rigsolve check --fix
Commands
| Command | What it does | Mutates the environment? |
|---|---|---|
rigsolve detect [--json] |
Profiles GPUs, driver, toolkit, platform, Python, and discoverable installed builds | No |
rigsolve solve --want SPEC... |
Solves constraints and emits pip, uv, TOML, Dockerfile, JSON, or Colab output |
Only with --execute |
rigsolve check [--fix] |
Reports applicable violations; --fix prints a repair plan |
No |
rigsolve why SPEC... |
Explains satisfiable requests or a minimal conflicting constraint set | No |
rigsolve verify [--contribute] |
Runs isolated import and selected GPU smoke probes | No; contribution output stays local |
rigsolve matrix show|stats |
Shows facts, citations, digest, coverage, and tier counts | No |
rigsolve matrix update |
Downloads, validates, and atomically caches matrix data | Writes the validated cache and, when supplied, the requested destination |
rigsolve matrix add FILE --destination PATH |
Validates and merges a contributed matrix | Writes the requested destination |
rigsolve doctor |
Checks rigsolve, matrix, platform probes, and NVIDIA command availability | No |
Use rigsolve COMMAND --help for every option. The complete reference is in the CLI documentation.
The evidence model
Every matrix fact has a source, harvest date, and verification tier. The weakest fact used by a solution becomes the plan's reported tier.
| Tier | Claim | What it does not claim |
|---|---|---|
| 0 — derived | An upstream artifact, build axis, or documented constraint was observed and parsed | That it installs or works |
| 1 — installs | The combination installed in an isolated environment | That imports or kernels work |
| 2 — imports | The package imported successfully; available build metadata was recorded | That a GPU kernel ran |
| 3 — runs | A recorded minimal kernel ran on the recorded GPU architecture | Portability to other architectures or environments |
Tier 3 is intentionally narrow. A result on sm_89 is evidence for sm_89, not every NVIDIA GPU. See the trust model and matrix schema.
The current seed mentions artifact or coupling facts for torch, torchvision, torchaudio, flash-attn, xformers, bitsandbytes, triton, vLLM, transformers, and flashinfer-python. Its audited official torch build facts record the C++ ABI values supported by the encoded release/index pairs. That list is not a promise of complete version, platform, or solve coverage.
How it relates to pip, uv, and conda
| Tool | Primary job | Where rigsolve fits |
|---|---|---|
pip |
Install Python distributions and resolve declared requirements | rigsolve emits ordered pip commands, explicit wheel URLs, and PyTorch indexes |
uv |
Fast Python project and environment management | rigsolve emits a [tool.uv] project snippet with explicit indexes and sources |
conda |
Resolve packages across Python and native channels | Conda output is outside the current scope; rigsolve can still diagnose the installed metadata it can discover |
rigsolve |
Reason over GPU build axes and explain conflicts with citations | It delegates the actual package installation; it is not an environment manager |
Privacy and safety
- Detection and diagnosis run locally. There is no telemetry.
- Package smoke tests run in child Python processes so a crashing extension does not take down the diagnostic process.
verify --contributewritesrigsolve-verification.jsonlocally and uploads nothing. Review the file before attaching it to an issue.matrix updateis the normal command that contacts the network. It fetches the configured URL, validates the whole payload, and replaces the cache atomically.- Harvesting is an opt-in contributor workflow and contacts GitHub, PyPI, PyTorch, and NVIDIA sources.
- Generated plans may contain third-party URLs and shell commands. Review them before running;
--executeis explicit for this reason.
You found the next broken combination we need
The bundled matrix starts with one known_broken entry: a narrowly sourced flash-attn 2.8.3.post1 filename mismatch. Real users will find the failures upstream metadata cannot reveal, and those are uniquely valuable.
If a CUDA combination cost you three hours, spend two minutes making sure it costs nobody else three hours:
- Open a known-broken report.
- Include the exact package versions and
rigsolve detect --jsonoutput, after checking it for anything you do not want to share. - Include the complete error and a source or reproducible procedure.
- If you have a fixed environment, run
rigsolve verify --contribute, review the local JSON, and attach it.
For a matrix PR, start with the known-broken template and follow the contribution guide. Negative facts require a useful workaround and auditable provenance.
Current scope
rigsolve 0.1.0 is alpha software. This repository includes the CLI, offline detector, constraint solver, matrix validation, pip/uv/TOML/Docker/JSON/Colab emitters, diagnostics, isolated verification, and source harvesters. The bundled evidence is deliberately conservative: it is Linux x86_64 and NVIDIA CUDA focused, contains no tier-3 claims, and does not provide Conda output.
The daily harvester is read-only with respect to the repository. When upstream facts change, it uploads a validated candidate matrix and deterministic diff as a short-lived workflow artifact; it never creates a branch, pull request, commit, or merge. See the harvesting guide.
Contributing and governance
Bug reports, source citations, detection fixtures, matrix facts, and verification results are welcome. Start with CONTRIBUTING.md and read the Code of Conduct.
Security issues should follow SECURITY.md, not a public compatibility report.
License
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 rigsolve-0.1.0.tar.gz.
File metadata
- Download URL: rigsolve-0.1.0.tar.gz
- Upload date:
- Size: 148.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
662d117cab766e0177f1ec719c7bfa21aa46b8234eb2539d71f4a6f893f3ddb7
|
|
| MD5 |
9d503471279daa862a95cebd6e3cf3b3
|
|
| BLAKE2b-256 |
e5dc13538fc97a839ee8b78447957cdcc2db149f00c4c171de7a8c0139ecb0f1
|
Provenance
The following attestation bundles were made for rigsolve-0.1.0.tar.gz:
Publisher:
release.yml on satwiksps/rigsolve
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rigsolve-0.1.0.tar.gz -
Subject digest:
662d117cab766e0177f1ec719c7bfa21aa46b8234eb2539d71f4a6f893f3ddb7 - Sigstore transparency entry: 2483453861
- Sigstore integration time:
-
Permalink:
satwiksps/rigsolve@da266301e0c8229e3ba659e145822361a1a60e5c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/satwiksps
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@da266301e0c8229e3ba659e145822361a1a60e5c -
Trigger Event:
push
-
Statement type:
File details
Details for the file rigsolve-0.1.0-py3-none-any.whl.
File metadata
- Download URL: rigsolve-0.1.0-py3-none-any.whl
- Upload date:
- Size: 126.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
468050a1fbdde07bc14a06b8b4d58a0e431007abc8d65ae8301996d476d058b4
|
|
| MD5 |
bb53852c7c8507e3ca8f824ca443fee1
|
|
| BLAKE2b-256 |
6aa928c28a19ed4f2b28dcfc2525e88aa051bcde479956749bb06a13bd457c0a
|
Provenance
The following attestation bundles were made for rigsolve-0.1.0-py3-none-any.whl:
Publisher:
release.yml on satwiksps/rigsolve
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rigsolve-0.1.0-py3-none-any.whl -
Subject digest:
468050a1fbdde07bc14a06b8b4d58a0e431007abc8d65ae8301996d476d058b4 - Sigstore transparency entry: 2483453916
- Sigstore integration time:
-
Permalink:
satwiksps/rigsolve@da266301e0c8229e3ba659e145822361a1a60e5c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/satwiksps
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@da266301e0c8229e3ba659e145822361a1a60e5c -
Trigger Event:
push
-
Statement type: