---
name: tool-claim-must-name-its-environment
description: "BINDING: a claim that a TOOL misbehaves must name the tool version and the environment it was measured in — an unqualified claim makes the fleet distrust a command that works for everyone else."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: f8d04829-484f-4ac0-ae0f-0d563be25309
  modified: 2026-07-30T01:24:24.788Z
---

When reporting that a tool misbehaves, name **which tool build and which environment** the misbehavior was measured in. An unqualified tool claim is worse than no claim: it tells the whole fleet to distrust a command that works fine for them.

**Caught on me by todlando, 2026-07-29.** Two `sed -i` invocations of mine silently exited 0 having written nothing, concurrent with `bash.exe: warning: could not find /tmp`. I reported it as *"on hfenduleam, sed -i is a silent no-op."* He falsified that in minutes from his own shell **on the same box**: `ls -d /tmp` → exists, `sed -i '2d'` → edit landed, `/usr/bin/sed` GNU sed 4.9 — and he had just used `sed -i` successfully to resolve a conflict on the shipping candidate. My claim named a BOX; the property belonged to a SHELL.

**Then it narrowed once more, by measuring instead of conceding.** Re-probing my own shell after his correction: `/tmp` present, `sed -i` works, same `/usr/bin/sed` GNU sed 4.9 as his. So it was never a property of my shell either — it was a **transient `/tmp` outage**: my first call that leg wrote `/tmp/killmap.txt` fine, two calls later `/tmp` was gone, and later it was back. Something removes `/tmp` intermittently on this box, which is itself worth knowing on a shared runner (any rig using `sed -i`, `mktemp`, or a `/tmp` staging path is exposed).

**CONFIRMED INDEPENDENTLY, same night:** the transient then fired in **todlando's** shell — the very shell he had used as the counterexample — prefixing a routine `gh run view` with the same warning, `/tmp` present again seconds later. So it is neither the box nor a given shell: **a transient any shell can hit at any moment.** It cost him a real defect: an unguarded `WORK="$(mktemp -d)"` in his label-census harness collapses to `WORK=""`, every set file writes to `/…` and fails, and the census prints **n=0 for all six sets and exits 0** — zeros presented as measurements, with credible labels attached. He hardened it to refuse (mktemp failure ⇒ exit 2; unwritten set file ⇒ "rig failure, NOT a zero result"), with a `TMPDIR=/definitely/not/here` negative control proving it emits **no** SET line rather than a plausible zero.

**⭐ The discriminator that makes this actionable (todlando's):** a plain `> /tmp/file` redirect fails **LOUD** when the dir is gone, so it is NOT in the exposed class. `sed -i`, `mktemp`, and `/tmp` staging paths are, because they stage and can half-succeed or no-op silently. That asymmetry is the whole reason `sed -i` is dangerous and a redirect is not — check which of the two a rig step uses before assuming it was exposed.

**Why:** doyle ruled the same way a few hours earlier on a `grep -c` claim — adopt the safer practice, but never write something false about the tool most of the fleet runs. todlando's framing: this project hit the *claim omitted its tool/environment* class **nine times in one day**. It is the same family as [[load-claim-needs-measured-axes]] (never name a mechanism you did not measure) and [[pin-a-stable-asset-not-a-rolling-tag]]'s provenance rule (say which KIND of evidence you have).

**How to apply:**
- State tool claims as `<tool> <version> under <condition>`, with the probe that shows the condition. The durable form of mine: *`sed -i` stages through a temp dir and silently exits 0 writing nothing when that dir is unavailable; check `ls -d /tmp` and the `could not find /tmp` bash-startup warning.* True everywhere, actionable.
- A **transient** environment fault is stronger evidence for verify-the-effect than a permanent one: a passing probe does not license trusting the *next* invocation. See [[verdict-from-exit-not-from-silence]] (fourth surface).
- When corrected on a generalization, re-measure rather than just accepting the narrower claim — the second measurement moved mine from "my shell" to "a transient outage", which is the actually-useful fact.

Related: [[verdict-from-exit-not-from-silence]] · [[load-claim-needs-measured-axes]] · [[measure-the-box-before-the-instrument]] · [[ground-dont-assume-on-incidents]] · [[wspec-access-model]]
