Treat Blockers as Incidents
Core principle. The stone in your shoe is not the walk. It is an incident with a cause, a cost, and a record.
- The failure is about your task, or it is not. That single question routes everything below.
- The weight sits in Bound it before you start and What you may claim. Everything else spends what those two allow.
- You opened this in the middle of something. This is how to get back to that work, not a replacement for it. Name what you were doing before you start, and return to it when this is done.
Is this yours
Answer before touching anything.
- A test failing because the behaviour is missing is your task. That is
test-first-by-evidence.
- A defect in the code you are changing is your task. That is
debugging-by-evidence.
- A tool, runtime, credential, network path, or environment that will not do its job is not your task. It is this.
- Where you cannot tell, use records and a narrow check to distinguish the layers. A failed tool call can be real even if a later invocation passes.
Bound it before you start
Say the budget out loud, in the report, before the first probe.
- Name the ceiling. A number of probes, or a wall-clock span. Without one, "understand it up to a point" has no point.
- Say what reaching the ceiling means. Hand back what you have, incomplete, rather than continue.
- Investigate in a session that is not this one where the harness allows it. Context spent here is context the original task no longer has.
- Record as you go, not at the end. An investigation that runs out of room produces nothing, and it was the one with the most to teach.
Say which state you are in
You MUST report it every time. Each state licenses only what it names.
| State |
Means |
Licenses |
blocker/BLOCKED |
A failure outside the task is reported or observed |
Read evidence, form hypotheses and choose a bounded observation or experiment |
blocker/REPRODUCED |
A relevant failure occurs naturally or under recorded controlled conditions |
Investigate the mechanism; distinguish injected conditions from the historical trigger |
blocker/EXPLAINED |
Evidence supports a scoped mechanism or handling defect |
Propose a repair with its limits; no need to establish unrelated incident details |
blocker/CLEARED |
The scoped repair is verified and the original operation runs |
Return to the task; disclose any broader incident questions still open |
blocker/HANDED BACK |
the ceiling was reached, or the fix is not trivial |
nothing further without a decision |
- No state is reached by assumption. Each names an observation you made.
blocker/CLEARED requires the original command to run, not a substitute you found instead.
- A successful retry alone does not prove an intermittent defect is repaired. If the original operation cannot be exercised, report that remaining blocker even when a narrower handling repair is demonstrated.
- Use independent layers where helpful. Source analysis or an isolated handling test need not wait for capture of a transient. Runnable Signal owns experiment selection; this skill retains the scope and authority limits.
Which rules to read
This table is a gate, not a checklist. Match the left column against what failed.
- Read every row whose signal is present. Report an absent one as not-applicable, naming the signal.
- A blocker that hides a second blocker matches two rows. Read both.
- Read every row, then act on the matches, hardest to undo first. Reading a row costs nothing; the row you skipped is where the coverage went.
| If you see... |
Read |
a workaround forming: a --force or a version pin nobody documents, a file copied by hand into a place a tool should have filled |
rules/workarounds-are-findings.md |
| the same command failing again, or a fix that made the error move rather than go |
rules/stop-conditions.md |
a non-zero exit (exit code 1) from a command that does several things, or a tool named in the output that you were not running |
rules/whose-failure-is-it.md |
| the first blocker cleared and something new failing right behind it |
rules/the-second-blocker.md |
a rm -rf, git reset --hard, a reinstall or a rotated credential about to be run to make a command pass |
rules/never-destroy-to-proceed.md |
| enough understood to be worth keeping, or a ceiling reached |
rules/record-the-learning.md |
Default stance.
- Use the available failure evidence to choose the next bounded step. Do not require the whole incident to recur before investigating a supported hypothesis.
- Choose the source, experiment or trace that answers the missing question. Avoid repeated attempts or environment escalation when a narrower contract test suffices; retain tracing when the real trigger is what must be identified.
- Hand back anything whose fix is not obviously clean. The decision is the developer's, and an unclean fix bought quietly is worse than a blocker reported loudly.
What you may claim
Four words, and each one names how you know.
Confirmed. Supported by a directly inspected observation, with the relevant incident record or experiment conditions and output cited. State the claim it supports; a controlled result confirms handling under the injected condition, not that the condition occurred in the historical incident.
Inference. Reasoned from something Confirmed, and labelled so.
Gap. Not established. State the next concrete observation that would close it.
Recommendation. Never proof.
A workaround is a Recommendation until the mechanism is Confirmed. Reporting it as a fix is the failure this skill exists to prevent.
Never claim a command succeeded unless its output was observed.
Where the record goes
- Use the location the request named, if it named one.
- Otherwise the one the instruction file declares.
- Otherwise a learnings directory that already exists, in this repository or in the user's agent directory. Writing beside an existing one beats starting a second.
- Otherwise decide from the finding. A blocker anyone cloning this repository would hit is written inside it; one only this machine has is written to a learnings directory beside the user's own instruction file, outside any repository.
- Where you cannot tell, write outside the repository. A note in the wrong home directory is invisible to everyone; a note committed uninvited is not.
- Report the path you chose and whether it is tracked. A wrong guess then costs one line to correct.
Do not skip this when
- The workaround already worked. It worked once, on your machine, for reasons nobody wrote down.
- The blocker looks trivial. The ones that eat an afternoon all looked trivial at the first attempt.
- You are nearly done. Nearly done is where the second blocker lives.
Routing
- The table above selects the rule. Read a selected rule in full, and say which one you opened.
- A defect in the code under change belongs to
debugging-by-evidence.
- Judging a change that already exists belongs to
evidence-backed-review.
- A direct instruction from the user outranks anything here.
1---2name: treat-blockers-as-incidents3description: Use when a command fails for a reason that is not the change you were asked to make: a tool that will not install, a runtime the shell cannot find, an authentication that expires mid-task, a permission, a registry, a proxy, a container that will not start. Covers noticing you are in one, bounding the investigation before it eats the session, probing without guessing, reading the tool's own source and its primary documentation, and recording what was learned so the next person does not pay again. A workaround that needs contortions is a finding, not a fix. Not for a failure in the code you are changing, and not for a test that fails because the behaviour is missing.4---56# Treat Blockers as Incidents78**Core principle.** The stone in your shoe is not the walk. It is an incident with a cause, a cost, and a record.910- **The failure is about your task, or it is not.** That single question routes everything below.11- **The weight sits in *Bound it before you start* and *What you may claim*.** Everything else spends what those two allow.12- **You opened this in the middle of something.** This is how to get back to that work, not a replacement for it. Name what you were doing before you start, and return to it when this is done.1314## Is this yours1516**Answer before touching anything.**1718- **A test failing because the behaviour is missing is your task.** That is `test-first-by-evidence`.19- **A defect in the code you are changing is your task.** That is `debugging-by-evidence`.20- **A tool, runtime, credential, network path, or environment that will not do its job is not your task.** It is this.21- **Where you cannot tell, use records and a narrow check to distinguish the layers.** A failed tool call can be real even if a later invocation passes.2223## Bound it before you start2425**Say the budget out loud, in the report, before the first probe.**2627- **Name the ceiling.** A number of probes, or a wall-clock span. Without one, "understand it up to a point" has no point.28- **Say what reaching the ceiling means.** Hand back what you have, incomplete, rather than continue.29- **Investigate in a session that is not this one** where the harness allows it. Context spent here is context the original task no longer has.30- **Record as you go, not at the end.** An investigation that runs out of room produces nothing, and it was the one with the most to teach.3132## Say which state you are in3334**You MUST report it every time.** Each state licenses only what it names.3536| State | Means | Licenses |37| --- | --- | --- |38| `blocker/BLOCKED` | A failure outside the task is reported or observed | Read evidence, form hypotheses and choose a bounded observation or experiment |39| `blocker/REPRODUCED` | A relevant failure occurs naturally or under recorded controlled conditions | Investigate the mechanism; distinguish injected conditions from the historical trigger |40| `blocker/EXPLAINED` | Evidence supports a scoped mechanism or handling defect | Propose a repair with its limits; no need to establish unrelated incident details |41| `blocker/CLEARED` | The scoped repair is verified and the original operation runs | Return to the task; disclose any broader incident questions still open |42| `blocker/HANDED BACK` | the ceiling was reached, or the fix is not trivial | nothing further without a decision |4344- **No state is reached by assumption.** Each names an observation you made.45- **`blocker/CLEARED` requires the original command to run**, not a substitute you found instead.46- **A successful retry alone does not prove an intermittent defect is repaired.** If the original operation cannot be exercised, report that remaining blocker even when a narrower handling repair is demonstrated.47- **Use independent layers where helpful.** Source analysis or an isolated handling test need not wait for capture of a transient. [Runnable Signal](../debugging-by-evidence/rules/runnable-signal.md) owns experiment selection; this skill retains the scope and authority limits.4849## Which rules to read5051**This table is a gate, not a checklist.** Match the left column against what failed.5253- **Read every row whose signal is present.** Report an absent one as not-applicable, naming the signal.54- **A blocker that hides a second blocker matches two rows.** Read both.55- **Read every row, then act on the matches, hardest to undo first.** Reading a row costs nothing; the row you skipped is where the coverage went.5657| If you see... | Read |58| --- | --- |59| **a workaround forming**: a `--force` or a version pin nobody documents, a file copied by hand into a place a tool should have filled | `rules/workarounds-are-findings.md` |60| **the same command failing again**, or a fix that made the error move rather than go | `rules/stop-conditions.md` |61| **a non-zero exit (`exit code 1`) from a command that does several things**, or a tool named in the output that you were not running | `rules/whose-failure-is-it.md` |62| **the first blocker cleared** and something new failing right behind it | `rules/the-second-blocker.md` |63| **a `rm -rf`, `git reset --hard`, a reinstall or a rotated credential** about to be run to make a command pass | `rules/never-destroy-to-proceed.md` |64| **enough understood to be worth keeping**, or a ceiling reached | `rules/record-the-learning.md` |6566**Default stance.**6768- **Use the available failure evidence to choose the next bounded step.** Do not require the whole incident to recur before investigating a supported hypothesis.69- **Choose the source, experiment or trace that answers the missing question.** Avoid repeated attempts or environment escalation when a narrower contract test suffices; retain tracing when the real trigger is what must be identified.70- **Hand back anything whose fix is not obviously clean.** The decision is the developer's, and an unclean fix bought quietly is worse than a blocker reported loudly.7172## What you may claim7374**Four words, and each one names how you know.**7576- **Confirmed.** Supported by a directly inspected observation, with the relevant incident record or experiment conditions and output cited. State the claim it supports; a controlled result confirms handling under the injected condition, not that the condition occurred in the historical incident.77- **Inference.** Reasoned from something Confirmed, and labelled so.78- **Gap.** Not established. State the next concrete observation that would close it.79- **Recommendation.** Never proof.8081- **A workaround is a Recommendation until the mechanism is Confirmed.** Reporting it as a fix is the failure this skill exists to prevent.82- **Never claim a command succeeded unless its output was observed.**8384## Where the record goes8586- **Use the location the request named**, if it named one.87- **Otherwise the one the instruction file declares.**88- **Otherwise a learnings directory that already exists**, in this repository or in the user's agent directory. Writing beside an existing one beats starting a second.89- **Otherwise decide from the finding.** A blocker anyone cloning this repository would hit is written inside it; one only this machine has is written to a learnings directory beside the user's own instruction file, outside any repository.90- **Where you cannot tell, write outside the repository.** A note in the wrong home directory is invisible to everyone; a note committed uninvited is not.91- **Report the path you chose and whether it is tracked.** A wrong guess then costs one line to correct.9293## Do not skip this when9495- **The workaround already worked.** It worked once, on your machine, for reasons nobody wrote down.96- **The blocker looks trivial.** The ones that eat an afternoon all looked trivial at the first attempt.97- **You are nearly done.** Nearly done is where the second blocker lives.9899## Routing100101- **The table above selects the rule.** Read a selected rule in full, and say which one you opened.102- **A defect in the code under change belongs to `debugging-by-evidence`.**103- **Judging a change that already exists belongs to `evidence-backed-review`.**104- **A direct instruction from the user outranks anything here.**