---
name: name-the-file-and-sha-a-condition-came-from
description: "BINDING: when reporting a CI condition or contract clause, state the FILE and the SHA you read it from — both of 2026-07-29's mechanism errors were findings inherited from the wrong artifact"
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 0ed6e725-1e95-40e9-9ab2-1d8ba3153a26
  modified: 2026-07-30T01:37:51.155Z
---

**When you report a condition — a CI `if:`, a trigger, a contract clause — name the FILE and the SHA you read it from.** A condition quoted without its provenance is unfalsifiable, and the batch under test is exactly the thing that may have moved it.

Adopted fleet-wide 2026-07-29 (todlando proposed it against his own error; doyle ratified) after **two mechanism errors in one day, both inherited from the wrong artifact**:
1. doyle read the `servicehost` bystander red as writer-side `SPT_HOME` contention (the `daemon_inhibit` class) without reading the victim's source — it never writes the env at all. Caught before the wrong dispatch shipped. See [[bystander-test-reads-process-global]].
2. todlando read the twohost `[twohost]` gate condition out of `ci.yml` **in a checkout at `ffc7e9e`** and designed a PR-title probe on it. At the sha under test (`af65ac0`) the batch itself had **moved twohost into `golden.yml`** (#119), whose trigger is `push: branches: ['golden/**']` + `workflow_dispatch` with **no `pull_request:` trigger** — so the `pull_request.title` clause is dead code there, and `ci.yml` at that sha contains "twohost" zero times. A PR would have fired the thin lane and returned a clean green with no two-host evidence in it.

⭐⭐ **The generalization worth keeping:** *the instrument was competent when first read and was made incompetent by the very batch under test.* Fifth surface of [[verdict-from-probe-competence]] — and #2 would have been self-inflicted by the fix for the fourth. Two agents signed it (one designed, one ratified) because neither checked the workflow **at the sha being gated**.

⭐⭐ **THIRD INSTANCE, same day — and this one's victim was the RULE'S OWN VERIFICATION PROCEDURE.** doyle had ruled a dual-token check whose leg #1 was "`[twohost]` present in the head commit message". hertz's repair (`golden.yml@6bf2bd9`) then **retired the token as a gate entirely**: `if: ${{ !cancelled() && (github.event_name != 'workflow_dispatch' || inputs.twohost) }}` — on a `golden/**` push `event_name != 'workflow_dispatch'` is true, so the guard reduces to `!cancelled()` and both legs run unconditionally; on dispatch a typed `twohost: boolean, default: true` input governs, giving an explicit opt-OUT. Had either of us run the check unchanged we would have grepped for a token that gates nothing and called it a verified gate — **a green check measuring a mechanism that no longer exists.** doyle amended his own procedure rather than let it stand (leg #1 is now "confirm the condition at the assembled sha is the event-based default-on form"), and named it as today's lesson biting its author. todlando reached the same substitution independently from source before the message landed — two independent readings agreeing is what a dual check is *for*.
⭐ The repair is **stronger than the ruling it answered**: doyle asked for default-ON with an opt-out; deleting the token makes face 1 of the skip class (marker absent) *structurally impossible* on a golden push rather than merely unlikely. Accept a better mechanism than the one you specced — and then re-read every check written against the old one.

⭐⭐ **FOURTH INSTANCE, 2026-07-30 — A SHARED NOUN IS NOT A SHARED CLAIM (doyle's ruling against his own ruling, narrowed by hertz).** doyle credited deployah's sighting of nested child output in twohost-a's job log as "first positive evidence" for the guard's **observability** half — i.e. that `worker_lifecycle_e2e` emits all four child outcomes BEFORE the destructive reaper. hertz narrowed it: the sighting proves the **job-log transport** preserves nested child output, a *different binary and a different test*. Confirmed from the test list doyle had already published — the five tests were `b2_attacher_child`, `two_host_ladder_role_{a,b}`, `gated_cli_role_{a,b}`; **`worker_lifecycle_e2e` never ran in that job**, so its emission ordering could not possibly have been observed there. Corrected statement = three propositions, three statuses: identity half **UNEXERCISED** · emission ordering **SOURCE-VERIFIED, NOT RUNTIME-OBSERVED** · job-log transport **RUNTIME-OBSERVED** (a necessary precondition for diagnosability, not evidence the emission happens).
⭐⭐ The transferable defect: **evidence for one proposition silently promoted to another because both live under one word** ("observability"). Same family as binding line numbers to the wrong file, a list not naming its breadcrumb, a count not naming its root. ⚖ And note the DIRECTION doyle flagged against himself: every ruling that night leaned conservative except this one, and the one he relaxed was **on the artifact he most wanted to be able to say something good about**. Expect your own overclaims in the lenient direction, on the thing you are hoping to praise.

**How to apply:** (0) **after ANYTHING touches a workflow — including your own fix — re-read your verification checks against it; a repair that moves the instrument silently invalidates the procedure that watches it;** (1) quote conditions as `<file>@<sha>`, never bare; (2) before trusting any gate, read it at the sha under test, not in your working checkout; (3) a workflow moved between files is a *condition migration* — re-verify triggers, not just the `if:`; (4) treat a dead clause inside a live gate as a booby trap and delete it; (5) `workflow_dispatch` with no declared inputs cannot satisfy a `contains(head_commit…)`/`contains(pull_request…)` gate — both are null on that event, so it is not an escape hatch.

Related: [[opt-in-ci-legs-skip-silently]], [[verdict-from-probe-competence]], [[milestone-a-golden-landed]], [[gate-against-documented-design]], [[mirror-repo-ci-dead]], [[rule-failed-its-author-needs-a-mechanism]].
