Skip to content
Back to skills

G Blast Radius

ASecurity

Analyse the blast radius of a planned change. Inputs a file path, feature name, or list of paths from a plan. Outputs the set of dependent files (forward and reverse references), a per-file volatility score (commit frequency proxy), and a total blast-radius rating (low / moderate / wide). Read-only.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 2, 2026
ai-agentspythonrustgojavakotlinc++c#git

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add onlygian/G-Forge --skill g-blast-radius --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of G Blast Radius?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for G Blast Radius
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/onlygian-g-blast-radius/badge)](https://www.skillsdirectory.com/skills/onlygian-g-blast-radius)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: g-blast-radius
description: Analyse the blast radius of a planned change. Inputs a file path, feature name, or list of paths from a plan. Outputs the set of dependent files (forward and reverse references), a per-file volatility score (commit frequency proxy), and a total blast-radius rating (low / moderate / wide). Read-only.
context: [task, sprint, architectural]
---

**Announce:** "Using g-blast-radius to map dependencies and volatility for the planned change."

You are running a forward-looking dependency-impact pass: given a target file or feature, find everything that depends on it directly or indirectly, score each by volatility, and aggregate into a single blast-radius rating.

## Step 1 — Resolve targets

Determine the target set:

1. **Single file** — `$ARGUMENTS` is a path to an existing file. Use as the only target.
2. **Plan file** — `$ARGUMENTS` is a `g-docs/plans/<slug>.md` path or slug. Read the plan's task `Scope` column, extract every distinct file path. Those are the targets.
3. **Feature name** — `$ARGUMENTS` is a short label (no slash). Grep recent commit subjects (`git log --oneline -50`) for the label; collect files touched in matching commits. Those are the targets.
4. **No argument** — read the most-recently-modified plan in `g-docs/plans/` with any `pending` wave. Use its task scope files.

If no targets resolve:
```
✗ No targets to analyse. Pass a file path, plan slug, or feature label.
```
Stop.

## Step 2 — Forward references (what each target depends on)

For each target file, run Grep on the file's contents for `import` / `require` / `from` / `use` / `#include` / `<reference>` statements. Resolve each reference to a project file when the path is local. External packages are noted but do not propagate.

Record `{target → [dependencies]}` as the forward graph.

## Step 3 — Reverse references (what depends on each target)

For each target file, Grep the project tree for `import.*<target-basename>`, `require.*<target>`, `from <target>`, etc. Common patterns by language:

| Language | Search pattern |
|----------|----------------|
| JS/TS    | `from ['"].*<basename>['"]`, `require\(['"].*<basename>['"]\)` |
| Python   | `from .*<module> import`, `import .*<module>` |
| Go       | `"<module-path>"` inside import blocks |
| Rust     | `use .*<crate>::` or `use .*<module>::` |
| C/C++    | `#include ["<].*<basename>[">]` |
| Java/Kotlin | `import .*<class>` |
| C#       | `using <namespace>` |

Record `{target → [reverse-deps]}` as the reverse graph. This is the immediate blast radius.

If the project has no recognised file extensions for the above languages, fall back to a project-wide basename grep and report best-effort findings flagged with `★ heuristic`.

## Step 4 — Compute per-file volatility

For each file in the **union of targets, forward dependencies, and reverse dependencies**, compute a volatility score from git history:

```
commits_last_50  = count of commits touching this file in `git log --oneline -50 -- <path>`
volatility       = clamp(0, 10, commits_last_50 × 2)
```

A file touched in zero of the last 50 commits = 0 (stable). A file touched in 5+ of the last 50 = 10 (hot).

## Step 5 — Score blast radius

Aggregate into a single rating:

```
total_files    = |targets ∪ forward_deps ∪ reverse_deps|
avg_volatility = mean(volatility across that set)
hot_files      = count of files with volatility ≥ 6
radius_score   = total_files × (1 + avg_volatility/10) + hot_files × 2
```

Map to rating:

| `radius_score` | Rating |
|----------------|--------|
| < 15 | ✓ Narrow — local change |
| 15–35 | ⚠ Moderate — review reverse deps before approving |
| > 35 | ✗ Wide — high coupling; consider re-scoping or splitting the change |

## Step 6 — Print report

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
G-BLAST-RADIUS — [targets]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Targets:        [N files]
Forward deps:   [M files]
Reverse deps:   [K files]
Total in scope: [T files]
Avg volatility: [V/10]
Hot files (≥6): [H]
Radius score:   [S] — [✓ Narrow / ⚠ Moderate / ✗ Wide]

Top reverse-dependency files (most likely affected by your change):
  • [path]    volatility [V]
  • [path]    volatility [V]
  • ...

Hot files in scope (high volatility — frequent recent changes):
  • [path]    volatility [V]    [N] commits in last 50

[If Wide:]
Recommendation: this change spans [T] files, including [H] hot files.
Consider splitting into smaller scoped changes or staging the rollout.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

## Step 7 — Persist for /g-forecast linkage

Write the result to `g-docs/blast-radius/<slug>.md` (create directory if missing). Use the slug from $ARGUMENTS or the plan slug. Schema:

````markdown
# Blast radius: [targets]

> Created: [YYYY-MM-DD]
> Source: [argument or resolved plan]

## Score

Total files: [T]  ·  Avg volatility: [V]  ·  Hot files: [H]  ·  Score: [S]  ·  Rating: [tag]

## Files in scope

| Path | Role | Volatility |
|------|------|------------|
| ... | target / forward-dep / reverse-dep | [V] |
````

`/g-forecast` Step 2b reads `g-docs/blast-radius/<slug>.md` if it exists for the plan slug and incorporates the rating into its complexity score: Moderate adds 1 to complexity; Wide adds 2.

## Rules

- Read-only. Never modify source files, only write the persisted report to `g-docs/blast-radius/`.
- The volatility score is a proxy, not a measurement — files touched many times recently are likely to be touched again, but the score does not predict correctness or risk by itself.
- If the project has no git history (fresh `git init`), report `volatility n/a — no history` for every file and flag rating as `low confidence`.
- External packages in forward dependencies are noted but not scored — their volatility is not under the project's control.
- For very large projects (>1000 files), warn the developer that reverse-reference Grep may be slow, and offer to scope the search to a subdirectory.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.