Skip to main content

Oneport Impact

"What breaks if I touch this?" — the blast-radius engine that reads your repo's own structure and history, on your machine.

Before you change a function, one command tells you who calls it, which tests cover it, which files historically change with it, and who to ask — then an LLM judges how load-bearing it is. grep finds text; Sourcegraph finds references. Neither tells you that models.py and serializers.py change together 83% of the time even though there's no import between them. That temporal coupling lives only in git history — and Impact mines it locally, so nothing is uploaded to learn it.

$ oneport-impact analyze billing/stripe.py

Blast radius: billing/stripe.py  (file)
  LOAD-BEARING  ·  128 call site(s) across 34 file(s)  ·  61 commits in history

  This is core payment code exercised across the app; a signature change here
  ripples into checkout, webhooks, and the admin refund flow.
  Check first: billing/webhooks.py  — changes with this file 83% of the time

  Changes together with  (temporal coupling)
     83%  billing/webhooks.py       (51/61 commits)
     44%  tests/test_payments.py     (27/61 commits)
  Ask
     @payments-team  [CODEOWNER]
     Priya Nair  (22 commits, last 2026-05-30)

Why it's different

Tool What it gives you The gap
grep / IDE "find usages" text matches no ranking, no history, no judgment
Sourcegraph cross-repo references search, not risk; needs your code on their servers
oneport-impact callers + temporal coupling + ownership + risk verdict local-first — your code never leaves the machine

Every fact is deterministic (Python ast + git log); the model only judges the facts. When a symbol's name is too common to attribute reliably (__init__, get), Impact refuses to guess rather than report an inflated number — the line between "structured, better than grep" and "confidently wrong."

Install

pip install oneport-impact
# optional, for the risk verdict — detection (call graph + co-change) works without it.
# 0-BYOK: no model API key. The verdict runs on OnePort's managed models, metered
# to your account. Get a token at https://www.oneport.co.in/console, then:
onp account login <op_live_...>

Use

# Query the blast radius of a symbol or file
oneport-impact analyze charge                       # by name
oneport-impact analyze billing.stripe.Client.charge # by qualname
oneport-impact analyze billing/stripe.py            # by file

# Gate a change set (for pre-commit / CI)
oneport-impact check --staged        # what you're about to commit
oneport-impact check --head          # the last commit
oneport-impact check --staged --format json    # machine-readable
oneport-impact check --staged --format sarif   # SARIF 2.1.0 for code scanning

oneport-impact analyze charge --no-llm   # facts only, no API key

Exit code is 1 when a change trips a blocking finding (per --fail-on), 0 otherwise — drop check straight into CI.

Polyglot

Call-graph fan-in is Python-only, but co-change and ownership come from git and work for any file. A change to service.go still gets a real blast radius — the files it usually moves with, and who owns it — with fan-in honestly marked unavailable rather than reported as a misleading "0 callers".

What the gate flags

  • IMP001 — wide blast radius: you're changing a symbol many places call.
  • IMP010 — missing co-change companion: you changed a file but not the file it historically changes with, e.g. "you changed model.py but not serializer.py, which changes with it 80% of the time."

Waivers

Some files are legitimately load-bearing. Approve one without opening the gate for everything — drop a .oneport/impact-waivers.yml:

waivers:
  - path: "billing/stripe.py"   # glob, matched against the finding's file
    rule_id: "IMP001"           # optional — narrow to one rule
    reason: "core client, reviewed every change in #eng-payments"
    expires: "2026-12-31"       # optional; the gate closes again after it

A waived finding still appears (marked [WAIVED], suppressed in SARIF) but no longer fails CI; an expired waiver starts failing again automatically.

Configure — .oneportrc

thresholds:
  fan_in_warn: 8            # callers before a change is "wide"
  fan_in_error: 25          # …before it's "very wide"
  cochange_confidence: 0.5  # a companion must co-change this often to be flagged
  cochange_min_together: 3  # …and at least this many times
  max_commits: 1500         # history depth mined for co-change

The same .oneport/guidelines.md the rest of the suite reads is fed to the risk verdict as context ("our payments module is business-critical").

In the Oneport gate

oneport-impact is an opt-in gate in op ship. Enable it in .oneport/oneport.yaml:

enable:
  - impact

It's advisory by default (warns, blocks only on critical) — it informs the ship decision without nagging.

Privacy

Serverless by design. The call graph, co-change mining, and ownership all run on your machine from your repo's own .git. Only the optional one-paragraph risk verdict calls a model, on your key. There is no Oneport server; your code never leaves the building.

How it works

  • callgraph.py — reverse call graph via the ast module, with an ambiguity guard so common names don't inflate fan-in.
  • cochange.py — temporal-coupling miner over git log, skipping mass-change commits that would couple everything.
  • ownership.py — git authors + CODEOWNERS.
  • advisor.py — the LLM risk verdict; judgment only, never invents facts.

MIT licensed.

Metadata

Release files for oneport-impact 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oneport-impact 0.3.0
File Size Uploaded Provenance Actions
oneport_impact-0.3.0.tar.gz 32.3 kB Without provenance Details for oneport_impact-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for oneport-impact 0.3.0
File Interpreter ABI Platform Actions
oneport_impact-0.3.0-py3-none-any.whl Python 3 none any Details for oneport_impact-0.3.0-py3-none-any.whl

Total release size: 68.7 kB

Release files / oneport_impact-0.3.0.tar.gz

Download URL oneport_impact-0.3.0.tar.gz
Size 32.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ec7a98ef391ed5d1a45c9d200f7742470eb8dbc52063adf6645433ea02b90ecc
BLAKE2b-256 checksum
How to use checksums
90c13a1f132d85ed90cf63bf6d9a5906922ee4eb600665909a0bb7c82f2a935d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.0

Release files / oneport_impact-0.3.0-py3-none-any.whl

Download URL oneport_impact-0.3.0-py3-none-any.whl
Size 36.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
305345f685bf60efb1be1213ae9364945b9f3c0fcc248da9f344c7103666cf66
BLAKE2b-256 checksum
How to use checksums
fba65a3aecb0284fd5247ac106e043360fe88df7024e479f3085f330b68250ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.0

Security for oneport-impact 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page