Passante A Passante publication

En Passante

In Passing
Field Kit

The blocker was a stale safety note

A stated impossibility is a dated claim, not a fact, and the lockfile, the guard's source and the last successful run outrank it.

What happened

On 2026-09-19, an assistant stopped an integration by reporting that a merge control was missing, and only after the user pointed out that the tool had been used successfully all year did it admit it had anchored on a stale, overbroad safety note.

2026-09-19 any repo with a lockfile and rule files measured: none recorded
3 prompts, in order
  1. Trace the blocker to its source A comment, rule file or model reply says the task is impossible.
  2. Check the lockfile and the guard You have the claim and need the actual current state of the thing it names.
  3. Narrow the guard and correct the note Evidence shows the blocker was stale or wider than intended.

1Trace the blocker to its source

Run it when
A comment, rule file or model reply says the task is impossible.
It asks you for
The claim verbatim, where it appears, the blocked task, and any recent successful run.
You get back
The claim quoted, its origin, its approximate age, and the one artifact that would settle it.
It refuses if
The origin of the claim cannot be located in a file or an output.
copy this into a model
<stance>
The claim under examination is that something cannot be done. It arrives as a code comment, a line in a guide, or a safety rule written in general terms. The sentence reads like a fact. Every stated impossibility has an author and a date, and the date is often old. Accepting it costs real work, because it halts a task the system may already support. Treat each one as a hypothesis until an artifact confirms it.
</stance>

<inputs>

Ask for these four items and wait for all of them. Do not fill a gap with an assumption.
1. The blocker claim, copied word for word.
2. Where the claim appears. Name the comment, the notes file, the rule file, or the tool output.
3. The task that the claim is blocking.
4. Any recent run of this tool or path that succeeded. Dates help.

</inputs>

<method>

1. Quote the claim back verbatim. Do not paraphrase it.
2. State exactly what the claim says is absent. Pick one: a library, a flag, a permission, a control, or a capability.
3. Locate the origin. Record the file and line, or the exact output that produced the sentence.
4. Estimate the age of the claim. Use file history, a changelog, or surrounding text that mentions versions.
5. Weigh the user's successful-run evidence against the claim. A recent success contradicts a general impossibility.
6. Name the single artifact that settles the question. Usually it is the lockfile, the guard's source, or a run log.
7. If the claim is broader than the task, say so. An overbroad rule often forbids more than it was written to forbid.
8. If no origin and no success evidence exist, declare the question open and stop.

</method>

<deliver>

- Claim, verbatim
- Origin, file and line
- Estimated age and why
- What it asserts is absent
- Contradicting evidence, if any
- Deciding artifact to check next

</deliver>

<refuse>

Do not agree that the task is blocked on the strength of the claim alone. A sentence in a file is not a capability check.
Do not declare the claim false either. That needs the artifact from the next step.
If the origin cannot be located, stop. Report that the blocker has no traceable source.
Do not propose a workaround at this stage. Do not guess which library or permission is missing.
If the user supplies no claim text, ask again and halt.

</refuse>

2Check the lockfile and the guard

Run it when
You have the claim and need the actual current state of the thing it names.
It asks you for
Lockfile search output, a codebase search for the restriction, and one recent run log.
You get back
A verdict per item: present, absent, or unknown, each tied to quoted output.
It refuses if
The user supplies descriptions of the state instead of command output.
copy this into a model
<stance>
The lockfile does not editorialize. Neither does the function that raises the error. Comments and general notes drift away from both, because nobody updates a comment when a dependency lands. The dependency in question often turns out to be present already. The policy in question often turns out to be a wide guard that can be narrowed on purpose. Work only from output that was produced just now.
</stance>

<inputs>

Ask for these and wait. Descriptions are not evidence.
1. The name of the dependency, flag or control the claim says is missing.
2. Output from searching the lockfile for that name.
3. Output from searching the codebase for the string that produces the restriction message.
4. One log or terminal output from a recent run of the same tool or path.

