---
title: "Analyze Blast Radius"
method: POST
path: "/repos/{short_id}/blast-radius"
tags: ["analytics"]
---

# Analyze Blast Radius

`POST /repos/{short_id}/blast-radius`

Compute blast-radius for a proposed PR (or top-level aggregation).

POST body matches the OSS engine: {changed_files: [...], max_depth: int}.
When changed_files is empty, returns the top hotspot files across the repo
so a UI without specific changes selected can still surface a meaningful
overview ("top-level repo aggregation").

The hosted backend has no SQL DB for indexed data, so this endpoint reads
graph_metrics.json + git_metadata.json + parsed_files.json from Supabase
Storage and runs the same scoring formula as the OSS analyzer.

## Path parameters

- `short_id` string, required

## Request body

- BlastRadiusRequest
  - `changed_files` string[]
  - `max_depth` integer

## Response `200`

Successful Response

- BlastRadiusResponse
  - `direct_risks` DirectRiskEntry[], required
    - `path` string, required
    - `structural_score` number, required
    - `risk_score` number, required
    - `temporal_hotspot` number, required
    - `centrality` number, required
  - `transitive_affected` TransitiveEntry[], required
    - `path` string, required
    - `depth` integer, required
  - `cochange_warnings` CochangeWarning[], required
    - `changed` string, required
    - `missing_partner` string, required
    - `score` number, required
  - `recommended_reviewers` ReviewerEntry[], required
    - `email` string, required
    - `files` integer, required
    - `ownership_pct` number, required
  - `test_gaps` string[], required
  - `test_impact` TestImpactResponse, required
    - `recommendations` TestRecommendation[], required
      - `test_id` string, required
      - `test_file` string, nullable
      - `repository_id` string, required
      - `repository` string, required
      - `basis` 'measured' | 'inferred', required
      - `bases` string[], required
      - `source_files` string[], required
      - `evidence` TestImpactEvidence[], required
        - `basis` 'measured' | 'inferred', required
        - `source_file` string, required
        - `via` 'coverage-map' | 'call-graph' | 'import-graph', required
        - `source_format` string, nullable
    - `recommendations_total` integer, required
    - `recommendations_emitted` integer, required
    - `recommendations_truncated` boolean, required
    - `recommendations_omitted` integer, required
    - `recommendations_by_primary_basis` object, required
    - `files` TestImpactFile[], required
      - `source_file` string, required
      - `status` 'measured' | 'inferred' | 'unknown', required
      - `measured_tests` string[], required
      - `measured_tests_total` integer, required
      - `inferred_tests` string[], required
      - `inferred_tests_total` integer, required
    - `files_total` integer, required
    - `files_without_measured_tests` string[], required
    - `unknown_files` string[], required
    - `coverage` TestImpactCoverage, required
      - `status` 'available' | 'partial' | 'unavailable' | 'degraded', required
      - `reason` string, nullable
      - `map_present` boolean, required
      - `pair_count` integer, required
      - `test_count` integer, required
      - `source_file_count` integer, required
      - `changed_files_total` integer, required
      - `changed_files_with_measured_tests` integer, required
      - `changed_files_without_measured_tests` integer, required
      - `ingested_at` string, nullable
      - `source_format` string, nullable
      - `freshness` TestImpactFreshness, required
        - `status` 'current' | 'stale' | 'unknown', required
        - `reason` string, nullable
        - `ingested_commit` string, nullable
        - `indexed_commit` string, nullable
    - `inference` TestImpactInference, required
      - `status` 'available' | 'degraded', required
      - `reason` string, nullable
      - `changed_files_total` integer, required
      - `changed_files_with_candidates` integer, required
      - `candidates_before_dedup` integer, required
    - `analysis` TestImpactAnalysis, required
      - `status` 'available' | 'partial' | 'degraded', required
      - `stale` boolean, required
      - `partial` boolean, required
      - `degraded` boolean, required
      - `basis_categories` string[], required
  - `structural_impact_score` number, required
  - `structural_impact_band` 'localized' | 'moderate' | 'broad', required
  - `structural_impact_scale` RiskScalarSemantics, required
    - `field` string, required
    - `kind` string, required
    - `unit` string, required
    - `range` RiskScaleRange, required
      - `minimum` number, nullable, required
      - `maximum` number, nullable, required
    - `measures` string, required
    - `deterministic` boolean
    - `calibration` RiskCalibration
      - `status` string, required
      - `source` string, nullable
      - `calibrated_at` string, nullable
      - `population` string, nullable
      - `granularity` string, nullable
    - `authoritative` boolean, nullable
    - `authoritative_for_change_review` boolean, nullable
    - `runtime_breakage_probability` boolean, nullable
    - `formula` string, nullable
    - `thresholds` object, nullable
    - `band_thresholds` object, nullable
    - `component_fields` object, nullable
  - `overall_risk_score` number, required
  - `overall_risk_score_compatibility` RiskCompatibilityField, required — A field kept only so older clients keep reading a value they understand. ``equivalent_value`` is the load-bearing part: the deprecated field is an exact alias, never repurposed to a new unit, so a client that never updates reads the same number rather than silently reading a different measure.
    - `deprecated` boolean, required
    - `replacement` string, required
    - `equivalent_value` boolean, required
    - `historical_meaning` string, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/repowise/apis/repowise-hosted-api.md) · [All operations](https://skmtc.dev/repowise/apis/repowise-hosted-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/repowise/repowise-hosted-api/revisions/40167ba9ab58/schema)
