From d1c3d1272e165bb3bad85965ec8863c47219e1a1 Mon Sep 17 00:00:00 2001 From: Ario Barin Ostovary Date: Fri, 21 Aug 2026 10:41:31 -0400 Subject: [PATCH] add blast radius proof discipline --- codex/skills/blast-radius/SKILL.md | 51 +++++++++++++++++++ codex/skills/blast-radius/agents/openai.yaml | 6 +++ .../skills/blast-radius/references/sources.md | 35 +++++++++++++ manifests/portable-files.json | 1 + 4 files changed, 93 insertions(+) create mode 100644 codex/skills/blast-radius/SKILL.md create mode 100644 codex/skills/blast-radius/agents/openai.yaml create mode 100644 codex/skills/blast-radius/references/sources.md diff --git a/codex/skills/blast-radius/SKILL.md b/codex/skills/blast-radius/SKILL.md new file mode 100644 index 0000000..e52fa43 --- /dev/null +++ b/codex/skills/blast-radius/SKILL.md @@ -0,0 +1,51 @@ +--- +name: blast-radius +description: "Find what a change could break somewhere else before it ships, beyond the diff, and prove the one fact it's safe because of by running real code instead of writing it up. Use for 'blast radius of X', 'what could this break', or reviewing a small diff you don't trust." +--- + +# Blast radius + +Find what a change breaks somewhere else, before it ships. Use for "blast radius of X", "what could this break", or reviewing a small diff you don't trust yet. + +Understanding what the code does and why it exists is input. Blast radius asks what it breaks somewhere else. + +Listing the callers is not the job. The agent 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's true, and that is the trap you are walking into. So 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 library the app ships and calls the exact function you're worried about. + +## 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. Pull the relevant PR and commits when history is part of the change. +2. Find the one fact it's 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 library you call, and check its pinned version and any local patch. Work out when things run: microtasks, unmount and teardown, framework lifecycle differences. Follow what a symbol search misses: the JSON an API returns, a DB column, a wire format, another language reading the same bytes, 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, and never make up 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, ask several independent subagents the same question and merge the answers. Different passes catch different real bugs. + +## What to hand back + +- **What it does.** What changed, including the part that isn't obvious. +- **The one fact it's safe because of.** State it, say which step 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. Paste the proof for the ones that matter. +- **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. + +Write it through `$unslop`, 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. + +Source provenance lives in [references/sources.md](references/sources.md). Do not load it during normal use. diff --git a/codex/skills/blast-radius/agents/openai.yaml b/codex/skills/blast-radius/agents/openai.yaml new file mode 100644 index 0000000..ac7a911 --- /dev/null +++ b/codex/skills/blast-radius/agents/openai.yaml @@ -0,0 +1,6 @@ +interface: + display_name: "Blast Radius" + short_description: "Prove what a change could break" + default_prompt: "Use $blast-radius on the current change." +policy: + allow_implicit_invocation: false diff --git a/codex/skills/blast-radius/references/sources.md b/codex/skills/blast-radius/references/sources.md new file mode 100644 index 0000000..15179d1 --- /dev/null +++ b/codex/skills/blast-radius/references/sources.md @@ -0,0 +1,35 @@ +# Sources + +Read this provenance when auditing or revising Blast Radius, not during normal use. + +The skill is substantially derived from Lauren Tan's `blast-radius` skill in pstack: + +- Source: https://github.com/cursor/plugins/blob/51a96e0dd838404da19ba83dc70aa21eef71f868/pstack/skills/blast-radius/SKILL.md +- Repository license: MIT +- Upstream copyright: Copyright (c) 2026 Lauren Tan + +Compass preserves the evidence ladder, load-bearing safety fact, and proof-before-writeup discipline. The port only translates pstack-specific skill orchestration into behavior available in Codex. + +## Upstream license + +MIT License + +Copyright (c) 2026 Lauren Tan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/manifests/portable-files.json b/manifests/portable-files.json index 9b0753e..d85d1dd 100644 --- a/manifests/portable-files.json +++ b/manifests/portable-files.json @@ -11,6 +11,7 @@ }, "agents": { "skills": [ + "blast-radius", "compass", "diagnosing-bugs", "ground-in-sources",