logomesh
Paste a Sentry URL. Get a failing pytest back.
pip install logomesh
logomesh repro https://sentry.io/organizations/your-org/issues/12345678/
Why logomesh
- Deterministic test synthesis — no LLM touches the test bytes. The pytest comes from a pure function of your frame locals.
- Verified reproduction — the sandbox must raise the same exception type Sentry captured. If it doesn't, it refuses to ship.
- Runs on your machine — your Sentry token, your Docker, your repo. Nothing phones home.
- PII redaction built in — strips card numbers, emails, JWTs, API keys, and sensitive field names before anything hits an LLM.
- Audit-ready — every artifact carries
llm_in_evidence_path: false, a SHA-256 stamp, and SOC2/PCI control mapping.
Requirements
- Python 3.11+
- Docker running locally
- Sentry auth token with
event:readscope (Settings → API Keys) - OpenAI API key (powers the agent — context recovery, dep pinning, source resolution, retries)
export SENTRY_AUTH_TOKEN=sntryu_...
export OPENAI_API_KEY=sk-...
Or drop them in a .env file in your project root.
Usage
logomesh repro <sentry-url> # reproduce a crash
logomesh repro <url> --no-llm # deterministic only, skip LLM
logomesh repro <url> --artifact # emit SOC2/PCI audit artifact
logomesh repro <url> --draft-pr # open GitHub draft PR with failing test
logomesh repro <url> --json # machine-readable output
logomesh repro <url> --repo /path/to/repo # point at local repo (default: cwd)
logomesh repro <url> --timeout 120 # wall-clock timeout in seconds
Supported Sentry URL formats:
https://sentry.io/organizations/{org}/issues/{id}/
https://sentry.io/issues/{id}/
https://{org}.sentry.io/issues/{id}/
Example output
✓ Reproduced: ZeroDivisionError at billing/calc.py:18
division by zero
rate = total / count
✗ Cannot reproduce ValueError at checkout.py:42
The synthesized test passed against the current branch.
Either the bug is fixed, or the captured locals are insufficient.
How it works
- Fetches the innermost in-app frame + locals from your Sentry event
- PII redaction runs before any data touches an LLM
- Builds a pytest deterministically from the captured locals
- Runs it in an airgapped Docker sandbox (128 MB, no network,
nobodyuser) - Verifies the sandbox raised the same exception type Sentry captured
- Emits the failing test — or a structured reason it couldn't reproduce
A LangGraph agent handles context recovery, dep pinning, source resolution, and retries. It's advisory — it never writes the test or the artifact.
Full architecture details → GitHub
What reproduces well
- Input validation bugs,
NoneTypemismatches, type coercion errors - Off-by-one, ordering, idempotency issues
- Anything where the crash inputs are captured in the Sentry frame
What doesn't
- Race conditions, distributed failures, live DB/Redis state not in the frame
- C extension crashes, timezone/DST edge cases (sandbox runs
TZ=UTC)
When it can't reproduce, it says so with a structured reason. Never guesses.
Sentry setup
Frame locals must be enabled:
sentry_sdk.init(dsn="...", send_default_pii=True)
Or: Project Settings → SDK Setup → Enable "Send default PII"
License
MIT
Metadata
Release files for logomesh 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| logomesh-0.1.5.tar.gz | 475.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| logomesh-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 631.5 kB
Release files / logomesh-0.1.5.tar.gz
| Download URL | logomesh-0.1.5.tar.gz |
|---|---|
| Size | 475.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
970156a1e130d354650dcb4ed9a89a8c56d838cc0e861eef019df285eb5384c3
|
|
BLAKE2b-256 checksum How to use checksums |
c85bc60a5b5bd316aed2c6104e366022c600f5232d52777f0e9e09ccbb21bbdb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.8
|
Release files / logomesh-0.1.5-py3-none-any.whl
| Download URL | logomesh-0.1.5-py3-none-any.whl |
|---|---|
| Size | 155.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
70bc69018046beced138de756b797dfa7a3152a0250fed8c4c644fbedb3395a9
|
|
BLAKE2b-256 checksum How to use checksums |
09d55dfb446dee571b1a401cf2511194783c049a263e12fff8652be952a3c31b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.8
|