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.
30 lines
1.4 KiB
Python
30 lines
1.4 KiB
Python
import pickle,collections,re,json
|
|
D=pickle.load(open("data.pkl","rb")); A=pickle.load(open("active.pkl","rb")); tc=A["tagcache"]
|
|
models=D["models"]
|
|
name={}
|
|
for k,v in D["lang"].items():
|
|
_,ns,p=k.split("."); name.setdefault(ns+":"+p,v[0][1])
|
|
spec=collections.defaultdict(set)
|
|
for t,s in tc.items():
|
|
if t.startswith("c:") and "/" in t and len(s)<=8:
|
|
for i in s: spec[i].add(t)
|
|
new=set("""extradelight moredelight rusticdelight dungeonsdelight frightsdelight fruitsdelight minersdelight veggiesdelight overweight_farming barbequesdelight fishermans_haven fowlplay etched music_disc_maker too_many_bows mermod tarotcards chalk charta comforts petcemetery friendsandfoes""".split())
|
|
def norm(n): return re.sub(r'[^a-z]','',n.lower())
|
|
by=collections.defaultdict(set)
|
|
for i,n in name.items():
|
|
if i in models and isinstance(n,str) and "spawn_egg" not in i and not i.startswith(("sophisticated",)):
|
|
by[norm(n)].add(i)
|
|
# also group by registry path
|
|
for i in models:
|
|
p=i.split(":")[1]
|
|
if len(p)>3: by["path:"+p].add(i)
|
|
seen=set()
|
|
for k,s in sorted(by.items()):
|
|
nss={i.split(":")[0] for i in s}
|
|
if len(nss)<2 or "minecraft" in nss or not (nss&new): continue
|
|
key=frozenset(s)
|
|
if key in seen: continue
|
|
seen.add(key)
|
|
s=sorted(s); common=set.intersection(*[spec.get(i,set()) for i in s])
|
|
print(("UNIFIED " if common else "SPLIT ")+name.get(s[0],s[0])+": "+", ".join(s)+((" via "+",".join(sorted(common))) if common else ""))
|