</inputs>

<method>

1. Read the lockfile output. State whether the named dependency is present. Quote the matching line.
2. If the lockfile shows it, the missing-dependency claim is false. Say so plainly.
3. Read the codebase search output. Find where the restriction is enforced in code.
4. Decide what the enforcing code actually covers. Compare its condition to the task at hand.
5. If the condition is wider than the stated concern, label it overbroad. Quote the condition.
6. If no enforcing code exists anywhere, the policy lives only in prose. Say that.
7. Read the recent run log. State whether it shows the supposedly impossible operation succeeding.
8. Produce one verdict per item. Allowed values are present, absent, and unknown.
9. Where evidence disagrees, trust executed output over text. Name the disagreement in the report.
10. If any item lands on unknown, name the exact command that would resolve it.

</method>

<deliver>

- Dependency: present, absent, or unknown, with the quoted line
- Restriction: file, line, and the condition it tests
- Scope judgement: narrow or overbroad, with reasoning
- Recent run: what it proves
- Verdict on the original claim

</deliver>

<refuse>

Do not treat the user's summary of the lockfile as the lockfile. Ask for the output.
Do not infer that a dependency is absent because a search returned nothing. Check the search target first.
Do not call a restriction overbroad without quoting its condition.
If the restriction has no implementation in code, do not invent one.
If all three evidence sources are missing, stop. Report that the claim stands unverified and name what to collect.

</refuse>

3Narrow the guard and correct the note

Run it when
Evidence shows the blocker was stale or wider than intended.
It asks you for
The guard's current condition, the real concern it protects, and the stale text's location.
You get back
A narrowed condition, an edit to the stale text, and a command that proves the unblock.
It refuses if
The real concern behind the guard is not stated in one sentence.
copy this into a model
<stance>
The guard is wider than the risk it was written for. The note that described the guard has outlived the truth. Both need separate repairs. Fix only the guard and the stale sentence blocks the next attempt. Fix only the sentence and the guard still refuses. Narrowing a safety control is real work, so the condition must stay faithful to the actual concern.
</stance>

<inputs>

Ask for all four. Wait for each one.
1. The guard's current condition, pasted from the source.
2. The real concern it protects, in one sentence from the user.
3. The operation that must become possible.
4. The exact location of the stale comment or note.

</inputs>

<method>

1. Restate the concern in one sentence. Have the user confirm it before any edit.
2. List what the current condition blocks. Mark each entry as intended or collateral.
3. Write a narrowed condition that still blocks every intended entry. Keep it explicit.
4. Show the before and after conditions side by side.
5. Name one case that must still be refused after the change. Name one that must now pass.
6. Rewrite the stale comment or note to describe the guard as it now stands. Remove the impossibility language.
7. Give the command that runs the previously blocked operation. Give its expected exit code.
8. Give the command that triggers the still-refused case. State the expected refusal.
9. If the narrowed condition cannot preserve the concern, stop. Report that the guard is correct as written.

</method>

<deliver>

- Concern, one sentence, confirmed
- Condition before and after
- Collateral cases now permitted
- Case that must still be refused
- Replacement text for the stale note
- Two commands with expected results

</deliver>

<refuse>

Do not widen access to satisfy convenience. The narrowed condition must still block the stated concern.
Do not delete a guard. Narrowing and deleting are different acts.
Do not edit the note before the guard is settled. The note must describe real behaviour.
If the user cannot state the concern in one sentence, stop and ask for it.
If the only evidence is a model claim that the blocker was stale, stop. Require the lockfile or guard output first.
Do not report the task unblocked without the command that demonstrates it.

</refuse>
How you know it worked

Name the file and line where the restriction is actually implemented. Name the lockfile entry for the dependency said to be missing. Then run the command that was called impossible and record its exit code.

from a real incident, 2026-09-19 · stack any repo with a lockfile and rule files · verified by none recorded · agentsverificationdependenciesdocumentation-drift

← every Field Kit