Skip to main content

ovecc impact

The blast radius of changing a target: the impacted modules, APIs, tables, symbols and files, the representative paths that reach them, and a calibrated risk score. "What breaks if I touch this?"

Usage: ovecc impact [OPTIONS] <TARGET>

Example

$ ovecc impact "api:/billing/summary"
Impact: GET /billing/summary/:id
Affected modules: 0
Affected APIs: 0
Affected tables: 1
Affected symbols: 5
Affected files: 0
Risk: Low (11)

Top paths:
GET /billing/summary/:id -> <GET /billing/summary/:id handler>
GET /billing/summary/:id -> <GET /billing/summary/:id handler> -> invoiceSummary
GET /billing/summary/:id -> <GET /billing/summary/:id handler> -> invoiceSummary -> invoices
GET /billing/summary/:id -> <GET /billing/summary/:id handler> -> invoiceSummary -> query
GET /billing/summary/:id -> <GET /billing/summary/:id handler> -> invoiceSummary -> query -> loadConfig

Module-level:

$ ovecc impact services
Impact: services
Affected modules: 2
Risk: Low (10)

Top paths:
services -> routes
services -> routes -> src

Options

OptionDefaultEffect
<TARGET>Module, file, symbol, table:NAME, or api: target
--direction <downstream|upstream|both>downstreamDownstream = who is affected by changing the target; upstream = what the target itself depends on
--max-depth <N>6Bound the graph walk

Plus the global options.

Target syntax for APIs

API labels have the form GET /users/:id. Both the full label and any substring resolve:

ovecc impact "api:GET /search" # full label
ovecc impact "api:/search" # substring — usually the convenient form

Unmatched targets

A target that matches nothing is reported explicitly rather than as an empty blast radius:

$ ovecc impact no-such-thing
Impact: no-such-thing
No matching architecture element.

In JSON, the payload carries "matched": false — scripts should check that field to distinguish a typo from a genuinely isolated element.

  • query — for precise deps/rdeps/paths questions
  • explain — narrative form with findings