Files
logan 611a1a5952 docs: client-perf analysis, bench harness and work journal
Everything the next agent needs to run the Phase 2 optimisation loop on a
machine that can launch the client:

- analysis/client-perf/: LEVERS (ranked levers + corrections), BENCH-MATRIX
  (world, scenes, config IDs, blocks B0-B14 with decision rules),
  PLAYER-TUNING, SPAWN-TUNING, research briefs, the jar scanner and its
  output, observed default configs, and proposed-configs/ (build.py
  generates tiers and bench variants and fails on unknown keys;
  apply_variant.py applies a variant and merges options.txt).
- analysis/client-perf/bench/onion-bench/: bench-world datapack (scene
  teleports, Create grid, mob pen, sound storm, 120 s teleport tour).
- analysis/audit/: the static recipe/dependency audit, including gen_fixes.py,
  which generates the shipped Paxi datapack and was never tracked.
- phase0/: per-machine measurement harness (Steam Deck, 7700K/1060,
  6700K/1080 Ti).
- .pi/journal.md: running work log; read it first.

All of it is packwizignored, so nothing here ships to players.
2026-10-14 18:15:32 -04:00

43 lines
1.9 KiB
Python

import pickle,re
D=pickle.load(open("data.pkl","rb")); mods=D["mods"]
mods.setdefault("minecraft",[dict(jar="base",version="1.21.1",deps=[],nested=False)])
def vt(v): return [int(x) if x.isdigit() else x for x in re.split(r'[.\-+_]',v)]
def cmp(a,b):
a,b=vt(a),vt(b)
for x,y in zip(a,b):
if x==y: continue
if type(x)==type(y): return -1 if x<y else 1
return -1 if isinstance(x,str) else 1
return (len(a)>len(b))-(len(a)<len(b))
def inrange(v,r):
r=r.strip()
if not r or r=="*": return True
for part in re.findall(r'[\[\(][^\]\)]*[\]\)]',r) or [None]:
if part is None: return cmp(v,r)>=0
lo,_,hi=part[1:-1].partition(",")
if "," not in part:
if cmp(v,lo)==0: return True
continue
ok=True
if lo.strip(): c=cmp(v,lo.strip()); ok&= c>0 or (c==0 and part[0]=="[")
if hi.strip(): c=cmp(v,hi.strip()); ok&= c<0 or (c==0 and part[-1]=="]")
if ok: return True
return False
# duplicate modids among top-level jars
for mid,l in mods.items():
top=[x for x in l if not x["nested"]]
if len(top)>1: print("DUP-MODID",mid,[x["jar"] for x in top])
for mid,l in sorted(mods.items()):
e=[x for x in l if not x["nested"]] or l
for d in e[0]["deps"]:
t=str(d.get("type",d.get("mandatory") and "required" or "optional")).lower()
if d.get("mandatory") is True: t="required"
did=d.get("modId"); side=d.get("side","BOTH")
if t not in("required","incompatible","discouraged"): continue
if did not in mods:
if t=="required": print("MISSING",mid,"->",did,d.get("versionRange"),side)
continue
v=mods[did][0]["version"]; r=d.get("versionRange","")
if t=="required" and not v.startswith("$") and not inrange(v,r): print("VERSION",mid,"->",did,"needs",r,"have",v)
if t in("incompatible","discouraged") and (not r or inrange(v,r)): print(t.upper(),mid,"->",did,r,"have",v)