re: land the F5/F6 title-clock corpus (docs/re, reference data, sylpheed-formats) #23
45
docs/re/data/impossibility-scope-sweep.txt
Normal file
45
docs/re/data/impossibility-scope-sweep.txt
Normal file
@@ -0,0 +1,45 @@
|
||||
# Are this corpus's negatives about the WORLD or about an INSTRUMENT?
|
||||
# 2026-08-31. The sweep I said I owed after fixing one instance by hand.
|
||||
#
|
||||
# The mission's third classification is "undecodable, WITH REACH". A negative
|
||||
# written as a property of the SUBJECT when what was established is a property of
|
||||
# the METHOD is the failure that put "an individual SE's audio is not extractable
|
||||
# yet" at the head of a page whose own later section had located the waves, and
|
||||
# left INDEX quoting it for days. sylpheed-port swept their tree and reported
|
||||
# clean; this is mine.
|
||||
#
|
||||
# TOOL: tools/re-capture/impossibility_scope.py
|
||||
#
|
||||
################################################################################
|
||||
# 🔴 THE TOOL FAILED ITS OWN CONTROL TWICE, and the control is the only reason
|
||||
# this sweep means anything. The control is the ONE KNOWN true positive -- the
|
||||
# heading I fixed by hand this week.
|
||||
#
|
||||
# FAILURE 1: the pattern required a sentence-ending period. HEADINGS DO NOT END
|
||||
# IN PERIODS, and the known instance was a heading. It matched nothing in any
|
||||
# heading in the corpus, so a "clean" report would have been vacuous.
|
||||
#
|
||||
# FAILURE 2: with that fixed, the scoring HID it. "yet" was in my list of words
|
||||
# that scope a negative to a method. ⚠️ IT IS NOT ONE. "yet" and "so far" are
|
||||
# temporal HEDGES that name no instrument, no search and no place looked -- and
|
||||
# that is precisely what let "not extractable yet" read as bounded while
|
||||
# claiming a property of the audio. A scope names a METHOD or a PLACE
|
||||
# ("from the file", "by sorting", "from the hash alone").
|
||||
#
|
||||
# ✅ Control passes now: the known heading is matched and shown.
|
||||
#
|
||||
################################################################################
|
||||
# ✅ RESULT, where it matters most: the two AMPLIFIER files are CLEAN.
|
||||
# Every hit in INDEX.md and HANDOFF.md was read. All are legitimate:
|
||||
# * logical facts -- "layers that never touch the same pixel cannot be ordered
|
||||
# wrongly", "95 s apart is impossible";
|
||||
# * the legend's own definition of *measured* ("not on the disc in any form we
|
||||
# found" -- itself scoped);
|
||||
# * claims quoted in order to mark them retracted;
|
||||
# * INDEX 158, which is my own strikethrough of the refuted SE-audio claim.
|
||||
#
|
||||
# ⚠️ REACH, and it is large: 147 candidate sentences corpus-wide, 130 of which
|
||||
# name no scope in the same sentence. I read the INDEX and HANDOFF subset only.
|
||||
# The other files are NOT swept, and the regex has a high false-positive rate --
|
||||
# "for a directory that no longer exists" is a match. This is a prompt to read,
|
||||
# not a defect count, and reading 130 by hand is the cost nobody has paid yet.
|
||||
75
tools/re-capture/impossibility_scope.py
Normal file
75
tools/re-capture/impossibility_scope.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Which negatives in this corpus are about the WORLD, and which about an INSTRUMENT?
|
||||
|
||||
The mission's third classification is "undecodable, WITH REACH" -- looked here,
|
||||
here and here. A negative written as a property of the subject when what was
|
||||
established is a property of the method is the failure that put
|
||||
"an individual SE's audio is not extractable yet" at the head of a page whose own
|
||||
later section located the waves, and left it quoted in INDEX for days
|
||||
(data/index-vs-pages-audit.txt).
|
||||
|
||||
sylpheed-port swept their own docs for this and came back clean. Mine has not been
|
||||
swept. This finds the candidate sentences; ⚠️ IT DOES NOT JUDGE THEM. A negative
|
||||
IS allowed to be about the world -- "a 24-bit modulus cannot name an 8-character
|
||||
identifier uniquely" is a fact, not a limitation of a tool. Every hit is read.
|
||||
|
||||
Scored, so the reading is ordered rather than exhaustive: a sentence that already
|
||||
names an instrument, a search, or a reach is very likely fine.
|
||||
|
||||
impossibility_scope.py [--all]
|
||||
"""
|
||||
import re, sys
|
||||
from pathlib import Path
|
||||
|
||||
CLAIM = re.compile(
|
||||
r"[^.\n]*\b(?:not (?:extractable|recoverable|available|possible|decodable|knowable)"
|
||||
r"|cannot be (?:\w+ ){0,3}\w+|is impossible|are impossible|no \w+ exists"
|
||||
r"|nowhere on the disc|unrecoverable|not on the disc)\b[^.\n]*(?:\.|$)", re.I)
|
||||
# words that SCOPE a negative to a method, a search or a reach
|
||||
# ⚠️ "yet" and "so far" were in this list and are NOT scopes -- they are temporal
|
||||
# HEDGES that name no instrument, no search and no place looked. That is exactly
|
||||
# what made "an individual SE's audio is not extractable yet" read as bounded while
|
||||
# claiming a property of the audio, and it is why this tool's own control failed
|
||||
# twice before the list was right. A scope names a METHOD or a PLACE.
|
||||
SCOPED = ("looked", "searched", "scan", "probe", "reach", "instrument", "harness",
|
||||
"this container", "with the tools", "our reader", "from the file",
|
||||
"from the disc", "from the image", "from the hash", "by sorting",
|
||||
"by counting", "by re-running", "by key list", "attack", "exhaustive",
|
||||
"we could not", "i could not", "could not find", "not found by", "tested")
|
||||
|
||||
files = sorted(Path("docs").rglob("*.md"))
|
||||
hits = []
|
||||
for f in files:
|
||||
if f.name in ("REFUTED.md", "METHOD.md"):
|
||||
continue # these are ABOUT dead claims; quoting one is not asserting it
|
||||
for n, line in enumerate(f.read_text(errors="replace").splitlines(), 1):
|
||||
for m in CLAIM.finditer(line):
|
||||
s = m.group(0).strip()
|
||||
if len(s) < 30:
|
||||
continue
|
||||
scoped = sum(1 for w in SCOPED if w in s.lower())
|
||||
hits.append((scoped, f, n, s))
|
||||
|
||||
hits.sort(key=lambda h: h[0])
|
||||
show = hits if "--all" in sys.argv else [h for h in hits if h[0] == 0]
|
||||
print(f"{len(hits)} negative claim(s); {sum(1 for h in hits if h[0]==0)} name no "
|
||||
f"instrument, search or reach in the same sentence.\n")
|
||||
for scoped, f, n, s in show[:40]:
|
||||
print(f" {f}:{n}")
|
||||
print(f" {s[:150]}")
|
||||
|
||||
# 🔴 CONTROL, and it must pass before any output above is believed. The one known
|
||||
# instance of this defect in this corpus was a HEADING -- "an individual SE's audio
|
||||
# is not extractable yet" -- and the first version of this regex required a
|
||||
# sentence-ending period, so it matched NOTHING in any heading and would have
|
||||
# reported the corpus clean. Run the control after every edit to the pattern.
|
||||
KNOWN = "## \u2754 And a new negative: an individual SE's audio is not extractable yet"
|
||||
_m = CLAIM.search(KNOWN)
|
||||
print("\ncontrol -- the known true positive (a heading, since fixed):")
|
||||
if not _m:
|
||||
print(" \U0001F534 CONTROL FAILED: the pattern does not match it. Nothing above means anything.")
|
||||
else:
|
||||
_sc = [w for w in SCOPED if w in _m.group(0).lower()]
|
||||
print(f" matched; scope words {_sc} -> {'HIDDEN by scoring' if _sc else 'shown'}")
|
||||
if _sc:
|
||||
print(" \U0001F534 CONTROL FAILED: scored as scoped, so it would not appear in the default listing.")
|
||||
Reference in New Issue
Block a user