9c826d168093592a0fcadde08724a4f8eeaef7b6
2
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
7fd2f9efdc |
[FIX] The twin ledger was incomplete as ground truth, and the gate could not have said so
Caught by the steward asking whether CONTROL-B was PASS 2. It is not — different
document, different question — but checking the answer exposed a defect in the
correlation measurement I had just proposed.
CONTROL-B IS NOT CONTROL-A PLUS FIVE DEFECTS. The transformations overlap the two
real defects trial 04 found:
· clause-5-out-of-scope GONE — D4 deletes that quotation outright
· dropped-qualifier GONE — D1 replaces the sentence with an explicit
version of the same error, which is why the twin
carries openly what the control carried concealed
· asserted precedence SURVIVES, at line 51, UNLOGGED
So the twin holds six defects and the ledger recorded five. The grading rule
would have scored a correct finding on the sixth as a FALSE POSITIVE.
AND THE GATE COULD NOT HAVE CAUGHT IT. twin.py verifies that the ledger records
every DIFFERENCE between the two documents. It does not verify that the ledger
records every DEFECT in the twin. Those are different claims, and the file
asserted the second while proving only the first — a defect already present in
the control is not a difference, so it passes untouched. Fifth instance of a
check certifying a property of the code while claiming a property of the result,
this time inside the artifact built to escape that class.
Fixed: an inherited_defects list records I1 with its provenance and why it
survives; a defects_not_surviving note records the two that do not, so the twin
is never mistaken for a superset of the control; the grading rule now spans both
sets; and the gate's own output states what it does NOT establish, warning when
inherited_defects is absent — because absent is not the same as none, it means
no one has looked.
The correlation measurement can now use the twin honestly. It could not have
before this.
Note on this message: the first attempt lost three terms to shell command
substitution, because backticks in a -m string are evaluated by zsh. Amended.
Recorded rather than silently repaired, since a commit message is part of the
record and this one is about incomplete records.
|
||
|
|
ecf5f95b0a |
[FIX] CONTROL-B: the defect twin, and ground truth that is not my reading
Kernel v1.1 §7 realised. Five defects injected into CONTROL-A as RECORDED
TRANSFORMATIONS, each with unit target, exact find/replace, what is
undemonstrated, and why no mechanical check can catch it.
THE RESULT THAT MATTERS: the twin passes EVERY mechanical check. Tiling, §3.1
tagging completeness, §3.2 Q-resolution, §3.3 heading screen, A-prohibition —
59/59 units, 100% sound, zero quarantined. It carries five load-bearing claims
that do not hold.
So the pair is the cleanest demonstration yet of the class the steward asked
about: two documents, one sound and one defective, are MECHANICALLY
INDISTINGUISHABLE. Both report 100%. The difference is visible only by reading.
That is not a flaw in the instruments — it is the design. A defect a check could
catch would not be testing the reader.
THE FIVE, each a distinct failure mode:
D1 SCOPE-WIDENING — asserts this file has a 'stated review date'; the quoted
clause is triggered by one and nothing establishes it
D2 UNDEFINED-TERM — imports 'limit of the system' and an obligation to report
limits; neither is in the axiom set or the quotations
D3 PREMISE-WEAKENED — drains the premise of the content the conclusion needs,
leaving both premise and conclusion standing
D4 SUPPORT-DELETED — removes the fifth quotation entirely and keeps the three
claims that rested on it, rewriting the lead so nothing dangles
D5 CIRCULAR — makes a premise rest on the conclusion it is a step toward
D1 and D2 are the two defects I found in my OWN draft 2 of CONTROL-A and removed.
Reintroducing them deliberately is the only honest use for them, and it means at
least two of the five are defects a careful author actually made.
GROUND TRUTH BY LEDGER. twin.py gates it bidirectionally: forward(control) == twin
AND inverse(twin) == control, both byte-exact. Forward alone would pass a ledger
that OMITS an edit, since the omitted edit is simply carried in the twin file —
which is exactly how laundering would enter. The inverse is what makes the ledger
complete rather than merely non-empty.
test_twin.py shows the gate FAILING in both laundering directions: a twin quietly
altered beyond the ledger, and a ledger recording an edit the twin does not
contain. Fixtures derived from the property, not from the code.
The tags file for the twin contains five deliberate falsehoods, marked and named,
because that is what a defective document's own tagging would say. The ledger and
the tag file disagree on purpose; the ledger governs.
Not run. The Fool has seen neither document.
|