# _l3.py -- L3 INVERSE MAPS (Babel Stage 3). PROPOSE-ONLY. GPT-2 124M. # Pre-registration: FINDINGS_PEN_CONSTRUCTIVE_2026-06-28.md :: # "L3 -- INVERSE MAPS (BABEL STAGE 3): BUILD ENCODER_V1 ... PRE-REGISTRATION (2026-07-06)". # Brief: BABEL_PROGRAM_BRIEF_2026-07-05.md STAGE 3 (fired by _relay_l3.bat on _l2_babel.done). # MACHINERY reused VERBATIM from _v7.py (=_v6): model loader / capture / fkl / InjectHook / # inject_kl_full / inject_kl_pidx / proj_compl / s4_delta / folded-r48 recipe / frozen-rung forward / # substitution metering. THE ENCODER IS DEFINED, NOT TRAINED: every readable channel's gloss->state # map is the algebraic right-inverse of decoder_v7's frozen read. No optimization, no new weights. # M1 GLOSS-EXACT (algebraic roundtrip) ; M2 WELLPOSED (39-cell encode-then-decode substitution KL vs # recal floors, per-cell byte-replay of decoder_v7's certified grain) ; M3 OFFSPAN (8 named axes, # sigma-matched nulls, extrapolation classification). Standing decoder decoder_v7 (b1d2f464c00c3ef6). import json, time, os, math, traceback, gc, subprocess, hashlib, ctypes import torch, torch.nn as nn, torch.nn.functional as Fnn t0=time.time() DIR=r"C:\Shadow\Dissector\D0_PROGRAM\CONSTRUCTIVE" SMOKE=os.environ.get("L3_SMOKE")=="1" LOG=open(os.path.join(DIR,"_l3.log"),"a",encoding="utf-8") def logln(s): s=str(s); LOG.write(f"[L3 {round(time.time()-t0,1):8.1f}s] "+s+"\n"); LOG.flush() try: print(s,flush=True) except Exception: pass def el(): return round(time.time()-t0,1) logln("="*100); logln(f"L3 START smoke={SMOKE} torch={torch.__version__}") try: ctypes.windll.kernel32.SetPriorityClass(ctypes.windll.kernel32.GetCurrentProcess(),0x4000) logln("[ops] priority BelowNormal set") except Exception as e: logln(f"[ops] priority set failed: {e}") torch.set_num_threads(6) # ---------------- locked constants (verbatim v7) ---------------- EPS_KL=0.1871; CERT_BLOCK=512; IND_SEG=64; MB=4; CAP_CHUNK=16 VOCAB_SANS_SPECIALS=50256; REGIMES=["prose","code","repetition"] FRESH_LO,FRESH_HI=24576,32768 REP_SEED=3; B2b=2; B5=5 N_HOLD=16 # holdout blocks per regime (v7 fresh-window / rep SACRED size); smoke keeps full N so byte-replay is meaningful TOL_REPLAY=2e-3 DEC_V7_SHA="b1d2f464c00c3ef6" SOFT_WALL_S=3*3600; HARD_WALL_S=int(11.5*3600) # decoder_v7's certified reconstruction grain per cell (V7 recal table is the authoritative KL bank). # grain resolution priority: RUNG (rep b5/b6/b7) > r48 fold (FOLD_R48 cells) > O20 fold (b>=8) > named (S4). FOLD_R48={("code",4),("code",5),("code",6),("code",7),("code",8),("code",9),("code",10),("code",11), ("prose",12),("repetition",8),("repetition",9),("repetition",10),("repetition",11),("repetition",12)} RUNG_CELLS={("repetition",5):"surrogate",("repetition",6):"onset_b6",("repetition",7):"onset_b7"} # M3 off-span axes (pre-registered; English names from LEXICON_V3). k grid + null dirs. K_GRID=[3,5,10,-3,-5,-10] if not SMOKE else [5,-5] N_NULLDIR=3 if not SMOKE else 1 RESULT_JSON=os.path.join(DIR,"_l3_result_SMOKE.json" if SMOKE else "_l3_result.json") BASES_PT=os.path.join(DIR,"_l3_bases_SMOKE.pt" if SMOKE else "_l3_bases.pt") ENCODER_PT=os.path.join(DIR,"_l3_encoder.pt") ENCODER_JSON=os.path.join(DIR,"ENCODER_V1.json") WP_JSON=os.path.join(DIR,"WELLPOSEDNESS_TABLE_V1.json") OS_JSON=os.path.join(DIR,"OFFSPAN_TABLE_V1.json") torch.manual_seed(1234) PEN=("FINDINGS_PEN_CONSTRUCTIVE_2026-06-28.md :: 'L3 -- INVERSE MAPS (BABEL STAGE 3): BUILD ENCODER_V1 " "(gloss->state), WELL-POSEDNESS TABLE, OFF-SPAN BEHAVIOR -- GAP-SCAN + PRE-REGISTRATION (2026-07-06)'") res={"experiment":"L3 inverse maps (Babel Stage 3): build+freeze ENCODER_V1 (gloss->state right-inverse " "of decoder_v7), well-posedness table (39-cell encode-then-decode substitution KL vs recal floors), " "off-span behavior (8 named axes, sigma-matched nulls). GPT-2 124M.", "date":"2026-07-06","propose_only":True,"pre_registration":PEN, "locked":{"eps_kl":EPS_KL,"tol_replay":TOL_REPLAY, "M1_bands":"EXACT<=1e-3 / APPROX<=1e-1 / LOSSY>1e-1 ; bet EXACT80/APPROX15/LOSSY5", "M2_bands":"WELL-POSED==39 / MOSTLY 34-38 / ILL<34 (recal PRIMARY) ; bet WP75/MOSTLY20/ILL5", "M3_bands":"per-axis STRUCTURED(mono&R>=1.5)/MANIFOLD-BOUND(1/1.5=3 and p[0].isdigit() and int(p[0])!=me and "python" in p[1].lower(): rec["foreign"].append(line) except Exception as e: rec["error"]=str(e) waited=0 while rec["foreign"] and waited<600: logln(f"[gpu {tag}] FOREIGN {rec['foreign']} wait60"); time.sleep(60); waited+=60 try: out=subprocess.run(["nvidia-smi","--query-compute-apps=pid,process_name,used_memory","--format=csv,noheader"], capture_output=True,text=True,timeout=30).stdout me=os.getpid(); rec["foreign"]=[] for line in out.strip().splitlines(): p=[x.strip() for x in line.split(",")] if len(p)>=3 and p[0].isdigit() and int(p[0])!=me and "python" in p[1].lower(): rec["foreign"].append(line) except Exception: break rec["waited_s"]=waited; rec["clear"]=not rec["foreign"] if rec["foreign"]: res["instrument_discrepancy"].append({"stage":tag,"name":"gpu_free_check","why":str(rec["foreign"])}) res["gpu_free_checks"].append(rec); write_json(); logln(f"[gpu {tag}] clear={rec['clear']}"); return rec["clear"] def free(): gc.collect(); torch.cuda.empty_cache() # ---------------- model (v7 loader verbatim) ---------------- from transformers import AutoModelForCausalLM, AutoTokenizer M={"m":None} def ensure_model(): if M["m"] is not None: return if not torch.cuda.is_available(): raise RuntimeError("CUDA not available") torch.backends.cuda.matmul.allow_tf32=False; torch.backends.cudnn.allow_tf32=False tok=AutoTokenizer.from_pretrained("gpt2") model=AutoModelForCausalLM.from_pretrained("gpt2",dtype=torch.float32,attn_implementation="eager").to('cuda').eval() model.requires_grad_(False) M["m"]=model; M["tok"]=tok; M["blocks"]=list(model.transformer.h); M["drop"]=model.transformer.drop M["d"]=model.config.n_embd; M["nL"]=model.config.n_layer M["wte"]=model.transformer.wte.weight.detach().float() res["gpt2_meta"]={"n_layer":M["nL"],"d":M["d"],"precision":"fp32","tf32":"off","attn":"eager"} logln(f"[gpt2] loaded fp32 eager nL={M['nL']} d={M['d']}") def load_wiki_text(): from datasets import load_dataset ds=load_dataset("wikitext","wikitext-2-raw-v1",split="test") return "\n".join(t for t in ds["text"] if t and t.strip()) def load_code_text(): from datasets import load_dataset ds=load_dataset("openai_humaneval")["test"] return "".join(ds[i]["prompt"]+ds[i]["canonical_solution"] for i in range(len(ds))) def build_dind(n_blocks,block,seed): g=torch.Generator().manual_seed(seed) seg=torch.randint(0,VOCAB_SANS_SPECIALS,(n_blocks,IND_SEG),generator=g) return seg.repeat(1,block//IND_SEG) def ids_window(all_ids,lo,hi,what): if len(all_ids) used at prose b8..b11 and code b12 O20_g={int(b):D7["O20"][b].float().to('cuda') for b in D7["O20"]} # rungs def load_rung(sd_key,sc_mean_key,sc_std_key): r=LinearRung(1537,d).to('cuda').eval() r.load_state_dict({k:v.to('cuda').float() for k,v in D7[sd_key].items()}) return r, D7[sc_mean_key].to('cuda').float(), D7[sc_std_key].to('cuda').float() RUNG={} RUNG[("repetition",5)]=load_rung("surrogate_state_dict","surrogate_scaler_mean","surrogate_scaler_std") RUNG[("repetition",6)]=load_rung("onset_b6_state_dict","onset_b6_scaler_mean","onset_b6_scaler_std") RUNG[("repetition",7)]=load_rung("onset_b7_state_dict","onset_b7_scaler_mean","onset_b7_scaler_std") # floors frec=json.load(open(os.path.join(DIR,"_v5_floors_recal.json"),encoding="utf-8")) floors_leg={int(b):{k:float(v) for k,v in frec["floors_legacy"][str(b)].items()} for b in range(13)} floors_rec={int(b):{k:(float(v) if v is not None else None) for k,v in frec["floors_recal"][str(b)].items()} for b in range(13)} RECAL_OK=(not frec.get("quarantined")) and frec.get("sg_early_ok") and frec.get("repl_all") v3=json.load(open(os.path.join(DIR,"_v3_result.json"),encoding="utf-8")); v3cells=v3["cells"] # V7 recal table = authoritative decoder_v7 certified per-cell KL bank (byte-replay target, all 39) v7rec=json.load(open(os.path.join(DIR,"_v7_result.json"),encoding="utf-8"))["verdict"]["tables"]["recal"]["cells"] def cell_bank(regime,b): c=v7rec.get(f"{regime}_b{b}"); return (float(c["KL"]) if c and c.get("KL") is not None else None) logln(f"[objects] loaded. RECAL_OK={RECAL_OK} r48_folds={len(FOLD_O)} O20_folds={len(O20_g)} rungs={len(RUNG)}") def proj_compl(x): return x-(x@span5)@span5.t() def wte_y4(ids_flat_g,b): Ecur=wte_g[ids_flat_g]; yhat=Ecur@wteW_g[b].t()+wtec_g[b] y2=yhat-(yhat@B2_g)@B2_g.t(); return y2-(y2@Q35_g)@Q35_g.t() # ======================= ENCODER_V1 build (right-inverse operators) ======================= # projection channels: encode = basis @ coords (orthonormal -> pinv = transpose); read_W right-inverse. def right_pinv(W): # W [k,p], right inverse [p,k] s.t. W @ pinv = I_k return W.t()@torch.linalg.inv(W@W.t()+1e-9*torch.eye(W.shape[0])) readW_pinv=torch.stack([right_pinv(read_W[b]) for b in range(read_W.shape[0])]) # [13,385,19] res["encoder"]={"channels":{ "core_C":{"encode":"dh = C @ g (g in R^19)","shape":list(C.shape),"orthonormal":True}, "corridor_Q35":{"encode":"dh = Q35 @ g (g in R^35)","shape":list(Q35.shape),"orthonormal":True}, "content_B2":{"encode":"dh = B2 @ g (g in R^404)","shape":list(B2.shape),"orthonormal":True}, "door_Q_union":{"encode":"dh = Q_union @ c (c in R^385 door coords)","shape":list(Qu.shape)}, "door_read19":{"encode":"c = readW_pinv[b] @ g19 ; dh = Q_union @ c","shape":list(read_W.shape), "note":"read_W[b] 19<-385 summarizer right-inverse"}, "door_Q_attn":{"encode":"dh = Q_attn @ c","shape":list(Qa.shape)}, "door_Q_mlp":{"encode":"dh = Q_mlp @ c","shape":list(Qm.shape)}, "wte":{"encode":"by construction: y4(token,b)=proj_compl(wte[tok]@wteW[b]^T+wtec[b])","note":"deterministic in token"}, "fold_O_r48":{"encode":"dh = O_r48_cell @ f (per cell)","cells":sorted([f"{r}_b{b}" for (r,b) in FOLD_O])}, "rung":{"encode":"run forward: oh=proj_compl(rung((feats-mean)/std)) ; feats=[x2,ecur,s]", "cells":sorted([f"{r}_b{b}" for (r,b) in RUNG])}, "seam_operators":{"source":"_l2babel_maps.pt (frozen)","sha":mapsha, "note":"W_regime_b [19,19]+bias -- seam-to-seam law for L4 T1 (referenced, not rebuilt)"}}} write_json() # ======================= M1 -- GLOSS-EXACT (algebraic roundtrip) ======================= if not res["M1"].get("done"): gpu_free_check("M1") # capture a prose holdout to get real states for the roundtrip (mid boundary b6) WIKI=M["tok"](load_wiki_text(),return_tensors=None,add_special_tokens=False)["input_ids"] ids_pr=ids_window(WIKI,FRESH_LO,FRESH_LO+N_HOLD*CERT_BLOCK,"wiki M1") cap=capture_h_all(ids_pr,"M1-prose") def roundtrip(basis_g,b): x=(cap[b].to('cuda')-mu_g[b]); g=x@basis_g num=((g@basis_g.t())@basis_g - g) # (B^T B - I) g rel=(num.norm(dim=1)/g.norm(dim=1).clamp(min=1e-9)) return float(rel.max()), float((basis_g.t()@basis_g-torch.eye(basis_g.shape[1],device='cuda')).norm()) chans={"core_C":(C_g,6),"content_B2":(B2_g,6),"corridor_Q35":(Q35_g,2), "door_Q_union":(Qu_g,6),"door_Q_attn":(Qa.to('cuda'),6),"door_Q_mlp":(Qm.to('cuda'),6), "host_Q":(hostQ.to('cuda'),6)} m1={} for nm,(bg,b) in chans.items(): r,orth=roundtrip(bg,b); m1[nm]={"roundtrip_rel_max":r,"orth_resid":orth, "band":("EXACT" if r<=1e-3 else ("APPROX" if r<=1e-1 else "LOSSY"))} logln(f"[M1 {nm}] roundtrip={r:.3e} orth={orth:.3e} -> {m1[nm]['band']}") # fold bases roundtrip (per cell, at cell boundary; use prose cap boundary as proxy for shape only) fold_rt=[] for (rg,b),O in FOLD_O.items(): x=(cap[min(b,12)].to('cuda')-mu_g[min(b,12)]); g=x@O num=((g@O.t())@O-g); rel=float((num.norm(dim=1)/g.norm(dim=1).clamp(min=1e-9)).max()) fold_rt.append(rel) m1["fold_O_r48_max"]={"roundtrip_rel_max":max(fold_rt),"n_cells":len(fold_rt), "band":("EXACT" if max(fold_rt)<=1e-3 else ("APPROX" if max(fold_rt)<=1e-1 else "LOSSY"))} # read_W right-inverse residual per boundary rw_res=[] for b in range(read_W.shape[0]): resid=float((read_W[b]@readW_pinv[b]-torch.eye(19)).norm()); rw_res.append(resid) m1["door_read19_rightinv"]={"resid_max":max(rw_res),"resid_per_b":[round(x,5) for x in rw_res], "band":("EXACT" if max(rw_res)<=1e-3 else ("APPROX" if max(rw_res)<=1e-1 else "LOSSY"))} proj_bands=[m1[k]["band"] for k in m1 if k!="door_read19_rightinv"] worst=max([m1[k]["roundtrip_rel_max"] for k in m1 if k!="door_read19_rightinv"]) verdict=("EXACT" if worst<=1e-3 else ("APPROX" if worst<=1e-1 else "LOSSY")) m1["VERDICT"]={"max_roundtrip_projection":worst,"H_L3_GLOSS_EXACT":verdict, "bet_favorite_hit":bool(verdict=="EXACT")} m1["done"]=True; res["M1"]=m1; write_json() del cap; free() logln(f"[M1 VERDICT] worst={worst:.3e} -> {verdict}") # ======================= M2 -- WELLPOSED (39-cell encode-then-decode) ======================= def build_regime_hold(regime): if regime=="prose": WIKI=M["tok"](load_wiki_text(),return_tensors=None,add_special_tokens=False)["input_ids"] return ids_window(WIKI,FRESH_LO,FRESH_LO+N_HOLD*CERT_BLOCK,"wiki hold") if regime=="code": CIDS=M["tok"](load_code_text(),return_tensors=None,add_special_tokens=False)["input_ids"] return ids_window(CIDS,FRESH_LO,FRESH_LO+N_HOLD*CERT_BLOCK,"code hold") if regime=="repetition": return build_dind(N_HOLD,CERT_BLOCK,REP_SEED) raise RuntimeError(regime) # SMOKE exercises every grain type: prose named(b2)/O20(b11)/r48(b12); code named(b3)/O20(b12); rep rung(b6)/r48(b8) PLAN=({"prose":[2,11,12],"code":[3,12],"repetition":[6,8]} if SMOKE else {r:list(range(nL+1)) for r in REGIMES}) for regime in PLAN: plan_bs=PLAN[regime] need=[b for b in plan_bs if f"{regime}_b{b}" not in res["M2"]["cells"]] if not need: logln(f"[M2 {regime}] all done skip"); continue if el()>HARD_WALL_S: break gpu_free_check(f"M2-{regime}") ids=build_regime_hold(regime); N=ids.shape[0] cap=capture_h_all(ids,f"M2-{regime}",extra_wm0=(regime=="repetition")) Ycl=clean_logits(ids) ids_flat_g=ids.reshape(-1).to('cuda') # rung features (rep only): x2,ecur,s if regime=="repetition": x2=cap[2].to('cuda')-mu_g[2]; ecur=wte_g[ids_flat_g]; s=cap['wm0'].to('cuda')@Vk_g feats_full=torch.cat([x2,ecur,s],1) # [ntok,1537] for b in plan_bs: key=f"{regime}_b{b}" if key in res["M2"]["cells"]: continue if el()>HARD_WALL_S: break Xc=cap[b].to('cuda')-mu_g[b] b2P=(Xc@B2_g)@B2_g.t(); q35P=(Xc@Q35_g)@Q35_g.t() y4=wte_y4(ids_flat_g,b) bank=cell_bank(regime,b) # decoder_v7 certified KL (V7 recal table) -- authoritative # grain resolution: rung > r48 fold > O20 fold (b>=8) > named if (regime,b) in RUNG_CELLS: cell_kind="rung"; rung,scm,scs=RUNG[(regime,b)] with torch.no_grad(): oh=proj_compl(rung((feats_full-scm)/scs)) recon=b2P+q35P+oh elif (regime,b) in FOLD_O: cell_kind="r48"; O=FOLD_O[(regime,b)] oP=(Xc@O)@O.t(); yk=y4-(y4@O)@O.t(); recon=b2P+q35P+oP+yk elif b>=8 and b in O20_g: cell_kind="O20"; O=O20_g[b] oP=(Xc@O)@O.t(); yk=y4-(y4@O)@O.t(); recon=b2P+q35P+oP+yk else: cell_kind="named"; recon=b2P+q35P+y4 delta=(recon-Xc).reshape(N,CERT_BLOCK,d) inj=InjectHook(M["blocks"][b-1]) if b>=1 else InjectHook(M["drop"]) # identity sanity id_kl,id_dl=inject_kl_full(ids,inj,torch.zeros(N,CERT_BLOCK,d),Ycl,want_dl=True) # metering (verbatim decoder_v7 grain): rung cells kl_rep (IND_SEG zeroed, [64,512)); ALL else kl_all if (regime,b) in RUNG_CELLS: meter="kl_rep"; dz=delta.clone(); dz[:, :IND_SEG, :]=0.0 kl=inject_kl_pidx(ids,inj,dz,Ycl,torch.arange(IND_SEG,CERT_BLOCK)) else: meter="kl_all"; kl=inject_kl_full(ids,inj,delta,Ycl) inj.close() fl_rec=floors_rec[b][regime] if floors_rec[b].get(regime) is not None else (0.1871 if regime=="prose" else None) fl_leg=floors_leg[b][regime] replay_ok=True; replay_d=None if bank is not None: replay_d=abs(kl-bank); replay_ok=bool(replay_d<=TOL_REPLAY) if not replay_ok: res["instrument_discrepancy"].append({"stage":f"M2-{key}","name":"byte_replay", "why":f"kl={kl:.5f} bank={bank} d={replay_d:.5f}"}) sane=bool(id_kl<=1e-9 and id_dl<=1e-4) if not sane: res["instrument_discrepancy"].append({"stage":f"M2-{key}","name":"identity","why":f"kl={id_kl} dl={id_dl}"}) wp=bool(fl_rec is not None and kl<=fl_rec and sane and replay_ok and RECAL_OK) res["M2"]["cells"][key]={"regime":regime,"b":b,"grain":cell_kind,"meter":meter,"KL":round(kl,5), "floor_recal":fl_rec,"floor_legacy":fl_leg,"bank":bank,"replay_d":(round(replay_d,5) if replay_d is not None else None), "replay_ok":replay_ok,"identity_kl":id_kl,"identity_dlogit":round(id_dl,6),"identity_pass":sane, "well_posed":wp,"legacy_pass":bool(kl<=fl_leg)} write_json() logln(f"[M2 {key}] {cell_kind} KL={kl:.5f} recal={fl_rec} bank={bank} replay_ok={replay_ok} WP={wp}") del cap,Ycl; free() if regime=="repetition": try: del feats_full,x2,ecur,s except Exception: pass free() # M2 rollup if len(res["M2"]["cells"])>=(2 if SMOKE else 39): cells=res["M2"]["cells"]; N_wp=sum(1 for k in cells if cells[k]["well_posed"]) ntot=len(cells) illposed=[k for k in cells if not cells[k]["well_posed"]] verdict=("WELL-POSED" if N_wp==ntot else ("MOSTLY-WELL-POSED" if N_wp>=ntot-5 else "ILL-POSED")) replay_misses=[k for k in cells if not cells[k]["replay_ok"]] res["M2"]["rollup"]={"n_cells":ntot,"N_wp":N_wp,"H_L3_WELLPOSED":verdict, "bet_favorite_hit":bool(verdict=="WELL-POSED"),"illposed_cells":illposed, "replay_misses":replay_misses,"legacy_pass":sum(1 for k in cells if cells[k]["legacy_pass"])} write_json() logln(f"[M2 ROLLUP] N_wp={N_wp}/{ntot} -> {verdict} replay_misses={replay_misses}") # ======================= M3 -- OFFSPAN (8 named axes) ======================= AXES=[ {"id":"core_dim0_naval","kind":"proj","vec":C[:,0],"b":6,"regime":"prose","name":"core dim0 naval/warship"}, {"id":"core_dim2_symbol","kind":"proj","vec":C[:,2],"b":6,"regime":"prose","name":"core dim2 special-symbol<->temporal"}, {"id":"corr_j4_clause","kind":"proj","vec":Q35[:,4],"b":2,"regime":"prose","name":"corr_j4 clause/delimiter-boundary (b2_d4)"}, {"id":"corr_j17_operator","kind":"proj","vec":Q35[:,17],"b":5,"regime":"code","name":"corr_j17 operator/keyword-anchor (b5_d5)"}, {"id":"door_qattn_top","kind":"proj","vec":Qa[:,0],"b":6,"regime":"prose","name":"door Q_attn top-variance"}, {"id":"fold_b12_d45_corp","kind":"proj","vec":None,"b":12,"regime":"prose","name":"fold O_r48_b12_d45 corporate-name-tail"}, {"id":"rung_repb6_onset","kind":"rung","b":6,"regime":"repetition","name":"rep_b6 onset rung input push (run forward)"}, {"id":"glitch_j0_DEAF","kind":"proj","vec":Q35[:,0],"b":2,"regime":"prose","name":"glitch axis b2_d0 (LEXICON DEAF control)"}, ] l1b=torch.load(os.path.join(DIR,"_l1_bases.pt"),map_location="cpu",weights_only=False) if "vec_fold_O_r48_b12_d45" in l1b: AXES[5]["vec"]=l1b["vec_fold_O_r48_b12_d45"].float() else: AXES[5]["vec"]=FOLD_O[("repetition",12)][:,45].cpu() for _i,_ax in enumerate(AXES): _ax["seed"]=20260706+_i*101 # deterministic per-axis null seed (resume-safe) if SMOKE: AXES=[AXES[0],AXES[7]] cap_by={} # (regime) -> capture def get_cap_m3(regime): if regime not in cap_by: ids=build_regime_hold(regime) cap_by[regime]={"ids":ids,"cap":capture_h_all(ids,f"M3-{regime}",extra_wm0=(regime=="repetition")), "Ycl":clean_logits(ids)} return cap_by[regime] for ax in AXES: if ax["id"] in res["M3"]["axes"]: continue if el()>SOFT_WALL_S and ax["id"]!="glitch_j0_DEAF": res["M3"]["axes"][ax["id"]]={"DROPPED":"budget wall"}; write_json(); continue cm=get_cap_m3(ax["regime"]); ids=cm["ids"]; cap=cm["cap"]; Ycl=cm["Ycl"]; N=ids.shape[0] b=ax["b"]; inj=InjectHook(M["blocks"][b-1]) if b>=1 else InjectHook(M["drop"]) gp=torch.Generator(device='cuda').manual_seed(ax["seed"]) rows={} if ax["kind"]=="proj": vec=ax["vec"].to('cuda'); vec=vec/vec.norm() Xc=cap[b].to('cuda')-mu_g[b]; coord=Xc@vec mu_c=float(coord.mean()); sd_c=float(coord.std()) # sigma-matched null dirs (orthogonal to vec) nulls=[] for _ in range(N_NULLDIR): r=torch.randn(d,generator=gp,device='cuda'); r=r-(r@vec)*vec; r=r/r.norm(); nulls.append(r) for k in K_GRID: mag=abs(k*sd_c) dvec=(k*sd_c)*vec delta=dvec.view(1,1,d).expand(N,CERT_BLOCK,d) if ax["regime"]=="repetition": dz=delta.clone(); dz[:, :IND_SEG, :]=0.0 kl_ax=inject_kl_pidx(ids,inj,dz,Ycl,torch.arange(IND_SEG,CERT_BLOCK)) else: kl_ax=inject_kl_full(ids,inj,delta,Ycl) kl_nulls=[] for r in nulls: dn=(mag*r).view(1,1,d).expand(N,CERT_BLOCK,d) if ax["regime"]=="repetition": dz=dn.clone(); dz[:, :IND_SEG, :]=0.0 kl_nulls.append(inject_kl_pidx(ids,inj,dz,Ycl,torch.arange(IND_SEG,CERT_BLOCK))) else: kl_nulls.append(inject_kl_full(ids,inj,dn,Ycl)) kl_null=sum(kl_nulls)/len(kl_nulls) rows[str(k)]={"kl_axis":round(kl_ax,5),"kl_null":round(kl_null,5), "R":round(kl_ax/max(kl_null,1e-9),4),"mag":round(mag,4)} logln(f"[M3 {ax['id']} k={k}] KLax={kl_ax:.5f} KLnull={kl_null:.5f} R={rows[str(k)]['R']}") else: # rung: push the s scalar off-span, run forward x2=cap[2].to('cuda')-mu_g[2]; ecur=wte_g[ids.reshape(-1).to('cuda')]; s=cap['wm0'].to('cuda')@Vk_g rung,scm,scs=RUNG[(ax["regime"],b)] with torch.no_grad(): oh_real=proj_compl(rung((torch.cat([x2,ecur,s],1)-scm)/scs)) sd_s=float(s.std()); obj_real=proj_compl(cap[b].to('cuda')-mu_g[b]) # null: random unit dirs in state space at matched magnitude nulls=[] for _ in range(N_NULLDIR): r=torch.randn(d,generator=gp,device='cuda'); r=r/r.norm(); nulls.append(r) for k in K_GRID: s2=s+k*sd_s with torch.no_grad(): oh_push=proj_compl(rung((torch.cat([x2,ecur,s2],1)-scm)/scs)) dvec=(oh_push-oh_real).reshape(N,CERT_BLOCK,d); mag=float(dvec.reshape(-1,d).norm(dim=1).mean()) dz=dvec.clone(); dz[:, :IND_SEG, :]=0.0 kl_ax=inject_kl_pidx(ids,inj,dz,Ycl,torch.arange(IND_SEG,CERT_BLOCK)) kl_nulls=[] for r in nulls: dn=(mag*r).view(1,1,d).expand(N,CERT_BLOCK,d) dz2=dn.clone(); dz2[:, :IND_SEG, :]=0.0 kl_nulls.append(inject_kl_pidx(ids,inj,dz2,Ycl,torch.arange(IND_SEG,CERT_BLOCK))) kl_null=sum(kl_nulls)/len(kl_nulls) rows[str(k)]={"kl_axis":round(kl_ax,5),"kl_null":round(kl_null,5), "R":round(kl_ax/max(kl_null,1e-9),4),"mag":round(mag,4)} logln(f"[M3 {ax['id']} k={k}] KLax={kl_ax:.5f} KLnull={kl_null:.5f} R={rows[str(k)]['R']}") inj.close(); free() # classification: R at |k|=10 (mean of +10,-10), monotone in |k| def klat(kk): return rows.get(str(kk),{}).get("kl_axis",0.0) R10=None if "10" in rows and "-10" in rows: R10=(rows["10"]["R"]+rows["-10"]["R"])/2 elif rows: R10=list(rows.values())[-1]["R"] pos_mono=all(klat(3)<=klat(5)<=klat(10) for _ in [0]) if all(str(x) in rows for x in (3,5,10)) else None cls=("STRUCTURED-EXTRAPOLATION" if (R10 is not None and R10>=1.5) else ("MANIFOLD-BOUND" if (R10 is not None and R10>1/1.5) else "SATURATING-OR-NULL")) res["M3"]["axes"][ax["id"]]={"name":ax["name"],"b":b,"regime":ax["regime"],"kind":ax["kind"], "rows":rows,"R_k10":(round(R10,4) if R10 is not None else None),"pos_monotone":pos_mono,"class":cls} write_json() logln(f"[M3 {ax['id']}] R(|k|=10)={R10} -> {cls}") # M3 rollup axcls=[v["class"] for v in res["M3"]["axes"].values() if isinstance(v,dict) and v.get("class")] if axcls: from collections import Counter modal=Counter(axcls).most_common(1)[0][0] res["M3"]["rollup"]={"n_axes":len(axcls),"classes":dict(Counter(axcls)),"modal_class":modal, "bet_favorite_hit":bool(modal=="MANIFOLD-BOUND")} write_json(); logln(f"[M3 ROLLUP] modal={modal} {dict(Counter(axcls))}") # ======================= FREEZE ENCODER_V1 ======================= if not SMOKE and res["M1"].get("done") and len(res["M2"]["cells"])>=39: ENC={"C":C.contiguous(),"B2":B2.contiguous(),"Q35":Q35.contiguous(),"Q_union":Qu.contiguous(), "Q_attn":Qa.contiguous(),"Q_mlp":Qm.contiguous(),"host_Q":hostQ.contiguous(), "read_W":read_W.contiguous(),"read_W_pinv":readW_pinv.contiguous(), "wte_W":wteW.contiguous(),"wte_c":wtec.contiguous(),"mu":mu.contiguous(),"Vk":Vk.contiguous(), "span5_cols":[B2.shape[1],Q35.shape[1]]} for (rg,b),O in FOLD_O.items(): ENC[f"fold_O_{rg}_b{b}"]=O.cpu().contiguous() for (rg,b),(rung,scm,scs) in RUNG.items(): ENC[f"rung_{rg}_b{b}_sd"]={k:v.cpu() for k,v in rung.state_dict().items()} ENC[f"rung_{rg}_b{b}_scaler_mean"]=scm.cpu(); ENC[f"rung_{rg}_b{b}_scaler_std"]=scs.cpu() tmp=ENCODER_PT+".tmp"; torch.save(ENC,tmp); os.replace(tmp,ENCODER_PT) enc_sha=sha256(ENCODER_PT) manifest={"version":"ENCODER_V1 1.0 (2026-07-06)","propose_only":True,"pre_registration":PEN, "decoder_source":"decoder_v7 (b1d2f464c00c3ef6)","lexicon":"LEXICON_V3 (71a51619a9bb25c3)", "seam_operators":"_l2babel_maps.pt ("+mapsha+")","encode_rules":res["encoder"]["channels"], "M1":res["M1"].get("VERDICT"),"M2":res["M2"].get("rollup"),"M3":res["M3"].get("rollup"), "encoder_pt_sha256_16":enc_sha,"source_sha256":{"decoder_v7_tensors.pt":d7sha, "_v5_floors_recal.json":frecsha,"LEXICON_V3.md":lexsha,"_l2babel_maps.pt":mapsha}} tmp=ENCODER_JSON+".tmp" with open(tmp,"w",encoding="utf-8") as f: json.dump(manifest,f,indent=1) os.replace(tmp,ENCODER_JSON) res["encoder"]["encoder_pt_sha256_16"]=enc_sha; res["encoder"]["frozen"]=True # well-posedness + offspan tables wp_table={"frozen":True,"instrument":"encode-then-decode substitution KL vs recal floors","eps_kl":EPS_KL, "rollup":res["M2"].get("rollup"),"cells":res["M2"]["cells"]} with open(WP_JSON+".tmp","w",encoding="utf-8") as f: json.dump(wp_table,f,indent=1) os.replace(WP_JSON+".tmp",WP_JSON) os_table={"frozen":True,"instrument":"off-span extrapolation, sigma-matched nulls","rollup":res["M3"].get("rollup"), "axes":res["M3"]["axes"]} with open(OS_JSON+".tmp","w",encoding="utf-8") as f: json.dump(os_table,f,indent=1) os.replace(OS_JSON+".tmp",OS_JSON) logln(f"[FREEZE] ENCODER_V1 sha={enc_sha} + WELLPOSEDNESS_TABLE_V1 + OFFSPAN_TABLE_V1") # ---- status ---- if SMOKE: c=res["M2"]["cells"]; ok=bool(res["M1"].get("done") and c and all(c[k]["identity_pass"] for k in c)) # at least one byte-replay must have been checked anyreplay=any(c[k]["bank"] is not None for k in c) res["status"]="SMOKE-"+("OK" if (ok and anyreplay) else "FAIL") res["S0_smoke"]={"M1":res["M1"].get("VERDICT"),"cells":list(c.keys()),"anyreplay":anyreplay} else: done=(res["M1"].get("done") and len(res["M2"]["cells"])>=39 and res["M2"].get("rollup") and res["encoder"].get("frozen")) res["status"]=("COMPLETE" if (done and not res["instrument_discrepancy"]) else ("COMPLETE-WITH-DISCREPANCY" if done else "PARTIAL")) save_bases(); write_json() if M["m"] is not None: del M["m"]; M["m"]=None; free() except Exception as e: res["fatal_error"]={"error":str(e),"trace":traceback.format_exc()} logln(f"FATAL {e}\n{traceback.format_exc()}"); res.setdefault("status","FATAL") write_json() logln(f"L3 END status={res.get('status')} elapsed={el()}s M2cells={len(res['M2']['cells'])}") open(os.path.join(DIR,"_l3_smoke_gpu.done" if SMOKE else "_l3_gpu.done"),"w").write(str(res.get("status","?"))+"\n") logln("*** L3_"+("SMOKE_" if SMOKE else "")+"DONE ***"); LOG.flush(); LOG.close(); print("done")