diff --git a/PENDING.md b/PENDING.md index 7eb5fee..d203b9a 100644 --- a/PENDING.md +++ b/PENDING.md @@ -4176,3 +4176,31 @@ chk(f"a real session reads as WRAPPED end-to-end [{_v.count('wrapped')} of {len ⚠ **Stated so OWED-5 is not over-trusted on the strength of having been earned the same week.** The wrap's open question — *how many fleet controls have a denominator of zero* — is worth running and now has a **harder, more common sibling: how many controls have a predicate that does not implement the subject named in their own label.** The selftest is the demonstrated instance, which makes this a **recurrence of OWED-1 rather than a discovery**. **Awaiting:** Steward authorization, jointly with PENDING-178. ⚠ **Three of this item's four load-bearing claims have now been corrected by the jurist or by re-measurement within 24 hours of filing.** That is the configuration working, and it is also a reason to read the remaining claims as provisional rather than settled. + +--- +## PENDING-180 — The self-planted needle recurs in the polarity `source_lacks()` does not cover, and PENDING-168's evidence base changes before it is ruled +**Date:** 2026-09-09 +**Tag:** [FIX] +**Summary:** `tarbuckle-seam.py:164` asserts `"line[:200]" in src and "log_silence(why, line)" in src` against its **own** source, where both literals appear inside the assertion itself. It has passed vacuously for its entire life. Filed tonight rather than with the `[FIX]` because PENDING-168 is due for a ruling and its evidence base is wrong until this is in the register. + +**The finding that is not a tally mark.** PENDING-168's instance two is *"the self-planted needle written twice while watching for it"*, and `source_lacks()` was built as the mechanism so the shape could not be written again by accident. Its own docstring states the bug: *"A control that writes its needle as a literal PLANTS that literal in the very file it searches, so it can only ever fail."* + +⚠ **That mechanism covers one polarity only.** `source_lacks()` guards the **negative** form — *this string must be ABSENT* — where self-planting makes the control always fail, loudly. The recurrence is the **positive** form — *this string must be PRESENT* — where self-planting makes the control always **pass, silently**. The louder failure got the mechanism; the quieter one did not, and it is the one that hides. **The structural fix was scoped to the direction that announces itself.** + +**Two lines below the docstring that names the bug.** `source_lacks(__file__, "FALLBACK", "_LINE")` sits at `tarbuckle-seam.py:166` — correct, needle assembled from parts. The defective control is at 164, immediately above it, in the same `ck()` block, written in the same sitting. + +**What it was supposed to guarantee, and does not.** *"S3 rejection log keeps the evidence, not just the verdict."* It cannot see whether the seam's rejection path does anything at all. Demonstrated today: `REJECT_LOGGING_ENABLED = False` made the entire rejection write path inert across all four surfaces (REVIEWED-136 AMD 1 condition G) and this control **did not move** — 15/15 before, 15/15 after. A behavioural control caught it; a source-string control could not. + +**⚠ PENDING-168's count, stated precisely rather than incremented.** The doctrine names **four instances**, one of which ("the self-planted needle") already covers **two occurrences**. This is a **third occurrence of that instance**, so the evidence base goes from five occurrences to six while the number of named instances stays four — unless the steward reclassifies. **The unit of the count is the decidable question**, which is PENDING-146's CLASS E defect arriving inside the item that is about to be ruled. Recorded this way so a ruling does not enshrine "fourth instance" or "fifth" without choosing which is meant. + +**⚠ PENDING-168 now carries TWO corrections and should not be ruled before both land.** (1) Its summary says *"care failed in seven hours"*; REVIEWED-136 corrects the interval to **2 h 33 min 24 s**, measured from receipt. (2) This item. Neither weakens the doctrine — the interval tightens it and this occurrence shows the structural fix was under-scoped — but both change what a ruling would be ruling on. + +**Options:** +- **(a) Fix the one control** — assemble the needle from parts, as `source_lacks()` does. Repairs the instance. +- **(b) A positive-form counterpart to `source_lacks()`** — `source_has(path, *parts)`, joining its needle from fragments so it cannot self-plant. Repairs the class in the direction that was missed. +- **(c) Census first** — sweep every `in src` / `in source` assertion across the governed scripts for self-planted needles before repairing any, since the polarity argument predicts more of them and one instance is not a census. + +**Recommendation: (c) then (b) then (a).** The polarity finding predicts siblings, and repairing the one found before knowing how many exist would be the instance-not-class error the executor directives name. ⚠ The census must state what it cannot see: a needle assembled from parts in a *defective* control is indistinguishable from a correct one by grep, so the sweep bounds the problem from below. + +**Files affected:** `~/dotfiles/scripts/tarbuckle-seam.py:164`; a new helper beside `source_lacks()` in `tarbuckle-mumble.py` under (b); whatever (c) surfaces. +**Awaiting:** Steward authorization. ⚠ **Nothing is blocked:** the control's vacuity costs nothing today, because the behaviour it failed to guard was verified behaviourally in the same sitting. What is time-sensitive is only that PENDING-168 not be ruled on an evidence base this item changes.