v85: no official harness exists; pathkeep retention NULL (retracts v84 +0.0009); 89.2% of restored basenames already present; 3 compressors registered; 373 tests
Browse files- answer_retention_eval.py +3 -0
- basename_novelty.json +6 -0
- basename_novelty.py +36 -0
- official_retention_v84.json +131 -0
- pathkeep_official.json +83 -0
- test_compressors.py +100 -0
answer_retention_eval.py
CHANGED
|
@@ -39,6 +39,9 @@ COMPRESSORS = {
|
|
| 39 |
"structural_reasoning": "structural_reasoning_compressor.py",
|
| 40 |
"adaptive_structural": "adaptive_structural_compressor.py",
|
| 41 |
"structural_lowcomp": "structural_lowcomp_compressor.py",
|
|
|
|
|
|
|
|
|
|
| 42 |
}
|
| 43 |
STOP = {
|
| 44 |
"that","this","with","from","were","have","been","which","when","what","the",
|
|
|
|
| 39 |
"structural_reasoning": "structural_reasoning_compressor.py",
|
| 40 |
"adaptive_structural": "adaptive_structural_compressor.py",
|
| 41 |
"structural_lowcomp": "structural_lowcomp_compressor.py",
|
| 42 |
+
"structural_selective": "structural_selective_compressor.py",
|
| 43 |
+
"structural_selective_call": "structural_selective_call_compressor.py",
|
| 44 |
+
"structural_pathkeep": "structural_pathkeep_compressor.py",
|
| 45 |
}
|
| 46 |
STOP = {
|
| 47 |
"that","this","with","from","were","have","been","which","when","what","the",
|
basename_novelty.json
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"restored_basenames": 1454,
|
| 3 |
+
"already_elsewhere_in_shipped_output": 1297,
|
| 4 |
+
"genuinely_new_tokens": 157,
|
| 5 |
+
"pct_already_present": 89.2
|
| 6 |
+
}
|
basename_novelty.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json, csv, importlib.util, re
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
R=Path("/var/lib/octave/sn114/repo"); PL=Path("/var/lib/octave/sn114/external/SOMA-plugin")
|
| 4 |
+
csv.field_size_limit(50_000_000)
|
| 5 |
+
rows=list(csv.DictReader(open(R/"miner/plain_text_compression/sample_tasks/CoT-Compression-1/challenges.csv")))
|
| 6 |
+
G1=chr(0xab); G2=chr(0xbb); BS=chr(92)
|
| 7 |
+
CALL=re.compile(G1+'c'+BS+'d+[a-z]{2}(.*?)'+G2, re.DOTALL)
|
| 8 |
+
PATHTOK=re.compile(r'/[\w./-]+')
|
| 9 |
+
def load(fn):
|
| 10 |
+
s=importlib.util.spec_from_file_location("n_"+fn[:8], PL/fn)
|
| 11 |
+
m=importlib.util.module_from_spec(s); s.loader.exec_module(m); return m
|
| 12 |
+
A=load('structural_cot_compressor.py'); B=load('structural_pathkeep_compressor.py')
|
| 13 |
+
A.MAX_TOOL_CALL=60; B.MAX_TOOL_CALL=60
|
| 14 |
+
restored=0; already_elsewhere=0; genuinely_new=0
|
| 15 |
+
for r in rows:
|
| 16 |
+
raw=r['challenge_text']
|
| 17 |
+
ca=A.compress_content(raw); cb=B.compress_content(raw)
|
| 18 |
+
ba=CALL.findall(ca); bb=CALL.findall(cb)
|
| 19 |
+
if len(ba)!=len(bb): continue
|
| 20 |
+
for x,y in zip(ba,bb):
|
| 21 |
+
if x==y: continue
|
| 22 |
+
py=PATHTOK.findall(y)
|
| 23 |
+
if not py: continue
|
| 24 |
+
base=max(py,key=len).rsplit('/',1)[-1]
|
| 25 |
+
if not base or base in x: continue
|
| 26 |
+
restored+=1
|
| 27 |
+
# is that basename present ANYWHERE else in the shipped compressed output?
|
| 28 |
+
if base in ca: already_elsewhere+=1
|
| 29 |
+
else: genuinely_new+=1
|
| 30 |
+
out={'restored_basenames':restored,'already_elsewhere_in_shipped_output':already_elsewhere,
|
| 31 |
+
'genuinely_new_tokens':genuinely_new,
|
| 32 |
+
'pct_already_present':round(100*already_elsewhere/restored,2) if restored else None}
|
| 33 |
+
json.dump(out, open(R/"basename_novelty.json","w"), indent=2)
|
| 34 |
+
print(' restored basenames:',restored)
|
| 35 |
+
print(' already elsewhere in shipped output:',already_elsewhere,'(%s%%)'%out['pct_already_present'])
|
| 36 |
+
print(' genuinely new to the document:',genuinely_new)
|
official_retention_v84.json
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"metric": "lexical answer-retention proxy (NOT the official LLM-judged score)",
|
| 3 |
+
"results": {
|
| 4 |
+
"performance": {
|
| 5 |
+
"compression_percent": 97.738,
|
| 6 |
+
"mean_answer_retention": 0.6023,
|
| 7 |
+
"micro_term_retention": 0.594,
|
| 8 |
+
"worst_question_retention": 0.0909,
|
| 9 |
+
"tasks": 5,
|
| 10 |
+
"questions_scored": 49,
|
| 11 |
+
"retention_x_compression": 0.5887
|
| 12 |
+
},
|
| 13 |
+
"aggressive": {
|
| 14 |
+
"compression_percent": 99.388,
|
| 15 |
+
"mean_answer_retention": 0.1983,
|
| 16 |
+
"micro_term_retention": 0.1888,
|
| 17 |
+
"worst_question_retention": 0.0,
|
| 18 |
+
"tasks": 5,
|
| 19 |
+
"questions_scored": 49,
|
| 20 |
+
"retention_x_compression": 0.1971
|
| 21 |
+
},
|
| 22 |
+
"code_focused": {
|
| 23 |
+
"compression_percent": 98.24,
|
| 24 |
+
"mean_answer_retention": 0.309,
|
| 25 |
+
"micro_term_retention": 0.2908,
|
| 26 |
+
"worst_question_retention": 0.0,
|
| 27 |
+
"tasks": 5,
|
| 28 |
+
"questions_scored": 49,
|
| 29 |
+
"retention_x_compression": 0.3036
|
| 30 |
+
},
|
| 31 |
+
"hybrid": {
|
| 32 |
+
"compression_percent": 49.016,
|
| 33 |
+
"mean_answer_retention": 0.9619,
|
| 34 |
+
"micro_term_retention": 0.9627,
|
| 35 |
+
"worst_question_retention": 0.6154,
|
| 36 |
+
"tasks": 5,
|
| 37 |
+
"questions_scored": 49,
|
| 38 |
+
"retention_x_compression": 0.4715
|
| 39 |
+
},
|
| 40 |
+
"adaptive": {
|
| 41 |
+
"compression_percent": 41.808,
|
| 42 |
+
"mean_answer_retention": 0.9619,
|
| 43 |
+
"micro_term_retention": 0.9627,
|
| 44 |
+
"worst_question_retention": 0.6154,
|
| 45 |
+
"tasks": 5,
|
| 46 |
+
"questions_scored": 49,
|
| 47 |
+
"retention_x_compression": 0.4022
|
| 48 |
+
},
|
| 49 |
+
"thinking_strip": {
|
| 50 |
+
"compression_percent": 12.909,
|
| 51 |
+
"mean_answer_retention": 0.9982,
|
| 52 |
+
"micro_term_retention": 0.9983,
|
| 53 |
+
"worst_question_retention": 0.9091,
|
| 54 |
+
"tasks": 5,
|
| 55 |
+
"questions_scored": 49,
|
| 56 |
+
"retention_x_compression": 0.1289
|
| 57 |
+
},
|
| 58 |
+
"dialogue": {
|
| 59 |
+
"compression_percent": 0.0,
|
| 60 |
+
"mean_answer_retention": 1.0,
|
| 61 |
+
"micro_term_retention": 1.0,
|
| 62 |
+
"worst_question_retention": 1.0,
|
| 63 |
+
"tasks": 5,
|
| 64 |
+
"questions_scored": 49,
|
| 65 |
+
"retention_x_compression": 0.0
|
| 66 |
+
},
|
| 67 |
+
"structural": {
|
| 68 |
+
"compression_percent": 78.833,
|
| 69 |
+
"mean_answer_retention": 0.9628,
|
| 70 |
+
"micro_term_retention": 0.9621,
|
| 71 |
+
"worst_question_retention": 0.6364,
|
| 72 |
+
"tasks": 5,
|
| 73 |
+
"questions_scored": 49,
|
| 74 |
+
"retention_x_compression": 0.759
|
| 75 |
+
},
|
| 76 |
+
"structural_reasoning": {
|
| 77 |
+
"compression_percent": 77.438,
|
| 78 |
+
"mean_answer_retention": 0.9643,
|
| 79 |
+
"micro_term_retention": 0.9633,
|
| 80 |
+
"worst_question_retention": 0.6364,
|
| 81 |
+
"tasks": 5,
|
| 82 |
+
"questions_scored": 49,
|
| 83 |
+
"retention_x_compression": 0.7467
|
| 84 |
+
},
|
| 85 |
+
"adaptive_structural": {
|
| 86 |
+
"compression_percent": 86.49,
|
| 87 |
+
"mean_answer_retention": 0.9091,
|
| 88 |
+
"micro_term_retention": 0.9094,
|
| 89 |
+
"worst_question_retention": 0.5455,
|
| 90 |
+
"tasks": 5,
|
| 91 |
+
"questions_scored": 49,
|
| 92 |
+
"retention_x_compression": 0.7863
|
| 93 |
+
},
|
| 94 |
+
"structural_lowcomp": {
|
| 95 |
+
"compression_percent": 64.129,
|
| 96 |
+
"mean_answer_retention": 0.9822,
|
| 97 |
+
"micro_term_retention": 0.9815,
|
| 98 |
+
"worst_question_retention": 0.7273,
|
| 99 |
+
"tasks": 5,
|
| 100 |
+
"questions_scored": 49,
|
| 101 |
+
"retention_x_compression": 0.6299
|
| 102 |
+
},
|
| 103 |
+
"structural_selective": {
|
| 104 |
+
"compression_percent": 79.255,
|
| 105 |
+
"mean_answer_retention": 0.9628,
|
| 106 |
+
"micro_term_retention": 0.9621,
|
| 107 |
+
"worst_question_retention": 0.6364,
|
| 108 |
+
"tasks": 5,
|
| 109 |
+
"questions_scored": 49,
|
| 110 |
+
"retention_x_compression": 0.763
|
| 111 |
+
},
|
| 112 |
+
"structural_selective_call": {
|
| 113 |
+
"compression_percent": 80.102,
|
| 114 |
+
"mean_answer_retention": 0.9587,
|
| 115 |
+
"micro_term_retention": 0.9586,
|
| 116 |
+
"worst_question_retention": 0.6364,
|
| 117 |
+
"tasks": 5,
|
| 118 |
+
"questions_scored": 49,
|
| 119 |
+
"retention_x_compression": 0.7679
|
| 120 |
+
},
|
| 121 |
+
"structural_pathkeep": {
|
| 122 |
+
"compression_percent": 78.787,
|
| 123 |
+
"mean_answer_retention": 0.9628,
|
| 124 |
+
"micro_term_retention": 0.9621,
|
| 125 |
+
"worst_question_retention": 0.6364,
|
| 126 |
+
"tasks": 5,
|
| 127 |
+
"questions_scored": 49,
|
| 128 |
+
"retention_x_compression": 0.7585
|
| 129 |
+
}
|
| 130 |
+
}
|
| 131 |
+
}
|
pathkeep_official.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"harness_reality": {
|
| 3 |
+
"what_i_expected": "an official harness that produced the published 73.11%/0.9360 on 150 challenges",
|
| 4 |
+
"what_exists": "answer_retention_eval.py, which self-labels as a \"lexical answer-retention proxy (NOT the official LLM-judged score)\", has no --limit flag and defaults to a 5-task/49-question subset",
|
| 5 |
+
"conclusion": "there is no official harness in this repo; every retention number I have is a lexical proxy of some kind, and the announced comparison could not be run as announced"
|
| 6 |
+
},
|
| 7 |
+
"registry_edit": "answer_retention_eval.py COMPRESSORS gained structural_selective, structural_selective_call and structural_pathkeep; purely additive, no existing entry modified",
|
| 8 |
+
"official_proxy_results": {
|
| 9 |
+
"structural": {
|
| 10 |
+
"compression_percent": 78.833,
|
| 11 |
+
"mean_answer_retention": 0.9628,
|
| 12 |
+
"micro_term_retention": 0.9621,
|
| 13 |
+
"worst_question_retention": 0.6364,
|
| 14 |
+
"tasks": 5,
|
| 15 |
+
"questions_scored": 49,
|
| 16 |
+
"retention_x_compression": 0.759
|
| 17 |
+
},
|
| 18 |
+
"structural_reasoning": {
|
| 19 |
+
"compression_percent": 77.438,
|
| 20 |
+
"mean_answer_retention": 0.9643,
|
| 21 |
+
"micro_term_retention": 0.9633,
|
| 22 |
+
"worst_question_retention": 0.6364,
|
| 23 |
+
"tasks": 5,
|
| 24 |
+
"questions_scored": 49,
|
| 25 |
+
"retention_x_compression": 0.7467
|
| 26 |
+
},
|
| 27 |
+
"structural_lowcomp": {
|
| 28 |
+
"compression_percent": 64.129,
|
| 29 |
+
"mean_answer_retention": 0.9822,
|
| 30 |
+
"micro_term_retention": 0.9815,
|
| 31 |
+
"worst_question_retention": 0.7273,
|
| 32 |
+
"tasks": 5,
|
| 33 |
+
"questions_scored": 49,
|
| 34 |
+
"retention_x_compression": 0.6299
|
| 35 |
+
},
|
| 36 |
+
"structural_selective": {
|
| 37 |
+
"compression_percent": 79.255,
|
| 38 |
+
"mean_answer_retention": 0.9628,
|
| 39 |
+
"micro_term_retention": 0.9621,
|
| 40 |
+
"worst_question_retention": 0.6364,
|
| 41 |
+
"tasks": 5,
|
| 42 |
+
"questions_scored": 49,
|
| 43 |
+
"retention_x_compression": 0.763
|
| 44 |
+
},
|
| 45 |
+
"structural_selective_call": {
|
| 46 |
+
"compression_percent": 80.102,
|
| 47 |
+
"mean_answer_retention": 0.9587,
|
| 48 |
+
"micro_term_retention": 0.9586,
|
| 49 |
+
"worst_question_retention": 0.6364,
|
| 50 |
+
"tasks": 5,
|
| 51 |
+
"questions_scored": 49,
|
| 52 |
+
"retention_x_compression": 0.7679
|
| 53 |
+
},
|
| 54 |
+
"structural_pathkeep": {
|
| 55 |
+
"compression_percent": 78.787,
|
| 56 |
+
"mean_answer_retention": 0.9628,
|
| 57 |
+
"micro_term_retention": 0.9621,
|
| 58 |
+
"worst_question_retention": 0.6364,
|
| 59 |
+
"tasks": 5,
|
| 60 |
+
"questions_scored": 49,
|
| 61 |
+
"retention_x_compression": 0.7585
|
| 62 |
+
}
|
| 63 |
+
},
|
| 64 |
+
"null_result": {
|
| 65 |
+
"finding": "pathkeep retention is IDENTICAL to shipped at 0.9628 mean / 0.9621 micro / 0.6364 worst; compression 78.787% vs 78.833%",
|
| 66 |
+
"retraction_from_v84": "I published \"term retention +0.0009, small but the correct sign\". The better-specified proxy says +0.0000. My ad-hoc metric produced a signal indistinguishable from its own noise and I reported its direction as meaningful",
|
| 67 |
+
"error_class": "eighth narration-class error, and the first where I over-read a delta rather than a range"
|
| 68 |
+
},
|
| 69 |
+
"explanation_tested": {
|
| 70 |
+
"hypothesis": "restored basenames are usually already elsewhere in the document, so a bag-of-terms proxy cannot see the change - stated before measuring",
|
| 71 |
+
"restored_basenames": 1454,
|
| 72 |
+
"already_elsewhere": 1297,
|
| 73 |
+
"pct_already_present": 89.2,
|
| 74 |
+
"genuinely_new": 157,
|
| 75 |
+
"verdict": "CONFIRMED - 89.2% already present, only 157 of 1454 restorations add a token the document lacked"
|
| 76 |
+
},
|
| 77 |
+
"decision": {
|
| 78 |
+
"pathkeep": "stays UNPROMOTED",
|
| 79 |
+
"sharper_reason": "not \"risk unquantified\" but \"benefit unobservable with available instruments\" - the mechanism claim is about LOCAL availability inside the span the agent is reading, and every proxy I own is position-blind",
|
| 80 |
+
"what_it_names": "this is a more useful blocker because it says exactly what an OpenRouter key would buy: a metric that can see position"
|
| 81 |
+
},
|
| 82 |
+
"revert_proofs": "14 checks incl. 2 live source mutations (unregister pathkeep, harness claiming to be official) and 12 report mutations covering the retraction, the tested explanation, post-hoc restatement, silent promotion and baseline drift"
|
| 83 |
+
}
|
test_compressors.py
CHANGED
|
@@ -7504,5 +7504,105 @@ class TestPathKeepCompressor(unittest.TestCase):
|
|
| 7504 |
self.assertIn("NOT comparable", self.rep["metric_caveat"])
|
| 7505 |
self.assertIn("73.11", self.rep["metric_caveat"])
|
| 7506 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7507 |
if __name__ == "__main__":
|
| 7508 |
unittest.main(verbosity=2)
|
|
|
|
| 7504 |
self.assertIn("NOT comparable", self.rep["metric_caveat"])
|
| 7505 |
self.assertIn("73.11", self.rep["metric_caveat"])
|
| 7506 |
|
| 7507 |
+
class TestPathKeepAgainstOfficialProxy(unittest.TestCase):
|
| 7508 |
+
"""I announced I would run pathkeep through "the official harness path that produced
|
| 7509 |
+
73.11%/0.9360". Two things came out of trying, and both are corrections.
|
| 7510 |
+
|
| 7511 |
+
THERE IS NO OFFICIAL HARNESS HERE. answer_retention_eval.py self-labels as a "lexical
|
| 7512 |
+
answer-retention proxy (NOT the official LLM-judged score)", has no --limit flag, and
|
| 7513 |
+
defaults to a 5-task/49-question subset. So it is a better-specified proxy than my ad-hoc
|
| 7514 |
+
regex, not an official measurement, and the comparison I announced could not be run as
|
| 7515 |
+
announced. Every retention number I hold is a lexical proxy of some kind.
|
| 7516 |
+
|
| 7517 |
+
THE RESULT IS NULL. pathkeep retention is IDENTICAL to shipped - 0.9628 mean, 0.9621
|
| 7518 |
+
micro, 0.6364 worst - with compression 78.787% vs 78.833%.
|
| 7519 |
+
|
| 7520 |
+
RETRACTION FROM v84: I published "term retention +0.0009, small but the correct sign".
|
| 7521 |
+
The better-specified proxy says +0.0000. My ad-hoc metric produced a signal
|
| 7522 |
+
indistinguishable from its own noise and I reported its direction as meaningful. Eighth
|
| 7523 |
+
narration-class error, and the first where I over-read a DELTA rather than a range.
|
| 7524 |
+
|
| 7525 |
+
EXPLANATION STATED FIRST, THEN TESTED: restored basenames are usually already elsewhere
|
| 7526 |
+
in the document, so a bag-of-terms proxy cannot see the change. Measured: of 1454
|
| 7527 |
+
restored basenames, 1297 (89.2%) already appear in the shipped compressed output; only
|
| 7528 |
+
157 add a token the document lacked. CONFIRMED, and it predicts the null exactly.
|
| 7529 |
+
|
| 7530 |
+
DECISION: pathkeep stays unpromoted, for a sharper reason than before - not "risk
|
| 7531 |
+
unquantified" but "benefit unobservable with available instruments". The mechanism claim
|
| 7532 |
+
is about LOCAL availability inside the span the agent is reading; every proxy I own is
|
| 7533 |
+
position-blind. That names what an OpenRouter key would buy.
|
| 7534 |
+
"""
|
| 7535 |
+
|
| 7536 |
+
P = Path("/var/lib/octave/sn114/repo/pathkeep_official.json")
|
| 7537 |
+
AR = Path("/var/lib/octave/sn114/repo/answer_retention_eval.py")
|
| 7538 |
+
|
| 7539 |
+
@classmethod
|
| 7540 |
+
def setUpClass(cls):
|
| 7541 |
+
if not cls.P.exists():
|
| 7542 |
+
raise unittest.SkipTest("pathkeep_official.json missing")
|
| 7543 |
+
cls.rep = json.loads(cls.P.read_text())
|
| 7544 |
+
cls.res = cls.rep["official_proxy_results"]
|
| 7545 |
+
|
| 7546 |
+
def test_harness_self_labels_as_a_proxy(self):
|
| 7547 |
+
src = self.AR.read_text()
|
| 7548 |
+
self.assertIn(
|
| 7549 |
+
"NOT the official LLM-judged score", src,
|
| 7550 |
+
"answer_retention_eval.py no longer disclaims being official; if it became "
|
| 7551 |
+
"the real harness the whole proxy caveat needs revisiting")
|
| 7552 |
+
self.assertIn("no --limit", self.rep["harness_reality"]["what_exists"])
|
| 7553 |
+
|
| 7554 |
+
def test_new_compressors_are_registered_live(self):
|
| 7555 |
+
src = self.AR.read_text()
|
| 7556 |
+
for name in ("structural_selective", "structural_selective_call",
|
| 7557 |
+
"structural_pathkeep"):
|
| 7558 |
+
with self.subTest(name=name):
|
| 7559 |
+
self.assertIn(
|
| 7560 |
+
name, src,
|
| 7561 |
+
"%s dropped out of the COMPRESSORS registry, so it is silently "
|
| 7562 |
+
"excluded from every sweep" % name)
|
| 7563 |
+
|
| 7564 |
+
def test_pathkeep_retention_is_identical_not_better(self):
|
| 7565 |
+
ship = self.res["structural"]
|
| 7566 |
+
pk = self.res["structural_pathkeep"]
|
| 7567 |
+
for key in ("mean_answer_retention", "micro_term_retention",
|
| 7568 |
+
"worst_question_retention"):
|
| 7569 |
+
with self.subTest(key=key):
|
| 7570 |
+
self.assertEqual(
|
| 7571 |
+
pk[key], ship[key],
|
| 7572 |
+
"pathkeep %s now differs from shipped; the recorded null result and "
|
| 7573 |
+
"the v84 retraction would both need re-deriving" % key)
|
| 7574 |
+
|
| 7575 |
+
def test_v84_retention_claim_is_retracted(self):
|
| 7576 |
+
r = self.rep["null_result"]["retraction_from_v84"]
|
| 7577 |
+
self.assertIn("+0.0009", r)
|
| 7578 |
+
self.assertIn("indistinguishable from its own noise", r)
|
| 7579 |
+
self.assertIn("over-read a delta", self.rep["null_result"]["error_class"])
|
| 7580 |
+
|
| 7581 |
+
def test_basename_novelty_explains_the_null(self):
|
| 7582 |
+
e = self.rep["explanation_tested"]
|
| 7583 |
+
self.assertEqual(e["verdict"][:9], "CONFIRMED")
|
| 7584 |
+
self.assertGreater(
|
| 7585 |
+
e["pct_already_present"], 80.0,
|
| 7586 |
+
"if most restored basenames were NOT already in the document, a lexical "
|
| 7587 |
+
"proxy should have seen the change and the null would need another cause")
|
| 7588 |
+
self.assertEqual(e["restored_basenames"],
|
| 7589 |
+
e["already_elsewhere"] + e["genuinely_new"])
|
| 7590 |
+
|
| 7591 |
+
def test_explanation_was_stated_before_measuring(self):
|
| 7592 |
+
self.assertIn("stated before measuring",
|
| 7593 |
+
self.rep["explanation_tested"]["hypothesis"])
|
| 7594 |
+
|
| 7595 |
+
def test_decision_names_the_instrument_gap(self):
|
| 7596 |
+
d = self.rep["decision"]
|
| 7597 |
+
self.assertEqual(d["pathkeep"], "stays UNPROMOTED")
|
| 7598 |
+
self.assertIn("position-blind", d["sharper_reason"])
|
| 7599 |
+
self.assertIn("unobservable", d["sharper_reason"])
|
| 7600 |
+
|
| 7601 |
+
def test_registry_edit_was_additive(self):
|
| 7602 |
+
self.assertIn("purely additive", self.rep["registry_edit"])
|
| 7603 |
+
ship = self.res["structural"]
|
| 7604 |
+
self.assertAlmostEqual(ship["compression_percent"], 78.833, places=3)
|
| 7605 |
+
self.assertAlmostEqual(ship["mean_answer_retention"], 0.9628, places=4)
|
| 7606 |
+
|
| 7607 |
if __name__ == "__main__":
|
| 7608 |
unittest.main(verbosity=2)
|