blast-radius · v1.0.0 · 2026-09-07 · sha256 4f29bb3d42344f46
blast-radius v1.0.0B
Immutable. This exact content is served forever at /api/v1/blob/4f29bb3d42344f46.
--- metadata_schema: team-hub-skill/v1 summary: Finds what a change could break beyond the diff and proves the one safety fact by running real code. skill_id: blast-radius version: 1.0.0 lifecycle_status: active family: verification capabilities: [] source_provenance: kind: adapted references: - https://github.com/cursor/plugins note: pstack/skills/blast-radius/SKILL.md @ 60c641e4, MIT (Lauren Tan), scouted 2026-08-19; localized grounding generalized for global eligibility. authority_boundary: docs-only eligibility: global activation_triggers: - trigger_id: change-risk-review task_kinds: - review - verification risk_flags: [] path_globs: [] roles: [] lanes: [] surfaces: - build-review - repository description: a change's cross-module breakage risk is assessed before it ships - trigger_id: small-diff-distrust task_kinds: - review risk_flags: [] path_globs: [] roles: [] lanes: [] surfaces: - repository description: a small diff is reviewed without trust in its stated safety activation_exclusions: [] full_load_required_when: - change-risk-review - small-diff-distrust section_references: [] platforms: - portable surfaces: - build-review - repository required_roles: [] required_lanes: [] related_doctrine: [] graph_edges: [] child_references: [] return_contributions: [] supersedes: [] --- # Blast radius Find what a change breaks somewhere else, before it ships. Listing the callers is not the job. You can grep those in a second. The job is the breakage grep won't show you. ## Don't trust your own writeup A blast-radius writeup that sounds right is worthless. It reads as convincing whether or not it is true, and that is the trap you are walking into. Don't hand back the writeup. Find the one or two facts the whole thing depends on and prove them by running code. Words are where you start, not what you ship. ## How sure are you For each fact the change's safety depends on, get it as far down this list as is cheap, and **say where it stopped**. 1. **You said so.** Worthless on its own. 2. **You pointed at the line.** A real `file:line`, or the library's own source. 3. **You showed the bad case can't happen.** You walked the failure step by step and it doesn't reach. 4. **You ran it.** A script or test that calls the real code and fails loud if you're wrong. 5. **You reproduced it in the running app.** **Any safety fact you can't get to step 4, say so out loud. Don't write it up as settled.** Step 4 is usually one small script that imports the same module the app ships and calls the exact function you're worried about. Where the project defines behavioral-evidence or done-standard gates, this ladder is their general form: rung 4 is behavioral evidence, rung 5 is owner-demonstrated on the real surface. The ladder's contribution is that it applies to **every** safety fact, not only the ones a gate happens to cover, and that stopping at rung 2 becomes visible instead of silent. ## Steps 1. **Read the change.** The diff, the symbols it adds, changes, and deletes, and what it now does differently, including the part the diff doesn't spell out. 2. **Find the one fact it is safe because of.** Most changes that look scary are safe because of a single fact, like "this call only drops already-dead cache entries and does nothing else". Find that fact. If it holds, most of the scary cases die at once. Spend your time here, not on a long list of maybes. 3. **Look where grep stops.** Read the source of the dependency you call, and check its pinned version and any local patch. Work out when things run: microtasks, unmount and teardown, server versus client. Follow what a symbol search misses: the JSON an API returns, a DB column, a wire format, a generated router, a feature flag, code three hops downstream. 4. **Be honest about each risk.** Give it a real chance of happening and a real cost if it does. Keep the risks you confirmed; list the ones you checked and cleared separately. Cite a real `file:line`. A search that finds nothing is still an answer. Never invent a caller or an API. 5. **Prove the one fact.** Write a script or test that runs the real code, run it, and paste what happened. If you can't prove it cheaply, mark it unproven. Don't round up. 6. **For a big or wide change, get a second seat.** Different reviewers catch different real bugs. Independence is a property of the seat: the reviewer must not have authored the artifact under review. ## Project grounding Before step 3, check whether the project defines a high-risk file registry, an authorization manifest, or equivalent stronger gates, and follow the stronger gate when the file or behavior is covered. A change that passes local tests and review but fails only in the deployed build (an unregistered server action is the classic case) is exactly the breakage this skill exists to surface early. ## What to hand back - **What it does.** What changed, including the part that isn't obvious. - **The one fact it is safe because of.** State it, say which rung you got it to, and show the proof. If you couldn't prove it, write **unproven**. - **Risks.** Only the real ones. Each names how it breaks, the `file:line`, how likely and how bad, and how to check. - **Cleared.** What you checked and why it's fine. - **Before you merge.** The cheapest test or repro that catches the real bug, including the script you wrote. Cite real code, and strip anything private before it goes anywhere public. **Reply:** the writeup above, with the one safety fact either proven or marked unproven.