# Blast Radius: [Change]

**Date:** [YYYY-MM-DD]
**Input:** [Description, spec link, issue link, or branch]
**Size:** [Small / Medium / Large] — [The one item that drives it]

## Touched Areas
| Area | What changes | Confirmed or inferred | Evidence |
|------|--------------|-----------------------|----------|
| [e.g., expense queries] | [Change] | [Confirmed / Inferred] | [`path:line`, symbol, or reason] |

## Callers and Dependents
| Dependent | How it uses the touched code | Covered by a test? | Evidence |
|-----------|------------------------------|--------------------|----------|
| [Route, job, UI, script] | [Use] | [Yes, with the test / No] | [`path:line` or symbol] |

## Data
- [Schema change, migration, backfill, or write to existing records — or "None"]

## Contracts at Risk
- [API shape, export format, event, CLI flag, env var, or URL others rely on — or "None"]

## Untested Neighbours
_Existing behavior that shares code with the change and has no test. These become verification rows in the spec or issue._

- [Behavior] — [Why it's at risk] — [Suggested check]

## Outside the Repo
- [External service, cost, permission, deploy order, or feature flag — or "None"]

## Reversibility
- **Undo by:** [Revert / Revert plus a down migration / Not cleanly reversible, because…]

## Recommendation
- **Fits one build session:** [Yes / No — why]
- **Next step:** [Build directly / Write a spec first / Split into issues / Add tests for the untested neighbours first]

## Not Checked
- [What you couldn't verify, and why — or "None"]

---

## Size Rubric

Size by the riskiest item, not by how many items there are.

- **Small:** one area, no data or contract changes, and a revert undoes it.
- **Medium:** several areas, or an additive schema or contract change that existing users and callers won't notice; a revert plus a down migration undoes it.
- **Large:** changes or deletes existing data, breaks a contract something else relies on, cuts across most of the app, or won't fit one build session.
